Index: chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java |
index fc021528f5dadcaaaa1433e64ce964da9cee6b2f..a4835818eea5efe4527de6b06626dd528e699f7c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/init/NativeInitializationController.java |
@@ -93,6 +93,8 @@ class NativeInitializationController { |
public void startBackgroundTasks(final boolean allocateChildConnection) { |
ThreadUtils.assertOnUiThread(); |
+ // TODO(asvitkine): Consider moving this logic to a singleton, like |
+ // ChromeBrowserInitializer. |
if (shouldFetchVariationsSeedBeforeFRE()) { |
Context context = ContextUtils.getApplicationContext(); |
Intent initialIntent = mActivityDelegate.getInitialIntent(); |
@@ -105,6 +107,10 @@ class NativeInitializationController { |
new BroadcastReceiver() { |
@Override |
public void onReceive(Context context, Intent intent) { |
+ // This check is needed because onReceive() can be called multiple |
+ // times even after having unregistered below if two broadcasts |
+ // arrive in rapid succession. |
+ if (!mWaitingForVariationsFetch) return; |
mWaitingForVariationsFetch = false; |
manager.unregisterReceiver(this); |
signalNativeLibraryLoadedIfReady(); |