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 30d9fd5a0a1b0ae5ce39b581c24c49d385544d4a..ed09f30e1c3d2ea6ed3e1f348bc2fa3e543bfa1d 100644 |
--- a/content/browser/service_worker/service_worker_version.cc |
+++ b/content/browser/service_worker/service_worker_version.cc |
@@ -7,6 +7,7 @@ |
#include "base/command_line.h" |
#include "base/stl_util.h" |
#include "base/strings/string16.h" |
+#include "content/browser/message_port_message_filter.h" |
#include "content/browser/service_worker/embedded_worker_instance.h" |
#include "content/browser/service_worker/embedded_worker_registry.h" |
#include "content/browser/service_worker/service_worker_context_core.h" |
@@ -247,6 +248,30 @@ void ServiceWorkerVersion::SendMessage( |
RunSoon(base::Bind(callback, status)); |
} |
+void ServiceWorkerVersion::DispatchMessageEvent( |
+ const base::string16& message, |
+ const std::vector<int>& sent_message_port_ids, |
+ const StatusCallback& callback) { |
+ if (running_status() != RUNNING) { |
+ // Schedule calling this method after starting the worker. |
+ StartWorker(base::Bind( |
+ &RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), callback, |
+ base::Bind(&self::DispatchMessageEvent, weak_factory_.GetWeakPtr(), |
+ 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_MessageToWorker( |
+ message, sent_message_port_ids, new_routing_ids)); |
+ RunSoon(base::Bind(callback, status)); |
+} |
+ |
void ServiceWorkerVersion::DispatchInstallEvent( |
int active_version_id, |
const StatusCallback& callback) { |