Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: third_party/WebKit/Source/modules/fetch/BodyStreamBuffer.cpp

Issue 2141383002: [Fetch API] Remove HandleScope to protect local handles (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "bindings/core/v8/ScriptState.h" 7 #include "bindings/core/v8/ScriptState.h"
8 #include "bindings/core/v8/V8HiddenValue.h" 8 #include "bindings/core/v8/V8HiddenValue.h"
9 #include "bindings/core/v8/WorkerOrWorkletScriptController.h" 9 #include "bindings/core/v8/WorkerOrWorkletScriptController.h"
10 #include "core/dom/DOMArrayBuffer.h" 10 #include "core/dom/DOMArrayBuffer.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 }; 99 };
100 100
101 BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, std::unique_ptr<Fet chDataConsumerHandle> handle) 101 BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, std::unique_ptr<Fet chDataConsumerHandle> handle)
102 : UnderlyingSourceBase(scriptState) 102 : UnderlyingSourceBase(scriptState)
103 , m_scriptState(scriptState) 103 , m_scriptState(scriptState)
104 , m_handle(std::move(handle)) 104 , m_handle(std::move(handle))
105 , m_reader(m_handle->obtainReader(this)) 105 , m_reader(m_handle->obtainReader(this))
106 , m_madeFromReadableStream(false) 106 , m_madeFromReadableStream(false)
107 { 107 {
108 if (RuntimeEnabledFeatures::responseBodyWithV8ExtraStreamEnabled()) { 108 if (RuntimeEnabledFeatures::responseBodyWithV8ExtraStreamEnabled()) {
109 ScriptState::Scope scope(scriptState);
110 if (isTerminating(scriptState)) { 109 if (isTerminating(scriptState)) {
111 m_reader = nullptr; 110 m_reader = nullptr;
112 m_handle = nullptr; 111 m_handle = nullptr;
113 return; 112 return;
114 } 113 }
115 v8::Local<v8::Value> bodyValue = toV8(this, scriptState); 114 v8::Local<v8::Value> bodyValue = toV8(this, scriptState);
116 if (bodyValue.IsEmpty()) { 115 if (bodyValue.IsEmpty()) {
117 DCHECK(isTerminating(scriptState)); 116 DCHECK(isTerminating(scriptState));
118 m_reader = nullptr; 117 m_reader = nullptr;
119 m_handle = nullptr; 118 m_handle = nullptr;
(...skipping 14 matching lines...) Expand all
134 m_stream = new ReadableByteStream(this, new ReadableByteStream::StrictSt rategy); 133 m_stream = new ReadableByteStream(this, new ReadableByteStream::StrictSt rategy);
135 m_stream->didSourceStart(); 134 m_stream->didSourceStart();
136 } 135 }
137 } 136 }
138 137
139 BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, ScriptValue stream) 138 BodyStreamBuffer::BodyStreamBuffer(ScriptState* scriptState, ScriptValue stream)
140 : UnderlyingSourceBase(scriptState) 139 : UnderlyingSourceBase(scriptState)
141 , m_scriptState(scriptState) 140 , m_scriptState(scriptState)
142 , m_madeFromReadableStream(true) 141 , m_madeFromReadableStream(true)
143 { 142 {
144 ScriptState::Scope scope(scriptState);
145 DCHECK(RuntimeEnabledFeatures::responseBodyWithV8ExtraStreamEnabled()); 143 DCHECK(RuntimeEnabledFeatures::responseBodyWithV8ExtraStreamEnabled());
146 DCHECK(ReadableStreamOperations::isReadableStream(scriptState, stream)); 144 DCHECK(ReadableStreamOperations::isReadableStream(scriptState, stream));
147 if (isTerminating(scriptState)) 145 if (isTerminating(scriptState))
148 return; 146 return;
149 v8::Local<v8::Value> bodyValue = toV8(this, scriptState); 147 v8::Local<v8::Value> bodyValue = toV8(this, scriptState);
150 if (bodyValue.IsEmpty()) { 148 if (bodyValue.IsEmpty()) {
151 DCHECK(isTerminating(scriptState)); 149 DCHECK(isTerminating(scriptState));
152 return; 150 return;
153 } 151 }
154 DCHECK(bodyValue->IsObject()); 152 DCHECK(bodyValue->IsObject());
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 } 219 }
222 220
223 void BodyStreamBuffer::tee(BodyStreamBuffer** branch1, BodyStreamBuffer** branch 2) 221 void BodyStreamBuffer::tee(BodyStreamBuffer** branch1, BodyStreamBuffer** branch 2)
224 { 222 {
225 DCHECK(!isStreamLocked()); 223 DCHECK(!isStreamLocked());
226 DCHECK(!isStreamDisturbed()); 224 DCHECK(!isStreamDisturbed());
227 *branch1 = nullptr; 225 *branch1 = nullptr;
228 *branch2 = nullptr; 226 *branch2 = nullptr;
229 227
230 if (m_madeFromReadableStream) { 228 if (m_madeFromReadableStream) {
231 ScriptState::Scope scope(m_scriptState.get());
232 ScriptValue stream1, stream2; 229 ScriptValue stream1, stream2;
233 ReadableStreamOperations::tee(m_scriptState.get(), stream(), &stream1, & stream2); 230 ReadableStreamOperations::tee(m_scriptState.get(), stream(), &stream1, & stream2);
234 *branch1 = new BodyStreamBuffer(m_scriptState.get(), stream1); 231 *branch1 = new BodyStreamBuffer(m_scriptState.get(), stream1);
235 *branch2 = new BodyStreamBuffer(m_scriptState.get(), stream2); 232 *branch2 = new BodyStreamBuffer(m_scriptState.get(), stream2);
236 return; 233 return;
237 } 234 }
238 std::unique_ptr<FetchDataConsumerHandle> handle = releaseHandle(); 235 std::unique_ptr<FetchDataConsumerHandle> handle = releaseHandle();
239 std::unique_ptr<FetchDataConsumerHandle> handle1, handle2; 236 std::unique_ptr<FetchDataConsumerHandle> handle1, handle2;
240 DataConsumerTee::create(m_scriptState->getExecutionContext(), std::move(hand le), &handle1, &handle2); 237 DataConsumerTee::create(m_scriptState->getExecutionContext(), std::move(hand le), &handle1, &handle2);
241 *branch1 = new BodyStreamBuffer(m_scriptState.get(), std::move(handle1)); 238 *branch1 = new BodyStreamBuffer(m_scriptState.get(), std::move(handle1));
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumer Handle()); 477 return createFetchDataConsumerHandleFromWebHandle(createDoneDataConsumer Handle());
481 } 478 }
482 if (isErrored) 479 if (isErrored)
483 return createFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorD ataConsumerHandle()); 480 return createFetchDataConsumerHandleFromWebHandle(createUnexpectedErrorD ataConsumerHandle());
484 481
485 DCHECK(handle); 482 DCHECK(handle);
486 return handle; 483 return handle;
487 } 484 }
488 485
489 } // namespace blink 486 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698