Chromium Code Reviews| Index: content/renderer/render_thread_impl.cc |
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
| index 3f1be5e03e5178292a065b699ccc6d052cb89874..ddda7317160f033ffcebc5393b1b22fe0cadd514 100644 |
| --- a/content/renderer/render_thread_impl.cc |
| +++ b/content/renderer/render_thread_impl.cc |
| @@ -347,8 +347,9 @@ class FrameFactoryImpl : public mojom::FrameFactory { |
| RenderFrameImpl* frame = RenderFrameImpl::FromRoutingID(frame_routing_id); |
| // We can receive a GetServiceProviderForFrame message for a frame not yet |
| - // created due to a race between the message and a ViewMsg_New IPC that |
| - // triggers creation of the RenderFrame we want. |
| + // created due to a race between the message and a |
| + // mojom::Renderer::CreateView IPC that triggers creation of the RenderFrame |
| + // we want. |
|
ncarter (slow)
2016/09/29 16:49:32
Is this race still actually possible?
Ken Rockot(use gerrit already)
2016/09/30 00:08:57
Yeah, since this pipe is not associated with the c
|
| if (!frame) { |
| RenderThreadImpl::current()->RegisterPendingFrameCreate( |
| frame_routing_id, std::move(frame_request), std::move(frame_host)); |
| @@ -605,7 +606,8 @@ RenderThreadImpl::RenderThreadImpl( |
| .Build()), |
| renderer_scheduler_(std::move(scheduler)), |
| time_zone_monitor_binding_(this), |
| - categorized_worker_pool_(new CategorizedWorkerPool()) { |
| + categorized_worker_pool_(new CategorizedWorkerPool()), |
| + renderer_binding_(this) { |
| Init(resource_task_queue); |
| } |
| @@ -622,7 +624,8 @@ RenderThreadImpl::RenderThreadImpl( |
| renderer_scheduler_(std::move(scheduler)), |
| time_zone_monitor_binding_(this), |
| main_message_loop_(std::move(main_message_loop)), |
| - categorized_worker_pool_(new CategorizedWorkerPool()) { |
| + categorized_worker_pool_(new CategorizedWorkerPool()), |
| + renderer_binding_(this) { |
| scoped_refptr<base::SingleThreadTaskRunner> test_task_counter; |
| Init(test_task_counter); |
| } |
| @@ -736,6 +739,10 @@ void RenderThreadImpl::Init( |
| GetContentClient()->renderer()->RenderThreadStarted(); |
| + GetAssociatedInterfaceRegistry()->AddInterface( |
| + base::Bind(&RenderThreadImpl::OnRendererInterfaceRequest, |
| + base::Unretained(this))); |
| + |
| InitSkiaEventTracer(); |
| base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( |
| skia::SkiaMemoryDumpProvider::GetInstance(), "Skia", nullptr); |
| @@ -1562,6 +1569,12 @@ base::WaitableEvent* RenderThreadImpl::GetShutdownEvent() { |
| return ChildProcess::current()->GetShutDownEvent(); |
| } |
| +void RenderThreadImpl::OnAssociatedInterfaceRequest( |
| + const std::string& name, |
| + mojo::ScopedInterfaceEndpointHandle handle) { |
| + associated_interfaces_.BindRequest(name, std::move(handle)); |
| +} |
| + |
| bool RenderThreadImpl::IsGpuRasterizationForced() { |
| return is_gpu_rasterization_forced_; |
| } |
| @@ -1721,7 +1734,6 @@ bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) { |
| IPC_MESSAGE_HANDLER(FrameMsg_NewFrameProxy, OnCreateNewFrameProxy) |
| // TODO(port): removed from render_messages_internal.h; |
| // is there a new non-windows message I should add here? |
| - IPC_MESSAGE_HANDLER(ViewMsg_New, OnCreateNewView) |
| IPC_MESSAGE_HANDLER(ViewMsg_NetworkConnectionChanged, |
| OnNetworkConnectionChanged) |
| IPC_MESSAGE_HANDLER(WorkerProcessMsg_CreateWorker, OnCreateNewSharedWorker) |
| @@ -1808,12 +1820,6 @@ void RenderThreadImpl::OnCreateNewFrameProxy( |
| replicated_state); |
| } |
| -void RenderThreadImpl::OnCreateNewView(const ViewMsg_New_Params& params) { |
| - CompositorDependencies* compositor_deps = this; |
| - // When bringing in render_view, also bring in webkit's glue and jsbindings. |
| - RenderViewImpl::Create(compositor_deps, params, false); |
| -} |
| - |
| scoped_refptr<gpu::GpuChannelHost> RenderThreadImpl::EstablishGpuChannelSync() { |
| TRACE_EVENT0("gpu", "RenderThreadImpl::EstablishGpuChannelSync"); |
| @@ -1980,6 +1986,11 @@ RenderThreadImpl::CreateCompositorFrameSink( |
| std::move(worker_context_provider), std::move(frame_swap_message_queue))); |
| } |
| +AssociatedInterfaceRegistry* |
| +RenderThreadImpl::GetAssociatedInterfaceRegistry() { |
| + return &associated_interfaces_; |
| +} |
| + |
| std::unique_ptr<cc::SwapPromise> |
| RenderThreadImpl::RequestCopyOfOutputForLayoutTest( |
| int32_t routing_id, |
| @@ -2057,6 +2068,12 @@ void RenderThreadImpl::OnNetworkConnectionChanged( |
| NetConnectionTypeToWebConnectionType(type), max_bandwidth_mbps); |
| } |
| +void RenderThreadImpl::CreateView(mojom::CreateViewParamsPtr params) { |
| + CompositorDependencies* compositor_deps = this; |
| + // When bringing in render_view, also bring in webkit's glue and jsbindings. |
| + RenderViewImpl::Create(compositor_deps, *params, false); |
| +} |
| + |
| void RenderThreadImpl::OnTimeZoneChange(const std::string& zone_id) { |
| if (!blink_platform_impl_) |
| return; |
| @@ -2316,5 +2333,10 @@ void RenderThreadImpl::OnTrimMemoryImmediately() { |
| } |
| } |
| +void RenderThreadImpl::OnRendererInterfaceRequest( |
| + mojom::RendererAssociatedRequest request) { |
| + DCHECK(!renderer_binding_.is_bound()); |
| + renderer_binding_.Bind(std::move(request)); |
| +} |
| } // namespace content |