Bug 1248600 - Remove registerBrowserWindow/forgetBrowserWindow calls from /browser/. r=jryans

--HG--
rename : devtools/client/devtools-clhandler.js => devtools/client/devtools-startup.js
rename : devtools/client/devtools-clhandler.manifest => devtools/client/devtools-startup.manifest
This commit is contained in:
Alexandre Poirot 2016-02-22 06:57:15 -08:00
Родитель b4d417454e
Коммит fb5133261e
6 изменённых файлов: 88 добавлений и 39 удалений

Просмотреть файл

@ -1291,9 +1291,6 @@ var gBrowserInit = {
gBrowserThumbnails.init(); gBrowserThumbnails.init();
// Add Devtools menuitems and listeners
gDevToolsBrowser.registerBrowserWindow(window);
gMenuButtonBadgeManager.init(); gMenuButtonBadgeManager.init();
gMenuButtonUpdateBadge.init(); gMenuButtonUpdateBadge.init();
@ -1407,8 +1404,6 @@ var gBrowserInit = {
if (!this._loadHandled) if (!this._loadHandled)
return; return;
gDevToolsBrowser.forgetBrowserWindow(window);
let desc = Object.getOwnPropertyDescriptor(window, "DeveloperToolbar"); let desc = Object.getOwnPropertyDescriptor(window, "DeveloperToolbar");
if (desc && !desc.get) { if (desc && !desc.get) {
DeveloperToolbar.destroy(); DeveloperToolbar.destroy();

Просмотреть файл

@ -375,8 +375,8 @@
@RESPATH@/browser/components/nsBrowserGlue.js @RESPATH@/browser/components/nsBrowserGlue.js
@RESPATH@/browser/components/nsSetDefaultBrowser.manifest @RESPATH@/browser/components/nsSetDefaultBrowser.manifest
@RESPATH@/browser/components/nsSetDefaultBrowser.js @RESPATH@/browser/components/nsSetDefaultBrowser.js
@RESPATH@/browser/components/devtools-clhandler.manifest @RESPATH@/browser/components/devtools-startup.manifest
@RESPATH@/browser/components/devtools-clhandler.js @RESPATH@/browser/components/devtools-startup.js
@RESPATH@/browser/components/webideCli.js @RESPATH@/browser/components/webideCli.js
@RESPATH@/browser/components/webideComponents.manifest @RESPATH@/browser/components/webideComponents.manifest
@RESPATH@/browser/components/Experiments.manifest @RESPATH@/browser/components/Experiments.manifest

Просмотреть файл

@ -6,6 +6,15 @@
bug 1242893 is fixed */ bug 1242893 is fixed */
/* globals BrowserToolboxProcess */ /* globals BrowserToolboxProcess */
/**
* This XPCOM component is loaded very early.
* It handles command line arguments like -jsconsole, but also ensures starting
* core modules like devtools/devtools-browser that listen for application
* startup.
*
* Be careful to lazy load dependencies as much as possible.
**/
"use strict"; "use strict";
const { interfaces: Ci, utils: Cu } = Components; const { interfaces: Ci, utils: Cu } = Components;
@ -16,9 +25,9 @@ const kDebuggerPrefs = [
Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Services", "resource://gre/modules/Services.jsm");
function devtoolsCommandlineHandler() {} function DevToolsStartup() {}
devtoolsCommandlineHandler.prototype = { DevToolsStartup.prototype = {
handle: function(cmdLine) { handle: function(cmdLine) {
let consoleFlag = cmdLine.handleFlag("jsconsole", false); let consoleFlag = cmdLine.handleFlag("jsconsole", false);
let debuggerFlag = cmdLine.handleFlag("jsdebugger", false); let debuggerFlag = cmdLine.handleFlag("jsdebugger", false);
@ -30,9 +39,6 @@ devtoolsCommandlineHandler.prototype = {
if (debuggerFlag) { if (debuggerFlag) {
this.handleDebuggerFlag(cmdLine); this.handleDebuggerFlag(cmdLine);
} }
if (devtoolsFlag) {
this.handleDevToolsFlag();
}
let debuggerServerFlag; let debuggerServerFlag;
try { try {
debuggerServerFlag = debuggerServerFlag =
@ -45,19 +51,35 @@ devtoolsCommandlineHandler.prototype = {
if (debuggerServerFlag) { if (debuggerServerFlag) {
this.handleDebuggerServerFlag(cmdLine, debuggerServerFlag); this.handleDebuggerServerFlag(cmdLine, debuggerServerFlag);
} }
let onStartup = function(window) {
Services.obs.removeObserver(onStartup,
"browser-delayed-startup-finished");
// Ensure loading core module once firefox is ready
this.initDevTools();
if (devtoolsFlag) {
this.handleDevToolsFlag();
}
}.bind(this);
Services.obs.addObserver(onStartup, "browser-delayed-startup-finished", false);
},
initDevTools: function() {
let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
// Ensure loading main devtools module that hooks up into browser UI
// and initialize all devtools machinery.
// browser.xul or main top-level document used to load this module,
// but this code may be called without/before it.
require("devtools/client/framework/devtools-browser");
}, },
handleConsoleFlag: function(cmdLine) { handleConsoleFlag: function(cmdLine) {
let window = Services.wm.getMostRecentWindow("devtools:webconsole"); let window = Services.wm.getMostRecentWindow("devtools:webconsole");
if (!window) { if (!window) {
let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {}); this.initDevTools();
// Ensure loading main devtools module that hooks up into browser UI
// and initialize all devtools machinery.
// browser.xul or main top-level document used to load this module,
// but this code may be called without/before it.
// Bug 1247203 should ease handling this.
require("devtools/client/framework/devtools-browser");
let { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
let hudservice = require("devtools/client/webconsole/hudservice"); let hudservice = require("devtools/client/webconsole/hudservice");
let { console } = Cu.import("resource://gre/modules/Console.jsm", {}); let { console } = Cu.import("resource://gre/modules/Console.jsm", {});
hudservice.toggleBrowserConsole().then(null, console.error); hudservice.toggleBrowserConsole().then(null, console.error);
@ -73,15 +95,11 @@ devtoolsCommandlineHandler.prototype = {
// Open the toolbox on the selected tab once the browser starts up. // Open the toolbox on the selected tab once the browser starts up.
handleDevToolsFlag: function() { handleDevToolsFlag: function() {
Services.obs.addObserver(function onStartup(window) { const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
Services.obs.removeObserver(onStartup, const {gDevTools} = require("devtools/client/framework/devtools");
"browser-delayed-startup-finished"); const {TargetFactory} = require("devtools/client/framework/target");
const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); let target = TargetFactory.forTab(window.gBrowser.selectedTab);
const {gDevTools} = require("devtools/client/framework/devtools"); gDevTools.showToolbox(target);
const {TargetFactory} = require("devtools/client/framework/target");
let target = TargetFactory.forTab(window.gBrowser.selectedTab);
gDevTools.showToolbox(target);
}, "browser-delayed-startup-finished", false);
}, },
_isRemoteDebuggingEnabled() { _isRemoteDebuggingEnabled() {
@ -168,4 +186,4 @@ devtoolsCommandlineHandler.prototype = {
}; };
this.NSGetFactory = XPCOMUtils.generateNSGetFactory( this.NSGetFactory = XPCOMUtils.generateNSGetFactory(
[devtoolsCommandlineHandler]); [DevToolsStartup]);

Просмотреть файл

@ -1,2 +1,2 @@
component {9e9a9283-0ce9-4e4a-8f1c-ba129a032c32} devtools-clhandler.js component {9e9a9283-0ce9-4e4a-8f1c-ba129a032c32} devtools-startup.js
contract @mozilla.org/toolkit/console-clh;1 {9e9a9283-0ce9-4e4a-8f1c-ba129a032c32} contract @mozilla.org/toolkit/console-clh;1 {9e9a9283-0ce9-4e4a-8f1c-ba129a032c32}

Просмотреть файл

@ -4,6 +4,14 @@
"use strict"; "use strict";
/**
* This is the main module loaded in Firefox desktop that handles browser
* windows and coordinates devtools around each window.
*
* This module is loaded lazily by devtools-clhandler.js, once the first
* browser window is ready (i.e. fired browser-delayed-startup-finished event)
**/
const {Cc, Ci, Cu} = require("chrome"); const {Cc, Ci, Cu} = require("chrome");
const Services = require("Services"); const Services = require("Services");
const promise = require("promise"); const promise = require("promise");
@ -116,10 +124,17 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
}, },
observe: function(subject, topic, prefName) { observe: function(subject, topic, prefName) {
if (prefName.endsWith("enabled")) { switch (topic) {
for (let win of this._trackedBrowserWindows) { case "browser-delayed-startup-finished":
this.updateCommandAvailability(win); this._registerBrowserWindow(subject);
} break;
case "nsPref:changed":
if (prefName.endsWith("enabled")) {
for (let win of this._trackedBrowserWindows) {
this.updateCommandAvailability(win);
}
}
break;
} }
}, },
@ -319,11 +334,11 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
* @param {XULDocument} doc * @param {XULDocument} doc
* The document to which menuitems and handlers are to be added * The document to which menuitems and handlers are to be added
*/ */
// Used by browser.js _registerBrowserWindow: function(win) {
registerBrowserWindow: function DT_registerBrowserWindow(win) {
this.updateCommandAvailability(win); this.updateCommandAvailability(win);
this.ensurePrefObserver(); this.ensurePrefObserver();
gDevToolsBrowser._trackedBrowserWindows.add(win); gDevToolsBrowser._trackedBrowserWindows.add(win);
win.addEventListener("unload", this);
gDevToolsBrowser._addAllToolsToMenu(win.document); gDevToolsBrowser._addAllToolsToMenu(win.document);
if (this._isFirebugInstalled()) { if (this._isFirebugInstalled()) {
@ -749,8 +764,9 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
* @param {XULWindow} win * @param {XULWindow} win
* The window containing the menu entry * The window containing the menu entry
*/ */
forgetBrowserWindow: function DT_forgetBrowserWindow(win) { _forgetBrowserWindow: function(win) {
gDevToolsBrowser._trackedBrowserWindows.delete(win); gDevToolsBrowser._trackedBrowserWindows.delete(win);
win.removeEventListener("unload", this);
// Destroy toolboxes for closed window // Destroy toolboxes for closed window
for (let [target, toolbox] of gDevTools._toolboxes) { for (let [target, toolbox] of gDevTools._toolboxes) {
@ -792,6 +808,11 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
break; break;
case "TabSelect": case "TabSelect":
gDevToolsBrowser._updateMenuCheckbox(); gDevToolsBrowser._updateMenuCheckbox();
break;
case "unload":
// top-level browser window unload
gDevToolsBrowser._forgetBrowserWindow(event.target.defaultView);
break;
} }
}, },
@ -800,7 +821,12 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
*/ */
destroy: function() { destroy: function() {
Services.prefs.removeObserver("devtools.", gDevToolsBrowser); Services.prefs.removeObserver("devtools.", gDevToolsBrowser);
Services.obs.removeObserver(gDevToolsBrowser, "browser-delayed-startup-finished");
Services.obs.removeObserver(gDevToolsBrowser.destroy, "quit-application"); Services.obs.removeObserver(gDevToolsBrowser.destroy, "quit-application");
for (let win of gDevToolsBrowser._trackedBrowserWindows) {
gDevToolsBrowser._forgetBrowserWindow(win);
}
}, },
} }
@ -820,6 +846,16 @@ gDevTools.on("toolbox-ready", gDevToolsBrowser._updateMenuCheckbox);
gDevTools.on("toolbox-destroyed", gDevToolsBrowser._updateMenuCheckbox); gDevTools.on("toolbox-destroyed", gDevToolsBrowser._updateMenuCheckbox);
Services.obs.addObserver(gDevToolsBrowser.destroy, "quit-application", false); Services.obs.addObserver(gDevToolsBrowser.destroy, "quit-application", false);
Services.obs.addObserver(gDevToolsBrowser, "browser-delayed-startup-finished", false);
// Fake end of browser window load event for all already opened windows
// that is already fully loaded.
let enumerator = Services.wm.getEnumerator("navigator:browser");
while (enumerator.hasMoreElements()) {
let win = enumerator.getNext();
if (win.gBrowserInit && win.gBrowserInit.delayedStartupFinished) {
gDevToolsBrowser._registerBrowserWindow(win);
}
}
// Load the browser devtools main module as the loader's main module. // Load the browser devtools main module as the loader's main module.
// This is done precisely here as main.js ends up dispatching the // This is done precisely here as main.js ends up dispatching the

Просмотреть файл

@ -44,8 +44,8 @@ if CONFIG['MOZ_BUILD_APP'] == 'browser':
DIRS += ['themes/shims'] DIRS += ['themes/shims']
EXTRA_COMPONENTS += [ EXTRA_COMPONENTS += [
'devtools-clhandler.js', 'devtools-startup.js',
'devtools-clhandler.manifest', 'devtools-startup.manifest',
] ]
JAR_MANIFESTS += ['jar.mn'] JAR_MANIFESTS += ['jar.mn']