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 |