Chromium Code Reviews| Index: Source/bindings/core/v8/ScriptPromiseResolverTest.cpp |
| diff --git a/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp b/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp |
| index fb698ea14882ae5e816f77ffbdd3d1bd5f55e621..d8c05fedfc317979c84c551f9659fc56b7359d29 100644 |
| --- a/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp |
| +++ b/Source/bindings/core/v8/ScriptPromiseResolverTest.cpp |
| @@ -80,7 +80,7 @@ TEST_F(ScriptPromiseResolverTest, construct) |
| TEST_F(ScriptPromiseResolverTest, resolve) |
| { |
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; |
| + ScriptPromiseResolver* resolver = nullptr; |
| ScriptPromise promise; |
| { |
| ScriptState::Scope scope(scriptState()); |
| @@ -128,7 +128,7 @@ TEST_F(ScriptPromiseResolverTest, resolve) |
| TEST_F(ScriptPromiseResolverTest, reject) |
| { |
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; |
| + ScriptPromiseResolver* resolver = nullptr; |
| ScriptPromise promise; |
| { |
| ScriptState::Scope scope(scriptState()); |
| @@ -176,7 +176,7 @@ TEST_F(ScriptPromiseResolverTest, reject) |
| TEST_F(ScriptPromiseResolverTest, stop) |
| { |
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; |
| + ScriptPromiseResolver* resolver = nullptr; |
| ScriptPromise promise; |
| { |
| ScriptState::Scope scope(scriptState()); |
| @@ -204,74 +204,110 @@ TEST_F(ScriptPromiseResolverTest, stop) |
| EXPECT_EQ(String(), onRejected); |
| } |
| -#if !ENABLE(OILPAN) |
| +class ScriptPromiseResolverKeepAlive : public ScriptPromiseResolver { |
| +public: |
| + static ScriptPromiseResolverKeepAlive* create(ScriptState* scriptState) |
| + { |
| + ScriptPromiseResolverKeepAlive* resolver = new ScriptPromiseResolverKeepAlive(scriptState); |
| + resolver->suspendIfNeeded(); |
| + return resolver; |
| + } |
| + |
| + ~ScriptPromiseResolverKeepAlive() override |
| + { |
| + s_destructorCalls++; |
| + } |
| + |
| + static void reset() { s_destructorCalls = 0; } |
| + static bool isAlive() { return !s_destructorCalls; } |
| + |
| + static int s_destructorCalls; |
| + |
| +private: |
| + ScriptPromiseResolverKeepAlive(ScriptState* scriptState) |
|
haraken
2015/07/18 08:01:23
Add explicit.
sof
2015/07/18 20:46:08
Done.
|
| + : ScriptPromiseResolver(scriptState) |
| + { |
| + } |
| +}; |
| + |
| +int ScriptPromiseResolverKeepAlive::s_destructorCalls = 0; |
| + |
| TEST_F(ScriptPromiseResolverTest, keepAliveUntilResolved) |
| { |
| - RefPtr<ScriptPromiseResolver> resolver; |
| + ScriptPromiseResolverKeepAlive::reset(); |
| + ScriptPromiseResolver* resolver = nullptr; |
| { |
| ScriptState::Scope scope(scriptState()); |
| - resolver = ScriptPromiseResolver::create(scriptState()); |
| + resolver = ScriptPromiseResolverKeepAlive::create(scriptState()); |
| } |
| - EXPECT_EQ(1, resolver->refCount()); |
| resolver->keepAliveWhilePending(); |
| - EXPECT_EQ(2, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive()); |
| resolver->resolve("hello"); |
| - EXPECT_EQ(1, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive()); |
| } |
| TEST_F(ScriptPromiseResolverTest, keepAliveUntilRejected) |
| { |
| - RefPtr<ScriptPromiseResolver> resolver; |
| + ScriptPromiseResolverKeepAlive::reset(); |
| + ScriptPromiseResolver* resolver = nullptr; |
| { |
| ScriptState::Scope scope(scriptState()); |
| - resolver = ScriptPromiseResolver::create(scriptState()); |
| + resolver = ScriptPromiseResolverKeepAlive::create(scriptState()); |
| } |
| - EXPECT_EQ(1, resolver->refCount()); |
| resolver->keepAliveWhilePending(); |
| - EXPECT_EQ(2, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive()); |
| resolver->reject("hello"); |
| - EXPECT_EQ(1, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive()); |
| } |
| TEST_F(ScriptPromiseResolverTest, keepAliveUntilStopped) |
| { |
| - RefPtr<ScriptPromiseResolver> resolver; |
| + ScriptPromiseResolverKeepAlive::reset(); |
| + ScriptPromiseResolver* resolver = nullptr; |
| { |
| ScriptState::Scope scope(scriptState()); |
| - resolver = ScriptPromiseResolver::create(scriptState()); |
| + resolver = ScriptPromiseResolverKeepAlive::create(scriptState()); |
| } |
| - EXPECT_EQ(1, resolver->refCount()); |
| resolver->keepAliveWhilePending(); |
| - EXPECT_EQ(2, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_TRUE(ScriptPromiseResolverKeepAlive::isAlive()); |
| executionContext()->stopActiveDOMObjects(); |
| - EXPECT_EQ(1, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive()); |
| } |
| TEST_F(ScriptPromiseResolverTest, suspend) |
| { |
| - RefPtr<ScriptPromiseResolver> resolver; |
| + ScriptPromiseResolverKeepAlive::reset(); |
| + ScriptPromiseResolver* resolver = nullptr; |
| { |
| ScriptState::Scope scope(scriptState()); |
| - resolver = ScriptPromiseResolver::create(scriptState()); |
| + resolver = ScriptPromiseResolverKeepAlive::create(scriptState()); |
| } |
| - EXPECT_EQ(1, resolver->refCount()); |
| resolver->keepAliveWhilePending(); |
| - EXPECT_EQ(2, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + ASSERT_TRUE(ScriptPromiseResolverKeepAlive::isAlive()); |
| + |
| executionContext()->suspendActiveDOMObjects(); |
| resolver->resolve("hello"); |
| - EXPECT_EQ(3, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_TRUE(ScriptPromiseResolverKeepAlive::isAlive()); |
| executionContext()->stopActiveDOMObjects(); |
| - EXPECT_EQ(1, resolver->refCount()); |
| + Heap::collectGarbage(ThreadState::NoHeapPointersOnStack, ThreadState::GCWithSweep, Heap::ForcedGC); |
| + EXPECT_FALSE(ScriptPromiseResolverKeepAlive::isAlive()); |
| } |
| -#endif |
| TEST_F(ScriptPromiseResolverTest, resolveVoid) |
| { |
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; |
| + ScriptPromiseResolver* resolver = nullptr; |
| ScriptPromise promise; |
| { |
| ScriptState::Scope scope(scriptState()); |
| @@ -295,7 +331,7 @@ TEST_F(ScriptPromiseResolverTest, resolveVoid) |
| TEST_F(ScriptPromiseResolverTest, rejectVoid) |
| { |
| - RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = nullptr; |
| + ScriptPromiseResolver* resolver = nullptr; |
| ScriptPromise promise; |
| { |
| ScriptState::Scope scope(scriptState()); |