| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index e66bd926caa120ba4bdba4ce5d523db9f365493e..4296de9d2ff53c54760711144be8ff778e0c6a67 100644
|
| --- a/content/renderer/render_thread_impl.cc
|
| +++ b/content/renderer/render_thread_impl.cc
|
| @@ -51,7 +51,7 @@
|
| #include "content/common/gpu/client/gpu_memory_buffer_impl.h"
|
| #include "content/common/gpu/gpu_messages.h"
|
| #include "content/common/gpu/gpu_process_launch_causes.h"
|
| -#include "content/common/mojo/mojo_service_names.h"
|
| +#include "content/common/render_frame_setup.mojom.h"
|
| #include "content/common/resource_messages.h"
|
| #include "content/common/view_messages.h"
|
| #include "content/common/worker_messages.h"
|
| @@ -92,7 +92,6 @@
|
| #include "content/renderer/service_worker/embedded_worker_context_message_filter.h"
|
| #include "content/renderer/service_worker/embedded_worker_dispatcher.h"
|
| #include "content/renderer/shared_worker/embedded_shared_worker_stub.h"
|
| -#include "content/renderer/web_ui_setup_impl.h"
|
| #include "grit/content_resources.h"
|
| #include "ipc/ipc_channel_handle.h"
|
| #include "ipc/ipc_forwarding_message_filter.h"
|
| @@ -265,6 +264,28 @@ void NotifyTimezoneChangeOnThisThread() {
|
| v8::Date::DateTimeConfigurationChangeNotification(isolate);
|
| }
|
|
|
| +class RenderFrameSetupImpl : public mojo::InterfaceImpl<RenderFrameSetup> {
|
| + public:
|
| + virtual void ConnectToServiceProvider(
|
| + int32_t frame_routing_id,
|
| + mojo::InterfaceRequest<mojo::IInterfaceProvider> request) OVERRIDE {
|
| + RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id);
|
| + if (!frame) {
|
| + RenderThreadImpl::current()->RegisterPendingRenderFrameConnect(
|
| + frame_routing_id, request.PassMessagePipe());
|
| + return;
|
| + }
|
| +
|
| + frame->BindServiceRegistry(request.PassMessagePipe());
|
| + }
|
| +
|
| + virtual void OnConnectionError() OVERRIDE { delete this; }
|
| +};
|
| +
|
| +void CreateRenderFrameSetup(mojo::InterfaceRequest<RenderFrameSetup> request) {
|
| + mojo::BindToRequest(new RenderFrameSetupImpl(), &request);
|
| +}
|
| +
|
| } // namespace
|
|
|
| RenderThreadImpl::HistogramCustomizer::HistogramCustomizer() {
|
| @@ -507,10 +528,19 @@ void RenderThreadImpl::Init() {
|
| }
|
| }
|
|
|
| + service_registry()->AddService<RenderFrameSetup>(
|
| + base::Bind(CreateRenderFrameSetup));
|
| +
|
| TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, "");
|
| }
|
|
|
| RenderThreadImpl::~RenderThreadImpl() {
|
| + for (std::map<int, mojo::MessagePipeHandle>::iterator it =
|
| + pending_render_frame_connects_.begin();
|
| + it != pending_render_frame_connects_.end();
|
| + ++it) {
|
| + mojo::ScopedMessagePipeHandle handle(it->second);
|
| + }
|
| }
|
|
|
| void RenderThreadImpl::Shutdown() {
|
| @@ -679,6 +709,18 @@ scoped_refptr<base::MessageLoopProxy>
|
|
|
| void RenderThreadImpl::AddRoute(int32 routing_id, IPC::Listener* listener) {
|
| ChildThread::GetRouter()->AddRoute(routing_id, listener);
|
| + std::map<int, mojo::MessagePipeHandle>::iterator it =
|
| + pending_render_frame_connects_.find(routing_id);
|
| + if (it == pending_render_frame_connects_.end())
|
| + return;
|
| +
|
| + RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(routing_id);
|
| + if (!frame)
|
| + return;
|
| +
|
| + mojo::ScopedMessagePipeHandle handle(it->second);
|
| + pending_render_frame_connects_.erase(it);
|
| + frame->BindServiceRegistry(handle.Pass());
|
| }
|
|
|
| void RenderThreadImpl::RemoveRoute(int32 routing_id) {
|
| @@ -702,6 +744,15 @@ void RenderThreadImpl::RemoveEmbeddedWorkerRoute(int32 routing_id) {
|
| }
|
| }
|
|
|
| +void RenderThreadImpl::RegisterPendingRenderFrameConnect(
|
| + int routing_id,
|
| + mojo::ScopedMessagePipeHandle handle) {
|
| + std::pair<std::map<int, mojo::MessagePipeHandle>::iterator, bool> result =
|
| + pending_render_frame_connects_.insert(
|
| + std::make_pair(routing_id, handle.release()));
|
| + CHECK(result.second) << "Inserting a duplicate item.";
|
| +}
|
| +
|
| int RenderThreadImpl::GenerateRoutingID() {
|
| int routing_id = MSG_ROUTING_NONE;
|
| Send(new ViewHostMsg_GenerateRoutingID(&routing_id));
|
| @@ -1094,6 +1145,10 @@ void RenderThreadImpl::ReleaseCachedFonts() {
|
|
|
| #endif // OS_WIN
|
|
|
| +ServiceRegistry* RenderThreadImpl::GetServiceRegistry() {
|
| + return service_registry();
|
| +}
|
| +
|
| bool RenderThreadImpl::IsMainThread() {
|
| return !!current();
|
| }
|
| @@ -1174,19 +1229,6 @@ scoped_ptr<gfx::GpuMemoryBuffer> RenderThreadImpl::AllocateGpuMemoryBuffer(
|
| .PassAs<gfx::GpuMemoryBuffer>();
|
| }
|
|
|
| -void RenderThreadImpl::ConnectToService(
|
| - const mojo::String& service_url,
|
| - const mojo::String& service_name,
|
| - mojo::ScopedMessagePipeHandle message_pipe,
|
| - const mojo::String& requestor_url) {
|
| - // TODO(darin): Invent some kind of registration system to use here.
|
| - if (service_url.To<base::StringPiece>() == kRendererService_WebUISetup) {
|
| - WebUISetupImpl::Bind(message_pipe.Pass());
|
| - } else {
|
| - NOTREACHED() << "Unknown service name";
|
| - }
|
| -}
|
| -
|
| void RenderThreadImpl::DoNotSuspendWebKitSharedTimer() {
|
| suspend_webkit_shared_timer_ = false;
|
| }
|
|
|