Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / serviceworkers / RespondWithObserver.h
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 ExecutionContext;
16 class Response;
17 class ScriptState;
18 class ScriptValue;
19
20 // This class observes the service worker's handling of a FetchEvent and
21 // notifies the client.
22 class RespondWithObserver FINAL : public ContextLifecycleObserver, public RefCounted<RespondWithObserver> {
23 public:
24     static PassRefPtr<RespondWithObserver> create(ExecutionContext*, int eventID);
25     ~RespondWithObserver();
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&);
34
35     void responseWasRejected();
36     void responseWasFulfilled(const ScriptValue&);
37
38 private:
39     class ThenFunction;
40
41     RespondWithObserver(ExecutionContext*, int eventID);
42
43     // Sends a response back to the client. The null response means to fallback
44     // to native.
45     void sendResponse(PassRefPtrWillBeRawPtr<Response>);
46
47     int m_eventID;
48
49     enum State { Initial, Pending, Done };
50     State m_state;
51 };
52
53 } // namespace blink
54
55 #endif // RespondWithObserver_h