Bug 1376128 - Use selective imports from error module; r?automatedtester
Instead of importing everything from the testing/marionette/error.js
module into the global scope, we need to be selective about what symbols
we want.
MozReview-Commit-ID: HZDAS0bs0GD
--- a/testing/marionette/accessibility.js
+++ b/testing/marionette/accessibility.js
@@ -7,17 +7,18 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import('resource://gre/modules/Services.jsm');
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Log.jsm");
const logger = Log.repository.getLogger("Marionette");
-Cu.import("chrome://marionette/content/error.js");
+const {ElementNotAccessibleError} =
+ Cu.import("chrome://marionette/content/error.js", {});
XPCOMUtils.defineLazyModuleGetter(
this, "setInterval", "resource://gre/modules/Timer.jsm");
XPCOMUtils.defineLazyModuleGetter(
this, "clearInterval", "resource://gre/modules/Timer.jsm");
XPCOMUtils.defineLazyGetter(this, "service", () => {
let service;
--- a/testing/marionette/action.js
+++ b/testing/marionette/action.js
@@ -5,17 +5,22 @@
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("chrome://marionette/content/assert.js");
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidArgumentError,
+ MoveTargetOutOfBoundsError,
+ UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/event.js");
Cu.import("chrome://marionette/content/interaction.js");
this.EXPORTED_SYMBOLS = ["action"];
// TODO? With ES 2016 and Symbol you can make a safer approximation
// to an enum e.g. https://gist.github.com/xmlking/e86e4f15ec32b12c4689
/**
--- a/testing/marionette/addon.js
+++ b/testing/marionette/addon.js
@@ -4,17 +4,17 @@
"use strict";
const {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/AddonManager.jsm");
Cu.import("resource://gre/modules/FileUtils.jsm");
-Cu.import("chrome://marionette/content/error.js");
+const {UnknownError} = Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["addon"];
this.addon = {};
// from https://developer.mozilla.org/en-US/Add-ons/Add-on_Manager/AddonManager#AddonInstall_errors
addon.Errors = {
[-1]: "ERROR_NETWORK_FAILURE: A network error occured.",
--- a/testing/marionette/assert.js
+++ b/testing/marionette/assert.js
@@ -5,17 +5,24 @@
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/AppConstants.jsm");
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidArgumentError,
+ InvalidSessionIDError,
+ NoSuchWindowError,
+ UnexpectedAlertOpenError,
+ UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["assert"];
const isFennec = () => AppConstants.platform == "android";
const isFirefox = () => Services.appinfo.name == "Firefox";
/** Shorthands for common assertions made in Marionette. */
this.assert = {};
--- a/testing/marionette/browser.js
+++ b/testing/marionette/browser.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";
const {utils: Cu} = Components;
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ NoSuchWindowError,
+ UnsupportedOperationError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/frame.js");
this.EXPORTED_SYMBOLS = ["browser"];
this.browser = {};
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
--- a/testing/marionette/cookie.js
+++ b/testing/marionette/cookie.js
@@ -4,17 +4,20 @@
"use strict";
const {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("chrome://marionette/content/assert.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidCookieDomainError,
+} = Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["cookie"];
const IPV4_PORT_EXPR = /:\d+$/;
this.cookie = {
manager: Services.cookies,
};
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -18,17 +18,31 @@ Cu.import("chrome://marionette/content/a
Cu.import("chrome://marionette/content/addon.js");
Cu.import("chrome://marionette/content/assert.js");
Cu.import("chrome://marionette/content/atom.js");
Cu.import("chrome://marionette/content/browser.js");
Cu.import("chrome://marionette/content/capture.js");
Cu.import("chrome://marionette/content/cert.js");
Cu.import("chrome://marionette/content/cookie.js");
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ ElementNotInteractableError,
+ error,
+ InsecureCertificateError,
+ InvalidArgumentError,
+ InvalidCookieDomainError,
+ InvalidSelectorError,
+ NoAlertOpenError,
+ NoSuchFrameError,
+ NoSuchWindowError,
+ SessionNotCreatedError,
+ UnknownError,
+ UnsupportedOperationError,
+ WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/evaluate.js");
Cu.import("chrome://marionette/content/event.js");
Cu.import("chrome://marionette/content/interaction.js");
Cu.import("chrome://marionette/content/l10n.js");
Cu.import("chrome://marionette/content/legacyaction.js");
Cu.import("chrome://marionette/content/modal.js");
Cu.import("chrome://marionette/content/proxy.js");
Cu.import("chrome://marionette/content/reftest.js");
--- a/testing/marionette/element.js
+++ b/testing/marionette/element.js
@@ -5,17 +5,23 @@
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("chrome://marionette/content/assert.js");
Cu.import("chrome://marionette/content/atom.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidSelectorError,
+ JavaScriptError,
+ NoSuchElementError,
+ StaleElementReferenceError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/wait.js");
const logger = Log.repository.getLogger("Marionette");
/**
* This module provides shared functionality for dealing with DOM-
* and web elements in Marionette.
*
--- a/testing/marionette/error.js
+++ b/testing/marionette/error.js
@@ -531,8 +531,16 @@ const STATUSES = new Map([
["timeout", TimeoutError],
["unable to set cookie", UnableToSetCookieError],
["unexpected alert open", UnexpectedAlertOpenError],
["unknown command", UnknownCommandError],
["unknown error", UnknownError],
["unsupported operation", UnsupportedOperationError],
["webdriver error", WebDriverError],
]);
+
+// Errors must be expored on the local this scope so that the
+// EXPORTED_SYMBOLS and the Cu.import("foo", {}) machinery sees them.
+// We could assign each error definition directly to |this|, but
+// because they are Error prototypes this would mess up their names.
+for (let cls of STATUSES.values()) {
+ this[cls.name] = cls;
+}
--- a/testing/marionette/evaluate.js
+++ b/testing/marionette/evaluate.js
@@ -7,17 +7,22 @@
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://gre/modules/NetUtil.jsm");
Cu.import("resource://gre/modules/Timer.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ JavaScriptError,
+ ScriptTimeoutError,
+ WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
const logger = Log.repository.getLogger("Marionette");
this.EXPORTED_SYMBOLS = ["evaluate", "sandbox", "Sandboxes"];
const ARGUMENTS = "__webDriverArguments";
const CALLBACK = "__webDriverCallback";
const COMPLETE = "__webDriverComplete";
--- a/testing/marionette/event.js
+++ b/testing/marionette/event.js
@@ -7,17 +7,18 @@
"use strict";
const {interfaces: Ci, utils: Cu, classes: Cc} = Components;
Cu.import("resource://gre/modules/Log.jsm");
const logger = Log.repository.getLogger("Marionette");
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {ElementNotInteractableError} =
+ Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["event"];
// must be synchronised with nsIDOMWindowUtils
const COMPOSITION_ATTR_RAWINPUT = 0x02;
const COMPOSITION_ATTR_SELECTEDRAWTEXT = 0x03;
const COMPOSITION_ATTR_CONVERTEDTEXT = 0x04;
const COMPOSITION_ATTR_SELECTEDCONVERTEDTEXT = 0x05;
--- a/testing/marionette/interaction.js
+++ b/testing/marionette/interaction.js
@@ -3,17 +3,24 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const {utils: Cu} = Components;
Cu.import("chrome://marionette/content/accessibility.js");
Cu.import("chrome://marionette/content/atom.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidArgument,
+ ElementNotInteractableError,
+ ElementClickInterceptedError,
+ InvalidElementStateError,
+ InvalidArgumentError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/element.js");
Cu.import("chrome://marionette/content/event.js");
Cu.importGlobalProperties(["File"]);
this.EXPORTED_SYMBOLS = ["interaction"];
/**
--- a/testing/marionette/l10n.js
+++ b/testing/marionette/l10n.js
@@ -17,17 +17,18 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyServiceGetter(
this, "domParser", "@mozilla.org/xmlextras/domparser;1", "nsIDOMParser");
-Cu.import("chrome://marionette/content/error.js");
+const {NoSuchElementError} =
+ Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["l10n"];
this.l10n = {};
/**
* Retrieve the localized string for the specified entity id.
*
--- a/testing/marionette/listener.js
+++ b/testing/marionette/listener.js
@@ -18,17 +18,28 @@ Cu.import("resource://gre/modules/Prefer
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("chrome://marionette/content/accessibility.js");
Cu.import("chrome://marionette/content/action.js");
Cu.import("chrome://marionette/content/atom.js");
Cu.import("chrome://marionette/content/capture.js");
Cu.import("chrome://marionette/content/element.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ ElementNotInteractableError,
+ error,
+ InsecureCertificateError,
+ InvalidArgumentError,
+ InvalidElementStateError,
+ InvalidSelectorError,
+ NoSuchElementError,
+ NoSuchFrameError,
+ TimeoutError,
+ UnknownError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/evaluate.js");
Cu.import("chrome://marionette/content/event.js");
Cu.import("chrome://marionette/content/interaction.js");
Cu.import("chrome://marionette/content/legacyaction.js");
Cu.import("chrome://marionette/content/navigate.js");
Cu.import("chrome://marionette/content/proxy.js");
Cu.import("chrome://marionette/content/session.js");
--- a/testing/marionette/proxy.js
+++ b/testing/marionette/proxy.js
@@ -4,17 +4,20 @@
"use strict";
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ WebDriverError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/modal.js");
this.EXPORTED_SYMBOLS = ["proxy"];
const uuidgen = Cc["@mozilla.org/uuid-generator;1"]
.getService(Ci.nsIUUIDGenerator);
const logger = Log.repository.getLogger("Marionette");
--- a/testing/marionette/reftest.js
+++ b/testing/marionette/reftest.js
@@ -7,16 +7,18 @@
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("chrome://marionette/content/assert.js");
Cu.import("chrome://marionette/content/capture.js");
+const {InvalidArgumentError} =
+ Cu.import("chrome//marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["reftest"];
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
const PREF_E10S = "browser.tabs.remote.autostart";
const logger = Log.repository.getLogger("Marionette");
--- a/testing/marionette/server.js
+++ b/testing/marionette/server.js
@@ -16,17 +16,20 @@ const ServerSocket = CC(
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("chrome://marionette/content/assert.js");
Cu.import("chrome://marionette/content/driver.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ UnknownCommandError,
+} = Cu.import("chrome://marionette/content/error.js", {});
Cu.import("chrome://marionette/content/message.js");
Cu.import("chrome://marionette/content/transport.js");
XPCOMUtils.defineLazyServiceGetter(
this, "env", "@mozilla.org/process/environment;1", "nsIEnvironment");
const logger = Log.repository.getLogger("Marionette");
--- a/testing/marionette/session.js
+++ b/testing/marionette/session.js
@@ -6,17 +6,20 @@
const {interfaces: Ci, utils: Cu} = Components;
Cu.import("resource://gre/modules/Log.jsm");
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("chrome://marionette/content/assert.js");
-Cu.import("chrome://marionette/content/error.js");
+const {
+ error,
+ InvalidArgumentError,
+} = Cu.import("chrome://marionette/content/error.js", {});
this.EXPORTED_SYMBOLS = ["session"];
const logger = Log.repository.getLogger("Marionette");
const {pprint} = error;
// Enable testing this module, as Services.appinfo.* is not available
// in xpcshell tests.