Changeset 207468 in webkit


Ignore:
Timestamp:
Oct 18, 2016 10:13:53 AM (7 years ago)
Author:
Chris Dumez
Message:

Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
https://bugs.webkit.org/show_bug.cgi?id=163580

Reviewed by Sam Weinig.

LayoutTests/imported/w3c:

Incorporate https://github.com/w3c/web-platform-tests/pull/3999 as the
test was incorrect. Rebaseline now that we are passing the test.

  • web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor-expected.txt:
  • web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor.html:

Source/WebCore:

Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
and use a regular constructor as in the specification:

No new tests, updated existing tests.

  • html/track/TrackEvent.cpp:

(WebCore::TrackEvent::TrackEvent):

  • html/track/TrackEvent.h:
  • html/track/TrackEvent.idl:

LayoutTests:

Update existing test to reflect behavior change. We now correctly throw a TypeError
when passing an unexpected track object type to the TrackEvent constructor.

  • fast/events/constructors/track-event-constructor-expected.txt:
  • fast/events/constructors/track-event-constructor.html:
Location:
trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r207464 r207468  
     12016-10-18  Chris Dumez  <cdumez@apple.com>
     2
     3        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
     4        https://bugs.webkit.org/show_bug.cgi?id=163580
     5
     6        Reviewed by Sam Weinig.
     7
     8        Update existing test to reflect behavior change. We now correctly throw a TypeError
     9        when passing an unexpected track object type to the TrackEvent constructor.
     10
     11        * fast/events/constructors/track-event-constructor-expected.txt:
     12        * fast/events/constructors/track-event-constructor.html:
     13
    1142016-10-18  Nael Ouedraogo  <nael.ouedraogo@crf.canon.fr>
    215
  • trunk/LayoutTests/fast/events/constructors/track-event-constructor-expected.txt

    r99261 r207468  
    1515PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).track is null
    1616
    17 *** Bubbles and cancelable true, invalid track ***
    18 PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles is true
    19 PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable is true
    20 PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).track is null
    21 
    22 *** Initialize 'track' with a invalid values ***
    23 PASS new TrackEvent('TrackEvent', { track: 10 }).track is null
    24 PASS new TrackEvent('TrackEvent', { track: 'string' }).track is null
    25 PASS new TrackEvent('TrackEvent', { track: emptyObject }).track is null
    26 PASS new TrackEvent('TrackEvent', { track: document }).track is null
     17*** Invalid track ***
     18PASS new TrackEvent('TrackEvent', { track: HTMLTrackElement }) threw exception TypeError: Type error.
     19PASS new TrackEvent('TrackEvent', { track: 10 }) threw exception TypeError: Type error.
     20PASS new TrackEvent('TrackEvent', { track: 'string' }) threw exception TypeError: Type error.
     21PASS new TrackEvent('TrackEvent', { track: emptyObject }) threw exception TypeError: Type error.
     22PASS new TrackEvent('TrackEvent', { track: document }) threw exception TypeError: Type error.
    2723
    2824*** Bubbles and cancelable true, valid track ***
    29 PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles is true
    30 PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable is true
     25PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).bubbles is true
     26PASS new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).cancelable is true
    3127PASS new TrackEvent('TrackEvent', { track: trackElement.track }).track is trackElement.track
    3228
  • trunk/LayoutTests/fast/events/constructors/track-event-constructor.html

    r155267 r207468  
    2727            shouldBeNull("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true }).track");
    2828   
    29             debug("<br>*** Bubbles and cancelable true, invalid track ***");
    30             shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles", "true");
    31             shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable", "true");
    32             shouldBeNull("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).track");
    33    
    34             debug("<br>*** Initialize 'track' with a invalid values ***");
    35             shouldBeNull("new TrackEvent('TrackEvent', { track: 10 }).track");
    36             shouldBeNull("new TrackEvent('TrackEvent', { track: \'string\' }).track");
     29            debug("<br>*** Invalid track ***");
     30            shouldThrowErrorName("new TrackEvent('TrackEvent', { track: HTMLTrackElement })", "TypeError");
     31            shouldThrowErrorName("new TrackEvent('TrackEvent', { track: 10 })", "TypeError");
     32            shouldThrowErrorName("new TrackEvent('TrackEvent', { track: \'string\' })", "TypeError");
    3733            emptyObject = { };
    38             shouldBeNull("new TrackEvent('TrackEvent', { track: emptyObject }).track");
    39             shouldBeNull("new TrackEvent('TrackEvent', { track: document }).track");
     34            shouldThrowErrorName("new TrackEvent('TrackEvent', { track: emptyObject })", "TypeError");
     35            shouldThrowErrorName("new TrackEvent('TrackEvent', { track: document })", "TypeError");
    4036
    4137            debug("<br>*** Bubbles and cancelable true, valid track ***");
    42             shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).bubbles", "true");
    43             shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: HTMLTrackElement }).cancelable", "true");
     38            shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).bubbles", "true");
     39            shouldBe("new TrackEvent('TrackEvent', { bubbles: true, cancelable: true, track: trackElement.track }).cancelable", "true");
    4440            shouldBe("new TrackEvent('TrackEvent', { track: trackElement.track }).track", "trackElement.track");
    4541
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r207380 r207468  
     12016-10-18  Chris Dumez  <cdumez@apple.com>
     2
     3        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
     4        https://bugs.webkit.org/show_bug.cgi?id=163580
     5
     6        Reviewed by Sam Weinig.
     7
     8        Incorporate https://github.com/w3c/web-platform-tests/pull/3999 as the
     9        test was incorrect. Rebaseline now that we are passing the test.
     10
     11        * web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor-expected.txt:
     12        * web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor.html:
     13
    1142016-10-15  Chris Dumez  <cdumez@apple.com>
    215
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor-expected.txt

    r189476 r207468  
    11
    22PASS TrackEvent constructor, one arg
    3 FAIL TrackEvent constructor, two args assert_equals: ev.track expected object "[object Object]" but got null
     3PASS TrackEvent constructor, two args
    44
  • trunk/LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/media-elements/interfaces/TrackEvent/constructor.html

    r189476 r207468  
    1414}, document.title+', one arg');
    1515test(function(){
    16     var obj = {};
    17     var ev = new TrackEvent('foo', {track:obj});
     16    var video = document.createElement('video');
     17    var testTrack = video.addTextTrack('subtitles', 'foo', 'foo');
     18    var ev = new TrackEvent('foo', {track: testTrack});
    1819    assert_true(ev instanceof TrackEvent, 'ev instanceof TrackEvent');
    1920    assert_true(ev instanceof Event, 'ev instanceof Event');
    20     assert_equals(ev.track, obj, 'ev.track');
     21    assert_equals(ev.track, testTrack, 'ev.track');
    2122    ev.track = {};
    22     assert_equals(ev.track, obj, 'ev.track after assignment');
     23    assert_equals(ev.track, testTrack, 'ev.track after assignment');
    2324}, document.title+', two args');
    2425</script>
  • trunk/Source/WebCore/ChangeLog

    r207467 r207468  
     12016-10-18  Chris Dumez  <cdumez@apple.com>
     2
     3        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
     4        https://bugs.webkit.org/show_bug.cgi?id=163580
     5
     6        Reviewed by Sam Weinig.
     7
     8        Update TrackEvent to stop using legacy [ConstructorTemplate=Event]
     9        and use a regular constructor as in the specification:
     10        - https://html.spec.whatwg.org/#the-trackevent-interface
     11
     12        No new tests, updated existing tests.
     13
     14        * html/track/TrackEvent.cpp:
     15        (WebCore::TrackEvent::TrackEvent):
     16        * html/track/TrackEvent.h:
     17        * html/track/TrackEvent.idl:
     18
    1192016-10-18  Commit Queue  <commit-queue@webkit.org>
    220
  • trunk/Source/WebCore/html/track/TrackEvent.cpp

    r200943 r207468  
    4040}
    4141
    42 TrackEvent::TrackEvent(const AtomicString& type, const TrackEventInit& initializer)
    43     : Event(type, initializer)
    44     , m_track(initializer.track)
     42TrackEvent::TrackEvent(const AtomicString& type, const Init& initializer, IsTrusted isTrusted)
     43    : Event(type, initializer, isTrusted)
    4544{
     45    if (initializer.track) {
     46        m_track = std::experimental::visit([](const auto& trackbase) -> TrackBase* {
     47            return trackbase.get();
     48        }, *initializer.track);
     49    }
    4650}
    4751
  • trunk/Source/WebCore/html/track/TrackEvent.h

    r200943 r207468  
    2929#if ENABLE(VIDEO_TRACK)
    3030
     31#include "AudioTrack.h"
    3132#include "Event.h"
    32 #include "TrackBase.h"
     33#include "TextTrack.h"
     34#include "VideoTrack.h"
    3335
    3436namespace WebCore {
    35 
    36 struct TrackEventInit : public EventInit {
    37     RefPtr<TrackBase> track;
    38 };
    3937
    4038class TrackEvent final : public Event {
     
    4745    }
    4846
    49     static Ref<TrackEvent> createForBindings(const AtomicString& type, const TrackEventInit& initializer)
     47    using TrackEventTrack = std::experimental::variant<RefPtr<VideoTrack>, RefPtr<AudioTrack>, RefPtr<TextTrack>>;
     48
     49    struct Init : public EventInit {
     50        Optional<TrackEventTrack> track;
     51    };
     52
     53    static Ref<TrackEvent> create(const AtomicString& type, const Init& initializer, IsTrusted isTrusted = IsTrusted::No)
    5054    {
    51         return adoptRef(*new TrackEvent(type, initializer));
     55        return adoptRef(*new TrackEvent(type, initializer, isTrusted));
    5256    }
    5357
     
    5862private:
    5963    TrackEvent(const AtomicString& type, bool canBubble, bool cancelable, Ref<TrackBase>&&);
    60     TrackEvent(const AtomicString& type, const TrackEventInit& initializer);
     64    TrackEvent(const AtomicString& type, const Init& initializer, IsTrusted);
    6165
    6266    RefPtr<TrackBase> m_track;
  • trunk/Source/WebCore/html/track/TrackEvent.idl

    r207302 r207468  
    2626[
    2727    Conditional=VIDEO_TRACK,
    28     LegacyConstructorTemplate=Event
     28    Constructor(DOMString type, optional TrackEventInit eventInitDict)
    2929] interface TrackEvent : Event {
    30     [LegacyInitializedByEventConstructor, CustomGetter] readonly attribute object track;
     30    [CustomGetter] readonly attribute (VideoTrack or AudioTrack or TextTrack)? track;
    3131};
    3232
     33dictionary TrackEventInit : EventInit {
     34    (VideoTrack or AudioTrack or TextTrack)? track = null;
     35};
Note: See TracChangeset for help on using the changeset viewer.