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 "config.h" | 5 #include "config.h" |
6 #include "modules/fetch/BodyStreamBuffer.h" | 6 #include "modules/fetch/BodyStreamBuffer.h" |
7 | 7 |
8 #include "core/dom/DOMArrayBuffer.h" | 8 #include "core/dom/DOMArrayBuffer.h" |
9 #include "core/dom/DOMTypedArray.h" | 9 #include "core/dom/DOMTypedArray.h" |
10 #include "core/dom/ExceptionCode.h" | 10 #include "core/dom/ExceptionCode.h" |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
206 | 206 |
207 void BodyStreamBuffer::processData() | 207 void BodyStreamBuffer::processData() |
208 { | 208 { |
209 ASSERT(m_reader); | 209 ASSERT(m_reader); |
210 while (m_streamNeedsMore) { | 210 while (m_streamNeedsMore) { |
211 const void* buffer; | 211 const void* buffer; |
212 size_t available; | 212 size_t available; |
213 WebDataConsumerHandle::Result result = m_reader->beginRead(&buffer, WebD ataConsumerHandle::FlagNone, &available); | 213 WebDataConsumerHandle::Result result = m_reader->beginRead(&buffer, WebD ataConsumerHandle::FlagNone, &available); |
214 switch (result) { | 214 switch (result) { |
215 case WebDataConsumerHandle::Ok: | 215 case WebDataConsumerHandle::Ok: |
216 m_streamNeedsMore = m_stream->enqueue(DOMUint8Array::create(static_c ast<const unsigned char*>(buffer), available)); | 216 { |
217 m_reader->endRead(available); | 217 // TODO(junov): crbug.com/536816 |
218 break; | 218 // Use createOrNull instead of deprecatedCreateOrCrash in order to |
219 // fail gracefully when allocation fails. It would probably be | |
220 // appropriate to do something like this to handle the failure: | |
221 // | |
222 // if (!domArray) { | |
223 // m_reader = nullptr; | |
224 // m_stream->error(DOMException::create(V8RangeError, "Out of Memory.")); | |
225 // m_handle.clear(); | |
226 // } | |
227 // | |
228 // The spec would need to be amended to support that behavior. | |
229 // Alternately, we could just proceed with domArray being null i f it | |
230 // is ascertained that silently droping data is acceptable when the | |
haraken
2015/10/29 18:58:37
dropping
Justin Novosad
2015/11/05 00:17:52
Done.
| |
231 // alternative is to crash with an out-of-memory exception. | |
232 RefPtr<DOMUint8Array> domArray = DOMUint8Array::deprecatedCreate OrCrash(static_cast<const unsigned char*>(buffer), available); | |
233 m_streamNeedsMore = m_stream->enqueue(domArray); | |
234 m_reader->endRead(available); | |
235 } | |
236 return; | |
219 | 237 |
220 case WebDataConsumerHandle::Done: | 238 case WebDataConsumerHandle::Done: |
221 close(); | 239 close(); |
222 return; | 240 return; |
223 | 241 |
224 case WebDataConsumerHandle::ShouldWait: | 242 case WebDataConsumerHandle::ShouldWait: |
225 return; | 243 return; |
226 | 244 |
227 case WebDataConsumerHandle::Busy: | 245 case WebDataConsumerHandle::Busy: |
228 case WebDataConsumerHandle::ResourceExhausted: | 246 case WebDataConsumerHandle::ResourceExhausted: |
(...skipping 21 matching lines...) Expand all Loading... | |
250 unlock(); | 268 unlock(); |
251 if (mode == EndLoadingDone) { | 269 if (mode == EndLoadingDone) { |
252 close(); | 270 close(); |
253 } else { | 271 } else { |
254 ASSERT(mode == EndLoadingErrored); | 272 ASSERT(mode == EndLoadingErrored); |
255 error(); | 273 error(); |
256 } | 274 } |
257 } | 275 } |
258 | 276 |
259 } // namespace blink | 277 } // namespace blink |
OLD | NEW |