Bug 1456050 - Add marionette.contentListener to MarionettePrefs. r?whimboo draft
authorAndreas Tolfsen <ato@sny.no>
Mon, 23 Apr 2018 07:26:09 +0100
changeset 786407 cde304647e7343b36f60bcd7230dc382acef3e5f
parent 786406 b62f3aea32b945aecd3edee040dbe42aac6be1e2
child 786408 f0f14e8c3924b50447aed17bf60726d3818654a5
push id107448
push userbmo:ato@sny.no
push dateMon, 23 Apr 2018 06:34:28 +0000
reviewerswhimboo
bugs1456050
milestone61.0a1
Bug 1456050 - Add marionette.contentListener to MarionettePrefs. r?whimboo MozReview-Commit-ID: 1SPrw4Vwd3N
testing/marionette/driver.js
testing/marionette/prefs.js
testing/marionette/server.js
testing/marionette/test/unit/test_prefs.js
--- a/testing/marionette/driver.js
+++ b/testing/marionette/driver.js
@@ -1,17 +1,16 @@
 /* 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";
 /* global XPCNativeWrapper */
 
 ChromeUtils.import("resource://gre/modules/Log.jsm");
-ChromeUtils.import("resource://gre/modules/Preferences.jsm");
 ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 
 ChromeUtils.import("chrome://marionette/content/accessibility.js");
 ChromeUtils.import("chrome://marionette/content/addon.js");
 ChromeUtils.import("chrome://marionette/content/assert.js");
 ChromeUtils.import("chrome://marionette/content/atom.js");
 const {
@@ -59,18 +58,16 @@ Cu.importGlobalProperties(["URL"]);
 
 this.EXPORTED_SYMBOLS = ["GeckoDriver"];
 
 const APP_ID_FIREFOX = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
 
 const FRAME_SCRIPT = "chrome://marionette/content/listener.js";
 const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
 
-const CONTENT_LISTENER_PREF = "marionette.contentListener";
-
 const SUPPORTED_STRATEGIES = new Set([
   element.Strategy.ClassName,
   element.Strategy.Selector,
   element.Strategy.ID,
   element.Strategy.TagName,
   element.Strategy.XPath,
   element.Strategy.Anon,
   element.Strategy.AnonAttribute,
@@ -469,22 +466,22 @@ GeckoDriver.prototype.whenBrowserStarted
         for (let i = 0; i < mm.childCount; i++) {
           if (mm.getChildAt(i).childCount !== 0) {
             this.curBrowser.frameRegsPending += 1;
           }
         }
       }
     }
 
-    if (!Preferences.get(CONTENT_LISTENER_PREF) || !isNewSession) {
+    if (!MarionettePrefs.contentListener || !isNewSession) {
       // load listener into the remote frame
       // and any applicable new frames
       // opened after this call
       mm.loadFrameScript(FRAME_SCRIPT, true);
-      Preferences.set(CONTENT_LISTENER_PREF, true);
+      MarionettePrefs.contentListener = true;
     }
   } else {
     logger.error("Unable to load content frame script");
   }
 };
 
 /**
  * Recursively get all labeled text.
@@ -735,17 +732,17 @@ GeckoDriver.prototype.newSession = async
     } else {
       if (MarionettePrefs.clickToStart) {
         Services.prompt.alert(win, "", "Click to start execution of marionette tests");
       }
       this.startBrowser(win, true);
     }
   };
 
-  if (!Preferences.get(CONTENT_LISTENER_PREF)) {
+  if (!MarionettePrefs.contentListener) {
     waitForWindow.call(this);
   } else if (this.appId != APP_ID_FIREFOX && this.curBrowser === null) {
     // if there is a content listener, then we just wake it up
     let win = this.getCurrentWindow();
     this.addBrowser(win);
     this.whenBrowserStarted(win, false);
   } else {
     throw new WebDriverError("Session already running");
@@ -2774,17 +2771,17 @@ GeckoDriver.prototype.closeChromeWindow 
   await this.curBrowser.closeWindow();
   return this.chromeWindowHandles.map(String);
 };
 
 /** Delete Marionette session. */
 GeckoDriver.prototype.deleteSession = function() {
   if (this.curBrowser !== null) {
     // frame scripts can be safely reused
-    Preferences.set(CONTENT_LISTENER_PREF, false);
+    MarionettePrefs.contentListener = false;
 
     globalMessageManager.broadcastAsyncMessage("Marionette:Session:Delete");
     globalMessageManager.broadcastAsyncMessage("Marionette:Deregister");
 
     for (let win of this.windows) {
       if (win.messageManager) {
         win.messageManager.removeDelayedFrameScript(FRAME_SCRIPT);
       } else {
--- a/testing/marionette/prefs.js
+++ b/testing/marionette/prefs.js
@@ -161,16 +161,30 @@ class MarionetteBranch extends Branch {
    *
    * @return {boolean}
    */
   get clickToStart() {
     return this.get("debugging.clicktostart", false);
   }
 
   /**
+   * Whether content scripts can be safely reused.
+   *
+   * @deprecated
+   * @return {boolean}
+   */
+  get contentListener() {
+    return this.get("contentListener", false);
+  }
+
+  set contentListener(value) {
+    this.set("contentListener", value);
+  }
+
+  /**
    * The `marionette.port` preference, detailing which port
    * the TCP server should listen on.
    *
    * @return {number}
    */
   get port() {
     return this.get("port", 2828);
   }
--- a/testing/marionette/server.js
+++ b/testing/marionette/server.js
@@ -22,30 +22,30 @@ const {
   error,
   UnknownCommandError,
 } = ChromeUtils.import("chrome://marionette/content/error.js", {});
 const {
   Command,
   Message,
   Response,
 } = ChromeUtils.import("chrome://marionette/content/message.js", {});
+const {MarionettePrefs} = ChromeUtils.import("chrome://marionette/content/prefs.js", {});
 const {DebuggerTransport} = ChromeUtils.import("chrome://marionette/content/transport.js", {});
 
 const logger = Log.repository.getLogger("Marionette");
 
 const {KeepWhenOffline, LoopbackOnly} = Ci.nsIServerSocket;
 
 this.EXPORTED_SYMBOLS = ["server"];
 
 /** @namespace */
 this.server = {};
 
 const PROTOCOL_VERSION = 3;
 
-const PREF_CONTENT_LISTENER = "marionette.contentListener";
 const PREF_PORT = "marionette.port";
 
 /**
  * Bootstraps Marionette and handles incoming client connections.
  *
  * Starting the Marionette server will open a TCP socket sporting the
  * debugger transport interface on the provided <var>port</var>.
  * For every new connection, a {@link server.TCPConnection} is created.
@@ -67,17 +67,17 @@ server.TCPListener = class {
    * Function produces a GeckoDriver.
    *
    * Determines the application to initialise the driver with.
    *
    * @return {GeckoDriver}
    *     A driver instance.
    */
   driverFactory() {
-    Preferences.set(PREF_CONTENT_LISTENER, false);
+    MarionettePrefs.contentListener = false;
     return new GeckoDriver(Services.appinfo.ID, this);
   }
 
   set acceptConnections(value) {
     if (value) {
       if (!this.socket) {
         try {
           const flags = KeepWhenOffline | LoopbackOnly;
--- a/testing/marionette/test/unit/test_prefs.js
+++ b/testing/marionette/test/unit/test_prefs.js
@@ -99,28 +99,32 @@ add_test(function test_EnvironmentPrefs_
   }
 
   run_next_test();
 });
 
 add_test(function test_MarionettePrefs_getters() {
   equal(false, MarionettePrefs.enabled);
   equal(false, MarionettePrefs.clickToStart);
+  equal(false, MarionettePrefs.contentListener);
   equal(2828, MarionettePrefs.port);
   equal(Log.Level.Info, MarionettePrefs.logLevel);
   equal(true, MarionettePrefs.recommendedPrefs);
 
   run_next_test();
 });
 
 add_test(function test_MarionettePrefs_setters() {
   try {
     MarionettePrefs.enabled = true;
+    MarionettePrefs.contentListener = true;
     MarionettePrefs.port = 777;
     equal(true, MarionettePrefs.enabled);
+    equal(true, MarionettePrefs.contentListener);
     equal(777, MarionettePrefs.port);
   } finally {
     Services.prefs.clearUserPref("marionette.enabled");
+    Services.prefs.clearUserPref("marionette.contentListener");
     Services.prefs.clearUserPref("marionette.port");
   }
 
   run_next_test();
 });