1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTRATION_HANDLE_H_ 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTRATION_HANDLE_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/weak_ptr.h" 11 #include "content/browser/service_worker/service_worker_registration.h" 12 #include "content/browser/service_worker/service_worker_version.h" 13 #include "content/common/service_worker/service_worker_types.h" 14 15 namespace content { 16 17 class ServiceWorkerContextCore; 18 class ServiceWorkerDispatcherHost; 19 class ServiceWorkerVersion; 20 21 // Roughly Corresponds to one ServiceWorkerRegistration object in the renderer 22 // process (WebServiceWorkerRegistrationImpl). 23 // Has references to the corresponding ServiceWorkerRegistration and 24 // ServiceWorkerVersions (therefore they're guaranteed to be alive while this 25 // handle is around). 26 class ServiceWorkerRegistrationHandle 27 : public ServiceWorkerRegistration::Listener { 28 public: 29 CONTENT_EXPORT ServiceWorkerRegistrationHandle( 30 base::WeakPtr<ServiceWorkerContextCore> context, 31 ServiceWorkerDispatcherHost* dispatcher_host, 32 int provider_id, 33 ServiceWorkerRegistration* registration); 34 virtual ~ServiceWorkerRegistrationHandle(); 35 36 ServiceWorkerRegistrationObjectInfo GetObjectInfo(); 37 ServiceWorkerObjectInfo CreateServiceWorkerHandleAndPass( 38 ServiceWorkerVersion* version); 39 40 bool HasNoRefCount() const { return ref_count_ <= 0; } 41 void IncrementRefCount(); 42 void DecrementRefCount(); 43 44 int provider_id() const { return provider_id_; } 45 int handle_id() const { return handle_id_; } 46 47 ServiceWorkerRegistration* registration() { return registration_.get(); } 48 49 private: 50 // ServiceWorkerRegistration::Listener overrides. 51 virtual void OnVersionAttributesChanged( 52 ServiceWorkerRegistration* registration, 53 ChangedVersionAttributesMask changed_mask, 54 const ServiceWorkerRegistrationInfo& info) OVERRIDE; 55 virtual void OnRegistrationFailed( 56 ServiceWorkerRegistration* registration) OVERRIDE; 57 virtual void OnUpdateFound( 58 ServiceWorkerRegistration* registration) OVERRIDE; 59 60 // Sets the corresponding version field to the given version or if the given 61 // version is NULL, clears the field. 62 void SetVersionAttributes( 63 ServiceWorkerVersion* installing_version, 64 ServiceWorkerVersion* waiting_version, 65 ServiceWorkerVersion* active_version); 66 67 // Clears all version fields. 68 void ClearVersionAttributes(); 69 70 base::WeakPtr<ServiceWorkerContextCore> context_; 71 ServiceWorkerDispatcherHost* dispatcher_host_; 72 const int provider_id_; 73 const int handle_id_; 74 int ref_count_; // Created with 1. 75 76 scoped_refptr<ServiceWorkerRegistration> registration_; 77 scoped_refptr<ServiceWorkerVersion> installing_version_; 78 scoped_refptr<ServiceWorkerVersion> waiting_version_; 79 scoped_refptr<ServiceWorkerVersion> active_version_; 80 81 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRegistrationHandle); 82 }; 83 84 } // namespace content 85 86 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REGISTRATION_HANDLE_H_ 87