chrome.privacy
Description: |
Use the chrome.privacy API to control usage of the features in Chrome that can affect a user's privacy. This API relies on the ChromeSetting prototype of the type API for getting and setting Chrome's configuration.
|
Availability: |
Since Chrome 35.
|
Permissions: |
"privacy"
|
The Chrome Privacy Whitepaper gives background detail regarding the features which this API can control.
Manifest
You must declare the "privacy" permission in your extension's manifest to use the API. For example:
{ "name": "My extension", ... "permissions": [ "privacy" ], ... }
Usage
Reading the current value of a Chrome setting is straightforward. You'll first
need to find the property you're interested in, then you'll call
get()
on that object in order to retrieve its current value and
your extension's level of control. For example, to determine if Chrome's
Autofill feature is enabled, you'd write:
chrome.privacy.services.autofillEnabled.get({}, function(details) { if (details.value) console.log('Autofill is on!'); else console.log('Autofill is off!'); });
Changing the value of a setting is a little bit more complex, simply because
you first must verify that your extension can control the setting. The user
won't see any change to their settings if your extension toggles a setting
that is either locked to a specific value by enterprise policies
(levelOfControl
will be set to "not_controllable"), or if another
extension is controlling the value (levelOfControl
will be set to
"controlled_by_other_extensions"). The set()
call will succeed,
but the setting will be immediately overridden. As this might be confusing, it
is advisable to warn the user when the settings they've chosen aren't
practically applied.
Full details about extensions' ability to control ChromeSetting
s
can be found under
chrome.types.ChromeSetting
.
This means that you ought to use the get()
method to determine
your level of access, and then only call set()
if your extension
can grab control over the setting (in fact if your extension can't control the
setting it's probably a good idea to visually disable the functionality to
reduce user confusion):
chrome.privacy.services.autofillEnabled.get({}, function(details) { if (details.levelOfControl === 'controllable_by_this_extension') { chrome.privacy.services.autofillEnabled.set({ value: true }, function() { if (chrome.runtime.lastError === undefined) console.log("Hooray, it worked!"); else console.log("Sadness!", chrome.runtime.lastError); }); } });
If you're interested in changes to a setting's value, add a listener to its
onChange
event. Among other uses, this will allow you to warn the
user if a more recently installed extension grabs control of a setting, or if
enterprise policy overrides your control. To listen for changes to Autofill's
status, for example, the following code would suffice:
chrome.privacy.services.autofillEnabled.onChange.addListener( function (details) { // The new value is stored in `details.value`, the new level of control // in `details.levelOfControl`, and `details.incognitoSpecific` will be // `true` if the value is specific to Incognito mode. });
Examples
For example code, see the Privacy API samples.
Summary
Types | |
---|---|
IPHandlingPolicy | |
Properties | |
network | |
services | |
websites |
Types
IPHandlingPolicy
Enum |
---|
"default" ,
"default_public_and_private_interfaces" ,
"default_public_interface_only" ,
or "disable_non_proxied_udp"
|
Properties
object | chrome.privacy.network |
Settings that influence Chrome's handling of network connections in general.
|
|||||||||||||||||||||||||||||||||
object | chrome.privacy.services |
Settings that enable or disable features that require third-party network services provided by Google and your default search provider.
|
|||||||||||||||||||||||||||||||||
object | chrome.privacy.websites |
Settings that determine what information Chrome makes available to websites.
|