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 RespondWithObserver_h 6 #define RespondWithObserver_h 7 8 #include "core/dom/ContextLifecycleObserver.h" 9 #include "platform/heap/Handle.h" 10 #include "wtf/Forward.h" 11 #include "wtf/RefCounted.h" 12 13 namespace blink { 14 15 class ExceptionState; 16 class ExecutionContext; 17 class Response; 18 class ScriptState; 19 class ScriptValue; 20 21 // This class observes the service worker's handling of a FetchEvent and 22 // notifies the client. 23 class RespondWithObserver FINAL : public GarbageCollectedFinalized<RespondWithObserver>, public ContextLifecycleObserver { 24 public: 25 static RespondWithObserver* create(ExecutionContext*, int eventID); 26 27 virtual void contextDestroyed() OVERRIDE; 28 29 void didDispatchEvent(); 30 31 // Observes the promise and delays calling didHandleFetchEvent() until the 32 // given promise is resolved or rejected. 33 void respondWith(ScriptState*, const ScriptValue&, ExceptionState&); 34 35 void responseWasRejected(); 36 void responseWasFulfilled(const ScriptValue&); 37 38 void trace(Visitor*) { } 39 40 private: 41 class ThenFunction; 42 43 RespondWithObserver(ExecutionContext*, int eventID); 44 45 int m_eventID; 46 47 enum State { Initial, Pending, Done }; 48 State m_state; 49 }; 50 51 } // namespace blink 52 53 #endif // RespondWithObserver_h 54