Chromium Code Reviews| 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 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 117 DCHECK(bodyValue->IsObject()); | 117 DCHECK(bodyValue->IsObject()); |
| 118 v8::Local<v8::Object> body = bodyValue.As<v8::Object>(); | 118 v8::Local<v8::Object> body = bodyValue.As<v8::Object>(); |
| 119 return ScriptValue( | 119 return ScriptValue( |
| 120 m_scriptState.get(), | 120 m_scriptState.get(), |
| 121 V8PrivateProperty::getInternalBodyStream(m_scriptState->isolate()) | 121 V8PrivateProperty::getInternalBodyStream(m_scriptState->isolate()) |
| 122 .getOrEmpty(body)); | 122 .getOrEmpty(body)); |
| 123 } | 123 } |
| 124 | 124 |
| 125 PassRefPtr<BlobDataHandle> BodyStreamBuffer::drainAsBlobDataHandle( | 125 PassRefPtr<BlobDataHandle> BodyStreamBuffer::drainAsBlobDataHandle( |
| 126 BytesConsumer::BlobSizePolicy policy) { | 126 BytesConsumer::BlobSizePolicy policy) { |
| 127 ASSERT(!isStreamLocked()); | 127 DCHECK(!isStreamLocked()); |
| 128 ASSERT(!isStreamDisturbed()); | 128 DCHECK(!isStreamDisturbed()); |
| 129 if (isStreamClosed() || isStreamErrored()) | 129 if (isStreamClosed() || isStreamErrored()) |
| 130 return nullptr; | 130 return nullptr; |
| 131 | 131 |
| 132 if (m_madeFromReadableStream) | 132 if (m_madeFromReadableStream) |
| 133 return nullptr; | 133 return nullptr; |
| 134 | 134 |
| 135 RefPtr<BlobDataHandle> blobDataHandle = | 135 RefPtr<BlobDataHandle> blobDataHandle = |
| 136 m_consumer->drainAsBlobDataHandle(policy); | 136 m_consumer->drainAsBlobDataHandle(policy); |
| 137 if (blobDataHandle) { | 137 if (blobDataHandle) { |
| 138 closeAndLockAndDisturb(); | 138 closeAndLockAndDisturb(); |
| 139 return blobDataHandle.release(); | 139 return blobDataHandle.release(); |
| 140 } | 140 } |
| 141 return nullptr; | 141 return nullptr; |
| 142 } | 142 } |
| 143 | 143 |
| 144 PassRefPtr<EncodedFormData> BodyStreamBuffer::drainAsFormData() { | 144 PassRefPtr<EncodedFormData> BodyStreamBuffer::drainAsFormData() { |
| 145 ASSERT(!isStreamLocked()); | 145 DCHECK(!isStreamLocked()); |
| 146 ASSERT(!isStreamDisturbed()); | 146 DCHECK(!isStreamDisturbed()); |
| 147 if (isStreamClosed() || isStreamErrored()) | 147 if (isStreamClosed() || isStreamErrored()) |
| 148 return nullptr; | 148 return nullptr; |
| 149 | 149 |
| 150 if (m_madeFromReadableStream) | 150 if (m_madeFromReadableStream) |
| 151 return nullptr; | 151 return nullptr; |
| 152 | 152 |
| 153 RefPtr<EncodedFormData> formData = m_consumer->drainAsFormData(); | 153 RefPtr<EncodedFormData> formData = m_consumer->drainAsFormData(); |
| 154 if (formData) { | 154 if (formData) { |
| 155 closeAndLockAndDisturb(); | 155 closeAndLockAndDisturb(); |
| 156 return formData.release(); | 156 return formData.release(); |
| 157 } | 157 } |
| 158 return nullptr; | 158 return nullptr; |
| 159 } | 159 } |
| 160 | 160 |
| 161 void BodyStreamBuffer::startLoading(FetchDataLoader* loader, | 161 void BodyStreamBuffer::startLoading(FetchDataLoader* loader, |
| 162 FetchDataLoader::Client* client) { | 162 FetchDataLoader::Client* client) { |
| 163 ASSERT(!m_loader); | 163 DCHECK(!m_loader); |
| 164 ASSERT(m_scriptState->contextIsValid()); | 164 DCHECK(m_scriptState->contextIsValid()); |
| 165 m_loader = loader; | 165 m_loader = loader; |
| 166 loader->start( | 166 loader->start( |
| 167 releaseHandle(), | 167 releaseHandle(), |
| 168 new LoaderClient(m_scriptState->getExecutionContext(), this, client)); | 168 new LoaderClient(m_scriptState->getExecutionContext(), this, client)); |
| 169 } | 169 } |
| 170 | 170 |
| 171 void BodyStreamBuffer::tee(BodyStreamBuffer** branch1, | 171 void BodyStreamBuffer::tee(BodyStreamBuffer** branch1, |
| 172 BodyStreamBuffer** branch2) { | 172 BodyStreamBuffer** branch2) { |
| 173 DCHECK(!isStreamLocked()); | 173 DCHECK(!isStreamLocked()); |
| 174 DCHECK(!isStreamDisturbed()); | 174 DCHECK(!isStreamDisturbed()); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 185 } | 185 } |
| 186 BytesConsumer* dest1 = nullptr; | 186 BytesConsumer* dest1 = nullptr; |
| 187 BytesConsumer* dest2 = nullptr; | 187 BytesConsumer* dest2 = nullptr; |
| 188 BytesConsumer::tee(m_scriptState->getExecutionContext(), releaseHandle(), | 188 BytesConsumer::tee(m_scriptState->getExecutionContext(), releaseHandle(), |
| 189 &dest1, &dest2); | 189 &dest1, &dest2); |
| 190 *branch1 = new BodyStreamBuffer(m_scriptState.get(), dest1); | 190 *branch1 = new BodyStreamBuffer(m_scriptState.get(), dest1); |
| 191 *branch2 = new BodyStreamBuffer(m_scriptState.get(), dest2); | 191 *branch2 = new BodyStreamBuffer(m_scriptState.get(), dest2); |
| 192 } | 192 } |
| 193 | 193 |
| 194 ScriptPromise BodyStreamBuffer::pull(ScriptState* scriptState) { | 194 ScriptPromise BodyStreamBuffer::pull(ScriptState* scriptState) { |
| 195 ASSERT(scriptState == m_scriptState.get()); | 195 DCHECK(scriptState == m_scriptState.get()); |
|
tkent
2017/04/08 02:29:54
Use DCHECK_EQ if it doesn't cause a build failure.
| |
| 196 if (m_streamNeedsMore) | 196 if (m_streamNeedsMore) |
| 197 return ScriptPromise::castUndefined(scriptState); | 197 return ScriptPromise::castUndefined(scriptState); |
| 198 m_streamNeedsMore = true; | 198 m_streamNeedsMore = true; |
| 199 processData(); | 199 processData(); |
| 200 return ScriptPromise::castUndefined(scriptState); | 200 return ScriptPromise::castUndefined(scriptState); |
| 201 } | 201 } |
| 202 | 202 |
| 203 ScriptPromise BodyStreamBuffer::cancel(ScriptState* scriptState, | 203 ScriptPromise BodyStreamBuffer::cancel(ScriptState* scriptState, |
| 204 ScriptValue reason) { | 204 ScriptValue reason) { |
| 205 ASSERT(scriptState == m_scriptState.get()); | 205 DCHECK(scriptState == m_scriptState.get()); |
|
tkent
2017/04/08 02:29:54
Use DCHECK_EQ if it doesn't cause a build failure.
| |
| 206 close(); | 206 close(); |
| 207 return ScriptPromise::castUndefined(scriptState); | 207 return ScriptPromise::castUndefined(scriptState); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void BodyStreamBuffer::onStateChange() { | 210 void BodyStreamBuffer::onStateChange() { |
| 211 if (!m_consumer || !getExecutionContext() || | 211 if (!m_consumer || !getExecutionContext() || |
| 212 getExecutionContext()->isContextDestroyed()) | 212 getExecutionContext()->isContextDestroyed()) |
| 213 return; | 213 return; |
| 214 | 214 |
| 215 switch (m_consumer->getPublicState()) { | 215 switch (m_consumer->getPublicState()) { |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 NOTREACHED(); | 332 NOTREACHED(); |
| 333 return; | 333 return; |
| 334 case BytesConsumer::Result::Error: | 334 case BytesConsumer::Result::Error: |
| 335 error(); | 335 error(); |
| 336 return; | 336 return; |
| 337 } | 337 } |
| 338 } | 338 } |
| 339 } | 339 } |
| 340 | 340 |
| 341 void BodyStreamBuffer::endLoading() { | 341 void BodyStreamBuffer::endLoading() { |
| 342 ASSERT(m_loader); | 342 DCHECK(m_loader); |
| 343 m_loader = nullptr; | 343 m_loader = nullptr; |
| 344 } | 344 } |
| 345 | 345 |
| 346 void BodyStreamBuffer::stopLoading() { | 346 void BodyStreamBuffer::stopLoading() { |
| 347 if (!m_loader) | 347 if (!m_loader) |
| 348 return; | 348 return; |
| 349 m_loader->cancel(); | 349 m_loader->cancel(); |
| 350 m_loader = nullptr; | 350 m_loader = nullptr; |
| 351 } | 351 } |
| 352 | 352 |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 381 } | 381 } |
| 382 if (isErrored) | 382 if (isErrored) |
| 383 return BytesConsumer::createErrored(BytesConsumer::Error("error")); | 383 return BytesConsumer::createErrored(BytesConsumer::Error("error")); |
| 384 | 384 |
| 385 DCHECK(consumer); | 385 DCHECK(consumer); |
| 386 consumer->clearClient(); | 386 consumer->clearClient(); |
| 387 return consumer; | 387 return consumer; |
| 388 } | 388 } |
| 389 | 389 |
| 390 } // namespace blink | 390 } // namespace blink |
| OLD | NEW |