123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- From: csagan5 <32685696+csagan5@users.noreply.github.com>
- Date: Wed, 29 Aug 2018 11:03:44 +0200
- Subject: Add custom tab intents privacy option
- Add custom tab intents privacy option and force
- open external links in incognito flag.
- Flags are mutually exclusive.
- See also: https://github.com/bromite/bromite/issues/1474
- ---
- .../java/res/xml/privacy_preferences.xml | 10 ++++++++
- .../browser/LaunchIntentDispatcher.java | 22 +++++++++++++++++
- .../IncognitoCustomTabIntentDataProvider.java | 6 +++++
- .../privacy/settings/PrivacySettings.java | 24 +++++++++++++++++++
- .../chrome/browser/tab/TabAssociatedApp.java | 6 ++++-
- .../strings/android_chrome_strings.grd | 15 ++++++++++++
- 6 files changed, 82 insertions(+), 1 deletion(-)
- 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
- @@ -65,6 +65,16 @@
- android:fragment="org.chromium.chrome.browser.privacy.settings.DoNotTrackSettings"
- android:key="do_not_track"
- android:title="@string/do_not_track_title"/>
- + <org.chromium.components.browser_ui.settings.ChromeSwitchPreference
- + android:key="allow_custom_tab_intents"
- + android:title="@string/allow_custom_tab_intents_title"
- + android:summary="@string/allow_custom_tab_intents_summary"
- + android:defaultValue="false" />
- + <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"
- + android:defaultValue="false" />
- <Preference
- android:key="privacy_sandbox"
- android:title="@string/prefs_privacy_sandbox"
- diff --git a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
- --- a/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
- +++ b/chrome/android/java/src/org/chromium/chrome/browser/LaunchIntentDispatcher.java
- @@ -46,6 +46,7 @@ import org.chromium.chrome.browser.notifications.NotificationPlatformBridge;
- import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
- import org.chromium.chrome.browser.searchwidget.SearchActivity;
- import org.chromium.chrome.browser.tab.Tab;
- +import org.chromium.chrome.browser.tab.TabLaunchType;
- import org.chromium.chrome.browser.translate.TranslateIntentHandler;
- import org.chromium.chrome.browser.util.AndroidTaskUtils;
- import org.chromium.chrome.browser.vr.VrModuleProvider;
- @@ -59,6 +60,8 @@ import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.util.Set;
-
- +import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
- +
- /**
- * Dispatches incoming intents to the appropriate activity based on the current configuration and
- * Intent fired.
- @@ -279,6 +282,9 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
- */
- public static boolean isCustomTabIntent(Intent intent) {
- if (intent == null) return false;
- + if (!ContextUtils.getAppSharedPreferences()
- + .getBoolean(PrivacySettings.PREF_ALLOW_CUSTOM_TAB_INTENTS, false))
- + return false;
- if (CustomTabsIntent.shouldAlwaysUseBrowserUI(intent)
- || !intent.hasExtra(CustomTabsIntent.EXTRA_SESSION)) {
- return false;
- @@ -298,6 +304,10 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
- newIntent.setData(uri);
- newIntent.setClassName(context, CustomTabActivity.class.getName());
-
- + if (ContextUtils.getAppSharedPreferences()
- + .getBoolean(PrivacySettings.PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, false))
- + newIntent.putExtra(IntentHandler.EXTRA_OPEN_NEW_INCOGNITO_TAB, true);
- +
- // Since configureIntentForResizableCustomTab() might change the componenet/class
- // associated with the passed intent, it needs to be called after #setClassName(context,
- // CustomTabActivity.class.getName());
- @@ -417,6 +427,18 @@ public class LaunchIntentDispatcher implements IntentHandler.IntentHandlerDelega
-
- if (Intent.ACTION_VIEW.equals(newIntent.getAction())
- && !IntentHandler.wasIntentSenderChrome(newIntent)) {
- +
- + if (ContextUtils.getAppSharedPreferences().getBoolean(
- + PrivacySettings.PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, false)) {
- + Context applicationContext = ContextUtils.getApplicationContext();
- + newIntent = IntentHandler.createTrustedOpenNewTabIntent(applicationContext,
- + /*incognito*/true);
- + newIntent.setData(mIntent.getData());
- + newIntent.setPackage(applicationContext.getPackageName());
- + IntentHandler.setTabLaunchType(newIntent, TabLaunchType.FROM_EXTERNAL_APP);
- + newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- + }
- +
- long time = SystemClock.elapsedRealtime();
- if (!chromeTabbedTaskExists()) {
- newIntent.putExtra(IntentHandler.EXTRA_STARTED_TABBED_CHROME_TASK, true);
- diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
- --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
- +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/IncognitoCustomTabIntentDataProvider.java
- @@ -36,6 +36,9 @@ import org.chromium.components.browser_ui.widget.TintedDrawable;
- import java.util.ArrayList;
- import java.util.List;
-
- +import org.chromium.base.ContextUtils;
- +import org.chromium.chrome.browser.privacy.settings.PrivacySettings;
- +
- /**
- * A model class that parses the incoming intent for incognito Custom Tabs specific customization
- * data.
- @@ -109,6 +112,9 @@ public class IncognitoCustomTabIntentDataProvider extends BrowserServicesIntentD
- }
-
- private static boolean isIntentFromThirdPartyAllowed() {
- + if (ContextUtils.getAppSharedPreferences()
- + .getBoolean(PrivacySettings.PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, false))
- + return true;
- return CachedFeatureFlags.isEnabled(
- ChromeFeatureList.CCT_INCOGNITO_AVAILABLE_TO_THIRD_PARTY);
- }
- 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
- @@ -94,6 +94,9 @@ public class PrivacySettings
- private ManagedPreferenceDelegate mManagedPreferenceDelegate;
- private IncognitoLockSettings mIncognitoLockSettings;
-
- + private ChromeSwitchPreference allowCustomTabIntentsPref;
- + private ChromeSwitchPreference openExternalLinksPref;
- +
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- PrivacyPreferencesManagerImpl privacyPrefManager =
- @@ -206,6 +209,9 @@ public class PrivacySettings
- updatePreferences();
- }
-
- + public static final String PREF_ALLOW_CUSTOM_TAB_INTENTS = "allow_custom_tab_intents";
- + public static final String PREF_OPEN_EXTERNAL_LINKS_INCOGNITO = "open_external_links_incognito";
- +
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- String key = preference.getKey();
- @@ -237,6 +243,14 @@ public class PrivacySettings
- } else if (PREF_INCOGNITO_TAB_HISTORY_ENABLED.equals(key)) {
- UserPrefs.get(Profile.getLastUsedRegularProfile())
- .setBoolean(Pref.INCOGNITO_TAB_HISTORY_ENABLED, (boolean) newValue);
- + } else if (PREF_ALLOW_CUSTOM_TAB_INTENTS.equals(key)) {
- + SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
- + sharedPreferencesEditor.putBoolean(PREF_ALLOW_CUSTOM_TAB_INTENTS, (boolean)newValue);
- + sharedPreferencesEditor.apply();
- + } else if (PREF_OPEN_EXTERNAL_LINKS_INCOGNITO.equals(key)) {
- + SharedPreferences.Editor sharedPreferencesEditor = ContextUtils.getAppSharedPreferences().edit();
- + sharedPreferencesEditor.putBoolean(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO, (boolean)newValue);
- + sharedPreferencesEditor.apply();
- }
- return true;
- }
- @@ -271,6 +285,16 @@ public class PrivacySettings
- canMakePaymentPref.setChecked(prefService.getBoolean(Pref.CAN_MAKE_PAYMENT_ENABLED));
- }
-
- + allowCustomTabIntentsPref =
- + (ChromeSwitchPreference) findPreference(PREF_ALLOW_CUSTOM_TAB_INTENTS);
- + allowCustomTabIntentsPref.setOnPreferenceChangeListener(this);
- + allowCustomTabIntentsPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
- +
- + openExternalLinksPref =
- + (ChromeSwitchPreference) findPreference(PREF_OPEN_EXTERNAL_LINKS_INCOGNITO);
- + openExternalLinksPref.setOnPreferenceChangeListener(this);
- + openExternalLinksPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
- +
- Preference doNotTrackPref = findPreference(PREF_DO_NOT_TRACK);
- if (doNotTrackPref != null) {
- doNotTrackPref.setSummary(prefService.getBoolean(Pref.ENABLE_DO_NOT_TRACK)
- 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
- @@ -84,7 +84,11 @@ public final class TabAssociatedApp extends TabWebContentsUserData implements Im
- public static boolean isOpenedFromExternalApp(Tab tab) {
- TabAssociatedApp app = get(tab);
- if (app == null) return false;
- -
- + if (ContextUtils.getAppSharedPreferences()
- + .getBoolean("open_external_links_incognito", false) &&
- + tab.isIncognito() &&
- + tab.getLaunchType() == TabLaunchType.FROM_EXTERNAL_APP)
- + return true;
- 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
- @@ -4625,6 +4625,21 @@ To change this setting, <ph name="BEGIN_LINK"><resetlink></ph>reset sync<p
- <message name="IDS_NEAR_OOM_REDUCTION_DECLINE" desc="The text of the button letting the user decline the browser's intervention, so that the page can be reloaded.">
- Show original
- </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.">
- + 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.">
- + Force the opening of all external links in incognito mode
- + </message>
-
- <!-- Autofill Assistant preferences -->
- <!-- TODO(b/168178344): Move to Assistant settings strings section below. -->
- --
- 2.20.1
|