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

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

Issue 224733014: Introduce ServiceWorkerHandle for tracking WebServiceWorkerImpl reference (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/browser/message_port_message_filter.h" 8 #include "content/browser/message_port_message_filter.h"
9 #include "content/browser/message_port_service.h" 9 #include "content/browser/message_port_service.h"
10 #include "content/browser/service_worker/embedded_worker_registry.h" 10 #include "content/browser/service_worker/embedded_worker_registry.h"
11 #include "content/browser/service_worker/service_worker_context_core.h" 11 #include "content/browser/service_worker/service_worker_context_core.h"
12 #include "content/browser/service_worker/service_worker_context_wrapper.h" 12 #include "content/browser/service_worker/service_worker_context_wrapper.h"
13 #include "content/browser/service_worker/service_worker_handle.h"
13 #include "content/browser/service_worker/service_worker_registration.h" 14 #include "content/browser/service_worker/service_worker_registration.h"
14 #include "content/browser/service_worker/service_worker_utils.h" 15 #include "content/browser/service_worker/service_worker_utils.h"
15 #include "content/common/service_worker/embedded_worker_messages.h" 16 #include "content/common/service_worker/embedded_worker_messages.h"
16 #include "content/common/service_worker/service_worker_messages.h" 17 #include "content/common/service_worker/service_worker_messages.h"
17 #include "ipc/ipc_message_macros.h" 18 #include "ipc/ipc_message_macros.h"
18 #include "third_party/WebKit/public/platform/WebServiceWorkerError.h" 19 #include "third_party/WebKit/public/platform/WebServiceWorkerError.h"
19 #include "url/gurl.h" 20 #include "url/gurl.h"
20 21
21 using blink::WebServiceWorkerError; 22 using blink::WebServiceWorkerError;
22 23
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetVersionId, 94 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SetVersionId,
94 OnSetHostedVersionId) 95 OnSetHostedVersionId)
95 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessage, 96 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessage,
96 OnPostMessage) 97 OnPostMessage)
97 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStarted, 98 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStarted,
98 OnWorkerStarted) 99 OnWorkerStarted)
99 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped, 100 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_WorkerStopped,
100 OnWorkerStopped) 101 OnWorkerStopped)
101 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_SendMessageToBrowser, 102 IPC_MESSAGE_HANDLER(EmbeddedWorkerHostMsg_SendMessageToBrowser,
102 OnSendMessageToBrowser) 103 OnSendMessageToBrowser)
104 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ServiceWorkerObjectDestroyed,
105 OnServiceWorkerObjectDestroyed)
103 IPC_MESSAGE_UNHANDLED(handled = false) 106 IPC_MESSAGE_UNHANDLED(handled = false)
104 IPC_END_MESSAGE_MAP() 107 IPC_END_MESSAGE_MAP()
105 108
106 return handled; 109 return handled;
107 } 110 }
108 111
112 int ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle(
113 scoped_ptr<ServiceWorkerHandle> handle) {
114 return handles_.Add(handle.release());
115 }
116
109 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( 117 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
110 int thread_id, 118 int thread_id,
111 int request_id, 119 int request_id,
112 int provider_id, 120 int provider_id,
113 const GURL& pattern, 121 const GURL& pattern,
114 const GURL& script_url) { 122 const GURL& script_url) {
115 if (!context_ || !ServiceWorkerUtils::IsFeatureEnabled()) { 123 if (!context_ || !ServiceWorkerUtils::IsFeatureEnabled()) {
116 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 124 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
117 thread_id, 125 thread_id,
118 request_id, 126 request_id,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 std::vector<int> new_routing_ids(sent_message_port_ids.size()); 203 std::vector<int> new_routing_ids(sent_message_port_ids.size());
196 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { 204 for (size_t i = 0; i < sent_message_port_ids.size(); ++i) {
197 new_routing_ids[i] = message_port_message_filter_->GetNextRoutingID(); 205 new_routing_ids[i] = message_port_message_filter_->GetNextRoutingID();
198 MessagePortService::GetInstance()->UpdateMessagePort( 206 MessagePortService::GetInstance()->UpdateMessagePort(
199 sent_message_port_ids[i], 207 sent_message_port_ids[i],
200 message_port_message_filter_, 208 message_port_message_filter_,
201 new_routing_ids[i]); 209 new_routing_ids[i]);
202 } 210 }
203 211
204 // TODO(kinuko,michaeln): Make sure we keep the version that has 212 // TODO(kinuko,michaeln): Make sure we keep the version that has
205 // corresponding WebServiceWorkerImpl alive. 213 // corresponding WebServiceWorkerImpl alive.
michaeln 2014/04/08 01:21:41 and by switching to handle_id as input, takes care
kinuko 2014/04/08 08:43:31 Done.
206 ServiceWorkerVersion* version = context_->GetLiveVersion(version_id); 214 ServiceWorkerVersion* version = context_->GetLiveVersion(version_id);
207 if (!version) 215 if (!version)
208 return; 216 return;
209 217
210 version->SendMessage( 218 version->SendMessage(
211 ServiceWorkerMsg_Message(message, sent_message_port_ids, new_routing_ids), 219 ServiceWorkerMsg_Message(message, sent_message_port_ids, new_routing_ids),
212 base::Bind(&NoOpStatusCallback)); 220 base::Bind(&NoOpStatusCallback));
213 } 221 }
214 222
215 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) { 223 void ServiceWorkerDispatcherHost::OnProviderCreated(int provider_id) {
216 if (!context_) 224 if (!context_)
217 return; 225 return;
218 if (context_->GetProviderHost(render_process_id_, provider_id)) { 226 if (context_->GetProviderHost(render_process_id_, provider_id)) {
219 BadMessageReceived(); 227 BadMessageReceived();
220 return; 228 return;
221 } 229 }
222 scoped_ptr<ServiceWorkerProviderHost> provider_host( 230 scoped_ptr<ServiceWorkerProviderHost> provider_host(
223 new ServiceWorkerProviderHost( 231 new ServiceWorkerProviderHost(
224 render_process_id_, provider_id, context_)); 232 render_process_id_, provider_id, context_, this));
225 context_->AddProviderHost(provider_host.Pass()); 233 context_->AddProviderHost(provider_host.Pass());
226 } 234 }
227 235
228 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) { 236 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) {
229 if (!context_) 237 if (!context_)
230 return; 238 return;
231 if (!context_->GetProviderHost(render_process_id_, provider_id)) { 239 if (!context_->GetProviderHost(render_process_id_, provider_id)) {
232 BadMessageReceived(); 240 BadMessageReceived();
233 return; 241 return;
234 } 242 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 return; 276 return;
269 } 277 }
270 } 278 }
271 279
272 void ServiceWorkerDispatcherHost::RegistrationComplete( 280 void ServiceWorkerDispatcherHost::RegistrationComplete(
273 int thread_id, 281 int thread_id,
274 int request_id, 282 int request_id,
275 ServiceWorkerStatusCode status, 283 ServiceWorkerStatusCode status,
276 int64 registration_id, 284 int64 registration_id,
277 int64 version_id) { 285 int64 version_id) {
286 if (!context_)
287 return;
288
278 if (status != SERVICE_WORKER_OK) { 289 if (status != SERVICE_WORKER_OK) {
279 SendRegistrationError(thread_id, request_id, status); 290 SendRegistrationError(thread_id, request_id, status);
280 return; 291 return;
281 } 292 }
282 293
294 ServiceWorkerVersion* version = context_->GetLiveVersion(version_id);
295 DCHECK(version);
296 DCHECK_EQ(registration_id, version->registration_id());
297 int handle_id = RegisterServiceWorkerHandle(
298 ServiceWorkerHandle::Create(context_, this, version));
283 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( 299 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
284 thread_id, request_id, registration_id, version_id)); 300 thread_id, request_id, handle_id, version_id));
285 } 301 }
286 302
287 void ServiceWorkerDispatcherHost::OnWorkerStarted( 303 void ServiceWorkerDispatcherHost::OnWorkerStarted(
288 int thread_id, int embedded_worker_id) { 304 int thread_id, int embedded_worker_id) {
289 if (!context_) 305 if (!context_)
290 return; 306 return;
291 context_->embedded_worker_registry()->OnWorkerStarted( 307 context_->embedded_worker_registry()->OnWorkerStarted(
292 render_process_id_, thread_id, embedded_worker_id); 308 render_process_id_, thread_id, embedded_worker_id);
293 } 309 }
294 310
295 void ServiceWorkerDispatcherHost::OnWorkerStopped(int embedded_worker_id) { 311 void ServiceWorkerDispatcherHost::OnWorkerStopped(int embedded_worker_id) {
296 if (!context_) 312 if (!context_)
297 return; 313 return;
298 context_->embedded_worker_registry()->OnWorkerStopped( 314 context_->embedded_worker_registry()->OnWorkerStopped(
299 render_process_id_, embedded_worker_id); 315 render_process_id_, embedded_worker_id);
300 } 316 }
301 317
302 void ServiceWorkerDispatcherHost::OnSendMessageToBrowser( 318 void ServiceWorkerDispatcherHost::OnSendMessageToBrowser(
303 int embedded_worker_id, 319 int embedded_worker_id,
304 int request_id, 320 int request_id,
305 const IPC::Message& message) { 321 const IPC::Message& message) {
306 if (!context_) 322 if (!context_)
307 return; 323 return;
308 context_->embedded_worker_registry()->OnSendMessageToBrowser( 324 context_->embedded_worker_registry()->OnSendMessageToBrowser(
309 embedded_worker_id, request_id, message); 325 embedded_worker_id, request_id, message);
310 } 326 }
311 327
328 void ServiceWorkerDispatcherHost::OnServiceWorkerObjectDestroyed(
329 int handle_id) {
330 handles_.Remove(handle_id);
331 }
332
312 void ServiceWorkerDispatcherHost::UnregistrationComplete( 333 void ServiceWorkerDispatcherHost::UnregistrationComplete(
313 int thread_id, 334 int thread_id,
314 int request_id, 335 int request_id,
315 ServiceWorkerStatusCode status) { 336 ServiceWorkerStatusCode status) {
316 if (status != SERVICE_WORKER_OK) { 337 if (status != SERVICE_WORKER_OK) {
317 SendRegistrationError(thread_id, request_id, status); 338 SendRegistrationError(thread_id, request_id, status);
318 return; 339 return;
319 } 340 }
320 341
321 Send(new ServiceWorkerMsg_ServiceWorkerUnregistered(thread_id, request_id)); 342 Send(new ServiceWorkerMsg_ServiceWorkerUnregistered(thread_id, request_id));
322 } 343 }
323 344
324 void ServiceWorkerDispatcherHost::SendRegistrationError( 345 void ServiceWorkerDispatcherHost::SendRegistrationError(
325 int thread_id, 346 int thread_id,
326 int request_id, 347 int request_id,
327 ServiceWorkerStatusCode status) { 348 ServiceWorkerStatusCode status) {
328 base::string16 error_message; 349 base::string16 error_message;
329 blink::WebServiceWorkerError::ErrorType error_type; 350 blink::WebServiceWorkerError::ErrorType error_type;
330 GetServiceWorkerRegistrationStatusResponse( 351 GetServiceWorkerRegistrationStatusResponse(
331 status, &error_type, &error_message); 352 status, &error_type, &error_message);
332 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 353 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
333 thread_id, request_id, error_type, error_message)); 354 thread_id, request_id, error_type, error_message));
334 } 355 }
335 356
336 } // namespace content 357 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698