Bug 1300376 - Update zoom indicator when moving a browser to another window. r?jaws
MozReview-Commit-ID: 3iWBQBM9jC3
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -22,17 +22,18 @@ Cu.import("resource://gre/modules/Notifi
GMPInstallManager:false, LightweightThemeManager:false, Log:false,
LoginManagerParent:false, NewTabUtils:false, PageThumbs:false,
PluralForm:false, Preferences:false, PrivateBrowsingUtils:false,
ProcessHangMonitor:false, PromiseUtils:false, ReaderMode:false,
ReaderParent:false, RecentWindow:false, SessionStore:false,
ShortcutUtils:false, SimpleServiceDiscovery:false, SitePermissions:false,
Social:false, TabCrashHandler:false, Task:false, TelemetryStopwatch:false,
Translation:false, UITour:false, UpdateUtils:false, Weave:false,
- fxAccounts:false, gDevTools:false, gDevToolsBrowser:false, webrtcUI:false
+ fxAccounts:false, gDevTools:false, gDevToolsBrowser:false, webrtcUI:false,
+ URLBarZoom:false
*/
/**
* IF YOU ADD OR REMOVE FROM THIS LIST, PLEASE UPDATE THE LIST ABOVE AS WELL.
* XXX Bug 1325373 is for making eslint detect these automatically.
*/
[
["AboutHome", "resource:///modules/AboutHome.jsm"],
@@ -69,21 +70,22 @@ Cu.import("resource://gre/modules/Notifi
["SitePermissions", "resource:///modules/SitePermissions.jsm"],
["Social", "resource:///modules/Social.jsm"],
["TabCrashHandler", "resource:///modules/ContentCrashHandlers.jsm"],
["Task", "resource://gre/modules/Task.jsm"],
["TelemetryStopwatch", "resource://gre/modules/TelemetryStopwatch.jsm"],
["Translation", "resource:///modules/translation/Translation.jsm"],
["UITour", "resource:///modules/UITour.jsm"],
["UpdateUtils", "resource://gre/modules/UpdateUtils.jsm"],
+ ["URLBarZoom", "resource:///modules/URLBarZoom.jsm"],
["Weave", "resource://services-sync/main.js"],
["fxAccounts", "resource://gre/modules/FxAccounts.jsm"],
["gDevTools", "resource://devtools/client/framework/gDevTools.jsm"],
["gDevToolsBrowser", "resource://devtools/client/framework/gDevTools.jsm"],
- ["webrtcUI", "resource:///modules/webrtcUI.jsm", ]
+ ["webrtcUI", "resource:///modules/webrtcUI.jsm"],
].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource));
XPCOMUtils.defineLazyModuleGetter(this, "SafeBrowsing",
"resource://gre/modules/SafeBrowsing.jsm");
if (AppConstants.MOZ_CRASHREPORTER) {
XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter",
"resource:///modules/ContentCrashHandlers.jsm");
@@ -1127,16 +1129,17 @@ var gBrowserInit = {
LanguageDetectionListener.init();
BrowserOnClick.init();
FeedHandler.init();
CompactTheme.init();
AboutPrivateBrowsingListener.init();
TrackingProtection.init();
RefreshBlocker.init();
CaptivePortalWatcher.init();
+ URLBarZoom.init(window);
let mm = window.getGroupMessageManager("browsers");
mm.loadFrameScript("chrome://browser/content/tab-content.js", true);
mm.loadFrameScript("chrome://browser/content/content.js", true);
mm.loadFrameScript("chrome://browser/content/content-UITour.js", true);
mm.loadFrameScript("chrome://global/content/manifestMessages.js", true);
// initialize observers and listeners
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -27,17 +27,17 @@ XPCOMUtils.defineLazyServiceGetter(this,
FileUtils:false, FormValidationHandler:false, Integration:false,
LightweightThemeManager:false, LoginHelper:false, LoginManagerParent:false,
NetUtil:false, NewTabMessages:false, NewTabUtils:false, OS:false,
PageThumbs:false, PdfJs:false, PermissionUI:false, PlacesBackups:false,
PlacesUtils:false, PluralForm:false, PrivateBrowsingUtils:false,
ProcessHangMonitor:false, ReaderParent:false, RecentWindow:false,
RemotePrompt:false, SelfSupportBackend:false, SessionStore:false,
ShellService:false, SimpleServiceDiscovery:false, TabCrashHandler:false,
- Task:false, UITour:false, URLBarZoom:false, WebChannel:false,
+ Task:false, UITour:false, WebChannel:false,
WindowsRegistry:false, webrtcUI:false */
/**
* IF YOU ADD OR REMOVE FROM THIS LIST, PLEASE UPDATE THE LIST ABOVE AS WELL.
* XXX Bug 1325373 is for making eslint detect these automatically.
*/
[
@@ -81,17 +81,16 @@ XPCOMUtils.defineLazyServiceGetter(this,
["RemotePrompt", "resource:///modules/RemotePrompt.jsm"],
["SelfSupportBackend", "resource:///modules/SelfSupportBackend.jsm"],
["SessionStore", "resource:///modules/sessionstore/SessionStore.jsm"],
["ShellService", "resource:///modules/ShellService.jsm"],
["SimpleServiceDiscovery", "resource://gre/modules/SimpleServiceDiscovery.jsm"],
["TabCrashHandler", "resource:///modules/ContentCrashHandlers.jsm"],
["Task", "resource://gre/modules/Task.jsm"],
["UITour", "resource:///modules/UITour.jsm"],
- ["URLBarZoom", "resource:///modules/URLBarZoom.jsm"],
["WebChannel", "resource://gre/modules/WebChannel.jsm"],
["WindowsRegistry", "resource://gre/modules/WindowsRegistry.jsm"],
["webrtcUI", "resource:///modules/webrtcUI.jsm"],
].forEach(([name, resource]) => XPCOMUtils.defineLazyModuleGetter(this, name, resource));
if (AppConstants.MOZ_CRASHREPORTER) {
XPCOMUtils.defineLazyModuleGetter(this, "PluginCrashReporter",
"resource:///modules/ContentCrashHandlers.jsm");
@@ -626,17 +625,16 @@ BrowserGlue.prototype = {
ContentClick.init();
RemotePrompt.init();
Feeds.init();
ContentPrefServiceParent.init();
LoginManagerParent.init();
ReaderParent.init();
- URLBarZoom.init();
SelfSupportBackend.init();
// Ensure we keep track of places/pw-mananager undo by init'ing this early.
Cu.import("resource:///modules/AutoMigrate.jsm");
if (AppConstants.INSTALL_COMPACT_THEMES) {
let vendorShortName = gBrandBundle.GetStringFromName("vendorShortName");
--- a/browser/modules/URLBarZoom.jsm
+++ b/browser/modules/URLBarZoom.jsm
@@ -5,47 +5,71 @@
"use strict";
this.EXPORTED_SYMBOLS = [ "URLBarZoom" ];
Components.utils.import("resource://gre/modules/Services.jsm");
var URLBarZoom = {
-
init(aWindow) {
- // Register ourselves with the service so we know when the zoom prefs change.
- Services.obs.addObserver(updateZoomButton, "browser-fullZoom:zoomChange", false);
- Services.obs.addObserver(updateZoomButton, "browser-fullZoom:zoomReset", false);
- Services.obs.addObserver(updateZoomButton, "browser-fullZoom:location-change", false);
+ aWindow.addEventListener("EndSwapDocShells", onEndSwapDocShells, true);
+ aWindow.addEventListener("unload", () => {
+ aWindow.removeEventListener("EndSwapDocShells", onEndSwapDocShells, true);
+ }, {once: true});
},
}
-function updateZoomButton(aSubject, aTopic) {
- let win = aSubject.ownerGlobal;
+function fullZoomObserver(aSubject, aTopic) {
+ // If the tab was the last one in its window and has been dragged to another
+ // window, the original browser's window will be unavailable here. Since that
+ // window is closing, we can just ignore this notification.
+ if (!aSubject.ownerGlobal) {
+ return;
+ }
+
+ // Only allow pulse animation for zoom changes, not tab switching.
+ let animate = (aTopic != "browser-fullZoom:location-change");
+ updateZoomButton(aSubject, animate);
+}
+
+function onEndSwapDocShells(event) {
+ updateZoomButton(event.originalTarget);
+}
+
+function updateZoomButton(aBrowser, aAnimate = false) {
+ let win = aBrowser.ownerGlobal;
+ if (aBrowser != win.gBrowser.selectedBrowser) {
+ return;
+ }
+
let customizableZoomControls = win.document.getElementById("zoom-controls");
let zoomResetButton = win.document.getElementById("urlbar-zoom-button");
- let zoomFactor = Math.round(win.ZoomManager.zoom * 100);
// Ensure that zoom controls haven't already been added to browser in Customize Mode
if (customizableZoomControls &&
customizableZoomControls.getAttribute("cui-areatype") == "toolbar") {
zoomResetButton.hidden = true;
return;
}
+
+ let zoomFactor = Math.round(win.ZoomManager.zoom * 100);
if (zoomFactor != 100) {
// Check if zoom button is visible and update label if it is
if (zoomResetButton.hidden) {
zoomResetButton.hidden = false;
}
- // Only allow pulse animation for zoom changes, not tab switching
- if (aTopic != "browser-fullZoom:location-change") {
+ if (aAnimate) {
zoomResetButton.setAttribute("animate", "true");
} else {
zoomResetButton.removeAttribute("animate");
}
zoomResetButton.setAttribute("label",
win.gNavigatorBundle.getFormattedString("urlbar-zoom-button.label", [zoomFactor]));
- // Hide button if zoom is at 100%
} else {
- zoomResetButton.hidden = true;
+ // Hide button if zoom is at 100%
+ zoomResetButton.hidden = true;
}
}
+
+Services.obs.addObserver(fullZoomObserver, "browser-fullZoom:zoomChange", false);
+Services.obs.addObserver(fullZoomObserver, "browser-fullZoom:zoomReset", false);
+Services.obs.addObserver(fullZoomObserver, "browser-fullZoom:location-change", false);