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

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

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

Powered by Google App Engine
This is Rietveld 408576698