--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -13,16 +13,17 @@ Cu.import("resource://gre/modules/Log.js
Cu.import("resource://gre/modules/Preferences.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyServiceGetter(
this, "cookieManager", "@mozilla.org/cookiemanager;1", "nsICookieManager2");
Cu.import("chrome://marionette/content/accessibility.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/element.js");
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");
@@ -643,61 +644,61 @@ GeckoDriver.prototype.setSessionCapabili
caps = copy(newCaps, caps);
logger.config("Changing capabilities: " + JSON.stringify(caps));
this.sessionCapabilities = caps;
};
GeckoDriver.prototype.setUpProxy = function(proxy) {
logger.config("User-provided proxy settings: " + JSON.stringify(proxy));
- if (typeof proxy == "object" && proxy.hasOwnProperty("proxyType")) {
- switch (proxy.proxyType.toUpperCase()) {
- case "MANUAL":
- Preferences.set("network.proxy.type", 1);
- if (proxy.httpProxy && proxy.httpProxyPort){
- Preferences.set("network.proxy.http", proxy.httpProxy);
- Preferences.set("network.proxy.http_port", proxy.httpProxyPort);
- }
- if (proxy.sslProxy && proxy.sslProxyPort){
- Preferences.set("network.proxy.ssl", proxy.sslProxy);
- Preferences.set("network.proxy.ssl_port", proxy.sslProxyPort);
- }
- if (proxy.ftpProxy && proxy.ftpProxyPort) {
- Preferences.set("network.proxy.ftp", proxy.ftpProxy);
- Preferences.set("network.proxy.ftp_port", proxy.ftpProxyPort);
- }
- if (proxy.socksProxy) {
- Preferences.set("network.proxy.socks", proxy.socksProxy);
- Preferences.set("network.proxy.socks_port", proxy.socksProxyPort);
- if (proxy.socksVersion) {
- Preferences.set("network.proxy.socks_version", proxy.socksVersion);
- }
+ assert.object(proxy);
+ if (!proxy.hasOwnProperty("proxyType")) {
+ throw new InvalidArgumentError();
+ }
+ switch (proxy.proxyType.toUpperCase()) {
+ case "MANUAL":
+ Preferences.set("network.proxy.type", 1);
+ if (proxy.httpProxy && proxy.httpProxyPort){
+ Preferences.set("network.proxy.http", proxy.httpProxy);
+ Preferences.set("network.proxy.http_port", proxy.httpProxyPort);
+ }
+ if (proxy.sslProxy && proxy.sslProxyPort){
+ Preferences.set("network.proxy.ssl", proxy.sslProxy);
+ Preferences.set("network.proxy.ssl_port", proxy.sslProxyPort);
+ }
+ if (proxy.ftpProxy && proxy.ftpProxyPort) {
+ Preferences.set("network.proxy.ftp", proxy.ftpProxy);
+ Preferences.set("network.proxy.ftp_port", proxy.ftpProxyPort);
+ }
+ if (proxy.socksProxy) {
+ Preferences.set("network.proxy.socks", proxy.socksProxy);
+ Preferences.set("network.proxy.socks_port", proxy.socksProxyPort);
+ if (proxy.socksVersion) {
+ Preferences.set("network.proxy.socks_version", proxy.socksVersion);
}
- break;
+ }
+ break;
- case "PAC":
- Preferences.set("network.proxy.type", 2);
- Preferences.set("network.proxy.autoconfig_url", proxy.proxyAutoconfigUrl);
- break;
-
- case "AUTODETECT":
- Preferences.set("network.proxy.type", 4);
- break;
+ case "PAC":
+ Preferences.set("network.proxy.type", 2);
+ Preferences.set("network.proxy.autoconfig_url", proxy.proxyAutoconfigUrl);
+ break;
- case "SYSTEM":
- Preferences.set("network.proxy.type", 5);
- break;
+ case "AUTODETECT":
+ Preferences.set("network.proxy.type", 4);
+ break;
- case "NOPROXY":
- default:
- Preferences.set("network.proxy.type", 0);
- break;
- }
- } else {
- throw new InvalidArgumentError("Value of 'proxy' should be an object");
+ case "SYSTEM":
+ Preferences.set("network.proxy.type", 5);
+ break;
+
+ case "NOPROXY":
+ default:
+ Preferences.set("network.proxy.type", 0);
+ break;
}
};
/**
* Log message. Accepts user defined log-level.
*
* @param {string} value
* Log message.
@@ -1260,20 +1261,18 @@ GeckoDriver.prototype.getWindowPosition
* Object with |x| and |y| coordinates.
*/
GeckoDriver.prototype.setWindowPosition = function(cmd, resp) {
if (this.appName != "Firefox") {
throw new UnsupportedOperationError("Unable to set the window position on mobile");
}
let {x, y} = cmd.parameters;
- if (!Number.isInteger(x) || !Number.isInteger(y) ||
- x < 0 || y < 0) {
- throw new InvalidArgumentError();
- }
+ assert.positiveInteger(x);
+ assert.positiveInteger(y);
let win = this.getCurrentWindow();
win.moveTo(x, y);
return this.curBrowser.position;
};
/**
@@ -1565,19 +1564,17 @@ GeckoDriver.prototype.timeouts = functio
"ms" in cmd.parameters) {
logger.warn("Using deprecated data structure for setting timeouts");
timeouts = {[cmd.parameters.type]: parseInt(cmd.parameters.ms)};
} else {
timeouts = cmd.parameters;
}
for (let [typ, ms] of Object.entries(timeouts)) {
- if (!Number.isInteger(ms)) {
- throw new InvalidArgumentError();
- }
+ assert.positiveInteger(ms);
switch (typ) {
case "implicit":
this.searchTimeout = ms;
break;
case "script":
this.scriptTimeout = ms;
@@ -2006,20 +2003,17 @@ GeckoDriver.prototype.getElementRect = f
*
* @param {string} id
* Reference ID to the element that will be checked.
* @param {string} value
* Value to send to the element.
*/
GeckoDriver.prototype.sendKeysToElement = function*(cmd, resp) {
let {id, value} = cmd.parameters;
-
- if (!value) {
- throw new InvalidArgumentError(`Expected character sequence: ${value}`);
- }
+ assert.defined(value, `Expected character sequence: ${value}`);
switch (this.context) {
case Context.CHROME:
let win = this.getCurrentWindow();
let el = this.curBrowser.seenEls.get(id, {frame: win});
yield interaction.sendKeysToElement(
el, value, true, this.sessionCapabilities.raisesAccessibilityExceptions);
break;
@@ -2431,29 +2425,28 @@ GeckoDriver.prototype.getScreenOrientati
* orientation values. If the orientation is unknown, an error will
* be raised.
*
* Valid orientations are "portrait" and "landscape", which fall
* back to "portrait-primary" and "landscape-primary" respectively,
* and "portrait-secondary" as well as "landscape-secondary".
*/
GeckoDriver.prototype.setScreenOrientation = function(cmd, resp) {
- if (this.appName == "Firefox") {
- throw new UnsupportedOperationError();
- }
+ assert.fennec();
const ors = [
"portrait", "landscape",
"portrait-primary", "landscape-primary",
- "portrait-secondary", "landscape-secondary"
+ "portrait-secondary", "landscape-secondary",
];
let or = String(cmd.parameters.orientation);
+ assert.string(or);
let mozOr = or.toLowerCase();
- if (ors.indexOf(mozOr) < 0) {
+ if (!ors.include(mozOr)) {
throw new InvalidArgumentError(`Unknown screen orientation: ${or}`);
}
let win = this.getCurrentWindow();
if (!win.screen.mozLockOrientation(mozOr)) {
throw new WebDriverError(`Unable to set screen orientation: ${or}`);
}
};
@@ -2581,20 +2574,17 @@ GeckoDriver.prototype._checkIfAlertIsPre
*
* This method is used for custom in application shutdowns via marionette.quit()
* or marionette.restart(), like File -> Quit.
*
* @param {boolean} state
* True if the server should accept new socket connections.
*/
GeckoDriver.prototype.acceptConnections = function(cmd, resp) {
- if (typeof cmd.parameters.value != "boolean") {
- throw InvalidArgumentError("Value has to be of type 'boolean'");
- }
-
+ assert.boolean(cmd.parameters.value);
this._server.acceptConnections = cmd.parameters.value;
}
/**
* Quits Firefox with the provided flags and tears down the current
* session.
*/
GeckoDriver.prototype.quitApplication = function(cmd, resp) {