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

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

Issue 825383004: ServiceWorker: Send state change events via SWProviderHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 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/browser/service_worker/service_worker_dispatcher_host.h" 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h"
6 6
7 #include "base/debug/trace_event.h" 7 #include "base/debug/trace_event.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/message_port_message_filter.h" 10 #include "content/browser/message_port_message_filter.h"
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 if (channel_ready_) { 208 if (channel_ready_) {
209 BrowserMessageFilter::Send(message); 209 BrowserMessageFilter::Send(message);
210 // Don't bother passing through Send()'s result: it's not reliable. 210 // Don't bother passing through Send()'s result: it's not reliable.
211 return true; 211 return true;
212 } 212 }
213 213
214 pending_messages_.push_back(message); 214 pending_messages_.push_back(message);
215 return true; 215 return true;
216 } 216 }
217 217
218 void ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle(
219 scoped_ptr<ServiceWorkerHandle> handle) {
220 int handle_id = handle->handle_id();
221 handles_.AddWithID(handle.release(), handle_id);
222 }
223
224 void ServiceWorkerDispatcherHost::RegisterServiceWorkerRegistrationHandle(
225 scoped_ptr<ServiceWorkerRegistrationHandle> handle) {
226 int handle_id = handle->handle_id();
227 registration_handles_.AddWithID(handle.release(), handle_id);
228 }
229
218 ServiceWorkerRegistrationHandle* 230 ServiceWorkerRegistrationHandle*
219 ServiceWorkerDispatcherHost::GetOrCreateRegistrationHandle( 231 ServiceWorkerDispatcherHost::GetOrCreateRegistrationHandle(
220 int provider_id, 232 base::WeakPtr<ServiceWorkerProviderHost> provider_host,
221 ServiceWorkerRegistration* registration) { 233 ServiceWorkerRegistration* registration) {
234 DCHECK(provider_host);
222 ServiceWorkerRegistrationHandle* handle = 235 ServiceWorkerRegistrationHandle* handle =
223 FindRegistrationHandle(provider_id, registration->id()); 236 FindRegistrationHandle(provider_host->provider_id(), registration->id());
224 if (handle) { 237 if (handle) {
225 handle->IncrementRefCount(); 238 handle->IncrementRefCount();
226 return handle; 239 return handle;
227 } 240 }
228 241
229 scoped_ptr<ServiceWorkerRegistrationHandle> new_handle( 242 scoped_ptr<ServiceWorkerRegistrationHandle> new_handle(
230 new ServiceWorkerRegistrationHandle( 243 new ServiceWorkerRegistrationHandle(
231 GetContext()->AsWeakPtr(), this, provider_id, registration)); 244 GetContext()->AsWeakPtr(), provider_host, registration));
232 handle = new_handle.get(); 245 handle = new_handle.get();
233 RegisterServiceWorkerRegistrationHandle(new_handle.Pass()); 246 RegisterServiceWorkerRegistrationHandle(new_handle.Pass());
234 return handle; 247 return handle;
235 } 248 }
236 249
237 ServiceWorkerObjectInfo
238 ServiceWorkerDispatcherHost::CreateAndRegisterServiceWorkerHandle(
239 ServiceWorkerVersion* version) {
240 ServiceWorkerObjectInfo info;
241 if (GetContext() && version) {
242 scoped_ptr<ServiceWorkerHandle> handle =
243 ServiceWorkerHandle::Create(GetContext()->AsWeakPtr(), this, version);
244 info = handle->GetObjectInfo();
245 RegisterServiceWorkerHandle(handle.Pass());
246 }
247 return info;
248 }
249
250 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker( 250 void ServiceWorkerDispatcherHost::OnRegisterServiceWorker(
251 int thread_id, 251 int thread_id,
252 int request_id, 252 int request_id,
253 int provider_id, 253 int provider_id,
254 const GURL& pattern, 254 const GURL& pattern,
255 const GURL& script_url) { 255 const GURL& script_url) {
256 TRACE_EVENT0("ServiceWorker", 256 TRACE_EVENT0("ServiceWorker",
257 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker"); 257 "ServiceWorkerDispatcherHost::OnRegisterServiceWorker");
258 if (!GetContext()) { 258 if (!GetContext()) {
259 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError( 259 Send(new ServiceWorkerMsg_ServiceWorkerRegistrationError(
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 DCHECK(handle); 565 DCHECK(handle);
566 if (handle->provider_id() == provider_id && handle->registration() && 566 if (handle->provider_id() == provider_id && handle->registration() &&
567 handle->registration()->id() == registration_id) { 567 handle->registration()->id() == registration_id) {
568 return handle; 568 return handle;
569 } 569 }
570 } 570 }
571 return NULL; 571 return NULL;
572 } 572 }
573 573
574 void ServiceWorkerDispatcherHost::GetRegistrationObjectInfoAndVersionAttributes( 574 void ServiceWorkerDispatcherHost::GetRegistrationObjectInfoAndVersionAttributes(
575 int provider_id, 575 base::WeakPtr<ServiceWorkerProviderHost> provider_host,
576 ServiceWorkerRegistration* registration, 576 ServiceWorkerRegistration* registration,
577 ServiceWorkerRegistrationObjectInfo* info, 577 ServiceWorkerRegistrationObjectInfo* info,
578 ServiceWorkerVersionAttributes* attrs) { 578 ServiceWorkerVersionAttributes* attrs) {
579 ServiceWorkerRegistrationHandle* handle = 579 ServiceWorkerRegistrationHandle* handle =
580 GetOrCreateRegistrationHandle(provider_id, registration); 580 GetOrCreateRegistrationHandle(provider_host, registration);
581 *info = handle->GetObjectInfo(); 581 *info = handle->GetObjectInfo();
582 582
583 attrs->installing = CreateAndRegisterServiceWorkerHandle( 583 attrs->installing =
584 registration->installing_version()); 584 provider_host->CreateAndRegisterServiceWorkerHandle(
585 attrs->waiting = CreateAndRegisterServiceWorkerHandle( 585 registration->installing_version());
586 registration->waiting_version()); 586 attrs->waiting =
587 attrs->active = CreateAndRegisterServiceWorkerHandle( 587 provider_host->CreateAndRegisterServiceWorkerHandle(
588 registration->active_version()); 588 registration->waiting_version());
589 attrs->active =
590 provider_host->CreateAndRegisterServiceWorkerHandle(
591 registration->active_version());
589 } 592 }
590 593
591 void ServiceWorkerDispatcherHost::RegistrationComplete( 594 void ServiceWorkerDispatcherHost::RegistrationComplete(
592 int thread_id, 595 int thread_id,
593 int provider_id, 596 int provider_id,
594 int request_id, 597 int request_id,
595 ServiceWorkerStatusCode status, 598 ServiceWorkerStatusCode status,
596 const std::string& status_message, 599 const std::string& status_message,
597 int64 registration_id) { 600 int64 registration_id) {
598 if (!GetContext()) 601 if (!GetContext())
599 return; 602 return;
600 603
604 ServiceWorkerProviderHost* provider_host =
605 GetContext()->GetProviderHost(render_process_id_, provider_id);
606 if (!provider_host)
607 return; // The provider has already been destroyed.
608
601 if (status != SERVICE_WORKER_OK) { 609 if (status != SERVICE_WORKER_OK) {
602 SendRegistrationError(thread_id, request_id, status, status_message); 610 SendRegistrationError(thread_id, request_id, status, status_message);
603 return; 611 return;
604 } 612 }
605 613
606 ServiceWorkerRegistration* registration = 614 ServiceWorkerRegistration* registration =
607 GetContext()->GetLiveRegistration(registration_id); 615 GetContext()->GetLiveRegistration(registration_id);
608 DCHECK(registration); 616 DCHECK(registration);
609 617
610 ServiceWorkerRegistrationObjectInfo info; 618 ServiceWorkerRegistrationObjectInfo info;
611 ServiceWorkerVersionAttributes attrs; 619 ServiceWorkerVersionAttributes attrs;
612 GetRegistrationObjectInfoAndVersionAttributes( 620 GetRegistrationObjectInfoAndVersionAttributes(
613 provider_id, registration, &info, &attrs); 621 provider_host->AsWeakPtr(), registration, &info, &attrs);
614 622
615 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( 623 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(
616 thread_id, request_id, info, attrs)); 624 thread_id, request_id, info, attrs));
617 TRACE_EVENT_ASYNC_END1("ServiceWorker", 625 TRACE_EVENT_ASYNC_END1("ServiceWorker",
618 "ServiceWorkerDispatcherHost::RegisterServiceWorker", 626 "ServiceWorkerDispatcherHost::RegisterServiceWorker",
619 request_id, 627 request_id,
620 "Registration ID", 628 "Registration ID",
621 registration_id); 629 registration_id);
622 } 630 }
623 631
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 TRACE_EVENT_ASYNC_END1("ServiceWorker", 833 TRACE_EVENT_ASYNC_END1("ServiceWorker",
826 "ServiceWorkerDispatcherHost::GetRegistration", 834 "ServiceWorkerDispatcherHost::GetRegistration",
827 request_id, 835 request_id,
828 "Registration ID", 836 "Registration ID",
829 registration.get() ? registration->id() 837 registration.get() ? registration->id()
830 : kInvalidServiceWorkerRegistrationId); 838 : kInvalidServiceWorkerRegistrationId);
831 839
832 if (!GetContext()) 840 if (!GetContext())
833 return; 841 return;
834 842
843 ServiceWorkerProviderHost* provider_host =
844 GetContext()->GetProviderHost(render_process_id_, provider_id);
845 if (!provider_host)
846 return; // The provider has already been destroyed.
847
835 if (status != SERVICE_WORKER_OK && status != SERVICE_WORKER_ERROR_NOT_FOUND) { 848 if (status != SERVICE_WORKER_OK && status != SERVICE_WORKER_ERROR_NOT_FOUND) {
836 SendGetRegistrationError(thread_id, request_id, status); 849 SendGetRegistrationError(thread_id, request_id, status);
837 return; 850 return;
838 } 851 }
839 852
840 ServiceWorkerRegistrationObjectInfo info; 853 ServiceWorkerRegistrationObjectInfo info;
841 ServiceWorkerVersionAttributes attrs; 854 ServiceWorkerVersionAttributes attrs;
842 if (status == SERVICE_WORKER_OK) { 855 if (status == SERVICE_WORKER_OK) {
843 DCHECK(registration.get()); 856 DCHECK(registration.get());
844 if (!registration->is_uninstalling()) { 857 if (!registration->is_uninstalling()) {
845 GetRegistrationObjectInfoAndVersionAttributes( 858 GetRegistrationObjectInfoAndVersionAttributes(
846 provider_id, registration.get(), &info, &attrs); 859 provider_host->AsWeakPtr(), registration.get(), &info, &attrs);
847 } 860 }
848 } 861 }
849 862
850 Send(new ServiceWorkerMsg_DidGetRegistration( 863 Send(new ServiceWorkerMsg_DidGetRegistration(
851 thread_id, request_id, info, attrs)); 864 thread_id, request_id, info, attrs));
852 } 865 }
853 866
854 void ServiceWorkerDispatcherHost::SendRegistrationError( 867 void ServiceWorkerDispatcherHost::SendRegistrationError(
855 int thread_id, 868 int thread_id,
856 int request_id, 869 int request_id,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) { 914 void ServiceWorkerDispatcherHost::OnTerminateWorker(int handle_id) {
902 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); 915 ServiceWorkerHandle* handle = handles_.Lookup(handle_id);
903 if (!handle) { 916 if (!handle) {
904 BadMessageReceived(); 917 BadMessageReceived();
905 return; 918 return;
906 } 919 }
907 handle->version()->StopWorker( 920 handle->version()->StopWorker(
908 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 921 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
909 } 922 }
910 923
911 void ServiceWorkerDispatcherHost::RegisterServiceWorkerHandle(
912 scoped_ptr<ServiceWorkerHandle> handle) {
913 int handle_id = handle->handle_id();
914 handles_.AddWithID(handle.release(), handle_id);
915 }
916
917 void ServiceWorkerDispatcherHost::RegisterServiceWorkerRegistrationHandle(
918 scoped_ptr<ServiceWorkerRegistrationHandle> handle) {
919 int handle_id = handle->handle_id();
920 registration_handles_.AddWithID(handle.release(), handle_id);
921 }
922
923 } // namespace content 924 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698