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" |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 DCHECK(body_value->IsObject()); | 124 DCHECK(body_value->IsObject()); |
125 v8::Local<v8::Object> body = body_value.As<v8::Object>(); | 125 v8::Local<v8::Object> body = body_value.As<v8::Object>(); |
126 return ScriptValue( | 126 return ScriptValue( |
127 script_state_.Get(), | 127 script_state_.Get(), |
128 V8PrivateProperty::GetInternalBodyStream(script_state_->GetIsolate()) | 128 V8PrivateProperty::GetInternalBodyStream(script_state_->GetIsolate()) |
129 .GetOrEmpty(body)); | 129 .GetOrEmpty(body)); |
130 } | 130 } |
131 | 131 |
132 PassRefPtr<BlobDataHandle> BodyStreamBuffer::DrainAsBlobDataHandle( | 132 PassRefPtr<BlobDataHandle> BodyStreamBuffer::DrainAsBlobDataHandle( |
133 BytesConsumer::BlobSizePolicy policy) { | 133 BytesConsumer::BlobSizePolicy policy) { |
134 ASSERT(!IsStreamLocked()); | 134 DCHECK(!IsStreamLocked()); |
135 ASSERT(!IsStreamDisturbed()); | 135 DCHECK(!IsStreamDisturbed()); |
136 if (IsStreamClosed() || IsStreamErrored()) | 136 if (IsStreamClosed() || IsStreamErrored()) |
137 return nullptr; | 137 return nullptr; |
138 | 138 |
139 if (made_from_readable_stream_) | 139 if (made_from_readable_stream_) |
140 return nullptr; | 140 return nullptr; |
141 | 141 |
142 RefPtr<BlobDataHandle> blob_data_handle = | 142 RefPtr<BlobDataHandle> blob_data_handle = |
143 consumer_->DrainAsBlobDataHandle(policy); | 143 consumer_->DrainAsBlobDataHandle(policy); |
144 if (blob_data_handle) { | 144 if (blob_data_handle) { |
145 CloseAndLockAndDisturb(); | 145 CloseAndLockAndDisturb(); |
146 return blob_data_handle.Release(); | 146 return blob_data_handle.Release(); |
147 } | 147 } |
148 return nullptr; | 148 return nullptr; |
149 } | 149 } |
150 | 150 |
151 PassRefPtr<EncodedFormData> BodyStreamBuffer::DrainAsFormData() { | 151 PassRefPtr<EncodedFormData> BodyStreamBuffer::DrainAsFormData() { |
152 ASSERT(!IsStreamLocked()); | 152 DCHECK(!IsStreamLocked()); |
153 ASSERT(!IsStreamDisturbed()); | 153 DCHECK(!IsStreamDisturbed()); |
154 if (IsStreamClosed() || IsStreamErrored()) | 154 if (IsStreamClosed() || IsStreamErrored()) |
155 return nullptr; | 155 return nullptr; |
156 | 156 |
157 if (made_from_readable_stream_) | 157 if (made_from_readable_stream_) |
158 return nullptr; | 158 return nullptr; |
159 | 159 |
160 RefPtr<EncodedFormData> form_data = consumer_->DrainAsFormData(); | 160 RefPtr<EncodedFormData> form_data = consumer_->DrainAsFormData(); |
161 if (form_data) { | 161 if (form_data) { |
162 CloseAndLockAndDisturb(); | 162 CloseAndLockAndDisturb(); |
163 return form_data.Release(); | 163 return form_data.Release(); |
164 } | 164 } |
165 return nullptr; | 165 return nullptr; |
166 } | 166 } |
167 | 167 |
168 void BodyStreamBuffer::StartLoading(FetchDataLoader* loader, | 168 void BodyStreamBuffer::StartLoading(FetchDataLoader* loader, |
169 FetchDataLoader::Client* client) { | 169 FetchDataLoader::Client* client) { |
170 ASSERT(!loader_); | 170 DCHECK(!loader_); |
171 ASSERT(script_state_->ContextIsValid()); | 171 DCHECK(script_state_->ContextIsValid()); |
172 loader_ = loader; | 172 loader_ = loader; |
173 loader->Start(ReleaseHandle(), | 173 loader->Start(ReleaseHandle(), |
174 new LoaderClient(ExecutionContext::From(script_state_.Get()), | 174 new LoaderClient(ExecutionContext::From(script_state_.Get()), |
175 this, client)); | 175 this, client)); |
176 } | 176 } |
177 | 177 |
178 void BodyStreamBuffer::Tee(BodyStreamBuffer** branch1, | 178 void BodyStreamBuffer::Tee(BodyStreamBuffer** branch1, |
179 BodyStreamBuffer** branch2) { | 179 BodyStreamBuffer** branch2) { |
180 DCHECK(!IsStreamLocked()); | 180 DCHECK(!IsStreamLocked()); |
181 DCHECK(!IsStreamDisturbed()); | 181 DCHECK(!IsStreamDisturbed()); |
(...skipping 10 matching lines...) Expand all Loading... |
192 } | 192 } |
193 BytesConsumer* dest1 = nullptr; | 193 BytesConsumer* dest1 = nullptr; |
194 BytesConsumer* dest2 = nullptr; | 194 BytesConsumer* dest2 = nullptr; |
195 BytesConsumer::Tee(ExecutionContext::From(script_state_.Get()), | 195 BytesConsumer::Tee(ExecutionContext::From(script_state_.Get()), |
196 ReleaseHandle(), &dest1, &dest2); | 196 ReleaseHandle(), &dest1, &dest2); |
197 *branch1 = new BodyStreamBuffer(script_state_.Get(), dest1); | 197 *branch1 = new BodyStreamBuffer(script_state_.Get(), dest1); |
198 *branch2 = new BodyStreamBuffer(script_state_.Get(), dest2); | 198 *branch2 = new BodyStreamBuffer(script_state_.Get(), dest2); |
199 } | 199 } |
200 | 200 |
201 ScriptPromise BodyStreamBuffer::pull(ScriptState* script_state) { | 201 ScriptPromise BodyStreamBuffer::pull(ScriptState* script_state) { |
202 ASSERT(script_state == script_state_.Get()); | 202 DCHECK_EQ(script_state, script_state_.Get()); |
203 if (stream_needs_more_) | 203 if (stream_needs_more_) |
204 return ScriptPromise::CastUndefined(script_state); | 204 return ScriptPromise::CastUndefined(script_state); |
205 stream_needs_more_ = true; | 205 stream_needs_more_ = true; |
206 ProcessData(); | 206 ProcessData(); |
207 return ScriptPromise::CastUndefined(script_state); | 207 return ScriptPromise::CastUndefined(script_state); |
208 } | 208 } |
209 | 209 |
210 ScriptPromise BodyStreamBuffer::Cancel(ScriptState* script_state, | 210 ScriptPromise BodyStreamBuffer::Cancel(ScriptState* script_state, |
211 ScriptValue reason) { | 211 ScriptValue reason) { |
212 ASSERT(script_state == script_state_.Get()); | 212 DCHECK_EQ(script_state, script_state_.Get()); |
213 Close(); | 213 Close(); |
214 return ScriptPromise::CastUndefined(script_state); | 214 return ScriptPromise::CastUndefined(script_state); |
215 } | 215 } |
216 | 216 |
217 void BodyStreamBuffer::OnStateChange() { | 217 void BodyStreamBuffer::OnStateChange() { |
218 if (!consumer_ || !GetExecutionContext() || | 218 if (!consumer_ || !GetExecutionContext() || |
219 GetExecutionContext()->IsContextDestroyed()) | 219 GetExecutionContext()->IsContextDestroyed()) |
220 return; | 220 return; |
221 | 221 |
222 switch (consumer_->GetPublicState()) { | 222 switch (consumer_->GetPublicState()) { |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
339 NOTREACHED(); | 339 NOTREACHED(); |
340 return; | 340 return; |
341 case BytesConsumer::Result::kError: | 341 case BytesConsumer::Result::kError: |
342 GetError(); | 342 GetError(); |
343 return; | 343 return; |
344 } | 344 } |
345 } | 345 } |
346 } | 346 } |
347 | 347 |
348 void BodyStreamBuffer::EndLoading() { | 348 void BodyStreamBuffer::EndLoading() { |
349 ASSERT(loader_); | 349 DCHECK(loader_); |
350 loader_ = nullptr; | 350 loader_ = nullptr; |
351 } | 351 } |
352 | 352 |
353 void BodyStreamBuffer::StopLoading() { | 353 void BodyStreamBuffer::StopLoading() { |
354 if (!loader_) | 354 if (!loader_) |
355 return; | 355 return; |
356 loader_->Cancel(); | 356 loader_->Cancel(); |
357 loader_ = nullptr; | 357 loader_ = nullptr; |
358 } | 358 } |
359 | 359 |
(...skipping 28 matching lines...) Expand all Loading... |
388 } | 388 } |
389 if (is_errored) | 389 if (is_errored) |
390 return BytesConsumer::CreateErrored(BytesConsumer::Error("error")); | 390 return BytesConsumer::CreateErrored(BytesConsumer::Error("error")); |
391 | 391 |
392 DCHECK(consumer); | 392 DCHECK(consumer); |
393 consumer->ClearClient(); | 393 consumer->ClearClient(); |
394 return consumer; | 394 return consumer; |
395 } | 395 } |
396 | 396 |
397 } // namespace blink | 397 } // namespace blink |
OLD | NEW |