Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Side by Side Diff: Source/modules/fetch/BodyStreamBuffer.h

Issue 1171913003: **** [WIP] Blink-side: Implement FetchBlobDataConsumerHandle **** (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Clean up. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/modules/fetch/Body.cpp ('k') | Source/modules/fetch/BodyStreamBuffer.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BodyStreamBuffer_h 5 #ifndef BodyStreamBuffer_h
6 #define BodyStreamBuffer_h 6 #define BodyStreamBuffer_h
7 7
8 #include "core/dom/DOMException.h" 8 #include "core/dom/DOMException.h"
9 #include "modules/ModulesExport.h" 9 #include "modules/ModulesExport.h"
10 #include "modules/fetch/FetchDataConsumerHandle.h"
11 #include "modules/fetch/FetchDataLoader.h"
10 #include "platform/blob/BlobData.h" 12 #include "platform/blob/BlobData.h"
11 #include "platform/heap/Heap.h" 13 #include "platform/heap/Heap.h"
12 #include "public/platform/WebDataConsumerHandle.h" 14 #include "public/platform/WebDataConsumerHandle.h"
13 #include "wtf/Deque.h" 15 #include "wtf/Deque.h"
14 #include "wtf/RefPtr.h" 16 #include "wtf/RefPtr.h"
15 #include "wtf/text/WTFString.h" 17 #include "wtf/text/WTFString.h"
16 18
17 namespace blink { 19 namespace blink {
18 20
19 class DOMArrayBuffer; 21 class DOMArrayBuffer;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 DOMException* exception() const { return m_exception; } 53 DOMException* exception() const { return m_exception; }
52 54
53 // Can't call after close() or error() was called. 55 // Can't call after close() or error() was called.
54 void write(PassRefPtr<DOMArrayBuffer>); 56 void write(PassRefPtr<DOMArrayBuffer>);
55 // Can't call after close() or error() was called. 57 // Can't call after close() or error() was called.
56 void close(); 58 void close();
57 // Can't call after close() or error() was called. 59 // Can't call after close() or error() was called.
58 void error(DOMException*); 60 void error(DOMException*);
59 void cancel() { m_canceller->cancel(); } 61 void cancel() { m_canceller->cancel(); }
60 62
61 // This function registers an observer so it fails and returns false when an
62 // observer was already registered.
63 bool readAllAndCreateBlobHandle(const String& contentType, BlobHandleCreator Client*);
64
65 // This function registers an observer so it fails and returns false when an
66 // observer was already registered.
67 bool startTee(BodyStreamBuffer* out1, BodyStreamBuffer* out2);
68
69 // When an observer was registered this function fails and returns false. 63 // When an observer was registered this function fails and returns false.
70 bool registerObserver(Observer*); 64 bool registerObserver(Observer*);
71 void unregisterObserver(); 65 void unregisterObserver();
72 bool isObserverRegistered() const { return m_observer.get(); } 66 bool isObserverRegistered() const { return m_observer.get(); }
73 DECLARE_TRACE(); 67 DECLARE_TRACE();
74 68
75 // Creates a BodyStreamBuffer from |handle| as the source. 69 // Creates a BodyStreamBuffer from |handle| as the source.
76 // On failure, BodyStreamBuffer::error() is called with a NetworkError 70 // On failure, BodyStreamBuffer::error() is called with a NetworkError
77 // with |failureMessage|. 71 // with |failureMessage|.
78 static BodyStreamBuffer* create(PassOwnPtr<WebDataConsumerHandle> /* handle */, const String& failureMessage); 72 static BodyStreamBuffer* create(PassOwnPtr<WebDataConsumerHandle> /* handle */, const String& failureMessage);
79 73
80 private: 74 private:
81 Deque<RefPtr<DOMArrayBuffer>> m_queue; 75 Deque<RefPtr<DOMArrayBuffer>> m_queue;
82 bool m_isClosed; 76 bool m_isClosed;
83 Member<DOMException> m_exception; 77 Member<DOMException> m_exception;
84 Member<Observer> m_observer; 78 Member<Observer> m_observer;
85 Member<Canceller> m_canceller; 79 Member<Canceller> m_canceller;
86 }; 80 };
87 81
82 /*
83 // #define createDebugHandleAlways(handle) FetchDebugDataConsumerHandle::create( handle, __FILE__, __LINE__)
84 #define createDebugHandleAlways(handle) (handle)
85 #define createDebugHandle(handle) (handle)
86
87 class FetchDebugDataConsumerHandle : public FetchDataConsumerHandle {
88 public:
89 static PassOwnPtr<FetchDataConsumerHandle> create(PassOwnPtr<FetchDataConsum erHandle> handle, const char* file, int line) { return adoptPtr(new FetchDebugDa taConsumerHandle(handle, file, line)); }
90 private:
91 FetchDebugDataConsumerHandle(PassOwnPtr<FetchDataConsumerHandle> handle, con st char *file, int line)
92 : m_handle(handle)
93 , m_name(m_handle->debugName()) { }
94
95 class ReaderImpl final : public FetchDataConsumerHandle::Reader {
96 public:
97 ReaderImpl(FetchDebugDataConsumerHandle* handle, PassOwnPtr<FetchDataCon sumerHandle::Reader> reader) : m_handle(handle), m_name(handle->debugName()), m_ reader(reader), m_isInTwoPhaseRead(false) { }
98 ~ReaderImpl()
99 {
100 ASSERT(!m_isInTwoPhaseRead);
101 print("dtor\n", (long long)currentThread(), this);
102 }
103 Result read(void* data, size_t size, Flags flags, size_t* readSize) over ride
104 {
105 ASSERT(!m_isInTwoPhaseRead);
106 print("read(%lld)\n", (long long)size);
107 Result result = m_reader->read(data, size, flags, readSize);
108 print("read(%lld) -> %d (%lld)\n", (long long)size, result, (long lo ng)*readSize);
109 return result;
110 }
111
112 Result beginRead(const void** buffer, Flags flags, size_t* available) ov erride
113 {
114 ASSERT(!m_isInTwoPhaseRead);
115 print("beginRead()\n");
116 Result result = m_reader->beginRead(buffer, flags, available);
117 print("beginRead() -> %d (%lld)\n", result, (long long)*available);
118 if (result == Ok)
119 m_isInTwoPhaseRead = true;
120 return result;
121 }
122 Result endRead(size_t readSize) override
123 {
124 ASSERT(m_isInTwoPhaseRead);
125 m_isInTwoPhaseRead = false;
126 print("endRead(%lld)\n", (long long)readSize);
127 Result result = m_reader->endRead(readSize);
128 print("endRead(%lld) -> %d\n", (long long)readSize, result);
129 return result;
130 }
131 PassRefPtr<BlobDataHandle> drainAsBlobDataHandle() override
132 {
133 print("drainAsBlobDataHandle()\n");
134 RefPtr<BlobDataHandle> blobDataHandle = m_reader->drainAsBlobDataHan dle();
135 print("drainAsBlobDataHandle() -> %p\n", blobDataHandle.get());
136 return blobDataHandle.release();
137 }
138 void print(const char* format, ...)
139 {
140 fprintf(stderr, "[Thread:%lld] [Handle:%p (%s)] [Reader:%p] [TargetR eader:%p]: ",
141 (long long)currentThread(),
142 m_handle,
143 m_name.c_str(),
144 this,
145 m_reader.get());
146
147 va_list args;
148 va_start(args, format);
149 vfprintf(stderr, format, args);
150 va_end(args);
151 }
152 private:
153 FetchDebugDataConsumerHandle* m_handle; // debugging only
154 std::string m_name;
155 OwnPtr<FetchDataConsumerHandle::Reader> m_reader;
156 bool m_isInTwoPhaseRead;
157 };
158 class ClientWrapper : public Client {
159 public:
160 ClientWrapper(FetchDebugDataConsumerHandle* handle, Client* client) : m_ handle(handle), m_name(handle->debugName()), m_reader(nullptr), m_client(client) { }
161 void didGetReadable() override
162 {
163 print("didGetReadable\n");
164 if (m_client)
165 m_client->didGetReadable();
166 print("didGetReadable done\n");
167 }
168 void setReader(Reader* reader) { m_reader = reader; }
169
170 void print(const char* format, ...)
171 {
172 fprintf(stderr, "[Thread:%lld] [Handle:%p (%s)] [Reader:%p] [Client: %p] [TargetClient:%p]: ",
173 (long long)currentThread(),
174 m_handle,
175 m_name.c_str(),
176 m_reader,
177 this,
178 m_client);
179
180 va_list args;
181 va_start(args, format);
182 vfprintf(stderr, format, args);
183 va_end(args);
184 }
185 private:
186 FetchDebugDataConsumerHandle* m_handle; // debugging only
187 std::string m_name;
188 Reader* m_reader; // logging only
189
190 Client* m_client;
191 };
192 Reader* obtainReaderInternal(Client* client) override
193 {
194 print("obtainReaderInternal(Client=%p)\n", client);
195 ClientWrapper* clientWrapper = new ClientWrapper(this, client);
196 Reader* reader = new ReaderImpl(this, m_handle->obtainReader(clientWrapp er)); // FIXME: Leaking
197 clientWrapper->setReader(reader);
198 print("obtainReaderInternal(Client=%p) -> %p\n", client, reader);
199 return reader;
200 }
201 void print(const char* format, ...)
202 {
203 fprintf(stderr, "[Thread:%lld] [Handle:%p (%s)]: ",
204 (long long)currentThread(),
205 this,
206 debugName());
207
208 va_list args;
209 va_start(args, format);
210 vfprintf(stderr, format, args);
211 va_end(args);
212 }
213
214 const char* debugName() const override { return m_name.c_str(); }
215
216 OwnPtr<FetchDataConsumerHandle> m_handle;
217 std::string m_name;
218 };
219 */
220
221 class MODULES_EXPORT BodyStreamBuffer2 final : public GarbageCollectedFinalized< BodyStreamBuffer2> {
222 public:
223 static BodyStreamBuffer2* create(PassOwnPtr<FetchDataConsumerHandle> handle) { return new BodyStreamBuffer2(handle); }
224
225 FetchDataConsumerHandle* handle() const { return m_handle.get(); }
226 PassOwnPtr<FetchDataConsumerHandle> releaseHandle() { return m_handle.releas e(); }
227
228 void registerLoader(FetchDataLoader* loader) { ASSERT(!m_fetchDataLoader); m _fetchDataLoader = loader; }
229 void unregisterLoader() { m_fetchDataLoader.clear(); }
230 DEFINE_INLINE_TRACE()
231 {
232 visitor->trace(m_fetchDataLoader);
233 }
234
235 private:
236 explicit BodyStreamBuffer2(PassOwnPtr<FetchDataConsumerHandle> handle) : m_h andle(handle) { }
237
238 OwnPtr<FetchDataConsumerHandle> m_handle;
239 Member<FetchDataLoader> m_fetchDataLoader;
240 };
241
88 } // namespace blink 242 } // namespace blink
89 243
90 #endif // BodyStreamBuffer_h 244 #endif // BodyStreamBuffer_h
OLDNEW
« no previous file with comments | « Source/modules/fetch/Body.cpp ('k') | Source/modules/fetch/BodyStreamBuffer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698