зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1229471
- LoopUI shouldn't try to use toolbar buttons in the hidden window. r=mikedeboer
This commit is contained in:
Родитель
b62903e4e0
Коммит
49fbc4cc87
|
@ -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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче