Add-an-always-incognito-mode.patch

This commit is contained in:
none 2021-03-01 10:04:26 +01:00
parent aa794b542b
commit 127d2dcaf3

View file

@ -9,20 +9,20 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
---
chrome/android/chrome_java_sources.gni | 1 +
.../java/res/xml/privacy_preferences.xml | 5 ++
.../AlwaysIncognitoLinkInterceptor.java | 74 +++++++++++++++++++
.../AlwaysIncognitoLinkInterceptor.java | 80 +++++++++++++++++++
.../chrome/browser/ChromeTabbedActivity.java | 6 +-
.../chrome/browser/app/ChromeActivity.java | 4 +
.../AppMenuPropertiesDelegateImpl.java | 6 ++
.../ChromeContextMenuPopulator.java | 9 ++-
.../CustomTabIntentDataProvider.java | 5 +-
.../browser/init/StartupTabPreloader.java | 11 ++-
.../browser/init/StartupTabPreloader.java | 14 +++-
.../privacy/settings/PrivacySettings.java | 4 +-
.../browser/tabmodel/ChromeTabCreator.java | 16 +++-
.../browser/tabmodel/TabPersistentStore.java | 10 +++
.../webapps/WebappIntentDataProvider.java | 14 ++++
.../flags/android/chrome_feature_list.cc | 2 +-
.../strings/android_chrome_strings.grd | 7 ++
15 files changed, 164 insertions(+), 10 deletions(-)
15 files changed, 173 insertions(+), 10 deletions(-)
create mode 100644 chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
diff --git a/chrome/android/chrome_java_sources.gni b/chrome/android/chrome_java_sources.gni
@ -55,7 +55,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognito
new file mode 100644
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/AlwaysIncognitoLinkInterceptor.java
@@ -0,0 +1,74 @@
@@ -0,0 +1,80 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
@ -71,6 +71,7 @@ new file mode 100644
+import org.chromium.chrome.browser.tab.TabLaunchType;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.content_public.browser.LoadUrlParams;
+import org.chromium.url.GURL;
+
+import java.util.HashMap;
+import java.util.HashSet;
@ -105,14 +106,17 @@ new file mode 100644
+ }
+
+ @Override
+ public void onUpdateUrl(final Tab tab, final String url) {
+ public void onUpdateUrl(Tab tab, GURL gurl) {
+
+ if (tab == null) return;
+ if (url == null) return;
+ if (gurl == null) return;
+ if (tab.isIncognito()) return;
+ if (alwaysIncognitoContainer == null) return;
+
+ final String lastUrl = lastUrls.put(tab, url);
+ String spec = gurl.getValidSpecOrEmpty();
+ if (spec == null) return;
+
+ final String lastUrl = lastUrls.put(tab, spec);
+
+ if (!alwaysIncognitoContainer.getBoolean(PREF_ALWAYS_INCOGNITO, false)) return;
+ if (revertingTabs.contains(tab)) {
@ -120,9 +124,11 @@ new file mode 100644
+ return;
+ }
+
+ ((ChromeTabbedActivity)tab.getWindowAndroid().getActivity().get()).getTabCreator(true).createNewTab(new LoadUrlParams(url), TabLaunchType.FROM_LINK, tab);
+ ((ChromeTabbedActivity)tab.getWindowAndroid().getActivity().get())
+ .getTabCreator(true)
+ .createNewTab(new LoadUrlParams(spec), TabLaunchType.FROM_LINK, tab);
+
+ if ((url.equals(lastUrl)) || (!tab.canGoBack())) {
+ if ((spec.equals(lastUrl)) || (!tab.canGoBack())) {
+ // this call was triggered by a reload
+ } else {
+ revertingTabs.add(tab);
@ -133,15 +139,15 @@ new file mode 100644
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
@@ -49,6 +49,7 @@ import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.supplier.Supplier;
@@ -54,6 +54,7 @@ import org.chromium.base.supplier.Supplier;
import org.chromium.base.task.PostTask;
import org.chromium.cc.input.BrowserControlsState;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.AlwaysIncognitoLinkInterceptor;
import org.chromium.chrome.browser.IntentHandler.IntentHandlerDelegate;
import org.chromium.chrome.browser.IntentHandler.TabOpenType;
import org.chromium.chrome.browser.accessibility_tab_switcher.OverviewListLayout;
@@ -1602,8 +1603,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
@@ -1639,8 +1640,9 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
Bundle savedInstanceState = getSavedInstanceState();
// We determine the model as soon as possible so every systems get initialized coherently.
@ -156,7 +162,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
@@ -85,6 +85,7 @@ import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial;
@@ -88,6 +88,7 @@ import org.chromium.chrome.browser.contextualsearch.ContextualSearchFieldTrial;
import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager.ContextualSearchTabPromotionDelegate;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
@ -164,7 +170,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
import org.chromium.chrome.browser.dependency_injection.ChromeActivityComponent;
import org.chromium.chrome.browser.dependency_injection.ModuleFactoryOverrides;
import org.chromium.chrome.browser.device.DeviceClassManager;
@@ -1569,6 +1570,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
@@ -1599,6 +1600,9 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
throw new IllegalStateException(
"Attempting to access TabCreator before initialization");
}
@ -177,7 +183,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActiv
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/app/appmenu/AppMenuPropertiesDelegateImpl.java
@@ -523,6 +523,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
@@ -539,6 +539,12 @@ public class AppMenuPropertiesDelegateImpl implements AppMenuPropertiesDelegate
}
private void prepareCommonMenuItems(Menu menu, @MenuGroup int menuGroup, boolean isIncognito) {
@ -203,9 +209,9 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/Chr
import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem.Item;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator.ContextMenuUma.Action;
@@ -376,7 +378,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
@@ -372,7 +374,12 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
if (FirstRunStatus.getFirstRunFlowComplete() && !isEmptyUrl(mParams.getUrl())
&& UrlUtilities.isAcceptedScheme(mParams.getUrl())) {
&& UrlUtilities.isAcceptedScheme(mParams.getUrl().getSpec())) {
if (mMode == ContextMenuMode.NORMAL) {
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)
@ -230,7 +236,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Cust
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -796,7 +799,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
@@ -781,7 +784,7 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
@Override
public boolean isIncognito() {
@ -252,21 +258,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab
/**
* This class attempts to preload the tab if the url is known from the intent when the profile
* is created. This is done to improve startup latency.
@@ -195,9 +198,11 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
@@ -195,10 +198,15 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
Intent intent = mIntentSupplier.get();
GURL url = UrlFormatter.fixupUrl(getUrlFromIntent(intent));
+ boolean isIncognito = ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+
+ Profile profile = Profile.getLastUsedRegularProfile();
ChromeTabCreator chromeTabCreator =
- (ChromeTabCreator) mTabCreatorManager.getTabCreator(false);
- WebContents webContents = WebContentsFactory.createWebContents(false, false);
+ (ChromeTabCreator) mTabCreatorManager.getTabCreator(isIncognito);
+ WebContents webContents = WebContentsFactory.createWebContents(isIncognito, false);
WebContents webContents =
- WebContentsFactory.createWebContents(Profile.getLastUsedRegularProfile(), false);
+ WebContentsFactory.createWebContents(
+ isIncognito ? profile.getPrimaryOTRProfile() : profile,
+ false);
mLoadUrlParams = new LoadUrlParams(url.getValidSpecOrEmpty());
String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(intent);
@@ -211,7 +216,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
@@ -212,7 +220,7 @@ public class StartupTabPreloader implements ProfileManager.Observer, Destroyable
// Create a detached tab, but don't add it to the tab model yet. We'll do that
// later if the loadUrlParams etc... match.
mTab = TabBuilder.createLiveTab(false)
@ -278,15 +288,15 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/StartupTab
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/privacy/settings/PrivacySettings.java
@@ -46,9 +46,11 @@ public class PrivacySettings
private static final String PREF_SECURE_DNS = "secure_dns";
@@ -45,9 +45,11 @@ public class PrivacySettings
private static final String PREF_DO_NOT_TRACK = "do_not_track";
private static final String PREF_CLEAR_BROWSING_DATA = "clear_browsing_data";
private static final String PREF_PRIVACY_SANDBOX = "privacy_sandbox";
+ private static final String PREF_ALWAYS_INCOGNITO = "always_incognito";
private static final String[] NEW_PRIVACY_PREFERENCE_ORDER = {PREF_CLEAR_BROWSING_DATA,
PREF_CAN_MAKE_PAYMENT, PREF_NETWORK_PREDICTIONS,
- PREF_SECURE_DNS, PREF_DO_NOT_TRACK
+ PREF_SECURE_DNS, PREF_DO_NOT_TRACK,
- PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX
+ PREF_SECURE_DNS, PREF_DO_NOT_TRACK, PREF_PRIVACY_SANDBOX,
+ PREF_ALWAYS_INCOGNITO
};
@ -294,7 +304,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java
@@ -39,6 +39,10 @@ import org.chromium.ui.base.PageTransition;
@@ -40,6 +40,10 @@ import org.chromium.ui.base.PageTransition;
import org.chromium.ui.base.WindowAndroid;
import org.chromium.url.GURL;
@ -305,7 +315,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
/**
* This class creates various kinds of new tabs and adds them to the right {@link TabModel}.
*/
@@ -60,6 +64,7 @@ public class ChromeTabCreator extends TabCreator {
@@ -61,6 +65,7 @@ public class ChromeTabCreator extends TabCreator {
private final ChromeActivity mActivity;
private final StartupTabPreloader mStartupTabPreloader;
private final boolean mIncognito;
@ -313,7 +323,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
private WindowAndroid mNativeWindow;
private TabModel mTabModel;
@@ -78,6 +83,10 @@ public class ChromeTabCreator extends TabCreator {
@@ -79,6 +84,10 @@ public class ChromeTabCreator extends TabCreator {
mNativeWindow = nativeWindow;
mTabDelegateFactorySupplier = tabDelegateFactory;
mIncognito = incognito;
@ -324,7 +334,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
mOverviewNTPCreator = overviewNTPCreator;
mAsyncTabParamsManager = asyncTabParamsManager;
}
@@ -231,6 +240,8 @@ public class ChromeTabCreator extends TabCreator {
@@ -232,6 +241,8 @@ public class ChromeTabCreator extends TabCreator {
if (creationState == TabCreationState.LIVE_IN_FOREGROUND && !openInForeground) {
creationState = TabCreationState.LIVE_IN_BACKGROUND;
}
@ -333,7 +343,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
mTabModel.addTab(tab, position, type, creationState);
return tab;
} finally {
@@ -265,6 +276,8 @@ public class ChromeTabCreator extends TabCreator {
@@ -266,6 +277,8 @@ public class ChromeTabCreator extends TabCreator {
@TabCreationState
int creationState = openInForeground ? TabCreationState.LIVE_IN_FOREGROUND
: TabCreationState.LIVE_IN_BACKGROUND;
@ -342,7 +352,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
mTabModel.addTab(tab, position, type, creationState);
return true;
}
@@ -308,7 +321,6 @@ public class ChromeTabCreator extends TabCreator {
@@ -309,7 +322,6 @@ public class ChromeTabCreator extends TabCreator {
// TODO(crbug.com/1081924): Clean up the launches from SearchActivity/Chrome.
public Tab launchUrlFromExternalApp(String url, String referer, String headers, String appId,
boolean forceNewTab, Intent intent, long intentTimestamp) {
@ -350,27 +360,27 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/Chrome
boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName());
if (forceNewTab && !isLaunchedFromChrome) {
@@ -417,6 +429,8 @@ public class ChromeTabCreator extends TabCreator {
@@ -423,6 +435,8 @@ public class ChromeTabCreator extends TabCreator {
.setSerializedCriticalPersistedTabData(serializedCriticalPersistedTabData)
.build();
}
+ if (mExtraLogic != null)
+ tab.addObserver(mExtraLogic);
if (state.isIncognito() != mIncognito) {
if (isIncognito != mIncognito) {
throw new IllegalStateException("Incognito state mismatch. TabState: "
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPersistentStore.java
@@ -16,6 +16,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.core.util.AtomicFile;
@@ -17,6 +17,7 @@ import androidx.core.util.AtomicFile;
import org.chromium.base.Callback;
import org.chromium.base.CallbackController;
+import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.ObserverList;
import org.chromium.base.StreamUtil;
@@ -49,6 +50,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities;
@@ -51,6 +52,8 @@ import org.chromium.components.embedder_support.util.UrlUtilities;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.UiThreadTaskTraits;
@ -379,10 +389,10 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/TabPer
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -595,6 +598,13 @@ public class TabPersistentStore extends TabPersister {
@@ -615,6 +618,13 @@ public class TabPersistentStore extends TabPersister {
}
}
}
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)) {
+ if (!isIncognito) {
+ Log.w(TAG, "Failed to restore tab: not in incognito mode.");
@ -441,19 +451,19 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappI
diff --git a/chrome/browser/flags/android/chrome_feature_list.cc b/chrome/browser/flags/android/chrome_feature_list.cc
--- a/chrome/browser/flags/android/chrome_feature_list.cc
+++ b/chrome/browser/flags/android/chrome_feature_list.cc
@@ -377,7 +377,7 @@ const base::Feature kCCTExternalLinkHandling{"CCTExternalLinkHandling",
base::FEATURE_ENABLED_BY_DEFAULT};
@@ -393,7 +393,7 @@ const base::Feature kCCTIncognito{"CCTIncognito",
base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kCCTIncognito{"CCTIncognito",
- base::FEATURE_DISABLED_BY_DEFAULT};
+ base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kCCTIncognitoAvailableToThirdParty{
- "CCTIncognitoAvailableToThirdParty", base::FEATURE_DISABLED_BY_DEFAULT};
+ "CCTIncognitoAvailableToThirdParty", base::FEATURE_ENABLED_BY_DEFAULT};
const base::Feature kCCTPostMessageAPI{"CCTPostMessageAPI",
base::FEATURE_ENABLED_BY_DEFAULT};
diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
--- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
+++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
@@ -832,6 +832,13 @@ Your Google account may have other forms of browsing history like searches and a
@@ -844,6 +844,13 @@ Your Google account may have other forms of browsing history like searches and a
<message name="IDS_CLEAR_BROWSING_HISTORY_SUMMARY" desc="A text for the basic tab explaining browsing history.">
Clears history and autocompletions in the address bar.
</message>