OLD | NEW |
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 #include "modules/fetch/BodyStreamBuffer.h" | 5 #include "modules/fetch/BodyStreamBuffer.h" |
6 | 6 |
7 #include "bindings/core/v8/ScriptState.h" | 7 #include "bindings/core/v8/ScriptState.h" |
8 #include "bindings/core/v8/V8HiddenValue.h" | 8 #include "bindings/core/v8/V8HiddenValue.h" |
9 #include "core/dom/DOMArrayBuffer.h" | 9 #include "core/dom/DOMArrayBuffer.h" |
10 #include "core/dom/DOMTypedArray.h" | 10 #include "core/dom/DOMTypedArray.h" |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 m_consumer = nullptr; | 304 m_consumer = nullptr; |
305 } | 305 } |
306 } | 306 } |
307 | 307 |
308 void BodyStreamBuffer::processData() | 308 void BodyStreamBuffer::processData() |
309 { | 309 { |
310 DCHECK(m_consumer); | 310 DCHECK(m_consumer); |
311 while (m_streamNeedsMore) { | 311 while (m_streamNeedsMore) { |
312 const char* buffer = nullptr; | 312 const char* buffer = nullptr; |
313 size_t available = 0; | 313 size_t available = 0; |
314 | 314 auto result = m_consumer->beginRead(&buffer, &available); |
315 switch (m_consumer->beginRead(&buffer, &available)) { | 315 if (result == BytesConsumer::Result::ShouldWait) |
| 316 return; |
| 317 DOMUint8Array* array = nullptr; |
| 318 if (result == BytesConsumer::Result::Ok) { |
| 319 array = DOMUint8Array::create(reinterpret_cast<const unsigned char*>
(buffer), available); |
| 320 result = m_consumer->endRead(available); |
| 321 } |
| 322 switch (result) { |
316 case BytesConsumer::Result::Ok: { | 323 case BytesConsumer::Result::Ok: { |
317 DOMUint8Array* array = DOMUint8Array::create(reinterpret_cast<const
unsigned char*>(buffer), available); | 324 DCHECK(array); |
318 if (m_consumer->endRead(available) != BytesConsumer::Result::Ok) { | |
319 error(); | |
320 return; | |
321 } | |
322 // Clear m_streamNeedsMore in order to detect a pull call. | 325 // Clear m_streamNeedsMore in order to detect a pull call. |
323 m_streamNeedsMore = false; | 326 m_streamNeedsMore = false; |
324 controller()->enqueue(array); | 327 controller()->enqueue(array); |
325 // If m_streamNeedsMore is true, it means that pull is called and | 328 // If m_streamNeedsMore is true, it means that pull is called and |
326 // the stream needs more data even if the desired size is not | 329 // the stream needs more data even if the desired size is not |
327 // positive. | 330 // positive. |
328 if (!m_streamNeedsMore) | 331 if (!m_streamNeedsMore) |
329 m_streamNeedsMore = controller()->desiredSize() > 0; | 332 m_streamNeedsMore = controller()->desiredSize() > 0; |
330 break; | 333 break; |
331 } | 334 } |
332 case BytesConsumer::Result::ShouldWait: | 335 case BytesConsumer::Result::ShouldWait: |
| 336 NOTREACHED(); |
333 return; | 337 return; |
334 case BytesConsumer::Result::Done: | 338 case BytesConsumer::Result::Done: |
335 close(); | 339 close(); |
336 return; | 340 return; |
337 case BytesConsumer::Result::Error: | 341 case BytesConsumer::Result::Error: |
338 error(); | 342 error(); |
339 return; | 343 return; |
340 } | 344 } |
341 } | 345 } |
342 } | 346 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 } | 390 } |
387 if (isErrored) | 391 if (isErrored) |
388 return new BytesConsumerForDataConsumerHandle(m_scriptState->getExecutio
nContext(), createFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorData
ConsumerHandle())); | 392 return new BytesConsumerForDataConsumerHandle(m_scriptState->getExecutio
nContext(), createFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorData
ConsumerHandle())); |
389 | 393 |
390 DCHECK(consumer); | 394 DCHECK(consumer); |
391 consumer->clearClient(); | 395 consumer->clearClient(); |
392 return consumer; | 396 return consumer; |
393 } | 397 } |
394 | 398 |
395 } // namespace blink | 399 } // namespace blink |
OLD | NEW |