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 |