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 = [ ...@@ -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/ChosenObjectSettings.java",
"java/src/org/chromium/chrome/browser/site_settings/ChromeNotificationSettingsClient.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/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/ClearWebsiteStorage.java",
"java/src/org/chromium/chrome/browser/site_settings/ClearWebsiteStorageDialog.java", "java/src/org/chromium/chrome/browser/site_settings/ClearWebsiteStorageDialog.java",
"java/src/org/chromium/chrome/browser/site_settings/ContentSetting.java", "java/src/org/chromium/chrome/browser/site_settings/ContentSetting.java",
...@@ -1511,6 +1512,7 @@ chrome_java_sources = [ ...@@ -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/SiteSettings.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsCategory.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/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/SiteSettingsPreference.java",
"java/src/org/chromium/chrome/browser/site_settings/SiteSettingsPreferenceFragment.java", "java/src/org/chromium/chrome/browser/site_settings/SiteSettingsPreferenceFragment.java",
"java/src/org/chromium/chrome/browser/site_settings/StorageInfo.java", "java/src/org/chromium/chrome/browser/site_settings/StorageInfo.java",
......
...@@ -23,6 +23,7 @@ import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate; ...@@ -23,6 +23,7 @@ import org.chromium.components.browser_ui.settings.ManagedPreferenceDelegate;
*/ */
public class ChromeSiteSettingsClient implements SiteSettingsClient { public class ChromeSiteSettingsClient implements SiteSettingsClient {
private ChromeNotificationSettingsClient mChromeNotificationSettingsClient; private ChromeNotificationSettingsClient mChromeNotificationSettingsClient;
private ChromeSiteSettingsPrefClient mChromeSiteSettingsPrefClient;
private ManagedPreferenceDelegate mManagedPreferenceDelegate; private ManagedPreferenceDelegate mManagedPreferenceDelegate;
@Override @Override
...@@ -94,4 +95,12 @@ public class ChromeSiteSettingsClient implements SiteSettingsClient { ...@@ -94,4 +95,12 @@ public class ChromeSiteSettingsClient implements SiteSettingsClient {
public boolean isQuietNotificationPromptsFeatureEnabled() { public boolean isQuietNotificationPromptsFeatureEnabled() {
return ChromeFeatureList.isEnabled(ChromeFeatureList.QUIET_NOTIFICATION_PROMPTS); 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; ...@@ -37,8 +37,6 @@ import androidx.vectordrawable.graphics.drawable.VectorDrawableCompat;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.metrics.RecordUserAction; import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; 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.FourStateCookieSettingsPreference.CookieSettingsState;
import org.chromium.chrome.browser.site_settings.Website.StoredDataClearedCallback; import org.chromium.chrome.browser.site_settings.Website.StoredDataClearedCallback;
import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference; import org.chromium.components.browser_ui.settings.ChromeBaseCheckBoxPreference;
...@@ -542,20 +540,16 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -542,20 +540,16 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
setCookieSettingsPreference((CookieSettingsState) newValue); setCookieSettingsPreference((CookieSettingsState) newValue);
getInfoForOrigins(); getInfoForOrigins();
} else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) { } else if (THIRD_PARTY_COOKIES_TOGGLE_KEY.equals(preference.getKey())) {
PrefServiceBridge.getInstance().setBoolean( getPrefs().setBlockThirdPartyCookies((boolean) newValue);
Pref.BLOCK_THIRD_PARTY_COOKIES, ((boolean) newValue));
} else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) { } else if (NOTIFICATIONS_VIBRATE_TOGGLE_KEY.equals(preference.getKey())) {
PrefServiceBridge.getInstance().setBoolean( getPrefs().setNotificationsVibrateEnabled((boolean) newValue);
Pref.NOTIFICATIONS_VIBRATE_ENABLED, (boolean) newValue);
} else if (NOTIFICATIONS_QUIET_UI_TOGGLE_KEY.equals(preference.getKey())) { } else if (NOTIFICATIONS_QUIET_UI_TOGGLE_KEY.equals(preference.getKey())) {
boolean boolValue = (boolean) newValue; boolean boolValue = (boolean) newValue;
if (boolValue) { if (boolValue) {
PrefServiceBridge.getInstance().setBoolean( getPrefs().setEnableQuietNotificationPermissionUi(true);
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI, true);
} else { } else {
// Clear the pref so if the default changes later the user will get the new default. // Clear the pref so if the default changes later the user will get the new default.
PrefServiceBridge.getInstance().clearPref( getPrefs().clearEnableNotificationPermissionUi();
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI);
} }
} }
return true; return true;
...@@ -588,9 +582,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -588,9 +582,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
} }
WebsitePreferenceBridge.setCategoryEnabled(ContentSettingsType.COOKIES, allowCookies); WebsitePreferenceBridge.setCategoryEnabled(ContentSettingsType.COOKIES, allowCookies);
PrefServiceBridge.getInstance().setInteger(Pref.COOKIE_CONTROLS_MODE, mode); getPrefs().setCookieControlsMode(mode);
PrefServiceBridge.getInstance().setBoolean( getPrefs().setBlockThirdPartyCookies(mode == CookieControlsMode.ON);
Pref.BLOCK_THIRD_PARTY_COOKIES, mode == CookieControlsMode.ON);
} }
private boolean cookieSettingsExceptionShouldBlock() { private boolean cookieSettingsExceptionShouldBlock() {
...@@ -1053,13 +1046,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -1053,13 +1046,10 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
new FourStateCookieSettingsPreference.Params(); new FourStateCookieSettingsPreference.Params();
params.allowCookies = params.allowCookies =
WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES); WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES);
params.blockThirdPartyCookies = params.blockThirdPartyCookies = getPrefs().getBlockThirdPartyCookies();
PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES); params.cookieControlsMode = getPrefs().getCookieControlsMode();
params.cookieControlsMode =
PrefServiceBridge.getInstance().getInteger(Pref.COOKIE_CONTROLS_MODE);
params.cookiesContentSettingEnforced = mCategory.isManaged(); params.cookiesContentSettingEnforced = mCategory.isManaged();
params.thirdPartyBlockingEnforced = params.thirdPartyBlockingEnforced = getPrefs().isBlockThirdPartyCookiesManaged();
PrefServiceBridge.getInstance().isManagedPreference(Pref.BLOCK_THIRD_PARTY_COOKIES);
fourStateCookieToggle.setState(params); fourStateCookieToggle.setState(params);
} }
...@@ -1101,16 +1091,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -1101,16 +1091,14 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
ChromeBaseCheckBoxPreference thirdPartyCookiesPref = ChromeBaseCheckBoxPreference thirdPartyCookiesPref =
(ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference( (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
THIRD_PARTY_COOKIES_TOGGLE_KEY); THIRD_PARTY_COOKIES_TOGGLE_KEY);
thirdPartyCookiesPref.setChecked( thirdPartyCookiesPref.setChecked(getPrefs().getBlockThirdPartyCookies());
PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES));
thirdPartyCookiesPref.setEnabled( thirdPartyCookiesPref.setEnabled(
WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES)); WebsitePreferenceBridge.isCategoryEnabled(ContentSettingsType.COOKIES));
thirdPartyCookiesPref.setManagedPreferenceDelegate(new ForwardingManagedPreferenceDelegate( thirdPartyCookiesPref.setManagedPreferenceDelegate(new ForwardingManagedPreferenceDelegate(
getSiteSettingsClient().getManagedPreferenceDelegate()) { getSiteSettingsClient().getManagedPreferenceDelegate()) {
@Override @Override
public boolean isPreferenceControlledByPolicy(Preference preference) { public boolean isPreferenceControlledByPolicy(Preference preference) {
return PrefServiceBridge.getInstance().isManagedPreference( return getPrefs().isBlockThirdPartyCookiesManaged();
Pref.BLOCK_THIRD_PARTY_COOKIES);
} }
}); });
} }
...@@ -1138,8 +1126,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -1138,8 +1126,7 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
quiet_ui_pref = (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference( quiet_ui_pref = (ChromeBaseCheckBoxPreference) getPreferenceScreen().findPreference(
NOTIFICATIONS_QUIET_UI_TOGGLE_KEY); NOTIFICATIONS_QUIET_UI_TOGGLE_KEY);
} }
quiet_ui_pref.setChecked(PrefServiceBridge.getInstance().getBoolean( quiet_ui_pref.setChecked(getPrefs().getEnableQuietNotificationPermissionUi());
Pref.ENABLE_QUIET_NOTIFICATION_PERMISSION_UI));
} else if (quiet_ui_pref != null) { } else if (quiet_ui_pref != null) {
// Save a reference to allow re-adding it to the screen. // Save a reference to allow re-adding it to the screen.
mNotificationsQuietUiPref = quiet_ui_pref; mNotificationsQuietUiPref = quiet_ui_pref;
...@@ -1156,4 +1143,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment ...@@ -1156,4 +1143,8 @@ public class SingleCategorySettings extends SiteSettingsPreferenceFragment
ManagedPreferencesUtils.showManagedByAdministratorToast(getActivity()); ManagedPreferencesUtils.showManagedByAdministratorToast(getActivity());
} }
} }
private SiteSettingsPrefClient getPrefs() {
return getSiteSettingsClient().getSiteSettingsPrefClient();
}
} }
...@@ -10,8 +10,6 @@ import androidx.preference.Preference; ...@@ -10,8 +10,6 @@ import androidx.preference.Preference;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.chrome.R; 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.chrome.browser.site_settings.SiteSettingsCategory.Type;
import org.chromium.components.browser_ui.settings.SettingsUtils; import org.chromium.components.browser_ui.settings.SettingsUtils;
import org.chromium.components.content_settings.ContentSettingValues; import org.chromium.components.content_settings.ContentSettingValues;
...@@ -135,7 +133,9 @@ public class SiteSettings ...@@ -135,7 +133,9 @@ public class SiteSettings
// Show 'disabled' message when permission is not granted in Android. // Show 'disabled' message when permission is not granted in Android.
p.setSummary(ContentSettingsResources.getCategorySummary(contentType, false)); p.setSummary(ContentSettingsResources.getCategorySummary(contentType, false));
} else if (Type.COOKIES == prefCategory && checked } else if (Type.COOKIES == prefCategory && checked
&& PrefServiceBridge.getInstance().getBoolean(Pref.BLOCK_THIRD_PARTY_COOKIES)) { && getSiteSettingsClient()
.getSiteSettingsPrefClient()
.getBlockThirdPartyCookies()) {
p.setSummary(ContentSettingsResources.getCookieAllowedExceptThirdPartySummary()); p.setSummary(ContentSettingsResources.getCookieAllowedExceptThirdPartySummary());
} else if (Type.DEVICE_LOCATION == prefCategory && checked } else if (Type.DEVICE_LOCATION == prefCategory && checked
&& WebsitePreferenceBridge.isLocationAllowedByPolicy()) { && WebsitePreferenceBridge.isLocationAllowedByPolicy()) {
......
...@@ -49,4 +49,11 @@ public interface SiteSettingsClient { ...@@ -49,4 +49,11 @@ public interface SiteSettingsClient {
* @return true if the QuietNotificationPrompts Feature is enabled. * @return true if the QuietNotificationPrompts Feature is enabled.
*/ */
boolean isQuietNotificationPromptsFeatureEnabled(); 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