Bug 1297535 - Register devtools menu and keys on DOMContentLoaded to happen before CustomizableUI. r=bgrins

MozReview-Commit-ID: ACy3yJTgzyA

--HG--
extra : rebase_source : 2a092d29def1180603f733e484b8a67600092a64
This commit is contained in:
Alexandre Poirot 2016-08-24 07:26:32 -07:00
parent 4a28a26c93
commit 6724430882

View File

@ -141,6 +141,10 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
} }
} }
break; break;
case "domwindowopened":
let win = subject.QueryInterface(Ci.nsIDOMEventTarget);
win.addEventListener("DOMContentLoaded", this, { once: true });
break;
} }
}, },
@ -401,11 +405,28 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
CustomizableUI.addWidgetToArea("webide-button", CustomizableUI.AREA_NAVBAR); CustomizableUI.addWidgetToArea("webide-button", CustomizableUI.AREA_NAVBAR);
}, },
/**
* Starts setting up devtools on a given browser window. This method is
* called on DOMContentLoaded, so earlier than registerBrowserWindow which
* is called after delayed-startup notification. This method should only do
* what has to be done early. Otherwise devtools should be initialized lazily
* to prevent overloading Firefox startup.
*
* @param {ChromeWindow} window
* The window to which devtools should be hooked to.
*/
_onBrowserWindowLoaded: function (win) {
if (!win.gBrowser) {
return;
}
BrowserMenus.addMenus(win.document);
},
/** /**
* Add this DevTools's presence to a browser window's document * Add this DevTools's presence to a browser window's document
* *
* @param {XULDocument} doc * @param {ChromeWindow} win
* The document to which devtools should be hooked to. * The window to which devtools should be hooked to.
*/ */
_registerBrowserWindow: function (win) { _registerBrowserWindow: function (win) {
if (gDevToolsBrowser._trackedBrowserWindows.has(win)) { if (gDevToolsBrowser._trackedBrowserWindows.has(win)) {
@ -413,8 +434,6 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
} }
gDevToolsBrowser._trackedBrowserWindows.add(win); gDevToolsBrowser._trackedBrowserWindows.add(win);
BrowserMenus.addMenus(win.document);
// Register the Developer widget in the Hamburger menu or navbar // Register the Developer widget in the Hamburger menu or navbar
// only once menus are registered as it depends on it. // only once menus are registered as it depends on it.
gDevToolsBrowser.installDeveloperWidget(); gDevToolsBrowser.installDeveloperWidget();
@ -679,6 +698,9 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
case "TabSelect": case "TabSelect":
gDevToolsBrowser._updateMenuCheckbox(); gDevToolsBrowser._updateMenuCheckbox();
break; break;
case "DOMContentLoaded":
gDevToolsBrowser._onBrowserWindowLoaded(event.target.defaultView);
break;
case "unload": case "unload":
// top-level browser window unload // top-level browser window unload
gDevToolsBrowser._forgetBrowserWindow(event.target.defaultView); gDevToolsBrowser._forgetBrowserWindow(event.target.defaultView);
@ -708,6 +730,7 @@ var gDevToolsBrowser = exports.gDevToolsBrowser = {
*/ */
destroy: function () { destroy: function () {
Services.prefs.removeObserver("devtools.", gDevToolsBrowser); Services.prefs.removeObserver("devtools.", gDevToolsBrowser);
Services.ww.unregisterNotification(gDevToolsBrowser);
Services.obs.removeObserver(gDevToolsBrowser, "browser-delayed-startup-finished"); Services.obs.removeObserver(gDevToolsBrowser, "browser-delayed-startup-finished");
Services.obs.removeObserver(gDevToolsBrowser.destroy, "quit-application"); Services.obs.removeObserver(gDevToolsBrowser.destroy, "quit-application");
@ -740,6 +763,7 @@ 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.ww.registerNotification(gDevToolsBrowser);
Services.obs.addObserver(gDevToolsBrowser, "browser-delayed-startup-finished", false); Services.obs.addObserver(gDevToolsBrowser, "browser-delayed-startup-finished", false);
// Fake end of browser window load event for all already opened windows // Fake end of browser window load event for all already opened windows
@ -748,6 +772,7 @@ let enumerator = Services.wm.getEnumerator(gDevTools.chromeWindowType);
while (enumerator.hasMoreElements()) { while (enumerator.hasMoreElements()) {
let win = enumerator.getNext(); let win = enumerator.getNext();
if (win.gBrowserInit && win.gBrowserInit.delayedStartupFinished) { if (win.gBrowserInit && win.gBrowserInit.delayedStartupFinished) {
gDevToolsBrowser._onBrowserWindowLoaded(win);
gDevToolsBrowser._registerBrowserWindow(win); gDevToolsBrowser._registerBrowserWindow(win);
} }
} }