Commit 2d16aabe authored by Boris Sazonov's avatar Boris Sazonov Committed by Commit Bot

[Signin][Android] Assert that sign-in is allowed in SigninManager.signIn

Adds an assert to verify that sign-in is allowed before starting it.
To fix tests broken by this assert, this CL also adds an explicit
ExternalAuthUtils param to SigninManager.
This is necessary for the upcoming removal of
AccountIdProvider.canBeUsed.

Bug: 914920
Change-Id: Ib2ddd446446539fc45534818d30b5e6dab4fef73
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1985006Reviewed-by: default avatarTanmoy Mollik <triploblastic@chromium.org>
Commit-Queue: Boris Sazonov <bsazonov@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728269}
parent 8cfaf0b0
...@@ -172,6 +172,7 @@ public class SigninManager ...@@ -172,6 +172,7 @@ public class SigninManager
private final IdentityManager mIdentityManager; private final IdentityManager mIdentityManager;
private final IdentityMutator mIdentityMutator; private final IdentityMutator mIdentityMutator;
private final AndroidSyncSettings mAndroidSyncSettings; private final AndroidSyncSettings mAndroidSyncSettings;
private final ExternalAuthUtils mExternalAuthUtils;
private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>(); private final ObserverList<SignInStateObserver> mSignInStateObservers = new ObserverList<>();
private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers = private final ObserverList<SignInAllowedObserver> mSignInAllowedObservers =
new ObserverList<>(); new ObserverList<>();
...@@ -212,13 +213,13 @@ public class SigninManager ...@@ -212,13 +213,13 @@ public class SigninManager
assert identityManager != null; assert identityManager != null;
assert identityMutator != null; assert identityMutator != null;
return new SigninManager(nativeSigninManagerAndroid, accountTrackerService, identityManager, return new SigninManager(nativeSigninManagerAndroid, accountTrackerService, identityManager,
identityMutator, AndroidSyncSettings.get()); identityMutator, AndroidSyncSettings.get(), ExternalAuthUtils.getInstance());
} }
@VisibleForTesting @VisibleForTesting
SigninManager(long nativeSigninManagerAndroid, AccountTrackerService accountTrackerService, SigninManager(long nativeSigninManagerAndroid, AccountTrackerService accountTrackerService,
IdentityManager identityManager, IdentityMutator identityMutator, IdentityManager identityManager, IdentityMutator identityMutator,
AndroidSyncSettings androidSyncSettings) { AndroidSyncSettings androidSyncSettings, ExternalAuthUtils externalAuthUtils) {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
assert androidSyncSettings != null; assert androidSyncSettings != null;
mNativeSigninManagerAndroid = nativeSigninManagerAndroid; mNativeSigninManagerAndroid = nativeSigninManagerAndroid;
...@@ -226,6 +227,7 @@ public class SigninManager ...@@ -226,6 +227,7 @@ public class SigninManager
mIdentityManager = identityManager; mIdentityManager = identityManager;
mIdentityMutator = identityMutator; mIdentityMutator = identityMutator;
mAndroidSyncSettings = androidSyncSettings; mAndroidSyncSettings = androidSyncSettings;
mExternalAuthUtils = externalAuthUtils;
mSigninAllowedByPolicy = mSigninAllowedByPolicy =
SigninManagerJni.get().isSigninAllowedByPolicy(mNativeSigninManagerAndroid); SigninManagerJni.get().isSigninAllowedByPolicy(mNativeSigninManagerAndroid);
...@@ -381,6 +383,7 @@ public class SigninManager ...@@ -381,6 +383,7 @@ public class SigninManager
// TODO(crbug.com/1002056) SigninManager.Signin should use CoreAccountInfo as a parameter. // TODO(crbug.com/1002056) SigninManager.Signin should use CoreAccountInfo as a parameter.
public void signIn(@SigninAccessPoint int accessPoint, Account account, public void signIn(@SigninAccessPoint int accessPoint, Account account,
@Nullable SignInCallback callback) { @Nullable SignInCallback callback) {
assert isSignInAllowed() : "Sign-in isn't allowed!";
if (account == null) { if (account == null) {
Log.w(TAG, "Ignoring sign-in request due to null account."); Log.w(TAG, "Ignoring sign-in request due to null account.");
if (callback != null) callback.onSignInAborted(); if (callback != null) callback.onSignInAborted();
...@@ -669,7 +672,7 @@ public class SigninManager ...@@ -669,7 +672,7 @@ public class SigninManager
} }
private boolean isGooglePlayServicesPresent() { private boolean isGooglePlayServicesPresent() {
return !ExternalAuthUtils.getInstance().isGooglePlayServicesMissing( return !mExternalAuthUtils.isGooglePlayServicesMissing(
ContextUtils.getApplicationContext()); ContextUtils.getApplicationContext());
} }
......
...@@ -32,6 +32,7 @@ import org.robolectric.annotation.Config; ...@@ -32,6 +32,7 @@ import org.robolectric.annotation.Config;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.DisableNativeTestRule; import org.chromium.base.test.DisableNativeTestRule;
import org.chromium.base.test.util.JniMocker; import org.chromium.base.test.util.JniMocker;
import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
import org.chromium.components.signin.AccountManagerFacade; import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.AccountTrackerService; import org.chromium.components.signin.AccountTrackerService;
import org.chromium.components.signin.base.CoreAccountId; import org.chromium.components.signin.base.CoreAccountId;
...@@ -80,9 +81,14 @@ public class SigninManagerTest { ...@@ -80,9 +81,14 @@ public class SigninManagerTest {
AndroidSyncSettings androidSyncSettings = mock(AndroidSyncSettings.class); AndroidSyncSettings androidSyncSettings = mock(AndroidSyncSettings.class);
ExternalAuthUtils externalAuthUtils = mock(ExternalAuthUtils.class);
// Pretend Google Play services are available as it is required for the sign-in
doReturn(false).when(externalAuthUtils).isGooglePlayServicesMissing(any());
doReturn(null).when(mIdentityManager).getPrimaryAccountId(); doReturn(null).when(mIdentityManager).getPrimaryAccountId();
mSigninManager = new SigninManager(0 /* nativeSigninManagerAndroid */, mSigninManager =
mAccountTrackerService, mIdentityManager, mIdentityMutator, androidSyncSettings); new SigninManager(0 /* nativeSigninManagerAndroid */, mAccountTrackerService,
mIdentityManager, mIdentityMutator, androidSyncSettings, externalAuthUtils);
mAccount = new CoreAccountInfo(new CoreAccountId("gaia-id-user"), mAccount = new CoreAccountInfo(new CoreAccountId("gaia-id-user"),
AccountManagerFacade.createAccountFromName("user@domain.com"), "gaia-id-user"); AccountManagerFacade.createAccountFromName("user@domain.com"), "gaia-id-user");
......
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