Upstream version 10.38.222.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / modules / serviceworkers / FetchBodyStream.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 FetchBodyStream_h
6 #define FetchBodyStream_h
7
8 #include "bindings/core/v8/ScriptPromise.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "bindings/core/v8/ScriptWrappable.h"
11 #include "core/dom/ActiveDOMObject.h"
12 #include "core/fileapi/FileReaderLoader.h"
13 #include "core/fileapi/FileReaderLoaderClient.h"
14 #include "platform/blob/BlobData.h"
15 #include "platform/heap/Handle.h"
16 #include "wtf/RefCounted.h"
17 #include "wtf/RefPtr.h"
18
19 namespace blink {
20
21 class ScriptState;
22
23 class FetchBodyStream FINAL
24     : public RefCountedWillBeGarbageCollectedFinalized<FetchBodyStream>
25     , public ScriptWrappable
26     , public ActiveDOMObject
27     , public FileReaderLoaderClient {
28 public:
29     enum ResponseType {
30         ResponseAsArrayBuffer,
31         ResponseAsBlob,
32         ResponseAsFormData,
33         ResponseAsJSON,
34         ResponseAsText
35     };
36
37     static PassRefPtrWillBeRawPtr<FetchBodyStream> create(ExecutionContext*, PassRefPtr<BlobDataHandle>);
38     ~FetchBodyStream() { }
39
40     ScriptPromise asArrayBuffer(ScriptState*);
41     ScriptPromise asBlob(ScriptState*);
42     ScriptPromise asFormData(ScriptState*);
43     ScriptPromise asJSON(ScriptState*);
44     ScriptPromise asText(ScriptState*);
45
46     // ActiveDOMObject override.
47     virtual void stop() OVERRIDE;
48     virtual bool hasPendingActivity() const OVERRIDE;
49
50     void trace(Visitor*) { }
51
52 private:
53     FetchBodyStream(ExecutionContext*, PassRefPtr<BlobDataHandle>);
54     ScriptPromise readAsync(ScriptState*, ResponseType);
55     void resolveJSON();
56
57     // FileReaderLoaderClient functions.
58     virtual void didStartLoading() OVERRIDE;
59     virtual void didReceiveData() OVERRIDE;
60     virtual void didFinishLoading() OVERRIDE;
61     virtual void didFail(FileError::ErrorCode) OVERRIDE;
62
63     RefPtr<BlobDataHandle> m_blobDataHandle;
64     OwnPtr<FileReaderLoader> m_loader;
65     bool m_hasRead;
66     ResponseType m_responseType;
67     RefPtr<ScriptPromiseResolver> m_resolver;
68 };
69
70 } // namespace blink
71
72 #endif // FetchBodyStream_h