Commit ab4306e4 authored by bauerb@chromium.org's avatar bauerb@chromium.org

Make managedMode extension API component-only.

To use the API in an extension now, load it as a component extension via --load-component-extension.

BUG=115448
TEST=none


Review URL: http://codereview.chromium.org/10141008

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133926 0039d316-1c4b-4281-b951-d872f2087c98
parent 2b942c33
...@@ -15,14 +15,14 @@ class GetManagedModeFunction : public SyncExtensionFunction { ...@@ -15,14 +15,14 @@ class GetManagedModeFunction : public SyncExtensionFunction {
public: public:
virtual ~GetManagedModeFunction(); virtual ~GetManagedModeFunction();
virtual bool RunImpl() OVERRIDE; virtual bool RunImpl() OVERRIDE;
DECLARE_EXTENSION_FUNCTION_NAME("experimental.managedMode.get") DECLARE_EXTENSION_FUNCTION_NAME("managedModePrivate.get")
}; };
class EnterManagedModeFunction : public AsyncExtensionFunction { class EnterManagedModeFunction : public AsyncExtensionFunction {
public: public:
virtual ~EnterManagedModeFunction(); virtual ~EnterManagedModeFunction();
virtual bool RunImpl() OVERRIDE; virtual bool RunImpl() OVERRIDE;
DECLARE_EXTENSION_FUNCTION_NAME("experimental.managedMode.enter") DECLARE_EXTENSION_FUNCTION_NAME("managedModePrivate.enter")
private: private:
// Called when we have either successfully entered managed mode or failed. // Called when we have either successfully entered managed mode or failed.
......
...@@ -13,9 +13,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ManagedModeGetAndEnable) { ...@@ -13,9 +13,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest, ManagedModeGetAndEnable) {
ASSERT_FALSE(ManagedMode::IsInManagedMode()); ASSERT_FALSE(ManagedMode::IsInManagedMode());
ASSERT_TRUE(RunExtensionTest("managedMode")) << message_; ASSERT_TRUE(RunComponentExtensionTest("managedMode")) << message_;
const Extension* extension = GetSingleLoadedExtension();
ASSERT_TRUE(extension);
EXPECT_TRUE(ManagedMode::IsInManagedMode()); EXPECT_TRUE(ManagedMode::IsInManagedMode());
} }
...@@ -66,7 +66,7 @@ PrefMappingEntry kPrefMapping[] = { ...@@ -66,7 +66,7 @@ PrefMappingEntry kPrefMapping[] = {
}, },
{ "managedModeEnabled", { "managedModeEnabled",
prefs::kInManagedMode, prefs::kInManagedMode,
ExtensionAPIPermission::kManagedMode ExtensionAPIPermission::kManagedModePrivate
}, },
{ "networkPredictionEnabled", { "networkPredictionEnabled",
prefs::kNetworkPredictionEnabled, prefs::kNetworkPredictionEnabled,
......
...@@ -126,9 +126,10 @@ ...@@ -126,9 +126,10 @@
"channel": "stable", "channel": "stable",
"extension_types": ["extension", "packaged_app", "platform_app"] "extension_types": ["extension", "packaged_app", "platform_app"]
}, },
"managedMode": { "managedModePrivate": {
"channel": "stable", "channel": "stable",
"extension_types": ["extension", "packaged_app", "platform_app"] "extension_types": ["extension", "packaged_app", "platform_app"],
"location": "component"
}, },
"management": { "management": {
"channel": "stable", "channel": "stable",
......
...@@ -161,7 +161,7 @@ void ExtensionAPI::LoadSchema(const base::StringPiece& schema) { ...@@ -161,7 +161,7 @@ void ExtensionAPI::LoadSchema(const base::StringPiece& schema) {
CHECK(schema->GetString("namespace", &schema_namespace)); CHECK(schema->GetString("namespace", &schema_namespace));
schemas_[schema_namespace] = make_linked_ptr(schema); schemas_[schema_namespace] = make_linked_ptr(schema);
unloaded_schemas_.erase(schema_namespace); CHECK_EQ(1u, unloaded_schemas_.erase(schema_namespace));
// Populate |{completely,partially}_unprivileged_apis_|. // Populate |{completely,partially}_unprivileged_apis_|.
// //
...@@ -295,8 +295,6 @@ void ExtensionAPI::InitDefaultConfiguration() { ...@@ -295,8 +295,6 @@ void ExtensionAPI::InitDefaultConfiguration() {
IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD)); IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD));
RegisterSchema("experimental.keybinding", ReadFromResource( RegisterSchema("experimental.keybinding", ReadFromResource(
IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING)); IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING));
RegisterSchema("experimental.managedMode", ReadFromResource(
IDR_EXTENSION_API_JSON_EXPERIMENTAL_MANAGEDMODE));
RegisterSchema("experimental.offscreenTabs", ReadFromResource( RegisterSchema("experimental.offscreenTabs", ReadFromResource(
IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS)); IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS));
RegisterSchema("experimental.processes", ReadFromResource( RegisterSchema("experimental.processes", ReadFromResource(
...@@ -325,6 +323,8 @@ void ExtensionAPI::InitDefaultConfiguration() { ...@@ -325,6 +323,8 @@ void ExtensionAPI::InitDefaultConfiguration() {
IDR_EXTENSION_API_JSON_INPUT_IME)); IDR_EXTENSION_API_JSON_INPUT_IME));
RegisterSchema("inputMethodPrivate", ReadFromResource( RegisterSchema("inputMethodPrivate", ReadFromResource(
IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE)); IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE));
RegisterSchema("managedModePrivate", ReadFromResource(
IDR_EXTENSION_API_JSON_MANAGEDMODEPRIVATE));
RegisterSchema("management", ReadFromResource( RegisterSchema("management", ReadFromResource(
IDR_EXTENSION_API_JSON_MANAGEMENT)); IDR_EXTENSION_API_JSON_MANAGEMENT));
RegisterSchema("mediaPlayerPrivate", ReadFromResource( RegisterSchema("mediaPlayerPrivate", ReadFromResource(
......
...@@ -4,8 +4,8 @@ ...@@ -4,8 +4,8 @@
[ [
{ {
"namespace": "experimental.managedMode", "namespace": "managedModePrivate",
"dependencies": ["types"], "nodoc": true,
"functions": [ "functions": [
{ {
"name": "enter", "name": "enter",
......
...@@ -245,7 +245,6 @@ on the following experimental APIs: ...@@ -245,7 +245,6 @@ on the following experimental APIs:
<a href="experimental.fontSettings.html">experimental.fontSettings</a></li><li> <a href="experimental.fontSettings.html">experimental.fontSettings</a></li><li>
<a href="experimental.infobars.html">experimental.infobars</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.keybinding.html">experimental.keybinding</a></li><li>
<a href="experimental.managedMode.html">experimental.managedMode</a></li><li>
<a href="experimental.offscreenTabs.html">experimental.offscreenTabs</a></li><li> <a href="experimental.offscreenTabs.html">experimental.offscreenTabs</a></li><li>
<a href="experimental.runtime.html">experimental.runtime</a></li><li> <a href="experimental.runtime.html">experimental.runtime</a></li><li>
<a href="experimental.speechInput.html">experimental.speechInput</a></li><li> <a href="experimental.speechInput.html">experimental.speechInput</a></li><li>
......
<!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="../../../../third_party/json_minify/minify-sans-regexp.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>
...@@ -41,7 +41,6 @@ var MODULE_SCHEMAS = [ ...@@ -41,7 +41,6 @@ var MODULE_SCHEMAS = [
'../api/experimental.input.ui.json', '../api/experimental.input.ui.json',
'../api/experimental.input.virtualKeyboard.json', '../api/experimental.input.virtualKeyboard.json',
'../api/experimental.keybinding.json', '../api/experimental.keybinding.json',
'../api/experimental.managedMode.json',
'../api/experimental.offscreenTabs.json', '../api/experimental.offscreenTabs.json',
'../api/experimental.processes.json', '../api/experimental.processes.json',
'../api/experimental.rlz.json', '../api/experimental.rlz.json',
...@@ -56,6 +55,7 @@ var MODULE_SCHEMAS = [ ...@@ -56,6 +55,7 @@ var MODULE_SCHEMAS = [
'../api/idle.json', '../api/idle.json',
'../api/input.ime.json', '../api/input.ime.json',
'../api/inputMethodPrivate.json', '../api/inputMethodPrivate.json',
'../api/managedModePrivate.json',
'../api/management.json', '../api/management.json',
'../api/mediaPlayerPrivate.json', '../api/mediaPlayerPrivate.json',
'../api/metricsPrivate.json', '../api/metricsPrivate.json',
......
...@@ -144,8 +144,6 @@ ...@@ -144,8 +144,6 @@
"chrome.experimental.fontSettings.setMinimumFontSize": "experimental.fontSettings.html#method-setMinimumFontSize", "chrome.experimental.fontSettings.setMinimumFontSize": "experimental.fontSettings.html#method-setMinimumFontSize",
"chrome.experimental.infobars.show": "experimental.infobars.html#method-show", "chrome.experimental.infobars.show": "experimental.infobars.html#method-show",
"chrome.experimental.keybinding.onCommand": "experimental.keybinding.html#event-onCommand", "chrome.experimental.keybinding.onCommand": "experimental.keybinding.html#event-onCommand",
"chrome.experimental.managedMode.enter": "experimental.managedMode.html#method-enter",
"chrome.experimental.managedMode.get": "experimental.managedMode.html#method-get",
"chrome.experimental.offscreenTabs.create": "experimental.offscreenTabs.html#method-create", "chrome.experimental.offscreenTabs.create": "experimental.offscreenTabs.html#method-create",
"chrome.experimental.offscreenTabs.get": "experimental.offscreenTabs.html#method-get", "chrome.experimental.offscreenTabs.get": "experimental.offscreenTabs.html#method-get",
"chrome.experimental.offscreenTabs.getAll": "experimental.offscreenTabs.html#method-getAll", "chrome.experimental.offscreenTabs.getAll": "experimental.offscreenTabs.html#method-getAll",
......
<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 -->
...@@ -236,9 +236,6 @@ void ExtensionAPIPermission::RegisterAllPermissions( ...@@ -236,9 +236,6 @@ void ExtensionAPIPermission::RegisterAllPermissions(
info->RegisterPermission( info->RegisterPermission(
kInput, "input", 0, ExtensionPermissionMessage::kNone, kInput, "input", 0, ExtensionPermissionMessage::kNone,
kFlagImpliesFullURLAccess); kFlagImpliesFullURLAccess);
info->RegisterPermission(
kManagedMode, "managedMode", IDS_EXTENSION_PROMPT_WARNING_MANAGED_MODE,
ExtensionPermissionMessage::kManagedMode, kFlagNone);
info->RegisterPermission( info->RegisterPermission(
kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
ExtensionPermissionMessage::kManagement, kFlagNone); ExtensionPermissionMessage::kManagement, kFlagNone);
...@@ -285,6 +282,9 @@ void ExtensionAPIPermission::RegisterAllPermissions( ...@@ -285,6 +282,9 @@ void ExtensionAPIPermission::RegisterAllPermissions(
kFileBrowserPrivate, "fileBrowserPrivate", 0, kFileBrowserPrivate, "fileBrowserPrivate", 0,
ExtensionPermissionMessage::kNone, ExtensionPermissionMessage::kNone,
kFlagCannotBeOptional); kFlagCannotBeOptional);
info->RegisterPermission(
kManagedModePrivate, "managedModePrivate", 0,
ExtensionPermissionMessage::kNone, kFlagCannotBeOptional);
info->RegisterPermission( info->RegisterPermission(
kMediaPlayerPrivate, "mediaPlayerPrivate", 0, kMediaPlayerPrivate, "mediaPlayerPrivate", 0,
ExtensionPermissionMessage::kNone, ExtensionPermissionMessage::kNone,
......
...@@ -117,7 +117,7 @@ class ExtensionAPIPermission { ...@@ -117,7 +117,7 @@ class ExtensionAPIPermission {
kInput, kInput,
kInputMethodPrivate, kInputMethodPrivate,
kKeybinding, kKeybinding,
kManagedMode, kManagedModePrivate,
kManagement, kManagement,
kMediaPlayerPrivate, kMediaPlayerPrivate,
kMetricsPrivate, kMetricsPrivate,
......
...@@ -600,6 +600,7 @@ TEST(ExtensionPermissionsTest, PermissionMessages) { ...@@ -600,6 +600,7 @@ TEST(ExtensionPermissionsTest, PermissionMessages) {
skip.insert(ExtensionAPIPermission::kChromeosInfoPrivate); skip.insert(ExtensionAPIPermission::kChromeosInfoPrivate);
skip.insert(ExtensionAPIPermission::kFileBrowserPrivate); skip.insert(ExtensionAPIPermission::kFileBrowserPrivate);
skip.insert(ExtensionAPIPermission::kInputMethodPrivate); skip.insert(ExtensionAPIPermission::kInputMethodPrivate);
skip.insert(ExtensionAPIPermission::kManagedModePrivate);
skip.insert(ExtensionAPIPermission::kMediaPlayerPrivate); skip.insert(ExtensionAPIPermission::kMediaPlayerPrivate);
skip.insert(ExtensionAPIPermission::kMetricsPrivate); skip.insert(ExtensionAPIPermission::kMetricsPrivate);
skip.insert(ExtensionAPIPermission::kEchoPrivate); skip.insert(ExtensionAPIPermission::kEchoPrivate);
......
...@@ -32,7 +32,6 @@ ...@@ -32,7 +32,6 @@
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_UI" file="extensions\api\experimental.input.ui.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_UI" file="extensions\api\experimental.input.ui.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD" file="extensions\api\experimental.input.virtualKeyboard.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_INPUT_VIRTUALKEYBOARD" file="extensions\api\experimental.input.virtualKeyboard.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING" file="extensions\api\experimental.keybinding.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_KEYBINDING" file="extensions\api\experimental.keybinding.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_MANAGEDMODE" file="extensions\api\experimental.managedMode.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS" file="extensions\api\experimental.offscreenTabs.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_OFFSCREENTABS" file="extensions\api\experimental.offscreenTabs.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES" file="extensions\api\experimental.processes.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_PROCESSES" file="extensions\api\experimental.processes.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ" file="extensions\api\experimental.rlz.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_EXPERIMENTAL_RLZ" file="extensions\api\experimental.rlz.json" type="BINDATA" />
...@@ -47,6 +46,7 @@ ...@@ -47,6 +46,7 @@
<include name="IDR_EXTENSION_API_JSON_INPUT_IME" file="extensions\api\input.ime.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_INPUT_IME" file="extensions\api\input.ime.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_IDLE" file="extensions\api\idle.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_IDLE" file="extensions\api\idle.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE" file="extensions\api\inputMethodPrivate.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_INPUTMETHODPRIVATE" file="extensions\api\inputMethodPrivate.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_MANAGEDMODEPRIVATE" file="extensions\api\managedModePrivate.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_MANAGEMENT" file="extensions\api\management.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_MANAGEMENT" file="extensions\api\management.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_MEDIAPLAYERPRIVATE" file="extensions\api\mediaPlayerPrivate.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_MEDIAPLAYERPRIVATE" file="extensions\api\mediaPlayerPrivate.json" type="BINDATA" />
<include name="IDR_EXTENSION_API_JSON_METRICSPRIVATE" file="extensions\api\metricsPrivate.json" type="BINDATA" /> <include name="IDR_EXTENSION_API_JSON_METRICSPRIVATE" file="extensions\api\metricsPrivate.json" type="BINDATA" />
......
...@@ -2,8 +2,9 @@ ...@@ -2,8 +2,9 @@
"name" : "Managed Mode API Test Extension", "name" : "Managed Mode API Test Extension",
"version" : "0.1", "version" : "0.1",
"manifest_version": 2, "manifest_version": 2,
"key": "MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDJ5+2VmV02HP3jkMhxbp2yuyzf4K4JsffgCf8zsPljLVV2A+JXGj0TbvzvDP3RDCKC5qPMprQkoYlKVW2b6H0kQ8dNmZsjxMqEz/ZDx4Z6/VvbMaz8pP+dENs5Io5XlG5Op2nsJF+y+LqbX6qbff9D/s4fTWyqKillpJN+48qs0wIBIw==",
"description" : "Managed Mode API Test Extension", "description" : "Managed Mode API Test Extension",
"permissions": [ "managedMode", "experimental" ], "permissions": [ "managedModePrivate" ],
"background": { "background": {
"scripts": ["test.js"] "scripts": ["test.js"]
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// Managed Mode API test // Managed Mode API test
// Run with browser_tests --gtest_filter=ExtensionApiTest.ManagedModeApi // Run with browser_tests --gtest_filter=ExtensionApiTest.ManagedModeApi
var managedMode = chrome.experimental.managedMode; var managedMode = chrome.managedModePrivate;
function expect(expected, message) { function expect(expected, message) {
return chrome.test.callbackPass(function(value) { return chrome.test.callbackPass(function(value) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment