Bug 1355426 - Make tabbrowser binding call blurTab earlier when removing tab. r?dao
MozReview-Commit-ID: JVIAs58p7wW
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -2880,17 +2880,16 @@
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_ANIM_MS", aTab);
this._endRemoveTab(aTab);
return;
}
// We're animating, so we can cancel the non-animation stopwatch.
TelemetryStopwatch.cancel("FX_TAB_CLOSE_TIME_NO_ANIM_MS", aTab);
- this._blurTab(aTab);
aTab.style.maxWidth = ""; // ensure that fade-out transition happens
aTab.removeAttribute("fadein");
setTimeout(function(tab, tabbrowser) {
if (tab.parentNode &&
window.getComputedStyle(tab).maxWidth == "0.1px") {
NS_ASSERT(false, "Giving up waiting for the tab closing animation to finish (bug 608589)");
tabbrowser._endRemoveTab(tab);
@@ -2915,20 +2914,27 @@
<body>
<![CDATA[
if (aTab.closing ||
this._windowIsClosing)
return false;
var browser = this.getBrowserForTab(aTab);
- if (!aTab._pendingPermitUnload &&
- !aSkipPermitUnload &&
- aTab.linkedPanel &&
- !aAdoptedByTab) {
+ let checkPermitUnload = !aSkipPermitUnload &&
+ !aAdoptedByTab &&
+ aTab.linkedPanel &&
+ !aTab._pendingPermitUnload;
+
+ if (checkPermitUnload && browser.isRemoteBrowser) {
+ checkPermitUnload = browser.frameLoader.tabParent &&
+ browser.frameLoader.tabParent.hasBeforeUnload;
+ }
+
+ if (checkPermitUnload) {
TelemetryStopwatch.start("FX_TAB_CLOSE_PERMIT_UNLOAD_TIME_MS", aTab);
// We need to block while calling permitUnload() because it
// processes the event queue and may lead to another removeTab()
// call before permitUnload() returns.
aTab._pendingPermitUnload = true;
let {permitUnload, timedOut} = browser.permitUnload();
delete aTab._pendingPermitUnload;
@@ -2938,16 +2944,17 @@
// If we were closed during onbeforeunload, we return false now
// so we don't (try to) close the same tab again. Of course, we
// also stop if the unload was cancelled by the user:
if (aTab.closing || (!timedOut && !permitUnload)) {
return false;
}
}
+ this._blurTab(aTab);
var closeWindow = false;
var newTab = false;
if (this.tabs.length - this._removingTabs.length == 1) {
closeWindow = aCloseWindowWithLastTab != null ? aCloseWindowWithLastTab :
!window.toolbar.visible ||
Services.prefs.getBoolPref("browser.tabs.closeWindowWithLastTab");