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

Unified 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 side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698