Index: LayoutTests/netinfo/gc-frame-listeners.html |
diff --git a/LayoutTests/netinfo/gc-frame-listeners.html b/LayoutTests/netinfo/gc-frame-listeners.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..10ec4fb82fc8bd698b73ada8174b9d071dd83fdf |
--- /dev/null |
+++ b/LayoutTests/netinfo/gc-frame-listeners.html |
@@ -0,0 +1,48 @@ |
+<!DOCTYPE html> |
+<head> |
+<script src="../resources/js-test.js"></script> |
+<script src="resources/netinfo_common.js"></script> |
+</head> |
+<body> |
+<script> |
+ |
+description('Tests that listeners in closed frames are collected.'); |
+ |
+shouldBe('typeof window.internals.observeGC', '"function"', |
+'this test requires window.internals'); |
+ |
+var childFrame = document.createElement('iframe'); |
+var childFrameObserver = internals.observeGC(childFrame); |
+ |
+document.body.appendChild(childFrame); |
+ |
+var childConnection = childFrame.contentWindow.navigator.connection; |
+var childConnectionObserver = internals.observeGC(childConnection); |
+ |
+var callback = function(e) { |
+ testFailed("Should not get here."); |
+}; |
+var callbackObserver = internals.observeGC(callback); |
+ |
+// Add the event listener and make sure it doesn't get collected. |
+childConnection.addEventListener('typechange', callback); |
+childConnection = null; |
+callback = null; |
+gc(); |
+childFrame.contentWindow.gc(); |
+shouldBeFalse('childFrameObserver.wasCollected'); |
+shouldBeFalse('childConnectionObserver.wasCollected'); |
+shouldBeFalse('callbackObserver.wasCollected'); |
+ |
+document.body.removeChild(childFrame); |
+childFrame = null; |
+gc(); |
+shouldBeTrue('childFrameObserver.wasCollected'); |
+shouldBeTrue('childConnectionObserver.wasCollected'); |
+shouldBeTrue('callbackObserver.wasCollected'); |
+ |
+finishJSTest(); |
+ |
+</script> |
+</body> |
+</html> |