diff options
author | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-27 18:42:31 +0000 |
---|---|---|
committer | jstritar@chromium.org <jstritar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-27 18:42:31 +0000 |
commit | 902fd7bbba5683135ec25fe83479b13ab532891a (patch) | |
tree | a6f2a4eb6b7a4349bc6fbaae0e419c715046a069 /chrome/renderer | |
parent | 3a91c5b51bc1890ecf3a558dbd51e3da68c418ca (diff) | |
download | chromium_src-902fd7bbba5683135ec25fe83479b13ab532891a.zip chromium_src-902fd7bbba5683135ec25fe83479b13ab532891a.tar.gz chromium_src-902fd7bbba5683135ec25fe83479b13ab532891a.tar.bz2 |
Re-land the experimental permissions API for extensions.
The permissions API lets extensions specify optional permissions in their manifest that they can request at run-time. It currently supports API permissions through a white-list. Host permissions will come later. This also fixes some clang errors from the previous attempt.
BUG=48119, 70466, 84507
TEST=*Extension*
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=94288
Review URL: http://codereview.chromium.org/7432006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@94326 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
4 files changed, 24 insertions, 2 deletions
diff --git a/chrome/renderer/extensions/extension_dispatcher.cc b/chrome/renderer/extensions/extension_dispatcher.cc index 098e3e5..d994d92 100644 --- a/chrome/renderer/extensions/extension_dispatcher.cc +++ b/chrome/renderer/extensions/extension_dispatcher.cc @@ -9,6 +9,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/extensions/extension.h" #include "chrome/common/extensions/extension_messages.h" +#include "chrome/common/extensions/extension_permission_set.h" #include "chrome/common/url_constants.h" #include "chrome/renderer/extensions/chrome_app_bindings.h" #include "chrome/renderer/extensions/event_bindings.h" @@ -65,6 +66,7 @@ bool ExtensionDispatcher::OnControlMessageReceived( OnSetScriptingWhitelist) IPC_MESSAGE_HANDLER(ExtensionMsg_ActivateExtension, OnActivateExtension) IPC_MESSAGE_HANDLER(ExtensionMsg_ActivateApplication, OnActivateApplication) + IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions) IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateUserScripts, OnUpdateUserScripts) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -149,6 +151,7 @@ void ExtensionDispatcher::OnLoaded(const ExtensionMsg_Loaded_Params& params) { } extensions_.Insert(extension); + extension->SetActivePermissions(params.GetActivePermissions()); } void ExtensionDispatcher::OnUnloaded(const std::string& id) { @@ -244,7 +247,7 @@ void ExtensionDispatcher::InitHostPermissions(const Extension* extension) { } const URLPatternSet& permissions = - extension->permission_set()->explicit_hosts(); + extension->GetActivePermissions()->explicit_hosts(); for (URLPatternSet::const_iterator i = permissions.begin(); i != permissions.end(); ++i) { const char* schemes[] = { @@ -265,6 +268,19 @@ void ExtensionDispatcher::InitHostPermissions(const Extension* extension) { } } +void ExtensionDispatcher::OnUpdatePermissions( + const std::string& extension_id, + const ExtensionAPIPermissionSet& apis, + const URLPatternSet& explicit_hosts, + const URLPatternSet& scriptable_hosts) { + const Extension* extension = extensions_.GetByID(extension_id); + if (!extension) + return; + + extension->SetActivePermissions( + new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts)); +} + void ExtensionDispatcher::OnUpdateUserScripts( base::SharedMemoryHandle scripts) { DCHECK(base::SharedMemory::IsHandleValid(scripts)) << "Bad scripts handle"; diff --git a/chrome/renderer/extensions/extension_dispatcher.h b/chrome/renderer/extensions/extension_dispatcher.h index f2ae6fe9..f1fb8e4 100644 --- a/chrome/renderer/extensions/extension_dispatcher.h +++ b/chrome/renderer/extensions/extension_dispatcher.h @@ -20,6 +20,7 @@ class RenderThread; class URLPattern; class UserScriptSlave; struct ExtensionMsg_Loaded_Params; +struct ExtensionMsg_UpdatePermissions_Params; namespace base { class ListValue; @@ -77,6 +78,10 @@ class ExtensionDispatcher : public RenderProcessObserver { const std::vector<std::string>& page_actions); void OnActivateApplication(const std::string& extension_id); void OnActivateExtension(const std::string& extension_id); + void OnUpdatePermissions(const std::string& extension_id, + const ExtensionAPIPermissionSet& apis, + const URLPatternSet& explicit_hosts, + const URLPatternSet& scriptable_hosts); void OnUpdateUserScripts(base::SharedMemoryHandle table); // Update the list of active extensions that will be reported when we crash. diff --git a/chrome/renderer/resources/extension_apitest.js b/chrome/renderer/resources/extension_apitest.js index c09ed57..7e7e62f 100644 --- a/chrome/renderer/resources/extension_apitest.js +++ b/chrome/renderer/resources/extension_apitest.js @@ -71,7 +71,7 @@ var chrome = chrome || {}; if (pendingCallbacks == 0) { chrome.test.succeed(); } - } + }; }; chrome.test.runNextTest = function() { diff --git a/chrome/renderer/resources/renderer_extension_bindings.js b/chrome/renderer/resources/renderer_extension_bindings.js index 6935c1d..b78b4c1 100644 --- a/chrome/renderer/resources/renderer_extension_bindings.js +++ b/chrome/renderer/resources/renderer_extension_bindings.js @@ -310,6 +310,7 @@ var chrome = chrome || {}; "experimental.input", "experimental.inputUI", "experimental.metrics", + "experimental.permissions", "experimental.popup", "experimental.processes", "experimental.rlz", |