diff options
author | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 21:17:49 +0000 |
---|---|---|
committer | mpcomplete@google.com <mpcomplete@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-05-01 21:17:49 +0000 |
commit | 4b5d64ff3d7d95247ed4f078d8bf585a1726794d (patch) | |
tree | 050a523a5bbccf28ade0814b38bcc9bee187cd04 /chrome/browser/renderer_host | |
parent | 912445b6db66140aecb3bc822075a6e9bb9d7e33 (diff) | |
download | chromium_src-4b5d64ff3d7d95247ed4f078d8bf585a1726794d.zip chromium_src-4b5d64ff3d7d95247ed4f078d8bf585a1726794d.tar.gz chromium_src-4b5d64ff3d7d95247ed4f078d8bf585a1726794d.tar.bz2 |
Pass down the opener tab when a message channel is opened to an extension.
Also did a bunch of cleanup of ExtensionMessageService. I converted it to
primarily UI-thread habitation, with one function that needs to be on the IO
thread so it can handle a synchronous IPC message.
TEST=N/A
Review URL: http://codereview.chromium.org/99261
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@15097 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
4 files changed, 19 insertions, 20 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index 3646358..c3d7aeb 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -15,8 +15,9 @@ #include "chrome/browser/cross_site_request_manager.h" #include "chrome/browser/debugger/debugger_wrapper.h" #include "chrome/browser/debugger/devtools_manager.h" -#include "chrome/browser/profile.h" +#include "chrome/browser/extensions/extension_message_service.h" #include "chrome/browser/metrics/user_metrics.h" +#include "chrome/browser/profile.h" #include "chrome/browser/renderer_host/renderer_security_policy.h" #include "chrome/browser/renderer_host/render_process_host.h" #include "chrome/browser/renderer_host/render_view_host_delegate.h" @@ -26,13 +27,13 @@ #include "chrome/browser/tab_contents/site_instance.h" #include "chrome/browser/tab_contents/web_contents.h" #include "chrome/common/bindings_policy.h" -#include "chrome/common/render_messages.h" -#include "chrome/common/resource_bundle.h" #include "chrome/common/notification_service.h" #include "chrome/common/notification_type.h" +#include "chrome/common/render_messages.h" +#include "chrome/common/resource_bundle.h" #include "chrome/common/result_codes.h" -#include "chrome/common/url_constants.h" #include "chrome/common/thumbnail_score.h" +#include "chrome/common/url_constants.h" #include "net/base/net_util.h" #include "skia/include/SkBitmap.h" #include "third_party/WebKit/WebKit/chromium/public/WebFindOptions.h" @@ -775,6 +776,8 @@ void RenderViewHost::OnMessageReceived(const IPC::Message& msg) { IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnMsgSelectionChanged) IPC_MESSAGE_HANDLER(ViewHostMsg_PasteFromSelectionClipboard, OnMsgPasteFromSelectionClipboard) + IPC_MESSAGE_HANDLER(ViewHostMsg_ExtensionPostMessage, + OnExtensionPostMessage) // Have the super handle all other messages. IPC_MESSAGE_UNHANDLED(RenderWidgetHost::OnMessageReceived(msg)) IPC_END_MESSAGE_MAP_EX() @@ -1368,3 +1371,10 @@ void RenderViewHost::SendExtensionResponse(int callback_id, const std::string& response) { Send(new ViewMsg_ExtensionResponse(routing_id(), callback_id, response)); } + +void RenderViewHost::OnExtensionPostMessage( + int port_id, const std::string& message) { + URLRequestContext* context = process()->profile()->GetRequestContext(); + ExtensionMessageService::GetInstance(context)-> + PostMessageFromRenderer(port_id, message); +} diff --git a/chrome/browser/renderer_host/render_view_host.h b/chrome/browser/renderer_host/render_view_host.h index 0125b50..b86b5f5 100644 --- a/chrome/browser/renderer_host/render_view_host.h +++ b/chrome/browser/renderer_host/render_view_host.h @@ -543,6 +543,7 @@ class RenderViewHost : public RenderWidgetHost { void OnExtensionRequest(const std::string& name, const std::string& args, int callback_id); + void OnExtensionPostMessage(int port_id, const std::string& message); // Helper function to send a navigation message. If a cross-site request is // in progress, we may be suspended while waiting for the onbeforeunload diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc index 804042f..3fc0602 100644 --- a/chrome/browser/renderer_host/resource_message_filter.cc +++ b/chrome/browser/renderer_host/resource_message_filter.cc @@ -193,10 +193,6 @@ void ResourceMessageFilter::OnChannelConnected(int32 peer_pid) { // Hook AudioRendererHost to this object after channel is connected so it can // this object for sending messages. audio_renderer_host_->IPCChannelConnected(render_process_id_, handle(), this); - - // Ditto for the ExtensionMessageService. - ExtensionMessageService::GetInstance(request_context_.get())-> - RendererReady(this); } // Called on the IPC thread: @@ -299,8 +295,6 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& message) { #endif IPC_MESSAGE_HANDLER(ViewHostMsg_OpenChannelToExtension, OnOpenChannelToExtension) - IPC_MESSAGE_HANDLER(ViewHostMsg_ExtensionPostMessage, - OnExtensionPostMessage) IPC_MESSAGE_UNHANDLED( handled = false) IPC_END_MESSAGE_MAP_EX() @@ -829,13 +823,7 @@ void ResourceMessageFilter::OnFreeTransportDIB( #endif void ResourceMessageFilter::OnOpenChannelToExtension( - const std::string& extension_id, int* port_id) { + int routing_id, const std::string& extension_id, int* port_id) { *port_id = ExtensionMessageService::GetInstance(request_context_.get())-> - OpenChannelToExtension(extension_id, this); -} - -void ResourceMessageFilter::OnExtensionPostMessage( - int port_id, const std::string& message) { - ExtensionMessageService::GetInstance(request_context_.get())-> - PostMessageFromRenderer(port_id, message, this); + OpenChannelToExtension(routing_id, extension_id, this); } diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h index 74181bf..e16ac8d 100644 --- a/chrome/browser/renderer_host/resource_message_filter.h +++ b/chrome/browser/renderer_host/resource_message_filter.h @@ -202,8 +202,8 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter, TransportDIB::Handle* result); void OnFreeTransportDIB(TransportDIB::Id dib_id); - void OnOpenChannelToExtension(const std::string& extension_id, int* port_id); - void OnExtensionPostMessage(int port_id, const std::string& message); + void OnOpenChannelToExtension(int routing_id, + const std::string& extension_id, int* port_id); #if defined(OS_LINUX) void SendDelayedReply(IPC::Message* reply_msg); |