| Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
|
| index b02c9482f0bbb8ae861a36667e1cdfe8b48fe0f6..4950262de81c620768dfd6bda8e6fff012ff603a 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java
|
| @@ -5,18 +5,22 @@
|
| package org.chromium.chrome.browser.customtabs;
|
|
|
| import android.app.Activity;
|
| +import android.content.ComponentName;
|
| import android.content.Context;
|
| import android.content.Intent;
|
| import android.content.pm.ResolveInfo;
|
| import android.text.TextUtils;
|
|
|
| +import org.chromium.base.ContextUtils;
|
| import org.chromium.base.VisibleForTesting;
|
| +import org.chromium.chrome.browser.ChromeTabbedActivity;
|
| import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
|
| import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
|
| import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl;
|
| import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler;
|
| import org.chromium.chrome.browser.fullscreen.BrowserStateBrowserControlsVisibilityDelegate;
|
| import org.chromium.chrome.browser.fullscreen.ComposedBrowserControlsVisibilityDelegate;
|
| +import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
|
| import org.chromium.chrome.browser.tab.BrowserControlsVisibilityDelegate;
|
| import org.chromium.chrome.browser.tab.InterceptNavigationDelegateImpl;
|
| import org.chromium.chrome.browser.tab.Tab;
|
| @@ -24,8 +28,15 @@ import org.chromium.chrome.browser.tab.TabContextMenuItemDelegate;
|
| import org.chromium.chrome.browser.tab.TabDelegateFactory;
|
| import org.chromium.chrome.browser.tab.TabStateBrowserControlsVisibilityDelegate;
|
| import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
|
| +import org.chromium.chrome.browser.tabmodel.TabModel;
|
| +import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
|
| +import org.chromium.chrome.browser.tabmodel.document.AsyncTabCreationParams;
|
| +import org.chromium.chrome.browser.tabmodel.document.TabDelegate;
|
| import org.chromium.chrome.browser.util.IntentUtils;
|
| import org.chromium.chrome.browser.util.UrlUtilities;
|
| +import org.chromium.content_public.browser.LoadUrlParams;
|
| +import org.chromium.content_public.common.ResourceRequestBody;
|
| +import org.chromium.ui.mojom.WindowOpenDisposition;
|
|
|
| /**
|
| * A {@link TabDelegateFactory} class to be used in all {@link Tab} owned
|
| @@ -137,6 +148,33 @@ public class CustomTabDelegateFactory extends TabDelegateFactory {
|
| protected void bringActivityToForeground() {
|
| // No-op here. If client's task is in background Chrome is unable to foreground it.
|
| }
|
| +
|
| + @Override
|
| + public void openNewTab(String url, String extraHeaders, ResourceRequestBody postData,
|
| + int disposition, boolean isRendererInitiated) {
|
| + // If attempting to open an incognito tab, always send the user to tabbed mode.
|
| + if (disposition == WindowOpenDisposition.OFF_THE_RECORD) {
|
| + if (isRendererInitiated) {
|
| + throw new IllegalStateException(
|
| + "Invalid attempt to open an incognito tab from the renderer");
|
| + }
|
| + LoadUrlParams loadUrlParams = new LoadUrlParams(url);
|
| + loadUrlParams.setVerbatimHeaders(extraHeaders);
|
| + loadUrlParams.setPostData(postData);
|
| + loadUrlParams.setIsRendererInitiated(isRendererInitiated);
|
| +
|
| + Class<? extends ChromeTabbedActivity> tabbedClass =
|
| + MultiWindowUtils.getInstance().getTabbedActivityForIntent(
|
| + null, ContextUtils.getApplicationContext());
|
| + AsyncTabCreationParams tabParams = new AsyncTabCreationParams(loadUrlParams,
|
| + new ComponentName(ContextUtils.getApplicationContext(), tabbedClass));
|
| + new TabDelegate(true).createNewTab(tabParams,
|
| + TabLaunchType.FROM_LONGPRESS_FOREGROUND, TabModel.INVALID_TAB_INDEX);
|
| + return;
|
| + }
|
| +
|
| + super.openNewTab(url, extraHeaders, postData, disposition, isRendererInitiated);
|
| + }
|
| }
|
|
|
| private final boolean mShouldHideBrowserControls;
|
|
|