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

Side by Side Diff: content/child/service_worker/service_worker_dispatcher.cc

Issue 1318953002: [ServiceWorker] Use appopriate type parameters for WebCallbacks (2/3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
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/child/service_worker/service_worker_dispatcher.h" 5 #include "content/child/service_worker/service_worker_dispatcher.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/single_thread_task_runner.h" 8 #include "base/single_thread_task_runner.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/thread_task_runner_handle.h" 10 #include "base/thread_task_runner_handle.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 WebServiceWorkerRegistrationCallbacks* callbacks) { 112 WebServiceWorkerRegistrationCallbacks* callbacks) {
113 DCHECK(callbacks); 113 DCHECK(callbacks);
114 114
115 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars() || 115 if (pattern.possibly_invalid_spec().size() > GetMaxURLChars() ||
116 script_url.possibly_invalid_spec().size() > GetMaxURLChars()) { 116 script_url.possibly_invalid_spec().size() > GetMaxURLChars()) {
117 scoped_ptr<WebServiceWorkerRegistrationCallbacks> 117 scoped_ptr<WebServiceWorkerRegistrationCallbacks>
118 owned_callbacks(callbacks); 118 owned_callbacks(callbacks);
119 std::string error_message(kServiceWorkerRegisterErrorPrefix); 119 std::string error_message(kServiceWorkerRegisterErrorPrefix);
120 error_message += "The provided scriptURL or scope is too long."; 120 error_message += "The provided scriptURL or scope is too long.";
121 callbacks->onError( 121 callbacks->onError(
122 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity, 122 WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity,
123 blink::WebString::fromUTF8(error_message))); 123 blink::WebString::fromUTF8(error_message)));
124 return; 124 return;
125 } 125 }
126 126
127 int request_id = pending_registration_callbacks_.Add(callbacks); 127 int request_id = pending_registration_callbacks_.Add(callbacks);
128 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker", 128 TRACE_EVENT_ASYNC_BEGIN2("ServiceWorker",
129 "ServiceWorkerDispatcher::RegisterServiceWorker", 129 "ServiceWorkerDispatcher::RegisterServiceWorker",
130 request_id, 130 request_id,
131 "Scope", pattern.spec(), 131 "Scope", pattern.spec(),
132 "Script URL", script_url.spec()); 132 "Script URL", script_url.spec());
133 thread_safe_sender_->Send(new ServiceWorkerHostMsg_RegisterServiceWorker( 133 thread_safe_sender_->Send(new ServiceWorkerHostMsg_RegisterServiceWorker(
(...skipping 19 matching lines...) Expand all
153 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", 153 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker",
154 "ServiceWorkerDispatcher::UnregisterServiceWorker", 154 "ServiceWorkerDispatcher::UnregisterServiceWorker",
155 request_id, "Registration ID", registration_id); 155 request_id, "Registration ID", registration_id);
156 thread_safe_sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker( 156 thread_safe_sender_->Send(new ServiceWorkerHostMsg_UnregisterServiceWorker(
157 CurrentWorkerId(), request_id, provider_id, registration_id)); 157 CurrentWorkerId(), request_id, provider_id, registration_id));
158 } 158 }
159 159
160 void ServiceWorkerDispatcher::GetRegistration( 160 void ServiceWorkerDispatcher::GetRegistration(
161 int provider_id, 161 int provider_id,
162 const GURL& document_url, 162 const GURL& document_url,
163 WebServiceWorkerRegistrationCallbacks* callbacks) { 163 WebServiceWorkerGetRegistrationCallbacks* callbacks) {
164 DCHECK(callbacks); 164 DCHECK(callbacks);
165 165
166 if (document_url.possibly_invalid_spec().size() > GetMaxURLChars()) { 166 if (document_url.possibly_invalid_spec().size() > GetMaxURLChars()) {
167 scoped_ptr<WebServiceWorkerRegistrationCallbacks> 167 scoped_ptr<WebServiceWorkerGetRegistrationCallbacks> owned_callbacks(
168 owned_callbacks(callbacks); 168 callbacks);
169 std::string error_message(kServiceWorkerGetRegistrationErrorPrefix); 169 std::string error_message(kServiceWorkerGetRegistrationErrorPrefix);
170 error_message += "The provided documentURL is too long."; 170 error_message += "The provided documentURL is too long.";
171 callbacks->onError( 171 callbacks->onError(
172 new WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity, 172 WebServiceWorkerError(WebServiceWorkerError::ErrorTypeSecurity,
173 blink::WebString::fromUTF8(error_message))); 173 blink::WebString::fromUTF8(error_message)));
174 return; 174 return;
175 } 175 }
176 176
177 int request_id = pending_get_registration_callbacks_.Add(callbacks); 177 int request_id = pending_get_registration_callbacks_.Add(callbacks);
178 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", 178 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker",
179 "ServiceWorkerDispatcher::GetRegistration", 179 "ServiceWorkerDispatcher::GetRegistration",
180 request_id, 180 request_id,
181 "Document URL", document_url.spec()); 181 "Document URL", document_url.spec());
182 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistration( 182 thread_safe_sender_->Send(new ServiceWorkerHostMsg_GetRegistration(
183 CurrentWorkerId(), request_id, provider_id, document_url)); 183 CurrentWorkerId(), request_id, provider_id, document_url));
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 "OnRegistered"); 379 "OnRegistered");
380 TRACE_EVENT_ASYNC_END0("ServiceWorker", 380 TRACE_EVENT_ASYNC_END0("ServiceWorker",
381 "ServiceWorkerDispatcher::RegisterServiceWorker", 381 "ServiceWorkerDispatcher::RegisterServiceWorker",
382 request_id); 382 request_id);
383 WebServiceWorkerRegistrationCallbacks* callbacks = 383 WebServiceWorkerRegistrationCallbacks* callbacks =
384 pending_registration_callbacks_.Lookup(request_id); 384 pending_registration_callbacks_.Lookup(request_id);
385 DCHECK(callbacks); 385 DCHECK(callbacks);
386 if (!callbacks) 386 if (!callbacks)
387 return; 387 return;
388 388
389 callbacks->onSuccess(AdoptRegistration(info, attrs).release()); 389 callbacks->onSuccess(
390 blink::adoptWebPtr(AdoptRegistration(info, attrs).release()));
390 pending_registration_callbacks_.Remove(request_id); 391 pending_registration_callbacks_.Remove(request_id);
391 } 392 }
392 393
393 void ServiceWorkerDispatcher::OnUpdated(int thread_id, int request_id) { 394 void ServiceWorkerDispatcher::OnUpdated(int thread_id, int request_id) {
394 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", 395 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker",
395 "ServiceWorkerDispatcher::UpdateServiceWorker", 396 "ServiceWorkerDispatcher::UpdateServiceWorker",
396 request_id, "OnUpdated"); 397 request_id, "OnUpdated");
397 TRACE_EVENT_ASYNC_END0("ServiceWorker", 398 TRACE_EVENT_ASYNC_END0("ServiceWorker",
398 "ServiceWorkerDispatcher::UpdateServiceWorker", 399 "ServiceWorkerDispatcher::UpdateServiceWorker",
399 request_id); 400 request_id);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 const ServiceWorkerRegistrationObjectInfo& info, 434 const ServiceWorkerRegistrationObjectInfo& info,
434 const ServiceWorkerVersionAttributes& attrs) { 435 const ServiceWorkerVersionAttributes& attrs) {
435 TRACE_EVENT_ASYNC_STEP_INTO0( 436 TRACE_EVENT_ASYNC_STEP_INTO0(
436 "ServiceWorker", 437 "ServiceWorker",
437 "ServiceWorkerDispatcher::GetRegistration", 438 "ServiceWorkerDispatcher::GetRegistration",
438 request_id, 439 request_id,
439 "OnDidGetRegistration"); 440 "OnDidGetRegistration");
440 TRACE_EVENT_ASYNC_END0("ServiceWorker", 441 TRACE_EVENT_ASYNC_END0("ServiceWorker",
441 "ServiceWorkerDispatcher::GetRegistration", 442 "ServiceWorkerDispatcher::GetRegistration",
442 request_id); 443 request_id);
443 WebServiceWorkerRegistrationCallbacks* callbacks = 444 WebServiceWorkerGetRegistrationCallbacks* callbacks =
444 pending_get_registration_callbacks_.Lookup(request_id); 445 pending_get_registration_callbacks_.Lookup(request_id);
445 DCHECK(callbacks); 446 DCHECK(callbacks);
446 if (!callbacks) 447 if (!callbacks)
447 return; 448 return;
448 449
449 scoped_ptr<WebServiceWorkerRegistrationImpl> registration; 450 scoped_ptr<WebServiceWorkerRegistrationImpl> registration;
450 if (info.handle_id != kInvalidServiceWorkerHandleId) 451 if (info.handle_id != kInvalidServiceWorkerHandleId)
451 registration = AdoptRegistration(info, attrs); 452 registration = AdoptRegistration(info, attrs);
452 453
453 callbacks->onSuccess(registration.release()); 454 callbacks->onSuccess(blink::adoptWebPtr(registration.release()));
454 pending_get_registration_callbacks_.Remove(request_id); 455 pending_get_registration_callbacks_.Remove(request_id);
455 } 456 }
456 457
457 void ServiceWorkerDispatcher::OnDidGetRegistrations( 458 void ServiceWorkerDispatcher::OnDidGetRegistrations(
458 int thread_id, 459 int thread_id,
459 int request_id, 460 int request_id,
460 const std::vector<ServiceWorkerRegistrationObjectInfo>& infos, 461 const std::vector<ServiceWorkerRegistrationObjectInfo>& infos,
461 const std::vector<ServiceWorkerVersionAttributes>& attrs) { 462 const std::vector<ServiceWorkerVersionAttributes>& attrs) {
462 TRACE_EVENT_ASYNC_STEP_INTO0( 463 TRACE_EVENT_ASYNC_STEP_INTO0(
463 "ServiceWorker", 464 "ServiceWorker",
464 "ServiceWorkerDispatcher::GetRegistrations", 465 "ServiceWorkerDispatcher::GetRegistrations",
465 request_id, 466 request_id,
466 "OnDidGetRegistrations"); 467 "OnDidGetRegistrations");
467 TRACE_EVENT_ASYNC_END0("ServiceWorker", 468 TRACE_EVENT_ASYNC_END0("ServiceWorker",
468 "ServiceWorkerDispatcher::GetRegistrations", 469 "ServiceWorkerDispatcher::GetRegistrations",
469 request_id); 470 request_id);
470 471
471 WebServiceWorkerGetRegistrationsCallbacks* callbacks = 472 WebServiceWorkerGetRegistrationsCallbacks* callbacks =
472 pending_get_registrations_callbacks_.Lookup(request_id); 473 pending_get_registrations_callbacks_.Lookup(request_id);
473 DCHECK(callbacks); 474 DCHECK(callbacks);
474 if (!callbacks) 475 if (!callbacks)
475 return; 476 return;
476 477
477 typedef blink::WebVector<blink::WebServiceWorkerRegistration*> 478 typedef blink::WebVector<blink::WebServiceWorkerRegistration*>
478 WebServiceWorkerRegistrationArray; 479 WebServiceWorkerRegistrationArray;
479 WebServiceWorkerRegistrationArray* registrations = 480 scoped_ptr<WebServiceWorkerRegistrationArray> registrations(
480 new WebServiceWorkerRegistrationArray(infos.size()); 481 new WebServiceWorkerRegistrationArray(infos.size()));
481 for (size_t i = 0; i < infos.size(); ++i) { 482 for (size_t i = 0; i < infos.size(); ++i) {
482 if (infos[i].handle_id != kInvalidServiceWorkerHandleId) { 483 if (infos[i].handle_id != kInvalidServiceWorkerHandleId) {
483 ServiceWorkerRegistrationObjectInfo info(infos[i]); 484 ServiceWorkerRegistrationObjectInfo info(infos[i]);
484 ServiceWorkerVersionAttributes attr(attrs[i]); 485 ServiceWorkerVersionAttributes attr(attrs[i]);
485 (*registrations)[i] = AdoptRegistration(info, attr).release(); 486 (*registrations)[i] = AdoptRegistration(info, attr).release();
486 } 487 }
487 } 488 }
488 489
489 callbacks->onSuccess(registrations); 490 callbacks->onSuccess(blink::adoptWebPtr(registrations.release()));
490 pending_get_registrations_callbacks_.Remove(request_id); 491 pending_get_registrations_callbacks_.Remove(request_id);
491 } 492 }
492 493
493 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady( 494 void ServiceWorkerDispatcher::OnDidGetRegistrationForReady(
494 int thread_id, 495 int thread_id,
495 int request_id, 496 int request_id,
496 const ServiceWorkerRegistrationObjectInfo& info, 497 const ServiceWorkerRegistrationObjectInfo& info,
497 const ServiceWorkerVersionAttributes& attrs) { 498 const ServiceWorkerVersionAttributes& attrs) {
498 TRACE_EVENT_ASYNC_STEP_INTO0( 499 TRACE_EVENT_ASYNC_STEP_INTO0(
499 "ServiceWorker", 500 "ServiceWorker",
500 "ServiceWorkerDispatcher::GetRegistrationForReady", 501 "ServiceWorkerDispatcher::GetRegistrationForReady",
501 request_id, 502 request_id,
502 "OnDidGetRegistrationForReady"); 503 "OnDidGetRegistrationForReady");
503 TRACE_EVENT_ASYNC_END0("ServiceWorker", 504 TRACE_EVENT_ASYNC_END0("ServiceWorker",
504 "ServiceWorkerDispatcher::GetRegistrationForReady", 505 "ServiceWorkerDispatcher::GetRegistrationForReady",
505 request_id); 506 request_id);
506 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks = 507 WebServiceWorkerGetRegistrationForReadyCallbacks* callbacks =
507 get_for_ready_callbacks_.Lookup(request_id); 508 get_for_ready_callbacks_.Lookup(request_id);
508 DCHECK(callbacks); 509 DCHECK(callbacks);
509 if (!callbacks) 510 if (!callbacks)
510 return; 511 return;
511 512
512 callbacks->onSuccess(AdoptRegistration(info, attrs).release()); 513 callbacks->onSuccess(
514 blink::adoptWebPtr(AdoptRegistration(info, attrs).release()));
513 get_for_ready_callbacks_.Remove(request_id); 515 get_for_ready_callbacks_.Remove(request_id);
514 } 516 }
515 517
516 void ServiceWorkerDispatcher::OnRegistrationError( 518 void ServiceWorkerDispatcher::OnRegistrationError(
517 int thread_id, 519 int thread_id,
518 int request_id, 520 int request_id,
519 WebServiceWorkerError::ErrorType error_type, 521 WebServiceWorkerError::ErrorType error_type,
520 const base::string16& message) { 522 const base::string16& message) {
521 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", 523 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker",
522 "ServiceWorkerDispatcher::RegisterServiceWorker", 524 "ServiceWorkerDispatcher::RegisterServiceWorker",
523 request_id, 525 request_id,
524 "OnRegistrationError"); 526 "OnRegistrationError");
525 TRACE_EVENT_ASYNC_END0("ServiceWorker", 527 TRACE_EVENT_ASYNC_END0("ServiceWorker",
526 "ServiceWorkerDispatcher::RegisterServiceWorker", 528 "ServiceWorkerDispatcher::RegisterServiceWorker",
527 request_id); 529 request_id);
528 WebServiceWorkerRegistrationCallbacks* callbacks = 530 WebServiceWorkerRegistrationCallbacks* callbacks =
529 pending_registration_callbacks_.Lookup(request_id); 531 pending_registration_callbacks_.Lookup(request_id);
530 DCHECK(callbacks); 532 DCHECK(callbacks);
531 if (!callbacks) 533 if (!callbacks)
532 return; 534 return;
533 535
534 callbacks->onError(new WebServiceWorkerError(error_type, message)); 536 callbacks->onError(WebServiceWorkerError(error_type, message));
535 pending_registration_callbacks_.Remove(request_id); 537 pending_registration_callbacks_.Remove(request_id);
536 } 538 }
537 539
538 void ServiceWorkerDispatcher::OnUpdateError( 540 void ServiceWorkerDispatcher::OnUpdateError(
539 int thread_id, 541 int thread_id,
540 int request_id, 542 int request_id,
541 WebServiceWorkerError::ErrorType error_type, 543 WebServiceWorkerError::ErrorType error_type,
542 const base::string16& message) { 544 const base::string16& message) {
543 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker", 545 TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker",
544 "ServiceWorkerDispatcher::UpdateServiceWorker", 546 "ServiceWorkerDispatcher::UpdateServiceWorker",
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 "OnGetRegistrationError"); 593 "OnGetRegistrationError");
592 TRACE_EVENT_ASYNC_END0("ServiceWorker", 594 TRACE_EVENT_ASYNC_END0("ServiceWorker",
593 "ServiceWorkerDispatcher::GetRegistration", 595 "ServiceWorkerDispatcher::GetRegistration",
594 request_id); 596 request_id);
595 WebServiceWorkerGetRegistrationCallbacks* callbacks = 597 WebServiceWorkerGetRegistrationCallbacks* callbacks =
596 pending_get_registration_callbacks_.Lookup(request_id); 598 pending_get_registration_callbacks_.Lookup(request_id);
597 DCHECK(callbacks); 599 DCHECK(callbacks);
598 if (!callbacks) 600 if (!callbacks)
599 return; 601 return;
600 602
601 callbacks->onError(new WebServiceWorkerError(error_type, message)); 603 callbacks->onError(WebServiceWorkerError(error_type, message));
602 pending_get_registration_callbacks_.Remove(request_id); 604 pending_get_registration_callbacks_.Remove(request_id);
603 } 605 }
604 606
605 void ServiceWorkerDispatcher::OnGetRegistrationsError( 607 void ServiceWorkerDispatcher::OnGetRegistrationsError(
606 int thread_id, 608 int thread_id,
607 int request_id, 609 int request_id,
608 WebServiceWorkerError::ErrorType error_type, 610 WebServiceWorkerError::ErrorType error_type,
609 const base::string16& message) { 611 const base::string16& message) {
610 TRACE_EVENT_ASYNC_STEP_INTO0( 612 TRACE_EVENT_ASYNC_STEP_INTO0(
611 "ServiceWorker", 613 "ServiceWorker",
612 "ServiceWorkerDispatcher::GetRegistrations", 614 "ServiceWorkerDispatcher::GetRegistrations",
613 request_id, 615 request_id,
614 "OnGetRegistrationsError"); 616 "OnGetRegistrationsError");
615 TRACE_EVENT_ASYNC_END0("ServiceWorker", 617 TRACE_EVENT_ASYNC_END0("ServiceWorker",
616 "ServiceWorkerDispatcher::GetRegistrations", 618 "ServiceWorkerDispatcher::GetRegistrations",
617 request_id); 619 request_id);
618 WebServiceWorkerGetRegistrationsCallbacks* callbacks = 620 WebServiceWorkerGetRegistrationsCallbacks* callbacks =
619 pending_get_registrations_callbacks_.Lookup(request_id); 621 pending_get_registrations_callbacks_.Lookup(request_id);
620 DCHECK(callbacks); 622 DCHECK(callbacks);
621 if (!callbacks) 623 if (!callbacks)
622 return; 624 return;
623 625
624 callbacks->onError(new WebServiceWorkerError(error_type, message)); 626 callbacks->onError(WebServiceWorkerError(error_type, message));
625 pending_get_registrations_callbacks_.Remove(request_id); 627 pending_get_registrations_callbacks_.Remove(request_id);
626 } 628 }
627 629
628 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged( 630 void ServiceWorkerDispatcher::OnServiceWorkerStateChanged(
629 int thread_id, 631 int thread_id,
630 int handle_id, 632 int handle_id,
631 blink::WebServiceWorkerState state) { 633 blink::WebServiceWorkerState state) {
632 TRACE_EVENT2("ServiceWorker", 634 TRACE_EVENT2("ServiceWorker",
633 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged", 635 "ServiceWorkerDispatcher::OnServiceWorkerStateChanged",
634 "Thread ID", thread_id, 636 "Thread ID", thread_id,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 // AddServiceWorkerRegistration. 785 // AddServiceWorkerRegistration.
784 scoped_ptr<WebServiceWorkerRegistrationImpl> registration( 786 scoped_ptr<WebServiceWorkerRegistrationImpl> registration(
785 new WebServiceWorkerRegistrationImpl(handle_ref.Pass())); 787 new WebServiceWorkerRegistrationImpl(handle_ref.Pass()));
786 registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle)); 788 registration->SetInstalling(GetServiceWorker(attrs.installing, adopt_handle));
787 registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle)); 789 registration->SetWaiting(GetServiceWorker(attrs.waiting, adopt_handle));
788 registration->SetActive(GetServiceWorker(attrs.active, adopt_handle)); 790 registration->SetActive(GetServiceWorker(attrs.active, adopt_handle));
789 return registration.Pass(); 791 return registration.Pass();
790 } 792 }
791 793
792 } // namespace content 794 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698