Bug 1229471 - LoopUI shouldn't try to use toolbar buttons in the hidden window. r=mikedeboer

This commit is contained in:
Mark Banner 2015-12-02 16:08:34 +00:00
Родитель b62903e4e0
Коммит 49fbc4cc87
1 изменённых файлов: 35 добавлений и 26 удалений

61
browser/extensions/loop/bootstrap.js поставляемый
Просмотреть файл

@ -40,7 +40,8 @@ var WindowListener = {
var LoopUI = { var LoopUI = {
/** /**
* @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton * @var {XULWidgetSingleWrapper} toolbarButton Getter for the Loop toolbarbutton
* instance for this window. * instance for this window. This should
* not be used in the hidden window.
*/ */
get toolbarButton() { get toolbarButton() {
delete this.toolbarButton; delete this.toolbarButton;
@ -263,18 +264,10 @@ var WindowListener = {
}, },
/** /**
* Triggers the initialization of the loop service. Called by * Triggers the initialization of the loop service if necessary.
* delayedStartup. * Also adds appropraite observers for the UI.
*/ */
init: function() { init: function() {
// Cleanup when the window unloads.
window.addEventListener("unload", () => {
this.uninit();
});
// Add observer notifications before the service is initialized
Services.obs.addObserver(this, "loop-status-changed", false);
// This is a promise for test purposes, but we don't want to be logging // This is a promise for test purposes, but we don't want to be logging
// expected errors to the console, so we catch them here. // expected errors to the console, so we catch them here.
this.MozLoopService.initialize().catch(ex => { this.MozLoopService.initialize().catch(ex => {
@ -284,11 +277,21 @@ var WindowListener = {
console.error(ex); console.error(ex);
} }
}); });
this.updateToolbarState();
},
uninit: function() { // Don't do the rest if this is for the hidden window - we don't
Services.obs.removeObserver(this, "loop-status-changed"); // have a toolbar there.
if (window == Services.appShell.hiddenDOMWindow) {
return;
}
// Cleanup when the window unloads.
window.addEventListener("unload", () => {
Services.obs.removeObserver(this, "loop-status-changed");
});
Services.obs.addObserver(this, "loop-status-changed", false);
this.updateToolbarState();
}, },
// Implements nsIObserver // Implements nsIObserver
@ -300,7 +303,8 @@ var WindowListener = {
}, },
/** /**
* Updates the toolbar/menu-button state to reflect Loop status. * Updates the toolbar/menu-button state to reflect Loop status. This should
* not be called from the hidden window.
* *
* @param {string} [aReason] Some states are only shown if * @param {string} [aReason] Some states are only shown if
* a related reason is provided. * a related reason is provided.
@ -352,7 +356,8 @@ var WindowListener = {
}, },
/** /**
* Updates the tootltiptext to reflect Loop status. * Updates the tootltiptext to reflect Loop status. This should not be called
* from the hidden window.
* *
* @param {string} [mozL10nId] l10n ID that refelct the current * @param {string} [mozL10nId] l10n ID that refelct the current
* Loop status. * Loop status.
@ -759,15 +764,17 @@ function startup() {
createLoopButton(); createLoopButton();
// Attach to hidden window (for OS X). // Attach to hidden window (for OS X).
try { if (AppConstants.platform == "macosx") {
WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow); try {
} catch (ex) {
// Hidden window didn't exist, so wait until startup is done.
let topic = "browser-delayed-startup-finished";
Services.obs.addObserver(function observer() {
Services.obs.removeObserver(observer, topic);
WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow); WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow);
}, topic, false); } catch (ex) {
// Hidden window didn't exist, so wait until startup is done.
let topic = "browser-delayed-startup-finished";
Services.obs.addObserver(function observer() {
Services.obs.removeObserver(observer, topic);
WindowListener.setupBrowserUI(Services.appShell.hiddenDOMWindow);
}, topic, false);
}
} }
// Attach to existing browser windows, for modifying UI. // Attach to existing browser windows, for modifying UI.
@ -814,7 +821,9 @@ function shutdown() {
}); });
// Detach from hidden window (for OS X). // Detach from hidden window (for OS X).
WindowListener.tearDownBrowserUI(Services.appShell.hiddenDOMWindow); if (AppConstants.platform == "macosx") {
WindowListener.tearDownBrowserUI(Services.appShell.hiddenDOMWindow);
}
// Detach from browser windows. // Detach from browser windows.
let wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator); let wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);