Allow open new tabs and save as link in always incognito mode (#1165)

This commit is contained in:
uazo 2021-05-24 12:06:11 +02:00 committed by GitHub
parent 1953e3d415
commit a1e07fa54b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -10,10 +10,10 @@ 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 | 80 +++++++++++++++++++
.../chrome/browser/ChromeTabbedActivity.java | 8 +-
.../chrome/browser/ChromeTabbedActivity.java | 6 +-
.../chrome/browser/app/ChromeActivity.java | 4 +
.../AppMenuPropertiesDelegateImpl.java | 6 ++
.../ChromeContextMenuPopulator.java | 28 +++++--
.../ChromeContextMenuPopulator.java | 9 ++-
.../CustomTabActivityLifecycleUmaTracker.java | 25 ------
.../CustomTabIntentDataProvider.java | 5 +-
.../browser/init/StartupTabPreloader.java | 14 +++-
@ -23,7 +23,7 @@ Enable incognito custom tabs and fix crashes for incognito/custom tab intents (c
.../webapps/WebappIntentDataProvider.java | 14 ++++
.../flags/android/chrome_feature_list.cc | 2 +-
.../strings/android_chrome_strings.grd | 7 ++
16 files changed, 187 insertions(+), 39 deletions(-)
16 files changed, 171 insertions(+), 34 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
@ -160,15 +160,6 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedAct
int index = savedInstanceState != null ? savedInstanceState.getInt(WINDOW_INDEX, 0) : 0;
mNextTabPolicySupplier = new ChromeNextTabPolicySupplier(mOverviewModeBehaviorSupplier);
@@ -1715,7 +1717,7 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
public void onTabStateInitialized() {
if (!mCreatedTabOnStartup) return;
- TabModel model = mTabModelSelectorImpl.getModel(false);
+ TabModel model = mTabModelSelectorImpl.getModel(startIncognito);
TasksUma.recordTasksUma(model);
}
});
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
@ -219,49 +210,34 @@ 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;
@@ -332,6 +334,18 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
params.getLinkUrl().getSpec());
}
+ /**
+ * Disallow opening in a new tab when in always-incognito mode.
+ */
+ private static boolean canOpenNewTab() {
+ if (ContextUtils.getAppSharedPreferences().getBoolean(AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false)
+ /*&& !mItemDelegate.isIncognito()*/) {
+ return false;
+ }
+ return true;
+ }
+
+
@Override
public List<Pair<Integer, ModelList>> buildContextMenu() {
@@ -337,6 +339,10 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
boolean hasSaveImage = false;
@@ -345,14 +359,18 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
&& UrlUtilities.isAcceptedScheme(mParams.getUrl().getSpec())) {
if (mMode == ContextMenuMode.NORMAL) {
if (TabUiFeatureUtilities.ENABLE_TAB_GROUP_AUTO_CREATION.getValue()) {
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
+ if (canOpenNewTab()) linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
} else {
if (TabUiFeatureUtilities.showContextMenuOpenNewTabInGroupItemFirst()) {
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
+ if (canOpenNewTab()) {
+ linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
+ linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
+ }
} else {
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
- linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
+ if (canOpenNewTab()) {
+ linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB));
+ linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
+ }
mShowEphemeralTabNewLabel = null;
+ boolean always_incognito =
+ ContextUtils.getAppSharedPreferences().getBoolean(
+ AlwaysIncognitoLinkInterceptor.PREF_ALWAYS_INCOGNITO, false);
+
List<Pair<Integer, ModelList>> groupedItems = new ArrayList<>();
if (mParams.isAnchor()) {
@@ -355,6 +361,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
linkGroup.add(createListItem(Item.OPEN_IN_NEW_TAB_IN_GROUP));
}
}
+
if (!mItemDelegate.isIncognito() && mItemDelegate.isIncognitoSupported()) {
linkGroup.add(createListItem(Item.OPEN_IN_INCOGNITO_TAB));
}
@@ -377,7 +384,7 @@ public class ChromeContextMenuPopulator implements ContextMenuPopulator {
}
}
if (FirstRunStatus.getFirstRunFlowComplete()) {
- if (!mItemDelegate.isIncognito()
+ if ((always_incognito || !mItemDelegate.isIncognito())
&& UrlUtilities.isDownloadableScheme(mParams.getLinkUrl())) {
linkGroup.add(createListItem(Item.SAVE_LINK_AS));
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivityLifecycleUmaTracker.java