| 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 a6cec8299002053ef0018c94dae0d65ad23e16bd..8481f3a6167c58ead5f5a161621f4be202280915 100644
|
| --- a/content/renderer/service_worker/service_worker_context_client.cc
|
| +++ b/content/renderer/service_worker/service_worker_context_client.cc
|
| @@ -18,6 +18,7 @@
|
| #include "content/child/notifications/notification_data_conversions.h"
|
| #include "content/child/request_extra_data.h"
|
| #include "content/child/service_worker/service_worker_dispatcher.h"
|
| +#include "content/child/service_worker/service_worker_handle_reference.h"
|
| #include "content/child/service_worker/service_worker_network_provider.h"
|
| #include "content/child/service_worker/service_worker_provider_context.h"
|
| #include "content/child/service_worker/service_worker_registration_handle_reference.h"
|
| @@ -739,13 +740,33 @@ void ServiceWorkerContextClient::OnExtendableMessageEvent(
|
| int request_id,
|
| const base::string16& message,
|
| const std::vector<TransferredMessagePort>& sent_message_ports,
|
| - const std::vector<int>& new_routing_ids) {
|
| + const std::vector<int>& new_routing_ids,
|
| + const ExtendableMessageEventSource& source) {
|
| TRACE_EVENT0("ServiceWorker",
|
| "ServiceWorkerContextClient::OnExtendableMessageEvent");
|
| blink::WebMessagePortChannelArray ports =
|
| WebMessagePortChannelImpl::CreatePorts(
|
| sent_message_ports, new_routing_ids, main_thread_task_runner_);
|
| - proxy_->dispatchExtendableMessageEvent(request_id, message, ports);
|
| +
|
| + if (source.client_info.IsValid()) {
|
| + blink::WebServiceWorkerClientInfo web_client =
|
| + ToWebServiceWorkerClientInfo(source.client_info);
|
| + proxy_->dispatchExtendableMessageEvent(request_id, message, ports,
|
| + web_client);
|
| + return;
|
| + }
|
| +
|
| + DCHECK(source.service_worker_info.IsValid());
|
| + scoped_ptr<ServiceWorkerHandleReference> handle =
|
| + ServiceWorkerHandleReference::Adopt(source.service_worker_info,
|
| + sender_.get());
|
| + ServiceWorkerDispatcher* dispatcher =
|
| + ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(
|
| + sender_.get(), main_thread_task_runner_.get());
|
| + scoped_refptr<WebServiceWorkerImpl> worker =
|
| + dispatcher->GetOrCreateServiceWorker(std::move(handle));
|
| + proxy_->dispatchExtendableMessageEvent(
|
| + request_id, message, ports, WebServiceWorkerImpl::CreateHandle(worker));
|
| }
|
|
|
| void ServiceWorkerContextClient::OnInstallEvent(int request_id) {
|
|
|