Chromium Code Reviews| Index: content/browser/frame_host/render_frame_host_impl.cc |
| diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
| index f883a45098cb08d4634e0c40f904f8aa70943d1e..e8141b68f95dc21b451f720df9510d4f78f0716a 100644 |
| --- a/content/browser/frame_host/render_frame_host_impl.cc |
| +++ b/content/browser/frame_host/render_frame_host_impl.cc |
| @@ -24,6 +24,7 @@ |
| #include "content/common/frame_messages.h" |
| #include "content/common/input_messages.h" |
| #include "content/common/inter_process_time_ticks_converter.h" |
| +#include "content/common/render_frame_setup.mojom.h" |
| #include "content/common/swapped_out_messages.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/content_browser_client.h" |
| @@ -123,6 +124,32 @@ base::i18n::TextDirection WebTextDirectionToChromeTextDirection( |
| } |
| } |
| +class RenderFrameSetupImpl : public mojo::InterfaceImpl<RenderFrameSetup> { |
| + public: |
| + explicit RenderFrameSetupImpl(int process_id) : process_id_(process_id) {} |
| + |
| + virtual void ConnectToInterfaceProvider( |
|
darin (slow to review)
2014/06/12 05:27:12
@davemoore and I were again discussing the names o
Sam McNally
2014/06/12 08:56:39
Sounds reasonable, but I'd like to stick with IInt
|
| + int32_t view_routing_id, |
| + mojo::ScopedMessagePipeHandle handle) OVERRIDE { |
| + RenderFrameHostImpl* frame_host = static_cast<RenderFrameHostImpl*>( |
| + RenderFrameHost::FromID(process_id_, view_routing_id)); |
| + if (!frame_host) |
| + return; |
| + |
| + frame_host->BindServiceRegistry(handle.Pass()); |
| + } |
| + |
| + virtual void OnConnectionError() OVERRIDE { delete this; } |
| + |
| + private: |
| + const int process_id_; |
| +}; |
| + |
| +void CreateRenderFrameHostSetup(int process_id, |
| + mojo::ScopedMessagePipeHandle handle) { |
| + mojo::BindToPipe(new RenderFrameSetupImpl(process_id), handle.Pass()); |
| +} |
| + |
| } // namespace |
| RenderFrameHost* RenderFrameHost::FromID(int render_process_id, |
| @@ -161,6 +188,11 @@ RenderFrameHostImpl::RenderFrameHostImpl( |
| g_routing_id_frame_map.Get().insert(std::make_pair( |
| RenderFrameHostID(GetProcess()->GetID(), routing_id_), |
| this)); |
| + |
| + if (GetProcess()->GetServiceRegistry()) { |
| + GetProcess()->GetServiceRegistry()->AddService<RenderFrameSetup>( |
| + base::Bind(CreateRenderFrameHostSetup, GetProcess()->GetID())); |
| + } |
| } |
| RenderFrameHostImpl::~RenderFrameHostImpl() { |
| @@ -241,6 +273,10 @@ RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { |
| return render_view_host_; |
| } |
| +ServiceRegistry* RenderFrameHostImpl::GetServiceRegistry() { |
| + return &service_registry_; |
| +} |
| + |
| bool RenderFrameHostImpl::Send(IPC::Message* message) { |
| if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { |
| return render_view_host_->input_router()->SendInput( |
| @@ -896,4 +932,9 @@ void RenderFrameHostImpl::DesktopNotificationPermissionRequestDone( |
| routing_id_, callback_context)); |
| } |
| +void RenderFrameHostImpl::BindServiceRegistry( |
| + mojo::ScopedMessagePipeHandle shell_handle) { |
| + service_registry_.Bind(shell_handle.Pass()); |
| +} |
| + |
| } // namespace content |