Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
index ec1daa3068c4a4acfe2126a851efdfd8d20c8e3c..7245b062251dcadd5509365fab8e369e490baa72 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeActivity.java |
@@ -226,7 +226,12 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
protected IntentHandler mIntentHandler; |
+ /** Set if {@link #postDeferredStartupIfNeeded()} is called before native has loaded. */ |
+ private boolean mDeferredStartupQueued; |
+ |
+ /** Whether or not {@link #postDeferredStartupIfNeeded()} has already successfully run. */ |
private boolean mDeferredStartupPosted; |
+ |
private boolean mTabModelsInitialized; |
private boolean mNativeInitialized; |
private boolean mRemoveWindowBackgroundDone; |
@@ -764,6 +769,8 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
@Override |
public void onStartWithNative() { |
+ assert mNativeInitialized : "onStartWithNative was called before native was initialized."; |
+ |
super.onStartWithNative(); |
UpdateMenuItemHelper.getInstance().onStart(); |
ChromeActivitySessionTracker.getInstance().onStartWithNative(); |
@@ -779,7 +786,7 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
// #onPageLoadFinished() and #onCrash(). If we are not actively loading a tab (e.g. |
// in Android N multi-instance, which is created by re-parenting an existing tab), |
// ensure onDeferredStartup() gets called by calling postDeferredStartupIfNeeded() here. |
- if (getActivityTab() == null || !getActivityTab().isLoading()) { |
+ if (mDeferredStartupQueued || getActivityTab() == null || !getActivityTab().isLoading()) { |
postDeferredStartupIfNeeded(); |
} |
} |
@@ -2010,6 +2017,13 @@ public abstract class ChromeActivity extends AsyncInitializationActivity |
} |
protected final void postDeferredStartupIfNeeded() { |
+ if (!mNativeInitialized) { |
+ // Native hasn't loaded yet. Queue it up for later. |
+ mDeferredStartupQueued = true; |
+ return; |
+ } |
+ mDeferredStartupQueued = false; |
+ |
if (!mDeferredStartupPosted) { |
mDeferredStartupPosted = true; |
RecordHistogram.recordLongTimesHistogram( |