Bug 1454441 - 4. Fix Fennec remote debugging; r?esawin
Currently Fennec remote debugging has a bug where custom tabs / PWA can
permanently override debugging of Fennec tabs. Fix that bug by switching
between the browser/geckoview window types depending on if the Fennec
window is gaining or losing focus.
MozReview-Commit-ID: 2BhAOPFz3c0
--- a/mobile/android/chrome/content/RemoteDebugger.js
+++ b/mobile/android/chrome/content/RemoteDebugger.js
@@ -7,19 +7,40 @@
XPCOMUtils.defineLazyGetter(this, "DebuggerServer", () => {
let { require } = ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
let { DebuggerServer } = require("devtools/server/main");
return DebuggerServer;
});
var RemoteDebugger = {
- init() {
+ init(aWindow) {
+ this._windowType = "navigator:browser";
+
USBRemoteDebugger.init();
WiFiRemoteDebugger.init();
+
+ const listener = (event) => {
+ if (event.target !== aWindow) {
+ return;
+ }
+
+ const newType = (event.type === "activate") ? "navigator:browser"
+ : "navigator:geckoview";
+ if (this._windowType === newType) {
+ return;
+ }
+
+ this._windowType = newType;
+ if (this.isAnyEnabled) {
+ this.initServer();
+ }
+ };
+ aWindow.addEventListener("activate", listener, { mozSystemGroup: true });
+ aWindow.addEventListener("deactivate", listener, { mozSystemGroup: true });
},
get isAnyEnabled() {
return USBRemoteDebugger.isEnabled || WiFiRemoteDebugger.isEnabled;
},
/**
* Prompt the user to accept or decline the incoming connection.
@@ -179,16 +200,17 @@ var RemoteDebugger = {
DebuggerServer.init();
// Add browser and Fennec specific actors
DebuggerServer.registerAllActors();
DebuggerServer.registerModule("resource://gre/modules/dbg-browser-actors.js");
// Allow debugging of chrome for any process
DebuggerServer.allowChromeProcess = true;
+ DebuggerServer.chromeWindowType = this._windowType;
}
};
RemoteDebugger.allowConnection =
RemoteDebugger.allowConnection.bind(RemoteDebugger);
RemoteDebugger.receiveOOB =
RemoteDebugger.receiveOOB.bind(RemoteDebugger);
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -423,17 +423,17 @@ var BrowserApp = {
}
});
NativeWindow.init();
IndexedDB.init();
XPInstallObserver.init();
CharacterEncoding.init();
ActivityObserver.init();
- RemoteDebugger.init();
+ RemoteDebugger.init(window);
DesktopUserAgent.init();
Distribution.init();
Tabs.init();
SearchEngines.init();
Experiments.init();
// XXX maybe we don't do this if the launch was kicked off from external
Services.io.offline = false;
--- a/mobile/android/tests/browser/chrome/test_debugger_server.html
+++ b/mobile/android/tests/browser/chrome/test_debugger_server.html
@@ -18,17 +18,17 @@ Migrated from Robocop: https://bugzilla.
ChromeUtils.import("resource://gre/modules/Services.jsm");
const { require } =
ChromeUtils.import("resource://devtools/shared/Loader.jsm", {});
const { DebuggerServer } = require("devtools/server/main");
let win = Services.wm.getMostRecentWindow("navigator:browser");
- win.RemoteDebugger.init();
+ win.RemoteDebugger.init(win);
SimpleTest.registerCleanupFunction(function() {
Services.prefs.clearUserPref(DEBUGGER_USB_ENABLED);
});
// Enable the debugger via the pref it listens for
Services.prefs.setBoolPref(DEBUGGER_USB_ENABLED, true);