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

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

Issue 2265863002: Streams: Remove isTerminating() calls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove empty checks 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
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 v8::MaybeLocal<v8::Value> jsStream = V8ScriptRunner::callExtra(scriptState, "createReadableStreamWithExternalController", args);
41 if (isTerminating(scriptState))
42 return ScriptValue();
43 return ScriptValue(scriptState, jsStream.ToLocalChecked()); 23 return ScriptValue(scriptState, jsStream.ToLocalChecked());
44 } 24 }
45 25
46 ScriptValue ReadableStreamOperations::createCountQueuingStrategy(ScriptState* sc riptState, size_t highWaterMark) 26 ScriptValue ReadableStreamOperations::createCountQueuingStrategy(ScriptState* sc riptState, size_t highWaterMark)
47 { 27 {
48 if (isTerminating(scriptState))
49 return ScriptValue();
50 ScriptState::Scope scope(scriptState); 28 ScriptState::Scope scope(scriptState);
51 29
52 v8::Local<v8::Value> args[] = { v8::Number::New(scriptState->isolate(), high WaterMark) }; 30 v8::Local<v8::Value> args[] = { v8::Number::New(scriptState->isolate(), high WaterMark) };
53 v8::MaybeLocal<v8::Value> jsStrategy = V8ScriptRunner::callExtra(scriptState , "createBuiltInCountQueuingStrategy", args); 31 v8::MaybeLocal<v8::Value> jsStrategy = V8ScriptRunner::callExtra(scriptState , "createBuiltInCountQueuingStrategy", args);
54 if (isTerminating(scriptState))
55 return ScriptValue();
56
57 return ScriptValue(scriptState, jsStrategy.ToLocalChecked()); 32 return ScriptValue(scriptState, jsStrategy.ToLocalChecked());
58 } 33 }
59 34
60 ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, Script Value stream, ExceptionState& es) 35 ScriptValue ReadableStreamOperations::getReader(ScriptState* scriptState, Script Value stream, ExceptionState& es)
61 { 36 {
62 if (isTerminating(scriptState))
63 return ScriptValue();
64 ASSERT(isReadableStream(scriptState, stream)); 37 ASSERT(isReadableStream(scriptState, stream));
65 38
66 v8::TryCatch block(scriptState->isolate()); 39 v8::TryCatch block(scriptState->isolate());
67 v8::Local<v8::Value> args[] = { stream.v8Value() }; 40 v8::Local<v8::Value> args[] = { stream.v8Value() };
68 ScriptValue result(scriptState, V8ScriptRunner::callExtra(scriptState, "Acqu ireReadableStreamDefaultReader", args)); 41 ScriptValue result(scriptState, V8ScriptRunner::callExtra(scriptState, "Acqu ireReadableStreamDefaultReader", args));
69 if (block.HasCaught()) 42 if (block.HasCaught())
70 es.rethrowV8Exception(block.Exception()); 43 es.rethrowV8Exception(block.Exception());
71 return result; 44 return result;
72 } 45 }
73 46
74 bool ReadableStreamOperations::isReadableStream(ScriptState* scriptState, Script Value value) 47 bool ReadableStreamOperations::isReadableStream(ScriptState* scriptState, Script Value value)
75 { 48 {
76 if (isTerminating(scriptState))
77 return true;
78 ASSERT(!value.isEmpty()); 49 ASSERT(!value.isEmpty());
79 50
80 if (!value.isObject()) 51 if (!value.isObject())
81 return false; 52 return false;
82 53
83 v8::Local<v8::Value> args[] = { value.v8Value() }; 54 v8::Local<v8::Value> args[] = { value.v8Value() };
84 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStream", args); 55 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStream", args);
85 if (isTerminating(scriptState))
86 return true;
87 return result.ToLocalChecked()->ToBoolean()->Value(); 56 return result.ToLocalChecked()->ToBoolean()->Value();
88 } 57 }
89 58
90 bool ReadableStreamOperations::isDisturbed(ScriptState* scriptState, ScriptValue stream) 59 bool ReadableStreamOperations::isDisturbed(ScriptState* scriptState, ScriptValue stream)
91 { 60 {
92 if (isTerminating(scriptState))
93 return true;
94 ASSERT(isReadableStream(scriptState, stream)); 61 ASSERT(isReadableStream(scriptState, stream));
95 62
96 v8::Local<v8::Value> args[] = { stream.v8Value() }; 63 v8::Local<v8::Value> args[] = { stream.v8Value() };
97 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDisturbed", args); 64 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDisturbed", args);
98 if (isTerminating(scriptState))
99 return true;
100 return result.ToLocalChecked()->ToBoolean()->Value(); 65 return result.ToLocalChecked()->ToBoolean()->Value();
101 } 66 }
102 67
103 bool ReadableStreamOperations::isLocked(ScriptState* scriptState, ScriptValue st ream) 68 bool ReadableStreamOperations::isLocked(ScriptState* scriptState, ScriptValue st ream)
104 { 69 {
105 if (isTerminating(scriptState))
106 return true;
107 ASSERT(isReadableStream(scriptState, stream)); 70 ASSERT(isReadableStream(scriptState, stream));
108 71
109 v8::Local<v8::Value> args[] = { stream.v8Value() }; 72 v8::Local<v8::Value> args[] = { stream.v8Value() };
110 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamLocked", args); 73 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamLocked", args);
111 if (isTerminating(scriptState))
112 return true;
113 return result.ToLocalChecked()->ToBoolean()->Value(); 74 return result.ToLocalChecked()->ToBoolean()->Value();
114 } 75 }
115 76
116 bool ReadableStreamOperations::isReadable(ScriptState* scriptState, ScriptValue stream) 77 bool ReadableStreamOperations::isReadable(ScriptState* scriptState, ScriptValue stream)
117 { 78 {
118 if (isTerminating(scriptState))
119 return false;
120 ASSERT(isReadableStream(scriptState, stream)); 79 ASSERT(isReadableStream(scriptState, stream));
121 80
122 v8::Local<v8::Value> args[] = { stream.v8Value() }; 81 v8::Local<v8::Value> args[] = { stream.v8Value() };
123 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtraOrCrash(scriptSt ate, "IsReadableStreamReadable", args); 82 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtraOrCrash(scriptSt ate, "IsReadableStreamReadable", args);
124 if (isTerminating(scriptState))
125 return false;
126 return result.ToLocalChecked()->ToBoolean()->Value(); 83 return result.ToLocalChecked()->ToBoolean()->Value();
127 } 84 }
128 85
129 bool ReadableStreamOperations::isClosed(ScriptState* scriptState, ScriptValue st ream) 86 bool ReadableStreamOperations::isClosed(ScriptState* scriptState, ScriptValue st ream)
130 { 87 {
131 if (isTerminating(scriptState))
132 return false;
133 ASSERT(isReadableStream(scriptState, stream)); 88 ASSERT(isReadableStream(scriptState, stream));
134 89
135 v8::Local<v8::Value> args[] = { stream.v8Value() }; 90 v8::Local<v8::Value> args[] = { stream.v8Value() };
136 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamClosed", args); 91 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamClosed", args);
137 if (isTerminating(scriptState))
138 return false;
139 return result.ToLocalChecked()->ToBoolean()->Value(); 92 return result.ToLocalChecked()->ToBoolean()->Value();
140 } 93 }
141 94
142 bool ReadableStreamOperations::isErrored(ScriptState* scriptState, ScriptValue s tream) 95 bool ReadableStreamOperations::isErrored(ScriptState* scriptState, ScriptValue s tream)
143 { 96 {
144 if (isTerminating(scriptState))
145 return true;
146 ASSERT(isReadableStream(scriptState, stream)); 97 ASSERT(isReadableStream(scriptState, stream));
147 98
148 v8::Local<v8::Value> args[] = { stream.v8Value() }; 99 v8::Local<v8::Value> args[] = { stream.v8Value() };
149 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamErrored", args); 100 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamErrored", args);
150 if (isTerminating(scriptState))
151 return true;
152 return result.ToLocalChecked()->ToBoolean()->Value(); 101 return result.ToLocalChecked()->ToBoolean()->Value();
153 } 102 }
154 103
155 bool ReadableStreamOperations::isReadableStreamDefaultReader(ScriptState* script State, ScriptValue value) 104 bool ReadableStreamOperations::isReadableStreamDefaultReader(ScriptState* script State, ScriptValue value)
156 { 105 {
157 if (isTerminating(scriptState))
158 return true;
159 ASSERT(!value.isEmpty()); 106 ASSERT(!value.isEmpty());
160 107
161 if (!value.isObject()) 108 if (!value.isObject())
162 return false; 109 return false;
163 110
164 v8::Local<v8::Value> args[] = { value.v8Value() }; 111 v8::Local<v8::Value> args[] = { value.v8Value() };
165 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDefaultReader", args); 112 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "I sReadableStreamDefaultReader", args);
166 if (isTerminating(scriptState))
167 return true;
168 return result.ToLocalChecked()->ToBoolean()->Value(); 113 return result.ToLocalChecked()->ToBoolean()->Value();
169 } 114 }
170 115
171 ScriptPromise ReadableStreamOperations::defaultReaderRead(ScriptState* scriptSta te, ScriptValue reader) 116 ScriptPromise ReadableStreamOperations::defaultReaderRead(ScriptState* scriptSta te, ScriptValue reader)
172 { 117 {
173 if (isTerminating(scriptState))
174 return ScriptPromise();
175 ASSERT(isReadableStreamDefaultReader(scriptState, reader)); 118 ASSERT(isReadableStreamDefaultReader(scriptState, reader));
176 119
177 v8::Local<v8::Value> args[] = { reader.v8Value() }; 120 v8::Local<v8::Value> args[] = { reader.v8Value() };
178 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "R eadableStreamDefaultReaderRead", args); 121 v8::MaybeLocal<v8::Value> result = V8ScriptRunner::callExtra(scriptState, "R eadableStreamDefaultReaderRead", args);
179 if (isTerminating(scriptState))
180 return ScriptPromise();
181 return ScriptPromise::cast(scriptState, result.ToLocalChecked()); 122 return ScriptPromise::cast(scriptState, result.ToLocalChecked());
182 } 123 }
183 124
184 void ReadableStreamOperations::tee(ScriptState* scriptState, ScriptValue stream, ScriptValue* newStream1, ScriptValue* newStream2) 125 void ReadableStreamOperations::tee(ScriptState* scriptState, ScriptValue stream, ScriptValue* newStream1, ScriptValue* newStream2)
185 { 126 {
186 if (isTerminating(scriptState))
187 return;
188 DCHECK(isReadableStream(scriptState, stream)); 127 DCHECK(isReadableStream(scriptState, stream));
189 DCHECK(!isLocked(scriptState, stream)); 128 DCHECK(!isLocked(scriptState, stream));
190 129
191 v8::Local<v8::Value> args[] = { stream.v8Value() }; 130 v8::Local<v8::Value> args[] = { stream.v8Value() };
192 131
193 v8::MaybeLocal<v8::Value> maybeResult = V8ScriptRunner::callExtra(scriptStat e, "ReadableStreamTee", args); 132 v8::MaybeLocal<v8::Value> maybeResult = V8ScriptRunner::callExtra(scriptStat e, "ReadableStreamTee", args);
194 if (isTerminating(scriptState))
195 return;
196 ScriptValue result(scriptState, maybeResult.ToLocalChecked()); 133 ScriptValue result(scriptState, maybeResult.ToLocalChecked());
197 DCHECK(result.v8Value()->IsArray()); 134 DCHECK(result.v8Value()->IsArray());
198 v8::Local<v8::Array> branches = result.v8Value().As<v8::Array>(); 135 v8::Local<v8::Array> branches = result.v8Value().As<v8::Array>();
199 DCHECK_EQ(2u, branches->Length()); 136 DCHECK_EQ(2u, branches->Length());
200 137
201 v8::MaybeLocal<v8::Value> maybeStream1 = branches->Get(scriptState->context( ), 0); 138 v8::MaybeLocal<v8::Value> maybeStream1 = branches->Get(scriptState->context( ), 0);
202 if (isTerminating(scriptState))
203 return;
204 v8::MaybeLocal<v8::Value> maybeStream2 = branches->Get(scriptState->context( ), 1); 139 v8::MaybeLocal<v8::Value> maybeStream2 = branches->Get(scriptState->context( ), 1);
205 if (isTerminating(scriptState))
206 return;
207 140
208 *newStream1 = ScriptValue(scriptState, maybeStream1.ToLocalChecked()); 141 *newStream1 = ScriptValue(scriptState, maybeStream1.ToLocalChecked());
209 *newStream2 = ScriptValue(scriptState, maybeStream2.ToLocalChecked()); 142 *newStream2 = ScriptValue(scriptState, maybeStream2.ToLocalChecked());
210 143
211 DCHECK(isReadableStream(scriptState, *newStream1)); 144 DCHECK(isReadableStream(scriptState, *newStream1));
212 DCHECK(isReadableStream(scriptState, *newStream2)); 145 DCHECK(isReadableStream(scriptState, *newStream2));
213 } 146 }
214 147
215 } // namespace blink 148 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698