| 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 66256cd9bc63d3908e33ffc3cd8e125e666824f6..1c9f725fc8ecc8526be74c45ad2e823cf56cc1f7 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -591,6 +591,35 @@ void ServiceWorkerVersion::DispatchCrossOriginConnectEvent(
|
| }
|
| }
|
|
|
| +void ServiceWorkerVersion::DispatchCrossOriginMessageEvent(
|
| + const CrossOriginServiceWorkerClient& client,
|
| + const base::string16& message,
|
| + const std::vector<int>& sent_message_port_ids,
|
| + const StatusCallback& callback) {
|
| + // Unlike in the case of DispatchMessageEvent, here the caller is assumed to
|
| + // have already put all the sent message ports on hold. So no need to do that
|
| + // here again.
|
| +
|
| + if (running_status() != RUNNING) {
|
| + // Schedule calling this method after starting the worker.
|
| + StartWorker(base::Bind(
|
| + &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), callback,
|
| + base::Bind(&self::DispatchCrossOriginMessageEvent,
|
| + weak_factory_.GetWeakPtr(), client, message,
|
| + sent_message_port_ids, callback)));
|
| + return;
|
| + }
|
| +
|
| + MessagePortMessageFilter* filter =
|
| + embedded_worker_->message_port_message_filter();
|
| + std::vector<int> new_routing_ids;
|
| + filter->UpdateMessagePortsWithNewRoutes(sent_message_port_ids,
|
| + &new_routing_ids);
|
| + ServiceWorkerStatusCode status =
|
| + embedded_worker_->SendMessage(ServiceWorkerMsg_CrossOriginMessageToWorker(
|
| + client, message, sent_message_port_ids, new_routing_ids));
|
| + RunSoon(base::Bind(callback, status));
|
| +}
|
| void ServiceWorkerVersion::AddControllee(
|
| ServiceWorkerProviderHost* provider_host) {
|
| DCHECK(!ContainsKey(controllee_map_, provider_host));
|
|
|