Index: chrome/common/extensions/docs/server2/templates/intros/privacy.html |
diff --git a/chrome/common/extensions/docs/server2/templates/intros/privacy.html b/chrome/common/extensions/docs/server2/templates/intros/privacy.html |
index 24c061c9c7c5bbc9c7f9ffcee791c6899ada534e..c7657ea0640260e616330f798fd8369d3f8d3577 100644 |
--- a/chrome/common/extensions/docs/server2/templates/intros/privacy.html |
+++ b/chrome/common/extensions/docs/server2/templates/intros/privacy.html |
@@ -1,19 +1,21 @@ |
-<!-- BEGIN AUTHORED CONTENT --> |
<p id="classSummary"> |
Use the <code>chrome.privacy</code> module to control usage of the features in |
Chrome that can affect a user's privacy. This module relies on the |
<a href="types.html#ChromeSetting">ChromeSetting prototype of the type API</a> |
for getting and setting Chrome's configuration. |
</p> |
+ |
<p class="note"> |
The <a href="http://www.google.com/intl/en/landing/chrome/google-chrome-privacy-whitepaper.pdf">Chrome Privacy Whitepaper</a> |
gives background detail regarding the features which this API can control. |
</p> |
+ |
<h2 id="manifest">Manifest</h2> |
<p> |
You must declare the "privacy" permission in your extension's |
<a href="manifest.html">manifest</a> to use the API. For example: |
</p> |
+ |
<pre>{ |
"name": "My extension", |
... |
@@ -22,7 +24,9 @@ |
]</b>, |
... |
}</pre> |
+ |
<h2 id="usage">Usage</h2> |
+ |
<p> |
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 |
@@ -30,12 +34,14 @@ |
your extension's level of control. For example, to determine if Chrome's |
Autofill feature is enabled, you'd write: |
</p> |
+ |
<pre>chrome.privacy.services.autofillEnabled.get({}, function(details) { |
if (details.value) |
console.log('Autofill is on!'); |
else |
console.log('Autofill is off!'); |
});</pre> |
+ |
<p> |
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 |
@@ -48,12 +54,14 @@ |
is advisable to warn the user when the settings they've chosen aren't |
practically applied. |
</p> |
+ |
<p class="note"> |
Full details about extensions' ability to control <code>ChromeSetting</code>s |
can be found under |
<a href="types.html#ChromeSetting"> |
<code>chrome.types.ChromeSetting</code></a>. |
</p> |
+ |
<p> |
This means that you ought to use the <code>get()</code> method to determine |
your level of access, and then only call <code>set()</code> if your extension |
@@ -61,6 +69,7 @@ |
setting it's probably a good idea to visually disable the functionality to |
reduce user confusion): |
</p> |
+ |
<pre>chrome.privacy.services.autofillEnabled.get({}, function(details) { |
if (details.levelOfControl === 'controllable_by_this_extension') { |
chrome.privacy.services.autofillEnabled.set({ value: true }, function() { |
@@ -71,6 +80,7 @@ |
} |
} |
});</pre> |
+ |
<p> |
If you're interested in changes to a setting's value, add a listener to its |
<code>onChange</code> event. Among other uses, this will allow you to warn the |
@@ -78,14 +88,122 @@ |
enterprise policy overrides your control. To listen for changes to Autofill's |
status, for example, the following code would suffice: |
</p> |
+ |
<pre>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. |
});</pre> |
+ |
<h2 id="examples">Examples</h2> |
<p> |
For example code, see the |
<a href="samples.html#privacy">Privacy API samples</a>. |
</p> |
+ |
+ |
+ |
+<p id="classSummary"> |
+ Use the <code>chrome.privacy</code> module to control usage of the features in |
+ Chrome that can affect a user's privacy. This module relies on the |
+ <a href="types.html#ChromeSetting">ChromeSetting prototype of the type API</a> |
+ for getting and setting Chrome's configuration. |
+</p> |
+ |
+<p class="note"> |
+ The <a href="http://www.google.com/intl/en/landing/chrome/google-chrome-privacy-whitepaper.pdf">Chrome Privacy Whitepaper</a> |
+ gives background detail regarding the features which this API can control. |
+</p> |
+ |
+<h2 id="manifest">Manifest</h2> |
+<p> |
+ You must declare the "privacy" permission in your extension's |
+ <a href="manifest.html">manifest</a> to use the API. For example: |
+</p> |
+ |
+<pre>{ |
+ "name": "My extension", |
+ ... |
+ <b>"permissions": [ |
+ "privacy" |
+ ]</b>, |
+ ... |
+}</pre> |
+ |
+<h2 id="usage">Usage</h2> |
+ |
+<p> |
+ 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 |
+ <code>get()</code> 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: |
+</p> |
+ |
+<pre>chrome.privacy.services.autofillEnabled.get({}, function(details) { |
+ if (details.value) |
+ console.log('Autofill is on!'); |
+ else |
+ console.log('Autofill is off!'); |
+});</pre> |
+ |
+<p> |
+ 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 |
+ (<code>levelOfControl</code> will be set to "not_controllable"), or if another |
+ extension is controlling the value (<code>levelOfControl</code> will be set to |
+ "controlled_by_other_extensions"). The <code>set()</code> 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. |
+</p> |
+ |
+<p class="note"> |
+ Full details about extensions' ability to control <code>ChromeSetting</code>s |
+ can be found under |
+ <a href="types.html#ChromeSetting"> |
+ <code>chrome.types.ChromeSetting</code></a>. |
+</p> |
+ |
+<p> |
+ This means that you ought to use the <code>get()</code> method to determine |
+ your level of access, and then only call <code>set()</code> 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): |
+</p> |
+ |
+<pre>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); |
+ } |
+ } |
+});</pre> |
+ |
+<p> |
+ If you're interested in changes to a setting's value, add a listener to its |
+ <code>onChange</code> 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: |
+</p> |
+ |
+<pre>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. |
+ });</pre> |
+ |
+<h2 id="examples">Examples</h2> |
+<p> |
+ For example code, see the |
+ <a href="samples.html#privacy">Privacy API samples</a>. |
+</p> |