diff --git a/build/patches/Add-custom-tab-intents-privacy-option.patch b/build/patches/Add-custom-tab-intents-privacy-option.patch index 6a7b8f87..59dfd6cf 100644 --- a/build/patches/Add-custom-tab-intents-privacy-option.patch +++ b/build/patches/Add-custom-tab-intents-privacy-option.patch @@ -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" /> + ++ ", "", 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,30 +298,36 @@ 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, BEGIN_LINKdelete the Chrome d - - Resume - -+ -+ -+ Allow custom tab intents -+ -+ -+ Allow applications to open custom tab intents, similar to webview. -+ -+ -+ +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 @@ ++ ++ ++ ++ ++ Allow custom tab intents. ++ ++ ++ Allow applications to open custom tab intents, similar to webview. To work, Cromite must be set as the default browser. ++ ++ ++ ++ Use ephemeral mode for CCT ++ ++ ++ Use a separate storage partition when opening custom tab intents ++ ++ ++ ++ + Open external links in incognito -+ -+ ++ ++ + Force the opening of all external links in incognito mode and uses the CCT ephemeral mode. Caution: there is only one incognito profile. -+ - - - Show your Chrome activity in Digital Wellbeing? ++ ++ 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