summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc')
-rw-r--r--chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc30
1 files changed, 20 insertions, 10 deletions
diff --git a/chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc b/chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc
index 6b178219e10..bf97de00785 100644
--- a/chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc
+++ b/chromium/third_party/blink/renderer/core/dom/events/listener_leak_test.cc
@@ -27,12 +27,13 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/blink/public/platform/platform.h"
#include "third_party/blink/public/platform/web_url_loader_mock_factory.h"
#include "third_party/blink/public/web/web_view.h"
+#include "third_party/blink/renderer/bindings/core/v8/v8_gc_controller.h"
#include "third_party/blink/renderer/core/frame/frame_test_helpers.h"
+#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/platform/testing/unit_test_helpers.h"
#include "third_party/blink/renderer/platform/testing/url_test_helpers.h"
#include "v8/include/v8-profiler.h"
@@ -40,6 +41,8 @@
namespace blink {
+namespace {
+
const v8::HeapGraphNode* GetProperty(v8::Isolate* isolate,
const v8::HeapGraphNode* node,
v8::HeapGraphEdge::Type type,
@@ -55,8 +58,7 @@ const v8::HeapGraphNode* GetProperty(v8::Isolate* isolate,
return nullptr;
}
-int GetNumObjects(const char* constructor) {
- v8::Isolate* isolate = v8::Isolate::GetCurrent();
+int GetNumObjects(v8::Isolate* isolate, const char* constructor) {
v8::HandleScope scope(isolate);
v8::HeapProfiler* profiler = isolate->GetHeapProfiler();
const v8::HeapSnapshot* snapshot = profiler->TakeHeapSnapshot();
@@ -84,15 +86,23 @@ int GetNumObjects(const char* constructor) {
return count;
}
+} // namespace
+
class ListenerLeakTest : public testing::Test {
public:
- void RunTest(const std::string& filename) {
+ void RunTestAndGC(const std::string& filename) {
std::string base_url("http://www.example.com/");
std::string file_name(filename);
- URLTestHelpers::RegisterMockedURLLoadFromBase(
+ url_test_helpers::RegisterMockedURLLoadFromBase(
WebString::FromUTF8(base_url), blink::test::CoreTestDataPath(),
WebString::FromUTF8(file_name));
web_view_helper.InitializeAndLoad(base_url + file_name);
+ V8GCController::CollectAllGarbageForTesting(
+ isolate(), v8::EmbedderHeapTracer::EmbedderStackState::kEmpty);
+ }
+
+ v8::Isolate* isolate() const {
+ return ToIsolate(web_view_helper.LocalMainFrame()->GetFrame());
}
void TearDown() override {
@@ -102,21 +112,21 @@ class ListenerLeakTest : public testing::Test {
}
protected:
- FrameTestHelpers::WebViewHelper web_view_helper;
+ frame_test_helpers::WebViewHelper web_view_helper;
};
// This test tries to create a reference cycle between node and its listener.
// See http://crbug/17400.
TEST_F(ListenerLeakTest, ReferenceCycle) {
- RunTest("listener/listener_leak1.html");
- ASSERT_EQ(0, GetNumObjects("EventListenerLeakTestObject1"));
+ RunTestAndGC("listener/listener_leak1.html");
+ ASSERT_EQ(0, GetNumObjects(isolate(), "EventListenerLeakTestObject1"));
}
// This test sets node onclick many times to expose a possible memory
// leak where all listeners get referenced by the node.
TEST_F(ListenerLeakTest, HiddenReferences) {
- RunTest("listener/listener_leak2.html");
- ASSERT_EQ(1, GetNumObjects("EventListenerLeakTestObject2"));
+ RunTestAndGC("listener/listener_leak2.html");
+ ASSERT_EQ(1, GetNumObjects(isolate(), "EventListenerLeakTestObject2"));
}
} // namespace blink