OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "modules/fetch/FetchDataLoader.h" | 5 #include "modules/fetch/FetchDataLoader.h" |
6 | 6 |
7 #include "core/html/parser/TextResourceDecoder.h" | 7 #include "core/html/parser/TextResourceDecoder.h" |
8 #include "wtf/PtrUtil.h" | |
9 #include "wtf/text/StringBuilder.h" | 8 #include "wtf/text/StringBuilder.h" |
10 #include "wtf/text/WTFString.h" | 9 #include "wtf/text/WTFString.h" |
11 #include "wtf/typed_arrays/ArrayBufferBuilder.h" | 10 #include "wtf/typed_arrays/ArrayBufferBuilder.h" |
12 #include <memory> | |
13 | 11 |
14 namespace blink { | 12 namespace blink { |
15 | 13 |
16 namespace { | 14 namespace { |
17 | 15 |
18 class FetchDataLoaderAsBlobHandle | 16 class FetchDataLoaderAsBlobHandle |
19 : public FetchDataLoader | 17 : public FetchDataLoader |
20 , public WebDataConsumerHandle::Client { | 18 , public WebDataConsumerHandle::Client { |
21 public: | 19 public: |
22 explicit FetchDataLoaderAsBlobHandle(const String& mimeType) | 20 explicit FetchDataLoaderAsBlobHandle(const String& mimeType) |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 } | 94 } |
97 } | 95 } |
98 | 96 |
99 void cancel() override | 97 void cancel() override |
100 { | 98 { |
101 m_reader.reset(); | 99 m_reader.reset(); |
102 m_blobData.reset(); | 100 m_blobData.reset(); |
103 m_client.clear(); | 101 m_client.clear(); |
104 } | 102 } |
105 | 103 |
106 std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader; | 104 OwnPtr<FetchDataConsumerHandle::Reader> m_reader; |
107 Member<FetchDataLoader::Client> m_client; | 105 Member<FetchDataLoader::Client> m_client; |
108 | 106 |
109 String m_mimeType; | 107 String m_mimeType; |
110 std::unique_ptr<BlobData> m_blobData; | 108 OwnPtr<BlobData> m_blobData; |
111 }; | 109 }; |
112 | 110 |
113 class FetchDataLoaderAsArrayBuffer | 111 class FetchDataLoaderAsArrayBuffer |
114 : public FetchDataLoader | 112 : public FetchDataLoader |
115 , public WebDataConsumerHandle::Client { | 113 , public WebDataConsumerHandle::Client { |
116 public: | 114 public: |
117 FetchDataLoaderAsArrayBuffer() | 115 FetchDataLoaderAsArrayBuffer() |
118 : m_client(nullptr) { } | 116 : m_client(nullptr) { } |
119 | 117 |
120 DEFINE_INLINE_VIRTUAL_TRACE() | 118 DEFINE_INLINE_VIRTUAL_TRACE() |
121 { | 119 { |
122 FetchDataLoader::trace(visitor); | 120 FetchDataLoader::trace(visitor); |
123 visitor->trace(m_client); | 121 visitor->trace(m_client); |
124 } | 122 } |
125 | 123 |
126 protected: | 124 protected: |
127 void start(FetchDataConsumerHandle* handle, FetchDataLoader::Client* client)
override | 125 void start(FetchDataConsumerHandle* handle, FetchDataLoader::Client* client)
override |
128 { | 126 { |
129 ASSERT(!m_client); | 127 ASSERT(!m_client); |
130 ASSERT(!m_rawData); | 128 ASSERT(!m_rawData); |
131 ASSERT(!m_reader); | 129 ASSERT(!m_reader); |
132 m_client = client; | 130 m_client = client; |
133 m_rawData = wrapUnique(new ArrayBufferBuilder()); | 131 m_rawData = adoptPtr(new ArrayBufferBuilder()); |
134 m_reader = handle->obtainReader(this); | 132 m_reader = handle->obtainReader(this); |
135 } | 133 } |
136 | 134 |
137 void didGetReadable() override | 135 void didGetReadable() override |
138 { | 136 { |
139 ASSERT(m_client); | 137 ASSERT(m_client); |
140 ASSERT(m_rawData); | 138 ASSERT(m_rawData); |
141 ASSERT(m_reader); | 139 ASSERT(m_reader); |
142 | 140 |
143 while (true) { | 141 while (true) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 m_client.clear(); | 184 m_client.clear(); |
187 } | 185 } |
188 | 186 |
189 void cancel() override | 187 void cancel() override |
190 { | 188 { |
191 m_reader.reset(); | 189 m_reader.reset(); |
192 m_rawData.reset(); | 190 m_rawData.reset(); |
193 m_client.clear(); | 191 m_client.clear(); |
194 } | 192 } |
195 | 193 |
196 std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader; | 194 OwnPtr<FetchDataConsumerHandle::Reader> m_reader; |
197 Member<FetchDataLoader::Client> m_client; | 195 Member<FetchDataLoader::Client> m_client; |
198 | 196 |
199 std::unique_ptr<ArrayBufferBuilder> m_rawData; | 197 OwnPtr<ArrayBufferBuilder> m_rawData; |
200 }; | 198 }; |
201 | 199 |
202 class FetchDataLoaderAsString | 200 class FetchDataLoaderAsString |
203 : public FetchDataLoader | 201 : public FetchDataLoader |
204 , public WebDataConsumerHandle::Client { | 202 , public WebDataConsumerHandle::Client { |
205 public: | 203 public: |
206 FetchDataLoaderAsString() | 204 FetchDataLoaderAsString() |
207 : m_client(nullptr) { } | 205 : m_client(nullptr) { } |
208 | 206 |
209 DEFINE_INLINE_VIRTUAL_TRACE() | 207 DEFINE_INLINE_VIRTUAL_TRACE() |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 } | 270 } |
273 | 271 |
274 void cancel() override | 272 void cancel() override |
275 { | 273 { |
276 m_reader.reset(); | 274 m_reader.reset(); |
277 m_builder.clear(); | 275 m_builder.clear(); |
278 m_decoder.reset(); | 276 m_decoder.reset(); |
279 m_client.clear(); | 277 m_client.clear(); |
280 } | 278 } |
281 | 279 |
282 std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader; | 280 OwnPtr<FetchDataConsumerHandle::Reader> m_reader; |
283 Member<FetchDataLoader::Client> m_client; | 281 Member<FetchDataLoader::Client> m_client; |
284 | 282 |
285 std::unique_ptr<TextResourceDecoder> m_decoder; | 283 OwnPtr<TextResourceDecoder> m_decoder; |
286 StringBuilder m_builder; | 284 StringBuilder m_builder; |
287 }; | 285 }; |
288 | 286 |
289 class FetchDataLoaderAsStream | 287 class FetchDataLoaderAsStream |
290 : public FetchDataLoader | 288 : public FetchDataLoader |
291 , public WebDataConsumerHandle::Client { | 289 , public WebDataConsumerHandle::Client { |
292 public: | 290 public: |
293 explicit FetchDataLoaderAsStream(Stream* outStream) | 291 explicit FetchDataLoaderAsStream(Stream* outStream) |
294 : m_client(nullptr) | 292 : m_client(nullptr) |
295 , m_outStream(outStream) { } | 293 , m_outStream(outStream) { } |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 cleanup(); | 362 cleanup(); |
365 } | 363 } |
366 | 364 |
367 void cleanup() | 365 void cleanup() |
368 { | 366 { |
369 m_reader.reset(); | 367 m_reader.reset(); |
370 m_client.clear(); | 368 m_client.clear(); |
371 m_outStream.clear(); | 369 m_outStream.clear(); |
372 } | 370 } |
373 | 371 |
374 std::unique_ptr<FetchDataConsumerHandle::Reader> m_reader; | 372 OwnPtr<FetchDataConsumerHandle::Reader> m_reader; |
375 Member<FetchDataLoader::Client> m_client; | 373 Member<FetchDataLoader::Client> m_client; |
376 | 374 |
377 Member<Stream> m_outStream; | 375 Member<Stream> m_outStream; |
378 }; | 376 }; |
379 | 377 |
380 | 378 |
381 } // namespace | 379 } // namespace |
382 | 380 |
383 FetchDataLoader* FetchDataLoader::createLoaderAsBlobHandle(const String& mimeTyp
e) | 381 FetchDataLoader* FetchDataLoader::createLoaderAsBlobHandle(const String& mimeTyp
e) |
384 { | 382 { |
385 return new FetchDataLoaderAsBlobHandle(mimeType); | 383 return new FetchDataLoaderAsBlobHandle(mimeType); |
386 } | 384 } |
387 | 385 |
388 FetchDataLoader* FetchDataLoader::createLoaderAsArrayBuffer() | 386 FetchDataLoader* FetchDataLoader::createLoaderAsArrayBuffer() |
389 { | 387 { |
390 return new FetchDataLoaderAsArrayBuffer(); | 388 return new FetchDataLoaderAsArrayBuffer(); |
391 } | 389 } |
392 | 390 |
393 FetchDataLoader* FetchDataLoader::createLoaderAsString() | 391 FetchDataLoader* FetchDataLoader::createLoaderAsString() |
394 { | 392 { |
395 return new FetchDataLoaderAsString(); | 393 return new FetchDataLoaderAsString(); |
396 } | 394 } |
397 | 395 |
398 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) | 396 FetchDataLoader* FetchDataLoader::createLoaderAsStream(Stream* outStream) |
399 { | 397 { |
400 return new FetchDataLoaderAsStream(outStream); | 398 return new FetchDataLoaderAsStream(outStream); |
401 } | 399 } |
402 | 400 |
403 } // namespace blink | 401 } // namespace blink |
OLD | NEW |