Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(615)

Side by Side Diff: content/browser/service_worker/service_worker_dispatcher_host.cc

Issue 246023007: Chromium-side plumbing for ServiceWorker -> Document postMessage (2/3) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: message port threading fix Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "content/browser/message_port_message_filter.h" 9 #include "content/browser/message_port_message_filter.h"
10 #include "content/browser/message_port_service.h" 10 #include "content/browser/message_port_service.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_RegisterServiceWorker, 93 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_RegisterServiceWorker,
94 OnRegisterServiceWorker) 94 OnRegisterServiceWorker)
95 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_UnregisterServiceWorker, 95 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_UnregisterServiceWorker,
96 OnUnregisterServiceWorker) 96 OnUnregisterServiceWorker)
97 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderCreated, 97 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderCreated,
98 OnProviderCreated) 98 OnProviderCreated)
99 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderDestroyed, 99 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ProviderDestroyed,
100 OnProviderDestroyed) 100 OnProviderDestroyed)
101 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetVersionId, 101 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetVersionId,
102 OnSetHostedVersionId) 102 OnSetHostedVersionId)
103 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessage, 103 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToWorker,
104 OnPostMessage) 104 OnPostMessageToWorker)
105 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerScriptLoaded, 105 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerScriptLoaded,
106 OnWorkerScriptLoaded) 106 OnWorkerScriptLoaded)
107 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerScriptLoadFailed, 107 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerScriptLoadFailed,
108 OnWorkerScriptLoadFailed) 108 OnWorkerScriptLoadFailed)
109 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStarted, 109 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStarted,
110 OnWorkerStarted) 110 OnWorkerStarted)
111 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped, 111 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped,
112 OnWorkerStopped) 112 OnWorkerStopped)
113 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_ReportException, 113 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_ReportException,
114 OnReportException) 114 OnReportException)
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 } 217 }
218 218
219 context_->UnregisterServiceWorker( 219 context_->UnregisterServiceWorker(
220 pattern, 220 pattern,
221 base::Bind(&ServiceWorkerDispatcherHost::UnregistrationComplete, 221 base::Bind(&ServiceWorkerDispatcherHost::UnregistrationComplete,
222 this, 222 this,
223 thread_id, 223 thread_id,
224 request_id)); 224 request_id));
225 } 225 }
226 226
227 void ServiceWorkerDispatcherHost::OnPostMessage( 227 void ServiceWorkerDispatcherHost::OnPostMessageToWorker(
228 int handle_id, 228 int handle_id,
229 const base::string16& message, 229 const base::string16& message,
230 const std::vector<int>& sent_message_port_ids) { 230 const std::vector<int>& sent_message_port_ids) {
231 if (!context_ || !ServiceWorkerUtils::IsFeatureEnabled()) 231 if (!context_ || !ServiceWorkerUtils::IsFeatureEnabled())
232 return; 232 return;
233 233
234 std::vector<int> new_routing_ids(sent_message_port_ids.size());
235 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
236 new_routing_ids[i] = message_port_message_filter_->GetNextRoutingID();
237 MessagePortService::GetInstance()->UpdateMessagePort(
238 sent_message_port_ids[i],
239 message_port_message_filter_,
240 new_routing_ids[i]);
241 }
242
243 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 234 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
244 if (!handle) { 235 if (!handle) {
245 BadMessageReceived(); 236 BadMessageReceived();
246 return; 237 return;
247 } 238 }
248 239
240 std::vector<int> new_routing_ids;
241 message_port_message_filter_->UpdateMessagePortsWithNewRoutes(
242 sent_message_port_ids, &new_routing_ids);
249 handle->version()->SendMessage( 243 handle->version()->SendMessage(
250 ServiceWorkerMsg_Message(message, sent_message_port_ids, new_routing_ids), 244 ServiceWorkerMsg_MessageToWorker(message,
245 sent_message_port_ids,
246 new_routing_ids),
251 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 247 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
252 } 248 }
253 249
254 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) { 250 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) {
255 if (!context_) 251 if (!context_)
256 return; 252 return;
257 if (context_->GetProviderHost(render_process_id_, provider_id)) { 253 if (context_->GetProviderHost(render_process_id_, provider_id)) {
258 BadMessageReceived(); 254 BadMessageReceived();
259 return; 255 return;
260 } 256 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 ServiceWorkerStatusCode status) { 405 ServiceWorkerStatusCode status) {
410 base::string16 error_message; 406 base::string16 error_message;
411 blink::WebServiceWorkerError::ErrorType error_type; 407 blink::WebServiceWorkerError::ErrorType error_type;
412 GetServiceWorkerRegistrationStatusResponse( 408 GetServiceWorkerRegistrationStatusResponse(
413 status, &error_type, &error_message); 409 status, &error_type, &error_message);
414 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 410 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
415 thread_id, request_id, error_type, error_message)); 411 thread_id, request_id, error_type, error_message));
416 } 412 }
417 413
418 } // namespace content 414 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698