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!)
This commit is contained in:
@@ -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,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, <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>
|
||||
+ <!-- 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
|
||||
+ </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.
|
||||
+ </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.">
|
||||
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.
|
||||
+ </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. 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
|
||||
+ </message>
|
||||
+ <message name="IDS_OPEN_EXTERNAL_LINKS_INCOGNITO_SUMMARY" desc="Summary text for 'Open external links in incognito' settings-privacy option.">
|
||||
+ </message>
|
||||
+ <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?
|
||||
+ </message>
|
||||
+</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
|
||||
|
||||
Reference in New Issue
Block a user