Commit a8d98abe authored by Boris Sazonov's avatar Boris Sazonov Committed by Commit Bot

[Signin][Android] Migrate to IdentityManager in AndroidSyncSettings

Replaces ChromeSigninController usage in AndroidSyncSettings ctor with
IdentityManager.

Bug: 1093998
Change-Id: I56fc23be5f2849288d2aa425ccb90a7a5a385263
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2289972
Commit-Queue: Boris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#789958}
parent ab8b2046
......@@ -21,8 +21,12 @@ import org.chromium.base.ObserverList;
import org.chromium.base.StrictModeContext;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.signin.IdentityServicesProvider;
import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.ChromeSigninController;
import org.chromium.components.signin.base.CoreAccountInfo;
import org.chromium.components.signin.identitymanager.ConsentLevel;
import org.chromium.components.signin.identitymanager.IdentityManager;
import org.chromium.components.sync.SyncContentResolverDelegate;
import org.chromium.components.sync.SystemSyncContentResolverDelegate;
......@@ -89,21 +93,22 @@ public class AndroidSyncSettings {
*/
@VisibleForTesting
public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate) {
this(syncContentResolverDelegate, null);
this(syncContentResolverDelegate, null, getSyncAccount());
}
/**
* @param syncContentResolverDelegate an implementation of {@link SyncContentResolverDelegate}.
* @param callback Callback that will be called after updating account is finished. Boolean
* passed to the callback indicates whether syncability was changed.
* @param account The sync account if sync is enabled, null otherwise.
*/
@VisibleForTesting
public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate,
@Nullable Callback<Boolean> callback) {
@Nullable Callback<Boolean> callback, @Nullable Account account) {
mContractAuthority = ContextUtils.getApplicationContext().getPackageName();
mSyncContentResolverDelegate = syncContentResolverDelegate;
mAccount = ChromeSigninController.get().getSignedInUser();
mAccount = account;
updateSyncability(callback);
updateCachedSettings();
......@@ -324,4 +329,14 @@ public class AndroidSyncSettings {
observer.androidSyncSettingsChanged();
}
}
/**
* Returns the sync account in the last used regular profile.
*/
private static @Nullable Account getSyncAccount() {
IdentityManager identityManager = IdentityServicesProvider.get().getIdentityManager(
Profile.getLastUsedRegularProfile());
return CoreAccountInfo.getAndroidAccountFrom(
identityManager.getPrimaryAccountInfo(ConsentLevel.SYNC));
}
}
......@@ -30,7 +30,6 @@ import org.chromium.chrome.test.util.browser.Features.EnableFeatures;
import org.chromium.chrome.test.util.browser.Features.JUnitProcessor;
import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.AccountUtils;
import org.chromium.components.signin.ChromeSigninController;
import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
import org.chromium.components.sync.test.util.MockSyncContentResolverDelegate;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
......@@ -124,14 +123,11 @@ public class AndroidSyncSettingsTest {
mNumberOfCallsToWait = 0;
mCallbackHelper = new CallbackHelper();
setupTestAccounts();
// Set signed in account to mAccount before initializing AndroidSyncSettings to let
// AndroidSyncSettings establish correct assumptions.
ChromeSigninController.get().setSignedInAccountName(mAccount.name);
mSyncContentResolverDelegate = new CountingMockSyncContentResolverDelegate();
TestThreadUtils.runOnUiThreadBlocking(() -> {
mAndroidSyncSettings = new AndroidSyncSettings(mSyncContentResolverDelegate,
(Boolean result) -> mCallbackHelper.notifyCalled());
(Boolean result) -> mCallbackHelper.notifyCalled(), mAccount);
});
mNumberOfCallsToWait++;
mCallbackHelper.waitForCallback(0, mNumberOfCallsToWait);
......
......@@ -28,6 +28,8 @@ public class AndroidSyncSettingsTestUtils {
@VisibleForTesting
public static void setUpAndroidSyncSettingsForTesting(SyncContentResolverDelegate delegate) {
delegate.setMasterSyncAutomatically(true);
AndroidSyncSettings.overrideForTests(new AndroidSyncSettings(delegate));
// AndroidSyncSettings ctor usually gets sync account from IdentityManager, which may have
// state left by previous tests. To avoid this, pass null account explicitly.
AndroidSyncSettings.overrideForTests(new AndroidSyncSettings(delegate, null, null));
}
}
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