Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(661)

Unified Diff: components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java

Issue 2836373003: Reland of Reimplement AccountManagerHelper singleton instance creation (Closed)
Patch Set: Fixed ClearBrowsingDataPreferencesTest Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java
diff --git a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java
index c8d409cdc819b2cc38373f07c2cb165fb232b3e0..3ec989dc3e076f7a06639bf7b0646f557704beef 100644
--- a/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java
+++ b/components/signin/core/browser/android/java/src/org/chromium/components/signin/AccountManagerHelper.java
@@ -21,12 +21,14 @@ import java.util.List;
import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern;
/**
* AccountManagerHelper wraps our access of AccountManager in Android.
*
- * Use the AccountManagerHelper.get(someContext) to instantiate it
+ * Use the {@link #initializeAccountManagerHelper} to instantiate it.
+ * After initialization, instance get be acquired by calling {@link #get}.
*/
public class AccountManagerHelper {
private static final String TAG = "Sync_Signin";
@@ -46,9 +48,7 @@ public class AccountManagerHelper {
@VisibleForTesting
public static final String FEATURE_IS_CHILD_ACCOUNT_KEY = "service_uca";
- private static final Object sLock = new Object();
-
- private static AccountManagerHelper sAccountManagerHelper;
+ private static final AtomicReference<AccountManagerHelper> sInstance = new AtomicReference<>();
private final AccountManagerDelegate mAccountManager;
@@ -87,26 +87,21 @@ public class AccountManagerHelper {
* @param delegate the custom AccountManagerDelegate to use.
*/
public static void initializeAccountManagerHelper(AccountManagerDelegate delegate) {
- synchronized (sLock) {
- assert sAccountManagerHelper == null;
- sAccountManagerHelper = new AccountManagerHelper(delegate);
+ if (!sInstance.compareAndSet(null, new AccountManagerHelper(delegate))) {
+ throw new IllegalStateException("AccountManagerHelper is already initialized!");
}
}
/**
- * A getter method for AccountManagerHelper singleton which also initializes it if not wasn't
- * already initialized.
+ * Singleton instance getter. Singleton must be initialized before calling this
+ * (by initializeAccountManagerHelper or overrideAccountManagerHelperForTests).
*
- * @return a singleton instance of the AccountManagerHelper
+ * @return a singleton instance
*/
public static AccountManagerHelper get() {
- synchronized (sLock) {
- if (sAccountManagerHelper == null) {
- sAccountManagerHelper =
- new AccountManagerHelper(new SystemAccountManagerDelegate());
- }
- }
- return sAccountManagerHelper;
+ AccountManagerHelper instance = sInstance.get();
+ assert instance != null : "AccountManagerHelper is not initialized!";
+ return instance;
}
/**
@@ -120,9 +115,16 @@ public class AccountManagerHelper {
@VisibleForTesting
public static void overrideAccountManagerHelperForTests(
Context context, AccountManagerDelegate delegate) {
- synchronized (sLock) {
- sAccountManagerHelper = new AccountManagerHelper(delegate);
- }
+ sInstance.set(new AccountManagerHelper(delegate));
+ }
+
+ /**
+ * Resets custom AccountManagerHelper set with {@link #overrideAccountManagerHelperForTests}.
+ * Only for use in Tests.
+ */
+ @VisibleForTesting
+ public static void resetAccountManagerHelperForTests() {
+ sInstance.set(null);
}
/**

Powered by Google App Engine
This is Rietveld 408576698