Browse Source

WIP for bug 1440094

Ian Neal 1 year ago
parent
commit
e9e07caf3b

+ 26 - 0
WIP/comm-patches/port1440094.patch

@@ -0,0 +1,26 @@
+# HG changeset patch
+# User Ian Neal <iann_cvs@blueyonder.co.uk>
+# Date 1697380003 -3600
+# Parent  2c09f3ccd2b2ba40e68a92020d892192f254e2c1
+
+diff --git a/suite/components/sanitize/Sanitizer.jsm b/suite/components/sanitize/Sanitizer.jsm
+--- a/suite/components/sanitize/Sanitizer.jsm
++++ b/suite/components/sanitize/Sanitizer.jsm
+@@ -5,17 +5,16 @@
+ 
+ var EXPORTED_SYMBOLS = ["Sanitizer"];
+ 
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ 
+ XPCOMUtils.defineLazyModuleGetters(this, {
+   AppConstants: "resource://gre/modules/AppConstants.jsm",
+-  console: "resource://gre/modules/Console.jsm",
+   Downloads: "resource://gre/modules/Downloads.jsm",
+   DownloadsCommon: "resource:///modules/DownloadsCommon.jsm",
+   FormHistory: "resource://gre/modules/FormHistory.jsm",
+   PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
+   setTimeout: "resource://gre/modules/Timer.jsm",
+ });
+ 
+ XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager",

+ 34 - 0
WIP/mozilla-patches/1440094-1-60a1.patch

@@ -0,0 +1,34 @@
+# HG changeset patch
+# User Brian Grinstead <bgrinstead@mozilla.com>
+# Date 1519759775 28800
+# Node ID 3c562a1430861a1f06cde3e312e1867e97384a0c
+# Parent  5e8f202b04d82eca111fd4ee5a96228b149c35ec
+Bug 1440094 - Allow `console` as a global for eslint;r=mossop
+
+As of Bug 1425463 it's available in all contexts (including JSM). The following
+patche is going to remove imports to Console.jsm, so prepare for this by allowing
+it to be used as a global in eslint.
+
+MozReview-Commit-ID: 3gCIspnlVgB
+
+diff --git a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
+--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
++++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/configs/recommended.js
+@@ -46,16 +46,17 @@ module.exports = {
+     "StopIteration": false,
+     "StructuredCloneHolder": false,
+     "WebAssembly": false,
+     "WebExtensionContentScript": false,
+     "WebExtensionPolicy": false,
+     "WebrtcGlobalInformation": false,
+     // Non-standard, specific to Firefox.
+     "XULElement": false,
++    "console": true,
+     "dump": true,
+     "openDialog": false,
+     "sizeToContent": false,
+     // Specific to Firefox
+     // eslint-disable-next-line max-len
+     // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/uneval
+     "uneval": false
+   },

+ 886 - 0
WIP/mozilla-patches/1440094-2-60a1.patch

@@ -0,0 +1,886 @@
+# HG changeset patch
+# User Brian Grinstead <bgrinstead@mozilla.com>
+# Date 1519759799 28800
+# Node ID a3fce90849696d5d5f647db889cb0616f6095727
+# Parent  941b25a777cea373a9b780b9ab44dce31210766b
+Bug 1440094 - Remove imports to Console.jsm that only access the 'console' object;r=mossop
+
+Importing this object is unnecessary after the updates to the WebIDL console from Bug 1425574
+and the follow-ups blocking Bug 1430810. There are still callers that access Console.jsm
+to create custom ConsoleAPI objects, but those will be handled separately.
+
+MozReview-Commit-ID: 9ojFxtkpPId
+
+diff --git a/browser/base/content/sanitize.js b/browser/base/content/sanitize.js
+--- a/browser/base/content/sanitize.js
++++ b/browser/base/content/sanitize.js
+@@ -10,17 +10,16 @@ ChromeUtils.import("resource://gre/modul
+ 
+ XPCOMUtils.defineLazyModuleGetters(this, {
+   AppConstants: "resource://gre/modules/AppConstants.jsm",
+   PlacesUtils: "resource://gre/modules/PlacesUtils.jsm",
+   FormHistory: "resource://gre/modules/FormHistory.jsm",
+   Downloads: "resource://gre/modules/Downloads.jsm",
+   DownloadsCommon: "resource:///modules/DownloadsCommon.jsm",
+   TelemetryStopwatch: "resource://gre/modules/TelemetryStopwatch.jsm",
+-  console: "resource://gre/modules/Console.jsm",
+   setTimeout: "resource://gre/modules/Timer.jsm",
+ });
+ 
+ XPCOMUtils.defineLazyServiceGetter(this, "serviceWorkerManager",
+                                    "@mozilla.org/serviceworkers/manager;1",
+                                    "nsIServiceWorkerManager");
+ XPCOMUtils.defineLazyServiceGetter(this, "quotaManagerService",
+                                    "@mozilla.org/dom/quota-manager-service;1",
+diff --git a/browser/components/sessionstore/SessionFile.jsm b/browser/components/sessionstore/SessionFile.jsm
+--- a/browser/components/sessionstore/SessionFile.jsm
++++ b/browser/components/sessionstore/SessionFile.jsm
+@@ -25,18 +25,16 @@ var EXPORTED_SYMBOLS = ["SessionFile"];
+  * This implementation uses OS.File, which guarantees property 1.
+  */
+ 
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ ChromeUtils.import("resource://gre/modules/osfile.jsm");
+ ChromeUtils.import("resource://gre/modules/AsyncShutdown.jsm");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+ ChromeUtils.defineModuleGetter(this, "PromiseUtils",
+   "resource://gre/modules/PromiseUtils.jsm");
+ ChromeUtils.defineModuleGetter(this, "RunState",
+   "resource:///modules/sessionstore/RunState.jsm");
+ ChromeUtils.defineModuleGetter(this, "TelemetryStopwatch",
+   "resource://gre/modules/TelemetryStopwatch.jsm");
+ XPCOMUtils.defineLazyServiceGetter(this, "Telemetry",
+   "@mozilla.org/base/telemetry;1", "nsITelemetry");
+diff --git a/browser/components/sessionstore/SessionSaver.jsm b/browser/components/sessionstore/SessionSaver.jsm
+--- a/browser/components/sessionstore/SessionSaver.jsm
++++ b/browser/components/sessionstore/SessionSaver.jsm
+@@ -8,17 +8,16 @@ var EXPORTED_SYMBOLS = ["SessionSaver"];
+ 
+ ChromeUtils.import("resource://gre/modules/Timer.jsm", this);
+ ChromeUtils.import("resource://gre/modules/Services.jsm", this);
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm", this);
+ ChromeUtils.import("resource://gre/modules/TelemetryStopwatch.jsm", this);
+ 
+ XPCOMUtils.defineLazyModuleGetters(this, {
+   AppConstants: "resource://gre/modules/AppConstants.jsm",
+-  console: "resource://gre/modules/Console.jsm",
+   PrivacyFilter: "resource:///modules/sessionstore/PrivacyFilter.jsm",
+   RunState: "resource:///modules/sessionstore/RunState.jsm",
+   SessionStore: "resource:///modules/sessionstore/SessionStore.jsm",
+   SessionFile: "resource:///modules/sessionstore/SessionFile.jsm",
+   PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.jsm",
+ });
+ 
+ /*
+diff --git a/browser/components/sessionstore/SessionStorage.jsm b/browser/components/sessionstore/SessionStorage.jsm
+--- a/browser/components/sessionstore/SessionStorage.jsm
++++ b/browser/components/sessionstore/SessionStorage.jsm
+@@ -4,19 +4,16 @@
+ 
+ "use strict";
+ 
+ var EXPORTED_SYMBOLS = ["SessionStorage"];
+ 
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+-
+ const ssu = Cc["@mozilla.org/browser/sessionstore/utils;1"]
+               .createInstance(Ci.nsISessionStoreUtils);
+ 
+ // A bound to the size of data to store for DOM Storage.
+ const DOM_STORAGE_LIMIT_PREF = "browser.sessionstore.dom_storage_limit";
+ 
+ // Returns the principal for a given |frame| contained in a given |docShell|.
+ function getPrincipalForFrame(docShell, frame) {
+diff --git a/browser/components/sessionstore/SessionStore.jsm b/browser/components/sessionstore/SessionStore.jsm
+--- a/browser/components/sessionstore/SessionStore.jsm
++++ b/browser/components/sessionstore/SessionStore.jsm
+@@ -174,17 +174,16 @@ XPCOMUtils.defineLazyModuleGetters(this,
+   SessionSaver: "resource:///modules/sessionstore/SessionSaver.jsm",
+   TabAttributes: "resource:///modules/sessionstore/TabAttributes.jsm",
+   TabCrashHandler: "resource:///modules/ContentCrashHandlers.jsm",
+   TabState: "resource:///modules/sessionstore/TabState.jsm",
+   TabStateCache: "resource:///modules/sessionstore/TabStateCache.jsm",
+   TabStateFlusher: "resource:///modules/sessionstore/TabStateFlusher.jsm",
+   Utils: "resource://gre/modules/sessionstore/Utils.jsm",
+   ViewSourceBrowser: "resource://gre/modules/ViewSourceBrowser.jsm",
+-  console: "resource://gre/modules/Console.jsm",
+   setTimeout: "resource://gre/modules/Timer.jsm",
+ });
+ 
+ /**
+  * |true| if we are in debug mode, |false| otherwise.
+  * Debug mode is controlled by preference browser.sessionstore.debug
+  */
+ var gDebuggingEnabled = false;
+diff --git a/browser/components/sessionstore/StartupPerformance.jsm b/browser/components/sessionstore/StartupPerformance.jsm
+--- a/browser/components/sessionstore/StartupPerformance.jsm
++++ b/browser/components/sessionstore/StartupPerformance.jsm
+@@ -5,18 +5,16 @@
+ "use strict";
+ 
+ var EXPORTED_SYMBOLS = ["StartupPerformance"];
+ 
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm", this);
+ 
+ ChromeUtils.defineModuleGetter(this, "Services",
+   "resource://gre/modules/Services.jsm");
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+ ChromeUtils.defineModuleGetter(this, "setTimeout",
+   "resource://gre/modules/Timer.jsm");
+ ChromeUtils.defineModuleGetter(this, "clearTimeout",
+   "resource://gre/modules/Timer.jsm");
+ 
+ const COLLECT_RESULTS_AFTER_MS = 10000;
+ 
+ const OBSERVED_TOPICS = ["sessionstore-restoring-on-startup", "sessionstore-initiating-manual-restore"];
+diff --git a/browser/components/sessionstore/nsSessionStartup.js b/browser/components/sessionstore/nsSessionStartup.js
+--- a/browser/components/sessionstore/nsSessionStartup.js
++++ b/browser/components/sessionstore/nsSessionStartup.js
+@@ -29,18 +29,16 @@
+  * browser.startup.page is set to 3.
+  */
+ 
+ /* :::::::: Constants and Helpers ::::::::::::::: */
+ 
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+ ChromeUtils.defineModuleGetter(this, "SessionFile",
+   "resource:///modules/sessionstore/SessionFile.jsm");
+ ChromeUtils.defineModuleGetter(this, "StartupPerformance",
+   "resource:///modules/sessionstore/StartupPerformance.jsm");
+ ChromeUtils.defineModuleGetter(this, "CrashMonitor",
+   "resource://gre/modules/CrashMonitor.jsm");
+ ChromeUtils.defineModuleGetter(this, "PrivateBrowsingUtils",
+   "resource://gre/modules/PrivateBrowsingUtils.jsm");
+diff --git a/browser/extensions/webcompat/content/lib/ua_overrider.jsm b/browser/extensions/webcompat/content/lib/ua_overrider.jsm
+--- a/browser/extensions/webcompat/content/lib/ua_overrider.jsm
++++ b/browser/extensions/webcompat/content/lib/ua_overrider.jsm
+@@ -1,14 +1,13 @@
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+-ChromeUtils.import("resource://gre/modules/Console.jsm");
+ 
+ const DefaultUA = Cc["@mozilla.org/network/protocol;1?name=http"].getService(Ci.nsIHttpProtocolHandler).userAgent;
+ const NS_HTTP_ON_USERAGENT_REQUEST_TOPIC = "http-on-useragent-request";
+ 
+ ChromeUtils.defineModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");
+ XPCOMUtils.defineLazyServiceGetter(this, "eTLDService", "@mozilla.org/network/effective-tld-service;1", "nsIEffectiveTLDService");
+ 
+ class UAOverrider {
+diff --git a/devtools/client/commandline/test/head.js b/devtools/client/commandline/test/head.js
+--- a/devtools/client/commandline/test/head.js
++++ b/devtools/client/commandline/test/head.js
+@@ -6,17 +6,16 @@
+  /* import-globals-from mockCommands.js */
+ 
+ "use strict";
+ 
+ const TEST_BASE_HTTP = "http://example.com/browser/devtools/client/commandline/test/";
+ const TEST_BASE_HTTPS = "https://example.com/browser/devtools/client/commandline/test/";
+ 
+ var { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+-var { console } = require("resource://gre/modules/Console.jsm");
+ var flags = require("devtools/shared/flags");
+ 
+ // Import the GCLI test helper
+ var testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/"));
+ Services.scriptloader.loadSubScript(testDir + "/helpers.js", this);
+ Services.scriptloader.loadSubScript(testDir + "/mockCommands.js", this, "UTF-8");
+ 
+ flags.testing = true;
+diff --git a/devtools/client/framework/ToolboxProcess.jsm b/devtools/client/framework/ToolboxProcess.jsm
+--- a/devtools/client/framework/ToolboxProcess.jsm
++++ b/devtools/client/framework/ToolboxProcess.jsm
+@@ -4,17 +4,16 @@
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
+ "use strict";
+ 
+ const DBG_XUL = "chrome://devtools/content/framework/toolbox-process-window.xul";
+ const CHROME_DEBUGGER_PROFILE_NAME = "chrome_debugger_profile";
+ 
+-const { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ const { require, DevToolsLoader } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
+ 
+ ChromeUtils.defineModuleGetter(this, "Subprocess", "resource://gre/modules/Subprocess.jsm");
+ XPCOMUtils.defineLazyGetter(this, "Telemetry", function () {
+   return require("devtools/client/shared/telemetry");
+ });
+ XPCOMUtils.defineLazyGetter(this, "EventEmitter", function () {
+diff --git a/devtools/client/framework/test/shared-head.js b/devtools/client/framework/test/shared-head.js
+--- a/devtools/client/framework/test/shared-head.js
++++ b/devtools/client/framework/test/shared-head.js
+@@ -31,17 +31,16 @@ PromiseTestUtils.whitelistRejectionsGlob
+ PromiseTestUtils.whitelistRejectionsGlobally(/is no longer, usable/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/NS_ERROR_FAILURE/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/this\._urls is null/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/this\.tabTarget is null/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/this\.toolbox is null/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/this\.webConsoleClient is null/);
+ PromiseTestUtils.whitelistRejectionsGlobally(/this\.worker is null/);
+ 
+-const {console} = scopedCuImport("resource://gre/modules/Console.jsm");
+ const {ScratchpadManager} = scopedCuImport("resource://devtools/client/scratchpad/scratchpad-manager.jsm");
+ const {loader, require} = scopedCuImport("resource://devtools/shared/Loader.jsm");
+ 
+ const {gDevTools} = require("devtools/client/framework/devtools");
+ const {TargetFactory} = require("devtools/client/framework/target");
+ const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+ const flags = require("devtools/shared/flags");
+ let promise = require("promise");
+diff --git a/devtools/client/memory/test/unit/head.js b/devtools/client/memory/test/unit/head.js
+--- a/devtools/client/memory/test/unit/head.js
++++ b/devtools/client/memory/test/unit/head.js
+@@ -1,14 +1,13 @@
+ /* Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ */
+ 
+ "use strict";
+ 
+-var { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ var { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ 
+ var Services = require("Services");
+ var DevToolsUtils = require("devtools/shared/DevToolsUtils");
+ var flags = require("devtools/shared/flags");
+ flags.testing = true;
+ flags.wantLogging = true;
+ flags.wantVerbose = false;
+diff --git a/devtools/client/performance/test/unit/head.js b/devtools/client/performance/test/unit/head.js
+--- a/devtools/client/performance/test/unit/head.js
++++ b/devtools/client/performance/test/unit/head.js
+@@ -1,16 +1,15 @@
+ /* Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ */
+ "use strict";
+ /* exported Cc, Ci, Cu, Cr, Services, console, PLATFORM_DATA_PREF, getFrameNodePath,
+    synthesizeProfileForTest */
+ var { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ var Services = require("Services");
+-var { console } = require("resource://gre/modules/Console.jsm");
+ const RecordingUtils = require("devtools/shared/performance/recording-utils");
+ const PLATFORM_DATA_PREF = "devtools.performance.ui.show-platform-data";
+ 
+ /**
+  * Get a path in a FrameNode call tree.
+  */
+ function getFrameNodePath(root, path) {
+   let calls = root.calls;
+diff --git a/devtools/client/scratchpad/test/head.js b/devtools/client/scratchpad/test/head.js
+--- a/devtools/client/scratchpad/test/head.js
++++ b/devtools/client/scratchpad/test/head.js
+@@ -1,17 +1,16 @@
+ /* vim: set ts=2 et sw=2 tw=80: */
+ /* Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ */
+ 
+ "use strict";
+ 
+ const {NetUtil} = ChromeUtils.import("resource://gre/modules/NetUtil.jsm", {});
+ const {FileUtils} = ChromeUtils.import("resource://gre/modules/FileUtils.jsm", {});
+-const {console} = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ const {ScratchpadManager} = ChromeUtils.import("resource://devtools/client/scratchpad/scratchpad-manager.jsm", {});
+ const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const Services = require("Services");
+ const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+ const flags = require("devtools/shared/flags");
+ const promise = require("promise");
+ const defer = require("devtools/shared/defer");
+ 
+diff --git a/devtools/client/shared/vendor/stringvalidator/tests/unit/head_stringvalidator.js b/devtools/client/shared/vendor/stringvalidator/tests/unit/head_stringvalidator.js
+--- a/devtools/client/shared/vendor/stringvalidator/tests/unit/head_stringvalidator.js
++++ b/devtools/client/shared/vendor/stringvalidator/tests/unit/head_stringvalidator.js
+@@ -1,12 +1,11 @@
+ "use strict";
+ 
+ const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+-const { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ 
+ this.validator = require("devtools/client/shared/vendor/stringvalidator/validator");
+ 
+ function describe(suite, testFunc) {
+   info(`\n                            Test suite: ${suite}`.toUpperCase());
+   testFunc();
+ }
+ 
+diff --git a/devtools/client/shared/widgets/AbstractTreeItem.jsm b/devtools/client/shared/widgets/AbstractTreeItem.jsm
+--- a/devtools/client/shared/widgets/AbstractTreeItem.jsm
++++ b/devtools/client/shared/widgets/AbstractTreeItem.jsm
+@@ -7,19 +7,16 @@
+ 
+ const { require, loader } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
+ const { ViewHelpers } = require("devtools/client/shared/widgets/view-helpers");
+ const { KeyCodes } = require("devtools/client/shared/keycodes");
+ 
+ loader.lazyRequireGetter(this, "EventEmitter", "devtools/shared/old-event-emitter");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+-
+ this.EXPORTED_SYMBOLS = ["AbstractTreeItem"];
+ 
+ /**
+  * A very generic and low-level tree view implementation. It is not intended
+  * to be used alone, but as a base class that you can extend to build your
+  * own custom implementation.
+  *
+  * Language:
+diff --git a/devtools/client/shared/widgets/VariablesViewController.jsm b/devtools/client/shared/widgets/VariablesViewController.jsm
+--- a/devtools/client/shared/widgets/VariablesViewController.jsm
++++ b/devtools/client/shared/widgets/VariablesViewController.jsm
+@@ -20,19 +20,16 @@ Object.defineProperty(this, "WebConsoleU
+   configurable: true,
+   enumerable: true
+ });
+ 
+ XPCOMUtils.defineLazyGetter(this, "VARIABLES_SORTING_ENABLED", () =>
+   Services.prefs.getBoolPref("devtools.debugger.ui.variables-sorting-enabled")
+ );
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-  "resource://gre/modules/Console.jsm");
+-
+ const MAX_LONG_STRING_LENGTH = 200000;
+ const MAX_PROPERTY_ITEMS = 2000;
+ const DBG_STRINGS_URI = "devtools/client/locales/debugger.properties";
+ 
+ this.EXPORTED_SYMBOLS = ["VariablesViewController", "StackFrameUtils"];
+ 
+ /**
+  * Localization convenience methods.
+diff --git a/devtools/client/styleeditor/StyleEditorUI.jsm b/devtools/client/styleeditor/StyleEditorUI.jsm
+--- a/devtools/client/styleeditor/StyleEditorUI.jsm
++++ b/devtools/client/styleeditor/StyleEditorUI.jsm
+@@ -20,17 +20,16 @@ const {
+   wire,
+   showFilePicker,
+ } = require("resource://devtools/client/styleeditor/StyleEditorUtil.jsm");
+ const {SplitView} = require("resource://devtools/client/shared/SplitView.jsm");
+ const {StyleSheetEditor} = require("resource://devtools/client/styleeditor/StyleSheetEditor.jsm");
+ const {PluralForm} = require("devtools/shared/plural-form");
+ const {PrefObserver} = require("devtools/client/shared/prefs");
+ const csscoverage = require("devtools/shared/fronts/csscoverage");
+-const {console} = require("resource://gre/modules/Console.jsm");
+ const {KeyCodes} = require("devtools/client/shared/keycodes");
+ 
+ loader.lazyRequireGetter(this, "ResponsiveUIManager", "devtools/client/responsivedesign/responsivedesign");
+ 
+ const LOAD_ERROR = "error-load";
+ const STYLE_EDITOR_TEMPLATE = "stylesheet";
+ const SELECTOR_HIGHLIGHTER_TYPE = "SelectorHighlighter";
+ const PREF_MEDIA_SIDEBAR = "devtools.styleeditor.showMediaSidebar";
+diff --git a/devtools/client/styleeditor/StyleEditorUtil.jsm b/devtools/client/styleeditor/StyleEditorUtil.jsm
+--- a/devtools/client/styleeditor/StyleEditorUtil.jsm
++++ b/devtools/client/styleeditor/StyleEditorUtil.jsm
+@@ -16,17 +16,16 @@ this.EXPORTED_SYMBOLS = [
+   "wire",
+   "showFilePicker"
+ ];
+ 
+ const PROPERTIES_URL = "chrome://devtools/locale/styleeditor.properties";
+ 
+ const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const Services = require("Services");
+-const console = require("resource://gre/modules/Console.jsm").console;
+ const gStringBundle = Services.strings.createBundle(PROPERTIES_URL);
+ 
+ /**
+  * Returns a localized string with the given key name from the string bundle.
+  *
+  * @param name
+  * @param ...rest
+  *        Optional arguments to format in the string.
+diff --git a/devtools/client/styleeditor/StyleSheetEditor.jsm b/devtools/client/styleeditor/StyleSheetEditor.jsm
+--- a/devtools/client/styleeditor/StyleSheetEditor.jsm
++++ b/devtools/client/styleeditor/StyleSheetEditor.jsm
+@@ -6,17 +6,16 @@
+ "use strict";
+ 
+ this.EXPORTED_SYMBOLS = ["StyleSheetEditor"];
+ 
+ const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const Editor = require("devtools/client/sourceeditor/editor");
+ const promise = require("promise");
+ const {shortSource, prettifyCSS} = require("devtools/shared/inspector/css-logic");
+-const {console} = require("resource://gre/modules/Console.jsm");
+ const Services = require("Services");
+ const EventEmitter = require("devtools/shared/old-event-emitter");
+ const {Task} = require("devtools/shared/task");
+ const {FileUtils} = require("resource://gre/modules/FileUtils.jsm");
+ const {NetUtil} = require("resource://gre/modules/NetUtil.jsm");
+ const {OS} = ChromeUtils.import("resource://gre/modules/osfile.jsm", {});
+ const {
+   getString,
+diff --git a/devtools/client/webconsole/test/browser_console_consolejsm_output.js b/devtools/client/webconsole/test/browser_console_consolejsm_output.js
+--- a/devtools/client/webconsole/test/browser_console_consolejsm_output.js
++++ b/devtools/client/webconsole/test/browser_console_consolejsm_output.js
+@@ -16,17 +16,16 @@ function onNewMessage(aEvent, aNewMessag
+   }
+ }
+ 
+ add_task(function* () {
+   let consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"];
+   let storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage);
+   storage.clearEvents();
+ 
+-  let {console} = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+   console.log("bug861338-log-cached");
+ 
+   let hud = yield HUDService.toggleBrowserConsole();
+ 
+   yield waitForMessages({
+     webconsole: hud,
+     messages: [{
+       name: "cached console.log message",
+@@ -283,17 +282,16 @@ add_task(function* testMaxLogLevelPref()
+   hud.ui.off("new-messages", onNewMessage);
+   yield HUDService.toggleBrowserConsole();
+ });
+ 
+ // Test that console.profile/profileEnd trigger the right events
+ add_task(function* testProfile() {
+   let consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"];
+   let storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage);
+-  let { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ 
+   storage.clearEvents();
+ 
+   let profilerEvents = [];
+ 
+   function observer(subject, topic) {
+     is(topic, "console-api-profiler", "The topic is 'console-api-profiler'");
+     const subjectObj = subject.wrappedJSObject;
+diff --git a/devtools/server/tests/unit/head_dbg.js b/devtools/server/tests/unit/head_dbg.js
+--- a/devtools/server/tests/unit/head_dbg.js
++++ b/devtools/server/tests/unit/head_dbg.js
+@@ -18,17 +18,16 @@ ChromeUtils.import("resource://testing-c
+   crashReporter: true,
+ });
+ 
+ const { require, loader } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const { worker } = ChromeUtils.import("resource://devtools/shared/worker/loader.js", {});
+ const promise = require("promise");
+ const defer = require("devtools/shared/defer");
+ const { Task } = require("devtools/shared/task");
+-const { console } = require("resource://gre/modules/Console.jsm");
+ const { NetUtil } = require("resource://gre/modules/NetUtil.jsm");
+ 
+ const Services = require("Services");
+ // Always log packets when running tests. runxpcshelltests.py will throw
+ // the output away anyway, unless you give it the --verbose flag.
+ Services.prefs.setBoolPref("devtools.debugger.log", true);
+ // Enable remote debugging for the relevant tests.
+ Services.prefs.setBoolPref("devtools.debugger.remote-enabled", true);
+diff --git a/devtools/shared/Parser.jsm b/devtools/shared/Parser.jsm
+--- a/devtools/shared/Parser.jsm
++++ b/devtools/shared/Parser.jsm
+@@ -2,17 +2,16 @@
+ /* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+ /* This Source Code Form is subject to the terms of the Mozilla Public
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ "use strict";
+ 
+ const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const { XPCOMUtils } = require("resource://gre/modules/XPCOMUtils.jsm");
+-const { console } = require("resource://gre/modules/Console.jsm");
+ const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+ 
+ ChromeUtils.defineModuleGetter(this,
+   "Reflect", "resource://gre/modules/reflect.jsm");
+ 
+ this.EXPORTED_SYMBOLS = ["Parser", "ParserHelpers", "SyntaxTreeVisitor"];
+ 
+ /**
+diff --git a/devtools/shared/builtin-modules.js b/devtools/shared/builtin-modules.js
+--- a/devtools/shared/builtin-modules.js
++++ b/devtools/shared/builtin-modules.js
+@@ -210,16 +210,17 @@ defineLazyGetter(exports.modules, "xpcIn
+ 
+ // List of all custom globals exposed to devtools modules.
+ // Changes here should be mirrored to devtools/.eslintrc.
+ exports.globals = {
+   isWorker: false,
+   reportError: Cu.reportError,
+   atob: atob,
+   btoa: btoa,
++  console: console,
+   TextEncoder: TextEncoder,
+   TextDecoder: TextDecoder,
+   URL,
+   CSS,
+   loader: {
+     lazyGetter: defineLazyGetter,
+     lazyImporter: defineLazyModuleGetter,
+     lazyServiceGetter: defineLazyServiceGetter,
+@@ -269,19 +270,16 @@ function lazyGlobal(name, getter) {
+     },
+     configurable: true,
+     enumerable: true
+   });
+ }
+ 
+ // Lazily define a few things so that the corresponding jsms are only loaded
+ // when used.
+-lazyGlobal("console", () => {
+-  return require("resource://gre/modules/Console.jsm").console;
+-});
+ lazyGlobal("clearTimeout", () => {
+   return require("resource://gre/modules/Timer.jsm").clearTimeout;
+ });
+ lazyGlobal("setTimeout", () => {
+   return require("resource://gre/modules/Timer.jsm").setTimeout;
+ });
+ lazyGlobal("clearInterval", () => {
+   return require("resource://gre/modules/Timer.jsm").clearInterval;
+diff --git a/devtools/shared/builtin-modules.js.1440094-2.later b/devtools/shared/builtin-modules.js.1440094-2.later
+new file mode 100644
+--- /dev/null
++++ b/devtools/shared/builtin-modules.js.1440094-2.later
+@@ -0,0 +1,21 @@
++--- builtin-modules.js
+++++ builtin-modules.js
++@@ -13,17 +13,17 @@
++  * they would also miss them.
++  */
++ 
++ const { Cu, CC, Cc, Ci } = require("chrome");
++ const promise = require("resource://gre/modules/Promise.jsm").Promise;
++ const jsmScope = require("resource://gre/modules/Services.jsm");
++ const { Services } = jsmScope;
++ // Steal various globals only available in JSM scope (and not Sandbox one)
++-const { ChromeUtils, HeapSnapshot, XMLHttpRequest,
+++const { ChromeUtils, HeapSnapshot, XMLHttpRequest, console,
++         atob, btoa, TextEncoder, TextDecoder } = Cu.getGlobalForObject(jsmScope);
++ 
++ // Create a single Sandbox to access global properties needed in this module.
++ // Sandbox are memory expensive, so we should create as little as possible.
++ const { CSS, CSSRule, FileReader, indexedDB, InspectorUtils, URL } =
++     Cu.Sandbox(CC("@mozilla.org/systemprincipal;1", "nsIPrincipal")(), {
++       wantGlobalProperties: [
++         "CSS", "CSSRule", "FileReader", "indexedDB", "InspectorUtils", "URL",
+diff --git a/devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js b/devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js
+--- a/devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js
++++ b/devtools/shared/pretty-fast/tests/unit/head_pretty-fast.js
+@@ -1,16 +1,15 @@
+ "use strict";
+ 
+ const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ 
+ this.sourceMap = require("source-map");
+ this.acorn = require("acorn/acorn");
+ this.prettyFast = require("devtools/shared/pretty-fast/pretty-fast");
+-const { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ 
+ // Register a console listener, so console messages don't just disappear
+ // into the ether.
+ var errorCount = 0;
+ var listener = {
+   observe: function (aMessage) {
+     errorCount++;
+     try {
+diff --git a/devtools/shared/shims/Console.jsm b/devtools/shared/shims/Console.jsm
+--- a/devtools/shared/shims/Console.jsm
++++ b/devtools/shared/shims/Console.jsm
+@@ -15,19 +15,11 @@ const WARNING_PREF = "devtools.migration
+ if (Services.prefs.getBoolPref(WARNING_PREF)) {
+   const { Deprecated } = Cu.import("resource://gre/modules/Deprecated.jsm", {});
+   Deprecated.warning("This path to Console.jsm is deprecated.  Please use " +
+                      "Cu.import(\"resource://gre/modules/Console.jsm\") " +
+                      "to load this module.",
+                      "https://bugzil.la/912121");
+ }
+ 
+-this.EXPORTED_SYMBOLS = [
+-  "console",
+-  "ConsoleAPI"
+-];
+-
+-const module =
+-  Cu.import("resource://gre/modules/Console.jsm", {});
+-
+-for (let symbol of this.EXPORTED_SYMBOLS) {
+-  this[symbol] = module[symbol];
+-}
++this.console = console;
++this.ConsoleAPI =
++  Cu.import("resource://gre/modules/Console.jsm", {}).ConsoleAPI;
+diff --git a/devtools/shared/tests/unit/test_console_filtering.js b/devtools/shared/tests/unit/test_console_filtering.js
+--- a/devtools/shared/tests/unit/test_console_filtering.js
++++ b/devtools/shared/tests/unit/test_console_filtering.js
+@@ -1,14 +1,14 @@
+ /* Any copyright is dedicated to the Public Domain.
+    http://creativecommons.org/publicdomain/zero/1.0/ */
+ 
+ "use strict";
+ 
+-const { console, ConsoleAPI } = require("resource://gre/modules/Console.jsm");
++const { ConsoleAPI } = require("resource://gre/modules/Console.jsm");
+ const { ConsoleAPIListener } = require("devtools/server/actors/webconsole/listeners");
+ const Services = require("Services");
+ 
+ var seenMessages = 0;
+ var seenTypes = 0;
+ 
+ var callback = {
+   onConsoleAPICall: function (message) {
+diff --git a/devtools/shared/webconsole/test/common.js b/devtools/shared/webconsole/test/common.js
+--- a/devtools/shared/webconsole/test/common.js
++++ b/devtools/shared/webconsole/test/common.js
+@@ -5,18 +5,16 @@
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
+ "use strict";
+ 
+ /* exported ObjectClient, attachConsole, attachConsoleToTab, attachConsoleToWorker,
+    closeDebugger, checkConsoleAPICalls, checkRawHeaders, runTests, nextTest, Ci, Cc,
+    withActiveServiceWorker, Services */
+ 
+-// This gives logging to stdout for tests
+-const {console} = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+ const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+ const {Task} = require("devtools/shared/task");
+ const {DebuggerServer} = require("devtools/server/main");
+ const {DebuggerClient} = require("devtools/shared/client/debugger-client");
+ const ObjectClient = require("devtools/shared/client/object-client");
+ const Services = require("Services");
+ 
+ function initCommon() {
+diff --git a/devtools/shared/worker/worker.js b/devtools/shared/worker/worker.js
+--- a/devtools/shared/worker/worker.js
++++ b/devtools/shared/worker/worker.js
+@@ -12,17 +12,17 @@
+     const { Cc, Ci, Cu, ChromeWorker } = require("chrome");
+     const dumpn = require("devtools/shared/DevToolsUtils").dumpn;
+     factory.call(this, require, exports, module, { Cc, Ci, Cu }, ChromeWorker, dumpn);
+   } else {
+     // Cu.import
+     const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
+     this.isWorker = false;
+     this.Promise = require("resource://gre/modules/Promise.jsm").Promise;
+-    this.console = require("resource://gre/modules/Console.jsm").console;
++    this.console = console;
+     factory.call(
+       this, require, this, { exports: this },
+       { Cc, Ci, Cu }, ChromeWorker, null
+     );
+     this.EXPORTED_SYMBOLS = ["DevToolsWorker"];
+   }
+ }).call(this, function (require, exports, module, { Ci, Cc }, ChromeWorker, dumpn) {
+   let MESSAGE_COUNTER = 0;
+diff --git a/devtools/startup/devtools-startup.js b/devtools/startup/devtools-startup.js
+--- a/devtools/startup/devtools-startup.js
++++ b/devtools/startup/devtools-startup.js
+@@ -552,17 +552,16 @@ DevToolsStartup.prototype = {
+     gBrowser.selectedTab = gBrowser.addTab(url, {relatedToCurrent: true});
+   },
+ 
+   handleConsoleFlag: function (cmdLine) {
+     let window = Services.wm.getMostRecentWindow("devtools:webconsole");
+     if (!window) {
+       let require = this.initDevTools("CommandLine");
+       let { HUDService } = require("devtools/client/webconsole/hudservice");
+-      let { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+       HUDService.toggleBrowserConsole().catch(console.error);
+     } else {
+       // the Browser Console was already open
+       window.focus();
+     }
+ 
+     if (cmdLine.state == Ci.nsICommandLine.STATE_REMOTE_AUTO) {
+       cmdLine.preventDefault = true;
+@@ -580,24 +579,22 @@ DevToolsStartup.prototype = {
+ 
+   _isRemoteDebuggingEnabled() {
+     let remoteDebuggingEnabled = false;
+     try {
+       remoteDebuggingEnabled = kDebuggerPrefs.every(pref => {
+         return Services.prefs.getBoolPref(pref);
+       });
+     } catch (ex) {
+-      let { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+       console.error(ex);
+       return false;
+     }
+     if (!remoteDebuggingEnabled) {
+       let errorMsg = "Could not run chrome debugger! You need the following " +
+                      "prefs to be set to true: " + kDebuggerPrefs.join(", ");
+-      let { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+       console.error(new Error(errorMsg));
+       // Dump as well, as we're doing this from a commandline, make sure people
+       // don't miss it:
+       dump(errorMsg + "\n");
+     }
+     return remoteDebuggingEnabled;
+   },
+ 
+diff --git a/intl/l10n/Localization.jsm b/intl/l10n/Localization.jsm
+--- a/intl/l10n/Localization.jsm
++++ b/intl/l10n/Localization.jsm
+@@ -427,17 +427,16 @@ function keysFromContext(method, ctx, ke
+     if (messageErrors.length === 0 ||
+         !messageErrors.some(e => e instanceof L10nError)) {
+       translations[i] = translation;
+     } else {
+       hasErrors = true;
+     }
+ 
+     if (messageErrors.length) {
+-      const { console } = ChromeUtils.import("resource://gre/modules/Console.jsm", {});
+       messageErrors.forEach(error => console.warn(error));
+     }
+   });
+ 
+   return hasErrors;
+ }
+ 
+ this.Localization = Localization;
+diff --git a/testing/talos/talos/talos-powers/content/TalosParentProfiler.js b/testing/talos/talos/talos-powers/content/TalosParentProfiler.js
+--- a/testing/talos/talos/talos-powers/content/TalosParentProfiler.js
++++ b/testing/talos/talos/talos-powers/content/TalosParentProfiler.js
+@@ -13,17 +13,16 @@
+  * If your test is running in the content process, you should use
+  * TalosContentProfiler.js instead.
+  */
+ 
+ var TalosParentProfiler;
+ 
+ (function() {
+   ChromeUtils.import("resource://gre/modules/Services.jsm");
+-  ChromeUtils.import("resource://gre/modules/Console.jsm");
+ 
+   // Whether or not this TalosContentProfiler object has had initFromObject
+   // or initFromURLQueryParams called on it. Any functions that change the
+   // state of the Gecko Profiler should only be called after calling either
+   // initFromObject or initFromURLQueryParams.
+   let initted = Services.profiler.IsActive();
+ 
+   // The subtest name that beginTest() was called with.
+diff --git a/toolkit/components/addoncompat/CompatWarning.jsm b/toolkit/components/addoncompat/CompatWarning.jsm
+--- a/toolkit/components/addoncompat/CompatWarning.jsm
++++ b/toolkit/components/addoncompat/CompatWarning.jsm
+@@ -3,19 +3,16 @@
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ 
+ var EXPORTED_SYMBOLS = ["CompatWarning"];
+ 
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ ChromeUtils.import("resource://gre/modules/Preferences.jsm");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-                               "resource://gre/modules/Console.jsm");
+-
+ function section(number, url) {
+   const baseURL = "https://developer.mozilla.org/en-US/Firefox/Multiprocess_Firefox/Limitations_of_chrome_scripts";
+   return { number, url: baseURL + url };
+ }
+ 
+ var CompatWarning = {
+   // Sometimes we want to generate a warning, but put off issuing it
+   // until later. For example, if someone registers a listener, we
+diff --git a/toolkit/components/places/PlacesTransactions.jsm b/toolkit/components/places/PlacesTransactions.jsm
+--- a/toolkit/components/places/PlacesTransactions.jsm
++++ b/toolkit/components/places/PlacesTransactions.jsm
+@@ -175,18 +175,16 @@ var EXPORTED_SYMBOLS = ["PlacesTransacti
+  */
+ 
+ const TRANSACTIONS_QUEUE_TIMEOUT_MS = 240000; // 4 Mins.
+ 
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.defineModuleGetter(this, "PlacesUtils",
+                                "resource://gre/modules/PlacesUtils.jsm");
+-ChromeUtils.defineModuleGetter(this, "console",
+-                               "resource://gre/modules/Console.jsm");
+ 
+ Cu.importGlobalProperties(["URL"]);
+ 
+ function setTimeout(callback, ms) {
+   let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
+   timer.initWithCallback(callback, ms, timer.TYPE_ONE_SHOT);
+ }
+ 
+diff --git a/toolkit/modules/E10SUtils.jsm b/toolkit/modules/E10SUtils.jsm
+--- a/toolkit/modules/E10SUtils.jsm
++++ b/toolkit/modules/E10SUtils.jsm
+@@ -10,18 +10,16 @@ ChromeUtils.import("resource://gre/modul
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ 
+ XPCOMUtils.defineLazyPreferenceGetter(this, "useSeparateFileUriProcess",
+                                       "browser.tabs.remote.separateFileUriProcess", false);
+ XPCOMUtils.defineLazyPreferenceGetter(this, "allowLinkedWebInFileUriProcess",
+                                       "browser.tabs.remote.allowLinkedWebInFileUriProcess", false);
+ ChromeUtils.defineModuleGetter(this, "Utils",
+                                "resource://gre/modules/sessionstore/Utils.jsm");
+-ChromeUtils.defineModuleGetter(this, "console",
+-                               "resource://gre/modules/Console.jsm");
+ 
+ function getAboutModule(aURL) {
+   // Needs to match NS_GetAboutModuleName
+   let moduleName = aURL.path.replace(/[#?].*/, "").toLowerCase();
+   let contract = "@mozilla.org/network/protocol/about;1?what=" + moduleName;
+   try {
+     return Cc[contract].getService(Ci.nsIAboutModule);
+   } catch (e) {
+diff --git a/toolkit/modules/EventEmitter.jsm b/toolkit/modules/EventEmitter.jsm
+--- a/toolkit/modules/EventEmitter.jsm
++++ b/toolkit/modules/EventEmitter.jsm
+@@ -2,19 +2,16 @@
+  * License, v. 2.0. If a copy of the MPL was not distributed with this
+  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+ 
+ "use strict";
+ 
+ ChromeUtils.import("resource://gre/modules/Services.jsm");
+ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ 
+-ChromeUtils.defineModuleGetter(this, "console",
+-                               "resource://gre/modules/Console.jsm");
+-
+ var EXPORTED_SYMBOLS = ["EventEmitter"];
+ 
+ let EventEmitter = this.EventEmitter = function() {};
+ 
+ let loggingEnabled = Services.prefs.getBoolPref("toolkit.dump.emit");
+ Services.prefs.addObserver("toolkit.dump.emit", {
+   observe: () => {
+     loggingEnabled = Services.prefs.getBoolPref("toolkit.dump.emit");
+diff --git a/toolkit/modules/Sqlite.jsm b/toolkit/modules/Sqlite.jsm
+--- a/toolkit/modules/Sqlite.jsm
++++ b/toolkit/modules/Sqlite.jsm
+@@ -17,17 +17,16 @@ ChromeUtils.import("resource://gre/modul
+ XPCOMUtils.defineLazyModuleGetters(this, {
+   AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm",
+   Services: "resource://gre/modules/Services.jsm",
+   OS: "resource://gre/modules/osfile.jsm",
+   Log: "resource://gre/modules/Log.jsm",
+   FileUtils: "resource://gre/modules/FileUtils.jsm",
+   Task: "resource://gre/modules/Task.jsm",
+   PromiseUtils: "resource://gre/modules/PromiseUtils.jsm",
+-  console: "resource://gre/modules/Console.jsm",
+ });
+ 
+ XPCOMUtils.defineLazyServiceGetter(this, "FinalizationWitnessService",
+                                    "@mozilla.org/toolkit/finalizationwitness;1",
+                                    "nsIFinalizationWitnessService");
+ 
+ // Regular expression used by isInvalidBoundLikeQuery
+ var likeSqlRegex = /\bLIKE\b\s(?![@:?])/i;