diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-27 16:37:58 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-27 16:37:58 +0000 |
commit | ef9df9238ae4c6255d103865649573f480d2fec9 (patch) | |
tree | f9ca1fb19dee6dbc153de1a04a7c4b59744e7981 /chrome/browser/extensions/extension_function_dispatcher.cc | |
parent | 5d5513afd7ecb03270839c375117aef7d65301c5 (diff) | |
download | chromium_src-ef9df9238ae4c6255d103865649573f480d2fec9.zip chromium_src-ef9df9238ae4c6255d103865649573f480d2fec9.tar.gz chromium_src-ef9df9238ae4c6255d103865649573f480d2fec9.tar.bz2 |
Revert "Revert 83100 - Remove weird dependency on extensions from webui.Re-plumb extension request messages in a more sane way.Before, each RVH had ProcessWebUIMessage(), which wasserving as a manual way of plumbing both WebUI andextension messages to the right place, even though onlya few RVHD responded to either message.Instead of this, we now just teach more of the stack howto handle IPC messages in general, and delegate them upthrough the stack, giving each layer a chance to handlethem if it knows how.The result is simpler and smaller:179 insertions(+), 252 deletions(-)BUG=80311Review URL: http://codereview.chromium.org/6901021"
This reverts commit 643b280cedd9f0b76948686f39f50f295aba362f.
TBR=mpcomplete@chromium.org
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83168 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_function_dispatcher.cc')
-rw-r--r-- | chrome/browser/extensions/extension_function_dispatcher.cc | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/chrome/browser/extensions/extension_function_dispatcher.cc b/chrome/browser/extensions/extension_function_dispatcher.cc index 26b466b..efca9b6 100644 --- a/chrome/browser/extensions/extension_function_dispatcher.cc +++ b/chrome/browser/extensions/extension_function_dispatcher.cc @@ -26,7 +26,6 @@ #include "chrome/browser/extensions/extension_idle_api.h" #include "chrome/browser/extensions/extension_infobar_module.h" #include "chrome/browser/extensions/extension_management_api.h" -#include "chrome/browser/extensions/extension_message_service.h" #include "chrome/browser/extensions/extension_metrics_module.h" #include "chrome/browser/extensions/extension_module.h" #include "chrome/browser/extensions/extension_omnibox_api.h" @@ -54,10 +53,13 @@ #include "chrome/browser/ui/webui/favicon_source.h" #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/url_constants.h" +#include "content/browser/child_process_security_policy.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_view_host.h" #include "content/common/notification_service.h" #include "content/common/result_codes.h" +#include "ipc/ipc_message.h" +#include "ipc/ipc_message_macros.h" #include "third_party/skia/include/core/SkBitmap.h" #if defined(TOOLKIT_VIEWS) @@ -473,8 +475,28 @@ Browser* ExtensionFunctionDispatcher::GetCurrentBrowser( return browser; } -void ExtensionFunctionDispatcher::HandleRequest( - const ExtensionHostMsg_DomMessage_Params& params) { +bool ExtensionFunctionDispatcher::OnMessageReceived( + const IPC::Message& message) { + bool handled = true; + IPC_BEGIN_MESSAGE_MAP(ExtensionFunctionDispatcher, message) + IPC_MESSAGE_HANDLER(ExtensionHostMsg_Request, OnRequest) + IPC_MESSAGE_UNHANDLED(handled = false) + IPC_END_MESSAGE_MAP() + return handled; +} + +void ExtensionFunctionDispatcher::OnRequest( + const ExtensionHostMsg_Request_Params& params) { + if (!ChildProcessSecurityPolicy::GetInstance()-> + HasExtensionBindings(render_view_host_->process()->id())) { + // This can happen if someone uses window.open() to open an extension URL + // from a non-extension context. + render_view_host_->Send(new ExtensionMsg_Response( + render_view_host_->routing_id(), params.request_id, false, + std::string(), "Access to extension API denied.")); + return; + } + scoped_refptr<ExtensionFunction> function( FactoryRegistry::GetInstance()->NewFunction(params.name)); function->set_dispatcher_peer(peer_); |