commit 18e7226776301a82bb2c5715739b25f9c2b281ad Author: Alex Catarineu acat@torproject.org Date: Thu May 9 19:48:10 2019 +0200
Fix components and modules, and minor style changes --- src/chrome/content/preferences-mobile.js | 10 +- src/chrome/content/tor-circuit-display.js | 18 +-- src/chrome/content/torbutton.js | 230 +++++++++++++----------------- src/chrome/content/torbutton_util.js | 14 +- src/components/aboutTor.js | 21 +-- src/components/cookie-jar-selector.js | 131 +++++------------ src/components/domain-isolator.js | 19 ++- src/components/dragDropFilter.js | 16 +-- src/components/external-app-blocker.js | 13 +- src/components/torCheckService.js | 27 +--- src/components/torbutton-logger.js | 38 ++--- src/modules/default-prefs.js | 2 +- src/modules/noscript-control.js | 50 ++++--- src/modules/security-prefs.js | 9 +- src/modules/tor-control-port.js | 10 +- src/modules/utils.js | 16 +-- 16 files changed, 243 insertions(+), 381 deletions(-)
diff --git a/src/chrome/content/preferences-mobile.js b/src/chrome/content/preferences-mobile.js index e2da9b88..fa79dce8 100644 --- a/src/chrome/content/preferences-mobile.js +++ b/src/chrome/content/preferences-mobile.js @@ -1,12 +1,12 @@ // # Security Settings User Interface for Mobile
// Utilities -let { utils: Cu } = Components; -let { getBoolPref, getIntPref, setBoolPref, setIntPref, getCharPref } = - Cu.import("resource://gre/modules/Services.jsm", {}).Services.prefs; +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const { getBoolPref, getIntPref, setBoolPref, setIntPref, getCharPref } + = Services.prefs;
let { getLocale, show_torbrowser_manual } = - Cu.import("resource://torbutton/modules/utils.js", {}); + ChromeUtils.import("resource://torbutton/modules/utils.js", {});
// Description elements have the follow names. const descNames = @@ -64,7 +64,7 @@ function torbutton_set_learn_more_links() { locale = getLocale(); } let links = linkNames.map(name => document.getElementById(name)); - links.forEach(link => {; + links.forEach(link => { if (show_manual && locale != "") { link.href= "https:/tb-manual.torproject.org/" + locale + "/security-slider.html"; diff --git a/src/chrome/content/tor-circuit-display.js b/src/chrome/content/tor-circuit-display.js index 5ecbe7d7..05dc14de 100644 --- a/src/chrome/content/tor-circuit-display.js +++ b/src/chrome/content/tor-circuit-display.js @@ -26,18 +26,17 @@ let createTorCircuitDisplay = (function () { "use strict";
// Mozilla utilities -const { Cu : utils , Ci : interfaces } = Components.utils; -Cu.import("resource://gre/modules/Services.jsm"); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
// Import the controller code. -let { controller } = Cu.import("resource://torbutton/modules/tor-control-port.js", {}); +let { controller } = ChromeUtils.import("resource://torbutton/modules/tor-control-port.js", {});
// Utility functions -let { bindPrefAndInit, observe, getLocale, getDomainForBrowser } = Cu.import("resource://torbutton/modules/utils.js", {}); +let { bindPrefAndInit, observe, getLocale, getDomainForBrowser } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
// Make the TorButton logger available. let logger = Cc["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + .getService(Ci.nsISupports).wrappedJSObject;
// ## Circuit/stream credentials and node monitoring
@@ -209,18 +208,13 @@ let uiString = function (shortName) { return torbuttonBundle.GetStringFromName("torbutton.circuit_display." + shortName); };
-// __regionBundle__. -// A list of localized region (country) names. -let regionBundle = Services.strings.createBundle( - "chrome://global/locale/regionNames.properties"); - // __localizedCountryNameFromCode(countryCode)__. // Convert a country code to a localized country name. // Example: `'de'` -> `'Deutschland'` in German locale. let localizedCountryNameFromCode = function (countryCode) { if (!countryCode) return uiString("unknown_country"); try { - return regionBundle.GetStringFromName(countryCode.toLowerCase()); + return Services.intl.getRegionDisplayNames(undefined, [countryCode])[0]; } catch (e) { return countryCode.toUpperCase(); } @@ -363,7 +357,7 @@ let setupGuardNote = function () { ["div", {}, noteBefore, ["span", {class: "circuit-guard-name"}, name], noteAfter, " ", - ["span", {onclick: `gBrowser.selectedTab = gBrowser.addTab('https://support.torproject.org/$%7BlocaleCode%7D/tbb/tbb-2/%27);%60, + ["span", {onclick: `gBrowser.selectedTab = gBrowser.addTab('https://support.torproject.org/$%7BlocaleCode%7D/tbb/tbb-2/', {triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()});`, class: "circuit-link"}, learnMoreString]]); }; diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js index a7bd4f8c..d73ddf73 100644 --- a/src/chrome/content/torbutton.js +++ b/src/chrome/content/torbutton.js @@ -7,16 +7,20 @@ // TODO: Double-check there are no strange exploits to defeat: // http://kb.mozillazine.org/Links_to_local_pages_don%27t_work
-let { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); -const {AppConstants} = ChromeUtils.import("resource://gre/modules/AppConstants.jsm"); +/* global torbutton_log, gBrowser, torbutton_safelog, CustomizableUI, + createTorCircuitDisplay, torbutton_get_property_string, gFindBarInitialized, + gFindBar, OpenBrowserWindow, PrivateBrowsingUtils, torbutton_get_stringbundle, + Services, AppConstants + */ + let { showDialog, show_torbrowser_manual, unescapeTorString, bindPrefAndInit, getDomainForBrowser, -} = Cu.import("resource://torbutton/modules/utils.js", {}); -let SecurityPrefs = Cu.import("resource://torbutton/modules/security-prefs.js", {}); +} = ChromeUtils.import("resource://torbutton/modules/utils.js", {}); +let SecurityPrefs = ChromeUtils.import("resource://torbutton/modules/security-prefs.js", {});
const k_tb_last_browser_version_pref = "extensions.torbutton.lastBrowserVersion"; const k_tb_browser_update_needed_pref = "extensions.torbutton.updateNeeded"; @@ -44,8 +48,7 @@ var m_tb_control_host = null; // Set if using TCP. var m_tb_control_pass = null; var m_tb_control_desc = null; // For logging.
-var m_tb_domWindowUtils = window.QueryInterface(Ci.nsIInterfaceRequestor). - getInterface(Ci.nsIDOMWindowUtils); +var m_tb_domWindowUtils = window.windowUtils;
// Bug 1506 P1: This object is only for updating the UI for toggling and style var torbutton_window_pref_observer = @@ -91,9 +94,8 @@ var torbutton_unique_pref_observer = m_tb_prefs.addObserver("privacy.resistFingerprinting", this, false);
// We observe xpcom-category-entry-added for plugins w/ Gecko-Content-Viewers - var observerService = Cc["@mozilla.org/observer-service;1"]. - getService(Ci.nsIObserverService); - observerService.addObserver(this, "xpcom-category-entry-added", false); + var observerService = Services.obs; + observerService.addObserver(this, "xpcom-category-entry-added"); },
unregister: function() @@ -106,8 +108,7 @@ var torbutton_unique_pref_observer = m_tb_prefs.removeObserver("privacy.firstparty.isolate", this); m_tb_prefs.removeObserver("privacy.resistFingerprinting", this);
- var observerService = Cc["@mozilla.org/observer-service;1"]. - getService(Ci.nsIObserverService); + var observerService = Services.obs; observerService.removeObserver(this, "xpcom-category-entry-added"); },
@@ -165,11 +166,9 @@ var torbutton_unique_pref_observer = }
var torbutton_tor_check_observer = { - register: function() - { - this._obsSvc = Cc["@mozilla.org/observer-service;1"] - .getService(Ci.nsIObserverService); - this._obsSvc.addObserver(this, k_tb_tor_check_failed_topic, false); + register() { + this._obsSvc = Services.obs; + this._obsSvc.addObserver(this, k_tb_tor_check_failed_topic); },
unregister: function() @@ -189,22 +188,24 @@ var torbutton_tor_check_observer = {
// If the user does not have an about:tor tab open in the front most // window, open one. - var wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); + var wm = Services.wm; var win = wm.getMostRecentWindow("navigator:browser"); if (win == window) { let foundTab = false; - let tabBrowser = top.getBrowser(); + let tabBrowser = top.gBrowser; for (let i = 0; !foundTab && (i < tabBrowser.browsers.length); ++i) { let b = tabBrowser.getBrowserAtIndex(i); foundTab = (b.currentURI.spec.toLowerCase() == "about:tor"); }
- if (!foundTab) - gBrowser.selectedTab = gBrowser.addTab("about:tor"); + if (!foundTab) { + gBrowser.selectedTab = gBrowser.addTab("about:tor", { + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); + } } } - } + }, };
function torbutton_init_toolbutton() @@ -268,8 +269,8 @@ function torbutton_init() { } catch(e) {}
// Bug 1506 P4: These vars are very important for New Identity - var environ = Components.classes["@mozilla.org/process/environment;1"] - .getService(Components.interfaces.nsIEnvironment); + var environ = Cc["@mozilla.org/process/environment;1"] + .getService(Ci.nsIEnvironment);
if (environ.exists("TOR_CONTROL_PASSWD")) { m_tb_control_pass = environ.get("TOR_CONTROL_PASSWD"); @@ -282,10 +283,12 @@ function torbutton_init() { } catch(e) { torbutton_log(4, 'unable to read authentication cookie'); } - } else try { + } else { + try { // Try to get password from Tor Launcher. m_tb_control_pass = tlps.TorGetPassword(false); - } catch(e) {} + } catch (e) {} + }
// Try to get the control port IPC file (an nsIFile) from Tor Launcher, // since Tor Launcher knows how to handle its own preferences and how to @@ -341,9 +344,8 @@ function torbutton_init() { // This works only by setting the pref to `true` otherwise we get an // exception and nothing is happening. m_tb_prefs.setBoolPref("dom.quotaManager.testing", true); - Cc["@mozilla.org/dom/quota-manager-service;1"] - .getService(Ci.nsIQuotaManagerService).clear(); - } catch(e) { + Services.qms.clear(); + } catch (e) { } finally { m_tb_prefs.setBoolPref("dom.quotaManager.testing", orig_quota_test); } @@ -503,8 +505,7 @@ function torbutton_confirm_plugins() {
torbutton_log(3, "Confirming plugin usage.");
- var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Components.interfaces.nsIPromptService); + var prompts = Services.prompt;
// Display two buttons, both with string titles. var flags = prompts.STD_YES_NO_BUTTONS + prompts.BUTTON_DELAY_ENABLE; @@ -513,8 +514,7 @@ function torbutton_confirm_plugins() { var askAgainText = torbutton_get_property_string("torbutton.popup.never_ask_again"); var askAgain = {value: false};
- var wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); + var wm = Services.wm; var win = wm.getMostRecentWindow("navigator:browser"); var no_plugins = (prompts.confirmEx(win, "", message, flags, null, null, null, askAgainText, askAgain) == 1); @@ -531,8 +531,6 @@ function torbutton_confirm_plugins() {
// Now, if any tabs were open to about:addons, reload them. Our popup // messed up that page. - var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); var browserEnumerator = wm.getEnumerator("navigator:browser");
// Check each browser instance for our URL @@ -553,15 +551,13 @@ function torbutton_confirm_plugins() { }
function torbutton_inform_about_tbb() { - var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Components.interfaces.nsIPromptService); + var prompts = Services.prompt;
var message = torbutton_get_property_string("torbutton.popup.prompt_torbrowser"); var title = torbutton_get_property_string("torbutton.title.prompt_torbrowser"); var checkbox = {value: false};
- var sb = Components.classes["@mozilla.org/intl/stringbundle;1"] - .getService(Components.interfaces.nsIStringBundleService); + var sb = Services.strings; var browserstrings = sb.createBundle("chrome://browser/locale/browser.properties");
var askagain = browserstrings.GetStringFromName("privateBrowsingNeverAsk"); @@ -761,14 +757,14 @@ function torbutton_socket_readline(input) {
// Bug 1506 P4: Control port interaction. Needed for New Identity. function torbutton_read_authentication_cookie(path) { - var file = Components.classes['@mozilla.org/file/local;1'] - .createInstance(Components.interfaces.nsIFile); + var file = Cc["@mozilla.org/file/local;1"] + .createInstance(Ci.nsIFile); file.initWithPath(path); - var fileStream = Components.classes['@mozilla.org/network/file-input-stream;1'] - .createInstance(Components.interfaces.nsIFileInputStream); + var fileStream = Cc["@mozilla.org/network/file-input-stream;1"] + .createInstance(Ci.nsIFileInputStream); fileStream.init(file, 1, 0, false); - var binaryStream = Components.classes['@mozilla.org/binaryinputstream;1'] - .createInstance(Components.interfaces.nsIBinaryInputStream); + var binaryStream = Cc["@mozilla.org/binaryinputstream;1"] + .createInstance(Ci.nsIBinaryInputStream); binaryStream.setInputStream(fileStream); var array = binaryStream.readByteArray(fileStream.available()); binaryStream.close(); @@ -795,8 +791,7 @@ function torbutton_send_ctrl_cmd(command) { // suppressing/unsuppressing user initiated events in a window's document to // be sure that these events are not interfering with processing events being // in the event queue. - var thread = Cc["@mozilla.org/thread-manager;1"]. - getService(Ci.nsIThreadManager).currentThread; + var thread = Services.tm.currentThread; m_tb_domWindowUtils.suppressEventHandling(true); while (thread.processNextEvent(false)) {} m_tb_domWindowUtils.suppressEventHandling(false); @@ -871,15 +866,14 @@ function torbutton_new_identity() { // conditions leading to failures (see bug 11783 for an example). // TODO: Remove the Torbutton menu entry again once we have done our // security control redesign. - document.getElementById("torbutton-new-identity").disabled = true; + // document.getElementById("torbutton-new-identity").disabled = true; document.getElementById("menu_newIdentity").disabled = true; document.getElementById("appMenuNewIdentity").disabled = true;
let shouldConfirm = m_tb_prefs.getBoolPref("extensions.torbutton.confirm_newnym");
if (shouldConfirm) { - let prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"] - .getService(Ci.nsIPromptService); + let prompts = Services.prompt;
// Display two buttons, both with string titles. let flags = prompts.STD_YES_NO_BUTTONS; @@ -898,7 +892,7 @@ function torbutton_new_identity() { } else { // TODO: Remove the Torbutton menu entry again once we have done our // security control redesign. - document.getElementById("torbutton-new-identity").disabled = false; + // document.getElementById("torbutton-new-identity").disabled = false; document.getElementById("menu_newIdentity").disabled = false; document.getElementById("appMenuNewIdentity").disabled = false; } @@ -910,11 +904,11 @@ function torbutton_new_identity() { // enabled (again). // TODO: Remove the Torbutton menu entry again once we have done our // security control redesign. - document.getElementById("torbutton-new-identity").disabled = false; + torbutton_log(5, "Unexpected error on new identity: " + e); + window.alert("Torbutton: Unexpected error on new identity: " + e); + // document.getElementById("torbutton-new-identity").disabled = false; document.getElementById("menu_newIdentity").disabled = false; document.getElementById("appMenuNewIdentity").disabled = false; - torbutton_log(5, "Unexpected error on new identity: "+e); - window.alert("Torbutton: Unexpected error on new identity: "+e); } }
@@ -941,7 +935,7 @@ function torbutton_new_identity() { */ // Bug 1506 P4: Needed for New Identity. function torbutton_do_new_identity() { - var obsSvc = Components.classes["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService); + var obsSvc = Services.obs; torbutton_log(3, "New Identity: Disabling JS"); torbutton_disable_all_js();
@@ -995,9 +989,9 @@ function torbutton_do_new_identity() {
torbutton_log(3, "New Identity: Clearing HTTP Auth");
- if(m_tb_prefs.getBoolPref('extensions.torbutton.clear_http_auth')) { - var auth = Components.classes["@mozilla.org/network/http-auth-manager;1"]. - getService(Components.interfaces.nsIHttpAuthManager); + if (m_tb_prefs.getBoolPref("extensions.torbutton.clear_http_auth")) { + var auth = Cc["@mozilla.org/network/http-auth-manager;1"]. + getService(Ci.nsIHttpAuthManager); auth.clearAll(); }
@@ -1006,8 +1000,8 @@ function torbutton_do_new_identity() { // Clear all crypto auth tokens. This includes calls to PK11_LogoutAll(), // nsNSSComponent::LogoutAuthenticatedPK11() and clearing the SSL session // cache. - let sdr = Components.classes["@mozilla.org/security/sdr;1"]. - getService(Components.interfaces.nsISecretDecoderRing); + let sdr = Cc["@mozilla.org/security/sdr;1"]. + getService(Ci.nsISecretDecoderRing); sdr.logoutAndTeardown();
// This clears the OCSP cache. @@ -1047,8 +1041,7 @@ function torbutton_do_new_identity() { torbutton_log(3, "New Identity: Clearing Offline Cache");
try { - const LoadContextInfo = Cc["@mozilla.org/load-context-info-factory;1"] - .getService(Ci.nsILoadContextInfoFactory); + const LoadContextInfo = Services.loadContextInfo;
for (let contextInfo of [LoadContextInfo.default, LoadContextInfo.private]) { let appCacheStorage = Services.cache2.appCacheStorage(contextInfo, null); @@ -1089,19 +1082,18 @@ function torbutton_do_new_identity() { // This works only by setting the pref to `true` otherwise we get an // exception and nothing is happening. m_tb_prefs.setBoolPref("dom.quotaManager.testing", true); - Cc["@mozilla.org/dom/quota-manager-service;1"] - .getService(Ci.nsIQuotaManagerService).clear(); - } catch(e) { - torbutton_log(5, "Exception on storage clearing: "+e); + Services.qms.clear(); + } catch (e) { + torbutton_log(5, "Exception on storage clearing: " + e); } finally { m_tb_prefs.setBoolPref("dom.quotaManager.testing", orig_quota_test); }
torbutton_log(3, "New Identity: Clearing Cookies and DOM Storage");
- if (m_tb_prefs.getBoolPref('extensions.torbutton.cookie_protections')) { - var selector = Components.classes["@torproject.org/cookie-jar-selector;1"] - .getService(Components.interfaces.nsISupports) + if (m_tb_prefs.getBoolPref("extensions.torbutton.cookie_protections")) { + var selector = Cc["@torproject.org/cookie-jar-selector;1"] + .getService(Ci.nsISupports) .wrappedJSObject; // This emits "cookie-changed", "cleared", which kills DOM storage // and the safe browsing API key @@ -1119,18 +1111,12 @@ function torbutton_do_new_identity() {
// XXX: This may not clear zoom site-specific // browser.content.full-zoom - if (Ci.nsIContentPrefService2) { // Firefox >= 20 - XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", - "resource://gre/modules/PrivateBrowsingUtils.jsm"); - var pbCtxt = PrivateBrowsingUtils.privacyContextFromWindow(window); - var cps = Cc["@mozilla.org/content-pref/service;1"] - .getService(Ci.nsIContentPrefService2); - cps.removeAllDomains(pbCtxt); - } else { // Firefox < 20 - var cps = Cc["@mozilla.org/content-pref/service;1"]. - createInstance(Ci.nsIContentPrefService); - cps.removeGroupedPrefs(); - } + ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils", + "resource://gre/modules/PrivateBrowsingUtils.jsm"); + var pbCtxt = PrivateBrowsingUtils.privacyContextFromWindow(window); + var cps = Cc["@mozilla.org/content-pref/service;1"] + .getService(Ci.nsIContentPrefService2); + cps.removeAllDomains(pbCtxt);
torbutton_log(3, "New Identity: Syncing prefs");
@@ -1139,8 +1125,7 @@ function torbutton_do_new_identity() {
torbutton_log(3, "New Identity: Clearing permissions");
- let pm = Cc["@mozilla.org/permissionmanager;1"]. - getService(Ci.nsIPermissionManager); + let pm = Services.perms; pm.removeAll();
// Clear the domain isolation state. @@ -1234,8 +1219,7 @@ function torbutton_clear_image_caches() // Try to clear the private browsing cache. To do so, we must locate // a content document that is contained within a private browsing window. let didClearPBCache = false; - let wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Ci.nsIWindowMediator); + let wm = Services.wm; let enumerator = wm.getEnumerator("navigator:browser"); while (!didClearPBCache && enumerator.hasMoreElements()) { let win = enumerator.getNext(); @@ -1243,7 +1227,7 @@ function torbutton_clear_image_caches() if (!browserDoc.hasAttribute("privatebrowsingmode")) continue;
- let tabbrowser = win.getBrowser(); + let tabbrowser = win.gBrowser; if (!tabbrowser) continue;
@@ -1372,8 +1356,7 @@ function torbutton_local_tor_check() if (socksAddr && socksAddr.startsWith("file:")) { // Convert the file URL to a file path. try { - let ioService = Cc["@mozilla.org/network/io-service;1"] - .getService(Ci.nsIIOService); + let ioService = Services.io; let fph = ioService.getProtocolHandler("file") .QueryInterface(Ci.nsIFileProtocolHandler); socksIPCPath = fph.getFileFromURLSpec(socksAddr).path; @@ -1440,11 +1423,8 @@ function torbutton_local_tor_check() } // torbutton_local_tor_check
-function torbutton_initiate_remote_tor_check() -{ - let obsSvc = Cc["@mozilla.org/observer-service;1"] - .getService(Ci.nsIObserverService); - +function torbutton_initiate_remote_tor_check() { + let obsSvc = Services.obs; try { let checkSvc = Cc["@torproject.org/torbutton-torCheckService;1"] .getService(Ci.nsISupports).wrappedJSObject; @@ -1573,13 +1553,12 @@ function torbutton_close_tabs_on_new_identity() {
// TODO: muck around with browser.tabs.warnOnClose.. maybe.. torbutton_log(3, "Closing tabs..."); - let wm = Cc["@mozilla.org/appshell/window-mediator;1"] - .getService(Ci.nsIWindowMediator); + let wm = Services.wm; let enumerator = wm.getEnumerator("navigator:browser"); - let windowsToClose = new Array(); + let windowsToClose = []; while (enumerator.hasMoreElements()) { let win = enumerator.getNext(); - let browser = win.getBrowser(); + let browser = win.gBrowser; if (!browser) { torbutton_log(5, "No browser for possible closed window"); continue; @@ -1598,7 +1577,9 @@ function torbutton_close_tabs_on_new_identity() { }
if (win == window) { - browser.addTab("about:blank"); + browser.addTab("about:blank", { + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); } else { // It is a bad idea to alter the window list while iterating // over it, so add this window to an array and close it later. @@ -1672,9 +1653,8 @@ function torbutton_open_cookie_dialog() { // Bug 1506 P4: Used by New Identity if cookie protections are // not in use. function torbutton_clear_cookies() { - torbutton_log(2, 'called torbutton_clear_cookies'); - var cm = Components.classes["@mozilla.org/cookiemanager;1"] - .getService(Components.interfaces.nsICookieManager); + torbutton_log(2, "called torbutton_clear_cookies"); + var cm = Services.cookies;
cm.removeAll(); } @@ -1692,7 +1672,7 @@ function torbutton_disable_browser_js(browser) { torbutton_log(3, "No content window to disable JS events."); else eventSuppressor = browser.contentWindow. - QueryInterface(Components.interfaces.nsIInterfaceRequestor). + QueryInterface(Ci.nsIInterfaceRequestor). getInterface(Ci.nsIDOMWindowUtils); } catch(e) { torbutton_log(4, "Failed to disable JS events: "+e) @@ -1718,8 +1698,8 @@ function torbutton_disable_browser_js(browser) { // Bug 1506 P3: The JS-killing bits of this are used by // New Identity as a defense-in-depth measure. function torbutton_disable_window_js(win) { - var browser = win.getBrowser(); - if(!browser) { + var browser = win.gBrowser; + if (!browser) { torbutton_log(5, "No browser for plugin window..."); return; } @@ -1760,8 +1740,7 @@ function torbutton_disable_window_js(win) { // This is an ugly beast.. But unfortunately it has to be so.. // Looping over all tabs twice is not somethign we wanna do.. function torbutton_disable_all_js() { - var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); + var wm = Services.wm; var enumerator = wm.getEnumerator("navigator:browser"); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); @@ -1817,8 +1796,8 @@ function torbutton_do_startup() { if(m_tb_prefs.getBoolPref("extensions.torbutton.startup")) { // Bug 1506: Still want to do this - torbutton_toggle_plugins( - m_tb_prefs.getBoolPref("plugin.disable")); + // torbutton_toggle_plugins( + // m_tb_prefs.getBoolPref("plugin.disable"));
// Bug 1506: Should probably be moved to an XPCOM component torbutton_do_main_window_startup(); @@ -1839,7 +1818,7 @@ function torbutton_do_startup() if (!m_tb_tbb && m_tb_prefs.getBoolPref("extensions.torbutton.prompt_torbrowser")) { var warning = torbutton_get_property_string("torbutton.popup.short_torbrowser"); var title = torbutton_get_property_string("torbutton.title.prompt_torbrowser"); - var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); + var prompts = Services.prompt; prompts.alert(null, title, warning); }
@@ -1867,8 +1846,8 @@ function torbutton_new_tab(event) function torbutton_is_windowed(wind) { torbutton_log(3, "Window: (" + wind.outerWidth + "," + wind.outerHeight + ") ?= (" + wind.screen.availWidth + "," + wind.screen.availHeight + ")"); - if(wind.windowState == Components.interfaces.nsIDOMChromeWindow.STATE_MINIMIZED - || wind.windowState == Components.interfaces.nsIDOMChromeWindow.STATE_MAXIMIZED) { + if (wind.windowState == Ci.nsIDOMChromeWindow.STATE_MINIMIZED + || wind.windowState == Ci.nsIDOMChromeWindow.STATE_MAXIMIZED) { torbutton_log(2, "Window is minimized/maximized"); return false; } @@ -1904,8 +1883,9 @@ function showSecurityPreferencesPanel(chromeWindow) { if (settingsTab === null) { // Open up the settings panel in a new tab. tabBrowser.addTab(SECURITY_PREFERENCES_URI, { - 'selected': true, - 'parentId': tabBrowser.selectedTab.id + "selected": true, + "parentId": tabBrowser.selectedTab.id, + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), }); } else { // Activate an existing settings panel tab. @@ -1984,8 +1964,7 @@ function torbutton_close_window(event) { // But that is a major overhaul.. if (m_tb_is_main_window) { torbutton_log(3, "Original window closed. Searching for another"); - var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); + var wm = Services.wm; var enumerator = wm.getEnumerator("navigator:browser"); while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); @@ -2016,9 +1995,8 @@ function torbutton_close_window(event) {
function torbutton_open_network_settings() { - var obsSvc = Components.classes["@mozilla.org/observer-service;1"] - .getService(Ci.nsIObserverService); - obsSvc.notifyObservers(this, "TorOpenNetworkSettings", null); + var obsSvc = Services.obs; + obsSvc.notifyObservers(this, "TorOpenNetworkSettings"); }
@@ -2032,14 +2010,7 @@ var m_tb_resize_date = null; // probably not for android. var torbutton_resizelistener = { - QueryInterface: function(aIID) - { - if (aIID.equals(Ci.nsIWebProgressListener) || - aIID.equals(Ci.nsISupportsWeakReference) || - aIID.equals(Ci.nsISupports)) - return this; - throw Cr.NS_NOINTERFACE; - }, + QueryInterface: ChromeUtils.generateQI(["nsIWebProgressListener", "nsISupportsWeakReference"]),
onLocationChange: function(aProgress, aRequest, aURI) {}, onStateChange: function(aProgress, aRequest, aFlag, aStatus) { @@ -2072,10 +2043,8 @@ var torbutton_resizelistener = m_tb_resize_date = Date.now(); }
- let sb = torbutton_get_stringbundle(); // No need to get "OK" translated again. - let sbSvc = Cc["@mozilla.org/intl/stringbundle;1"]. - getService(Ci.nsIStringBundleService); + let sbSvc = Services.strings; let bundle = sbSvc. createBundle("chrome://global/locale/commonDialogs.properties"); let button_label = bundle.GetStringFromName("OK"); @@ -2141,8 +2110,7 @@ var torbutton_resizelistener = function torbutton_get_current_accept_language_value(aURI) { try { - let ioService = Cc["@mozilla.org/network/io-service;1"] - .getService(Ci.nsIIOService); + let ioService = Services.io; let channel = ioService.newChannelFromURI(aURI); let httpChannel = channel.QueryInterface(Ci.nsIHttpChannel); return httpChannel.getRequestHeader("Accept-Language"); diff --git a/src/chrome/content/torbutton_util.js b/src/chrome/content/torbutton_util.js index e6de7681..c7116a09 100644 --- a/src/chrome/content/torbutton_util.js +++ b/src/chrome/content/torbutton_util.js @@ -3,8 +3,9 @@ // code directly. I don't see any of them as essential for 1506, // really.
-var m_tb_torlog = Components.classes["@torproject.org/torbutton-logger;1"] -.getService(Components.interfaces.nsISupports).wrappedJSObject; +// let { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm", {}); +var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"] +.getService(Ci.nsISupports).wrappedJSObject;
var m_tb_string_bundle = torbutton_get_stringbundle();
@@ -28,10 +29,8 @@ function torbutton_get_prefbranch(branch_name) { var o_branch = false;
torbutton_log(1, "called get_prefbranch()"); - o_prefs = Components.classes["@mozilla.org/preferences-service;1"] - .getService(Components.interfaces.nsIPrefService); - if (!o_prefs) - { + o_prefs = Services.prefs; + if (!o_prefs) { torbutton_log(5, "Failed to get preferences-service!"); return false; } @@ -52,8 +51,7 @@ function torbutton_get_stringbundle() var o_stringbundle = false;
try { - var oBundle = Components.classes["@mozilla.org/intl/stringbundle;1"] - .getService(Components.interfaces.nsIStringBundleService); + var oBundle = Services.strings; o_stringbundle = oBundle.createBundle("chrome://torbutton/locale/torbutton.properties"); } catch(err) { o_stringbundle = false; diff --git a/src/components/aboutTor.js b/src/components/aboutTor.js index e3ee03d6..ec48d668 100644 --- a/src/components/aboutTor.js +++ b/src/components/aboutTor.js @@ -14,20 +14,15 @@ const kMODULE_CID = Components.ID("84d47da6-79c3-4661-aa9f-8049476f7bf5");
const kAboutTorURL = "chrome://torbutton/content/aboutTor/aboutTor.xhtml";
-const Cc = Components.classes; -const Ci = Components.interfaces; -const Cu = Components.utils; +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -function AboutTor() -{ -} +function AboutTor() {}
AboutTor.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutModule]), + QueryInterface: ChromeUtils.generateQI([Ci.nsIAboutModule]),
// nsIClassInfo implementation: classDescription: kMODULE_NAME, @@ -35,11 +30,9 @@ AboutTor.prototype = contractID: kMODULE_CONTRACTID,
// nsIAboutModule implementation: - newChannel: function(aURI, aLoadInfo) - { - let ioSvc = Cc["@mozilla.org/network/io-service;1"] - .getService(Ci.nsIIOService); - let uri = ioSvc.newURI(kAboutTorURL, null, null); + newChannel(aURI, aLoadInfo) { + let ioSvc = Services.io; + let uri = ioSvc.newURI(kAboutTorURL); let channel = ioSvc.newChannelFromURIWithLoadInfo(uri, aLoadInfo); channel.originalURI = aURI;
diff --git a/src/components/cookie-jar-selector.js b/src/components/cookie-jar-selector.js index 8456da3b..b3eeda53 100644 --- a/src/components/cookie-jar-selector.js +++ b/src/components/cookie-jar-selector.js @@ -18,12 +18,11 @@ const kMODULE_NAME = "Cookie Jar Selector"; const kMODULE_CONTRACTID = "@torproject.org/cookie-jar-selector;1"; const kMODULE_CID = Components.ID("e6204253-b690-4159-bfe8-d4eedab6b3be");
-const Cr = Components.results; -const Cu = Components.utils; - -Cu.import("resource://torbutton/modules/default-prefs.js", {}) +ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}) .ensureDefaultPrefs();
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); + // XXX: Must match the definition in torcookie.js :/ function Cookie(number,name,value,isDomain,host,rawHost,HttpOnly,path,isSecure,isSession, expires,isProtected) { @@ -42,73 +41,32 @@ function Cookie(number,name,value,isDomain,host,rawHost,HttpOnly,path,isSecure,i }
function CookieJarSelector() { - var Cc = Components.classes; - var Ci = Components.interfaces; - - this.logger = Components.classes["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + this.logger = Cc["@torproject.org/torbutton-logger;1"] + .getService(Ci.nsISupports).wrappedJSObject;
- this.logger.log(3, "Component Load 5: New CookieJarSelector "+kMODULE_CONTRACTID); + this.logger.log(3, "Component Load 5: New CookieJarSelector " + kMODULE_CONTRACTID);
- this.prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch); + this.prefs = Services.prefs;
var getProfileFile = function(filename) { - var loc = "ProfD"; // profile directory - var file = - Cc["@mozilla.org/file/directory_service;1"] - .getService(Ci.nsIProperties) + var loc = "ProfD"; // profile directory + var file = Services.dirsvc .get(loc, Ci.nsIFile) .clone(); file.append(filename); return file; };
- var copyProfileFile = function(src, dest) { - var srcfile = getProfileFile(src); - var destfile = getProfileFile(dest); - if (srcfile.exists()) { - // XXX: Permissions issue with Vista roaming profiles? - // Maybe file locking? - try { - if (destfile.exists()) { - destfile.remove(false); - } - } catch(e) { - this.logger.log(4, "Cookie file deletion exception: "+e); - } - try { - srcfile.copyTo(null, dest); - } catch(e) { - this.logger.log(5, "Cookie file copy exception: "+e); - } - } - }; - - var moveProfileFile = function(src, dest) { // FIXME: Why does this not work? - var srcfile = getProfileFile(src); - var destfile = getProfileFile(dest); - if (srcfile.exists()) { - if (destfile.exists()) { - destfile.remove(false); - } - srcfile.moveTo(null, dest); - } - }; - this.clearCookies = function() { try { - Cc["@mozilla.org/cookiemanager;1"] - .getService(Ci.nsICookieManager) - .removeAll(); - } catch(e) { - this.logger.log(4, "Cookie clearing exception: "+e); + Services.cookies.removeAll(); + } catch (e) { + this.logger.log(4, "Cookie clearing exception: " + e); } };
this._cookiesToJS = function(getSession) { - var cookieManager = - Cc["@mozilla.org/cookiemanager;1"] - .getService(Ci.nsICookieManager); + var cookieManager = Services.cookies; var cookiesEnum = cookieManager.enumerator; var cookiesAsJS = []; var count = 0; @@ -353,7 +311,7 @@ function CookieJarSelector() { var nextCookie = enumerator.getNext(); if (!nextCookie) break;
- nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie); + nextCookie = nextCookie.QueryInterface(Ci.nsICookie); for (var i = 0; i < protCookies.length; i++) { protcookie = protcookie || (nextCookie.host == protCookies[i].host && nextCookie.name == protCookies[i].name && @@ -371,7 +329,7 @@ function CookieJarSelector() { } // Emit cookie-changed event. This instructs other components to clear their identifiers // (Specifically DOM storage and safe browsing, but possibly others) - var obsSvc = Components.classes["@mozilla.org/observer-service;1"].getService(nsIObserverService); + var obsSvc = Cc["@mozilla.org/observer-service;1"].getService(nsIObserverService); obsSvc.notifyObservers(this, "cookie-changed", "cleared"); } catch (e) { this.logger.log(5, "Error deleting unprotected cookies: " + e); @@ -410,10 +368,8 @@ function CookieJarSelector() { };
// Check firefox version to know filename - var appInfo = Components.classes["@mozilla.org/xre/app-info;1"] - .getService(Components.interfaces.nsIXULAppInfo); - var versionChecker = Components.classes["@mozilla.org/xpcom/version-comparator;1"] - .getService(Components.interfaces.nsIVersionComparator); + // var appInfo = Services.appinfo; + // var versionChecker = Services.vc;
// This JSObject is exported directly to chrome this.wrappedJSObject = this; @@ -424,15 +380,8 @@ function CookieJarSelector() { this.timerCallback = { cookie_changed: false,
- QueryInterface: function(iid) { - if (!iid.equals(Component.interfaces.nsISupports) && - !iid.equals(Component.interfaces.nsITimer)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - return this; - }, - notify: function() { + QueryInterface: ChromeUtils.generateQI(["nsITimer"]), + notify() { // this refers to timerCallback object. use jarThis to reference // CookieJarSelector object. if(!this.cookie_changed) { @@ -450,27 +399,18 @@ function CookieJarSelector() {
}
-const nsISupports = Components.interfaces.nsISupports; -const nsIClassInfo = Components.interfaces.nsIClassInfo; -const nsIObserver = Components.interfaces.nsIObserver; -const nsITimer = Components.interfaces.nsITimer; -const nsIComponentRegistrar = Components.interfaces.nsIComponentRegistrar; -const nsIObserverService = Components.interfaces.nsIObserverService; -const nsICategoryManager = Components.interfaces.nsICategoryManager; +const nsISupports = Ci.nsISupports; +const nsIClassInfo = Ci.nsIClassInfo; +const nsIObserver = Ci.nsIObserver; +const nsITimer = Ci.nsITimer; +const nsIComponentRegistrar = Ci.nsIComponentRegistrar; +const nsIObserverService = Ci.nsIObserverService; +const nsICategoryManager = Ci.nsICategoryManager;
// Start1506: You may or may not care about this: CookieJarSelector.prototype = { - QueryInterface: function(iid) - { - if (!iid.equals(nsIClassInfo) && - !iid.equals(nsIObserver) && - !iid.equals(nsISupports)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - return this; - }, + QueryInterface: ChromeUtils.generateQI(["nsIClassInfo", "nsIObserver"]),
wrappedJSObject: null, // Initialized by constructor
@@ -496,19 +436,18 @@ CookieJarSelector.prototype = observe : function(aSubject, aTopic, aData) { switch(aTopic) { case "cookie-changed": - var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + var prefs = Services.prefs; this.timerCallback.cookie_changed = true; - + if (aData == "added" && prefs.getBoolPref("extensions.torbutton.cookie_auto_protect") - && !prefs.getBoolPref("extensions.torbutton.tor_memory_jar")) - { - this.addProtectedCookie(aSubject.QueryInterface(Components.interfaces.nsICookie2));//protect the new cookie! + && !prefs.getBoolPref("extensions.torbutton.tor_memory_jar")) { + this.addProtectedCookie(aSubject.QueryInterface(Ci.nsICookie2));// protect the new cookie! } break; case "profile-after-change": - var obsSvc = Components.classes["@mozilla.org/observer-service;1"].getService(nsIObserverService); - obsSvc.addObserver(this, "cookie-changed", false); + var obsSvc = Cc["@mozilla.org/observer-service;1"].getService(nsIObserverService); + obsSvc.addObserver(this, "cookie-changed"); // after profil loading, initialize a timer to call timerCallback // at a specified interval this.timer.initWithCallback(this.timerCallback, 60 * 1000, nsITimer.TYPE_REPEATING_SLACK); // 1 minute @@ -517,7 +456,7 @@ CookieJarSelector.prototype = } },
- timer: Components.classes["@mozilla.org/timer;1"].createInstance(nsITimer), + timer: Cc["@mozilla.org/timer;1"].createInstance(nsITimer),
}
@@ -525,7 +464,7 @@ CookieJarSelector.prototype = * XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4). * XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6). */ -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); if (XPCOMUtils.generateNSGetFactory) var NSGetFactory = XPCOMUtils.generateNSGetFactory([CookieJarSelector]); else diff --git a/src/components/domain-isolator.js b/src/components/domain-isolator.js index fc28703f..e04005a5 100644 --- a/src/components/domain-isolator.js +++ b/src/components/domain-isolator.js @@ -6,21 +6,19 @@ // call earlier functions). The code file can be processed // with docco.js to provide clear documentation.
-/* jshint esversion: 6 */ -/* global Components, console, XPCOMUtils */ - // ### Abbreviations -const Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils; + +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
// Make the logger available. let logger = Cc["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + .getService(Ci.nsISupports).wrappedJSObject;
-let { ensureDefaultPrefs } = Cu.import("resource://torbutton/modules/default-prefs.js", {}); +let { ensureDefaultPrefs } = ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}); ensureDefaultPrefs();
// Import Services object -Cu.import("resource://gre/modules/Services.jsm"); +ChromeUtils.import("resource://gre/modules/Services.jsm");
// Import crypto object (FF 37+). Cu.importGlobalProperties(["crypto"]); @@ -82,6 +80,8 @@ tor.socksProxyCredentials = function (originalProxy, domain) { proxy.port, domain, // username tor.noncesForDomains[domain], // password + "", // aProxyAuthorizationHeader + "", // aConnectionIsolationKey proxy.flags, proxy.failoverTimeout, proxy.failoverProxy); @@ -138,7 +138,6 @@ tor.isolateCircuitsByDomain = function () { } try { let channel = aChannel.QueryInterface(Ci.nsIChannel), - proxy = aProxy.QueryInterface(Ci.nsIProxyInfo), firstPartyDomain = channel.loadInfo.originAttributes.firstPartyDomain; if (firstPartyDomain === "") { firstPartyDomain = "--unknown--"; @@ -165,7 +164,7 @@ const kMODULE_CONTRACTID = "@torproject.org/domain-isolator;1"; const kMODULE_CID = Components.ID("e33fd6d4-270f-475f-a96f-ff3140279f68");
// Import XPCOMUtils object. -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
// DomainIsolator object. function DomainIsolator() { @@ -174,7 +173,7 @@ function DomainIsolator() {
// Firefox component requirements DomainIsolator.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]), + QueryInterface: ChromeUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]), classDescription: kMODULE_NAME, classID: kMODULE_CID, contractID: kMODULE_CONTRACTID, diff --git a/src/components/dragDropFilter.js b/src/components/dragDropFilter.js index 916b835f..4465187e 100644 --- a/src/components/dragDropFilter.js +++ b/src/components/dragDropFilter.js @@ -5,13 +5,11 @@ * access to URLs (a potential proxy bypass vector). *************************************************************************/
-const Cc = Components.classes; -const Ci = Components.interfaces; -const Cu = Components.utils;
-Cu.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs(); +ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs();
-Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
// Module specific constants const kMODULE_NAME = "Torbutton Drag and Drop Handler"; @@ -26,17 +24,15 @@ function DragDropFilter() { this.logger.log(3, "Component Load 0: New DragDropFilter.");
try { - var observerService = Cc["@mozilla.org/observer-service;1"]. - getService(Ci.nsIObserverService); - observerService.addObserver(this, "on-datatransfer-available", false); - } catch(e) { + Services.obs.addObserver(this, "on-datatransfer-available"); + } catch (e) { this.logger.log(5, "Failed to register drag observer"); } }
DragDropFilter.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]), + QueryInterface: ChromeUtils.generateQI([Ci.nsISupports, Ci.nsIObserver]),
// make this an nsIClassInfo object flags: Ci.nsIClassInfo.DOM_OBJECT, diff --git a/src/components/external-app-blocker.js b/src/components/external-app-blocker.js index 1f88fc78..747824d1 100644 --- a/src/components/external-app-blocker.js +++ b/src/components/external-app-blocker.js @@ -12,14 +12,9 @@ * handle an URL (e.g., when the user clicks on a mailto: URL). *************************************************************************/
-const Cc = Components.classes; -const Ci = Components.interfaces; -const Cr = Components.results; -const Cu = Components.utils; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/SharedPromptUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const {PromptUtils} = ChromeUtils.import("resource://gre/modules/SharedPromptUtils.jsm");
// Module specific constants const kMODULE_NAME = "Torbutton External App Handler"; @@ -38,7 +33,7 @@ ExternalAppBlocker.prototype = { _helperAppLauncher: undefined,
- QueryInterface: XPCOMUtils.generateQI([Ci.nsISupports, Ci.nsIObserver, + QueryInterface: ChromeUtils.generateQI([Ci.nsISupports, Ci.nsIObserver, Ci.nsIHelperAppWarningDialog]),
// make this an nsIClassInfo object diff --git a/src/components/torCheckService.js b/src/components/torCheckService.js index 19e13f49..4f79bef4 100644 --- a/src/components/torCheckService.js +++ b/src/components/torCheckService.js @@ -7,16 +7,13 @@ * Tor check service *************************************************************************/
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); + // Module specific constants const kMODULE_NAME = "Torbutton Tor Check Service"; const kMODULE_CONTRACTID = "@torproject.org/torbutton-torCheckService;1"; const kMODULE_CID = Components.ID("5d57312b-5d8c-4169-b4af-e80d6a28a72e");
-const Cr = Components.results; -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cu = Components.utils; - function TBTorCheckService() { this._logger = Cc["@torproject.org/torbutton-logger;1"] .getService(Ci.nsISupports).wrappedJSObject; @@ -28,15 +25,7 @@ function TBTorCheckService() {
TBTorCheckService.prototype = { - QueryInterface: function(iid) { - if (!iid.equals(Ci.nsIClassInfo) && - !iid.equals(Ci.nsISupports)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - - return this; - }, + QueryInterface: ChromeUtils.generateQI([Ci.nsISupports, Ci.nsIClassInfo]),
kCheckNotInitiated: 0, // Possible values for statusOfTorCheck. kCheckSuccessful: 1, @@ -79,10 +68,8 @@ TBTorCheckService.prototype = { Cu.importGlobalProperties(["XMLHttpRequest"]); let req = new XMLHttpRequest(); - let prefs = Cc["@mozilla.org/preferences-service;1"] - .getService(Ci.nsIPrefBranch); - let url = prefs.getCharPref("extensions.torbutton.test_url"); - req.open('GET', url, aAsync); + let url = Services.prefs.getCharPref("extensions.torbutton.test_url"); + req.open("GET", url, aAsync); req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE; req.overrideMimeType("text/xml"); req.timeout = 120000; // Wait at most two minutes for a response. @@ -140,8 +127,8 @@ TBTorCheckService.prototype = }
return ret; - } + }, };
-Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); var NSGetFactory = XPCOMUtils.generateNSGetFactory([TBTorCheckService]); diff --git a/src/components/torbutton-logger.js b/src/components/torbutton-logger.js index fdf7bb7d..ce4ba70b 100644 --- a/src/components/torbutton-logger.js +++ b/src/components/torbutton-logger.js @@ -13,31 +13,25 @@ const kMODULE_NAME = "Torbutton Logger"; const kMODULE_CONTRACTID = "@torproject.org/torbutton-logger;1"; const kMODULE_CID = Components.ID("f36d72c9-9718-4134-b550-e109638331d7");
-const Cr = Components.results; -const Cc = Components.classes; -const Ci = Components.interfaces; -const Cu = Components.utils; +ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs();
-Cu.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs(); - -Cu.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
function TorbuttonLogger() { // Register observer - Services.prefs.addObserver("extensions.torbutton", this, false); + Services.prefs.addObserver("extensions.torbutton", this);
this.loglevel = Services.prefs.getIntPref("extensions.torbutton.loglevel"); this.logmethod = Services.prefs.getIntPref("extensions.torbutton.logmethod");
try { - var logMngr = Components.classes["@mozmonkey.com/debuglogger/manager;1"] - .getService(Components.interfaces.nsIDebugLoggerManager); + var logMngr = Cc["@mozmonkey.com/debuglogger/manager;1"] + .getService(Ci.nsIDebugLoggerManager); this._debuglog = logMngr.registerLogger("torbutton"); } catch (exErr) { this._debuglog = false; } - this._console = Components.classes["@mozilla.org/consoleservice;1"] - .getService(Components.interfaces.nsIConsoleService); + this._console = Services.console;
// This JSObject is exported directly to chrome this.wrappedJSObject = this; @@ -50,10 +44,10 @@ function TorbuttonLogger() { * Everything below is boring boilerplate and can probably be ignored. */
-const nsISupports = Components.interfaces.nsISupports; -const nsIClassInfo = Components.interfaces.nsIClassInfo; -const nsIComponentRegistrar = Components.interfaces.nsIComponentRegistrar; -const nsIObserverService = Components.interfaces.nsIObserverService; +const nsISupports = Ci.nsISupports; +const nsIClassInfo = Ci.nsIClassInfo; +const nsIComponentRegistrar = Ci.nsIComponentRegistrar; +const nsIObserverService = Ci.nsIObserverService;
const logString = { 1:"VERB", 2:"DBUG", 3: "INFO", 4:"NOTE", 5:"WARN" };
@@ -64,15 +58,7 @@ function padInt(i)
TorbuttonLogger.prototype = { - QueryInterface: function(iid) - { - if (!iid.equals(nsIClassInfo) && - !iid.equals(nsISupports)) { - Components.returnCode = Cr.NS_ERROR_NO_INTERFACE; - return null; - } - return this; - }, + QueryInterface: ChromeUtils.generateQI([Ci.nsISupports, Ci.nsIClassInfo]),
wrappedJSObject: null, // Initialized by constructor
@@ -176,7 +162,7 @@ TorbuttonLogger.prototype = * XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4). * XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6). */ -Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); +const {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); if (XPCOMUtils.generateNSGetFactory) var NSGetFactory = XPCOMUtils.generateNSGetFactory([TorbuttonLogger]); else diff --git a/src/modules/default-prefs.js b/src/modules/default-prefs.js index 6a2bd86c..5ea549f4 100644 --- a/src/modules/default-prefs.js +++ b/src/modules/default-prefs.js @@ -4,7 +4,7 @@ function ensureDefaultPrefs () { if (loaded) { return; } - Components.utils.import("resource://gre/modules/Services.jsm"); + const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const kDefaultPreferences = "resource://torbutton/defaults/preferences/preferences.js"; const defaultPrefBranch = Services.prefs.getDefaultBranch(null);
diff --git a/src/modules/noscript-control.js b/src/modules/noscript-control.js index 4513dce8..0daf15e1 100644 --- a/src/modules/noscript-control.js +++ b/src/modules/noscript-control.js @@ -1,17 +1,16 @@ // # NoScript settings control (for binding to Security Slider)
-/* jshint esversion:6 */ - // ## Utilities
-const { utils: Cu } = Components; -const { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); -const { LegacyExtensionContext } = - Cu.import("resource://gre/modules/LegacyExtensionsUtils.jsm", {}); +const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm", {}); const { bindPref } = - Cu.import("resource://torbutton/modules/utils.js", {}); -let logger = Components.classes["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + ChromeUtils.import("resource://torbutton/modules/utils.js", {}); + +const { ExtensionUtils } = ChromeUtils.import("resource://gre/modules/ExtensionUtils.jsm"); +const { MessageChannel } = ChromeUtils.import("resource://gre/modules/MessageChannel.jsm"); + +let logger = Cc["@torproject.org/torbutton-logger;1"] + .getService(Ci.nsISupports).wrappedJSObject; let log = (level, msg) => logger.log(level, msg);
// ## NoScript settings @@ -100,20 +99,28 @@ var initialize = () => { initialized = true;
try { - // A mock extension object that can communicate with another extension - // via the WebExtensions sendMessage/onMessage mechanism. - let extensionContext = new LegacyExtensionContext({ id : noscriptID }); + // LegacyExtensionContext is not there anymore. Using raw + // Services.mm.broadcastAsyncMessage mecanism to communicate with + // NoScript.
// The component that handles WebExtensions' sendMessage. - let messageManager = extensionContext.messenger.messageManagers[0];
// __setNoScriptSettings(settings)__. // NoScript listens for internal settings with onMessage. We can send // a new settings JSON object according to NoScript's // protocol and these are accepted! See the use of // `browser.runtime.onMessage.addListener(...)` in NoScript's bg/main.js. + + // TODO: Is there a better way? let sendNoScriptSettings = settings => - extensionContext.messenger.sendMessage(messageManager, settings, noscriptID); + Services.mm.broadcastAsyncMessage("MessageChannel:Messages", [{ + messageName: "Extension:Message", + sender: { id: noscriptID, extensionId: noscriptID }, + recipient: { extensionId: noscriptID }, + data: new StructuredCloneHolder(settings), + channelId: ExtensionUtils.getUniqueId(), + responseType: MessageChannel.RESPONSE_NONE, + }]);
// __setNoScriptSafetyLevel(safetyLevel)__. // Set NoScript settings according to a particular safety level @@ -129,13 +136,20 @@ var initialize = () => {
// Wait for the first message from NoScript to arrive, and then // bind the security_slider pref to the NoScript settings. - let messageListener = (a,b,c) => { + const listener = ({ data }) => { + for (const msg of data) { + if (msg.recipient.extensionId === noscriptID) { + messageListener(msg.data.deserialize({}), msg.sender); + } + } + }; + let messageListener = (a, b, c) => { try { - log(3, `Message received from NoScript: ${JSON.stringify([a,b,c])}`); + log(3, `Message received from NoScript: ${JSON.stringify([a, b, c])}`); if (!["started", "pageshow"].includes(a.__meta.name)) { return; } - extensionContext.api.browser.runtime.onMessage.removeListener(messageListener); + Services.mm.removeMessageListener("MessageChannel:Messages", listener); let noscriptPersist = Services.prefs.getBoolPref("extensions.torbutton.noscript_persist", false); let noscriptInited = Services.prefs.getBoolPref("extensions.torbutton.noscript_inited", false); // Set the noscript safety level once if we have never run noscript @@ -153,7 +167,7 @@ var initialize = () => { log(5, e.message); } }; - extensionContext.api.browser.runtime.onMessage.addListener(messageListener); + Services.mm.addMessageListener("MessageChannel:Messages", listener); log(3, "Listening for message from NoScript."); } catch (e) { log(5, e.message); diff --git a/src/modules/security-prefs.js b/src/modules/security-prefs.js index fa97b70d..ffc5ee39 100644 --- a/src/modules/security-prefs.js +++ b/src/modules/security-prefs.js @@ -2,13 +2,12 @@
// ### Utilities
-let {classes: Cc, utils: Cu } = Components; let { getBoolPref, setBoolPref, getIntPref, setIntPref } = - Cu.import("resource://gre/modules/Services.jsm", {}).Services.prefs; + ChromeUtils.import("resource://gre/modules/Services.jsm", {}).Services.prefs; let { bindPref, bindPrefAndInit } = - Cu.import("resource://torbutton/modules/utils.js", {}); -let logger = Components.classes["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + ChromeUtils.import("resource://torbutton/modules/utils.js", {}); +let logger = Cc["@torproject.org/torbutton-logger;1"] + .getService(Ci.nsISupports).wrappedJSObject; let log = (level, msg) => logger.log(level, msg);
// ### Constants diff --git a/src/modules/tor-control-port.js b/src/modules/tor-control-port.js index 2c399367..f1d9ed14 100644 --- a/src/modules/tor-control-port.js +++ b/src/modules/tor-control-port.js @@ -19,15 +19,15 @@ "use strict";
// ### Mozilla Abbreviations -let {classes: Cc, interfaces: Ci, results: Cr, Constructor: CC, utils: Cu } = Components; +let { Constructor: CC } = Components;
// ### Import Mozilla Services -Cu.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
// __log__. // Logging function let logger = Cc["@torproject.org/torbutton-logger;1"] - .getService(Components.interfaces.nsISupports).wrappedJSObject; + .getService(Ci.nsISupports).wrappedJSObject; let log = x => logger.eclog(3, x.trimRight().replace(/\r\n/g, "\n"));
// ### announce this file @@ -42,8 +42,8 @@ let io = {}; // given ipcFile or host and port. io.asyncSocketStreams = function (ipcFile, host, port) { let sts = Cc["@mozilla.org/network/socket-transport-service;1"] - .getService(Components.interfaces.nsISocketTransportService), - UNBUFFERED = Ci.nsITransport.OPEN_UNBUFFERED; + .getService(Ci.nsISocketTransportService), + UNBUFFERED = Ci.nsITransport.OPEN_UNBUFFERED;
// Create an instance of a socket transport. let socketTransport; diff --git a/src/modules/utils.js b/src/modules/utils.js index d7baca6e..7b81819d 100644 --- a/src/modules/utils.js +++ b/src/modules/utils.js @@ -1,14 +1,8 @@ // # Utils.js // Various helpful utility functions.
-// ### Shortcut -const { Cu: utils, Cr: results } = Components; - // ### Import Mozilla Services -Cu.import("resource://gre/modules/Services.jsm"); - -// ### Import global URL -Cu.importGlobalProperties(["URL"]); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
// ### About firstPartyDomain literal const k_tb_about_uri_first_party_domain = "about.ef2a7dd5-93bc-417f-a698-142c3116864f.mozilla"; @@ -76,8 +70,8 @@ var observe = function (topic, callback) {
// __env__. // Provides access to process environment variables. -let env = Components.classes["@mozilla.org/process/environment;1"] - .getService(Components.interfaces.nsIEnvironment); +let env = Cc["@mozilla.org/process/environment;1"] + .getService(Ci.nsIEnvironment);
// __getEnv(name)__. // Reads the environment variable of the given name. @@ -88,8 +82,8 @@ var getEnv = function (name) { // __getLocale // Reads the browser locale, the default locale is en-US. var getLocale = function() { - return Services.locale.getRequestedLocale() || "en-US"; -} + return Services.locale.requestedLocale || "en-US"; +};
// ## Windows
tbb-commits@lists.torproject.org