| Index: content/renderer/render_thread_impl.cc
|
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
|
| index a4a69750c51f0fc303897251e82d1d9a4c487398..a97cb9ce282dcb525ce6ba1f1f7bf6a4f7e339a6 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,44 @@ blink::WebGraphicsContext3D::Attributes GetOffscreenAttribs() {
|
| return attributes;
|
| }
|
|
|
| +void SetupEmbeddedWorkerOnWorkerThread(
|
| + mojo::InterfaceRequest<mojo::ServiceProvider> services,
|
| + mojo::ServiceProviderPtr exposed_services) {
|
| + ServiceWorkerContextClient* client =
|
| + ServiceWorkerContextClient::ThreadSpecificInstance();
|
| + // It is possible for client to be null if for some reason the worker died
|
| + // before this call made it to the worker thread. In that case just do
|
| + // nothing and let mojo close the connection.
|
| + if (!client)
|
| + return;
|
| + 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,
|
| @@ -807,6 +847,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, "");
|
| }
|
|
|