Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2950)

Unified Diff: content/renderer/render_thread_impl.cc

Issue 1221503003: Add a mojo ServiceRegistry to embedded workers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add comment Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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, "");
}

Powered by Google App Engine
This is Rietveld 408576698