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 WaitUntilObserver_h 6 #define WaitUntilObserver_h 7 8 #include "core/dom/ContextLifecycleObserver.h" 9 #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h" 10 #include "wtf/Forward.h" 11 #include "wtf/RefCounted.h" 12 13 namespace WebCore { 14 15 class ExecutionContext; 16 class ScriptState; 17 class ScriptValue; 18 19 // Created for each InstallPhaseEvent instance. 20 class WaitUntilObserver FINAL : 21 public ContextLifecycleObserver, 22 public RefCounted<WaitUntilObserver> { 23 public: 24 enum EventType { 25 Activate, 26 Install 27 }; 28 29 static PassRefPtr<WaitUntilObserver> create(ExecutionContext*, EventType, int eventID); 30 31 ~WaitUntilObserver(); 32 33 // Must be called before and after dispatching the event. 34 void willDispatchEvent(); 35 void didDispatchEvent(); 36 37 // Observes the promise and delays calling the continuation until 38 // the given promise is resolved or rejected. 39 void waitUntil(ScriptState*, const ScriptValue&); 40 41 private: 42 class ThenFunction; 43 44 WaitUntilObserver(ExecutionContext*, EventType, int eventID); 45 46 void reportError(const ScriptValue&); 47 48 void incrementPendingActivity(); 49 void decrementPendingActivity(); 50 51 EventType m_type; 52 int m_eventID; 53 int m_pendingActivity; 54 bool m_hasError; 55 }; 56 57 } // namespace WebCore 58 59 #endif // WaitUntilObserver_h 60