| 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 <memory> | 7 #include <memory> |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "bindings/core/v8/V8PrivateProperty.h" | 9 #include "bindings/core/v8/V8PrivateProperty.h" |
| 10 #include "bindings/core/v8/V8ThrowException.h" | 10 #include "bindings/core/v8/V8ThrowException.h" |
| 11 #include "core/dom/DOMArrayBuffer.h" | 11 #include "core/dom/DOMArrayBuffer.h" |
| 12 #include "core/dom/DOMTypedArray.h" | 12 #include "core/dom/DOMTypedArray.h" |
| 13 #include "core/dom/ExceptionCode.h" | 13 #include "core/dom/ExceptionCode.h" |
| 14 #include "core/dom/ExecutionContext.h" |
| 14 #include "core/streams/ReadableStreamController.h" | 15 #include "core/streams/ReadableStreamController.h" |
| 15 #include "core/streams/ReadableStreamOperations.h" | 16 #include "core/streams/ReadableStreamOperations.h" |
| 16 #include "modules/fetch/Body.h" | 17 #include "modules/fetch/Body.h" |
| 17 #include "modules/fetch/ReadableStreamBytesConsumer.h" | 18 #include "modules/fetch/ReadableStreamBytesConsumer.h" |
| 18 #include "platform/blob/BlobData.h" | 19 #include "platform/blob/BlobData.h" |
| 19 #include "platform/network/EncodedFormData.h" | 20 #include "platform/network/EncodedFormData.h" |
| 20 | 21 |
| 21 namespace blink { | 22 namespace blink { |
| 22 | 23 |
| 23 class BodyStreamBuffer::LoaderClient final | 24 class BodyStreamBuffer::LoaderClient final |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 162 return form_data.Release(); | 163 return form_data.Release(); |
| 163 } | 164 } |
| 164 return nullptr; | 165 return nullptr; |
| 165 } | 166 } |
| 166 | 167 |
| 167 void BodyStreamBuffer::StartLoading(FetchDataLoader* loader, | 168 void BodyStreamBuffer::StartLoading(FetchDataLoader* loader, |
| 168 FetchDataLoader::Client* client) { | 169 FetchDataLoader::Client* client) { |
| 169 ASSERT(!loader_); | 170 ASSERT(!loader_); |
| 170 ASSERT(script_state_->ContextIsValid()); | 171 ASSERT(script_state_->ContextIsValid()); |
| 171 loader_ = loader; | 172 loader_ = loader; |
| 172 loader->Start( | 173 loader->Start(ReleaseHandle(), |
| 173 ReleaseHandle(), | 174 new LoaderClient(ExecutionContext::From(script_state_.Get()), |
| 174 new LoaderClient(script_state_->GetExecutionContext(), this, client)); | 175 this, client)); |
| 175 } | 176 } |
| 176 | 177 |
| 177 void BodyStreamBuffer::Tee(BodyStreamBuffer** branch1, | 178 void BodyStreamBuffer::Tee(BodyStreamBuffer** branch1, |
| 178 BodyStreamBuffer** branch2) { | 179 BodyStreamBuffer** branch2) { |
| 179 DCHECK(!IsStreamLocked()); | 180 DCHECK(!IsStreamLocked()); |
| 180 DCHECK(!IsStreamDisturbed()); | 181 DCHECK(!IsStreamDisturbed()); |
| 181 *branch1 = nullptr; | 182 *branch1 = nullptr; |
| 182 *branch2 = nullptr; | 183 *branch2 = nullptr; |
| 183 | 184 |
| 184 if (made_from_readable_stream_) { | 185 if (made_from_readable_stream_) { |
| 185 ScriptValue stream1, stream2; | 186 ScriptValue stream1, stream2; |
| 186 ReadableStreamOperations::Tee(script_state_.Get(), Stream(), &stream1, | 187 ReadableStreamOperations::Tee(script_state_.Get(), Stream(), &stream1, |
| 187 &stream2); | 188 &stream2); |
| 188 *branch1 = new BodyStreamBuffer(script_state_.Get(), stream1); | 189 *branch1 = new BodyStreamBuffer(script_state_.Get(), stream1); |
| 189 *branch2 = new BodyStreamBuffer(script_state_.Get(), stream2); | 190 *branch2 = new BodyStreamBuffer(script_state_.Get(), stream2); |
| 190 return; | 191 return; |
| 191 } | 192 } |
| 192 BytesConsumer* dest1 = nullptr; | 193 BytesConsumer* dest1 = nullptr; |
| 193 BytesConsumer* dest2 = nullptr; | 194 BytesConsumer* dest2 = nullptr; |
| 194 BytesConsumer::Tee(script_state_->GetExecutionContext(), ReleaseHandle(), | 195 BytesConsumer::Tee(ExecutionContext::From(script_state_.Get()), |
| 195 &dest1, &dest2); | 196 ReleaseHandle(), &dest1, &dest2); |
| 196 *branch1 = new BodyStreamBuffer(script_state_.Get(), dest1); | 197 *branch1 = new BodyStreamBuffer(script_state_.Get(), dest1); |
| 197 *branch2 = new BodyStreamBuffer(script_state_.Get(), dest2); | 198 *branch2 = new BodyStreamBuffer(script_state_.Get(), dest2); |
| 198 } | 199 } |
| 199 | 200 |
| 200 ScriptPromise BodyStreamBuffer::pull(ScriptState* script_state) { | 201 ScriptPromise BodyStreamBuffer::pull(ScriptState* script_state) { |
| 201 ASSERT(script_state == script_state_.Get()); | 202 ASSERT(script_state == script_state_.Get()); |
| 202 if (stream_needs_more_) | 203 if (stream_needs_more_) |
| 203 return ScriptPromise::CastUndefined(script_state); | 204 return ScriptPromise::CastUndefined(script_state); |
| 204 stream_needs_more_ = true; | 205 stream_needs_more_ = true; |
| 205 ProcessData(); | 206 ProcessData(); |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 } | 388 } |
| 388 if (is_errored) | 389 if (is_errored) |
| 389 return BytesConsumer::CreateErrored(BytesConsumer::Error("error")); | 390 return BytesConsumer::CreateErrored(BytesConsumer::Error("error")); |
| 390 | 391 |
| 391 DCHECK(consumer); | 392 DCHECK(consumer); |
| 392 consumer->ClearClient(); | 393 consumer->ClearClient(); |
| 393 return consumer; | 394 return consumer; |
| 394 } | 395 } |
| 395 | 396 |
| 396 } // namespace blink | 397 } // namespace blink |
| OLD | NEW |