зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1463624 - ensure sync knows there is a valid user on signin. r=eoger
MozReview-Commit-ID: 8hGU8eLYZKx --HG-- extra : rebase_source : 227aa891910a0a3d30c910cafc9a0ce7db1368d7
This commit is contained in:
Родитель
daad797972
Коммит
5f934337c0
|
@ -224,11 +224,6 @@ this.BrowserIDManager.prototype = {
|
|||
switch (topic) {
|
||||
case fxAccountsCommon.ONLOGIN_NOTIFICATION: {
|
||||
this._log.info("A user has logged in");
|
||||
// If our existing Sync state is that we needed to reauth, clear that
|
||||
// state now - it will get reset back if a problem persists.
|
||||
if (Weave.Status.login == LOGIN_FAILED_LOGIN_REJECTED) {
|
||||
Weave.Status.login = LOGIN_SUCCEEDED;
|
||||
}
|
||||
this.resetCredentials();
|
||||
let accountData = await this._fxaService.getSignedInUser();
|
||||
this._updateSignedInUser(accountData);
|
||||
|
@ -238,6 +233,7 @@ this.BrowserIDManager.prototype = {
|
|||
this._log.info("The user is not verified");
|
||||
break;
|
||||
}
|
||||
// intentional fall-through - the user is verified.
|
||||
}
|
||||
// We've been configured with an already verified user, so fall-through.
|
||||
case fxAccountsCommon.ONVERIFIED_NOTIFICATION: {
|
||||
|
@ -246,16 +242,18 @@ this.BrowserIDManager.prototype = {
|
|||
// Set the username now - that will cause Sync to know it is configured
|
||||
let accountData = await this._fxaService.getSignedInUser();
|
||||
this.username = accountData.email;
|
||||
Weave.Status.login = LOGIN_SUCCEEDED;
|
||||
|
||||
// And actually sync. If we've never synced before, we force a full sync.
|
||||
// If we have, then we are probably just reauthenticating so it's a normal sync.
|
||||
// We can use any pref that must be set if we've synced before.
|
||||
let isFirstSync = !Svc.Prefs.get("client.syncID", null);
|
||||
// We can use any pref that must be set if we've synced before, and check
|
||||
// the sync lock state because we might already be doing that first sync.
|
||||
let isFirstSync = !Weave.Service.locked && !Svc.Prefs.get("client.syncID", null);
|
||||
if (isFirstSync) {
|
||||
this._log.info("Doing initial sync actions");
|
||||
Svc.Prefs.set("firstSync", "resetClient");
|
||||
Services.obs.notifyObservers(null, "weave:service:setup-complete");
|
||||
}
|
||||
Services.obs.notifyObservers(null, "weave:service:setup-complete");
|
||||
// There's no need to wait for sync to complete and it would deadlock
|
||||
// our AsyncObserver.
|
||||
Weave.Service.sync({why: "login"});
|
||||
|
|
|
@ -265,6 +265,34 @@ add_task(async function test_ensureLoggedIn() {
|
|||
Assert.equal(Status.login, LOGIN_SUCCEEDED, "final ensureLoggedIn worked");
|
||||
});
|
||||
|
||||
add_task(async function test_syncState() {
|
||||
// Avoid polling for an unverified user.
|
||||
let identityConfig = makeIdentityConfig();
|
||||
let fxaInternal = makeFxAccountsInternalMock(identityConfig);
|
||||
fxaInternal.startVerifiedCheck = () => {};
|
||||
configureFxAccountIdentity(globalBrowseridManager, globalIdentityConfig, fxaInternal);
|
||||
|
||||
// arrange for no logged in user.
|
||||
let fxa = globalBrowseridManager._fxaService;
|
||||
let signedInUser = fxa.internal.currentAccountState.storageManager.accountData;
|
||||
fxa.internal.currentAccountState.storageManager.accountData = null;
|
||||
await Assert.rejects(globalBrowseridManager._ensureValidToken(true), "expecting rejection due to no user");
|
||||
// Restore to an unverified user.
|
||||
signedInUser.verified = false;
|
||||
fxa.internal.currentAccountState.storageManager.accountData = signedInUser;
|
||||
Status.login = LOGIN_FAILED_LOGIN_REJECTED;
|
||||
// The browserid_identity observers are async, so call them directly.
|
||||
await globalBrowseridManager.observe(null, ONLOGIN_NOTIFICATION, "");
|
||||
Assert.equal(Status.login, LOGIN_FAILED_LOGIN_REJECTED,
|
||||
"should not have changed the login state for an unverified user");
|
||||
|
||||
// now pretend the user because verified.
|
||||
signedInUser.verified = true;
|
||||
await globalBrowseridManager.observe(null, ONVERIFIED_NOTIFICATION, "");
|
||||
Assert.equal(Status.login, LOGIN_SUCCEEDED,
|
||||
"should have changed the login state to success");
|
||||
});
|
||||
|
||||
add_task(async function test_tokenExpiration() {
|
||||
_("BrowserIDManager notices token expiration:");
|
||||
let bimExp = new BrowserIDManager();
|
||||
|
|
Загрузка…
Ссылка в новой задаче