Index: LayoutTests/fast/events/event-properties-gc.html |
diff --git a/LayoutTests/fast/events/event-properties-gc.html b/LayoutTests/fast/events/event-properties-gc.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fe196ac8808676b9b52da6d3aa9c6bd6acde141c |
--- /dev/null |
+++ b/LayoutTests/fast/events/event-properties-gc.html |
@@ -0,0 +1,64 @@ |
+<!DOCTYPE html> |
+<html> |
+<head> |
+<script src="../js/resources/js-test-pre.js"></script> |
+</head> |
+<body> |
+<script> |
+window.jsTestIsAsync = true; |
+description("Tests that properties passed to events are not garbage collected prematurely."); |
+ |
+function addListener(eventType, prop) { |
+ document.addEventListener(eventType, function(event) { |
+ window.prop = prop; |
+ // Despite the earlier assignement of the local variable to null and |
+ // the following garabage collection, the property should still be |
+ // present here. |
+ shouldBeEqualToString("event[prop]", "foo"); |
+ |
+ window.prop = undefined; |
+ window.postMessage("done", "*"); |
+ }); |
+} |
+ |
+// Run the tests whenever a notification arrives, which indicates that the |
+// previous test has finished. |
+window.addEventListener("message", function(message) { |
+ runNextTest(); |
+}, false); |
+ |
+function newEvent(eventType, prop, value) { |
+ return eval("new " + eventType + "('" + eventType + "', { " + prop + ": value })"); |
+} |
+ |
+// The events that we want to test, with the properties that each one uses. |
+var events = [ |
+ { eventType: "CustomEvent", prop: "detail" }, |
+ { eventType: "MessageEvent", prop: "data" }, |
+ { eventType: "PopStateEvent", prop: "state" } |
+]; |
+ |
+function runNextTest () { |
+ var evt = events.pop(); |
+ if (!evt) { |
+ finishJSTest(); |
+ return; |
+ } |
+ |
+ var value = "foo"; |
+ var eventToDispatch = newEvent(evt.eventType, evt.prop, value); |
+ value = null; |
+ gc(); |
+ |
+ addListener(evt.eventType, evt.prop); |
+ document.dispatchEvent(eventToDispatch); |
+}; |
+ |
+// This test is meaningless without testRunner. |
+if (window.testRunner) { |
+ runNextTest(); |
+} |
+</script> |
+</body> |
+<script src="../js/resources/js-test-post.js"></script> |
+</html> |