Home | History | Annotate | Download | only in service_worker
      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