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>
......
...@@ -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