Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1657)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/ContentPreferences.java

Issue 850813002: Upstream Site Settings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@location_settings_singleton
Patch Set: use findbugs annotations; fix test Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/preferences/website/ContentPreferences.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/ContentPreferences.java b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/ContentPreferences.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b2e6bdd471648963d7d231de2b16d5fedae7322
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/preferences/website/ContentPreferences.java
@@ -0,0 +1,217 @@
+// Copyright 2015 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.preferences.website;
+
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
+import android.preference.PreferenceFragment;
+
+import org.chromium.base.CommandLine;
+import org.chromium.chrome.ChromeSwitches;
+import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ContentSettingsType;
+import org.chromium.chrome.browser.preferences.ChromeBaseCheckBoxPreference;
+import org.chromium.chrome.browser.preferences.LocationSettings;
+import org.chromium.chrome.browser.preferences.ManagedPreferenceDelegate;
+import org.chromium.chrome.browser.preferences.PrefServiceBridge;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The fragment displayed on Settings -> Content settings.
+ */
+public class ContentPreferences extends PreferenceFragment
+ implements OnPreferenceChangeListener, OnPreferenceClickListener {
+ // The keys for each category shown on the Content Settings page.
+ static final String ALL_SITES_KEY = "website_settings";
+ static final String COOKIES_KEY = "cookies";
+ static final String LOCATION_KEY = "device_location";
+ static final String CAMERA_AND_MIC_KEY = "use_camera_or_mic";
+ static final String JAVASCRIPT_KEY = "enable_javascript";
+ static final String BLOCK_POPUPS_KEY = "block_popups";
+ static final String PUSH_NOTIFICATIONS_KEY = "push_notifications";
+ static final String POPUPS_KEY = "popups";
+ static final String PROTECTED_CONTENT_KEY = "protected_content";
+ static final String TRANSLATE_KEY = "translate";
+ static final String STORAGE_KEY = "use_storage";
+
+ private ManagedPreferenceDelegate mManagedPreferenceDelegate;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.content_preferences);
+ getActivity().setTitle(R.string.prefs_content_settings);
+
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ getPreferenceScreen().removePreference(findPreference(PROTECTED_CONTENT_KEY));
+ }
+
+ if (!pushNotificationsSupported()) {
+ getPreferenceScreen().removePreference(findPreference(PUSH_NOTIFICATIONS_KEY));
+ }
+
+ // Set up the checkbox preferences.
+ List<String> checkBoxPreferences = new ArrayList<String>();
+ checkBoxPreferences.add(JAVASCRIPT_KEY);
+
+ for (String prefName : checkBoxPreferences) {
+ Preference p = findPreference(prefName);
+ p.setOnPreferenceChangeListener(this);
+ }
+
+ mManagedPreferenceDelegate = createManagedPreferenceDelegate();
+
+ updatePreferenceStates();
+ }
+
+ private int keyToContentSettingsType(String key) {
+ if (COOKIES_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_COOKIES;
+ } else if (LOCATION_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_GEOLOCATION;
+ } else if (CAMERA_AND_MIC_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM;
+ } else if (PUSH_NOTIFICATIONS_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_NOTIFICATIONS;
+ } else if (POPUPS_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS;
+ } else if (PROTECTED_CONTENT_KEY.equals(key)) {
+ return ContentSettingsType.CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER;
+ }
+ return -1;
+ }
+
+ /**
+ * Returns whether Push Notifications (Push Messaging) is supported.
+ */
+ public static boolean pushNotificationsSupported() {
+ return CommandLine.getInstance().hasSwitch(
+ ChromeSwitches.EXPERIMENTAL_WEB_PLAFTORM_FEATURES);
+ }
+
+ private void updatePreferenceStates() {
+ PrefServiceBridge prefServiceBridge = PrefServiceBridge.getInstance();
+
+ // Translate preference.
+ Preference translatePref = findPreference(TRANSLATE_KEY);
+ if (translatePref != null) {
+ setTranslateStateSummary(translatePref);
+ }
+
+ // JavaScript preference.
+ ChromeBaseCheckBoxPreference javascriptPref =
+ (ChromeBaseCheckBoxPreference) findPreference(JAVASCRIPT_KEY);
+ javascriptPref.setChecked(prefServiceBridge.javaScriptEnabled());
+ javascriptPref.setManagedPreferenceDelegate(mManagedPreferenceDelegate);
+
+ // Preferences that navigate to Website Settings.
+ List<String> websitePrefs = new ArrayList<String>();
+ websitePrefs.add(LOCATION_KEY);
+ if (Build.VERSION.SDK_INT >= 19) {
+ websitePrefs.add(PROTECTED_CONTENT_KEY);
+ }
+ websitePrefs.add(COOKIES_KEY);
+ websitePrefs.add(CAMERA_AND_MIC_KEY);
+ if (pushNotificationsSupported()) {
+ websitePrefs.add(PUSH_NOTIFICATIONS_KEY);
+ }
+ websitePrefs.add(POPUPS_KEY);
+ // Initialize the summary and icon for all preferences that have an
+ // associated content settings entry.
+ for (String prefName : websitePrefs) {
+ Preference p = findPreference(prefName);
+ int type = keyToContentSettingsType(prefName);
+ Website.PermissionDataEntry entry =
+ Website.PermissionDataEntry.getPermissionDataEntry(type);
+ boolean checked = false;
+ if (LOCATION_KEY.equals(p.getKey())) {
+ checked = LocationSettings.areAllLocationSettingsEnabled();
+ } else if (CAMERA_AND_MIC_KEY.equals(prefName)) {
+ checked = PrefServiceBridge.getInstance().isCameraMicEnabled();
+ } else if (PROTECTED_CONTENT_KEY.equals(prefName)) {
+ checked = PrefServiceBridge.getInstance().isProtectedMediaIdentifierEnabled();
+ } else if (COOKIES_KEY.equals(prefName)) {
+ checked = PrefServiceBridge.getInstance().isAcceptCookiesEnabled();
+ } else if (PUSH_NOTIFICATIONS_KEY.equals(prefName)) {
+ checked = PrefServiceBridge.getInstance().isPushNotificationsEnabled();
+ } else if (POPUPS_KEY.equals(prefName)) {
+ checked = PrefServiceBridge.getInstance().popupsEnabled();
+ }
+ p.setTitle(entry.titleResourceId);
+ if (COOKIES_KEY.equals(prefName) && checked
+ && prefServiceBridge.isBlockThirdPartyCookiesEnabled()) {
+ p.setSummary(R.string.website_settings_category_allowed_except_third_party);
+ } else {
+ p.setSummary(checked
+ ? entry.contentSettingToResourceIdForCategory(entry.defaultEnabledValue)
+ : entry.contentSettingToResourceIdForCategory(entry.defaultDisabledValue));
+ }
+ p.setIcon(entry.iconResourceId);
+ p.setOnPreferenceClickListener(this);
+ }
+
+ Preference p = findPreference(ALL_SITES_KEY);
+ p.setOnPreferenceClickListener(this);
+ // TODO(finnur): Re-move this for Storage once it can be moved to the 'Usage' menu.
+ p = findPreference(STORAGE_KEY);
+ p.setOnPreferenceClickListener(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ updatePreferenceStates();
+ }
+
+ // OnPreferenceClickListener:
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (!ALL_SITES_KEY.equals(preference.getKey())) {
+ preference.getExtras().putString(
+ WebsitePreferences.EXTRA_CATEGORY, preference.getKey());
+ }
+ preference.getExtras().putString(WebsitePreferences.EXTRA_TITLE,
+ preference.getTitle().toString());
+ return false;
+ }
+
+ // OnPreferenceChangeListener:
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (!preference.isEnabled()) return false;
+
+ String key = preference.getKey();
+ if (JAVASCRIPT_KEY.equals(key)) {
+ PrefServiceBridge.getInstance().setJavaScriptEnabled((boolean) newValue);
+ }
+ return true;
+ }
+
+ private void setTranslateStateSummary(Preference translatePref) {
+ boolean translateEnabled = PrefServiceBridge.getInstance().isTranslateEnabled();
+ translatePref.setSummary(translateEnabled
+ ? R.string.website_settings_category_ask
+ : R.string.website_settings_category_blocked);
+ }
+
+ private ManagedPreferenceDelegate createManagedPreferenceDelegate() {
+ return new ManagedPreferenceDelegate() {
+ @Override
+ public boolean isPreferenceControlledByPolicy(Preference preference) {
+ if (JAVASCRIPT_KEY.equals(preference.getKey())) {
+ return PrefServiceBridge.getInstance().javaScriptManaged();
+ }
+ return false;
+ }
+ };
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698