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

Unified Diff: third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp

Issue 2272163003: ResizeObserver: Olipan C++ tests (Closed)
Patch Set: Olipan C++ tests Created 4 years, 4 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: third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp b/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
index e78a0ebdabefd197f680f3cab007d3ca9501afb1..6600dddd11cce1b3115b083ea3e7adfc7b5919a5 100644
--- a/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
+++ b/third_party/WebKit/Source/web/tests/ResizeObserverTest.cpp
@@ -4,9 +4,14 @@
#include "core/observer/ResizeObserver.h"
+#include "bindings/core/v8/ScriptController.h"
+#include "bindings/core/v8/ScriptSourceCode.h"
+#include "bindings/core/v8/V8GCController.h"
#include "core/observer/ResizeObservation.h"
#include "core/observer/ResizeObserverCallback.h"
+#include "core/observer/ResizeObserverController.h"
#include "platform/testing/UnitTestHelpers.h"
+#include "public/web/WebHeap.h"
#include "web/WebViewImpl.h"
#include "web/tests/sim/SimCompositor.h"
#include "web/tests/sim/SimDisplayItemList.h"
@@ -95,4 +100,52 @@ TEST_F(ResizeObservationUnitTest, ObserveSchedulesFrame)
ASSERT_EQ(svgObservation->targetDepth() - domObservation->targetDepth(), (size_t)1);
}
+class ResizeObserverMemoryTest : public SimTest {};
esprehn 2016/08/30 21:25:23 You don't need a new SimTest class for each one. N
atotic1 2016/08/31 19:05:15 Done.
+TEST_F(ResizeObserverMemoryTest, TestMemoryLeaks)
+{
+
+ ResizeObserverController& controller = document().ensureResizeObserverController();
+ HeapHashSet<WeakMember<ResizeObserver>>& observers = controller.observers();
+ ASSERT_EQ(observers.size(), 0U);
+ v8::HandleScope scope(v8::Isolate::GetCurrent());
+
+ ScriptController& script = document().executingFrame()->script();
+
+ //
+ // Test whether ResizeObserver is kept alive by direct JS reference
+ //
+ script.executeScriptInMainWorldAndReturnValue(
+ ScriptSourceCode("var ro = new ResizeObserver( entries => {});"),
+ ScriptController::ExecuteScriptWhenScriptsDisabled);
+ ASSERT_EQ(observers.size(), 1U);
+ script.executeScriptInMainWorldAndReturnValue(
+ ScriptSourceCode("ro = undefined;"),
+ ScriptController::ExecuteScriptWhenScriptsDisabled);
+ V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent());
+ WebHeap::collectAllGarbageForTesting();
+ ASSERT_EQ(observers.isEmpty(), true);
+
+ //
+ // Test whether ResizeObserver is kept alive by an Element
+ //
+ script.executeScriptInMainWorldAndReturnValue(
+ ScriptSourceCode(
+ "var ro = new ResizeObserver( () => {});"
+ "var el = document.createElement('div');"
+ "ro.observe(el);"
+ "ro = undefined;"
+ ),
+ ScriptController::ExecuteScriptWhenScriptsDisabled);
+ ASSERT_EQ(observers.size(), 1U);
+ V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent());
+ WebHeap::collectAllGarbageForTesting();
+ ASSERT_EQ(observers.size(), 1U);
+ script.executeScriptInMainWorldAndReturnValue(
+ ScriptSourceCode("el = undefined;"),
+ ScriptController::ExecuteScriptWhenScriptsDisabled);
+ V8GCController::collectAllGarbageForTesting(v8::Isolate::GetCurrent());
+ WebHeap::collectAllGarbageForTesting();
+ ASSERT_EQ(observers.isEmpty(), true);
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698