Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
| index 8dd1227ee1078414d509cc7e1193149670ea35c2..82b7ca070282e00bc0785c2717d280dcec8f50b2 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java |
| @@ -243,7 +243,7 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
| /** |
| * Whether an initial tab needs to be created during UI initialization. |
| */ |
| - private boolean mCreateInitialTabDuringUiInit; |
| + private Runnable mDelayedInitialTabBehaviorDuringUiInit; |
| /** |
| * Keeps track of whether or not a specific tab was created based on the startup intent. |
| @@ -319,12 +319,40 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
| @Override |
| public Tab launchUrl( |
| String url, TabModel.TabLaunchType type, Intent intent, long intentTimestamp) { |
| + if (openNtpBottomSheet(url)) return null; |
| + return super.launchUrl(url, type, intent, intentTimestamp); |
| + } |
| + |
| + @Override |
| + public Tab createNewTab( |
| + LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent, Intent intent) { |
| + if (openNtpBottomSheet(loadUrlParams.getUrl())) return null; |
| + return super.createNewTab(loadUrlParams, type, parent, intent); |
| + } |
| + |
| + /** |
| + * Handles opening the NTP in the bottom sheet if supported. |
| + * |
| + * @param url The URL that is used to determine if this is an NTP being opened. |
| + * @return Whether the NTP experience is opened in the bottom sheet without a corresponding |
| + * Tab associated with it. |
| + */ |
| + private boolean openNtpBottomSheet(String url) { |
| if (getBottomSheet() != null && NewTabPage.isNTPUrl(url)) { |
| - getBottomSheet().displayNewTabUi(mIsIncognito); |
| - return null; |
| + if (!mUIInitialized) { |
| + assert mDelayedInitialTabBehaviorDuringUiInit == null; |
|
Theresa
2017/06/07 17:07:11
I get crashes on this on a local build after:
1)
Theresa
2017/06/09 17:46:37
Filed as crbug.com/731790 against myself to track.
|
| + mDelayedInitialTabBehaviorDuringUiInit = new Runnable() { |
| + @Override |
| + public void run() { |
| + getBottomSheet().displayNewTabUi(mIsIncognito); |
| + } |
| + }; |
| + } else { |
| + getBottomSheet().displayNewTabUi(mIsIncognito); |
| + } |
| + return true; |
| } |
| - |
| - return super.launchUrl(url, type, intent, intentTimestamp); |
| + return false; |
| } |
| } |
| @@ -724,8 +752,9 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
| bgViewWrapper.initialize(); |
| } |
| - if (mCreateInitialTabDuringUiInit) { |
| - getTabCreator(false).launchNTP(); |
| + if (mDelayedInitialTabBehaviorDuringUiInit != null) { |
| + mDelayedInitialTabBehaviorDuringUiInit.run(); |
| + mDelayedInitialTabBehaviorDuringUiInit = null; |
| } else { |
| mLayoutManager.hideOverview(false); |
| } |
| @@ -961,11 +990,6 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
| private void createInitialTab() { |
| String url = HomepageManager.getHomepageUri(getApplicationContext()); |
| if (TextUtils.isEmpty(url) || NewTabPage.isNTPUrl(url)) { |
| - if (getBottomSheet() != null) { |
| - mCreateInitialTabDuringUiInit = true; |
| - return; |
| - } |
| - |
| url = UrlConstants.NTP_URL; |
| } |
| @@ -1206,7 +1230,15 @@ public class ChromeTabbedActivity extends ChromeActivity implements OverviewMode |
| // Create a new tab. |
| Tab newTab = |
| launchIntent(url, referer, headers, externalAppId, forceNewTab, intent); |
| - newTab.setIsAllowedToReturnToExternalApp(isAllowedToReturnToExternalApp); |
| + if (newTab != null) { |
| + newTab.setIsAllowedToReturnToExternalApp(isAllowedToReturnToExternalApp); |
| + } else { |
| + // TODO(twellington): This should only happen for NTPs created in Chrome Home. See |
| + // if we should be caching setIsAllowedToReturnToExternalApp |
| + // in those cases. |
| + assert NewTabPage.isNTPUrl(url); |
| + assert getBottomSheet() != null; |
| + } |
| logMobileReceivedExternalIntent(externalAppId, intent); |
| } |