Google Chrome Extensions

chrome.privacy

Use the chrome.privacy module to control usage of the features in Chrome that can affect a user's privacy. This module relies on the ChromeSetting prototype of the type API for getting and setting Chrome's configuration.

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 her 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 ChromeSettings 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.extension.lastError === undefined)
        console.log("Hooray, it worked!");
      else
        console.log("Sadness!", chrome.extension.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.

Use the chrome.privacy module to control usage of the features in Chrome that can affect a user's privacy. This module relies on the ChromeSetting prototype of the type API for getting and setting Chrome's configuration.

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 her settings if you 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 ChromeSettings 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 visibly 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.extension.lastError === undefined)
        console.log("Hooray, it worked!");
      else
        console.log("Sadness!", chrome.extension.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.

API Reference: chrome.privacy

Properties

network

chrome.privacy.network
network ( object )
Settings that influence Chrome's handling of network connections in general.

Properties of network

networkPredictionEnabled ( types.ChromeSetting )
If enabled, Chrome attempts to speed up your web browsing experience by pre-resolving DNS entries, prerendering sites (<link rel='prefetch' ...>), and preemptively opening TCP and SSL connections to servers. This preference's value is a boolean, defaulting to true.

services

chrome.privacy.services
services ( object )
Settings that enable or disable features that require third-party network services provided by Google and your default search provider.

Properties of services

alternateErrorPagesEnabled ( types.ChromeSetting )
If enabled, Chrome uses a web service to help resolve navigation errors. This preference's value is a boolean, defaulting to true.
autofillEnabled ( types.ChromeSetting )
If enabled, Chrome offers to automatically fill in forms. This preference's value is a boolean, defaulting to true.
instantEnabled ( types.ChromeSetting )
If enabled, Chrome automatically performs and displays search requests for text you type into the Omnibox as you type it. This preference's value is a boolean, defaulting to true.
safeBrowsingEnabled ( types.ChromeSetting )
If enabled, Chrome does its best to protect you from phishing and malware. This preference's value is a boolean, defaulting to true.
searchSuggestEnabled ( types.ChromeSetting )
If enabled, Chrome sends the text you type into the Omnibox to your default search engine, which provides predictions of websites and searches that are likely completions of what you've typed so far. This preference's value is a boolean, defaulting to true.
spellingServiceEnabled ( types.ChromeSetting )
If enabled, Chrome uses a web service to help correct spelling errors. This preference's value is a boolean, defaulting to false.
translationServiceEnabled ( types.ChromeSetting )
If enabled, Chrome offers to translate pages that aren't in a language you read. This preference's value is a boolean, defaulting to true.

websites

chrome.privacy.websites
websites ( object )
Settings that determine what information Chrome makes available to websites.

Properties of websites

thirdPartyCookiesAllowed ( types.ChromeSetting )
If disabled, Chrome blocks third-party sites from setting cookies. The value of this preference is of type boolean, and the default value is true.
hyperlinkAuditingEnabled ( types.ChromeSetting )
If enabled, Chrome sends auditing pings when requested by a website (<a ping>). The value of this preference is of type boolean, and the default value is true.
referrersEnabled ( types.ChromeSetting )
If enabled, Chrome sends referer headers with your requests. Yes, the name of this preference doesn't match the misspelled header. No, we're not going to change it. The value of this preference is of type boolean, and the default value is true.
protectedContentEnabled ( ChromeSetting )
Available on ChromeOS only: If enabled, Chrome provides a unique ID to plugins in order to run protected content. The value of this preference is of type boolean, and the default value is true.

Sample Extensions that use chrome.privacy

  • Block/allow third-party cookies API example extension – Sample extension which demonstrates how to access a preference.
  • Block/allow referrer API example extension – Sample extension which demonstrates how to access a preference.