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