Chromium Code Reviews| Index: content/browser/service_worker/service_worker_dispatcher_host.cc |
| diff --git a/content/browser/service_worker/service_worker_dispatcher_host.cc b/content/browser/service_worker/service_worker_dispatcher_host.cc |
| index dece0b82aacb0d213b6e8f2b09e9ce9271583c1d..4a5e960e2055641782ad3961acd45f38d944d250 100644 |
| --- a/content/browser/service_worker/service_worker_dispatcher_host.cc |
| +++ b/content/browser/service_worker/service_worker_dispatcher_host.cc |
| @@ -100,8 +100,8 @@ bool ServiceWorkerDispatcherHost::OnMessageReceived( |
| OnProviderDestroyed) |
| IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetVersionId, |
| OnSetHostedVersionId) |
| - IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessage, |
| - OnPostMessage) |
| + IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToWorker, |
| + OnPostMessageToWorker) |
| IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStarted, |
| OnWorkerStarted) |
| IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped, |
| @@ -143,6 +143,22 @@ void ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle( |
| handles_.AddWithID(handle.release(), handle_id); |
| } |
| +void ServiceWorkerDispatcherHost::UpdateMessagePorts( |
| + const std::vector<int>& message_port_ids, |
| + std::vector<int>* new_routing_ids) { |
| + DCHECK(new_routing_ids); |
| + new_routing_ids->clear(); |
| + new_routing_ids->resize(message_port_ids.size()); |
| + |
| + for (size_t i = 0; i < message_port_ids.size(); ++i) { |
|
marja
2014/05/06 16:34:30
This looks very similar to what WebContentsImpl::R
kinuko
2014/05/07 05:56:21
Done.
|
| + (*new_routing_ids)[i] = message_port_message_filter_->GetNextRoutingID(); |
| + MessagePortService::GetInstance()->UpdateMessagePort( |
| + message_port_ids[i], |
| + message_port_message_filter_, |
| + (*new_routing_ids)[i]); |
| + } |
| +} |
| + |
| void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( |
| int thread_id, |
| int request_id, |
| @@ -220,30 +236,26 @@ void ServiceWorkerDispatcherHost::OnUnregisterServiceWorker( |
| request_id)); |
| } |
| -void ServiceWorkerDispatcherHost::OnPostMessage( |
| +void ServiceWorkerDispatcherHost::OnPostMessageToWorker( |
| int handle_id, |
| const base::string16& message, |
| const std::vector<int>& sent_message_port_ids) { |
| if (!context_ || !ServiceWorkerUtils::IsFeatureEnabled()) |
| return; |
| - std::vector<int> new_routing_ids(sent_message_port_ids.size()); |
| - for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { |
| - new_routing_ids[i] = message_port_message_filter_->GetNextRoutingID(); |
| - MessagePortService::GetInstance()->UpdateMessagePort( |
| - sent_message_port_ids[i], |
| - message_port_message_filter_, |
| - new_routing_ids[i]); |
| - } |
| - |
| ServiceWorkerHandle* handle = handles_.Lookup(handle_id); |
| if (!handle) { |
| BadMessageReceived(); |
| return; |
| } |
| + std::vector<int> new_routing_ids; |
| + UpdateMessagePorts(sent_message_port_ids, &new_routing_ids); |
| + |
| handle->version()->SendMessage( |
| - ServiceWorkerMsg_Message(message, sent_message_port_ids, new_routing_ids), |
| + ServiceWorkerMsg_MessageToWorker(message, |
| + sent_message_port_ids, |
| + new_routing_ids), |
| base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| } |