Bug 966342: Tools menu shows "Sync now" to unverified users in some cases, r=markh

Changes include:
- have gSyncUI._needsSetup check Weave.Service.identity._signedInUser (if already set) and return true if the user is not verified
- make the menuitem hiding/showing code in gSyncUI.updateUI a bit easier to follow

--HG--
extra : rebase_source : b5a99354e13db798ea3d0380391db1993bf36408
This commit is contained in:
Gavin Sharp 2014-03-10 17:24:07 -07:00
Родитель 7d0e2ba924
Коммит 623533edcd
1 изменённых файлов: 36 добавлений и 4 удалений

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

@ -88,16 +88,37 @@ let gSyncUI = {
_wasDelayed: false,
_needsSetup: function SUI__needsSetup() {
// We want to treat "account needs verification" as "needs setup". We don't
// know what the user's verified state is until Sync is initialized, though,
// and we need to get an answer here synchronously (can't wait for
// getSignedInUser). So "reach in" to Weave.Service.identity to get the
// answer here, and we'll just have to deal with this not having an answer
// before Sync is initialized.
// Referencing Weave.Service will implicitly initialize sync, and we don't
// want to force that - so first check if it is ready.
let service = Cc["@mozilla.org/weave/service;1"]
.getService(Components.interfaces.nsISupports)
.wrappedJSObject;
if (service.ready && Weave.Service.identity._signedInUser) {
// If we have a signed in user already, and that user is not verified,
// revert to the "needs setup" state.
if (!Weave.Service.identity._signedInUser.verified) {
return true;
}
}
let firstSync = "";
try {
firstSync = Services.prefs.getCharPref("services.sync.firstSync");
} catch (e) { }
return Weave.Status.checkSetup() == Weave.CLIENT_NOT_CONFIGURED ||
firstSync == "notReady";
},
_loginFailed: function () {
// Referencing Weave.Service will implicitly initialize sync, and we don't
// Referencing Weave.Status will import a bunch of modules, and we don't
// want to force that - so first check if it is ready.
let service = Cc["@mozilla.org/weave/service;1"]
.getService(Components.interfaces.nsISupports)
@ -105,15 +126,26 @@ let gSyncUI = {
if (!service.ready) {
return false;
}
return Weave.Status.login == Weave.LOGIN_FAILED_LOGIN_REJECTED;
},
updateUI: function SUI_updateUI() {
let needsSetup = this._needsSetup();
let loginFailed = this._loginFailed();
document.getElementById("sync-setup-state").hidden = loginFailed || !needsSetup;
document.getElementById("sync-syncnow-state").hidden = loginFailed || needsSetup;
document.getElementById("sync-reauth-state").hidden = !loginFailed;
// Start off with a clean slate
document.getElementById("sync-reauth-state").hidden = true;
document.getElementById("sync-setup-state").hidden = true;
document.getElementById("sync-syncnow-state").hidden = true;
if (loginFailed) {
document.getElementById("sync-reauth-state").hidden = false;
} else if (needsSetup) {
document.getElementById("sync-setup-state").hidden = false;
} else {
document.getElementById("sync-syncnow-state").hidden = false;
}
if (!gBrowser)
return;