From ad64adb2ee9da1742be8c6dbf80290b0ee4e01c9 Mon Sep 17 00:00:00 2001 From: Lucas Rocha <lucasr@mozilla.com> Date: Tue, 10 Apr 2012 11:05:45 +0100 Subject: [PATCH] Bug 739966 - Add a Debugger listener to Fennec (r=mfinkle) --- mobile/android/app/mobile.js | 3 + mobile/android/chrome/content/browser.js | 73 ++++++++++++++++++++ mobile/android/installer/package-manifest.in | 2 + 3 files changed, 78 insertions(+) diff --git a/mobile/android/app/mobile.js b/mobile/android/app/mobile.js index 4a9f9dfb667a0..1c01ed09badb8 100644 --- a/mobile/android/app/mobile.js +++ b/mobile/android/app/mobile.js @@ -706,3 +706,6 @@ pref("full-screen-api.enabled", true); pref("direct-texture.force.enabled", false); pref("direct-texture.force.disabled", false); + +pref("remote-debugger.enabled", false); +pref("remote-debugger.port", 6000); diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js index b449ba50b353b..f758e8c1ec57b 100644 --- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -52,6 +52,11 @@ XPCOMUtils.defineLazyGetter(this, "PluralForm", function() { return PluralForm; }); +XPCOMUtils.defineLazyGetter(this, "DebuggerServer", function() { + Cu.import("resource://gre/modules/devtools/dbg-server.jsm"); + return DebuggerServer; +}); + // Lazily-loaded browser scripts: [ ["SelectHelper", "chrome://browser/content/SelectHelper.js"], @@ -237,6 +242,7 @@ var BrowserApp = { SearchEngines.init(); ActivityObserver.init(); WebappsUI.init(); + RemoteDebugger.init(); // Init LoginManager Cc["@mozilla.org/login-manager;1"].getService(Ci.nsILoginManager); @@ -417,6 +423,7 @@ var BrowserApp = { CharacterEncoding.uninit(); SearchEngines.uninit(); WebappsUI.uninit(); + RemoteDebugger.uninit(); }, // This function returns false during periods where the browser displayed document is @@ -4618,3 +4625,69 @@ var WebappsUI = { } } } + +var RemoteDebugger = { + init: function rd_init() { + Services.prefs.addObserver("remote-debugger.", this, false); + + if (this._isEnabled()) + this._start(); + }, + + observe: function rd_observe(aSubject, aTopic, aData) { + if (aTopic != "nsPref:changed") + return; + + switch (aData) { + case "remote-debugger.enabled": + if (this._isEnabled()) + this._start(); + else + this._stop(); + break; + + case "remote-debugger.port": + if (this._isEnabled()) + this._restart(); + break; + } + }, + + uninit: function rd_uninit() { + Services.prefs.removeObserver("remote-debugger.", this); + this._stop(); + }, + + _getPort: function _rd_getPort() { + return Services.prefs.getIntPref("remote-debugger.port"); + }, + + _isEnabled: function rd_isEnabled() { + return Services.prefs.getBoolPref("remote-debugger.enabled"); + }, + + _restart: function rd_restart() { + this._stop(); + this._start(); + }, + + _start: function rd_start() { + try { + if (!DebuggerServer.initialized) { + DebuggerServer.init(); + DebuggerServer.addActors("chrome://browser/content/dbg-browser-actors.js"); + } + + let port = this._getPort(); + DebuggerServer.openListener(port, false); + dump("Remote debugger listening on port " + port); + } catch(e) { + dump("Remote debugger didn't start: " + e); + } + }, + + _stop: function rd_start() { + DebuggerServer.closeListener(); + dump("Remote debugger stopped"); + } +} diff --git a/mobile/android/installer/package-manifest.in b/mobile/android/installer/package-manifest.in index a8909a7619f2f..34d7235c33a75 100644 --- a/mobile/android/installer/package-manifest.in +++ b/mobile/android/installer/package-manifest.in @@ -199,6 +199,8 @@ @BINPATH@/components/jar.xpt @BINPATH@/components/jetpack.xpt @BINPATH@/components/jsdservice.xpt +@BINPATH@/components/jsdebugger.xpt +@BINPATH@/components/jsinspector.xpt @BINPATH@/components/layout_base.xpt @BINPATH@/components/layout_forms.xpt #ifdef NS_PRINTING -- GitLab