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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabDelegateFactory.java

Issue 2774763002: Kick incognito tabs from CCTs to tabbed mode. (Closed)
Patch Set: Rebase Created 3 years, 9 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: 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;

Powered by Google App Engine
This is Rietveld 408576698