summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions
diff options
context:
space:
mode:
authorpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-06 21:00:49 +0000
committerpam@chromium.org <pam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-06 21:00:49 +0000
commitdcac1fecd5957b6ac16b57b24b3efbd1356a438b (patch)
tree9eab4b278c7e81ca5fcda105a356ee05717a2d12 /chrome/common/extensions
parent330d5722d6efc69242e037eeeedf8c13a16fd57a (diff)
downloadchromium_src-dcac1fecd5957b6ac16b57b24b3efbd1356a438b.zip
chromium_src-dcac1fecd5957b6ac16b57b24b3efbd1356a438b.tar.gz
chromium_src-dcac1fecd5957b6ac16b57b24b3efbd1356a438b.tar.bz2
Initial Managed Mode extension API, supporting querying the setting and a stub for enabling the mode.
BUG=115447, 115448 TEST=covered by automated tests (browser_tests --gtest_filter=ExtensionApiTest.ManagedMode*) Review URL: http://codereview.chromium.org/9566007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@125218 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions')
-rw-r--r--chrome/common/extensions/api/experimental.managedMode.json57
-rw-r--r--chrome/common/extensions/api/extension_api.cc1
-rw-r--r--chrome/common/extensions/docs/experimental.html1
-rwxr-xr-xchrome/common/extensions/docs/experimental.managedMode.html570
-rw-r--r--chrome/common/extensions/docs/js/api_page_generator.js3
-rw-r--r--chrome/common/extensions/docs/static/experimental.managedMode.html81
-rw-r--r--chrome/common/extensions/extension_permission_set.cc3
-rw-r--r--chrome/common/extensions/extension_permission_set.h2
8 files changed, 717 insertions, 1 deletions
diff --git a/chrome/common/extensions/api/experimental.managedMode.json b/chrome/common/extensions/api/experimental.managedMode.json
new file mode 100644
index 0000000..a68468c
--- /dev/null
+++ b/chrome/common/extensions/api/experimental.managedMode.json
@@ -0,0 +1,57 @@
+[
+ {
+ "namespace": "experimental.managedMode",
+ "dependencies": ["types"],
+ "functions": [
+ {
+ "name": "enter",
+ "type": "function",
+ "description": "Shows a confirmation dialog, then puts the browser into managed mode. The callback parameter will be true if managed mode was entered successfully, false if the user cancelled the confirmation. If managed mode is already on, trying to enter it again will have no effect.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "optional": true,
+ "parameters": [
+ {
+ "name": "result",
+ "type": "object",
+ "description": "The result of the attempt to enter managed mode.",
+ "properties": {
+ "success": {
+ "description": "True if managed mode was entered successfully, false if the user cancelled the confirmation.",
+ "type": "boolean"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "get",
+ "type": "function",
+ "description": "Gets the value of the setting describing whether managed mode is in effect.",
+ "parameters": [
+ {
+ "type": "function",
+ "name": "callback",
+ "parameters": [
+ {
+ "name": "details",
+ "type": "object",
+ "description": "Details of the currently effective value.",
+ "properties": {
+ "value": {
+ "description": "The value of the setting.",
+ "type": "boolean"
+ }
+ }
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]
diff --git a/chrome/common/extensions/api/extension_api.cc b/chrome/common/extensions/api/extension_api.cc
index 14a6562..eeece57 100644
--- a/chrome/common/extensions/api/extension_api.cc
+++ b/chrome/common/extensions/api/extension_api.cc
@@ -118,6 +118,7 @@ ExtensionAPI::ExtensionAPI() {
IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_UI,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING,
+ IDR_EXTENSION_API_JSON_EXPERIMENTAL_MANAGED_MODE,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ,
IDR_EXTENSION_API_JSON_EXPERIMENTAL_SERIAL,
diff --git a/chrome/common/extensions/docs/experimental.html b/chrome/common/extensions/docs/experimental.html
index 994a901..5703a4a 100644
--- a/chrome/common/extensions/docs/experimental.html
+++ b/chrome/common/extensions/docs/experimental.html
@@ -243,6 +243,7 @@ on the following experimental APIs:
<a href="experimental.extension.html">experimental.extension</a></li><li>
<a href="experimental.infobars.html">experimental.infobars</a></li><li>
<a href="experimental.keybinding.html">experimental.keybinding</a></li><li>
+ <a href="experimental.managedMode.html">experimental.managedMode</a></li><li>
<a href="experimental.speechInput.html">experimental.speechInput</a></li>
</ul>
<p>
diff --git a/chrome/common/extensions/docs/experimental.managedMode.html b/chrome/common/extensions/docs/experimental.managedMode.html
new file mode 100755
index 0000000..f2c77168
--- /dev/null
+++ b/chrome/common/extensions/docs/experimental.managedMode.html
@@ -0,0 +1,570 @@
+<!DOCTYPE html><!-- This page is a placeholder for generated extensions api doc. Note:
+ 1) The <head> information in this page is significant, should be uniform
+ across api docs and should be edited only with knowledge of the
+ templating mechanism.
+ 3) All <body>.innerHTML is genereated as an rendering step. If viewed in a
+ browser, it will be re-generated from the template, json schema and
+ authored overview content.
+ 4) The <body>.innerHTML is also generated by an offline step so that this
+ page may easily be indexed by search engines.
+--><html xmlns="http://www.w3.org/1999/xhtml"><head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <link href="css/ApiRefStyles.css" rel="stylesheet" type="text/css">
+ <link href="css/print.css" rel="stylesheet" type="text/css" media="print">
+ <script type="text/javascript" src="../../../third_party/jstemplate/jstemplate_compiled.js">
+ </script>
+ <script type="text/javascript" src="js/api_page_generator.js"></script>
+ <script type="text/javascript" src="js/bootstrap.js"></script>
+ <script type="text/javascript" src="js/sidebar.js"></script>
+ <meta name="description" content="Documentation for the chrome.experimental.managedMode module, which is part of the Google Chrome extension APIs."><title>Managed Mode API - Google Chrome Extensions - Google Code</title></head>
+ <body> <div id="devModeWarning" class="displayModeWarning">
+ You are viewing extension docs in chrome via the 'file:' scheme: are you expecting to see local changes when you refresh? You'll need run chrome with --allow-file-access-from-files.
+ </div>
+ <div id="branchWarning" class="displayModeWarning">
+ <span>WARNING: This is the <span id="branchName">BETA</span> documentation.
+ It may not work with the stable release of Chrome.</span>
+ <select id="branchChooser">
+ <option>Choose a different version...
+ </option><option value="">Stable
+ </option><option value="beta">Beta
+ </option><option value="dev">Dev
+ </option><option value="trunk">Trunk
+ </option></select>
+ </div>
+ <div id="unofficialWarning" class="displayModeWarning">
+ <span>WARNING: This is unofficial documentation. It may not work with the
+ current release of Chrome.</span>
+ <button id="goToOfficialDocs">Go to the official docs</button>
+ </div>
+ <div id="gc-container" class="labs">
+ <!-- SUBTEMPLATES: DO NOT MOVE FROM THIS LOCATION -->
+ <!-- In particular, sub-templates that recurse, must be used by allowing
+ jstemplate to make a copy of the template in this section which
+ are not operated on by way of the jsskip="true" -->
+ <!-- /SUBTEMPLATES -->
+ <a id="top"></a>
+ <div id="skipto">
+ <a href="#gc-pagecontent">Skip to page content</a>
+ <a href="#gc-toc">Skip to main navigation</a>
+ </div>
+ <!-- API HEADER -->
+ <table id="header" width="100%" cellspacing="0" border="0">
+ <tbody><tr>
+ <td valign="middle"><a href="http://code.google.com/"><img src="images/code_labs_logo.gif" height="43" width="161" alt="Google Code Labs" style="border:0; margin:0;"></a></td>
+ <td valign="middle" width="100%" style="padding-left:0.6em;">
+ <form action="http://www.google.com/cse" id="cse" style="margin-top:0.5em">
+ <div id="gsc-search-box">
+ <input type="hidden" name="cx" value="002967670403910741006:61_cvzfqtno">
+ <input type="hidden" name="ie" value="UTF-8">
+ <input type="text" name="q" value="" size="55">
+ <input class="gsc-search-button" type="submit" name="sa" value="Search">
+ <br>
+ <span class="greytext">e.g. "page action" or "tabs"</span>
+ </div>
+ </form>
+ <script type="text/javascript" src="https://www.google.com/jsapi"></script>
+ <script type="text/javascript">google.load("elements", "1", {packages: "transliteration"});</script>
+ <script type="text/javascript" src="https://www.google.com/coop/cse/t13n?form=cse&amp;t13n_langs=en"></script>
+ <script type="text/javascript" src="https://www.google.com/coop/cse/brand?form=cse&amp;lang=en"></script>
+ </td>
+ </tr>
+ </tbody></table>
+ <div id="codesiteContent" class="">
+ <a id="gc-topnav-anchor"></a>
+ <div id="gc-topnav">
+ <h1>Google Chrome Extensions (<a href="http://code.google.com/labs/">Labs</a>)</h1>
+ <ul id="home" class="gc-topnav-tabs">
+ <li id="home_link">
+ <a href="index.html" title="Google Chrome Extensions home page">Home</a>
+ </li>
+ <li id="docs_link">
+ <a href="docs.html" title="Official Google Chrome Extensions documentation">Docs</a>
+ </li>
+ <li id="faq_link">
+ <a href="faq.html" title="Answers to frequently asked questions about Google Chrome Extensions">FAQ</a>
+ </li>
+ <li id="samples_link">
+ <a href="samples.html" title="Sample extensions (with source code)">Samples</a>
+ </li>
+ <li id="group_link">
+ <a href="http://groups.google.com/a/chromium.org/group/chromium-extensions" title="Google Chrome Extensions developer forum">Group</a>
+ </li>
+ <li id="so_link">
+ <a href="http://stackoverflow.com/questions/tagged/google-chrome-extension" title="[google-chrome-extension] tag on Stack Overflow">Questions?</a>
+ </li>
+ </ul>
+ </div> <!-- end gc-topnav -->
+ <div class="g-section g-tpl-170">
+ <!-- SIDENAV -->
+ <div class="g-unit g-first" id="gc-toc">
+ <ul>
+ <li><a href="getstarted.html">Getting Started</a></li>
+ <li><a href="overview.html">Overview</a></li>
+ <li><a href="whats_new.html">What's New?</a></li>
+ <li><h2><a href="devguide.html">Developer's Guide</a></h2>
+ <ul>
+ <li>Browser UI
+ <ul>
+ <li><a href="browserAction.html">Browser Actions</a></li>
+ <li><a href="contextMenus.html">Context Menus</a></li>
+ <li><a href="notifications.html">Desktop Notifications</a></li>
+ <li><a href="omnibox.html">Omnibox</a></li>
+ <li><a href="options.html">Options Pages</a></li>
+ <li><a href="override.html">Override Pages</a></li>
+ <li><a href="pageAction.html">Page Actions</a></li>
+ </ul>
+ </li>
+ <li>Browser Interaction
+ <ul>
+ <li><a href="bookmarks.html">Bookmarks</a></li>
+ <li><a href="cookies.html">Cookies</a></li>
+ <li><a href="devtools.html">Developer Tools</a></li>
+ <li><a href="events.html">Events</a></li>
+ <li><a href="history.html">History</a></li>
+ <li><a href="management.html">Management</a></li>
+ <li><a href="tabs.html">Tabs</a></li>
+ <li><a href="windows.html">Windows</a></li>
+ </ul>
+ </li>
+ <li>Implementation
+ <ul>
+ <li><a href="a11y.html">Accessibility</a></li>
+ <li><a href="background_pages.html">Background Pages</a></li>
+ <li><a href="content_scripts.html">Content Scripts</a></li>
+ <li><a href="xhr.html">Cross-Origin XHR</a></li>
+ <li><a href="i18n.html">Internationalization</a></li>
+ <li><a href="messaging.html">Message Passing</a></li>
+ <li><a href="permissions.html">Optional Permissions</a></li>
+ <li><a href="npapi.html">NPAPI Plugins</a></li>
+ </ul>
+ </li>
+ <li>Finishing
+ <ul>
+ <li><a href="hosting.html">Hosting</a></li>
+ <li><a href="external_extensions.html">Other Deployment Options</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><h2><a href="apps.html">Packaged Apps</a></h2></li>
+ <li><h2><a href="tutorials.html">Tutorials</a></h2>
+ <ul>
+ <li><a href="tut_debugging.html">Debugging</a></li>
+ <li><a href="tut_analytics.html">Google Analytics</a></li>
+ <li><a href="tut_oauth.html">OAuth</a></li>
+ </ul>
+ </li>
+ <li><h2>Reference</h2>
+ <ul>
+ <li>Formats
+ <ul>
+ <li><a href="manifest.html">Manifest Files</a></li>
+ <li><a href="match_patterns.html">Match Patterns</a></li>
+ </ul>
+ </li>
+ <li><a href="permission_warnings.html">Permission Warnings</a></li>
+ <li><a href="api_index.html">chrome.* APIs</a></li>
+ <li><a href="api_other.html">Other APIs</a></li>
+ </ul>
+ </li>
+ <li><h2><a href="samples.html">Samples</a></h2></li>
+ <div class="line"> </div>
+ <li><h2>More</h2>
+ <ul>
+ <li><a href="http://code.google.com/chrome/webstore/docs/index.html">Chrome Web Store</a></li>
+ <li><a href="http://code.google.com/chrome/apps/docs/developers_guide.html">Hosted Apps</a></li>
+ <li><a href="themes.html">Themes</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+ <script>
+ initToggles();
+ </script>
+ <div class="g-unit" id="gc-pagecontent">
+ <div id="pageTitle">
+ <h1 class="page_title">Managed Mode API</h1>
+ </div>
+ <!-- TABLE OF CONTENTS -->
+ <div id="toc">
+ <h2>Contents</h2>
+ <ol>
+ <li>
+ <a href="#manifest">Manifest</a>
+ <ol>
+ </ol>
+ </li><li>
+ <a href="#about">About Managed Mode</a>
+ <ol>
+ </ol>
+ </li><li>
+ <a href="#usage">Usage</a>
+ <ol>
+ </ol>
+ </li>
+ <li>
+ <a href="#apiReference">API reference: chrome.experimental.managedMode</a>
+ <ol>
+ <li>
+ <a href="#global-methods">Methods</a>
+ <ol>
+ <li>
+ <a href="#method-enter">enter</a>
+ </li><li>
+ <a href="#method-get">get</a>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </li>
+ </ol>
+ </div>
+ <!-- /TABLE OF CONTENTS -->
+ <!-- Standard content lead-in for experimental API pages -->
+ <!-- STATIC CONTENT PLACEHOLDER -->
+ <div id="static"><div id="pageData-name" class="pageData">Managed Mode API</div>
+<!-- BEGIN AUTHORED CONTENT -->
+<p id="classSummary">
+ The <code>chrome.experimental.managedMode</code> module allows extensions to
+ request that the browser enter managed mode, as well as to query whether it
+ is currently in managed mode.
+</p>
+<p class="note">
+ <b>Note: </b>Extensions cannot request that the browser leave managed mode.
+ This must be done by the user from within the browser itself.
+</p>
+<h2 id="manifest">Manifest</h2>
+<p>
+ You must declare the "managedMode" and "experimental" permissions in your
+ extension's <a href="manifest.html">manifest</a> to use the API. For example:
+</p>
+<pre>{
+ "name": "My extension",
+ ...
+ <b>"permissions": [
+ "experimental",
+ "managedMode"
+ ]</b>,
+ ...
+}</pre>
+<h2 id="about">About Managed Mode</h2>
+<p>
+ Managed mode allows one person to manage the Chrome experience for another
+ person by pre-configuring and then locking a managed User profile.
+ <span class="todo">For more information about Chrome's managed mode, see
+ <b>[TBD]</b>.</span>
+</p>
+<h2 id="usage">Usage</h2>
+<p>
+ Querying managed mode is straightforward. Simply call <code>get()</code>,
+ providing a callback function to receive the result. For example:
+</p>
+<pre>chrome.experimental.managedMode.get(function(details) {
+ if (details.value)
+ console.log('Managed mode is on.');
+ else
+ console.log('Managed mode is off.');
+});</pre>
+<p>
+ Entering managed mode is a little bit more complex, because if the browser is
+ already in managed mode, trying to enter it again will have no effect. To
+ avoid confusing users, it's advisable to check whether your extension can
+ enter managed mode (i.e., if it is not already in effect), and visually
+ disable the functionality in your extension if not. You can optionally
+ provide a callback function to <code>enter()</code> to receive the result.
+ For example:
+</p>
+<pre>chrome.experimental.managedMode.get(function(details) {
+ if (details.value) {
+ console.log("Managed mode is already in effect.");
+ } else {
+ chrome.experimental.managedMode.enter(function(result) {
+ if (chrome.extension.lastError === undefined) {
+ if (result.success)
+ console.log("Hooray, it worked!");
+ else
+ console.log("Oops, the user changed her mind.");
+ } else {
+ console.log("Aw, snap!", chrome.extension.lastError);
+ }
+ });
+ }
+});</pre>
+<!-- END AUTHORED CONTENT -->
+</div>
+ <!-- API PAGE -->
+ <div class="apiPage">
+ <a name="apiReference"></a>
+ <h2>API reference: chrome.experimental.managedMode</h2>
+ <!-- PROPERTIES -->
+ <!-- /apiGroup -->
+ <!-- METHODS -->
+ <div id="methodsTemplate" class="apiGroup">
+ <a name="global-methods"></a>
+ <h3>Methods</h3>
+ <!-- iterates over all functions -->
+ <div class="apiItem">
+ <a name="method-enter"></a> <!-- method-anchor -->
+ <h4>enter</h4>
+ <div class="summary">
+ <!-- Note: intentionally longer 80 columns -->
+ <span>chrome.experimental.managedMode.enter</span>(<span class="optional"><span>function</span>
+ <var><span>callback</span></var></span>)</div>
+ <div class="description">
+ <p>Shows a confirmation dialog, then puts the browser into managed mode. The callback parameter will be true if managed mode was entered successfully, false if the user cancelled the confirmation. If managed mode is already on, trying to enter it again will have no effect.</p>
+ <!-- PARAMETERS -->
+ <h4>Parameters</h4>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>callback</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span class="optional">optional</span>
+ <span id="typeTemplate">
+ <span>
+ <span>function</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd class="todo">
+ Undocumented.
+ </dd>
+ <!-- OBJECT PROPERTIES -->
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ <!-- RETURNS -->
+ <dl>
+ </dl>
+ <!-- CALLBACK -->
+ <div>
+ <div>
+ <h4>Callback function</h4>
+ <p>
+ If you specify the <em>callback</em> parameter, it should
+ specify a function that looks like this:
+ </p>
+ <!-- Note: intentionally longer 80 columns -->
+ <pre>function(<span>object result</span>) <span class="subdued">{...}</span>;</pre>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>result</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span id="typeTemplate">
+ <span>
+ <span>object</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd>The result of the attempt to enter managed mode.</dd>
+ <!-- OBJECT PROPERTIES -->
+ <dd>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>success</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span id="typeTemplate">
+ <span>
+ <span>boolean</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd>True if managed mode was entered successfully, false if the user cancelled the confirmation.</dd>
+ <!-- OBJECT PROPERTIES -->
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ </dd>
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ </div>
+ </div>
+ <!-- MIN_VERSION -->
+ </div> <!-- /description -->
+ </div><div class="apiItem">
+ <a name="method-get"></a> <!-- method-anchor -->
+ <h4>get</h4>
+ <div class="summary">
+ <!-- Note: intentionally longer 80 columns -->
+ <span>chrome.experimental.managedMode.get</span>(<span class="null"><span>function</span>
+ <var><span>callback</span></var></span>)</div>
+ <div class="description">
+ <p>Gets the value of the setting describing whether managed mode is in effect.</p>
+ <!-- PARAMETERS -->
+ <h4>Parameters</h4>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>callback</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span id="typeTemplate">
+ <span>
+ <span>function</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd class="todo">
+ Undocumented.
+ </dd>
+ <!-- OBJECT PROPERTIES -->
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ <!-- RETURNS -->
+ <dl>
+ </dl>
+ <!-- CALLBACK -->
+ <div>
+ <div>
+ <h4>Callback function</h4>
+ <p>
+ The callback <em>parameter</em> should specify a function
+ that looks like this:
+ </p>
+ <!-- Note: intentionally longer 80 columns -->
+ <pre>function(<span>object details</span>) <span class="subdued">{...}</span>;</pre>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>details</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span id="typeTemplate">
+ <span>
+ <span>object</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd>Details of the currently effective value.</dd>
+ <!-- OBJECT PROPERTIES -->
+ <dd>
+ <dl>
+ <div>
+ <div>
+ <dt>
+ <var>value</var>
+ <em>
+ <!-- TYPE -->
+ <div style="display:inline">
+ (
+ <span id="typeTemplate">
+ <span>
+ <span>boolean</span>
+ </span>
+ </span>
+ )
+ </div>
+ </em>
+ </dt>
+ <dd>The value of the setting.</dd>
+ <!-- OBJECT PROPERTIES -->
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ </dd>
+ <!-- OBJECT METHODS -->
+ <!-- OBJECT EVENT FIELDS -->
+ <!-- FUNCTION PARAMETERS -->
+ </div>
+ </div>
+ </dl>
+ </div>
+ </div>
+ <!-- MIN_VERSION -->
+ </div> <!-- /description -->
+ </div> <!-- /apiItem -->
+ </div> <!-- /apiGroup -->
+ <!-- EVENTS -->
+ <!-- /apiGroup -->
+ <!-- TYPES -->
+ <!-- /apiGroup -->
+ </div> <!-- /apiPage -->
+ </div> <!-- /gc-pagecontent -->
+ </div> <!-- /g-section -->
+ </div> <!-- /codesiteContent -->
+ <div id="gc-footer" --="">
+ <div class="text">
+ <p>
+ Except as otherwise <a href="http://code.google.com/policies.html#restrictions">noted</a>,
+ the content of this page is licensed under the <a rel="license" href="http://creativecommons.org/licenses/by/3.0/">Creative Commons
+ Attribution 3.0 License</a>, and code samples are licensed under the
+ <a rel="license" href="http://code.google.com/google_bsd_license.html">BSD License</a>.
+ </p>
+ <p>
+ ©2011 Google
+ </p>
+<!-- begin analytics -->
+<script src="https://www.google-analytics.com/urchin.js" type="text/javascript"></script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
+<script type="text/javascript">
+ // chrome doc tracking
+ try {
+ var engdocs = _gat._getTracker("YT-10763712-2");
+ engdocs._trackPageview();
+ } catch(err) {}
+ // code.google.com site-wide tracking
+ try {
+ _uacct="UA-18071-1";
+ _uanchor=1;
+ _uff=0;
+ urchinTracker();
+ }
+ catch(e) {/* urchinTracker not available. */}
+</script>
+<!-- end analytics -->
+ </div>
+ </div> <!-- /gc-footer -->
+ </div> <!-- /gc-container -->
+</body></html>
diff --git a/chrome/common/extensions/docs/js/api_page_generator.js b/chrome/common/extensions/docs/js/api_page_generator.js
index 944a54b..51a11a3 100644
--- a/chrome/common/extensions/docs/js/api_page_generator.js
+++ b/chrome/common/extensions/docs/js/api_page_generator.js
@@ -41,6 +41,7 @@ var MODULE_SCHEMAS = [
'../api/experimental.input.ui.json',
'../api/experimental.input.virtualKeyboard.json',
'../api/experimental.keybinding.json',
+ '../api/experimental.managedMode.json',
'../api/experimental.processes.json',
'../api/experimental.rlz.json',
'../api/experimental.serial.json',
@@ -242,7 +243,7 @@ function fetchContent(url, onSuccess, onError) {
window.clearTimeout(abortTimerId);
onSuccess(xhr.responseText);
} else {
- handleError('Failure to fetch content');
+ handleError('Failure to fetch content: ' + xhr.status);
}
}
}
diff --git a/chrome/common/extensions/docs/static/experimental.managedMode.html b/chrome/common/extensions/docs/static/experimental.managedMode.html
new file mode 100644
index 0000000..ec186b5
--- /dev/null
+++ b/chrome/common/extensions/docs/static/experimental.managedMode.html
@@ -0,0 +1,81 @@
+<div id="pageData-name" class="pageData">Managed Mode API</div>
+
+<!-- BEGIN AUTHORED CONTENT -->
+<p id="classSummary">
+ The <code>chrome.experimental.managedMode</code> module allows extensions to
+ request that the browser enter managed mode, as well as to query whether it
+ is currently in managed mode.
+</p>
+
+<p class="note">
+ <b>Note: </b>Extensions cannot request that the browser leave managed mode.
+ This must be done by the user from within the browser itself.
+</p>
+
+<h2 id="manifest">Manifest</h2>
+<p>
+ You must declare the "managedMode" and "experimental" permissions in your
+ extension's <a href="manifest.html">manifest</a> to use the API. For example:
+</p>
+
+<pre>{
+ "name": "My extension",
+ ...
+ <b>"permissions": [
+ "experimental",
+ "managedMode"
+ ]</b>,
+ ...
+}</pre>
+
+<h2 id="about">About Managed Mode</h2>
+
+<p>
+ Managed mode allows one person to manage the Chrome experience for another
+ person by pre-configuring and then locking a managed User profile.
+
+ <span class="todo">For more information about Chrome's managed mode, see
+ <b>[TBD]</b>.</span>
+</p>
+
+<h2 id="usage">Usage</h2>
+
+<p>
+ Querying managed mode is straightforward. Simply call <code>get()</code>,
+ providing a callback function to receive the result. For example:
+</p>
+
+<pre>chrome.experimental.managedMode.get(function(details) {
+ if (details.value)
+ console.log('Managed mode is on.');
+ else
+ console.log('Managed mode is off.');
+});</pre>
+
+<p>
+ Entering managed mode is a little bit more complex, because if the browser is
+ already in managed mode, trying to enter it again will have no effect. To
+ avoid confusing users, it's advisable to check whether your extension can
+ enter managed mode (i.e., if it is not already in effect), and visually
+ disable the functionality in your extension if not. You can optionally
+ provide a callback function to <code>enter()</code> to receive the result.
+ For example:
+</p>
+
+<pre>chrome.experimental.managedMode.get(function(details) {
+ if (details.value) {
+ console.log("Managed mode is already in effect.");
+ } else {
+ chrome.experimental.managedMode.enter(function(result) {
+ if (chrome.extension.lastError === undefined) {
+ if (result.success)
+ console.log("Hooray, it worked!");
+ else
+ console.log("Oops, the user changed her mind.");
+ } else {
+ console.log("Aw, snap!", chrome.extension.lastError);
+ }
+ });
+ }
+});</pre>
+<!-- END AUTHORED CONTENT -->
diff --git a/chrome/common/extensions/extension_permission_set.cc b/chrome/common/extensions/extension_permission_set.cc
index c4e4513..18e1fec 100644
--- a/chrome/common/extensions/extension_permission_set.cc
+++ b/chrome/common/extensions/extension_permission_set.cc
@@ -241,6 +241,9 @@ void ExtensionAPIPermission::RegisterAllPermissions(
kInput, "input", 0, ExtensionPermissionMessage::kNone,
kFlagImpliesFullURLAccess, kTypeDefault);
info->RegisterPermission(
+ kManagedMode, "managedMode", IDS_EXTENSION_PROMPT_WARNING_MANAGED_MODE,
+ ExtensionPermissionMessage::kManagedMode, kFlagNone, kTypeDefault);
+ info->RegisterPermission(
kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
ExtensionPermissionMessage::kManagement, kFlagNone, kTypeDefault);
info->RegisterPermission(
diff --git a/chrome/common/extensions/extension_permission_set.h b/chrome/common/extensions/extension_permission_set.h
index 12e540d..c219698 100644
--- a/chrome/common/extensions/extension_permission_set.h
+++ b/chrome/common/extensions/extension_permission_set.h
@@ -51,6 +51,7 @@ class ExtensionPermissionMessage {
kContentSettings,
kAllPageContent,
kPrivacy,
+ kManagedMode,
kEnumBoundary
};
@@ -117,6 +118,7 @@ class ExtensionAPIPermission {
kInput,
kInputMethodPrivate,
kKeybinding,
+ kManagedMode,
kManagement,
kMediaPlayerPrivate,
kMetricsPrivate,