Commit 2c68f41e authored by Pâris MEULEMAN's avatar Pâris MEULEMAN Committed by Commit Bot

[Signin][Android] Forbid signin when Primary Account is set

This adds a failing assert when SigninManager.Signin is triggered while
the primary account is already set in IdentityManager.

Bug: 995201
Change-Id: Ib404f930694ea82aada3bac5a144dac096fa1541
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1824267Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarSylvain Defresne <sdefresne@chromium.org>
Commit-Queue: Pâris Meuleman <pmeuleman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707298}
parent 1c7f970c
......@@ -459,6 +459,9 @@ public class SigninManager
// This method should be called at most once per sign-in flow.
assert mSignInState != null && mSignInState.mCoreAccountInfo != null;
// The user should not be already signed in
assert !mIdentityManager.hasPrimaryAccount();
if (!mIdentityMutator.setPrimaryAccount(mSignInState.mCoreAccountInfo.getId())) {
Log.w(TAG, "Failed to set the PrimaryAccount in IdentityManager, aborting signin");
abortSignIn();
......
......@@ -222,6 +222,7 @@ public class SigninManagerTest {
doReturn(account)
.when(mIdentityManager)
.findExtendedAccountInfoForAccountWithRefreshTokenByEmailAddress(any());
doReturn(false).when(mIdentityManager).hasPrimaryAccount();
doReturn(true).when(mIdentityMutator).setPrimaryAccount(any());
doNothing().when(mIdentityMutator).reloadAllAccountsFromSystemWithPrimaryAccount(any());
......@@ -237,4 +238,30 @@ public class SigninManagerTest {
assertFalse(mSigninManager.isOperationInProgress());
assertEquals(1, callCount.get());
}
@Test(expected = AssertionError.class)
public void failIfAlreadySignedin() {
CoreAccountInfo account = new CoreAccountInfo(new CoreAccountId("test_at_gmail.com"),
new Account("test@gmail.com", AccountManagerFacade.GOOGLE_ACCOUNT_TYPE),
"test_at_gmail.com");
// No need to seed accounts to the native code.
doReturn(true).when(mAccountTrackerService).checkAndSeedSystemAccounts();
// Request that policy is loaded. It will pause sign-in until onPolicyCheckedBeforeSignIn is
// invoked.
doNothing().when(mNativeMock).fetchAndApplyCloudPolicy(anyLong(), any(), any());
doReturn(account)
.when(mIdentityManager)
.findExtendedAccountInfoForAccountWithRefreshTokenByEmailAddress(any());
doReturn(true).when(mIdentityManager).hasPrimaryAccount();
mSigninManager.onFirstRunCheckDone(); // Allow sign-in.
mSigninManager.signIn(account.getAccount(), null);
assertTrue(mSigninManager.isOperationInProgress());
// The following should throw an assertion error
mSigninManager.finishSignInAfterPolicyEnforced();
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment