// 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.Context;
import android.content.SharedPreferences;
import android.util.Log;
import org.chromium.base.ContextUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.ContentSettingsType;
import org.chromium.chrome.browser.preferences.website.ContentSetting;
import org.chromium.chrome.browser.preferences.website.ContentSettingException;
import org.chromium.chrome.browser.preferences.website.GeolocationInfo;
import org.chromium.chrome.browser.preferences.website.WebsitePreferenceBridge;
import org.chromium.chrome.browser.search_engines.TemplateUrlService;
import java.util.ArrayList;
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 final 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;
private static final String HTTPS_SCHEME = "https";
// Object to notify when "clear browsing data" completes.
private OnClearBrowsingDataListener mClearBrowsingDataListener;
private static final String LOG_TAG = "PrefServiceBridge";
// Constants related to the Contextual Search preference.
private static final String CONTEXTUAL_SEARCH_DISABLED = "false";
private static final String CONTEXTUAL_SEARCH_ENABLED = "true";
// The key to store whether the Location Permission was automatically added for the search
// engine set as default.
public static final String LOCATION_AUTO_ALLOWED = "search_engine_location_auto_allowed";
/**
* 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;
}
}
/**
* Interface for a class that is listening to clear browser data events.
*/
public interface OnClearBrowsingDataListener {
public abstract void onBrowsingDataCleared();
}
/**
* Interface for a class that is fetching important site information.
*/
public interface ImportantSitesCallback {
/**
* Called when the list of important registerable domains has been fetched from cpp.
* See net/base/registry_controlled_domains/registry_controlled_domain.h for more details on
* registrable domains and the current list of effective eTLDs.
* @param domains Important registerable domains.
* @param exampleOrigins Example origins for each domain. These can be used to retrieve
* favicons.
* @param importantReasons Bitfield of reasons why this domain was selected. Pass this back
* to clearBrowinsgData so we can record metrics.
*/
@CalledByNative("ImportantSitesCallback")
void onImportantRegisterableDomainsReady(
String[] domains, String[] exampleOrigins, int[] importantReasons);
}
/**
* Interface to a class that receives callbacks instructing it to inform the user about other
* forms of browsing history.
*/
public interface OtherFormsOfBrowsingHistoryListener {
/**
* Called by the web history service when it discovers that other forms of browsing history
* exist.
*/
@CalledByNative("OtherFormsOfBrowsingHistoryListener")
public abstract void enableDialogAboutOtherFormsOfBrowsingHistory();
/**
* Called by the web history service when the conditions for showing the dialog about
* other forms of browsing history are met.
*/
@CalledByNative("OtherFormsOfBrowsingHistoryListener")
public abstract void showNoticeAboutOtherFormsOfBrowsingHistory();
}
@CalledByNative
private static AboutVersionStrings createAboutVersionStrings(String applicationVersion,
String osVersion) {
return new AboutVersionStrings(applicationVersion, osVersion);
}
private PrefServiceBridge() {
TemplateUrlService.getInstance().load();
}
private static PrefServiceBridge sInstance;
/**
* @return The singleton preferences object.
*/
public static PrefServiceBridge getInstance() {
ThreadUtils.assertOnUiThread();
if (sInstance == null) sInstance = new PrefServiceBridge();
return sInstance;
}
/**
* @return Whether the preferences have been initialized.
*/
public static boolean isInitialized() {
return sInstance != null;
}
/**
* Migrates (synchronously) the preferences to the most recent version.
*/
public void migratePreferences(Context context) {
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) {
nativeMigrateJavascriptPreference();
}
// Steps 2,3,4 intentionally skipped.
preferences.edit().putInt(MIGRATION_PREF_KEY, MIGRATION_CURRENT_VERSION).apply();
}
/**
* Add a permission entry for Location for the default search engine.
* @param allowed Whether to create an Allowed permission or a Denied permission.
* @param context The current context to use.
*/
public static void maybeCreatePermissionForDefaultSearchEngine(
boolean allowed, Context context) {
TemplateUrlService templateUrlService = TemplateUrlService.getInstance();
String url = templateUrlService.getSearchEngineUrlFromTemplateUrl(
templateUrlService.getDefaultSearchEngineIndex());
if (allowed && !url.startsWith("https:")) return;
GeolocationInfo locationSettings = new GeolocationInfo(url, null, false);
ContentSetting locationPermission = locationSettings.getContentSetting();
if (locationPermission == null || locationPermission == ContentSetting.ASK) {
WebsitePreferenceBridge.nativeSetGeolocationSettingForOrigin(url, url,
allowed ? ContentSetting.ALLOW.toInt() : ContentSetting.BLOCK.toInt(), false);
SharedPreferences sharedPreferences =
ContextUtils.getAppSharedPreferences();
sharedPreferences.edit().putBoolean(LOCATION_AUTO_ALLOWED, true).apply();
}
}
/**
* Returns whether a particular content setting type is enabled.
* @param contentSettingsType The content setting type to check.
*/
public boolean isContentSettingEnabled(int contentSettingsType) {
return nativeIsContentSettingEnabled(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 nativeIsContentSettingManaged(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) {
nativeSetContentSettingEnabled(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>();
nativeGetContentSettingsExceptions(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.fromInt(contentSetting), source);
list.add(exception);
}
/**
* Return the android permission string for a given {@link ContentSettingsType}. If there
* is no corresponding permission, then null will be returned.
*
* @param contentSettingType The content setting to get the android permission for.
* @return The android permission for the given content setting.
*/
@CalledByNative
public static String getAndroidPermissionForContentSetting(int contentSettingType) {
if (contentSettingType == ContentSettingsType.CONTENT_SETTINGS_TYPE_GEOLOCATION) {
return android.Manifest.permission.ACCESS_FINE_LOCATION;
}
if (contentSettingType == ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC) {
return android.Manifest.permission.RECORD_AUDIO;
}
if (contentSettingType == ContentSettingsType.CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA) {
return android.Manifest.permission.CAMERA;
}
return null;
}
/**
* @return whether autoplay is enabled.
*/
public boolean isAutoplayEnabled() {
return nativeGetAutoplayEnabled();
}
public boolean isAcceptCookiesEnabled() {
return nativeGetAcceptCookiesEnabled();
}
/**
* @return whether cookies acceptance is configured by policy
*/
public boolean isAcceptCookiesManaged() {
return nativeGetAcceptCookiesManaged();
}
public boolean isBlockThirdPartyCookiesEnabled() {
return nativeGetBlockThirdPartyCookiesEnabled();
}
/**
* @return whether third-party cookie blocking is configured by policy
*/
public boolean isBlockThirdPartyCookiesManaged() {
return nativeGetBlockThirdPartyCookiesManaged();
}
public boolean isRememberPasswordsEnabled() {
return nativeGetRememberPasswordsEnabled();
}
public boolean isPasswordManagerAutoSigninEnabled() {
return nativeGetPasswordManagerAutoSigninEnabled();
}
/**
* @return whether password storage is configured by policy
*/
public boolean isRememberPasswordsManaged() {
return nativeGetRememberPasswordsManaged();
}
public boolean isPasswordManagerAutoSigninManaged() {
return nativeGetPasswordManagerAutoSigninManaged();
}
/**
* @return whether notifications are enabled.
*/
public boolean isNotificationsEnabled() {
return nativeGetNotificationsEnabled();
}
/**
* @return whether vibration is enabled for notifications.
*/
public boolean isNotificationsVibrateEnabled() {
return nativeGetNotificationsVibrateEnabled();
}
/**
* @return whether geolocation information can be shared with content.
*/
public boolean isAllowLocationEnabled() {
return nativeGetAllowLocationEnabled();
}
/**
* @return whether geolocation information access is set to be shared with all sites, by policy.
*/
public boolean isLocationAllowedByPolicy() {
return nativeGetLocationAllowedByPolicy();
}
/**
* @return whether the location preference is modifiable by the user.
*/
public boolean isAllowLocationUserModifiable() {
return nativeGetAllowLocationUserModifiable();
}
/**
* @return whether the location preference is
* being managed by the custodian of the supervised account.
*/
public boolean isAllowLocationManagedByCustodian() {
return nativeGetAllowLocationManagedByCustodian();
}
/**
* @return whether Do Not Track is enabled
*/
public boolean isDoNotTrackEnabled() {
return nativeGetDoNotTrackEnabled();
}
public boolean getPasswordEchoEnabled() {
return nativeGetPasswordEchoEnabled();
}
/**
* @return Whether EULA has been accepted by the user.
*/
public boolean isFirstRunEulaAccepted() {
return nativeGetFirstRunEulaAccepted();
}
/**
* @return true if JavaScript is enabled. It may return the temporary value set by
* {@link #setJavaScriptEnabled}. The default is true.
*/
public boolean javaScriptEnabled() {
return isContentSettingEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT);
}
/**
* @return whether JavaScript is managed by policy.
*/
public boolean javaScriptManaged() {
return isContentSettingManaged(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT);
}
/**
* @return true if background sync is managed by policy.
*/
public boolean isBackgroundSyncManaged() {
return isContentSettingManaged(ContentSettingsType.CONTENT_SETTINGS_TYPE_BACKGROUND_SYNC);
}
/**
* @return true if background sync is enabled.
*/
public boolean isBackgroundSyncAllowed() {
return nativeGetBackgroundSyncEnabled();
}
/**
* Sets the preference that controls protected media identifier.
*/
public void setProtectedMediaIdentifierEnabled(boolean enabled) {
nativeSetProtectedMediaIdentifierEnabled(enabled);
}
/**
* Sets the preference that controls translate
*/
public void setTranslateEnabled(boolean enabled) {
nativeSetTranslateEnabled(enabled);
}
/**
* Sets the preference that signals when the user has accepted the EULA.
*/
public void setEulaAccepted() {
nativeSetEulaAccepted();
}
/**
* Resets translate defaults if needed
*/
public void resetTranslateDefaults() {
nativeResetTranslateDefaults();
}
/**
* Enable or disable JavaScript.
*/
public void setJavaScriptEnabled(boolean enabled) {
setContentSettingEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_JAVASCRIPT, enabled);
}
/**
* Enable or disable background sync.
*/
public void setBackgroundSyncEnabled(boolean enabled) {
nativeSetBackgroundSyncEnabled(enabled);
}
/**
* @return the last account id associated with sync.
*/
public String getSyncLastAccountId() {
return nativeGetSyncLastAccountId();
}
/**
* @return the last account username associated with sync.
*/
public String getSyncLastAccountName() {
return nativeGetSyncLastAccountName();
}
/**
* Allow fullscreen without asking user for permission.
*
* @param allowed Whether to allow fullscreen without user permission.
*/
public void setFullscreenAllowed(boolean allowed) {
nativeSetFullscreenAllowed(allowed);
}
/**
* @return whether Search Suggest is enabled.
*/
public boolean isSearchSuggestEnabled() {
return nativeGetSearchSuggestEnabled();
}
/**
* Sets whether search suggest should be enabled.
*/
public void setSearchSuggestEnabled(boolean enabled) {
nativeSetSearchSuggestEnabled(enabled);
}
/**
* @return whether Search Suggest is configured by policy.
*/
public boolean isSearchSuggestManaged() {
return nativeGetSearchSuggestManaged();
}
/**
* @return the Contextual Search preference.
*/
public String getContextualSearchPreference() {
return nativeGetContextualSearchPreference();
}
/**
* Sets the Contextual Search preference.
* @param prefValue one of "", CONTEXTUAL_SEARCH_ENABLED or CONTEXTUAL_SEARCH_DISABLED.
*/
public void setContextualSearchPreference(String prefValue) {
nativeSetContextualSearchPreference(prefValue);
}
/**
* @return whether the Contextual Search feature was disabled by the user explicitly.
*/
public boolean isContextualSearchDisabled() {
return getContextualSearchPreference().equals(CONTEXTUAL_SEARCH_DISABLED);
}
/**
* @return whether the Contextual Search feature is disabled by policy.
*/
public boolean isContextualSearchDisabledByPolicy() {
return nativeGetContextualSearchPreferenceIsManaged()
&& isContextualSearchDisabled();
}
/**
* @return whether the Contextual Search feature is uninitialized (preference unset by the
* user).
*/
public boolean isContextualSearchUninitialized() {
return getContextualSearchPreference().isEmpty();
}
/**
* @param whether Contextual Search should be enabled.
*/
public void setContextualSearchState(boolean enabled) {
setContextualSearchPreference(enabled
? CONTEXTUAL_SEARCH_ENABLED : CONTEXTUAL_SEARCH_DISABLED);
}
/**
* @return whether Safe Browsing Extended Reporting is currently enabled.
*/
public boolean isSafeBrowsingExtendedReportingEnabled() {
return nativeGetSafeBrowsingExtendedReportingEnabled();
}
/**
* @param whether Safe Browsing Extended Reporting should be enabled.
*/
public void setSafeBrowsingExtendedReportingEnabled(boolean enabled) {
nativeSetSafeBrowsingExtendedReportingEnabled(enabled);
}
/**
* @return whether Safe Browsing Extended Reporting is managed
*/
public boolean isSafeBrowsingExtendedReportingManaged() {
return nativeGetSafeBrowsingExtendedReportingManaged();
}
/**
* @return whether Safe Browsing is currently enabled.
*/
public boolean isSafeBrowsingEnabled() {
return nativeGetSafeBrowsingEnabled();
}
/**
* @param whether Safe Browsing should be enabled.
*/
public void setSafeBrowsingEnabled(boolean enabled) {
nativeSetSafeBrowsingEnabled(enabled);
}
/**
* @return whether Safe Browsing is managed
*/
public boolean isSafeBrowsingManaged() {
return nativeGetSafeBrowsingManaged();
}
/**
* @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 nativeObsoleteNetworkPredictionOptionsHasUserSetting();
}
/**
* @return Network predictions preference.
*/
public boolean getNetworkPredictionEnabled() {
return nativeGetNetworkPredictionEnabled();
}
/**
* Sets network predictions preference.
*/
public void setNetworkPredictionEnabled(boolean enabled) {
nativeSetNetworkPredictionEnabled(enabled);
}
/**
* @return whether Network Predictions is configured by policy.
*/
public boolean isNetworkPredictionManaged() {
return nativeGetNetworkPredictionManaged();
}
/**
* Checks whether network predictions are allowed given preferences and current network
* connection type.
* @return Whether network predictions are allowed.
*/
public boolean canPrefetchAndPrerender() {
return nativeCanPrefetchAndPrerender();
}
/**
* @return whether fullscreen is configured by policy.
*/
public boolean isFullscreenManaged() {
return nativeGetFullscreenManaged();
}
/**
* @return whether fullscreen is allowed.
*/
public boolean isFullscreenAllowed() {
return nativeGetFullscreenAllowed();
}
/**
* @return whether the web service to resolve navigation error is enabled.
*/
public boolean isResolveNavigationErrorEnabled() {
return nativeGetResolveNavigationErrorEnabled();
}
/**
* @return whether the web service to resolve navigation error is configured by policy.
*/
public boolean isResolveNavigationErrorManaged() {
return nativeGetResolveNavigationErrorManaged();
}
/**
* @return whether or not the protected media identifier is enabled.
*/
public boolean isProtectedMediaIdentifierEnabled() {
return nativeGetProtectedMediaIdentifierEnabled();
}
/**
* @return true if translate is enabled, false otherwise.
*/
public boolean isTranslateEnabled() {
return nativeGetTranslateEnabled();
}
/**
* @return whether translate is configured by policy
*/
public boolean isTranslateManaged() {
return nativeGetTranslateManaged();
}
/**
* Sets whether the web service to resolve navigation error should be enabled.
*/
public void setResolveNavigationErrorEnabled(boolean enabled) {
nativeSetResolveNavigationErrorEnabled(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}).
* @return The state of the corresponding deletion preference.
*/
public boolean getBrowsingDataDeletionPreference(int dataType) {
return nativeGetBrowsingDataDeletionPreference(dataType);
}
/**
* 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 value The state to be set.
*/
public void setBrowsingDataDeletionPreference(int dataType, boolean value) {
nativeSetBrowsingDataDeletionPreference(dataType, value);
}
/**
* Gets the time period for which browsing data will be deleted.
* @return The currently selected browsing data deletion time period (from the shared enum
* {@link org.chromium.chrome.browser.browsing_data.TimePeriod}).
*/
public int getBrowsingDataDeletionTimePeriod() {
return nativeGetBrowsingDataDeletionTimePeriod();
}
/**
* Sets the time period for which browsing data will be deleted.
* @param timePeriod The selected browsing data deletion time period (from the shared enum
* {@link org.chromium.chrome.browser.browsing_data.TimePeriod}).
*/
public void setBrowsingDataDeletionTimePeriod(int timePeriod) {
nativeSetBrowsingDataDeletionTimePeriod(timePeriod);
}
/**
* Clear the specified types of browsing data asynchronously.
* |listener| is an object to be notified when clearing completes.
* It can be null, but many operations (e.g. navigation) are
* ill-advised while browsing data is being cleared.
* @param listener A listener to call back when the clearing is finished.
* @param dataTypes An array of browsing data types to delete, represented as values from
* the shared enum {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}.
* @param timePeriod The time period for which to delete the data, represented as a value from
* the shared enum {@link org.chromium.chrome.browser.browsing_data.TimePeriod}.
*/
public void clearBrowsingData(
OnClearBrowsingDataListener listener, int[] dataTypes, int timePeriod) {
clearBrowsingDataExcludingDomains(listener, dataTypes, timePeriod, new String[0],
new int[0], new String[0], new int[0]);
}
/**
* Same as above, but now we can specify a list of domains to exclude from clearing browsing
* data.
* Do not use this method unless caller knows what they're doing. Not all backends are supported
* yet, and more data than expected could be deleted. See crbug.com/113621.
* @param listener A listener to call back when the clearing is finished.
* @param dataTypes An array of browsing data types to delete, represented as values from
* the shared enum {@link org.chromium.chrome.browser.browsing_data.BrowsingDataType}.
* @param timePeriod The time period for which to delete the data, represented as a value from
* the shared enum {@link org.chromium.chrome.browser.browsing_data.TimePeriod}.
* @param blacklistDomains A list of registerable domains that we don't clear data for.
* @param blacklistedDomainReasons A list of the reason metadata for the blacklisted domains.
* @param ignoredDomains A list of ignored domains that the user chose to not blacklist. We use
* these to remove important site entries if the user ignores them enough.
* @param ignoredDomainReasons A list of reason metadata for the ignored domains.
*/
public void clearBrowsingDataExcludingDomains(OnClearBrowsingDataListener listener,
int[] dataTypes, int timePeriod, String[] blacklistDomains,
int[] blacklistedDomainReasons, String[] ignoredDomains, int[] ignoredDomainReasons) {
assert mClearBrowsingDataListener == null;
mClearBrowsingDataListener = listener;
nativeClearBrowsingData(dataTypes, timePeriod, blacklistDomains, blacklistedDomainReasons,
ignoredDomains, ignoredDomainReasons);
}
/*
* Whether browser history can be deleted by the user.
*/
public boolean canDeleteBrowsingHistory() {
return nativeCanDeleteBrowsingHistory();
}
@CalledByNative
private void browsingDataCleared() {
if (mClearBrowsingDataListener != null) {
mClearBrowsingDataListener.onBrowsingDataCleared();
mClearBrowsingDataListener = null;
}
}
/**
* This fetches sites (registerable domains) that we consider important. This combines many
* pieces of information, including site engagement and permissions. The callback is called
* with the list of important registerable domains.
*
* See net/base/registry_controlled_domains/registry_controlled_domain.h for more details on
* registrable domains and the current list of effective eTLDs.
* @param callback The callback that will be used to set the list of important sites.
*/
public static void fetchImportantSites(ImportantSitesCallback callback) {
nativeFetchImportantSites(callback);
}
/**
* @return The maximum number of important sites that will be returned from the call above.
* This is a constant that won't change.
*/
public static int getMaxImportantSites() {
return nativeGetMaxImportantSites();
}
/** This lets us mark an origin as important for testing. */
@VisibleForTesting
public static void markOriginAsImportantForTesting(String origin) {
nativeMarkOriginAsImportantForTesting(origin);
}
/**
* Requests that the web history service finds out if we should inform the user about the
* existence of other forms of browsing history. The response will be asynchronous, through
* {@link OtherFormsOfBrowsingHistoryListener}.
*/
public void requestInfoAboutOtherFormsOfBrowsingHistory(
OtherFormsOfBrowsingHistoryListener listener) {
nativeRequestInfoAboutOtherFormsOfBrowsingHistory(listener);
}
public void setAllowCookiesEnabled(boolean allow) {
nativeSetAllowCookiesEnabled(allow);
}
public void setAutoplayEnabled(boolean allow) {
nativeSetAutoplayEnabled(allow);
}
public void setBlockThirdPartyCookiesEnabled(boolean enabled) {
nativeSetBlockThirdPartyCookiesEnabled(enabled);
}
public void setDoNotTrackEnabled(boolean enabled) {
nativeSetDoNotTrackEnabled(enabled);
}
public void setRememberPasswordsEnabled(boolean allow) {
nativeSetRememberPasswordsEnabled(allow);
}
public void setPasswordManagerAutoSigninEnabled(boolean enabled) {
nativeSetPasswordManagerAutoSigninEnabled(enabled);
}
public void setNotificationsEnabled(boolean allow) {
nativeSetNotificationsEnabled(allow);
}
public void setNotificationsVibrateEnabled(boolean enabled) {
nativeSetNotificationsVibrateEnabled(enabled);
}
public void setAllowLocationEnabled(boolean allow) {
nativeSetAllowLocationEnabled(allow);
}
public void setPasswordEchoEnabled(boolean enabled) {
nativeSetPasswordEchoEnabled(enabled);
}
/**
* @return The setting if popups are enabled
*/
public boolean popupsEnabled() {
return isContentSettingEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS);
}
/**
* @return Whether the setting to allow popups is configured by policy
*/
public boolean isPopupsManaged() {
return isContentSettingManaged(ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS);
}
/**
* Sets the preferences on whether to enable/disable popups
*
* @param allow attribute to enable/disable popups
*/
public void setAllowPopupsEnabled(boolean allow) {
setContentSettingEnabled(ContentSettingsType.CONTENT_SETTINGS_TYPE_POPUPS, allow);
}
/**
* @return Whether the camera permission is enabled.
*/
public boolean isCameraEnabled() {
return nativeGetCameraEnabled();
}
/**
* Sets the preferences on whether to enable/disable camera.
*/
public void setCameraEnabled(boolean enabled) {
nativeSetCameraEnabled(enabled);
}
/**
* @return Whether the camera/microphone permission is managed
* by the custodian of the supervised account.
*/
public boolean isCameraManagedByCustodian() {
return nativeGetCameraManagedByCustodian();
}
/**
* @return Whether the camera permission is editable by the user.
*/
public boolean isCameraUserModifiable() {
return nativeGetCameraUserModifiable();
}
/**
* @return Whether the microphone permission is enabled.
*/
public boolean isMicEnabled() {
return nativeGetMicEnabled();
}
/**
* Sets the preferences on whether to enable/disable microphone.
*/
public void setMicEnabled(boolean enabled) {
nativeSetMicEnabled(enabled);
}
/**
* @return Whether the microphone permission is managed by the custodian of
* the supervised account.
*/
public boolean isMicManagedByCustodian() {
return nativeGetMicManagedByCustodian();
}
/**
* @return Whether the microphone permission is editable by the user.
*/
public boolean isMicUserModifiable() {
return nativeGetMicUserModifiable();
}
/**
* @return true if incognito mode is enabled.
*/
public boolean isIncognitoModeEnabled() {
return nativeGetIncognitoModeEnabled();
}
/**
* @return true if incognito mode is managed by policy.
*/
public boolean isIncognitoModeManaged() {
return nativeGetIncognitoModeManaged();
}
/**
* @return Whether printing is enabled.
*/
public boolean isPrintingEnabled() {
return nativeGetPrintingEnabled();
}
/**
* @return Whether printing is managed by policy.
*/
public boolean isPrintingManaged() {
return nativeGetPrintingManaged();
}
/**
* Get all the version strings from native.
* @return AboutVersionStrings about version strings.
*/
public AboutVersionStrings getAboutVersionStrings() {
return nativeGetAboutVersionStrings();
}
/**
* 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) {
nativeResetAcceptLanguages(defaultLocale);
}
/**
* @return whether SafeSites for supervised users is enabled.
*/
public boolean isSupervisedUserSafeSitesEnabled() {
return nativeGetSupervisedUserSafeSitesEnabled();
}
/**
* @return the default supervised user filtering behavior
*/
public int getDefaultSupervisedUserFilteringBehavior() {
return nativeGetDefaultSupervisedUserFilteringBehavior();
}
public String getSupervisedUserCustodianName() {
return nativeGetSupervisedUserCustodianName();
}
public String getSupervisedUserCustodianEmail() {
return nativeGetSupervisedUserCustodianEmail();
}
public String getSupervisedUserCustodianProfileImageURL() {
return nativeGetSupervisedUserCustodianProfileImageURL();
}
public String getSupervisedUserSecondCustodianName() {
return nativeGetSupervisedUserSecondCustodianName();
}
public String getSupervisedUserSecondCustodianEmail() {
return nativeGetSupervisedUserSecondCustodianEmail();
}
public String getSupervisedUserSecondCustodianProfileImageURL() {
return nativeGetSupervisedUserSecondCustodianProfileImageURL();
}
private native boolean nativeIsContentSettingEnabled(int contentSettingType);
private native boolean nativeIsContentSettingManaged(int contentSettingType);
private native void nativeSetContentSettingEnabled(int contentSettingType, boolean allow);
private native void nativeGetContentSettingsExceptions(
int contentSettingsType, List<ContentSettingException> list);
public native void nativeSetContentSettingForPattern(
int contentSettingType, String pattern, int setting);
/**
* @return whether usage and crash reporting pref is enabled.
*/
public boolean isMetricsReportingEnabled() {
return nativeIsMetricsReportingEnabled();
}
/**
* Sets whether the usage and crash reporting pref should be enabled.
*/
public void setMetricsReportingEnabled(boolean enabled) {
nativeSetMetricsReportingEnabled(enabled);
}
/**
* @return whether usage and crash report pref is managed.
*/
public boolean isMetricsReportingManaged() {
return nativeIsMetricsReportingManaged();
}
/**
* @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) {
nativeSetClickedUpdateMenuItem(clicked);
}
/**
* @return Whether the update menu item was clicked.
*/
public boolean getClickedUpdateMenuItem() {
return nativeGetClickedUpdateMenuItem();
}
/**
* @param version The latest version of Chrome available when the update menu item
* was clicked.
*/
public void setLatestVersionWhenClickedUpdateMenuItem(String version) {
nativeSetLatestVersionWhenClickedUpdateMenuItem(version);
}
/**
* @return The latest version of Chrome available when the update menu item was clicked.
*/
public String getLatestVersionWhenClickedUpdateMenuItem() {
return nativeGetLatestVersionWhenClickedUpdateMenuItem();
}
@VisibleForTesting
public void setSupervisedUserId(String supervisedUserId) {
nativeSetSupervisedUserId(supervisedUserId);
}
private native boolean nativeGetAcceptCookiesEnabled();
private native boolean nativeGetAcceptCookiesManaged();
private native boolean nativeGetAutoplayEnabled();
private native boolean nativeGetBackgroundSyncEnabled();
private native boolean nativeGetBlockThirdPartyCookiesEnabled();
private native boolean nativeGetBlockThirdPartyCookiesManaged();
private native boolean nativeGetRememberPasswordsEnabled();
private native boolean nativeGetPasswordManagerAutoSigninEnabled();
private native boolean nativeGetRememberPasswordsManaged();
private native boolean nativeGetPasswordManagerAutoSigninManaged();
private native boolean nativeGetAllowLocationUserModifiable();
private native boolean nativeGetLocationAllowedByPolicy();
private native boolean nativeGetAllowLocationManagedByCustodian();
private native boolean nativeGetDoNotTrackEnabled();
private native boolean nativeGetPasswordEchoEnabled();
private native boolean nativeGetFirstRunEulaAccepted();
private native boolean nativeGetCameraEnabled();
private native void nativeSetCameraEnabled(boolean allow);
private native boolean nativeGetCameraUserModifiable();
private native boolean nativeGetCameraManagedByCustodian();
private native boolean nativeGetMicEnabled();
private native void nativeSetMicEnabled(boolean allow);
private native boolean nativeGetMicUserModifiable();
private native boolean nativeGetMicManagedByCustodian();
private native boolean nativeGetFullscreenAllowed();
private native boolean nativeGetFullscreenManaged();
private native boolean nativeGetTranslateEnabled();
private native boolean nativeGetTranslateManaged();
private native boolean nativeGetResolveNavigationErrorEnabled();
private native boolean nativeGetResolveNavigationErrorManaged();
private native boolean nativeGetProtectedMediaIdentifierEnabled();
private native boolean nativeGetIncognitoModeEnabled();
private native boolean nativeGetIncognitoModeManaged();
private native boolean nativeGetPrintingEnabled();
private native boolean nativeGetPrintingManaged();
private native boolean nativeGetSupervisedUserSafeSitesEnabled();
private native void nativeSetTranslateEnabled(boolean enabled);
private native void nativeResetTranslateDefaults();
private native void nativeMigrateJavascriptPreference();
private native boolean nativeGetBrowsingDataDeletionPreference(int dataType);
private native void nativeSetBrowsingDataDeletionPreference(int dataType, boolean value);
private native int nativeGetBrowsingDataDeletionTimePeriod();
private native void nativeSetBrowsingDataDeletionTimePeriod(int timePeriod);
private native void nativeClearBrowsingData(int[] dataTypes, int timePeriod,
String[] blacklistDomains, int[] blacklistedDomainReasons, String[] ignoredDomains,
int[] ignoredDomainReasons);
private native void nativeRequestInfoAboutOtherFormsOfBrowsingHistory(
OtherFormsOfBrowsingHistoryListener listener);
private native boolean nativeCanDeleteBrowsingHistory();
private static native void nativeFetchImportantSites(ImportantSitesCallback callback);
private static native int nativeGetMaxImportantSites();
private static native void nativeMarkOriginAsImportantForTesting(String origin);
private native void nativeSetAutoplayEnabled(boolean allow);
private native void nativeSetAllowCookiesEnabled(boolean allow);
private native void nativeSetBackgroundSyncEnabled(boolean allow);
private native void nativeSetBlockThirdPartyCookiesEnabled(boolean enabled);
private native void nativeSetDoNotTrackEnabled(boolean enabled);
private native void nativeSetFullscreenAllowed(boolean allowed);
private native void nativeSetRememberPasswordsEnabled(boolean allow);
private native void nativeSetPasswordManagerAutoSigninEnabled(boolean enabled);
private native void nativeSetProtectedMediaIdentifierEnabled(boolean enabled);
private native boolean nativeGetAllowLocationEnabled();
private native boolean nativeGetNotificationsEnabled();
private native boolean nativeGetNotificationsVibrateEnabled();
private native void nativeSetAllowLocationEnabled(boolean allow);
private native void nativeSetNotificationsEnabled(boolean allow);
private native void nativeSetNotificationsVibrateEnabled(boolean enabled);
private native void nativeSetPasswordEchoEnabled(boolean enabled);
private native boolean nativeCanPrefetchAndPrerender();
private native AboutVersionStrings nativeGetAboutVersionStrings();
private native void nativeSetContextualSearchPreference(String preference);
private native String nativeGetContextualSearchPreference();
private native boolean nativeGetContextualSearchPreferenceIsManaged();
private native boolean nativeGetSearchSuggestEnabled();
private native void nativeSetSearchSuggestEnabled(boolean enabled);
private native boolean nativeGetSearchSuggestManaged();
private native boolean nativeGetSafeBrowsingExtendedReportingEnabled();
private native void nativeSetSafeBrowsingExtendedReportingEnabled(boolean enabled);
private native boolean nativeGetSafeBrowsingExtendedReportingManaged();
private native boolean nativeGetSafeBrowsingEnabled();
private native void nativeSetSafeBrowsingEnabled(boolean enabled);
private native boolean nativeGetSafeBrowsingManaged();
private native boolean nativeGetNetworkPredictionManaged();
private native boolean nativeObsoleteNetworkPredictionOptionsHasUserSetting();
private native boolean nativeGetNetworkPredictionEnabled();
private native void nativeSetNetworkPredictionEnabled(boolean enabled);
private native void nativeSetResolveNavigationErrorEnabled(boolean enabled);
private native void nativeSetEulaAccepted();
private native void nativeResetAcceptLanguages(String defaultLocale);
private native String nativeGetSyncLastAccountId();
private native String nativeGetSyncLastAccountName();
private native String nativeGetSupervisedUserCustodianName();
private native String nativeGetSupervisedUserCustodianEmail();
private native String nativeGetSupervisedUserCustodianProfileImageURL();
private native int nativeGetDefaultSupervisedUserFilteringBehavior();
private native String nativeGetSupervisedUserSecondCustodianName();
private native String nativeGetSupervisedUserSecondCustodianEmail();
private native String nativeGetSupervisedUserSecondCustodianProfileImageURL();
private native boolean nativeIsMetricsReportingEnabled();
private native void nativeSetMetricsReportingEnabled(boolean enabled);
private native boolean nativeIsMetricsReportingManaged();
private native void nativeSetClickedUpdateMenuItem(boolean clicked);
private native boolean nativeGetClickedUpdateMenuItem();
private native void nativeSetLatestVersionWhenClickedUpdateMenuItem(String version);
private native String nativeGetLatestVersionWhenClickedUpdateMenuItem();
private native void nativeSetSupervisedUserId(String supervisedUserId);
}