Home | History | Annotate | Download | only in serviceworkers
      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 ServiceWorkerRegistration_h
      6 #define ServiceWorkerRegistration_h
      7 
      8 #include "core/dom/ActiveDOMObject.h"
      9 #include "core/events/EventTarget.h"
     10 #include "modules/serviceworkers/ServiceWorker.h"
     11 #include "public/platform/WebServiceWorkerRegistration.h"
     12 #include "public/platform/WebServiceWorkerRegistrationProxy.h"
     13 #include "wtf/OwnPtr.h"
     14 #include "wtf/PassOwnPtr.h"
     15 #include "wtf/PassRefPtr.h"
     16 #include "wtf/RefCounted.h"
     17 
     18 namespace blink {
     19 
     20 class ScriptPromise;
     21 class ScriptPromiseResolver;
     22 class ScriptState;
     23 class WebServiceWorkerProvider;
     24 
     25 class ServiceWorkerRegistration FINAL
     26     : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<ServiceWorkerRegistration>
     27     , public ActiveDOMObject
     28     , public EventTargetWithInlineData
     29     , public WebServiceWorkerRegistrationProxy {
     30     DEFINE_WRAPPERTYPEINFO();
     31     DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<ServiceWorkerRegistration>);
     32     WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(ServiceWorkerRegistration);
     33 public:
     34     // EventTarget overrides.
     35     virtual const AtomicString& interfaceName() const OVERRIDE;
     36     virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveDOMObject::executionContext(); }
     37 
     38     // WebServiceWorkerRegistrationProxy overrides.
     39     virtual void dispatchUpdateFoundEvent() OVERRIDE;
     40     virtual void setInstalling(WebServiceWorker*) OVERRIDE;
     41     virtual void setWaiting(WebServiceWorker*) OVERRIDE;
     42     virtual void setActive(WebServiceWorker*) OVERRIDE;
     43 
     44     // For CallbackPromiseAdapter.
     45     typedef WebServiceWorkerRegistration WebType;
     46     static ServiceWorkerRegistration* from(ExecutionContext*, WebType* registration);
     47     static ServiceWorkerRegistration* take(ScriptPromiseResolver*, WebType* registration);
     48     static void dispose(WebType* registration);
     49 
     50     PassRefPtrWillBeRawPtr<ServiceWorker> installing() { return m_installing.get(); }
     51     PassRefPtrWillBeRawPtr<ServiceWorker> waiting() { return m_waiting.get(); }
     52     PassRefPtrWillBeRawPtr<ServiceWorker> active() { return m_active.get(); }
     53 
     54     String scope() const;
     55 
     56     ScriptPromise unregister(ScriptState*);
     57 
     58     DEFINE_ATTRIBUTE_EVENT_LISTENER(updatefound);
     59 
     60     virtual void trace(Visitor*) OVERRIDE;
     61 
     62 private:
     63     static ServiceWorkerRegistration* getOrCreate(ExecutionContext*, WebServiceWorkerRegistration*);
     64     ServiceWorkerRegistration(ExecutionContext*, PassOwnPtr<WebServiceWorkerRegistration>);
     65 
     66     // ActiveDOMObject overrides.
     67     virtual bool hasPendingActivity() const OVERRIDE;
     68     virtual void stop() OVERRIDE;
     69 
     70     OwnPtr<WebServiceWorkerRegistration> m_outerRegistration;
     71     WebServiceWorkerProvider* m_provider;
     72     RefPtrWillBeMember<ServiceWorker> m_installing;
     73     RefPtrWillBeMember<ServiceWorker> m_waiting;
     74     RefPtrWillBeMember<ServiceWorker> m_active;
     75 
     76     bool m_stopped;
     77 };
     78 
     79 } // namespace blink
     80 
     81 #endif // ServiceWorkerRegistration_h
     82