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; ...@@ -21,8 +21,12 @@ import org.chromium.base.ObserverList;
import org.chromium.base.StrictModeContext; import org.chromium.base.StrictModeContext;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.flags.ChromeFeatureList; 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.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.SyncContentResolverDelegate;
import org.chromium.components.sync.SystemSyncContentResolverDelegate; import org.chromium.components.sync.SystemSyncContentResolverDelegate;
...@@ -89,21 +93,22 @@ public class AndroidSyncSettings { ...@@ -89,21 +93,22 @@ public class AndroidSyncSettings {
*/ */
@VisibleForTesting @VisibleForTesting
public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate) { public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate) {
this(syncContentResolverDelegate, null); this(syncContentResolverDelegate, null, getSyncAccount());
} }
/** /**
* @param syncContentResolverDelegate an implementation of {@link SyncContentResolverDelegate}. * @param syncContentResolverDelegate an implementation of {@link SyncContentResolverDelegate}.
* @param callback Callback that will be called after updating account is finished. Boolean * @param callback Callback that will be called after updating account is finished. Boolean
* passed to the callback indicates whether syncability was changed. * passed to the callback indicates whether syncability was changed.
* @param account The sync account if sync is enabled, null otherwise.
*/ */
@VisibleForTesting @VisibleForTesting
public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate, public AndroidSyncSettings(SyncContentResolverDelegate syncContentResolverDelegate,
@Nullable Callback<Boolean> callback) { @Nullable Callback<Boolean> callback, @Nullable Account account) {
mContractAuthority = ContextUtils.getApplicationContext().getPackageName(); mContractAuthority = ContextUtils.getApplicationContext().getPackageName();
mSyncContentResolverDelegate = syncContentResolverDelegate; mSyncContentResolverDelegate = syncContentResolverDelegate;
mAccount = ChromeSigninController.get().getSignedInUser(); mAccount = account;
updateSyncability(callback); updateSyncability(callback);
updateCachedSettings(); updateCachedSettings();
...@@ -324,4 +329,14 @@ public class AndroidSyncSettings { ...@@ -324,4 +329,14 @@ public class AndroidSyncSettings {
observer.androidSyncSettingsChanged(); 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; ...@@ -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.chrome.test.util.browser.Features.JUnitProcessor;
import org.chromium.components.signin.AccountManagerFacadeProvider; import org.chromium.components.signin.AccountManagerFacadeProvider;
import org.chromium.components.signin.AccountUtils; import org.chromium.components.signin.AccountUtils;
import org.chromium.components.signin.ChromeSigninController;
import org.chromium.components.signin.test.util.FakeAccountManagerFacade; import org.chromium.components.signin.test.util.FakeAccountManagerFacade;
import org.chromium.components.sync.test.util.MockSyncContentResolverDelegate; import org.chromium.components.sync.test.util.MockSyncContentResolverDelegate;
import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.content_public.browser.test.util.TestThreadUtils;
...@@ -124,14 +123,11 @@ public class AndroidSyncSettingsTest { ...@@ -124,14 +123,11 @@ public class AndroidSyncSettingsTest {
mNumberOfCallsToWait = 0; mNumberOfCallsToWait = 0;
mCallbackHelper = new CallbackHelper(); mCallbackHelper = new CallbackHelper();
setupTestAccounts(); setupTestAccounts();
// Set signed in account to mAccount before initializing AndroidSyncSettings to let
// AndroidSyncSettings establish correct assumptions.
ChromeSigninController.get().setSignedInAccountName(mAccount.name);
mSyncContentResolverDelegate = new CountingMockSyncContentResolverDelegate(); mSyncContentResolverDelegate = new CountingMockSyncContentResolverDelegate();
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
mAndroidSyncSettings = new AndroidSyncSettings(mSyncContentResolverDelegate, mAndroidSyncSettings = new AndroidSyncSettings(mSyncContentResolverDelegate,
(Boolean result) -> mCallbackHelper.notifyCalled()); (Boolean result) -> mCallbackHelper.notifyCalled(), mAccount);
}); });
mNumberOfCallsToWait++; mNumberOfCallsToWait++;
mCallbackHelper.waitForCallback(0, mNumberOfCallsToWait); mCallbackHelper.waitForCallback(0, mNumberOfCallsToWait);
......
...@@ -28,6 +28,8 @@ public class AndroidSyncSettingsTestUtils { ...@@ -28,6 +28,8 @@ public class AndroidSyncSettingsTestUtils {
@VisibleForTesting @VisibleForTesting
public static void setUpAndroidSyncSettingsForTesting(SyncContentResolverDelegate delegate) { public static void setUpAndroidSyncSettingsForTesting(SyncContentResolverDelegate delegate) {
delegate.setMasterSyncAutomatically(true); 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