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.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@201735 268f45cc-cd09-0410-ab3c-d52691b4dbfc
47 files changed