Commit 5bbee0e9 authored by Robbie McElrath's avatar Robbie McElrath Committed by Commit Bot

[WebLayer] Create SiteSettingsPrefClient interface for Site Settings UI.

This CL introduces a SiteSettingsPrefClient interface so site_settings
code can access native prefs without depending on Clank's
PrefServiceBridge. This is a temporary class to provide access to prefs
until PrefServiceBridge is properly componentized.

Bug: 1058597
Change-Id: I92c6566e71907646e053eaaa2d7a082fb4b21a5b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2153787Reviewed-by: default avatarFinnur Thorarinsson <finnur@chromium.org>
Commit-Queue: Robbie McElrath <rmcelrath@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760153}
parent ac822054
......@@ -1488,6 +1488,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/site_settings/ChosenObjectSettings.java",
"java/src/org/chromium/chrome/browser/site_settings/ChromeNotificationSettingsClient.java",
"java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsClient.java",
"java/src/org/chromium/chrome/browser/site_settings/ChromeSiteSettingsPrefClient.java",
"java/src/org/chromium/chrome/browser/site_settings/ClearWebsiteStorage.java",
"java/src/org/chromium/chrome/browser/site_settings/ClearWebsiteStorageDialog.java",
"java/src/org/chromium/chrome/browser/site_settings/ContentSetting.java",
......@@ -1511,6 +1512,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/site_settings/SiteSettings.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsCategory.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsClient.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsPrefClient.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsPreference.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsPreferenceFragment.java",
"java/src/org/chromium/chrome/browser/site_settings/StorageInfo.java",
......
......@@ -23,6 +23,7 @@ import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
*/
public class ChromeSiteSettingsClient implements SiteSettingsClient {
private ChromeNotificationSettingsClient mChromeNotificationSettingsClient;
private ChromeSiteSettingsPrefClient mChromeSiteSettingsPrefClient;
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
@Override
......@@ -94,4 +95,12 @@ public class ChromeSiteSettingsClient implements SiteSettingsClient {
public boolean isQuietNotificationPromptsFeatureEnabled() {
return ChromeFeatureList.isEnabled(ChromeFeatureList.QUIET_NOTIFICATION_PROMPTS);
}
@Override
public ChromeSiteSettingsPrefClient getSiteSettingsPrefClient() {
if (mChromeSiteSettingsPrefClient == null) {
mChromeSiteSettingsPrefClient = new ChromeSiteSettingsPrefClient();
}
return mChromeSiteSettingsPrefClient;
}
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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.site_settings;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
/**
* A SiteSettingsPrefClient implementation that delegates to Chrome's PrefServiceBridge.
*/
public class ChromeSiteSettingsPrefClient implements SiteSettingsPrefClient {
@Override
public boolean getBlockThirdPartyCookies() {
return PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES);
}
@Override
public void setBlockThirdPartyCookies(boolean newValue) {
PrefServiceBridge.getInstance().setBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES, newValue);
}
@Override
public boolean isBlockThirdPartyCookiesManaged() {
return PrefServiceBridge.getInstance().isManagedPreference(Pref.BLOCK_THIRD_PARTY_COOKIES);
}
@Override
public int getCookieControlsMode() {
return PrefServiceBridge.getInstance().getInteger(Pref.COOKIE_CONTROLS_MODE);
}
@Override
public void setCookieControlsMode(int newValue) {
PrefServiceBridge.getInstance().setInteger(Pref.COOKIE_CONTROLS_MODE, newValue);
}
@Override
public boolean getEnableQuietNotificationPermissionUi() {
return PrefServiceBridge.getInstance().getBoolean(
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI);
}
@Override
public void setEnableQuietNotificationPermissionUi(boolean newValue) {
PrefServiceBridge.getInstance().setBoolean(
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI, newValue);
}
@Override
public void clearEnableNotificationPermissionUi() {
PrefServiceBridge.getInstance().clearPref(Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI);
}
@Override
public void setNotificationsVibrateEnabled(boolean newValue) {
PrefServiceBridge.getInstance().setBoolean(Pref.NOTIFICATIONS_VIBRATE_ENABLED, newValue);
}
}
......@@ -37,8 +37,6 @@ import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.site_settings.FourStateCookieSettingsPreference.CookieSettingsState;
import org.chromium.chrome.browser.site_settings.Website.StoredDataClearedCallback;
import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference;
......@@ -542,20 +540,16 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
setCookieSettingsPreference((CookieSettingsState) newValue);
getInfoForOrigins();
} else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) {
PrefServiceBridge.getInstance().setBoolean(
Pref.BLOCK_THIRD_PARTY_COOKIES, ((boolean) newValue));
getPrefs().setBlockThirdPartyCookies((boolean) newValue);
} else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) {
PrefServiceBridge.getInstance().setBoolean(
Pref.NOTIFICATIONS_VIBRATE_ENABLED, (boolean) newValue);
getPrefs().setNotificationsVibrateEnabled((boolean) newValue);
} else if (NOTIFICATIONS_QUIET_UI_TOGGLE_KEY.equals(preference.getKey())) {
boolean boolValue = (boolean) newValue;
if (boolValue) {
PrefServiceBridge.getInstance().setBoolean(
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI, true);
getPrefs().setEnableQuietNotificationPermissionUi(true);
} else {
// Clear the pref so if the default changes later the user will get the new default.
PrefServiceBridge.getInstance().clearPref(
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI);
getPrefs().clearEnableNotificationPermissionUi();
}
}
return true;
......@@ -588,9 +582,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
}
WebsitePreferenceBridge.setCategoryEnabled(ContentSettingsType.COOKIES, allowCookies);
PrefServiceBridge.getInstance().setInteger(Pref.COOKIE_CONTROLS_MODE, mode);
PrefServiceBridge.getInstance().setBoolean(
Pref.BLOCK_THIRD_PARTY_COOKIES, mode == CookieControlsMode.ON);
getPrefs().setCookieControlsMode(mode);
getPrefs().setBlockThirdPartyCookies(mode == CookieControlsMode.ON);
}
private boolean cookieSettingsExceptionShouldBlock() {
......@@ -1053,13 +1046,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
new FourStateCookieSettingsPreference.Params();
params.allowCookies =
WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES);
params.blockThirdPartyCookies =
PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES);
params.cookieControlsMode =
PrefServiceBridge.getInstance().getInteger(Pref.COOKIE_CONTROLS_MODE);
params.blockThirdPartyCookies = getPrefs().getBlockThirdPartyCookies();
params.cookieControlsMode = getPrefs().getCookieControlsMode();
params.cookiesContentSettingEnforced = mCategory.isManaged();
params.thirdPartyBlockingEnforced =
PrefServiceBridge.getInstance().isManagedPreference(Pref.BLOCK_THIRD_PARTY_COOKIES);
params.thirdPartyBlockingEnforced = getPrefs().isBlockThirdPartyCookiesManaged();
fourStateCookieToggle.setState(params);
}
......@@ -1101,16 +1091,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
ChromeBaseCheckBoxPreference thirdPartyCookiesPref =
(ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
THIRD_PARTY_COOKIES_TOGGLE_KEY);
thirdPartyCookiesPref.setChecked(
PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES));
thirdPartyCookiesPref.setChecked(getPrefs().getBlockThirdPartyCookies());
thirdPartyCookiesPref.setEnabled(
WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES));
thirdPartyCookiesPref.setManagedPreferenceDelegate(new ForwardingManagedPreferenceDelegate(
getSiteSettingsClient().getManagedPreferenceDelegate()) {
@Override
public boolean isPreferenceControlledByPolicy(Preference preference) {
return PrefServiceBridge.getInstance().isManagedPreference(
Pref.BLOCK_THIRD_PARTY_COOKIES);
return getPrefs().isBlockThirdPartyCookiesManaged();
}
});
}
......@@ -1138,8 +1126,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
quiet_ui_pref = (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
NOTIFICATIONS_QUIET_UI_TOGGLE_KEY);
}
quiet_ui_pref.setChecked(PrefServiceBridge.getInstance().getBoolean(
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI));
quiet_ui_pref.setChecked(getPrefs().getEnableQuietNotificationPermissionUi());
} else if (quiet_ui_pref != null) {
// Save a reference to allow re-adding it to the screen.
mNotificationsQuietUiPref = quiet_ui_pref;
......@@ -1156,4 +1143,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
ManagedPreferencesUtils.showManagedByAdministratorToast(getActivity());
}
}
private SiteSettingsPrefClient getPrefs() {
return getSiteSettingsClient().getSiteSettingsPrefClient();
}
}
......@@ -10,8 +10,6 @@ import androidx.preference.Preference;
import org.chromium.base.CommandLine;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.preferences.Pref;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.site_settings.SiteSettingsCategory.Type;
import org.chromium.components.browser_ui.settings.SettingsUtils;
import org.chromium.components.content_settings.ContentSettingValues;
......@@ -135,7 +133,9 @@ public class SiteSettings
// Show 'disabled' message when permission is not granted in Android.
p.setSummary(ContentSettingsResources.getCategorySummary(contentType, false));
} else if (Type.COOKIES == prefCategory && checked
&& PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES)) {
&& getSiteSettingsClient()
.getSiteSettingsPrefClient()
.getBlockThirdPartyCookies()) {
p.setSummary(ContentSettingsResources.getCookieAllowedExceptThirdPartySummary());
} else if (Type.DEVICE_LOCATION == prefCategory && checked
&& WebsitePreferenceBridge.isLocationAllowedByPolicy()) {
......
......@@ -49,4 +49,11 @@ public interface SiteSettingsClient {
* @return true if the QuietNotificationPrompts Feature is enabled.
*/
boolean isQuietNotificationPromptsFeatureEnabled();
/**
* @return The SiteSettingsPrefClient that should be used to access native prefs when rendering
* the SiteSettings UI.
*/
// TODO(crbug.com/1071603): Remove this once PrefServiceBridge is componentized.
SiteSettingsPrefClient getSiteSettingsPrefClient();
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// 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.site_settings;
/**
* An interface that allows the Site Settings UI to read and write native prefs.
*
* This interface was introduced because there's currently no way for a component to access native
* prefs from Java, and should be removed once that functionality exists.
*/
// TODO(crbug.com/1071603): Remove this once PrefServiceBridge is componentized.
public interface SiteSettingsPrefClient {
boolean getBlockThirdPartyCookies();
void setBlockThirdPartyCookies(boolean newValue);
boolean isBlockThirdPartyCookiesManaged();
int getCookieControlsMode();
void setCookieControlsMode(int newValue);
boolean getEnableQuietNotificationPermissionUi();
void setEnableQuietNotificationPermissionUi(boolean newValue);
void clearEnableNotificationPermissionUi();
void setNotificationsVibrateEnabled(boolean newValue);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment