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