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
This commit is contained in:
Jared Wein 2017-03-14 19:58:38 -04:00
Родитель 8eb3901b10
Коммит bb9354d1a2
4 изменённых файлов: 26 добавлений и 55 удалений

Просмотреть файл

@ -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;

Просмотреть файл

@ -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 <xul:browser>.
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);

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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;