| // Copyright 2014 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; |
| |
| import android.content.SharedPreferences; |
| import android.util.Log; |
| |
| import androidx.annotation.Nullable; |
| |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.ThreadUtils; |
| import org.chromium.base.VisibleForTesting; |
| import org.chromium.base.annotations.CalledByNative; |
| import org.chromium.base.annotations.NativeMethods; |
| import org.chromium.chrome.browser.ContentSettingsType; |
| import org.chromium.chrome.browser.browsing_data.TimePeriod; |
| import org.chromium.chrome.browser.preferences.languages.LanguageItem; |
| import org.chromium.chrome.browser.preferences.website.ContentSettingException; |
| import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.List; |
| |
| /** |
| * PrefServiceBridge is a singleton which provides access to some native preferences. Ideally |
| * preferences should be grouped with their relevant functionality but this is a grab-bag for other |
| * preferences. |
| */ |
| public class PrefServiceBridge { |
| // These values must match the native enum values in |
| // SupervisedUserURLFilter::FilteringBehavior |
| public static final int SUPERVISED_USER_FILTERING_ALLOW = 0; |
| public static final int SUPERVISED_USER_FILTERING_WARN = 1; |
| public static final int SUPERVISED_USER_FILTERING_BLOCK = 2; |
| |
| private static final String MIGRATION_PREF_KEY = "PrefMigrationVersion"; |
| private static final int MIGRATION_CURRENT_VERSION = 4; |
| |
| /** The android permissions associated with requesting location. */ |
| private static final String[] LOCATION_PERMISSIONS = { |
| android.Manifest.permission.ACCESS_FINE_LOCATION, |
| android.Manifest.permission.ACCESS_COARSE_LOCATION}; |
| /** The android permissions associated with requesting access to the camera. */ |
| private static final String[] CAMERA_PERMISSIONS = {android.Manifest.permission.CAMERA}; |
| /** The android permissions associated with requesting access to the microphone. */ |
| private static final String[] MICROPHONE_PERMISSIONS = { |
| android.Manifest.permission.RECORD_AUDIO}; |
| /** Signifies there are no permissions associated. */ |
| private static final String[] EMPTY_PERMISSIONS = {}; |
| |
| private static final String LOG_TAG = "PrefServiceBridge"; |
| |
| /** |
| * Structure that holds all the version information about the current Chrome browser. |
| */ |
| public static class AboutVersionStrings { |
| private final String mApplicationVersion; |
| private final String mOSVersion; |
| |
| private AboutVersionStrings(String applicationVersion, String osVersion) { |
| mApplicationVersion = applicationVersion; |
| mOSVersion = osVersion; |
| } |
| |
| public String getApplicationVersion() { |
| return mApplicationVersion; |
| } |
| |
| public String getOSVersion() { |
| return mOSVersion; |
| } |
| } |
| |
| @CalledByNative |
| private static AboutVersionStrings createAboutVersionStrings(String applicationVersion, |
| String osVersion) { |
| return new AboutVersionStrings(applicationVersion, osVersion); |
| } |
| |
| // Singleton constructor. Do not call directly unless for testing purpose. |
| @VisibleForTesting |
| protected PrefServiceBridge() {} |
| |
| private static PrefServiceBridge sInstance; |
| |
| /** |
| * @return The singleton preferences object. |
| */ |
| public static PrefServiceBridge getInstance() { |
| ThreadUtils.assertOnUiThread(); |
| if (sInstance == null) { |
| sInstance = new PrefServiceBridge(); |
| |
| // TODO(wnwen): Check while refactoring TemplateUrlService whether this belongs here. |
| // This is necessary as far as ensuring that TemplateUrlService is loaded at some point. |
| // Put initialization here to make instantiation in unit tests easier. |
| TemplateUrlServiceFactory.get().load(); |
| } |
| return sInstance; |
| } |
| |
| /** |
| * @return Whether the preferences have been initialized. |
| */ |
| public static boolean isInitialized() { |
| return sInstance != null; |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @return Whether the specified preference is enabled. |
| */ |
| public boolean getBoolean(@Pref int preference) { |
| return PrefServiceBridgeJni.get().getBoolean(PrefServiceBridge.this, preference); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @param value The value the specified preference will be set to. |
| */ |
| public void setBoolean(@Pref int preference, boolean value) { |
| PrefServiceBridgeJni.get().setBoolean(PrefServiceBridge.this, preference, value); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @return value The value of the specified preference. |
| */ |
| public int getInteger(@Pref int preference) { |
| return PrefServiceBridgeJni.get().getInteger(PrefServiceBridge.this, preference); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @param value The value the specified preference will be set to. |
| */ |
| public void setInteger(@Pref int preference, int value) { |
| PrefServiceBridgeJni.get().setInteger(PrefServiceBridge.this, preference, value); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @return value The value of the specified preference. |
| */ |
| public String getString(@Pref int preference) { |
| return PrefServiceBridgeJni.get().getString(PrefServiceBridge.this, preference); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @param value The value the specified preference will be set to. |
| */ |
| public void setString(@Pref int preference, String value) { |
| PrefServiceBridgeJni.get().setString(PrefServiceBridge.this, preference, value); |
| } |
| |
| /** |
| * @param preference The name of the preference. |
| * @return Whether the specified preference is managed. |
| */ |
| public boolean isManagedPreference(@Pref int preference) { |
| return PrefServiceBridgeJni.get().isManagedPreference(PrefServiceBridge.this, preference); |
| } |
| |
| /** |
| * Migrates (synchronously) the preferences to the most recent version. |
| */ |
| public void migratePreferences() { |
| SharedPreferences preferences = ContextUtils.getAppSharedPreferences(); |
| int currentVersion = preferences.getInt(MIGRATION_PREF_KEY, 0); |
| if (currentVersion == MIGRATION_CURRENT_VERSION) return; |
| if (currentVersion > MIGRATION_CURRENT_VERSION) { |
| Log.e(LOG_TAG, "Saved preferences version is newer than supported. Attempting to " |
| + "run an older version of Chrome without clearing data is unsupported and " |
| + "the results may be unpredictable."); |
| } |
| |
| if (currentVersion < 1) { |
| PrefServiceBridgeJni.get().migrateJavascriptPreference(PrefServiceBridge.this); |
| } |
| // Steps 2,3,4 intentionally skipped. |
| preferences.edit().putInt(MIGRATION_PREF_KEY, MIGRATION_CURRENT_VERSION).apply(); |
| } |
| |
| /** |
| * Returns whether a particular content setting type is enabled. |
| * @param contentSettingsType The content setting type to check. |
| */ |
| public boolean isContentSettingEnabled(int contentSettingsType) { |
| return PrefServiceBridgeJni.get().isContentSettingEnabled( |
| PrefServiceBridge.this, contentSettingsType); |
| } |
| |
| /** |
| * @return Whether a particular content setting type is managed by policy. |
| * @param contentSettingsType The content setting type to check. |
| */ |
| public boolean isContentSettingManaged(int contentSettingsType) { |
| return PrefServiceBridgeJni.get().isContentSettingManaged( |
| PrefServiceBridge.this, contentSettingsType); |
| } |
| |
| /** |
| * Sets a default value for content setting type. |
| * @param contentSettingsType The content setting type to check. |
| * @param enabled Whether the default value should be disabled or enabled. |
| */ |
| public void setContentSettingEnabled(int contentSettingsType, boolean enabled) { |
| PrefServiceBridgeJni.get().setContentSettingEnabled( |
| PrefServiceBridge.this, contentSettingsType, enabled); |
| } |
| |
| /** |
| * Returns all the currently saved exceptions for a given content settings type. |
| * @param contentSettingsType The type to fetch exceptions for. |
| */ |
| public List<ContentSettingException> getContentSettingsExceptions(int contentSettingsType) { |
| List<ContentSettingException> list = new ArrayList<ContentSettingException>(); |
| PrefServiceBridgeJni.get().getContentSettingsExceptions( |
| PrefServiceBridge.this, contentSettingsType, list); |
| return list; |
| } |
| |
| @CalledByNative |
| private static void addContentSettingExceptionToList(ArrayList<ContentSettingException> list, |
| int contentSettingsType, String pattern, int contentSetting, String source) { |
| ContentSettingException exception = |
| new ContentSettingException(contentSettingsType, pattern, contentSetting, source); |
| list.add(exception); |
| } |
| |
| @CalledByNative |
| private static void addNewLanguageItemToList(List<LanguageItem> list, String code, |
| String displayName, String nativeDisplayName, boolean supportTranslate) { |
| list.add(new LanguageItem(code, displayName, nativeDisplayName, supportTranslate)); |
| } |
| |
| @CalledByNative |
| private static void copyStringArrayToList(List<String> list, String[] source) { |
| list.addAll(Arrays.asList(source)); |
| } |
| |
| /** |
| * Return the list of android permission strings for a given {@link ContentSettingsType}. If |
| * there is no permissions associated with the content setting, then an empty array is returned. |
| * |
| * @param contentSettingType The content setting to get the android permission for. |
| * @return The android permissions for the given content setting. |
| */ |
| @CalledByNative |
| public static String[] getAndroidPermissionsForContentSetting(int contentSettingType) { |
| switch (contentSettingType) { |
| case ContentSettingsType.GEOLOCATION: |
| return Arrays.copyOf(LOCATION_PERMISSIONS, LOCATION_PERMISSIONS.length); |
| case ContentSettingsType.MEDIASTREAM_MIC: |
| return Arrays.copyOf(MICROPHONE_PERMISSIONS, MICROPHONE_PERMISSIONS.length); |
| case ContentSettingsType.MEDIASTREAM_CAMERA: |
| return Arrays.copyOf(CAMERA_PERMISSIONS, CAMERA_PERMISSIONS.length); |
| default: |
| return EMPTY_PERMISSIONS; |
| } |
| } |
| |
| /** |
| * @return Whether cookies acceptance is modifiable by the user |
| */ |
| public boolean isAcceptCookiesUserModifiable() { |
| return PrefServiceBridgeJni.get().getAcceptCookiesUserModifiable(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether cookies acceptance is configured by the user's custodian |
| * (for supervised users). |
| */ |
| public boolean isAcceptCookiesManagedByCustodian() { |
| return PrefServiceBridgeJni.get().getAcceptCookiesManagedByCustodian( |
| PrefServiceBridge.this); |
| } |
| |
| public boolean isBlockThirdPartyCookiesEnabled() { |
| return PrefServiceBridgeJni.get().getBlockThirdPartyCookiesEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether third-party cookie blocking is configured by policy |
| */ |
| public boolean isBlockThirdPartyCookiesManaged() { |
| return PrefServiceBridgeJni.get().getBlockThirdPartyCookiesManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether vibration is enabled for notifications. |
| */ |
| public boolean isNotificationsVibrateEnabled() { |
| return PrefServiceBridgeJni.get().getNotificationsVibrateEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether geolocation information can be shared with content. |
| */ |
| public boolean isAllowLocationEnabled() { |
| return PrefServiceBridgeJni.get().getAllowLocationEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether geolocation information access is set to be shared with all sites, by policy. |
| */ |
| public boolean isLocationAllowedByPolicy() { |
| return PrefServiceBridgeJni.get().getLocationAllowedByPolicy(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the location preference is modifiable by the user. |
| */ |
| public boolean isAllowLocationUserModifiable() { |
| return PrefServiceBridgeJni.get().getAllowLocationUserModifiable(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the location preference is |
| * being managed by the custodian of the supervised account. |
| */ |
| public boolean isAllowLocationManagedByCustodian() { |
| return PrefServiceBridgeJni.get().getAllowLocationManagedByCustodian( |
| PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether Do Not Track is enabled |
| */ |
| public boolean isDoNotTrackEnabled() { |
| return PrefServiceBridgeJni.get().getDoNotTrackEnabled(PrefServiceBridge.this); |
| } |
| |
| public boolean getPasswordEchoEnabled() { |
| return PrefServiceBridgeJni.get().getPasswordEchoEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether EULA has been accepted by the user. |
| */ |
| public boolean isFirstRunEulaAccepted() { |
| return PrefServiceBridgeJni.get().getFirstRunEulaAccepted(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether JavaScript is managed by policy. |
| */ |
| public boolean javaScriptManaged() { |
| return isContentSettingManaged(ContentSettingsType.JAVASCRIPT); |
| } |
| |
| /** |
| * @return true if background sync is managed by policy. |
| */ |
| public boolean isBackgroundSyncManaged() { |
| return isContentSettingManaged(ContentSettingsType.BACKGROUND_SYNC); |
| } |
| |
| /** |
| * @return true if automatic downloads is managed by policy. |
| */ |
| public boolean isAutomaticDownloadsManaged() { |
| return isContentSettingManaged(ContentSettingsType.AUTOMATIC_DOWNLOADS); |
| } |
| |
| /** |
| * Sets the preference that controls translate |
| */ |
| public void setTranslateEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setTranslateEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * Sets the preference that signals when the user has accepted the EULA. |
| */ |
| public void setEulaAccepted() { |
| PrefServiceBridgeJni.get().setEulaAccepted(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return the last account username associated with sync. |
| */ |
| public String getSyncLastAccountName() { |
| return PrefServiceBridgeJni.get().getSyncLastAccountName(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether Safe Browsing Extended Reporting is currently enabled. |
| */ |
| public boolean isSafeBrowsingExtendedReportingEnabled() { |
| return PrefServiceBridgeJni.get().getSafeBrowsingExtendedReportingEnabled( |
| PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param enabled Whether Safe Browsing Extended Reporting should be enabled. |
| */ |
| public void setSafeBrowsingExtendedReportingEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setSafeBrowsingExtendedReportingEnabled( |
| PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * @return Whether Safe Browsing Extended Reporting is managed |
| */ |
| public boolean isSafeBrowsingExtendedReportingManaged() { |
| return PrefServiceBridgeJni.get().getSafeBrowsingExtendedReportingManaged( |
| PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether Safe Browsing is currently enabled. |
| */ |
| public boolean isSafeBrowsingEnabled() { |
| return PrefServiceBridgeJni.get().getSafeBrowsingEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param enabled Whether Safe Browsing should be enabled. |
| */ |
| public void setSafeBrowsingEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setSafeBrowsingEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * @return Whether Safe Browsing is managed |
| */ |
| public boolean isSafeBrowsingManaged() { |
| return PrefServiceBridgeJni.get().getSafeBrowsingManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether there is a user set value for kNetworkPredictionOptions. This should only be |
| * used for preference migration. See http://crbug.com/334602 |
| */ |
| public boolean obsoleteNetworkPredictionOptionsHasUserSetting() { |
| return PrefServiceBridgeJni.get().obsoleteNetworkPredictionOptionsHasUserSetting( |
| PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Network predictions preference. |
| */ |
| public boolean getNetworkPredictionEnabled() { |
| return PrefServiceBridgeJni.get().getNetworkPredictionEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Sets network predictions preference. |
| */ |
| public void setNetworkPredictionEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setNetworkPredictionEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * @return Whether Network Predictions is configured by policy. |
| */ |
| public boolean isNetworkPredictionManaged() { |
| return PrefServiceBridgeJni.get().getNetworkPredictionManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Checks whether network predictions are allowed given preferences and current network |
| * connection type. |
| * @return Whether network predictions are allowed. |
| */ |
| public boolean canPrefetchAndPrerender() { |
| return PrefServiceBridgeJni.get().canPrefetchAndPrerender(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the web service to resolve navigation error is enabled. |
| */ |
| public boolean isResolveNavigationErrorEnabled() { |
| return PrefServiceBridgeJni.get().getResolveNavigationErrorEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the web service to resolve navigation error is configured by policy. |
| */ |
| public boolean isResolveNavigationErrorManaged() { |
| return PrefServiceBridgeJni.get().getResolveNavigationErrorManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return true if translate is enabled, false otherwise. |
| */ |
| public boolean isTranslateEnabled() { |
| return PrefServiceBridgeJni.get().getTranslateEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether translate is configured by policy |
| */ |
| public boolean isTranslateManaged() { |
| return PrefServiceBridgeJni.get().getTranslateManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Sets whether the web service to resolve navigation error should be enabled. |
| */ |
| public void setResolveNavigationErrorEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setResolveNavigationErrorEnabled( |
| PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * Checks the state of deletion preference for a certain browsing data type. |
| * @param dataType The requested browsing data type (from the shared enum |
| * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). |
| * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced |
| * tab to apply the right preference. |
| * @return The state of the corresponding deletion preference. |
| */ |
| public boolean getBrowsingDataDeletionPreference(int dataType, int clearBrowsingDataTab) { |
| return PrefServiceBridgeJni.get().getBrowsingDataDeletionPreference( |
| PrefServiceBridge.this, dataType, clearBrowsingDataTab); |
| } |
| |
| /** |
| * Sets the state of deletion preference for a certain browsing data type. |
| * @param dataType The requested browsing data type (from the shared enum |
| * {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}). |
| * @param clearBrowsingDataTab Indicates if this is a checkbox on the default, basic or advanced |
| * tab to apply the right preference. |
| * @param value The state to be set. |
| */ |
| public void setBrowsingDataDeletionPreference( |
| int dataType, int clearBrowsingDataTab, boolean value) { |
| PrefServiceBridgeJni.get().setBrowsingDataDeletionPreference( |
| PrefServiceBridge.this, dataType, clearBrowsingDataTab, value); |
| } |
| |
| /** |
| * Gets the time period for which browsing data will be deleted. |
| * @param clearBrowsingDataTab Indicates if this is a timeperiod on the default, basic or |
| * advanced tab to apply the right preference. |
| * @return The currently selected browsing data deletion time period. |
| */ |
| public @TimePeriod int getBrowsingDataDeletionTimePeriod(int clearBrowsingDataTab) { |
| return PrefServiceBridgeJni.get().getBrowsingDataDeletionTimePeriod( |
| PrefServiceBridge.this, clearBrowsingDataTab); |
| } |
| |
| /** |
| * Sets the time period for which browsing data will be deleted. |
| * @param clearBrowsingDataTab Indicates if this is a timeperiod on the default, basic or |
| * advanced tab to apply the right preference. |
| * @param timePeriod The selected browsing data deletion time period. |
| */ |
| public void setBrowsingDataDeletionTimePeriod( |
| int clearBrowsingDataTab, @TimePeriod int timePeriod) { |
| PrefServiceBridgeJni.get().setBrowsingDataDeletionTimePeriod( |
| PrefServiceBridge.this, clearBrowsingDataTab, timePeriod); |
| } |
| |
| /** |
| * @return The index of the tab last visited by the user in the CBD dialog. |
| * Index 0 is for the basic tab, 1 is the advanced tab. |
| */ |
| public int getLastSelectedClearBrowsingDataTab() { |
| return PrefServiceBridgeJni.get().getLastClearBrowsingDataTab(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Set the index of the tab last visited by the user. |
| * @param tabIndex The last visited tab index, 0 for basic, 1 for advanced. |
| */ |
| public void setLastSelectedClearBrowsingDataTab(int tabIndex) { |
| PrefServiceBridgeJni.get().setLastClearBrowsingDataTab(PrefServiceBridge.this, tabIndex); |
| } |
| |
| public void setBlockThirdPartyCookiesEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setBlockThirdPartyCookiesEnabled( |
| PrefServiceBridge.this, enabled); |
| } |
| |
| public void setDoNotTrackEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setDoNotTrackEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| public void setNotificationsVibrateEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setNotificationsVibrateEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| public void setPasswordEchoEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setPasswordEchoEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * @return Whether the setting to allow popups is configured by policy |
| */ |
| public boolean isPopupsManaged() { |
| return isContentSettingManaged(ContentSettingsType.POPUPS); |
| } |
| |
| /** |
| * Whether the setting type requires tri-state (Allowed/Ask/Blocked) setting. |
| */ |
| public boolean requiresTriStateContentSetting(int contentSettingsType) { |
| switch (contentSettingsType) { |
| case ContentSettingsType.PROTECTED_MEDIA_IDENTIFIER: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| /** |
| * Sets the preferences on whether to enable/disable given setting. |
| */ |
| public void setCategoryEnabled(int contentSettingsType, boolean allow) { |
| assert !requiresTriStateContentSetting(contentSettingsType); |
| |
| switch (contentSettingsType) { |
| case ContentSettingsType.ADS: |
| case ContentSettingsType.BLUETOOTH_SCANNING: |
| case ContentSettingsType.JAVASCRIPT: |
| case ContentSettingsType.POPUPS: |
| case ContentSettingsType.USB_GUARD: |
| setContentSettingEnabled(contentSettingsType, allow); |
| break; |
| case ContentSettingsType.AUTOMATIC_DOWNLOADS: |
| PrefServiceBridgeJni.get().setAutomaticDownloadsEnabled( |
| PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.AUTOPLAY: |
| PrefServiceBridgeJni.get().setAutoplayEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.BACKGROUND_SYNC: |
| PrefServiceBridgeJni.get().setBackgroundSyncEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.CLIPBOARD_READ: |
| PrefServiceBridgeJni.get().setClipboardEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.COOKIES: |
| PrefServiceBridgeJni.get().setAllowCookiesEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.GEOLOCATION: |
| PrefServiceBridgeJni.get().setAllowLocationEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.MEDIASTREAM_CAMERA: |
| PrefServiceBridgeJni.get().setCameraEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.MEDIASTREAM_MIC: |
| PrefServiceBridgeJni.get().setMicEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.NOTIFICATIONS: |
| PrefServiceBridgeJni.get().setNotificationsEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.SENSORS: |
| PrefServiceBridgeJni.get().setSensorsEnabled(PrefServiceBridge.this, allow); |
| break; |
| case ContentSettingsType.SOUND: |
| PrefServiceBridgeJni.get().setSoundEnabled(PrefServiceBridge.this, allow); |
| break; |
| default: |
| assert false; |
| } |
| } |
| |
| public boolean isCategoryEnabled(int contentSettingsType) { |
| assert !requiresTriStateContentSetting(contentSettingsType); |
| |
| switch (contentSettingsType) { |
| case ContentSettingsType.ADS: |
| case ContentSettingsType.CLIPBOARD_READ: |
| // Returns true if JavaScript is enabled. It may return the temporary value set by |
| // {@link #setJavaScriptEnabled}. The default is true. |
| case ContentSettingsType.JAVASCRIPT: |
| case ContentSettingsType.POPUPS: |
| // Returns true if websites are allowed to request permission to access USB devices. |
| case ContentSettingsType.USB_GUARD: |
| case ContentSettingsType.BLUETOOTH_SCANNING: |
| return isContentSettingEnabled(contentSettingsType); |
| case ContentSettingsType.AUTOMATIC_DOWNLOADS: |
| return PrefServiceBridgeJni.get().getAutomaticDownloadsEnabled( |
| PrefServiceBridge.this); |
| case ContentSettingsType.AUTOPLAY: |
| return PrefServiceBridgeJni.get().getAutoplayEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.BACKGROUND_SYNC: |
| return PrefServiceBridgeJni.get().getBackgroundSyncEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.COOKIES: |
| return PrefServiceBridgeJni.get().getAcceptCookiesEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.MEDIASTREAM_CAMERA: |
| return PrefServiceBridgeJni.get().getCameraEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.MEDIASTREAM_MIC: |
| return PrefServiceBridgeJni.get().getMicEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.NOTIFICATIONS: |
| return PrefServiceBridgeJni.get().getNotificationsEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.SENSORS: |
| return PrefServiceBridgeJni.get().getSensorsEnabled(PrefServiceBridge.this); |
| case ContentSettingsType.SOUND: |
| return PrefServiceBridgeJni.get().getSoundEnabled(PrefServiceBridge.this); |
| default: |
| assert false; |
| return false; |
| } |
| } |
| |
| /** |
| * Gets the ContentSetting for a settings type. Should only be used for more |
| * complex settings where a binary on/off value is not sufficient. |
| * Otherwise, use isCategoryEnabled() above. |
| * @param contentSettingsType The settings type to get setting for. |
| * @return The ContentSetting for |contentSettingsType|. |
| */ |
| public int getContentSetting(int contentSettingsType) { |
| return PrefServiceBridgeJni.get().getContentSetting( |
| PrefServiceBridge.this, contentSettingsType); |
| } |
| |
| /** |
| * @param setting New ContentSetting to set for |contentSettingsType|. |
| */ |
| public void setContentSetting(int contentSettingsType, int setting) { |
| PrefServiceBridgeJni.get().setContentSetting( |
| PrefServiceBridge.this, contentSettingsType, setting); |
| } |
| |
| /** |
| * @return Whether the camera/microphone permission is managed |
| * by the custodian of the supervised account. |
| */ |
| public boolean isCameraManagedByCustodian() { |
| return PrefServiceBridgeJni.get().getCameraManagedByCustodian(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the camera permission is editable by the user. |
| */ |
| public boolean isCameraUserModifiable() { |
| return PrefServiceBridgeJni.get().getCameraUserModifiable(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the microphone permission is managed by the custodian of |
| * the supervised account. |
| */ |
| public boolean isMicManagedByCustodian() { |
| return PrefServiceBridgeJni.get().getMicManagedByCustodian(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether the microphone permission is editable by the user. |
| */ |
| public boolean isMicUserModifiable() { |
| return PrefServiceBridgeJni.get().getMicUserModifiable(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return true if incognito mode is enabled. |
| */ |
| public boolean isIncognitoModeEnabled() { |
| return PrefServiceBridgeJni.get().getIncognitoModeEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return true if incognito mode is managed by policy. |
| */ |
| public boolean isIncognitoModeManaged() { |
| return PrefServiceBridgeJni.get().getIncognitoModeManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return Whether printing is enabled. |
| */ |
| public boolean isPrintingEnabled() { |
| return PrefServiceBridgeJni.get().getPrintingEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Get all the version strings from native. |
| * @return AboutVersionStrings about version strings. |
| */ |
| public AboutVersionStrings getAboutVersionStrings() { |
| return PrefServiceBridgeJni.get().getAboutVersionStrings(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Reset accept-languages to its default value. |
| * |
| * @param defaultLocale A fall-back value such as en_US, de_DE, zh_CN, etc. |
| */ |
| public void resetAcceptLanguages(String defaultLocale) { |
| PrefServiceBridgeJni.get().resetAcceptLanguages(PrefServiceBridge.this, defaultLocale); |
| } |
| |
| /** |
| * @return Whether SafeSites for supervised users is enabled. |
| */ |
| public boolean isSupervisedUserSafeSitesEnabled() { |
| return PrefServiceBridgeJni.get().getSupervisedUserSafeSitesEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return the default supervised user filtering behavior |
| */ |
| public int getDefaultSupervisedUserFilteringBehavior() { |
| return PrefServiceBridgeJni.get().getDefaultSupervisedUserFilteringBehavior( |
| PrefServiceBridge.this); |
| } |
| |
| public String getSupervisedUserCustodianEmail() { |
| return PrefServiceBridgeJni.get().getSupervisedUserCustodianEmail(PrefServiceBridge.this); |
| } |
| |
| public String getSupervisedUserSecondCustodianName() { |
| return PrefServiceBridgeJni.get().getSupervisedUserSecondCustodianName( |
| PrefServiceBridge.this); |
| } |
| |
| public String getSupervisedUserSecondCustodianEmail() { |
| return PrefServiceBridgeJni.get().getSupervisedUserSecondCustodianEmail( |
| PrefServiceBridge.this); |
| } |
| |
| /** |
| * @return A sorted list of LanguageItems representing the Chrome accept languages with details. |
| * Languages that are not supported on Android have been filtered out. |
| */ |
| public List<LanguageItem> getChromeLanguageList() { |
| List<LanguageItem> list = new ArrayList<>(); |
| PrefServiceBridgeJni.get().getChromeAcceptLanguages(PrefServiceBridge.this, list); |
| return list; |
| } |
| |
| /** |
| * @return A sorted list of accept language codes for the current user. |
| * Note that for the signed-in user, the list might contain some language codes from |
| * other platforms but not supported on Android. |
| */ |
| public List<String> getUserLanguageCodes() { |
| List<String> list = new ArrayList<>(); |
| PrefServiceBridgeJni.get().getUserAcceptLanguages(PrefServiceBridge.this, list); |
| return list; |
| } |
| |
| /** |
| * Update accept language for the current user. |
| * |
| * @param languageCode A valid language code to update. |
| * @param add Whether this is an "add" operation or "delete" operation. |
| */ |
| public void updateUserAcceptLanguages(String languageCode, boolean add) { |
| PrefServiceBridgeJni.get().updateUserAcceptLanguages( |
| PrefServiceBridge.this, languageCode, add); |
| } |
| |
| /** |
| * Move a language to the given postion of the user's accept language. |
| * |
| * @param languageCode A valid language code to set. |
| * @param offset The offset from the original position of the language. |
| */ |
| public void moveAcceptLanguage(String languageCode, int offset) { |
| PrefServiceBridgeJni.get().moveAcceptLanguage(PrefServiceBridge.this, languageCode, offset); |
| } |
| |
| /** |
| * Given an array of language codes, sets the order of the user's accepted languages to match. |
| * |
| * @param codes The new order for the user's accepted languages. |
| */ |
| public void setLanguageOrder(String[] codes) { |
| PrefServiceBridgeJni.get().setLanguageOrder(PrefServiceBridge.this, codes); |
| } |
| |
| /** |
| * @param languageCode A valid language code to check. |
| * @return Whether the given language is blocked by the user. |
| */ |
| public boolean isBlockedLanguage(String languageCode) { |
| return PrefServiceBridgeJni.get().isBlockedLanguage(PrefServiceBridge.this, languageCode); |
| } |
| |
| /** |
| * Sets the blocked state of a given language. |
| * |
| * @param languageCode A valid language code to change. |
| * @param blocked Whether to set language blocked. |
| */ |
| public void setLanguageBlockedState(String languageCode, boolean blocked) { |
| PrefServiceBridgeJni.get().setLanguageBlockedState( |
| PrefServiceBridge.this, languageCode, blocked); |
| } |
| |
| |
| /** |
| * @return Whether usage and crash reporting pref is enabled. |
| */ |
| public boolean isMetricsReportingEnabled() { |
| return PrefServiceBridgeJni.get().isMetricsReportingEnabled(PrefServiceBridge.this); |
| } |
| |
| /** |
| * Sets whether the usage and crash reporting pref should be enabled. |
| */ |
| public void setMetricsReportingEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setMetricsReportingEnabled(PrefServiceBridge.this, enabled); |
| } |
| |
| /** |
| * @return Whether usage and crash report pref is managed. |
| */ |
| public boolean isMetricsReportingManaged() { |
| return PrefServiceBridgeJni.get().isMetricsReportingManaged(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param clicked Whether the update menu item was clicked. The preference is stored to |
| * facilitate logging whether Chrome was updated after a click on the menu item. |
| */ |
| public void setClickedUpdateMenuItem(boolean clicked) { |
| PrefServiceBridgeJni.get().setClickedUpdateMenuItem(PrefServiceBridge.this, clicked); |
| } |
| |
| /** |
| * @return Whether the update menu item was clicked. |
| */ |
| public boolean getClickedUpdateMenuItem() { |
| return PrefServiceBridgeJni.get().getClickedUpdateMenuItem(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param version The latest version of Chrome available when the update menu item |
| * was clicked. |
| */ |
| public void setLatestVersionWhenClickedUpdateMenuItem(String version) { |
| PrefServiceBridgeJni.get().setLatestVersionWhenClickedUpdateMenuItem( |
| PrefServiceBridge.this, version); |
| } |
| |
| /** |
| * @return The latest version of Chrome available when the update menu item was clicked. |
| */ |
| public String getLatestVersionWhenClickedUpdateMenuItem() { |
| return PrefServiceBridgeJni.get().getLatestVersionWhenClickedUpdateMenuItem( |
| PrefServiceBridge.this); |
| } |
| |
| @VisibleForTesting |
| public void setSupervisedUserId(String supervisedUserId) { |
| PrefServiceBridgeJni.get().setSupervisedUserId(PrefServiceBridge.this, supervisedUserId); |
| } |
| |
| /** |
| * @return The stored download default directory. |
| */ |
| public String getDownloadDefaultDirectory() { |
| return PrefServiceBridgeJni.get().getDownloadDefaultDirectory(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param directory New directory to set as the download default directory. |
| */ |
| public void setDownloadAndSaveFileDefaultDirectory(String directory) { |
| PrefServiceBridgeJni.get().setDownloadAndSaveFileDefaultDirectory( |
| PrefServiceBridge.this, directory); |
| } |
| |
| /** |
| * @return Whether the explicit language prompt was shown at least once. |
| */ |
| public boolean getExplicitLanguageAskPromptShown() { |
| return PrefServiceBridgeJni.get().getExplicitLanguageAskPromptShown(PrefServiceBridge.this); |
| } |
| |
| /** |
| * @param shown The value to set the underlying pref to: whether the prompt |
| * was shown to the user at least once. |
| */ |
| public void setExplicitLanguageAskPromptShown(boolean shown) { |
| PrefServiceBridgeJni.get().setExplicitLanguageAskPromptShown(PrefServiceBridge.this, shown); |
| } |
| |
| /** |
| * @param enabled The value to set whether or not ForceWebContentsDarkMode is enabled. |
| */ |
| public void setForceWebContentsDarkModeEnabled(boolean enabled) { |
| PrefServiceBridgeJni.get().setForceWebContentsDarkModeEnabled( |
| PrefServiceBridge.this, enabled); |
| } |
| |
| @VisibleForTesting |
| public static void setInstanceForTesting(@Nullable PrefServiceBridge instanceForTesting) { |
| sInstance = instanceForTesting; |
| } |
| |
| @NativeMethods |
| public interface Natives { |
| boolean isContentSettingEnabled(PrefServiceBridge caller, int contentSettingType); |
| boolean isContentSettingManaged(PrefServiceBridge caller, int contentSettingType); |
| void setContentSettingEnabled( |
| PrefServiceBridge caller, int contentSettingType, boolean allow); |
| void getContentSettingsExceptions(PrefServiceBridge caller, int contentSettingsType, |
| List<ContentSettingException> list); |
| void setContentSettingForPattern( |
| PrefServiceBridge caller, int contentSettingType, String pattern, int setting); |
| int getContentSetting(PrefServiceBridge caller, int contentSettingType); |
| void setContentSetting(PrefServiceBridge caller, int contentSettingType, int setting); |
| boolean getBoolean(PrefServiceBridge caller, int preference); |
| void setBoolean(PrefServiceBridge caller, int preference, boolean value); |
| int getInteger(PrefServiceBridge caller, int preference); |
| void setInteger(PrefServiceBridge caller, int preference, int value); |
| String getString(PrefServiceBridge caller, int preference); |
| void setString(PrefServiceBridge caller, int preference, String value); |
| boolean isManagedPreference(PrefServiceBridge caller, int preference); |
| boolean getAcceptCookiesEnabled(PrefServiceBridge caller); |
| boolean getAcceptCookiesUserModifiable(PrefServiceBridge caller); |
| boolean getAcceptCookiesManagedByCustodian(PrefServiceBridge caller); |
| boolean getAutomaticDownloadsEnabled(PrefServiceBridge caller); |
| boolean getAutoplayEnabled(PrefServiceBridge caller); |
| boolean getBackgroundSyncEnabled(PrefServiceBridge caller); |
| boolean getBlockThirdPartyCookiesEnabled(PrefServiceBridge caller); |
| boolean getBlockThirdPartyCookiesManaged(PrefServiceBridge caller); |
| boolean getAllowLocationUserModifiable(PrefServiceBridge caller); |
| boolean getLocationAllowedByPolicy(PrefServiceBridge caller); |
| boolean getAllowLocationManagedByCustodian(PrefServiceBridge caller); |
| boolean getDoNotTrackEnabled(PrefServiceBridge caller); |
| boolean getPasswordEchoEnabled(PrefServiceBridge caller); |
| boolean getFirstRunEulaAccepted(PrefServiceBridge caller); |
| boolean getCameraEnabled(PrefServiceBridge caller); |
| void setCameraEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean getCameraUserModifiable(PrefServiceBridge caller); |
| boolean getCameraManagedByCustodian(PrefServiceBridge caller); |
| boolean getMicEnabled(PrefServiceBridge caller); |
| void setMicEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean getMicUserModifiable(PrefServiceBridge caller); |
| boolean getMicManagedByCustodian(PrefServiceBridge caller); |
| boolean getTranslateEnabled(PrefServiceBridge caller); |
| boolean getTranslateManaged(PrefServiceBridge caller); |
| boolean getResolveNavigationErrorEnabled(PrefServiceBridge caller); |
| boolean getResolveNavigationErrorManaged(PrefServiceBridge caller); |
| boolean getIncognitoModeEnabled(PrefServiceBridge caller); |
| boolean getIncognitoModeManaged(PrefServiceBridge caller); |
| boolean getPrintingEnabled(PrefServiceBridge caller); |
| boolean getSensorsEnabled(PrefServiceBridge caller); |
| boolean getSoundEnabled(PrefServiceBridge caller); |
| boolean getSupervisedUserSafeSitesEnabled(PrefServiceBridge caller); |
| void setTranslateEnabled(PrefServiceBridge caller, boolean enabled); |
| void migrateJavascriptPreference(PrefServiceBridge caller); |
| boolean getBrowsingDataDeletionPreference( |
| PrefServiceBridge caller, int dataType, int clearBrowsingDataTab); |
| void setBrowsingDataDeletionPreference( |
| PrefServiceBridge caller, int dataType, int clearBrowsingDataTab, boolean value); |
| int getBrowsingDataDeletionTimePeriod(PrefServiceBridge caller, int clearBrowsingDataTab); |
| void setBrowsingDataDeletionTimePeriod( |
| PrefServiceBridge caller, int clearBrowsingDataTab, int timePeriod); |
| int getLastClearBrowsingDataTab(PrefServiceBridge caller); |
| void setLastClearBrowsingDataTab(PrefServiceBridge caller, int lastTab); |
| void setAutomaticDownloadsEnabled(PrefServiceBridge caller, boolean enabled); |
| void setAutoplayEnabled(PrefServiceBridge caller, boolean enabled); |
| void setAllowCookiesEnabled(PrefServiceBridge caller, boolean enabled); |
| void setBackgroundSyncEnabled(PrefServiceBridge caller, boolean enabled); |
| void setBlockThirdPartyCookiesEnabled(PrefServiceBridge caller, boolean enabled); |
| void setClipboardEnabled(PrefServiceBridge caller, boolean enabled); |
| void setDoNotTrackEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean getAllowLocationEnabled(PrefServiceBridge caller); |
| boolean getNotificationsEnabled(PrefServiceBridge caller); |
| boolean getNotificationsVibrateEnabled(PrefServiceBridge caller); |
| void setAllowLocationEnabled(PrefServiceBridge caller, boolean enabled); |
| void setNotificationsEnabled(PrefServiceBridge caller, boolean enabled); |
| void setNotificationsVibrateEnabled(PrefServiceBridge caller, boolean enabled); |
| void setPasswordEchoEnabled(PrefServiceBridge caller, boolean enabled); |
| void setSensorsEnabled(PrefServiceBridge caller, boolean enabled); |
| void setSoundEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean canPrefetchAndPrerender(PrefServiceBridge caller); |
| AboutVersionStrings getAboutVersionStrings(PrefServiceBridge caller); |
| boolean getSafeBrowsingExtendedReportingEnabled(PrefServiceBridge caller); |
| void setSafeBrowsingExtendedReportingEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean getSafeBrowsingExtendedReportingManaged(PrefServiceBridge caller); |
| boolean getSafeBrowsingEnabled(PrefServiceBridge caller); |
| void setSafeBrowsingEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean getSafeBrowsingManaged(PrefServiceBridge caller); |
| boolean getNetworkPredictionManaged(PrefServiceBridge caller); |
| boolean obsoleteNetworkPredictionOptionsHasUserSetting(PrefServiceBridge caller); |
| boolean getNetworkPredictionEnabled(PrefServiceBridge caller); |
| void setNetworkPredictionEnabled(PrefServiceBridge caller, boolean enabled); |
| void setResolveNavigationErrorEnabled(PrefServiceBridge caller, boolean enabled); |
| void setEulaAccepted(PrefServiceBridge caller); |
| void resetAcceptLanguages(PrefServiceBridge caller, String defaultLocale); |
| String getSyncLastAccountName(PrefServiceBridge caller); |
| String getSupervisedUserCustodianEmail(PrefServiceBridge caller); |
| int getDefaultSupervisedUserFilteringBehavior(PrefServiceBridge caller); |
| String getSupervisedUserSecondCustodianName(PrefServiceBridge caller); |
| String getSupervisedUserSecondCustodianEmail(PrefServiceBridge caller); |
| boolean isMetricsReportingEnabled(PrefServiceBridge caller); |
| void setMetricsReportingEnabled(PrefServiceBridge caller, boolean enabled); |
| boolean isMetricsReportingManaged(PrefServiceBridge caller); |
| void setClickedUpdateMenuItem(PrefServiceBridge caller, boolean clicked); |
| boolean getClickedUpdateMenuItem(PrefServiceBridge caller); |
| void setLatestVersionWhenClickedUpdateMenuItem(PrefServiceBridge caller, String version); |
| String getLatestVersionWhenClickedUpdateMenuItem(PrefServiceBridge caller); |
| void setSupervisedUserId(PrefServiceBridge caller, String supervisedUserId); |
| void getChromeAcceptLanguages(PrefServiceBridge caller, List<LanguageItem> list); |
| void getUserAcceptLanguages(PrefServiceBridge caller, List<String> list); |
| void updateUserAcceptLanguages(PrefServiceBridge caller, String language, boolean add); |
| void moveAcceptLanguage(PrefServiceBridge caller, String language, int offset); |
| void setLanguageOrder(PrefServiceBridge caller, String[] codes); |
| boolean isBlockedLanguage(PrefServiceBridge caller, String language); |
| void setLanguageBlockedState(PrefServiceBridge caller, String language, boolean blocked); |
| String getDownloadDefaultDirectory(PrefServiceBridge caller); |
| void setDownloadAndSaveFileDefaultDirectory(PrefServiceBridge caller, String directory); |
| boolean getExplicitLanguageAskPromptShown(PrefServiceBridge caller); |
| void setExplicitLanguageAskPromptShown(PrefServiceBridge caller, boolean shown); |
| void setForceWebContentsDarkModeEnabled(PrefServiceBridge caller, boolean enabled); |
| } |
| } |