2 <p>Test that adding an event listener for an event with a unique name works correctly (this used to corrupt event listener map after GC).</p>
8 if (window.GCController)
9 return GCController.collect();
11 for (var i = 0; i < 10000; i++) { // > force garbage collection (FF requires about 9K allocations before a collect)
12 var s = new String("abc");
18 document.getElementById("log").innerHTML += message + "<br>";
21 if (window.testRunner)
22 testRunner.dumpAsText();
24 var listenerCallCount = 0;
25 var expectedListenerCallCount = 0;
31 function addListener(targetName, name)
35 target = eval(targetName);
36 eval(target).addEventListener(name, listener, true);
37 ++expectedListenerCallCount;
39 log((target ? target : targetName) + " is not supported, or cannot be used to register arbitrary event handlers.");
43 function dispatchEvent(target, name)
46 var evt = document.createEvent("MessageEvent");
47 evt.initMessageEvent(name);
48 eval(target).dispatchEvent(evt);
53 var xhr = new XMLHttpRequest;
54 addListener("xhr", "foo1");
55 addListener("xhr.upload", "foo2");
56 addListener("window.applicationCache", "foo3");
59 channel = new MessageChannel;
60 channel.port1.addEventListener("foo4", listener, true);
61 ++expectedListenerCallCount;
63 log("MessageChannel is not supported, or cannot be used to register arbitrary event handlers.");
65 // window.dispatchEvent is currently unimplemented.
66 // window.addEventListener("foo5", listener, true);
67 // ++expectedListenerCallCount;
68 document.body.addEventListener("foo6", listener, true);
69 ++expectedListenerCallCount;
73 dispatchEvent("xhr", "foo1");
74 dispatchEvent("xhr.upload", "foo2");
75 dispatchEvent("window.applicationCache", "foo3");
76 dispatchEvent("channel.port1", "foo4");
77 dispatchEvent("window", "foo5");
78 dispatchEvent("document.body", "foo6");
82 log((listenerCallCount == expectedListenerCallCount) ? "PASS" : "FAIL");