Bug 1434374 - Replace usages of Cu.import in modules (where ChromeUtils isn't defined) r=jdescottes draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Mon, 05 Feb 2018 08:43:50 -0800
changeset 752583 e7efe383715b8574027fd4ae0e460a6083fbdfe4
parent 752566 ff43eb99fe0f4f3a1c42f666fddcf842563b0d32
child 752584 f067dc0d42ff03226dbabf003429dfc8d4dc6201
push id98304
push userbmo:poirot.alex@gmail.com
push dateThu, 08 Feb 2018 16:04:42 +0000
reviewersjdescottes
bugs1434374
milestone60.0a1
Bug 1434374 - Replace usages of Cu.import in modules (where ChromeUtils isn't defined) r=jdescottes MozReview-Commit-ID: 8kw2H4R2VIZ
devtools/client/framework/toolbox-process-window.js
devtools/client/framework/toolbox.js
devtools/client/performance/test/helpers/synth-utils.js
devtools/client/performance/test/helpers/tab-utils.js
devtools/client/webconsole/webconsole.js
devtools/server/actors/call-watcher.js
devtools/shared/DevToolsUtils.js
devtools/shared/test-helpers/allocation-tracker.js
--- a/devtools/client/framework/toolbox-process-window.js
+++ b/devtools/client/framework/toolbox-process-window.js
@@ -138,16 +138,17 @@ function onNewToolbox(toolbox) {
     }
   }
 }
 
 function evaluateTestScript(script, toolbox) {
   let sandbox = Cu.Sandbox(window);
   sandbox.window = window;
   sandbox.toolbox = toolbox;
+  sandbox.ChromeUtils = ChromeUtils;
   Cu.evalInSandbox(script, sandbox);
 }
 
 function bindToolboxHandlers() {
   gToolbox.once("destroyed", quitApp);
   window.addEventListener("unload", onUnload);
 
   if (Services.appinfo.OS == "Darwin") {
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -14,30 +14,31 @@ const HOST_HISTOGRAM = "DEVTOOLS_TOOLBOX
 const SCREENSIZE_HISTOGRAM = "DEVTOOLS_SCREEN_RESOLUTION_ENUMERATED_PER_USER";
 const CURRENT_THEME_SCALAR = "devtools.current_theme";
 const HTML_NS = "http://www.w3.org/1999/xhtml";
 
 var {Ci, Cu, Cc} = require("chrome");
 var promise = require("promise");
 var defer = require("devtools/shared/defer");
 var Services = require("Services");
+var ChromeUtils = require("ChromeUtils");
 var {Task} = require("devtools/shared/task");
 var {gDevTools} = require("devtools/client/framework/devtools");
 var EventEmitter = require("devtools/shared/old-event-emitter");
 var Telemetry = require("devtools/client/shared/telemetry");
 var { attachThread, detachThread } = require("./attach-thread");
 var Menu = require("devtools/client/framework/menu");
 var MenuItem = require("devtools/client/framework/menu-item");
 var { DOMHelpers } = require("resource://devtools/client/shared/DOMHelpers.jsm");
 const { KeyCodes } = require("devtools/client/shared/keycodes");
 var Startup = Cc["@mozilla.org/devtools/startup-clh;1"].getService(Ci.nsISupports)
   .wrappedJSObject;
 
 const { BrowserLoader } =
-  Cu.import("resource://devtools/client/shared/browser-loader.js", {});
+  ChromeUtils.import("resource://devtools/client/shared/browser-loader.js", {});
 
 const {LocalizationHelper} = require("devtools/shared/l10n");
 const L10N = new LocalizationHelper("devtools/client/locales/toolbox.properties");
 
 loader.lazyRequireGetter(this, "getHighlighterUtils",
   "devtools/client/framework/toolbox-highlighter-utils", true);
 loader.lazyRequireGetter(this, "Selection",
   "devtools/client/framework/selection", true);
--- a/devtools/client/performance/test/helpers/synth-utils.js
+++ b/devtools/client/performance/test/helpers/synth-utils.js
@@ -48,18 +48,17 @@ exports.synthesizeProfile = () => {
     }]
   });
 };
 
 /**
  * Generates a simple implementation for a tree class.
  */
 exports.synthesizeCustomTreeClass = () => {
-  const { Cu } = require("chrome");
-  const { AbstractTreeItem } = Cu.import("resource://devtools/client/shared/widgets/AbstractTreeItem.jsm", {});
+  const { AbstractTreeItem } = require("resource://devtools/client/shared/widgets/AbstractTreeItem.jsm");
   const { extend } = require("devtools/shared/extend");
 
   function MyCustomTreeItem(dataSrc, properties) {
     AbstractTreeItem.call(this, properties);
     this.itemDataSrc = dataSrc;
   }
 
   MyCustomTreeItem.prototype = extend(AbstractTreeItem.prototype, {
--- a/devtools/client/performance/test/helpers/tab-utils.js
+++ b/devtools/client/performance/test/helpers/tab-utils.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 "use strict";
 
 /* globals dump */
 
-const { Cu } = require("chrome");
-const { BrowserTestUtils } = Cu.import("resource://testing-common/BrowserTestUtils.jsm", {});
+const { BrowserTestUtils } = require("resource://testing-common/BrowserTestUtils.jsm");
 const Services = require("Services");
 const { waitForDelayedStartupFinished } = require("devtools/client/performance/test/helpers/wait-utils");
 const { gDevTools } = require("devtools/client/framework/devtools");
 
 /**
  * Gets a random integer in between an interval. Used to uniquely identify
  * added tabs by augmenting the URL.
  */
--- a/devtools/client/webconsole/webconsole.js
+++ b/devtools/client/webconsole/webconsole.js
@@ -6,18 +6,20 @@
 
 "use strict";
 
 const {Cc, Ci, Cu} = require("chrome");
 
 const {Utils: WebConsoleUtils, CONSOLE_WORKER_IDS} =
   require("devtools/client/webconsole/utils");
 const { getSourceNames } = require("devtools/client/shared/source-utils");
-const BrowserLoaderModule = {};
-Cu.import("resource://devtools/client/shared/browser-loader.js", BrowserLoaderModule);
+const ChromeUtils = require("ChromeUtils");
+// browser-loader.js is a JSM without .jsm file extension, so it has to be loaded
+// via ChromeUtils.import and not require() which would consider it as a CommonJS module
+const { BrowserLoader } = ChromeUtils.import("resource://devtools/client/shared/browser-loader.js", {});
 
 const promise = require("promise");
 const defer = require("devtools/shared/defer");
 const Services = require("Services");
 const Telemetry = require("devtools/client/shared/telemetry");
 const {PrefObserver} = require("devtools/client/shared/prefs");
 
 loader.lazyServiceGetter(this, "clipboardHelper",
@@ -220,17 +222,17 @@ function WebConsoleFrame(webConsoleOwner
   this._flushMessageQueue = this._flushMessageQueue.bind(this);
   this._onToolboxPrefChanged = this._onToolboxPrefChanged.bind(this);
   this._onUpdateListeners = this._onUpdateListeners.bind(this);
 
   this._outputTimer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
   this._outputTimerInitialized = false;
 
   let toolbox = gDevTools.getToolbox(this.owner.target);
-  let {require} = BrowserLoaderModule.BrowserLoader({
+  let {require} = BrowserLoader({
     window: this.window,
     useOnlyShared: true,
     // The toolbox isn't available for the browser console.
     commonLibRequire: toolbox ? toolbox.browserRequire : null,
   });
 
   this.React = require("devtools/client/shared/vendor/react");
   this.ReactDOM = require("devtools/client/shared/vendor/react-dom");
--- a/devtools/server/actors/call-watcher.js
+++ b/devtools/server/actors/call-watcher.js
@@ -2,17 +2,20 @@
  * 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";
 
 /* global XPCNativeWrapper */
 
 const {Ci, Cu} = require("chrome");
 const protocol = require("devtools/shared/protocol");
-const {serializeStack, parseStack} = Cu.import("resource://devtools/shared/base-loader.js", {});
+const ChromeUtils = require("ChromeUtils");
+// base-loader.js is a JSM without .jsm file extension, so it has to be loaded
+// via ChromeUtils.import and not require() which would consider it as a CommonJS module
+const {serializeStack, parseStack} = ChromeUtils.import("resource://devtools/shared/base-loader.js", {});
 
 const { functionCallSpec, callWatcherSpec } = require("devtools/shared/specs/call-watcher");
 const { CallWatcherFront } = require("devtools/shared/fronts/call-watcher");
 
 /**
  * This actor contains information about a function call, like the function
  * type, name, stack, arguments, returned value etc.
  */
--- a/devtools/shared/DevToolsUtils.js
+++ b/devtools/shared/DevToolsUtils.js
@@ -394,19 +394,17 @@ exports.defineLazyGetter = function (obj
     enumerable: true
   });
 };
 
 DevToolsUtils.defineLazyGetter(this, "AppConstants", () => {
   if (isWorker) {
     return {};
   }
-  const scope = {};
-  Cu.import("resource://gre/modules/AppConstants.jsm", scope);
-  return scope.AppConstants;
+  return require("resource://gre/modules/AppConstants.jsm").AppConstants;
 });
 
 /**
  * No operation. The empty function.
  */
 exports.noop = function () { };
 
 let assertionFailureCount = 0;
--- a/devtools/shared/test-helpers/allocation-tracker.js
+++ b/devtools/shared/test-helpers/allocation-tracker.js
@@ -34,17 +34,17 @@
  */
 
 "use strict";
 
 let { Cu } = require("chrome");
 
 // Get a "Debugger" constructor. Can't call `addDebuggerToGlobal`
 // on the frame script global, so call it on jsdebugger one...
-let global = Cu.import("resource://gre/modules/jsdebugger.jsm", {});
+let global = require("resource://gre/modules/jsdebugger.jsm");
 const {addDebuggerToGlobal} = global;
 addDebuggerToGlobal(global);
 let { Debugger } = global;
 
 exports.allocationTracker = function () {
   dump("DEVTOOLS ALLOCATION: Start logging allocations\n");
   let dbg = new Debugger();