blob: 4d66aaea5b68fbe0434ad61bf1122b32faa8f7b6 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<div class="testDiv"></div>
<script>
description("Tests that dispatchEvent raises INVALID_STATE_ERR if the event being dispatched is already being dispatched.");
jsTestIsAsync = true;
// try redispatching an event in the process of being dispatched with dispatchEvent
function redispatchCustom(event) {
shouldThrowErrorName("window.dispatchEvent(event)", "InvalidStateError");
redispatchCustom.wasInvoked = true;
}
var customEvent = document.createEvent('CustomEvent');
customEvent.initCustomEvent('foo', true, true, null);
var p = document.querySelector('.testDiv');
p.addEventListener('foo', redispatchCustom);
p.dispatchEvent(customEvent);
shouldBeTrue('redispatchCustom.wasInvoked');
// try redispatching an event that has already finished being dispatched
function checkCustom(event) {
checkCustom.wasInvoked = true;
}
p.removeEventListener('foo', redispatchCustom, true);
p.addEventListener('foo', checkCustom, true);
p.dispatchEvent(customEvent);
shouldBeTrue('checkCustom.wasInvoked');
// try redispatching an event in the process of being dispatched by
// the browser
function redispatchLoad(event) {
if (redispatchLoad.dispatching) {
testFailed('dispatchEvent of an event being dispatched should not dispatch the event again');
return;
}
redispatchLoad.dispatching = true;
shouldThrowErrorName("document.dispatchEvent(event)", "InvalidStateError");
delete redispatchLoad.dispatching;
finishJSTest();
}
window.addEventListener('load', redispatchLoad, true);
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>