Tracking Protection: Connect prefs to switches in UI
Tested manually - render tests will be added once the UI is finished.
Low-Coverage-Reason: render tests not implemented yet.
Bug: b:295926938
Change-Id: Ie8a722803a51170632d58df2ecbdfffe0a32200d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4889645
Commit-Queue: Andrey Zaytsev <andzaytsev@google.com>
Reviewed-by: Nicola Tommasi <tommasin@chromium.org>
Reviewed-by: Ted Choc <tedchoc@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1201138}
diff --git a/chrome/android/DEPS b/chrome/android/DEPS
index e602190..21a3802 100644
--- a/chrome/android/DEPS
+++ b/chrome/android/DEPS
@@ -48,6 +48,7 @@
"+components/permissions/android/nfc",
"+components/policy",
"+components/prefs/android",
+ "+components/privacy_sandbox/android",
"+components/query_tiles",
"+components/safe_browsing/android/java",
"+components/security_interstitials/content/android",
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
index aae0554..2bc58ae 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/settings/SettingsActivity.java
@@ -63,6 +63,7 @@
import org.chromium.chrome.browser.password_manager.settings.PasswordSettings;
import org.chromium.chrome.browser.privacy_guide.PrivacyGuideFragment;
import org.chromium.chrome.browser.privacy_sandbox.AdMeasurementFragment;
+import org.chromium.chrome.browser.privacy_sandbox.ChromeTrackingProtectionDelegate;
import org.chromium.chrome.browser.privacy_sandbox.PrivacySandboxSettingsBaseFragment;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.profiles.ProfileManagerUtils;
@@ -93,6 +94,7 @@
import org.chromium.components.browser_ui.widget.displaystyle.ViewResizer;
import org.chromium.components.browser_ui.widget.gesture.BackPressHandler;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
+import org.chromium.components.privacy_sandbox.TrackingProtectionSettings;
import org.chromium.ui.KeyboardVisibilityDelegate;
import org.chromium.ui.UiUtils;
import org.chromium.ui.base.ActivityWindowAndroid;
@@ -604,6 +606,10 @@
if (fragment instanceof AutofillOptionsFragment) {
AutofillOptionsCoordinator.createFor((AutofillOptionsFragment) fragment);
}
+ if (fragment instanceof TrackingProtectionSettings) {
+ ((TrackingProtectionSettings) fragment)
+ .setTrackingProtectionDelegate(new ChromeTrackingProtectionDelegate(mProfile));
+ }
}
@Override
diff --git a/chrome/browser/privacy_sandbox/android/BUILD.gn b/chrome/browser/privacy_sandbox/android/BUILD.gn
index e18fff5..979ffda5 100644
--- a/chrome/browser/privacy_sandbox/android/BUILD.gn
+++ b/chrome/browser/privacy_sandbox/android/BUILD.gn
@@ -14,6 +14,7 @@
"java/src/org/chromium/chrome/browser/privacy_sandbox/AdMeasurementFragment.java",
"java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationFragment.java",
"java/src/org/chromium/chrome/browser/privacy_sandbox/AdPersonalizationRemovedFragment.java",
+ "java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java",
"java/src/org/chromium/chrome/browser/privacy_sandbox/FledgePreference.java",
"java/src/org/chromium/chrome/browser/privacy_sandbox/LearnMoreFragment.java",
"java/src/org/chromium/chrome/browser/privacy_sandbox/PrivacySandboxBottomSheetNotice.java",
@@ -62,6 +63,7 @@
"//components/browser_ui/widget/android:java",
"//components/favicon/android:java",
"//components/prefs/android:java",
+ "//components/privacy_sandbox/android:java",
"//components/user_prefs/android:java",
"//content/public/android:content_java",
"//third_party/androidx:androidx_annotation_annotation_java",
diff --git a/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java
new file mode 100644
index 0000000..a801d36
--- /dev/null
+++ b/chrome/browser/privacy_sandbox/android/java/src/org/chromium/chrome/browser/privacy_sandbox/ChromeTrackingProtectionDelegate.java
@@ -0,0 +1,38 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.privacy_sandbox;
+
+import org.chromium.chrome.browser.preferences.Pref;
+import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.components.privacy_sandbox.TrackingProtectionDelegate;
+import org.chromium.components.user_prefs.UserPrefs;
+
+public class ChromeTrackingProtectionDelegate implements TrackingProtectionDelegate {
+ private final Profile mProfile;
+
+ public ChromeTrackingProtectionDelegate(Profile profile) {
+ mProfile = profile;
+ }
+
+ @Override
+ public boolean isBlockAll3PCDEnabled() {
+ return UserPrefs.get(mProfile).getBoolean(Pref.BLOCK_ALL3PC_TOGGLE_ENABLED);
+ }
+
+ @Override
+ public void setBlockAll3PCD(boolean enabled) {
+ UserPrefs.get(mProfile).setBoolean(Pref.BLOCK_ALL3PC_TOGGLE_ENABLED, enabled);
+ }
+
+ @Override
+ public boolean isDoNotTrackEnabled() {
+ return UserPrefs.get(mProfile).getBoolean(Pref.ENABLE_DO_NOT_TRACK);
+ }
+
+ @Override
+ public void setDoNotTrack(boolean enabled) {
+ UserPrefs.get(mProfile).setBoolean(Pref.ENABLE_DO_NOT_TRACK, enabled);
+ }
+}
diff --git a/components/privacy_sandbox/android/BUILD.gn b/components/privacy_sandbox/android/BUILD.gn
index f56eb840..cb54a92 100644
--- a/components/privacy_sandbox/android/BUILD.gn
+++ b/components/privacy_sandbox/android/BUILD.gn
@@ -5,12 +5,19 @@
import("//build/config/android/rules.gni")
android_library("java") {
- sources = [ "java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java" ]
+ sources = [
+ "java/src/org/chromium/components/privacy_sandbox/TrackingProtectionDelegate.java",
+ "java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java",
+ ]
resources_package = "org.chromium.components.privacy_sandbox"
deps = [
":java_resources",
"//components/browser_ui/settings/android:java",
+ "//components/prefs/android:java",
"//components/strings:components_strings_grd",
+ "//components/user_prefs/android:java",
+ "//content/public/android:content_java",
+ "//third_party/androidx:androidx_fragment_fragment_java",
"//third_party/androidx:androidx_preference_preference_java",
]
}
diff --git a/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionDelegate.java b/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionDelegate.java
new file mode 100644
index 0000000..be85b41e7
--- /dev/null
+++ b/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionDelegate.java
@@ -0,0 +1,20 @@
+// Copyright 2023 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.components.privacy_sandbox;
+
+/** Interface implemented by the embedder to access embedder-specific logic. */
+public interface TrackingProtectionDelegate {
+ /** @return whether block all 3PCD pref is enabled. */
+ boolean isBlockAll3PCDEnabled();
+
+ /** Set the value of the block all 3PCD pref. */
+ void setBlockAll3PCD(boolean enabled);
+
+ /** @return whether the Do Not Track pref is enabled. */
+ boolean isDoNotTrackEnabled();
+
+ /** Set the value of the Do Not Track Pref. */
+ void setDoNotTrack(boolean enabled);
+}
diff --git a/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java b/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java
index 1415fa0..fd08381b 100644
--- a/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java
+++ b/components/privacy_sandbox/android/java/src/org/chromium/components/privacy_sandbox/TrackingProtectionSettings.java
@@ -8,12 +8,43 @@
import androidx.preference.PreferenceFragmentCompat;
+import org.chromium.components.browser_ui.settings.ChromeSwitchPreference;
import org.chromium.components.browser_ui.settings.SettingsUtils;
/** Fragment to manage settings for tracking protection. */
public class TrackingProtectionSettings extends PreferenceFragmentCompat {
+ // Must match keys in tracking_protection_preferences.xml.
+ private static final String PREF_BLOCK_ALL_TOGGLE = "block_all_3pcd_toggle";
+ private static final String PREF_DNT_TOGGLE = "dnt_toggle";
+
+ private TrackingProtectionDelegate mDelegate;
+
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
SettingsUtils.addPreferencesFromResource(this, R.xml.tracking_protection_preferences);
+ getActivity().setTitle(R.string.privacy_sandbox_tracking_protection_title);
+
+ ChromeSwitchPreference blockAll3PCookiesSwitch =
+ (ChromeSwitchPreference) findPreference(PREF_BLOCK_ALL_TOGGLE);
+ ChromeSwitchPreference doNotTrackSwitch =
+ (ChromeSwitchPreference) findPreference(PREF_DNT_TOGGLE);
+
+ // Block all 3PCD switch.
+ blockAll3PCookiesSwitch.setChecked(mDelegate.isBlockAll3PCDEnabled());
+ blockAll3PCookiesSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
+ mDelegate.setBlockAll3PCD((boolean) newValue);
+ return true;
+ });
+
+ // Do not track switch.
+ doNotTrackSwitch.setChecked(mDelegate.isDoNotTrackEnabled());
+ doNotTrackSwitch.setOnPreferenceChangeListener((preference, newValue) -> {
+ mDelegate.setDoNotTrack((boolean) newValue);
+ return true;
+ });
+ }
+
+ public void setTrackingProtectionDelegate(TrackingProtectionDelegate delegate) {
+ mDelegate = delegate;
}
}
diff --git a/components/privacy_sandbox_strings.grdp b/components/privacy_sandbox_strings.grdp
index 73cf265..cbf3bd91 100644
--- a/components/privacy_sandbox_strings.grdp
+++ b/components/privacy_sandbox_strings.grdp
@@ -2163,6 +2163,9 @@
<!-- Tracking Protection -->
<!-- TODO(b/295926938: finalize the strings. -->
+ <message name="IDS_PRIVACY_SANDBOX_TRACKING_PROTECTION_TITLE" desc="" translateable="false" formatter_data="android_java">
+ Tracking Protection
+ </message>
<message name="IDS_PRIVACY_SANDBOX_TRACKING_PROTECTION_DESCRIPTION" desc="" translateable="false" formatter_data="android_java">
Chrome limits the amount of information sites can use to track you as you browse. You can change your settings to choose your own level of protection.
</message>