| 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 |