Bug 946320 - [Australis] history widget missing a "Tabs From Other Devices" entry. r=Gijs
This commit is contained in:
@@ -569,18 +569,12 @@ HistoryMenu.prototype = {
|
||||
if (!menuitem)
|
||||
return;
|
||||
|
||||
// If Sync isn't configured yet, then don't show the menuitem.
|
||||
if (Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED ||
|
||||
Weave.Svc.Prefs.get("firstSync", "") == "notReady") {
|
||||
if (!PlacesUIUtils.shouldShowTabsFromOtherComputersMenuitem()) {
|
||||
menuitem.setAttribute("hidden", true);
|
||||
return;
|
||||
}
|
||||
|
||||
// The tabs engine might never be inited (if services.sync.registerEngines
|
||||
// is modified), so make sure we avoid undefined errors.
|
||||
let enabled = Weave.Service.isLoggedIn &&
|
||||
Weave.Service.engineManager.get("tabs") &&
|
||||
Weave.Service.engineManager.get("tabs").enabled;
|
||||
let enabled = PlacesUIUtils.shouldEnableTabsFromOtherComputersMenuitem();
|
||||
menuitem.setAttribute("disabled", !enabled);
|
||||
menuitem.setAttribute("hidden", false);
|
||||
#endif
|
||||
|
||||
@@ -45,6 +45,13 @@
|
||||
<toolbarbutton id="appMenuClearRecentHistory" tabindex="0"
|
||||
label="&appMenuHistory.clearRecent.label;"
|
||||
command="Tools:Sanitize"/>
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
<toolbarbutton id="sync-tabs-menuitem2"
|
||||
class="syncTabsMenuItem"
|
||||
label="&syncTabsMenu2.label;"
|
||||
oncommand="BrowserOpenSyncTabs();"
|
||||
disabled="true"/>
|
||||
#endif
|
||||
<toolbarbutton id="appMenuRestoreLastSession" tabindex="0"
|
||||
label="&appMenuHistory.restoreSession.label;"
|
||||
command="Browser:RestoreLastSession"/>
|
||||
|
||||
@@ -12,6 +12,8 @@ Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
|
||||
"resource://gre/modules/PlacesUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUIUtils",
|
||||
"resource:///modules/PlacesUIUtils.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "RecentlyClosedTabsAndWindowsMenuUtils",
|
||||
"resource:///modules/sessionstore/RecentlyClosedTabsAndWindowsMenuUtils.jsm");
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "CharsetManager",
|
||||
@@ -133,6 +135,21 @@ const CustomizableWidgets = [{
|
||||
recentlyClosedWindows.removeChild(recentlyClosedWindows.firstChild);
|
||||
}
|
||||
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
let tabsFromOtherComputers = doc.getElementById("sync-tabs-menuitem2");
|
||||
if (PlacesUIUtils.shouldShowTabsFromOtherComputersMenuitem()) {
|
||||
tabsFromOtherComputers.removeAttribute("hidden");
|
||||
} else {
|
||||
tabsFromOtherComputers.setAttribute("hidden", true);
|
||||
}
|
||||
|
||||
if (PlacesUIUtils.shouldEnableTabsFromOtherComputersMenuitem()) {
|
||||
tabsFromOtherComputers.removeAttribute("disabled");
|
||||
} else {
|
||||
tabsFromOtherComputers.setAttribute("disabled", true);
|
||||
}
|
||||
#endif
|
||||
|
||||
let tabsFragment = RecentlyClosedTabsAndWindowsMenuUtils.getTabsFragment(doc.defaultView, "toolbarbutton");
|
||||
let separator = doc.getElementById("PanelUI-recentlyClosedTabs-separator");
|
||||
separator.hidden = !tabsFragment.childElementCount;
|
||||
|
||||
@@ -49,6 +49,7 @@ skip-if = os == "mac"
|
||||
[browser_943683_migration_test.js]
|
||||
[browser_944887_destroyWidget_should_destroy_in_palette.js]
|
||||
[browser_945739_showInPrivateBrowsing_customize_mode.js]
|
||||
[browser_946320_tabs_from_other_computers.js]
|
||||
[browser_947987_removable_default.js]
|
||||
[browser_948985_non_removable_defaultArea.js]
|
||||
[browser_952963_areaType_getter_no_area.js]
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* 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";
|
||||
|
||||
let Preferences = Cu.import("resource://gre/modules/Preferences.jsm", {}).Preferences;
|
||||
Cu.import("resource://gre/modules/Promise.jsm");
|
||||
|
||||
add_task(function() {
|
||||
let shownPanelPromise = promisePanelShown(window);
|
||||
PanelUI.toggle({type: "command"});
|
||||
yield shownPanelPromise;
|
||||
|
||||
let historyButton = document.getElementById("history-panelmenu");
|
||||
let historySubview = document.getElementById("PanelUI-history");
|
||||
let subviewShownPromise = subviewShown(historySubview);
|
||||
EventUtils.synthesizeMouseAtCenter(historyButton, {});
|
||||
yield subviewShownPromise;
|
||||
|
||||
let tabsFromOtherComputers = document.getElementById("sync-tabs-menuitem2");
|
||||
is(tabsFromOtherComputers.hidden, true, "The Tabs From Other Computers menuitem should be hidden when sync isn't enabled.");
|
||||
|
||||
let subviewHiddenPromise = subviewHidden(historySubview);
|
||||
let panelMultiView = document.getElementById("PanelUI-multiView");
|
||||
panelMultiView.showMainView();
|
||||
yield subviewHiddenPromise;
|
||||
|
||||
// Part 2 - When Sync is enabled the menuitem should be shown.
|
||||
Weave.Service.createAccount("john@doe.com", "mysecretpw",
|
||||
"challenge", "response");
|
||||
Weave.Service.identity.account = "john@doe.com";
|
||||
Weave.Service.identity.basicPassword = "mysecretpw";
|
||||
Weave.Service.identity.syncKey = Weave.Utils.generatePassphrase();
|
||||
Weave.Svc.Prefs.set("firstSync", "newAccount");
|
||||
Weave.Service.persistLogin();
|
||||
|
||||
subviewShownPromise = subviewShown(historySubview);
|
||||
EventUtils.synthesizeMouseAtCenter(historyButton, {});
|
||||
yield subviewShownPromise;
|
||||
|
||||
is(tabsFromOtherComputers.hidden, false, "The Tabs From Other Computers menuitem should be shown when sync is enabled.");
|
||||
|
||||
let syncPrefBranch = new Preferences("services.sync.");
|
||||
syncPrefBranch.resetBranch("");
|
||||
|
||||
let hiddenPanelPromise = promisePanelHidden(window);
|
||||
PanelUI.toggle({type: "command"});
|
||||
yield hiddenPanelPromise;
|
||||
});
|
||||
@@ -246,6 +246,36 @@ function promisePanelElementHidden(win, aPanel) {
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function subviewShown(aSubview) {
|
||||
let deferred = Promise.defer();
|
||||
let win = aSubview.ownerDocument.defaultView;
|
||||
let timeoutId = win.setTimeout(() => {
|
||||
deferred.reject("Subview (" + aSubview.id + ") did not show within 20 seconds.");
|
||||
}, 20000);
|
||||
function onViewShowing(e) {
|
||||
aSubview.removeEventListener("ViewShowing", onViewShowing);
|
||||
win.clearTimeout(timeoutId);
|
||||
deferred.resolve();
|
||||
};
|
||||
aSubview.addEventListener("ViewShowing", onViewShowing);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function subviewHidden(aSubview) {
|
||||
let deferred = Promise.defer();
|
||||
let win = aSubview.ownerDocument.defaultView;
|
||||
let timeoutId = win.setTimeout(() => {
|
||||
deferred.reject("Subview (" + aSubview.id + ") did not hide within 20 seconds.");
|
||||
}, 20000);
|
||||
function onViewHiding(e) {
|
||||
aSubview.removeEventListener("ViewHiding", onViewHiding);
|
||||
win.clearTimeout(timeoutId);
|
||||
deferred.resolve();
|
||||
};
|
||||
aSubview.addEventListener("ViewHiding", onViewHiding);
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function waitForCondition(aConditionFn, aMaxTries=50, aCheckInterval=100) {
|
||||
function tryNow() {
|
||||
tries++;
|
||||
|
||||
@@ -19,6 +19,11 @@ XPCOMUtils.defineLazyModuleGetter(this, "PluralForm",
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
|
||||
"resource://gre/modules/PrivateBrowsingUtils.jsm");
|
||||
|
||||
#ifdef MOZ_SERVICES_SYNC
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Weave",
|
||||
"resource://services-sync/main.js");
|
||||
#endif
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "PlacesUtils", function() {
|
||||
Cu.import("resource://gre/modules/PlacesUtils.jsm");
|
||||
return PlacesUtils;
|
||||
@@ -987,7 +992,21 @@ this.PlacesUIUtils = {
|
||||
}
|
||||
}
|
||||
return queryName;
|
||||
}
|
||||
},
|
||||
|
||||
shouldShowTabsFromOtherComputersMenuitem: function() {
|
||||
// If Sync isn't configured yet, then don't show the menuitem.
|
||||
return Weave.Status.checkSetup() != Weave.CLIENT_NOT_CONFIGURED &&
|
||||
Weave.Svc.Prefs.get("firstSync", "") != "notReady";
|
||||
},
|
||||
|
||||
shouldEnableTabsFromOtherComputersMenuitem: function() {
|
||||
// The tabs engine might never be inited (if services.sync.registerEngines
|
||||
// is modified), so make sure we avoid undefined errors.
|
||||
return Weave.Service.isLoggedIn &&
|
||||
Weave.Service.engineManager.get("tabs") &&
|
||||
Weave.Service.engineManager.get("tabs").enabled;
|
||||
},
|
||||
};
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(PlacesUIUtils, "RDF",
|
||||
|
||||
@@ -9,7 +9,7 @@ EXTRA_COMPONENTS += [
|
||||
'PlacesProtocolHandler.js',
|
||||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
EXTRA_PP_JS_MODULES += [
|
||||
'PlacesUIUtils.jsm',
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user