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

Unified Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 2313653002: ServiceWorker: Exchange InterfaceProviders when starting worker thread (Closed)
Patch Set: Indent Created 4 years, 3 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/service_worker/service_worker_context_client.cc
diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc
index bbb0b982f8f2a227abea46ece45c88492524a639..7e4723135aa7c751217eaba4486884aa70116e28 100644
--- a/content/renderer/service_worker/service_worker_context_client.cc
+++ b/content/renderer/service_worker/service_worker_context_client.cc
@@ -205,7 +205,9 @@ struct ServiceWorkerContextClient::WorkerContextData {
SyncEventCallbacksMap sync_event_callbacks;
shell::InterfaceRegistry interface_registry;
- shell::InterfaceProvider remote_interfaces;
+
+ // Reference to a browser-side object corresponding to EmbeddedWorkerInstance
+ mojom::EmbeddedWorkerInstancePtr embedded_worker_host;
base::ThreadChecker thread_checker;
base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory;
@@ -223,7 +225,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
const GURL& service_worker_scope,
const GURL& script_url,
int worker_devtools_agent_route_id,
- std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker)
+ std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker_client)
: embedded_worker_id_(embedded_worker_id),
service_worker_version_id_(service_worker_version_id),
service_worker_scope_(service_worker_scope),
@@ -232,7 +234,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient(
sender_(ChildThreadImpl::current()->thread_safe_sender()),
main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()),
proxy_(nullptr),
- embedded_worker_(std::move(embedded_worker)) {
+ embedded_worker_client_(std::move(embedded_worker_client)) {
TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker",
"ServiceWorkerContextClient::StartingWorkerContext",
this);
@@ -287,7 +289,6 @@ void ServiceWorkerContextClient::BindInterfaceProviders(
shell::mojom::InterfaceProviderRequest request,
shell::mojom::InterfaceProviderPtr remote_interfaces) {
context_->interface_registry.Bind(std::move(request));
- context_->remote_interfaces.Bind(std::move(remote_interfaces));
}
blink::WebURL ServiceWorkerContextClient::scope() const {
@@ -388,6 +389,12 @@ void ServiceWorkerContextClient::workerContextStarted(
// Register Mojo interfaces.
context_->interface_registry.AddInterface(
base::Bind(&BackgroundSyncClientImpl::Create));
+ if (embedded_worker_client_) {
+ embedded_worker_client_->GetInterfaceOnMainThread(
+ GetProxy(&context_->embedded_worker_host),
+ base::Bind(&ServiceWorkerContextClient::OnDidGetEmbeddedWorkerInstance,
+ GetWeakPtr()));
+ }
SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs);
@@ -445,11 +452,11 @@ void ServiceWorkerContextClient::workerContextDestroyed() {
DCHECK(g_worker_client_tls.Pointer()->Get() == NULL);
// Check if mojo is enabled
- if (embedded_worker_) {
+ if (embedded_worker_client_) {
main_thread_task_runner_->PostTask(
FROM_HERE,
base::Bind(&EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted,
- base::Passed(std::move(embedded_worker_))));
+ base::Passed(std::move(embedded_worker_client_))));
return;
}
@@ -1068,6 +1075,13 @@ void ServiceWorkerContextClient::OnPing() {
Send(new ServiceWorkerHostMsg_Pong(GetRoutingID()));
}
+void ServiceWorkerContextClient::OnDidGetEmbeddedWorkerInstance() {
nhiroki 2016/09/06 01:38:05 DCHECK(worker_task_runner_->RunsTasksOnCurrentThre
shimazu 2016/09/21 07:00:51 Done.
+ shell::mojom::InterfaceProviderPtr interfaces;
+ context_->interface_registry.Bind(GetProxy(&interfaces));
+ context_->embedded_worker_host->AttachClientInterfaceProvider(
+ std::move(interfaces));
+}
+
base::WeakPtr<ServiceWorkerContextClient>
ServiceWorkerContextClient::GetWeakPtr() {
DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());

Powered by Google App Engine
This is Rietveld 408576698