haikuwebkit/LayoutTests/fast/events/AddEventListenerOptions-onc...

28 lines
750 B
HTML
Raw Permalink Normal View History

Implement EventListenerOptions argument to addEventListener https://bugs.webkit.org/show_bug.cgi?id=149466 <rdar://problem/22802031> Reviewed by Dean Jackson. LayoutTests/imported/w3c: Import new test from W3C that covers EventListenerOptions. * web-platform-tests/dom/events/EventListenerOptions-capture-expected.txt: Added. * web-platform-tests/dom/events/EventListenerOptions-capture.html: Added. Source/WebCore: Implement AddEventListenerOptions dictionary argument to addEventListener() and EventListenerOptions dictionary argument to removeEventListener(), as per the latest DOM specification: - https://dom.spec.whatwg.org/#interface-eventtarget Firefox and Chrome already support this. Support for AddEventListenerOptions in this patch is as follows: - 'capture': fully supported. - 'once': fully supported. - 'passive': supported in the sense that preventDefault() will be ignored for passive event listeners. There are however currently no performance benefits from passing this flag. Those optimizations will be implemented in follow-up patches (in particular for Touch and Scroll events). Tests: fast/events/AddEventListenerOptions-once-recursive.html fast/events/AddEventListenerOptions-once.html fast/events/AddEventListenerOptions-passive.html fast/events/removeEventListener-EventListenerOptions-capture.html imported/w3c/web-platform-tests/dom/events/EventListenerOptions-capture.html * Modules/webaudio/AudioScheduledSourceNode.cpp: (WebCore::AudioScheduledSourceNode::addEventListener): (WebCore::AudioScheduledSourceNode::removeEventListener): * Modules/webaudio/AudioScheduledSourceNode.h: * Modules/webaudio/ScriptProcessorNode.cpp: (WebCore::ScriptProcessorNode::addEventListener): (WebCore::ScriptProcessorNode::removeEventListener): * Modules/webaudio/ScriptProcessorNode.h: * bindings/scripts/CodeGeneratorJS.pm: (GenerateParametersCheckExpression): * dom/Event.h: (WebCore::Event::preventDefault): (WebCore::Event::setInPassiveListener): * dom/EventListenerMap.cpp: (WebCore::addListenerToVector): (WebCore::EventListenerMap::add): * dom/EventListenerMap.h: * dom/EventTarget.cpp: (WebCore::EventTarget::addEventListener): (WebCore::EventTarget::addEventListenerForBindings): (WebCore::EventTarget::removeEventListenerForBindings): (WebCore::EventTarget::removeEventListener): (WebCore::EventTarget::setAttributeEventListener): (WebCore::EventTarget::fireEventListeners): * dom/EventTarget.h: (WebCore::EventTarget::ListenerOptions::ListenerOptions): (WebCore::EventTarget::AddEventListenerOptions::AddEventListenerOptions): (WebCore::EventTarget::addEventListener): (WebCore::EventTarget::addEventListenerForBindings): (WebCore::EventTarget::removeEventListenerForBindings): * dom/EventTarget.idl: * dom/MessagePort.cpp: (WebCore::MessagePort::addEventListener): * dom/MessagePort.h: * dom/Node.cpp: (WebCore::tryAddEventListener): (WebCore::Node::addEventListener): (WebCore::tryRemoveEventListener): (WebCore::Node::removeEventListener): * dom/Node.h: * dom/RegisteredEventListener.h: (WebCore::RegisteredEventListener::Options::Options): (WebCore::RegisteredEventListener::RegisteredEventListener): (WebCore::operator==): * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::addEventListener): (WebCore::HTMLMediaElement::removeEventListener): * html/HTMLMediaElement.h: * page/DOMWindow.cpp: (WebCore::DOMWindow::addEventListener): (WebCore::DOMWindow::removeEventListener): * page/DOMWindow.h: * svg/SVGElement.cpp: (WebCore::SVGElement::addEventListener): (WebCore::SVGElement::removeEventListener): * svg/SVGElement.h: LayoutTests: * fast/events/AddEventListenerOptions-once-expected.txt: Added. * fast/events/AddEventListenerOptions-once-recursive-expected.txt: Added. * fast/events/AddEventListenerOptions-once-recursive.html: Added. * fast/events/AddEventListenerOptions-once.html: Added. * fast/events/AddEventListenerOptions-passive-expected.txt: Added. * fast/events/AddEventListenerOptions-passive.html: Added. * fast/events/removeEventListener-EventListenerOptions-capture-expected.txt: Added. * fast/events/removeEventListener-EventListenerOptions-capture.html: Added. Add layout testing coverage for various aspects of the functionality. * imported/blink/fast/events/eventlisteneroptions/capture_default-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/capture_default.html: Added. * imported/blink/fast/events/eventlisteneroptions/capture_equality-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/capture_equality.html: Added. * imported/blink/fast/events/eventlisteneroptions/capture_query-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/capture_query.html: Added. * imported/blink/fast/events/eventlisteneroptions/passive_dispatch-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/passive_dispatch.html: Added. * imported/blink/fast/events/eventlisteneroptions/passive_inequality-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/passive_inequality.html: Added. * imported/blink/fast/events/eventlisteneroptions/passive_query-expected.txt: Added. * imported/blink/fast/events/eventlisteneroptions/passive_query.html: Added. Import blink tests for this functionality. Canonical link: https://commits.webkit.org/176543@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@201757 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-06-07 17:53:15 +00:00
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description("Tests support for 'once' member in AddEventListenerOptions.");
var listenerCallCount = 0;
function listenerFunction()
{
++listenerCallCount;
if (listenerCallCount == 1)
document.body.dispatchEvent(new Event('test'));
}
evalAndLog("document.body.addEventListener('test', listenerFunction, { 'once': true })");
shouldBe("listenerCallCount", "0");
evalAndLog("document.body.dispatchEvent(new Event('test'))");
shouldBe("listenerCallCount", "1");
evalAndLog("document.body.dispatchEvent(new Event('test'))");
shouldBe("listenerCallCount", "1");
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>