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

Side by Side Diff: third_party/WebKit/Source/core/streams/ReadableStreamOperations.cpp

Issue 2319013006: Remove isTerminating checks from ReadableStreamOperations (Closed)
Patch Set: fix Created 4 years, 3 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "core/streams/ReadableStreamOperations.h" 5 #include "core/streams/ReadableStreamOperations.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptState.h" 8 #include "bindings/core/v8/ScriptState.h"
9 #include "bindings/core/v8/ToV8.h" 9 #include "bindings/core/v8/ToV8.h"
10 #include "bindings/core/v8/V8ScriptRunner.h" 10 #include "bindings/core/v8/V8ScriptRunner.h"
11 #include "bindings/core/v8/WorkerOrWorkletScriptController.h"
12 #include "core/streams/UnderlyingSourceBase.h" 11 #include "core/streams/UnderlyingSourceBase.h"
13 #include "core/workers/WorkerGlobalScope.h"
14 12
15 namespace blink { 13 namespace blink {
16 14
17 namespace {
18
19 bool isTerminating(ScriptState* scriptState)
20 {
21 ExecutionContext* executionContext = scriptState->getExecutionContext();
22 if (!executionContext)
23 return true;
24 if (!executionContext->isWorkerGlobalScope())
25 return false;
26 return toWorkerGlobalScope(executionContext)->scriptController()->isExecutio nTerminating();
27 }
28
29 } // namespace
30
31 ScriptValue ReadableStreamOperations::createReadableStream(ScriptState* scriptSt ate, UnderlyingSourceBase* underlyingSource, ScriptValue strategy) 15 ScriptValue ReadableStreamOperations::createReadableStream(ScriptState* scriptSt ate, UnderlyingSourceBase* underlyingSource, ScriptValue strategy)
32 { 16 {
33 if (isTerminating(scriptState))
34 return ScriptValue();
35 ScriptState::Scope scope(scriptState); 17 ScriptState::Scope scope(scriptState);
36 18
37 v8::Local<v8::Value> jsUnderlyingSource = toV8(underlyingSource, scriptState ); 19 v8::Local<v8::Value> jsUnderlyingSource = toV8(underlyingSource, scriptState );
38 v8::Local<v8::Value> jsStrategy = strategy.v8Value(); 20 v8::Local<v8::Value> jsStrategy = strategy.v8Value();
39 v8::Local<v8::Value> args[] = { jsUnderlyingSource, jsStrategy }; 21 v8::Local<v8::Value> args[] = { jsUnderlyingSource, jsStrategy };
40 v8::MaybeLocal<v8::Value> jsStream = V8ScriptRunner::callExtra(scriptState, "createReadableStreamWithExternalController", args); 22 return ScriptValue(scriptState, V8ScriptRunner::callExtraOrCrash(scriptState , "createReadableStreamWithExternalController", args));
41 if (isTerminating(scriptState))
42 return ScriptValue();
43 return ScriptValue(scriptState, jsStream.ToLocalChecked());
44 } 23 }
45 24
46 ScriptValue ReadableStreamOperations::createCountQueuingStrategy(ScriptState* sc riptState, size_t highWaterMark) 25 ScriptValue ReadableStreamOperations::createCountQueuingStrategy(ScriptState* sc riptState, size_t highWaterMark)
47 { 26 {
48 if (isTerminating(scriptState))
49 return ScriptValue();
50 ScriptState::Scope scope(scriptState); 27 ScriptState::Scope scope(scriptState);
51 28
52 v8::Local<v8::Value> args[] = { v8::Number::New(scriptState->isolate(), high WaterMark) }; 29 v8::Local<v8::Value> args[] = { v8::Number::New(scriptState->isolate(), high WaterMark) };
53 v8::MaybeLocal<v8::Value> jsStrategy = V8ScriptRunner::callExtra(scriptState , "createBuiltInCountQueuingStrategy", args); 30 return ScriptValue(scriptState, V8ScriptRunner::callExtraOrCrash(scriptState , "createBuiltInCountQueuingStrategy", args));
54 if (isTerminating(scriptState))
55 return ScriptValue();
56
57 return ScriptValue(scriptState, jsStrategy.ToLocalChecked());
58 } 31 }
59 32
60 ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, Script Value stream, ExceptionState& es) 33 ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, Script Value stream, ExceptionState& es)
61 { 34 {
62 if (isTerminating(scriptState))
63 return ScriptValue();
64 ASSERT(isReadableStream(scriptState, stream)); 35 ASSERT(isReadableStream(scriptState, stream));
65 36
66 v8::TryCatch block(scriptState->isolate()); 37 v8::TryCatch block(scriptState->isolate());
67 v8::Local<v8::Value> args[] = { stream.v8Value() }; 38 v8::Local<v8::Value> args[] = { stream.v8Value() };
68 ScriptValue result(scriptState, V8ScriptRunner::callExtra(scriptState, "Acqu ireReadableStreamDefaultReader", args)); 39 ScriptValue result(scriptState, V8ScriptRunner::callExtra(scriptState, "Acqu ireReadableStreamDefaultReader", args));
69 if (block.HasCaught()) 40 if (block.HasCaught())
70 es.rethrowV8Exception(block.Exception()); 41 es.rethrowV8Exception(block.Exception());
71 return result; 42 return result;
72 } 43 }
73 44
74 bool ReadableStreamOperations::isReadableStream(ScriptState* scriptState, Script Value value) 45 bool ReadableStreamOperations::isReadableStream(ScriptState* scriptState, Script Value value)
75 { 46 {
76 if (isTerminating(scriptState))
77 return true;
78 ASSERT(!value.isEmpty()); 47 ASSERT(!value.isEmpty());
79 48
80 if (!value.isObject()) 49 if (!value.isObject())
81 return false; 50 return false;
82 51
83 v8::Local<v8::Value> args[] = { value.v8Value() }; 52 v8::Local<v8::Value> args[] = { value.v8Value() };
84 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStream", args); 53 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStream", arg s)->ToBoolean()->Value();
85 if (isTerminating(scriptState))
86 return true;
87 return result.ToLocalChecked()->ToBoolean()->Value();
88 } 54 }
89 55
90 bool ReadableStreamOperations::isDisturbed(ScriptState* scriptState, ScriptValue stream) 56 bool ReadableStreamOperations::isDisturbed(ScriptState* scriptState, ScriptValue stream)
91 { 57 {
92 if (isTerminating(scriptState))
93 return true;
94 ASSERT(isReadableStream(scriptState, stream)); 58 ASSERT(isReadableStream(scriptState, stream));
95 59
96 v8::Local<v8::Value> args[] = { stream.v8Value() }; 60 v8::Local<v8::Value> args[] = { stream.v8Value() };
97 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDisturbed", args); 61 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamDistur bed", args)->ToBoolean()->Value();
98 if (isTerminating(scriptState))
99 return true;
100 return result.ToLocalChecked()->ToBoolean()->Value();
101 } 62 }
102 63
103 bool ReadableStreamOperations::isLocked(ScriptState* scriptState, ScriptValue st ream) 64 bool ReadableStreamOperations::isLocked(ScriptState* scriptState, ScriptValue st ream)
104 { 65 {
105 if (isTerminating(scriptState))
106 return true;
107 ASSERT(isReadableStream(scriptState, stream)); 66 ASSERT(isReadableStream(scriptState, stream));
108 67
109 v8::Local<v8::Value> args[] = { stream.v8Value() }; 68 v8::Local<v8::Value> args[] = { stream.v8Value() };
110 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamLocked", args); 69 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamLocked ", args)->ToBoolean()->Value();
111 if (isTerminating(scriptState))
112 return true;
113 return result.ToLocalChecked()->ToBoolean()->Value();
114 } 70 }
115 71
116 bool ReadableStreamOperations::isReadable(ScriptState* scriptState, ScriptValue stream) 72 bool ReadableStreamOperations::isReadable(ScriptState* scriptState, ScriptValue stream)
117 { 73 {
118 if (isTerminating(scriptState))
119 return false;
120 ASSERT(isReadableStream(scriptState, stream)); 74 ASSERT(isReadableStream(scriptState, stream));
121 75
122 v8::Local<v8::Value> args[] = { stream.v8Value() }; 76 v8::Local<v8::Value> args[] = { stream.v8Value() };
123 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtraOrCrash(scriptSt ate, "IsReadableStreamReadable", args); 77 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamReadab le", args)->ToBoolean()->Value();
124 if (isTerminating(scriptState))
125 return false;
126 return result.ToLocalChecked()->ToBoolean()->Value();
127 } 78 }
128 79
129 bool ReadableStreamOperations::isClosed(ScriptState* scriptState, ScriptValue st ream) 80 bool ReadableStreamOperations::isClosed(ScriptState* scriptState, ScriptValue st ream)
130 { 81 {
131 if (isTerminating(scriptState))
132 return false;
133 ASSERT(isReadableStream(scriptState, stream)); 82 ASSERT(isReadableStream(scriptState, stream));
134 83
135 v8::Local<v8::Value> args[] = { stream.v8Value() }; 84 v8::Local<v8::Value> args[] = { stream.v8Value() };
136 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamClosed", args); 85 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamClosed ", args)->ToBoolean()->Value();
137 if (isTerminating(scriptState))
138 return false;
139 return result.ToLocalChecked()->ToBoolean()->Value();
140 } 86 }
141 87
142 bool ReadableStreamOperations::isErrored(ScriptState* scriptState, ScriptValue s tream) 88 bool ReadableStreamOperations::isErrored(ScriptState* scriptState, ScriptValue s tream)
143 { 89 {
144 if (isTerminating(scriptState))
145 return true;
146 ASSERT(isReadableStream(scriptState, stream)); 90 ASSERT(isReadableStream(scriptState, stream));
147 91
148 v8::Local<v8::Value> args[] = { stream.v8Value() }; 92 v8::Local<v8::Value> args[] = { stream.v8Value() };
149 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamErrored", args); 93 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamErrore d", args)->ToBoolean()->Value();
150 if (isTerminating(scriptState))
151 return true;
152 return result.ToLocalChecked()->ToBoolean()->Value();
153 } 94 }
154 95
155 bool ReadableStreamOperations::isReadableStreamDefaultReader(ScriptState* script State, ScriptValue value) 96 bool ReadableStreamOperations::isReadableStreamDefaultReader(ScriptState* script State, ScriptValue value)
156 { 97 {
157 if (isTerminating(scriptState))
158 return true;
159 ASSERT(!value.isEmpty()); 98 ASSERT(!value.isEmpty());
160 99
161 if (!value.isObject()) 100 if (!value.isObject())
162 return false; 101 return false;
163 102
164 v8::Local<v8::Value> args[] = { value.v8Value() }; 103 v8::Local<v8::Value> args[] = { value.v8Value() };
165 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDefaultReader", args); 104 return V8ScriptRunner::callExtraOrCrash(scriptState, "IsReadableStreamDefaul tReader", args)->ToBoolean()->Value();
166 if (isTerminating(scriptState))
167 return true;
168 return result.ToLocalChecked()->ToBoolean()->Value();
169 } 105 }
170 106
171 ScriptPromise ReadableStreamOperations::defaultReaderRead(ScriptState* scriptSta te, ScriptValue reader) 107 ScriptPromise ReadableStreamOperations::defaultReaderRead(ScriptState* scriptSta te, ScriptValue reader)
172 { 108 {
173 if (isTerminating(scriptState))
174 return ScriptPromise();
175 ASSERT(isReadableStreamDefaultReader(scriptState, reader)); 109 ASSERT(isReadableStreamDefaultReader(scriptState, reader));
176 110
177 v8::Local<v8::Value> args[] = { reader.v8Value() }; 111 v8::Local<v8::Value> args[] = { reader.v8Value() };
178 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "R eadableStreamDefaultReaderRead", args); 112 return ScriptPromise::cast(scriptState, V8ScriptRunner::callExtraOrCrash(scr iptState, "ReadableStreamDefaultReaderRead", args));
179 if (isTerminating(scriptState))
180 return ScriptPromise();
181 return ScriptPromise::cast(scriptState, result.ToLocalChecked());
182 } 113 }
183 114
184 void ReadableStreamOperations::tee(ScriptState* scriptState, ScriptValue stream, ScriptValue* newStream1, ScriptValue* newStream2) 115 void ReadableStreamOperations::tee(ScriptState* scriptState, ScriptValue stream, ScriptValue* newStream1, ScriptValue* newStream2)
185 { 116 {
186 if (isTerminating(scriptState))
187 return;
188 DCHECK(isReadableStream(scriptState, stream)); 117 DCHECK(isReadableStream(scriptState, stream));
189 DCHECK(!isLocked(scriptState, stream)); 118 DCHECK(!isLocked(scriptState, stream));
190 119
191 v8::Local<v8::Value> args[] = { stream.v8Value() }; 120 v8::Local<v8::Value> args[] = { stream.v8Value() };
192 121
193 v8::MaybeLocal<v8::Value> maybeResult = V8ScriptRunner::callExtra(scriptStat e, "ReadableStreamTee", args); 122 ScriptValue result(scriptState, V8ScriptRunner::callExtraOrCrash(scriptState , "ReadableStreamTee", args));
194 if (isTerminating(scriptState))
195 return;
196 ScriptValue result(scriptState, maybeResult.ToLocalChecked());
197 DCHECK(result.v8Value()->IsArray()); 123 DCHECK(result.v8Value()->IsArray());
198 v8::Local<v8::Array> branches = result.v8Value().As<v8::Array>(); 124 v8::Local<v8::Array> branches = result.v8Value().As<v8::Array>();
199 DCHECK_EQ(2u, branches->Length()); 125 DCHECK_EQ(2u, branches->Length());
200 126
201 v8::MaybeLocal<v8::Value> maybeStream1 = branches->Get(scriptState->context( ), 0); 127 *newStream1 = ScriptValue(scriptState, branches->Get(scriptState->context(), 0).ToLocalChecked());
202 if (isTerminating(scriptState)) 128 *newStream2 = ScriptValue(scriptState, branches->Get(scriptState->context(), 1).ToLocalChecked());
203 return;
204 v8::MaybeLocal<v8::Value> maybeStream2 = branches->Get(scriptState->context( ), 1);
205 if (isTerminating(scriptState))
206 return;
207
208 *newStream1 = ScriptValue(scriptState, maybeStream1.ToLocalChecked());
209 *newStream2 = ScriptValue(scriptState, maybeStream2.ToLocalChecked());
210 129
211 DCHECK(isReadableStream(scriptState, *newStream1)); 130 DCHECK(isReadableStream(scriptState, *newStream1));
212 DCHECK(isReadableStream(scriptState, *newStream2)); 131 DCHECK(isReadableStream(scriptState, *newStream2));
213 } 132 }
214 133
215 } // namespace blink 134 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698