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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ReadableStreamOperationsTest.cpp

Issue 1743763004: Use v8::MicrotasksScope internally in V8RecursionScope. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v8rs-2-endofscope
Patch Set: v8_helpers Created 4 years, 9 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 "bindings/core/v8/ReadableStreamOperations.h" 5 #include "bindings/core/v8/ReadableStreamOperations.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptFunction.h" 8 #include "bindings/core/v8/ScriptFunction.h"
9 #include "bindings/core/v8/ScriptState.h" 9 #include "bindings/core/v8/ScriptState.h"
10 #include "bindings/core/v8/ScriptValue.h" 10 #include "bindings/core/v8/ScriptValue.h"
11 #include "bindings/core/v8/V8Binding.h" 11 #include "bindings/core/v8/V8Binding.h"
12 #include "bindings/core/v8/V8BindingForTesting.h" 12 #include "bindings/core/v8/V8BindingForTesting.h"
13 #include "bindings/core/v8/V8BindingMacros.h" 13 #include "bindings/core/v8/V8BindingMacros.h"
14 #include "bindings/core/v8/V8IteratorResultValue.h" 14 #include "bindings/core/v8/V8IteratorResultValue.h"
15 #include "bindings/core/v8/V8RecursionScope.h"
15 #include "bindings/core/v8/V8ThrowException.h" 16 #include "bindings/core/v8/V8ThrowException.h"
16 #include "core/dom/Document.h" 17 #include "core/dom/Document.h"
17 #include "core/streams/ReadableStreamController.h" 18 #include "core/streams/ReadableStreamController.h"
18 #include "core/streams/UnderlyingSourceBase.h" 19 #include "core/streams/UnderlyingSourceBase.h"
19 #include "platform/heap/Handle.h" 20 #include "platform/heap/Handle.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 #include <v8.h> 22 #include <v8.h>
22 23
23 namespace blink { 24 namespace blink {
24 25
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 ReadableStreamOperationsTest() 132 ReadableStreamOperationsTest()
132 : m_scope(v8::Isolate::GetCurrent()) 133 : m_scope(v8::Isolate::GetCurrent())
133 , m_block(isolate()) 134 , m_block(isolate())
134 , m_document(Document::create()) 135 , m_document(Document::create())
135 { 136 {
136 getScriptState()->setExecutionContext(m_document.get()); 137 getScriptState()->setExecutionContext(m_document.get());
137 } 138 }
138 ~ReadableStreamOperationsTest() override 139 ~ReadableStreamOperationsTest() override
139 { 140 {
140 // Execute all pending microtasks 141 // Execute all pending microtasks
141 isolate()->RunMicrotasks(); 142 v8::MicrotasksScope::PerformCheckpoint(isolate());
142 EXPECT_FALSE(m_block.HasCaught()); 143 EXPECT_FALSE(m_block.HasCaught());
143 } 144 }
144 145
145 ScriptState* getScriptState() const { return m_scope.getScriptState(); } 146 ScriptState* getScriptState() const { return m_scope.getScriptState(); }
146 v8::Isolate* isolate() const { return getScriptState()->isolate(); } 147 v8::Isolate* isolate() const { return getScriptState()->isolate(); }
147 148
148 ScriptValue eval(const char* s) 149 ScriptValue eval(const char* s)
149 { 150 {
150 v8::Local<v8::String> source; 151 v8::Local<v8::String> source;
151 v8::Local<v8::Script> script; 152 v8::Local<v8::Script> script;
153 V8RecursionScope::MicrotaskSuppression microtasks(isolate());
152 if (!v8Call(v8::String::NewFromUtf8(isolate(), s, v8::NewStringType::kNo rmal), source)) { 154 if (!v8Call(v8::String::NewFromUtf8(isolate(), s, v8::NewStringType::kNo rmal), source)) {
153 ADD_FAILURE(); 155 ADD_FAILURE();
154 return ScriptValue(); 156 return ScriptValue();
155 } 157 }
156 if (!v8Call(v8::Script::Compile(getScriptState()->context(), source), sc ript)) { 158 if (!v8Call(v8::Script::Compile(getScriptState()->context(), source), sc ript)) {
157 ADD_FAILURE() << "Compilation fails"; 159 ADD_FAILURE() << "Compilation fails";
158 return ScriptValue(); 160 return ScriptValue();
159 } 161 }
160 return ScriptValue(getScriptState(), script->Run(getScriptState()->conte xt())); 162 return ScriptValue(getScriptState(), script->Run(getScriptState()->conte xt()));
161 } 163 }
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 248
247 Iteration* it1 = new Iteration(); 249 Iteration* it1 = new Iteration();
248 Iteration* it2 = new Iteration(); 250 Iteration* it2 = new Iteration();
249 ReadableStreamOperations::read(getScriptState(), reader).then( 251 ReadableStreamOperations::read(getScriptState(), reader).then(
250 Function::createFunction(getScriptState(), it1), 252 Function::createFunction(getScriptState(), it1),
251 NotReached::createFunction(getScriptState())); 253 NotReached::createFunction(getScriptState()));
252 ReadableStreamOperations::read(getScriptState(), reader).then( 254 ReadableStreamOperations::read(getScriptState(), reader).then(
253 Function::createFunction(getScriptState(), it2), 255 Function::createFunction(getScriptState(), it2),
254 NotReached::createFunction(getScriptState())); 256 NotReached::createFunction(getScriptState()));
255 257
256 isolate()->RunMicrotasks(); 258 v8::MicrotasksScope::PerformCheckpoint(isolate());
257 EXPECT_FALSE(it1->isSet()); 259 EXPECT_FALSE(it1->isSet());
258 EXPECT_FALSE(it2->isSet()); 260 EXPECT_FALSE(it2->isSet());
259 261
260 ASSERT_FALSE(evalWithPrintingError("controller.enqueue('hello')").isEmpty()) ; 262 ASSERT_FALSE(evalWithPrintingError("controller.enqueue('hello')").isEmpty()) ;
261 isolate()->RunMicrotasks(); 263 v8::MicrotasksScope::PerformCheckpoint(isolate());
262 EXPECT_TRUE(it1->isSet()); 264 EXPECT_TRUE(it1->isSet());
263 EXPECT_TRUE(it1->isValid()); 265 EXPECT_TRUE(it1->isValid());
264 EXPECT_FALSE(it1->isDone()); 266 EXPECT_FALSE(it1->isDone());
265 EXPECT_EQ("hello", it1->value()); 267 EXPECT_EQ("hello", it1->value());
266 EXPECT_FALSE(it2->isSet()); 268 EXPECT_FALSE(it2->isSet());
267 269
268 ASSERT_FALSE(evalWithPrintingError("controller.close()").isEmpty()); 270 ASSERT_FALSE(evalWithPrintingError("controller.close()").isEmpty());
269 isolate()->RunMicrotasks(); 271 v8::MicrotasksScope::PerformCheckpoint(isolate());
270 EXPECT_TRUE(it1->isSet()); 272 EXPECT_TRUE(it1->isSet());
271 EXPECT_TRUE(it1->isValid()); 273 EXPECT_TRUE(it1->isValid());
272 EXPECT_FALSE(it1->isDone()); 274 EXPECT_FALSE(it1->isDone());
273 EXPECT_EQ("hello", it1->value()); 275 EXPECT_EQ("hello", it1->value());
274 EXPECT_TRUE(it2->isSet()); 276 EXPECT_TRUE(it2->isSet());
275 EXPECT_TRUE(it2->isValid()); 277 EXPECT_TRUE(it2->isValid());
276 EXPECT_TRUE(it2->isDone()); 278 EXPECT_TRUE(it2->isDone());
277 } 279 }
278 280
279 TEST_F(ReadableStreamOperationsTest, CreateReadableStreamWithCustomUnderlyingSou rceAndStrategy) 281 TEST_F(ReadableStreamOperationsTest, CreateReadableStreamWithCustomUnderlyingSou rceAndStrategy)
(...skipping 22 matching lines...) Expand all
302 } 304 }
303 ASSERT_FALSE(reader.isEmpty()); 305 ASSERT_FALSE(reader.isEmpty());
304 306
305 Iteration* it1 = new Iteration(); 307 Iteration* it1 = new Iteration();
306 Iteration* it2 = new Iteration(); 308 Iteration* it2 = new Iteration();
307 Iteration* it3 = new Iteration(); 309 Iteration* it3 = new Iteration();
308 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it1), NotReached::createFunction(getScriptState())) ; 310 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it1), NotReached::createFunction(getScriptState())) ;
309 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it2), NotReached::createFunction(getScriptState())) ; 311 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it2), NotReached::createFunction(getScriptState())) ;
310 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it3), NotReached::createFunction(getScriptState())) ; 312 ReadableStreamOperations::read(getScriptState(), reader).then(Function::crea teFunction(getScriptState(), it3), NotReached::createFunction(getScriptState())) ;
311 313
312 isolate()->RunMicrotasks(); 314 v8::MicrotasksScope::PerformCheckpoint(isolate());
313 315
314 EXPECT_EQ(10, underlyingSource->desiredSize()); 316 EXPECT_EQ(10, underlyingSource->desiredSize());
315 317
316 EXPECT_TRUE(it1->isSet()); 318 EXPECT_TRUE(it1->isSet());
317 EXPECT_TRUE(it1->isValid()); 319 EXPECT_TRUE(it1->isValid());
318 EXPECT_FALSE(it1->isDone()); 320 EXPECT_FALSE(it1->isDone());
319 EXPECT_EQ("a", it1->value()); 321 EXPECT_EQ("a", it1->value());
320 322
321 EXPECT_TRUE(it2->isSet()); 323 EXPECT_TRUE(it2->isSet());
322 EXPECT_TRUE(it2->isValid()); 324 EXPECT_TRUE(it2->isValid());
323 EXPECT_FALSE(it2->isDone()); 325 EXPECT_FALSE(it2->isDone());
324 EXPECT_EQ("b", it2->value()); 326 EXPECT_EQ("b", it2->value());
325 327
326 EXPECT_FALSE(it3->isSet()); 328 EXPECT_FALSE(it3->isSet());
327 329
328 underlyingSource->close(); 330 underlyingSource->close();
329 isolate()->RunMicrotasks(); 331 v8::MicrotasksScope::PerformCheckpoint(isolate());
330 332
331 EXPECT_TRUE(it3->isSet()); 333 EXPECT_TRUE(it3->isSet());
332 EXPECT_TRUE(it3->isValid()); 334 EXPECT_TRUE(it3->isValid());
333 EXPECT_TRUE(it3->isDone()); 335 EXPECT_TRUE(it3->isDone());
334 } 336 }
335 337
336 } // namespace 338 } // namespace
337 339
338 } // namespace blink 340 } // namespace blink
339 341
OLDNEW
« no previous file with comments | « gin/run_microtasks_observer.cc ('k') | third_party/WebKit/Source/bindings/core/v8/ScriptPromisePropertyTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698