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 8a155a4a97573649ff0b2cbbe22ec434219c72cc..027a6e66bd4dc0b361ed237cc9d4bcc2f2135012 100644 |
| --- a/content/renderer/render_thread_impl.cc |
| +++ b/content/renderer/render_thread_impl.cc |
| @@ -67,6 +67,7 @@ |
| #include "content/common/gpu/gpu_process_launch_causes.h" |
| #include "content/common/render_frame_setup.mojom.h" |
| #include "content/common/resource_messages.h" |
| +#include "content/common/service_worker/embedded_worker_setup.mojom.h" |
| #include "content/common/view_messages.h" |
| #include "content/common/worker_messages.h" |
| #include "content/public/common/content_constants.h" |
| @@ -110,6 +111,7 @@ |
| #include "content/renderer/renderer_blink_platform_impl.h" |
| #include "content/renderer/scheduler/resource_dispatch_throttler.h" |
| #include "content/renderer/service_worker/embedded_worker_dispatcher.h" |
| +#include "content/renderer/service_worker/service_worker_context_client.h" |
| #include "content/renderer/service_worker/service_worker_context_message_filter.h" |
| #include "content/renderer/shared_worker/embedded_shared_worker_stub.h" |
| #include "gin/public/debug.h" |
| @@ -377,6 +379,40 @@ blink::WebGraphicsContext3D::Attributes GetOffscreenAttribs() { |
| return attributes; |
| } |
| +void SetupEmbeddedWorkerOnWorkerThread( |
| + mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| + mojo::ServiceProviderPtr exposed_services) { |
| + ServiceWorkerContextClient* client = |
| + ServiceWorkerContextClient::ThreadSpecificInstance(); |
| + DCHECK(client); |
|
kinuko
2015/07/08 08:32:41
It feels it's possible to end up with null client
|
| + client->BindServiceRegistry(services.Pass(), exposed_services.Pass()); |
| +} |
| + |
| +class EmbeddedWorkerSetupImpl : public EmbeddedWorkerSetup { |
| + public: |
| + explicit EmbeddedWorkerSetupImpl( |
| + mojo::InterfaceRequest<EmbeddedWorkerSetup> request) |
| + : binding_(this, request.Pass()) {} |
| + |
| + void ExchangeServiceProviders( |
| + int32_t thread_id, |
| + mojo::InterfaceRequest<mojo::ServiceProvider> services, |
| + mojo::ServiceProviderPtr exposed_services) override { |
| + WorkerTaskRunner::Instance()->GetTaskRunnerFor(thread_id)->PostTask( |
| + FROM_HERE, |
| + base::Bind(&SetupEmbeddedWorkerOnWorkerThread, base::Passed(&services), |
| + base::Passed(&exposed_services))); |
| + } |
| + |
| + private: |
| + mojo::StrongBinding<EmbeddedWorkerSetup> binding_; |
| +}; |
| + |
| +void CreateEmbeddedWorkerSetup( |
| + mojo::InterfaceRequest<EmbeddedWorkerSetup> request) { |
| + new EmbeddedWorkerSetupImpl(request.Pass()); |
| +} |
| + |
| } // namespace |
| class RasterWorkerPool : public base::SequencedTaskRunner, |
| @@ -785,6 +821,8 @@ void RenderThreadImpl::Init() { |
| service_registry()->AddService<RenderFrameSetup>( |
| base::Bind(CreateRenderFrameSetup)); |
| + service_registry()->AddService<EmbeddedWorkerSetup>( |
| + base::Bind(CreateEmbeddedWorkerSetup)); |
| TRACE_EVENT_END_ETW("RenderThreadImpl::Init", 0, ""); |
| } |