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

Side by Side Diff: Source/bindings/core/v8/ScriptPromiseResolverTest.cpp

Issue 1233173002: Have ScriptPromiseResolver on the Oilpan heap always. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: smaller review updates Created 5 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 "config.h" 5 #include "config.h"
6 #include "bindings/core/v8/ScriptPromiseResolver.h" 6 #include "bindings/core/v8/ScriptPromiseResolver.h"
7 7
8 #include "bindings/core/v8/ScriptFunction.h" 8 #include "bindings/core/v8/ScriptFunction.h"
9 #include "bindings/core/v8/ScriptValue.h" 9 #include "bindings/core/v8/ScriptValue.h"
10 #include "bindings/core/v8/V8Binding.h" 10 #include "bindings/core/v8/V8Binding.h"
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 73
74 TEST_F(ScriptPromiseResolverTest, construct) 74 TEST_F(ScriptPromiseResolverTest, construct)
75 { 75 {
76 ASSERT_FALSE(executionContext()->activeDOMObjectsAreStopped()); 76 ASSERT_FALSE(executionContext()->activeDOMObjectsAreStopped());
77 ScriptState::Scope scope(scriptState()); 77 ScriptState::Scope scope(scriptState());
78 ScriptPromiseResolver::create(scriptState()); 78 ScriptPromiseResolver::create(scriptState());
79 } 79 }
80 80
81 TEST_F(ScriptPromiseResolverTest, resolve) 81 TEST_F(ScriptPromiseResolverTest, resolve)
82 { 82 {
83 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; 83 ScriptPromiseResolver* resolver = nullptr;
84 ScriptPromise promise; 84 ScriptPromise promise;
85 { 85 {
86 ScriptState::Scope scope(scriptState()); 86 ScriptState::Scope scope(scriptState());
87 resolver = ScriptPromiseResolver::create(scriptState()); 87 resolver = ScriptPromiseResolver::create(scriptState());
88 promise = resolver->promise(); 88 promise = resolver->promise();
89 } 89 }
90 90
91 String onFulfilled, onRejected; 91 String onFulfilled, onRejected;
92 ASSERT_FALSE(promise.isEmpty()); 92 ASSERT_FALSE(promise.isEmpty());
93 { 93 {
(...skipping 27 matching lines...) Expand all
121 resolver->resolve("bye"); 121 resolver->resolve("bye");
122 resolver->reject("bye"); 122 resolver->reject("bye");
123 isolate()->RunMicrotasks(); 123 isolate()->RunMicrotasks();
124 124
125 EXPECT_EQ("hello", onFulfilled); 125 EXPECT_EQ("hello", onFulfilled);
126 EXPECT_EQ(String(), onRejected); 126 EXPECT_EQ(String(), onRejected);
127 } 127 }
128 128
129 TEST_F(ScriptPromiseResolverTest, reject) 129 TEST_F(ScriptPromiseResolverTest, reject)
130 { 130 {
131 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; 131 ScriptPromiseResolver* resolver = nullptr;
132 ScriptPromise promise; 132 ScriptPromise promise;
133 { 133 {
134 ScriptState::Scope scope(scriptState()); 134 ScriptState::Scope scope(scriptState());
135 resolver = ScriptPromiseResolver::create(scriptState()); 135 resolver = ScriptPromiseResolver::create(scriptState());
136 promise = resolver->promise(); 136 promise = resolver->promise();
137 } 137 }
138 138
139 String onFulfilled, onRejected; 139 String onFulfilled, onRejected;
140 ASSERT_FALSE(promise.isEmpty()); 140 ASSERT_FALSE(promise.isEmpty());
141 { 141 {
(...skipping 27 matching lines...) Expand all
169 resolver->resolve("bye"); 169 resolver->resolve("bye");
170 resolver->reject("bye"); 170 resolver->reject("bye");
171 isolate()->RunMicrotasks(); 171 isolate()->RunMicrotasks();
172 172
173 EXPECT_EQ(String(), onFulfilled); 173 EXPECT_EQ(String(), onFulfilled);
174 EXPECT_EQ("hello", onRejected); 174 EXPECT_EQ("hello", onRejected);
175 } 175 }
176 176
177 TEST_F(ScriptPromiseResolverTest, stop) 177 TEST_F(ScriptPromiseResolverTest, stop)
178 { 178 {
179 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; 179 ScriptPromiseResolver* resolver = nullptr;
180 ScriptPromise promise; 180 ScriptPromise promise;
181 { 181 {
182 ScriptState::Scope scope(scriptState()); 182 ScriptState::Scope scope(scriptState());
183 resolver = ScriptPromiseResolver::create(scriptState()); 183 resolver = ScriptPromiseResolver::create(scriptState());
184 promise = resolver->promise(); 184 promise = resolver->promise();
185 } 185 }
186 186
187 String onFulfilled, onRejected; 187 String onFulfilled, onRejected;
188 ASSERT_FALSE(promise.isEmpty()); 188 ASSERT_FALSE(promise.isEmpty());
189 { 189 {
190 ScriptState::Scope scope(scriptState()); 190 ScriptState::Scope scope(scriptState());
191 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected)); 191 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected));
192 } 192 }
193 193
194 executionContext()->stopActiveDOMObjects(); 194 executionContext()->stopActiveDOMObjects();
195 { 195 {
196 ScriptState::Scope scope(scriptState()); 196 ScriptState::Scope scope(scriptState());
197 EXPECT_TRUE(resolver->promise().isEmpty()); 197 EXPECT_TRUE(resolver->promise().isEmpty());
198 } 198 }
199 199
200 resolver->resolve("hello"); 200 resolver->resolve("hello");
201 isolate()->RunMicrotasks(); 201 isolate()->RunMicrotasks();
202 202
203 EXPECT_EQ(String(), onFulfilled); 203 EXPECT_EQ(String(), onFulfilled);
204 EXPECT_EQ(String(), onRejected); 204 EXPECT_EQ(String(), onRejected);
205 } 205 }
206 206
207 #if !ENABLE(OILPAN) 207 class ScriptPromiseResolverKeepAlive : public ScriptPromiseResolver {
208 public:
209 static ScriptPromiseResolverKeepAlive* create(ScriptState* scriptState)
210 {
211 ScriptPromiseResolverKeepAlive* resolver = new ScriptPromiseResolverKeep Alive(scriptState);
212 resolver->suspendIfNeeded();
213 return resolver;
214 }
215
216 ~ScriptPromiseResolverKeepAlive() override
217 {
218 s_destructorCalls++;
219 }
220
221 static void reset() { s_destructorCalls = 0; }
222 static bool isAlive() { return !s_destructorCalls; }
223
224 static int s_destructorCalls;
225
226 private:
227 ScriptPromiseResolverKeepAlive(ScriptState* scriptState)
haraken 2015/07/18 08:01:23 Add explicit.
sof 2015/07/18 20:46:08 Done.
228 : ScriptPromiseResolver(scriptState)
229 {
230 }
231 };
232
233 int ScriptPromiseResolverKeepAlive::s_destructorCalls = 0;
234
208 TEST_F(ScriptPromiseResolverTest, keepAliveUntilResolved) 235 TEST_F(ScriptPromiseResolverTest, keepAliveUntilResolved)
209 { 236 {
210 RefPtr<ScriptPromiseResolver> resolver; 237 ScriptPromiseResolverKeepAlive::reset();
238 ScriptPromiseResolver* resolver = nullptr;
211 { 239 {
212 ScriptState::Scope scope(scriptState()); 240 ScriptState::Scope scope(scriptState());
213 resolver = ScriptPromiseResolver::create(scriptState()); 241 resolver = ScriptPromiseResolverKeepAlive::create(scriptState());
214 } 242 }
215 EXPECT_EQ(1, resolver->refCount());
216 resolver->keepAliveWhilePending(); 243 resolver->keepAliveWhilePending();
217 EXPECT_EQ(2, resolver->refCount()); 244 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
245 ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive());
218 246
219 resolver->resolve("hello"); 247 resolver->resolve("hello");
220 EXPECT_EQ(1, resolver->refCount()); 248 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
249 EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive());
221 } 250 }
222 251
223 TEST_F(ScriptPromiseResolverTest, keepAliveUntilRejected) 252 TEST_F(ScriptPromiseResolverTest, keepAliveUntilRejected)
224 { 253 {
225 RefPtr<ScriptPromiseResolver> resolver; 254 ScriptPromiseResolverKeepAlive::reset();
255 ScriptPromiseResolver* resolver = nullptr;
226 { 256 {
227 ScriptState::Scope scope(scriptState()); 257 ScriptState::Scope scope(scriptState());
228 resolver = ScriptPromiseResolver::create(scriptState()); 258 resolver = ScriptPromiseResolverKeepAlive::create(scriptState());
229 } 259 }
230 EXPECT_EQ(1, resolver->refCount());
231 resolver->keepAliveWhilePending(); 260 resolver->keepAliveWhilePending();
232 EXPECT_EQ(2, resolver->refCount()); 261 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
262 ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive());
233 263
234 resolver->reject("hello"); 264 resolver->reject("hello");
235 EXPECT_EQ(1, resolver->refCount()); 265 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
266 EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive());
236 } 267 }
237 268
238 TEST_F(ScriptPromiseResolverTest, keepAliveUntilStopped) 269 TEST_F(ScriptPromiseResolverTest, keepAliveUntilStopped)
239 { 270 {
240 RefPtr<ScriptPromiseResolver> resolver; 271 ScriptPromiseResolverKeepAlive::reset();
272 ScriptPromiseResolver* resolver = nullptr;
241 { 273 {
242 ScriptState::Scope scope(scriptState()); 274 ScriptState::Scope scope(scriptState());
243 resolver = ScriptPromiseResolver::create(scriptState()); 275 resolver = ScriptPromiseResolverKeepAlive::create(scriptState());
244 } 276 }
245 EXPECT_EQ(1, resolver->refCount());
246 resolver->keepAliveWhilePending(); 277 resolver->keepAliveWhilePending();
247 EXPECT_EQ(2, resolver->refCount()); 278 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
279 EXPECT_TRUE(ScriptPromiseResolverKeepAlive::isAlive());
248 280
249 executionContext()->stopActiveDOMObjects(); 281 executionContext()->stopActiveDOMObjects();
250 EXPECT_EQ(1, resolver->refCount()); 282 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
283 EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive());
251 } 284 }
252 285
253 TEST_F(ScriptPromiseResolverTest, suspend) 286 TEST_F(ScriptPromiseResolverTest, suspend)
254 { 287 {
255 RefPtr<ScriptPromiseResolver> resolver; 288 ScriptPromiseResolverKeepAlive::reset();
289 ScriptPromiseResolver* resolver = nullptr;
256 { 290 {
257 ScriptState::Scope scope(scriptState()); 291 ScriptState::Scope scope(scriptState());
258 resolver = ScriptPromiseResolver::create(scriptState()); 292 resolver = ScriptPromiseResolverKeepAlive::create(scriptState());
259 } 293 }
260 EXPECT_EQ(1, resolver->refCount());
261 resolver->keepAliveWhilePending(); 294 resolver->keepAliveWhilePending();
262 EXPECT_EQ(2, resolver->refCount()); 295 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
296 ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive());
297
263 executionContext()->suspendActiveDOMObjects(); 298 executionContext()->suspendActiveDOMObjects();
264 resolver->resolve("hello"); 299 resolver->resolve("hello");
265 EXPECT_EQ(3, resolver->refCount()); 300 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
301 EXPECT_TRUE(ScriptPromiseResolverKeepAlive::isAlive());
266 302
267 executionContext()->stopActiveDOMObjects(); 303 executionContext()->stopActiveDOMObjects();
268 EXPECT_EQ(1, resolver->refCount()); 304 Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWith Sweep, Heap::ForcedGC);
305 EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive());
269 } 306 }
270 #endif
271 307
272 TEST_F(ScriptPromiseResolverTest, resolveVoid) 308 TEST_F(ScriptPromiseResolverTest, resolveVoid)
273 { 309 {
274 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; 310 ScriptPromiseResolver* resolver = nullptr;
275 ScriptPromise promise; 311 ScriptPromise promise;
276 { 312 {
277 ScriptState::Scope scope(scriptState()); 313 ScriptState::Scope scope(scriptState());
278 resolver = ScriptPromiseResolver::create(scriptState()); 314 resolver = ScriptPromiseResolver::create(scriptState());
279 promise = resolver->promise(); 315 promise = resolver->promise();
280 } 316 }
281 317
282 String onFulfilled, onRejected; 318 String onFulfilled, onRejected;
283 ASSERT_FALSE(promise.isEmpty()); 319 ASSERT_FALSE(promise.isEmpty());
284 { 320 {
285 ScriptState::Scope scope(scriptState()); 321 ScriptState::Scope scope(scriptState());
286 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected)); 322 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected));
287 } 323 }
288 324
289 resolver->resolve(); 325 resolver->resolve();
290 isolate()->RunMicrotasks(); 326 isolate()->RunMicrotasks();
291 327
292 EXPECT_EQ("undefined", onFulfilled); 328 EXPECT_EQ("undefined", onFulfilled);
293 EXPECT_EQ(String(), onRejected); 329 EXPECT_EQ(String(), onRejected);
294 } 330 }
295 331
296 TEST_F(ScriptPromiseResolverTest, rejectVoid) 332 TEST_F(ScriptPromiseResolverTest, rejectVoid)
297 { 333 {
298 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; 334 ScriptPromiseResolver* resolver = nullptr;
299 ScriptPromise promise; 335 ScriptPromise promise;
300 { 336 {
301 ScriptState::Scope scope(scriptState()); 337 ScriptState::Scope scope(scriptState());
302 resolver = ScriptPromiseResolver::create(scriptState()); 338 resolver = ScriptPromiseResolver::create(scriptState());
303 promise = resolver->promise(); 339 promise = resolver->promise();
304 } 340 }
305 341
306 String onFulfilled, onRejected; 342 String onFulfilled, onRejected;
307 ASSERT_FALSE(promise.isEmpty()); 343 ASSERT_FALSE(promise.isEmpty());
308 { 344 {
309 ScriptState::Scope scope(scriptState()); 345 ScriptState::Scope scope(scriptState());
310 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected)); 346 promise.then(Function::createFunction(scriptState(), &onFulfilled), Func tion::createFunction(scriptState(), &onRejected));
311 } 347 }
312 348
313 resolver->reject(); 349 resolver->reject();
314 isolate()->RunMicrotasks(); 350 isolate()->RunMicrotasks();
315 351
316 EXPECT_EQ(String(), onFulfilled); 352 EXPECT_EQ(String(), onFulfilled);
317 EXPECT_EQ("undefined", onRejected); 353 EXPECT_EQ("undefined", onRejected);
318 } 354 }
319 355
320 } // namespace 356 } // namespace
321 357
322 } // namespace blink 358 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698