author | Sebastian Hengst <archaeopteryx@coole-files.de> |
Wed, 04 Oct 2017 21:49:30 +0200 | |
changeset 384501 | 698c6c81677c7c4089a34c30a0b6d76042e53d18 |
parent 384500 | 9ab9bde4021f469b36c2bdd1abd254f696abfc51 |
child 384502 | e5c54805bcc18f3c700d2e4703c4e25a63fb396a |
push id | 52670 |
push user | archaeopteryx@coole-files.de |
push date | Wed, 04 Oct 2017 19:49:43 +0000 |
treeherder | autoland@698c6c81677c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | backout |
bugs | 1397744 |
milestone | 58.0a1 |
backs out | 9ab9bde4021f469b36c2bdd1abd254f696abfc51 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
browser/base/content/browser-sync.js | file | annotate | diff | comparison | revisions | |
browser/components/customizableui/test/browser_synced_tabs_menu.js | file | annotate | diff | comparison | revisions |
--- a/browser/base/content/browser-sync.js +++ b/browser/base/content/browser-sync.js @@ -519,17 +519,16 @@ var gSync = { // doSync forces a sync - it *does not* return a promise as it is called // via the various UI components. doSync() { if (!UIState.isReady()) { return; } const state = UIState.get(); if (state.status == UIState.STATUS_SIGNED_IN) { - this.updateSyncStatus({ syncing: true }); setTimeout(() => Weave.Service.errorHandler.syncAndReportErrors(), 0); } }, openPrefs(entryPoint = "syncbutton", origin = undefined) { window.openPreferences("paneSync", { origin, urlParams: { entrypoint: entryPoint } }); },
--- a/browser/components/customizableui/test/browser_synced_tabs_menu.js +++ b/browser/components/customizableui/test/browser_synced_tabs_menu.js @@ -2,17 +2,16 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; requestLongerTimeout(2); let {SyncedTabs} = Cu.import("resource://services-sync/SyncedTabs.jsm", {}); -Cu.import("resource://services-sync/UIState.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "UITour", "resource:///modules/UITour.jsm"); // These are available on the widget implementation, but it seems impossible // to grab that impl at runtime. const DECKINDEX_TABS = 0; const DECKINDEX_TABSDISABLED = 1; const DECKINDEX_FETCHING = 2; @@ -38,26 +37,28 @@ let mockedInternal = { hasSyncedThisSession: false, }; add_task(async function setup() { let oldInternal = SyncedTabs._internal; SyncedTabs._internal = mockedInternal; - let origNotifyStateUpdated = UIState._internal.notifyStateUpdated; - // Sync start-up will interfere with our tests, don't let UIState send UI updates. - UIState._internal.notifyStateUpdated = () => {}; - - // Force gSync initialization - gSync.init(); + // This test hacks some observer states to simulate a user being signed + // in to Sync - restore them when the test completes. + let initialObserverStates = {}; + for (let id of ["sync-reauth-state", "sync-setup-state", "sync-syncnow-state"]) { + initialObserverStates[id] = document.getElementById(id).hidden; + } registerCleanupFunction(() => { - UIState._internal.notifyStateUpdated = origNotifyStateUpdated; SyncedTabs._internal = oldInternal; + for (let [id, initial] of Object.entries(initialObserverStates)) { + document.getElementById(id).hidden = initial; + } }); }); // The test expects the about:preferences#sync page to open in the current tab async function openPrefsFromMenuPanel(expectedPanelId, entryPoint) { info("Check Sync button functionality"); Services.prefs.setCharPref("identity.fxaccounts.remote.signup.uri", "http://example.com/"); CustomizableUI.addWidgetToArea("sync-button", CustomizableUI.AREA_FIXED_OVERFLOW_PANEL); @@ -129,34 +130,41 @@ async function asyncCleanup() { // restore the tabs BrowserTestUtils.addTab(gBrowser, initialLocation); gBrowser.removeTab(newTab); UITour.tourBrowsersByWindow.delete(window); } // When Sync is not setup. add_task(async function() { - gSync.updateAllUI({ status: UIState.STATUS_NOT_CONFIGURED }); - await openPrefsFromMenuPanel("PanelUI-remotetabs-setupsync", "synced-tabs"); + document.getElementById("sync-reauth-state").hidden = true; + document.getElementById("sync-setup-state").hidden = false; + document.getElementById("sync-syncnow-state").hidden = true; + await openPrefsFromMenuPanel("PanelUI-remotetabs-setupsync", "synced-tabs") }); add_task(asyncCleanup); // When Sync is configured in a "needs reauthentication" state. add_task(async function() { - gSync.updateAllUI({ status: UIState.STATUS_LOGIN_FAILED, email: "foo@bar.com" }); + // configure our broadcasters so we are in the right state. + document.getElementById("sync-reauth-state").hidden = false; + document.getElementById("sync-setup-state").hidden = true; + document.getElementById("sync-syncnow-state").hidden = true; await openPrefsFromMenuPanel("PanelUI-remotetabs-reauthsync", "synced-tabs") }); // Test the mobile promo links add_task(async function() { // change the preferences for the mobile links. Services.prefs.setCharPref("identity.mobilepromo.android", "http://example.com/?os=android&tail="); Services.prefs.setCharPref("identity.mobilepromo.ios", "http://example.com/?os=ios&tail="); - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + document.getElementById("sync-reauth-state").hidden = true; + document.getElementById("sync-setup-state").hidden = true; + document.getElementById("sync-syncnow-state").hidden = false; let syncPanel = document.getElementById("PanelUI-remotetabs"); let links = syncPanel.querySelectorAll(".remotetabs-promo-link"); is(links.length, 2, "found 2 links as expected"); // test each link and left and middle mouse buttons for (let link of links) { @@ -197,17 +205,20 @@ add_task(async function() { await hideOverflow(); Services.prefs.clearUserPref("identity.mobilepromo.android"); Services.prefs.clearUserPref("identity.mobilepromo.ios"); }); // Test the "Sync Now" button add_task(async function() { - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + // configure our broadcasters so we are in the right state. + document.getElementById("sync-reauth-state").hidden = true; + document.getElementById("sync-setup-state").hidden = true; + document.getElementById("sync-syncnow-state").hidden = false; await document.getElementById("nav-bar").overflowable.show(); let tabsUpdatedPromise = promiseObserverNotified("synced-tabs-menu:test:tabs-updated"); let syncPanel = document.getElementById("PanelUI-remotetabs"); let viewShownPromise = BrowserTestUtils.waitForEvent(syncPanel, "ViewShown"); let syncButton = document.getElementById("sync-button"); syncButton.click(); await Promise.all([tabsUpdatedPromise, viewShownPromise]); @@ -216,21 +227,32 @@ add_task(async function() { let subpanel = document.getElementById("PanelUI-remotetabs-main") ok(!subpanel.hidden, "main pane is visible"); let deck = document.getElementById("PanelUI-remotetabs-deck"); // The widget is still fetching tabs, as we've neutered everything that // provides them is(deck.selectedIndex, DECKINDEX_FETCHING, "first deck entry is visible"); + let syncNowButton = document.getElementById("PanelUI-remotetabs-syncnow"); + + let didSync = false; + let oldDoSync = gSync.doSync; + gSync.doSync = function() { + didSync = true; + mockedInternal.hasSyncedThisSession = true; + gSync.doSync = oldDoSync; + } + syncNowButton.click(); + ok(didSync, "clicking the button called the correct function"); + // Tell the widget there are tabs available, but with zero clients. mockedInternal.getTabClients = () => { return Promise.resolve([]); } - mockedInternal.hasSyncedThisSession = true; await updateTabsPanel(); // The UI should be showing the "no clients" pane. is(deck.selectedIndex, DECKINDEX_NOCLIENTS, "no-clients deck entry is visible"); // Tell the widget there are tabs available - we have 3 clients, one with no // tabs. mockedInternal.getTabClients = () => { return Promise.resolve([ @@ -322,28 +344,16 @@ add_task(async function() { // There is a single node saying there's no tabs for the client. node = node.nextSibling; is(node.nodeName, "label", "node is a label"); is(node.getAttribute("itemtype"), "", "node is neither a tab nor a client"); node = node.nextSibling; is(node, null, "no more entries"); - let didSync = false; - let oldDoSync = gSync.doSync; - gSync.doSync = function() { - didSync = true; - gSync.doSync = oldDoSync; - } - - let syncNowButton = document.getElementById("PanelUI-remotetabs-syncnow"); - is(syncNowButton.disabled, false); - syncNowButton.click(); - ok(didSync, "clicking the button called the correct function"); - await hideOverflow(); }); // Test the pagination capabilities (Show More/All tabs) add_task(async function() { mockedInternal.getTabClients = () => { return Promise.resolve([ { @@ -360,17 +370,20 @@ add_task(async function() { allTabsDesktop.push({ title: "Tab #" + i }); } return allTabsDesktop; }(), } ]); }; - gSync.updateAllUI({ status: UIState.STATUS_SIGNED_IN, email: "foo@bar.com" }); + // configure our broadcasters so we are in the right state. + document.getElementById("sync-reauth-state").hidden = true; + document.getElementById("sync-setup-state").hidden = true; + document.getElementById("sync-syncnow-state").hidden = false; await document.getElementById("nav-bar").overflowable.show(); let tabsUpdatedPromise = promiseObserverNotified("synced-tabs-menu:test:tabs-updated"); let syncPanel = document.getElementById("PanelUI-remotetabs"); let viewShownPromise = BrowserTestUtils.waitForEvent(syncPanel, "ViewShown"); let syncButton = document.getElementById("sync-button"); syncButton.click(); await Promise.all([tabsUpdatedPromise, viewShownPromise]);