Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: third_party/WebKit/Source/modules/serviceworkers/WaitUntilObserver.h

Issue 2877543003: [ServiceWorker] Allow waitUntil to be called multiple times asynchronously (Closed)
Patch Set: Address comments from shimazu@ Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WaitUntilObserver_h 5 #ifndef WaitUntilObserver_h
6 #define WaitUntilObserver_h 6 #define WaitUntilObserver_h
7 7
8 #include "modules/ModulesExport.h" 8 #include "modules/ModulesExport.h"
9 #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h" 9 #include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
10 #include "platform/Timer.h" 10 #include "platform/Timer.h"
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 // all waitUntil promises to settle. 47 // all waitUntil promises to settle.
48 void DidDispatchEvent(bool event_dispatch_failed); 48 void DidDispatchEvent(bool event_dispatch_failed);
49 49
50 // Observes the promise and delays calling the continuation until 50 // Observes the promise and delays calling the continuation until
51 // the given promise is resolved or rejected. 51 // the given promise is resolved or rejected.
52 void WaitUntil(ScriptState*, ScriptPromise, ExceptionState&); 52 void WaitUntil(ScriptState*, ScriptPromise, ExceptionState&);
53 53
54 // These methods can be called when the lifecycle of ExtendableEvent 54 // These methods can be called when the lifecycle of ExtendableEvent
55 // observed by this WaitUntilObserver should be extended by other reason 55 // observed by this WaitUntilObserver should be extended by other reason
56 // than ExtendableEvent.waitUntil. 56 // than ExtendableEvent.waitUntil.
57 // Note: There is no need to call decrementPendingActivity() after the context 57 // Note: There is no need to call DecrementPendingPromise() after the context
58 // is being destroyed. 58 // is being destroyed.
59 void IncrementPendingActivity(); 59 void IncrementPendingPromise();
60 void DecrementPendingActivity(); 60 void DecrementPendingPromise();
61 61
62 DECLARE_VIRTUAL_TRACE(); 62 DECLARE_VIRTUAL_TRACE();
63 63
64 private: 64 private:
65 friend class InternalsServiceWorker; 65 friend class InternalsServiceWorker;
66 class ThenFunction; 66 class ThenFunction;
67 67
68 enum class EventDispatchState { 68 enum class EventDispatchState {
69 // Event dispatch has not yet finished. 69 // Event dispatch has not yet started.
70 kInitial, 70 kInitial,
71 // Event dispatch has started but not yet finished.
72 kDispatching,
71 // Event dispatch completed. There may still be outstanding waitUntil 73 // Event dispatch completed. There may still be outstanding waitUntil
72 // promises that must settle before notifying ServiceWorkerGlobalScopeClient 74 // promises that must settle before notifying ServiceWorkerGlobalScopeClient
73 // that the event finished. 75 // that the event finished.
74 kCompleted, 76 kDispatched,
75 // Event dispatch failed. Any outstanding waitUntil promises are ignored. 77 // Event dispatch failed. Any outstanding waitUntil promises are ignored.
76 kFailed 78 kFailed
77 }; 79 };
78 80
79 WaitUntilObserver(ExecutionContext*, EventType, int event_id); 81 WaitUntilObserver(ExecutionContext*, EventType, int event_id);
80 82
81 // Called when a promise passed to a waitUntil() call that is associated with 83 // Called when a promise passed to a waitUntil() call that is associated with
82 // this observer was fulfilled. 84 // this observer was fulfilled.
83 void OnPromiseFulfilled(); 85 void OnPromiseFulfilled();
84 // Called when a promise passed to a waitUntil() call that is associated with 86 // Called when a promise passed to a waitUntil() call that is associated with
85 // this observer was rejected. 87 // this observer was rejected.
86 void OnPromiseRejected(); 88 void OnPromiseRejected();
87 89
88 void ConsumeWindowInteraction(TimerBase*); 90 void ConsumeWindowInteraction(TimerBase*);
89 91
92 void MaybeCompleteEvent();
93
90 Member<ExecutionContext> execution_context_; 94 Member<ExecutionContext> execution_context_;
91 EventType type_; 95 EventType type_;
92 int event_id_; 96 int event_id_;
93 int pending_activity_ = 0; 97 int pending_promise_ = 0;
falken 2017/05/24 08:24:18 pending_promises_
leonhsl(Using Gerrit) 2017/05/25 00:16:40 Done.
94 EventDispatchState event_dispatch_state_ = EventDispatchState::kInitial; 98 EventDispatchState event_dispatch_state_ = EventDispatchState::kInitial;
95 bool has_rejected_promise_ = false; 99 bool has_rejected_promise_ = false;
96 double event_dispatch_time_ = 0; 100 double event_dispatch_time_ = 0;
97 TaskRunnerTimer<WaitUntilObserver> consume_window_interaction_timer_; 101 TaskRunnerTimer<WaitUntilObserver> consume_window_interaction_timer_;
98 }; 102 };
99 103
100 } // namespace blink 104 } // namespace blink
101 105
102 #endif // WaitUntilObserver_h 106 #endif // WaitUntilObserver_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698