Bug 1454441 - 2. Move remote debugger usage to GeckoViewStartup; r?esawin draft
authorJim Chen <nchen@mozilla.com>
Mon, 23 Apr 2018 12:07:34 -0400
changeset 786582 956a0355cb401b34b5f75f2f42305fce7b7e1f48
parent 786581 4c5a892a0e86338539ddce48e816d66098e582a7
child 786583 7d7f6c1d367c467a40a79557cc9d02d05cc8cb8c
push id107530
push userbmo:nchen@mozilla.com
push dateMon, 23 Apr 2018 16:15:55 +0000
reviewersesawin
bugs1454441
milestone61.0a1
Bug 1454441 - 2. Move remote debugger usage to GeckoViewStartup; r?esawin Move GeckoViewRemoteDebugger.jsm usage from geckoview.js to GeckoViewStartup.js. MozReview-Commit-ID: 92qNB3vMH0a
mobile/android/chrome/geckoview/geckoview.js
mobile/android/components/geckoview/GeckoViewStartup.js
mobile/android/modules/geckoview/GeckoViewRemoteDebugger.jsm
--- a/mobile/android/chrome/geckoview/geckoview.js
+++ b/mobile/android/chrome/geckoview/geckoview.js
@@ -70,18 +70,16 @@ function startup() {
   ModuleManager.add("resource://gre/modules/GeckoViewContent.jsm",
                     "GeckoViewContent");
   ModuleManager.add("resource://gre/modules/GeckoViewProgress.jsm",
                     "GeckoViewProgress");
   ModuleManager.add("resource://gre/modules/GeckoViewScroll.jsm",
                     "GeckoViewScroll");
   ModuleManager.add("resource://gre/modules/GeckoViewTab.jsm",
                     "GeckoViewTab");
-  ModuleManager.add("resource://gre/modules/GeckoViewRemoteDebugger.jsm",
-                    "GeckoViewRemoteDebugger");
   ModuleManager.add("resource://gre/modules/GeckoViewTrackingProtection.jsm",
                     "GeckoViewTrackingProtection");
   ModuleManager.add("resource://gre/modules/GeckoViewSelectionAction.jsm",
                     "GeckoViewSelectionAction");
   ModuleManager.add("resource://gre/modules/GeckoViewAccessibility.jsm",
                     "GeckoViewAccessibility");
 
   window.document.documentElement.appendChild(browser);
--- a/mobile/android/components/geckoview/GeckoViewStartup.js
+++ b/mobile/android/components/geckoview/GeckoViewStartup.js
@@ -66,16 +66,28 @@ GeckoViewStartup.prototype = {
           init: cpsp => cpsp.alwaysInit(),
           ppmm: [
             "ContentPrefs:FunctionCall",
             "ContentPrefs:AddObserverForName",
             "ContentPrefs:RemoveObserverForName",
           ],
         });
 
+        GeckoViewUtils.addLazyGetter(this, "GeckoViewRemoteDebugger", {
+          module: "resource://gre/modules/GeckoViewRemoteDebugger.jsm",
+          init: gvrd => gvrd.onInit(),
+        });
+
+        GeckoViewUtils.addLazyPrefObserver({
+          name: "devtools.debugger.remote-enabled",
+          default: false,
+        }, {
+          handler: _ => this.GeckoViewRemoteDebugger,
+        });
+
         // This initializes Telemetry for GeckoView only in the parent process.
         // The Telemetry initialization for the content process is performed in
         // ContentProcessSingleton.js for consistency with Desktop Telemetry.
         GeckoViewTelemetryController.setup();
         break;
       }
     }
   },
--- a/mobile/android/modules/geckoview/GeckoViewRemoteDebugger.jsm
+++ b/mobile/android/modules/geckoview/GeckoViewRemoteDebugger.jsm
@@ -1,73 +1,88 @@
 /* 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";
 
 var EXPORTED_SYMBOLS = ["GeckoViewRemoteDebugger"];
 
-ChromeUtils.import("resource://gre/modules/GeckoViewModule.jsm");
-ChromeUtils.import("resource://gre/modules/Services.jsm");
 ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
+ChromeUtils.import("resource://gre/modules/GeckoViewUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetters(this, {
+  Services: "resource://gre/modules/Services.jsm",
+});
 
 XPCOMUtils.defineLazyGetter(this, "DebuggerServer", () => {
   const { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
   const { DebuggerServer } = require("devtools/server/main");
   return DebuggerServer;
 });
 
-class GeckoViewRemoteDebugger extends GeckoViewModule {
+GeckoViewUtils.initLogging("GeckoView.RemoteDebugger", this);
+
+var GeckoViewRemoteDebugger = {
+  observe(aSubject, aTopic, aData) {
+    if (aTopic !== "nsPref:changed") {
+      return;
+    }
+
+    if (Services.prefs.getBoolPref(aData, false)) {
+      this.onEnable();
+    } else {
+      this.onDisable();
+    }
+  },
+
   onInit() {
+    debug `onInit`;
     this._isEnabled = false;
     this._usbDebugger = new USBRemoteDebugger();
-  }
-
-  onSettingsUpdate() {
-    let enabled = this.settings.useRemoteDebugger;
-
-    if (enabled && !this._isEnabled) {
-      this.onEnable();
-    } else if (!enabled && this._isEnabled) {
-      this.onDisable();
-    }
-  }
+  },
 
   onEnable() {
+    if (this._isEnabled) {
+      return;
+    }
+
+    debug `onEnable`;
     DebuggerServer.init();
     DebuggerServer.registerAllActors();
     DebuggerServer.registerModule("resource://gre/modules/dbg-browser-actors.js");
     DebuggerServer.allowChromeProcess = true;
     DebuggerServer.chromeWindowType = "navigator:geckoview";
 
-    let windowId = this.window.QueryInterface(Ci.nsIInterfaceRequestor)
-                              .getInterface(Ci.nsIDOMWindowUtils)
-                              .outerWindowID;
-    let env = Cc["@mozilla.org/process/environment;1"]
+    const env = Cc["@mozilla.org/process/environment;1"]
               .getService(Ci.nsIEnvironment);
-    let dataDir = env.get("MOZ_ANDROID_DATA_DIR");
+    const dataDir = env.get("MOZ_ANDROID_DATA_DIR");
 
     if (!dataDir) {
       warn `Missing env MOZ_ANDROID_DATA_DIR - aborting debugger server start`;
       return;
     }
 
     this._isEnabled = true;
     this._usbDebugger.stop();
 
-    let portOrPath = dataDir + "/firefox-debugger-socket-" + windowId;
+    const portOrPath = dataDir + "/firefox-debugger-socket";
     this._usbDebugger.start(portOrPath);
-  }
+  },
 
   onDisable() {
+    if (!this._isEnabled) {
+      return;
+    }
+
+    debug `onDisable`;
     this._isEnabled = false;
     this._usbDebugger.stop();
-  }
-}
+  },
+};
 
 class USBRemoteDebugger {
   start(aPortOrPath) {
     try {
       let AuthenticatorType = DebuggerServer.Authenticators.get("PROMPT");
       let authenticator = new AuthenticatorType.Server();
       authenticator.allowConnection = this.allowConnection.bind(this);
       this._listener = DebuggerServer.createListener();