From bb9354d1a2ff19e6a8614d2db9e2b5f13879785f Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Tue, 14 Mar 2017 19:58:38 -0400 Subject: [PATCH] Bug 1345375 - Use the FullZoomChange event instead of browser-fullZoom observers since FullZoomChange works on MediaDocuments. r=dao MozReview-Commit-ID: 9SYHLc2FluC --HG-- extra : rebase_source : 9468cd5b1f67461e4338d4e0782761667f2f2184 --- .../customizableui/CustomizableWidgets.jsm | 6 +-- browser/modules/URLBarZoom.jsm | 40 ++++++++++--------- .../test/browser/browser_urlBar_zoom.js | 21 +--------- toolkit/content/browser-content.js | 14 ------- 4 files changed, 26 insertions(+), 55 deletions(-) diff --git a/browser/components/customizableui/CustomizableWidgets.jsm b/browser/components/customizableui/CustomizableWidgets.jsm index e2959dbd7fe7..c6e1c70bcfa4 100644 --- a/browser/components/customizableui/CustomizableWidgets.jsm +++ b/browser/components/customizableui/CustomizableWidgets.jsm @@ -726,9 +726,8 @@ const CustomizableWidgets = [ } // Register ourselves with the service so we know when the zoom prefs change. - Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:zoomChange", false); - Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:zoomReset", false); Services.obs.addObserver(updateZoomResetButton, "browser-fullZoom:location-change", false); + window.addEventListener("FullZoomChange", updateZoomResetButton); if (inPanel) { let panel = aDocument.getElementById(kPanelId); @@ -805,9 +804,8 @@ const CustomizableWidgets = [ return; CustomizableUI.removeListener(listener); - Services.obs.removeObserver(updateZoomResetButton, "browser-fullZoom:zoomChange"); - Services.obs.removeObserver(updateZoomResetButton, "browser-fullZoom:zoomReset"); Services.obs.removeObserver(updateZoomResetButton, "browser-fullZoom:location-change"); + window.removeEventListener("FullZoomChange", updateZoomResetButton); let panel = aDoc.getElementById(kPanelId); panel.removeEventListener("popupshowing", updateZoomResetButton); let container = aDoc.defaultView.gBrowser.tabContainer; diff --git a/browser/modules/URLBarZoom.jsm b/browser/modules/URLBarZoom.jsm index 4539e1d290ff..97ddc5d66fd0 100644 --- a/browser/modules/URLBarZoom.jsm +++ b/browser/modules/URLBarZoom.jsm @@ -12,13 +12,15 @@ Components.utils.import("resource://gre/modules/Services.jsm"); var URLBarZoom = { init(aWindow) { aWindow.addEventListener("EndSwapDocShells", onEndSwapDocShells, true); + aWindow.addEventListener("FullZoomChange", onFullZoomChange); aWindow.addEventListener("unload", () => { aWindow.removeEventListener("EndSwapDocShells", onEndSwapDocShells, true); + aWindow.removeEventListener("FullZoomChange", onFullZoomChange); }, {once: true}); }, } -function fullZoomObserver(aSubject, aTopic) { +function fullZoomLocationChangeObserver(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. @@ -26,25 +28,35 @@ function fullZoomObserver(aSubject, aTopic) { return; } - let animate = (aTopic != "browser-fullZoom:location-change"); - updateZoomButton(aSubject, animate); + updateZoomButton(aSubject, false); } function onEndSwapDocShells(event) { updateZoomButton(event.originalTarget); } +function onFullZoomChange(event) { + let browser; + if (event.target.nodeType == event.target.DOCUMENT_NODE) { + // In non-e10s, the event is dispatched on the contentDocument + // so we need to jump through some hoops to get to the . + let gBrowser = event.currentTarget.gBrowser; + let topDoc = event.target.defaultView.top.document; + browser = gBrowser.getBrowserForDocument(topDoc); + } else { + browser = event.originalTarget; + } + updateZoomButton(browser, true); +} + /** * Updates the zoom button in the location bar. * * @param {object} aBrowser The browser that the zoomed content resides in. * @param {boolean} aAnimate Should be True for all cases unless the zoom * change is related to tab switching. Optional - * @param {number} aValue The value that should be used for the zoom control. - * If not provided then the value will be read from the window. Useful - * if the data on the window may be stale. */ -function updateZoomButton(aBrowser, aAnimate = false, aValue = undefined) { +function updateZoomButton(aBrowser, aAnimate = false) { let win = aBrowser.ownerGlobal; if (aBrowser != win.gBrowser.selectedBrowser) { return; @@ -60,12 +72,9 @@ function updateZoomButton(aBrowser, aAnimate = false, aValue = undefined) { return; } - let zoomFactor = Math.round((aValue || win.ZoomManager.zoom) * 100); + 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; - } + zoomResetButton.hidden = false; if (aAnimate) { zoomResetButton.setAttribute("animate", "true"); } else { @@ -79,9 +88,4 @@ function updateZoomButton(aBrowser, aAnimate = false, aValue = undefined) { } } -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); -Services.mm.addMessageListener("SyntheticDocument:ZoomChange", function(aMessage) { - updateZoomButton(aMessage.target, true, aMessage.data.value); -}); +Services.obs.addObserver(fullZoomLocationChangeObserver, "browser-fullZoom:location-change", false); diff --git a/browser/modules/test/browser/browser_urlBar_zoom.js b/browser/modules/test/browser/browser_urlBar_zoom.js index b7ff793c2832..48340a8f402b 100644 --- a/browser/modules/test/browser/browser_urlBar_zoom.js +++ b/browser/modules/test/browser/browser_urlBar_zoom.js @@ -24,14 +24,13 @@ add_task(function* () { let buttonZoomLevel = parseInt(zoomResetButton.getAttribute("label"), 10); is(buttonZoomLevel, expectedZoomLevel, ("Button label updated successfully to " + Math.floor(ZoomManager.zoom * 100) + "%")); - let zoomResetPromise = promiseObserverNotification("browser-fullZoom:zoomReset"); + let zoomResetPromise = BrowserTestUtils.waitForEvent(window, "FullZoomChange"); zoomResetButton.click(); yield zoomResetPromise; pageZoomLevel = Math.floor(ZoomManager.zoom * 100); expectedZoomLevel = 100; is(pageZoomLevel, expectedZoomLevel, "Clicking zoom button successfully resets browser zoom to 100%"); is(zoomResetButton.hidden, true, "Zoom reset button returns to being hidden"); - }); add_task(function* () { @@ -39,7 +38,7 @@ add_task(function* () { CustomizableUI.addWidgetToArea("zoom-controls", CustomizableUI.AREA_NAVBAR); let zoomCustomizableWidget = document.getElementById("zoom-reset-button"); let zoomResetButton = document.getElementById("urlbar-zoom-button"); - let zoomChangePromise = promiseObserverNotification("browser-fullZoom:zoomChange"); + let zoomChangePromise = BrowserTestUtils.waitForEvent(window, "FullZoomChange"); FullZoom.enlarge(); yield zoomChangePromise; is(zoomResetButton.hidden, true, "URL zoom button remains hidden despite zoom increase"); @@ -54,20 +53,4 @@ add_task(function* asyncCleanup() { CustomizableUI.removeWidgetFromArea("zoom-controls", CustomizableUI.AREA_NAVBAR); ok(!document.getElementById("zoom-controls"), "Customizable zoom widget removed from toolbar"); } - }); - -function promiseObserverNotification(aObserver) { - let deferred = Promise.defer(); - function notificationCallback(e) { - Services.obs.removeObserver(notificationCallback, aObserver); - clearTimeout(timeoutId); - deferred.resolve(); - } - let timeoutId = setTimeout(() => { - Services.obs.removeObserver(notificationCallback, aObserver); - deferred.reject("Notification '" + aObserver + "' did not happen within 20 seconds."); - }, kTimeoutInMS); - Services.obs.addObserver(notificationCallback, aObserver, false); - return deferred.promise; -} diff --git a/toolkit/content/browser-content.js b/toolkit/content/browser-content.js index be8bb0a1501b..04bd88d08e38 100644 --- a/toolkit/content/browser-content.js +++ b/toolkit/content/browser-content.js @@ -1777,20 +1777,6 @@ let DateTimePickerListener = { DateTimePickerListener.init(); -let URLBarZoom = { - init() { - addEventListener("FullZoomChange", e => { - if (!e.target.mozSyntheticDocument) { - return; - } - sendSyncMessage("SyntheticDocument:ZoomChange", - {"value": docShell.contentViewer.fullZoom}); - }); - } -}; - -URLBarZoom.init(); - addEventListener("mozshowdropdown", event => { if (!event.isTrusted) return;