Changeset 207734 in webkit


Ignore:
Timestamp:
Oct 23, 2016 3:55:44 PM (7 years ago)
Author:
Chris Dumez
Message:

addEventListener() / removeEventListener() should use a union for last parameter
https://bugs.webkit.org/show_bug.cgi?id=163863

Reviewed by Darin Adler.

Source/WebCore:

addEventListener() / removeEventListener() should use a union for last parameter:

No new tests, no Web-exposed behavior change.

  • bindings/js/JSDOMConvert.h:
  • dom/EventTarget.cpp:

(WebCore::EventTarget::addEventListenerForBindings):
(WebCore::EventTarget::removeEventListenerForBindings):

  • dom/EventTarget.h:
  • dom/EventTarget.idl:

Source/WebKit/mac:

Cast BOOL to bool to help to compiler construct the new variant-type parameter.

  • DOM/DOMNode.mm:

(-[DOMNode addEventListener:listener:useCapture:]):
(-[DOMNode addEventListener:::]):
(-[DOMNode removeEventListener:listener:useCapture:]):
(-[DOMNode removeEventListener:::]):

Location:
trunk/Source
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r207727 r207734  
     12016-10-23  Chris Dumez  <cdumez@apple.com>
     2
     3        addEventListener() / removeEventListener() should use a union for last parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=163863
     5
     6        Reviewed by Darin Adler.
     7
     8        addEventListener() / removeEventListener() should use a union for last parameter:
     9        - https://dom.spec.whatwg.org/#eventtarget
     10
     11        No new tests, no Web-exposed behavior change.
     12
     13        * bindings/js/JSDOMConvert.h:
     14        * dom/EventTarget.cpp:
     15        (WebCore::EventTarget::addEventListenerForBindings):
     16        (WebCore::EventTarget::removeEventListenerForBindings):
     17        * dom/EventTarget.h:
     18        * dom/EventTarget.idl:
     19
    1202016-10-23  Zalan Bujtas  <zalan@apple.com>
    221
  • trunk/Source/WebCore/bindings/js/JSDOMConvert.h

    r207715 r207734  
    619619        if (hasBooleanType) {
    620620            if (value.isBoolean())
    621                 return std::move<WTF::CheckMoveParameter>(ConditionalConverter<ReturnType, bool, hasBooleanType>::convert(state, value).value());
     621                return std::move<WTF::CheckMoveParameter>(ConditionalConverter<ReturnType, IDLBoolean, hasBooleanType>::convert(state, value).value());
    622622        }
    623623       
     
    641641        // 17. If types includes a boolean, then return the result of converting V to boolean.
    642642        if (hasBooleanType)
    643             return std::move<WTF::CheckMoveParameter>(ConditionalConverter<ReturnType, bool, hasBooleanType>::convert(state, value).value());
     643            return std::move<WTF::CheckMoveParameter>(ConditionalConverter<ReturnType, IDLBoolean, hasBooleanType>::convert(state, value).value());
    644644
    645645        // 18. Throw a TypeError.
  • trunk/Source/WebCore/dom/EventTarget.cpp

    r206889 r207734  
    8383}
    8484
    85 void EventTarget::addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, const AddEventListenerOptions& options)
     85void EventTarget::addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, AddEventListenerOptionsOrBoolean&& variant)
    8686{
    8787    if (!listener)
    8888        return;
    89     addEventListener(eventType, listener.releaseNonNull(), options);
    90 }
    91 
    92 void EventTarget::removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, const ListenerOptions& options)
     89
     90    auto visitor = WTF::makeVisitor([&](const AddEventListenerOptions& options) {
     91        addEventListener(eventType, listener.releaseNonNull(), options);
     92    }, [&](bool useCapture) {
     93        addEventListener(eventType, listener.releaseNonNull(), AddEventListenerOptions(useCapture));
     94    });
     95
     96    WTF::visit(visitor, variant);
     97}
     98
     99void EventTarget::removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, ListenerOptionsOrBoolean&& variant)
    93100{
    94101    if (!listener)
    95102        return;
    96     removeEventListener(eventType, *listener, options);
     103
     104    auto visitor = WTF::makeVisitor([&](const ListenerOptions& options) {
     105        removeEventListener(eventType, *listener, options);
     106    }, [&](bool useCapture) {
     107        removeEventListener(eventType, *listener, ListenerOptions(useCapture));
     108    });
     109
     110    WTF::visit(visitor, variant);
    97111}
    98112
  • trunk/Source/WebCore/dom/EventTarget.h

    r206889 r207734  
    3636#include <memory>
    3737#include <wtf/Forward.h>
     38#include <wtf/Variant.h>
    3839
    3940namespace WTF {
     
    138139    };
    139140
    140     void addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, bool useCapture = false);
    141     void removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, bool useCapture = false);
    142     WEBCORE_EXPORT void addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, const AddEventListenerOptions&);
    143     WEBCORE_EXPORT void removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, const ListenerOptions&);
     141    using AddEventListenerOptionsOrBoolean = WTF::Variant<AddEventListenerOptions, bool>;
     142    WEBCORE_EXPORT void addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, AddEventListenerOptionsOrBoolean&&);
     143
     144    using ListenerOptionsOrBoolean = WTF::Variant<ListenerOptions, bool>;
     145    WEBCORE_EXPORT void removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&&, ListenerOptionsOrBoolean&&);
    144146    virtual bool addEventListener(const AtomicString& eventType, Ref<EventListener>&&, const AddEventListenerOptions& = { });
    145147    virtual bool removeEventListener(const AtomicString& eventType, EventListener&, const ListenerOptions&);
     
    232234}
    233235
    234 inline void EventTarget::addEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, bool useCapture)
    235 {
    236     addEventListenerForBindings(eventType, WTFMove(listener), AddEventListenerOptions(useCapture));
    237 }
    238 
    239 inline void EventTarget::removeEventListenerForBindings(const AtomicString& eventType, RefPtr<EventListener>&& listener, bool useCapture)
    240 {
    241     removeEventListenerForBindings(eventType, WTFMove(listener), ListenerOptions(useCapture));
    242 }
    243 
    244236} // namespace WebCore
  • trunk/Source/WebCore/dom/EventTarget.idl

    r206776 r207734  
    2525    JSCustomToNativeObject,
    2626] interface EventTarget {
    27     // FIXME: Should be:
    28     // void addEventListener(DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options);
    29     // void removeEventListener(DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options);
    30     [ImplementedAs=addEventListenerForBindings] void addEventListener([AtomicString] DOMString type, EventListener? listener);
    31     [ImplementedAs=addEventListenerForBindings] void addEventListener([AtomicString] DOMString type, EventListener? listener, AddEventListenerOptions options);
    32     [ImplementedAs=removeEventListenerForBindings] void removeEventListener([AtomicString] DOMString type, EventListener? listener);
    33     [ImplementedAs=removeEventListenerForBindings] void removeEventListener([AtomicString] DOMString type, EventListener? listener, EventListenerOptions options);
    34 
    35     [ImplementedAs=addEventListenerForBindings] void addEventListener([AtomicString] DOMString type, EventListener? listener, boolean useCapture);
    36     [ImplementedAs=removeEventListenerForBindings] void removeEventListener([AtomicString] DOMString type, EventListener? listener, boolean useCapture);
    37 
     27    [ImplementedAs=addEventListenerForBindings] void addEventListener([AtomicString] DOMString type, EventListener? callback, optional (AddEventListenerOptions or boolean) options = false);
     28    [ImplementedAs=removeEventListenerForBindings] void removeEventListener([AtomicString] DOMString type, EventListener? callback, optional (EventListenerOptions or boolean) options = false);
    3829    [ImplementedAs=dispatchEventForBindings, MayThrowLegacyException] boolean dispatchEvent(Event event);
    3930};
  • trunk/Source/WebKit/mac/ChangeLog

    r207698 r207734  
     12016-10-23  Chris Dumez  <cdumez@apple.com>
     2
     3        addEventListener() / removeEventListener() should use a union for last parameter
     4        https://bugs.webkit.org/show_bug.cgi?id=163863
     5
     6        Reviewed by Darin Adler.
     7
     8        Cast BOOL to bool to help to compiler construct the new variant-type parameter.
     9
     10        * DOM/DOMNode.mm:
     11        (-[DOMNode addEventListener:listener:useCapture:]):
     12        (-[DOMNode addEventListener:::]):
     13        (-[DOMNode removeEventListener:listener:useCapture:]):
     14        (-[DOMNode removeEventListener:::]):
     15
    1162016-10-21  Wenson Hsieh  <wenson_hsieh@apple.com>
    217
  • trunk/Source/WebKit/mac/DOM/DOMNode.mm

    r205468 r207734  
    356356{
    357357    JSMainThreadNullState state;
    358     unwrap(*self).addEventListenerForBindings(type, ObjCEventListener::wrap(listener), useCapture);
     358    unwrap(*self).addEventListenerForBindings(type, ObjCEventListener::wrap(listener), static_cast<bool>(useCapture));
    359359}
    360360
     
    362362{
    363363    JSMainThreadNullState state;
    364     unwrap(*self).addEventListenerForBindings(type, ObjCEventListener::wrap(listener), useCapture);
     364    unwrap(*self).addEventListenerForBindings(type, ObjCEventListener::wrap(listener), static_cast<bool>(useCapture));
    365365}
    366366
     
    368368{
    369369    JSMainThreadNullState state;
    370     unwrap(*self).removeEventListenerForBindings(type, ObjCEventListener::wrap(listener), useCapture);
     370    unwrap(*self).removeEventListenerForBindings(type, ObjCEventListener::wrap(listener), static_cast<bool>(useCapture));
    371371}
    372372
     
    374374{
    375375    JSMainThreadNullState state;
    376     unwrap(*self).removeEventListenerForBindings(type, ObjCEventListener::wrap(listener), useCapture);
     376    unwrap(*self).removeEventListenerForBindings(type, ObjCEventListener::wrap(listener), static_cast<bool>(useCapture));
    377377}
    378378
Note: See TracChangeset for help on using the changeset viewer.