1d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// found in the LICENSE file.
4d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
5d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#ifndef RespondWithObserver_h
6d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#define RespondWithObserver_h
7d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
8d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/dom/ContextLifecycleObserver.h"
9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "platform/heap/Handle.h"
10d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/Forward.h"
11d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/RefCounted.h"
12d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
13c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
14d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ExceptionState;
16d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class ExecutionContext;
17d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class Response;
185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class ScriptState;
19d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class ScriptValue;
20d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
21d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// This class observes the service worker's handling of a FetchEvent and
22d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// notifies the client.
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass RespondWithObserver FINAL : public GarbageCollectedFinalized<RespondWithObserver>, public ContextLifecycleObserver {
24d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)public:
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static RespondWithObserver* create(ExecutionContext*, int eventID);
26d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
27d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    virtual void contextDestroyed() OVERRIDE;
28d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
29d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void didDispatchEvent();
30d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
31d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // Observes the promise and delays calling didHandleFetchEvent() until the
32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    // given promise is resolved or rejected.
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void respondWith(ScriptState*, const ScriptValue&, ExceptionState&);
34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void responseWasRejected();
36d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    void responseWasFulfilled(const ScriptValue&);
37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*) { }
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
40d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)private:
41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    class ThenFunction;
42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    RespondWithObserver(ExecutionContext*, int eventID);
44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
45d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    int m_eventID;
46d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
47d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    enum State { Initial, Pending, Done };
48d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    State m_state;
49d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)};
50d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
51c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
52d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
53d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#endif // RespondWithObserver_h
54