• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 blink {
14 
15 class ExecutionContext;
16 class ScriptState;
17 class ScriptValue;
18 
19 // Created for each ExtendableEvent instance.
20 class WaitUntilObserver FINAL : public GarbageCollectedFinalized<WaitUntilObserver>, public ContextLifecycleObserver {
21 public:
22     enum EventType {
23         Activate,
24         Install
25     };
26 
27     static WaitUntilObserver* create(ExecutionContext*, EventType, int eventID);
28 
29     // Must be called before and after dispatching the event.
30     void willDispatchEvent();
31     void didDispatchEvent();
32 
33     // Observes the promise and delays calling the continuation until
34     // the given promise is resolved or rejected.
35     void waitUntil(ScriptState*, const ScriptValue&);
36 
trace(Visitor *)37     void trace(Visitor*) { }
38 
39 private:
40     class ThenFunction;
41 
42     WaitUntilObserver(ExecutionContext*, EventType, int eventID);
43 
44     void reportError(const ScriptValue&);
45 
46     void incrementPendingActivity();
47     void decrementPendingActivity();
48 
49     EventType m_type;
50     int m_eventID;
51     int m_pendingActivity;
52     bool m_hasError;
53 };
54 
55 } // namespace blink
56 
57 #endif // WaitUntilObserver_h
58