[tbb-commits] [torbutton/master] Fix components and modules, and minor style changes
gk at torproject.org
gk at torproject.org
Wed Aug 7 19:21:07 UTC 2019
commit 18e7226776301a82bb2c5715739b25f9c2b281ad
Author: Alex Catarineu <acat at 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/${localeCode}/tbb/tbb-2/');`,
+ ["span", {onclick: `gBrowser.selectedTab = gBrowser.addTab('https://support.torproject.org/${localeCode}/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
More information about the tbb-commits
mailing list