Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit 61443489 authored by Carmelo Messina's avatar Carmelo Messina
Browse files

Add custom tab intents privacy option: added setting for handling ephemeral...

Add custom tab intents privacy option: added setting for handling ephemeral CCT tabs even without opening always incognito.

Added option to set as default browser (otherwise cct will not work!)
parent be4a5bef
Loading
Loading
Loading
Loading
+115 −35
Original line number Diff line number Diff line
@@ -12,23 +12,26 @@ See also: https://github.com/bromite/bromite/issues/1474

License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
---
 .../java/res/xml/privacy_preferences.xml      | 10 ++++++++
 .../browser/LaunchIntentDispatcher.java       | 21 ++++++++++++++++
 .../java/res/xml/privacy_preferences.xml      | 15 ++++++
 .../browser/LaunchIntentDispatcher.java       | 21 ++++++++
 .../CustomTabIntentDataProvider.java          |  4 +-
 .../customtabs/CustomTabsConnection.java      |  1 +
 .../IncognitoCustomTabIntentDataProvider.java | 14 +++++++++++
 .../privacy/settings/PrivacySettings.java     | 24 +++++++++++++++++++
 .../chrome/browser/tab/TabAssociatedApp.java  |  6 ++++-
 .../strings/android_chrome_strings.grd        | 14 +++++++++++
 .../OriginVerifier.java                       |  5 ++++
 .../IncognitoCustomTabIntentDataProvider.java | 14 ++++++
 .../privacy/settings/PrivacySettings.java     | 50 +++++++++++++++++++
 .../browser/flags/ChromeFeatureList.java      |  2 +
 .../chrome/browser/tab/TabAssociatedApp.java  |  6 ++-
 ...Add-custom-tab-intents-privacy-option.grdp | 25 ++++++++++
 .../OriginVerifier.java                       |  5 ++
 .../core/common/language_experiments.cc       |  1 +
 .../add-custom-tab-intents-privacy-option.inc |  1 +
 10 files changed, 96 insertions(+), 1 deletion(-)
 12 files changed, 143 insertions(+), 2 deletions(-)
 create mode 100644 chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp
 create mode 100644 cromite_flags/chrome/browser/flags/android/chrome_feature_list_cc/add-custom-tab-intents-privacy-option.inc

diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/android/java/res/xml/privacy_preferences.xml
--- a/chrome/android/java/res/xml/privacy_preferences.xml
+++ b/chrome/android/java/res/xml/privacy_preferences.xml
@@ -63,6 +63,16 @@ found in the LICENSE file.
@@ -63,6 +63,21 @@ found in the LICENSE file.
         android:key="cromite_flags"
         android:title="@string/cromite_flags_title"
         app:url="@string/cromite_flags_url" />
@@ -38,6 +41,11 @@ diff --git a/chrome/android/java/res/xml/privacy_preferences.xml b/chrome/androi
+        android:summary="@string/allow_custom_tab_intents_summary"
+        android:defaultValue="false" />
+    <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+        android:title="@string/uses_separate_storagepartition_for_cct_title"
+        android:summary="@string/uses_separate_storagepartition_for_cct_summary"
+        app:featureName="maylaunchurl-uses-separate-storage-partition"
+        app:needRestart="true" />
+    <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
+        android:key="open_external_links_incognito"
+        android:title="@string/open_external_links_incognito_title"
+        android:summary="@string/open_external_links_incognito_summary"
@@ -97,6 +105,20 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDis
             if (!chromeTabbedTaskExists()) {
                 newIntent.putExtra(IntentHandler.EXTRA_STARTED_TABBED_CHROME_TASK, true);
             }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
@@ -1168,7 +1168,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
     public @CustomTabProfileType int getCustomTabMode() {
         return AlwaysIncognitoLinkInterceptor.isAlwaysIncognito()
                 ? CustomTabProfileType.INCOGNITO
-                : CustomTabProfileType.REGULAR;
+                : (ChromeFeatureList.sMayLaunchurlUsesSeparateStoragePartition.isEnabled()
+                    ? CustomTabProfileType.EPHEMERAL
+                    : CustomTabProfileType.REGULAR);
     }
 
     @Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -156,7 +178,23 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/Inco
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
@@ -99,6 +99,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -53,6 +53,15 @@ import org.chromium.components.user_prefs.UserPrefs;
 import org.chromium.ui.text.NoUnderlineClickableSpan;
 import org.chromium.ui.text.SpanApplier;
 
+import android.app.role.RoleManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ResolveInfo;
+import android.provider.Settings;
+import android.text.TextUtils;
+import org.chromium.base.IntentUtils;
+import org.chromium.base.PackageManagerUtils;
+
 import androidx.annotation.Nullable;
 import androidx.preference.PreferenceCategory;
 import org.chromium.chrome.browser.contextualsearch.ContextualSearchManager;
@@ -99,6 +108,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
 
     private IncognitoLockSettings mIncognitoLockSettings;
 
@@ -166,7 +204,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
     @Override
     public void onCreatePreferencesCromite(Bundle savedInstanceState, String rootKey) {
         getActivity().setTitle(R.string.prefs_privacy_security);
@@ -312,6 +315,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -312,6 +324,9 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
                 new SpanApplier.SpanInfo("<link2>", "</link2>", servicesLink));
     }
 
@@ -176,7 +214,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
     @Override
     public boolean onPreferenceChange(Preference preference, Object newValue) {
         String key = preference.getKey();
@@ -328,6 +334,14 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -328,6 +343,31 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
         } else if (PREF_SEARCH_SUGGESTIONS.equals(key)) {
             UserPrefs.get(getProfile())
                     .setBoolean(Pref.SEARCH_SUGGEST_ENABLED, (boolean) newValue);
@@ -184,6 +222,23 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
+            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
+            sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
+            sharedPreferencesEditor.apply();
+            // check default browser
+            if ((boolean)newValue) {
+                ResolveInfo info = PackageManagerUtils.resolveDefaultWebBrowserActivity();
+                if (info == null || info.match == 0 ||
+                    !TextUtils.equals(ContextUtils.getApplicationContext().getPackageName(),
+                                      info.activityInfo.packageName)) {
+                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+                                RoleManager roleManager = (RoleManager) getContext().getSystemService(Context.ROLE_SERVICE);
+                                Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_BROWSER);
+                                startActivityForResult(intent, 0);
+                        } else {
+                                Intent intent = new Intent(Settings.ACTION_MANAGE_DEFAULT_APPS_SETTINGS);
+                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+                                IntentUtils.safeStartActivity(getContext(), intent);
+                        }
+                }
+            }
+        } else if (PREF_OPEN_EXTERNAL_LINKS_INCOGNITO.equals(key)) {
+            SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
+            sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue);
@@ -191,7 +246,7 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
         }
         return true;
     }
@@ -350,6 +364,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
@@ -350,6 +390,16 @@ public class PrivacySettings extends ChromeBaseSettingsFragment
                     UserPrefs.get(getProfile()).getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
         }
 
@@ -208,6 +263,25 @@ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/privacy/setting
         Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
         if (doNotTrackPref != null) {
             doNotTrackPref.setSummary(
diff --git a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
--- a/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
+++ b/chrome/browser/flags/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java
@@ -638,6 +638,7 @@ public abstract class ChromeFeatureList {
     public static final CachedFlag sLogoPolishAnimationKillSwitch =
             newCachedFlag(LOGO_POLISH_ANIMATION_KILL_SWITCH, true);
     public static final CachedFlag sMagicStackAndroid = newCachedFlag(MAGIC_STACK_ANDROID, true);
+    public static final CachedFlag sMayLaunchurlUsesSeparateStoragePartition = newCachedFlag(MAYLAUNCHURL_USES_SEPARATE_STORAGE_PARTITION, false);
     public static final CachedFlag sMostVisitedTilesReselect =
             newCachedFlag(MOST_VISITED_TILES_RESELECT, false);
     public static final CachedFlag sMultiInstanceApplicationStatusCleanup =
@@ -768,6 +769,7 @@ public abstract class ChromeFeatureList {
                     sLogoPolish,
                     sLogoPolishAnimationKillSwitch,
                     sMagicStackAndroid,
+                    sMayLaunchurlUsesSeparateStoragePartition,
                     sMostVisitedTilesReselect,
                     sMultiInstanceApplicationStatusCleanup,
                     sNavBarColorMatchesTabBackground,
diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
--- a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
+++ b/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAssociatedApp.java
@@ -224,20 +298,28 @@ diff --git a/chrome/browser/tab/java/src/org/chromium/chrome/browser/tab/TabAsso
         String packageName = ContextUtils.getApplicationContext().getPackageName();
         return tab.getLaunchType() == TabLaunchType.FROM_EXTERNAL_APP
                 && !TextUtils.equals(app.getAppId(), packageName);
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
@@ -5696,6 +5696,20 @@ To change this setting, <ph name="BEGIN_LINK">BEGIN_LINK</ph>delete the Chrome d
       <message name="IDS_NEAR_OOM_INTERVENTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can resume what it was doing.">
          Resume
       </message>
diff --git a/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp
new file mode 100644
--- /dev/null
+++ b/chrome/browser/ui/android/strings/cromite_android_chrome_strings_grd/Add-custom-tab-intents-privacy-option.grdp
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<grit-part>
+    <!-- Allow custom tab intents -->
+    <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_TITLE" desc="Text for 'Allow custom tab intents' settings-privacy option.">
+        Allow custom tab intents
+        Allow custom tab intents.
+    </message>
+    <message name="IDS_ALLOW_CUSTOM_TAB_INTENTS_SUMMARY" desc="Summary text for 'Allow custom tab intents' settings-privacy option.">
+        Allow applications to open custom tab intents, similar to webview.
+        Allow applications to open custom tab intents, similar to webview. To work, Cromite must be set as the default browser.
+    </message>
+
+    <message name="IDS_USES_SEPARATE_STORAGEPARTITION_FOR_CCT_TITLE" desc="Text for 'Use ephemeral mode for CCT' settings-privacy option.">
+        Use ephemeral mode for CCT
+    </message>
+    <message name="IDS_USES_SEPARATE_STORAGEPARTITION_FOR_CCT_SUMMARY" desc="Summary text for 'Use ephemeral mode for CCT' settings-privacy option.">
+        Use a separate storage partition when opening custom tab intents
+    </message>
+
+    <!-- Open External Links in Incognito -->
+    <message name="IDS_OPEN_EXTERNAL_LINKS_INCOGNITO_TITLE" desc="Text for 'Open external links in incognito' settings-privacy option.">
+        Open external links in incognito
@@ -245,9 +327,7 @@ diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chro
+    <message name="IDS_OPEN_EXTERNAL_LINKS_INCOGNITO_SUMMARY" desc="Summary text for 'Open external links in incognito' settings-privacy option.">
+        Force the opening of all external links in incognito mode and uses the CCT ephemeral mode. Caution: there is only one incognito profile.
+    </message>
       <!-- Usage Stats strings -->
       <message name="IDS_USAGE_STATS_CONSENT_TITLE" desc="Title for activity authorizing Digital Wellbeing to access Chrome usage data">
         Show your Chrome activity in Digital Wellbeing?
+</grit-part>
diff --git a/components/content_relationship_verification/android/java/src/org/chromium/components/content_relationship_verification/OriginVerifier.java b/components/content_relationship_verification/android/java/src/org/chromium/components/content_relationship_verification/OriginVerifier.java
--- a/components/content_relationship_verification/android/java/src/org/chromium/components/content_relationship_verification/OriginVerifier.java
+++ b/components/content_relationship_verification/android/java/src/org/chromium/components/content_relationship_verification/OriginVerifier.java