Index: content/browser/service_worker/service_worker_version.cc |
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc |
index ac715540893d8faa1012dba205e30c1e5403d2e5..e8ae4a5e3c41c8083966b3eb5675c53819065a05 100644 |
--- a/content/browser/service_worker/service_worker_version.cc |
+++ b/content/browser/service_worker/service_worker_version.cc |
@@ -541,6 +541,19 @@ void ServiceWorkerVersion::RunAfterStartWorker( |
error_callback, task)); |
} |
+void ServiceWorkerVersion::DispatchExtendableMessageEvent( |
+ const base::string16& message, |
+ const std::vector<TransferredMessagePort>& sent_message_ports, |
+ const StatusCallback& callback) { |
+ for (const TransferredMessagePort& port : sent_message_ports) |
+ MessagePortService::GetInstance()->HoldMessages(port.id); |
+ RunAfterStartWorker( |
+ base::Bind( |
+ &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker, |
+ weak_factory_.GetWeakPtr(), message, sent_message_ports, callback), |
+ base::Bind(&RunErrorMessageCallback, sent_message_ports, callback)); |
+} |
+ |
void ServiceWorkerVersion::DispatchMessageEvent( |
const base::string16& message, |
const std::vector<TransferredMessagePort>& sent_message_ports, |
@@ -953,6 +966,24 @@ void ServiceWorkerVersion::OnStartSentAndScriptEvaluated( |
} |
} |
+void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker( |
+ const base::string16& message, |
+ const std::vector<TransferredMessagePort>& sent_message_ports, |
+ const StatusCallback& callback) { |
+ int request_id = |
+ StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback); |
+ |
+ MessagePortMessageFilter* filter = |
+ embedded_worker_->message_port_message_filter(); |
+ std::vector<int> new_routing_ids; |
+ filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids); |
+ |
+ DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>( |
+ request_id, |
+ ServiceWorkerMsg_ExtendableMessageEvent( |
+ request_id, message, sent_message_ports, new_routing_ids)); |
+} |
+ |
void ServiceWorkerVersion::OnGetClients( |
int request_id, |
const ServiceWorkerClientQueryOptions& options) { |