Changeset 117811 in webkit


Ignore:
Timestamp:
May 21, 2012 1:34:21 PM (12 years ago)
Author:
annacc@chromium.org
Message:

Only render text track cues if kind=captions or kind=subtitles.
https://bugs.webkit.org/show_bug.cgi?id=83321

Reviewed by Eric Carlson.

Source/WebCore:

No new tests. Modification to media/track/track-kind.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::textTrackKindChanged):

If the kind changes from a 'visible' kind to a 'non-visible' kind,
update the track's mode to HIDDEN.

  • html/shadow/MediaControlElements.cpp:

(WebCore::MediaControlTextTrackContainerElement::updateDisplay):

Do not render cues from tracks that are not captions or subtitles.

  • html/track/TextTrack.cpp:

(WebCore::TextTrack::setMode):

If the track's mode changes from SHOWING to HIDDEN or DISABLED,
ensure any currently visible cues will no longer be rendered.

  • html/track/TextTrackCue.cpp:

(WebCore::TextTrackCue::removeDisplayTree): New method.

  • html/track/TextTrackCue.h:

(TextTrackCue):

LayoutTests:

  • media/track/track-kind-expected.txt:
  • media/track/track-kind.html:
Location:
trunk
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r117810 r117811  
     12012-05-21  Anna Cavender  <annacc@chromium.org>
     2
     3        Only render text track cues if kind=captions or kind=subtitles.
     4        https://bugs.webkit.org/show_bug.cgi?id=83321
     5
     6        Reviewed by Eric Carlson.
     7
     8        * media/track/track-kind-expected.txt:
     9        * media/track/track-kind.html:
     10
     11
    1122012-05-21  Peter Kasting  <pkasting@google.com>
    213
  • trunk/LayoutTests/media/track/track-kind-expected.txt

    r100453 r117811  
    1 Tests that the 'addtrack' event is fired when a TextTrack is created.
    2 
     1Tests that the 'kind' attribute is set properly and that cues are only visible when 'kind' is set to 'captions' or 'subtitles'.
    32
    43++ Test default attribute value
     
    3534EXPECTED (trackElement.track.kind == 'subtitles') OK
    3635EXPECTED (trackElement.getAttribute('kind') == 'subtitles') OK
     36EXPECTED (textTrackDisplayElement(video, 'display').innerText == 'Lorem ipsum dolor sit amet, ') OK
    3737
    3838++ 'captions'
     
    4949EXPECTED (trackElement.track.kind == 'captions') OK
    5050EXPECTED (trackElement.getAttribute('kind') == 'captions') OK
     51EXPECTED (textTrackDisplayElement(video, 'display').innerText == 'Lorem ipsum dolor sit amet, ') OK
    5152
    5253++ 'descriptions'
     
    6364EXPECTED (trackElement.track.kind == 'descriptions') OK
    6465EXPECTED (trackElement.getAttribute('kind') == 'descriptions') OK
     66No text track cue with display id '-webkit-media-text-track-display' is currently visible
    6567
    6668++ 'chapters'
     
    7779EXPECTED (trackElement.track.kind == 'chapters') OK
    7880EXPECTED (trackElement.getAttribute('kind') == 'chapters') OK
     81No text track cue with display id '-webkit-media-text-track-display' is currently visible
    7982
    8083++ 'metadata'
     
    9194EXPECTED (trackElement.track.kind == 'metadata') OK
    9295EXPECTED (trackElement.getAttribute('kind') == 'metadata') OK
     96No text track cue with display id '-webkit-media-text-track-display' is currently visible
    9397
    9498END OF TEST
  • trunk/LayoutTests/media/track/track-kind.html

    r100453 r117811  
    55        <script src=../media-file.js></script>
    66        <script src=../video-test.js></script>
     7        <script src=../media-controls.js></script>
    78        <script>
    89
     
    1011            function setKind(value)
    1112            {
     13                consoleWrite("<b>++ '" + value + "'</b>");
    1214                consoleWrite("<b> set via DOM</b>");
    1315                run("trackElement.removeAttribute('kind')");
     
    2224                testExpected("trackElement.track.kind", value);
    2325                testExpected("trackElement.getAttribute('kind')", value);
     26                testExpected("textTrackDisplayElement(video, 'display').innerText", "Lorem ipsum dolor sit amet, ");
    2427                consoleWrite("");
    2528
    2629            }
    2730
    28             function start()
     31            function testKind()
    2932            {
    30                 findMediaElement();
    31                 consoleWrite("");
    32 
    33                 trackElement = document.getElementById('track_1');
    34 
    3533                consoleWrite("<b>++ Test default attribute value</b>");
    3634                testExpected("trackElement.getAttribute('kind')", null);
     
    5654
    5755                consoleWrite("<b>*** Set to known values</b>");
    58                 consoleWrite("<b>++ 'subtitles'</b>");
    5956                setKind("subtitles");
    6057
    61                 consoleWrite("<b>++ 'captions'</b>");
    6258                setKind("captions");
    6359
    64                 consoleWrite("<b>++ 'descriptions'</b>");
    6560                setKind("descriptions");
    6661
    67                 consoleWrite("<b>++ 'chapters'</b>");
    6862                setKind("chapters");
    6963
    70                 consoleWrite("<b>++ 'metadata'</b>");
    7164                setKind("metadata");
    7265
    7366                endTest();
    7467            }
     68           
     69            function loaded()
     70            {
     71                findMediaElement();
     72                trackElement = document.getElementById('track_1');
     73
     74                waitForEventsAndCall([[video, 'canplaythrough'], [trackElement, 'load']], testKind);
     75
     76                video.src = findMediaFile('video', '../content/counting');
     77            }
    7578
    7679        </script>
    7780    </head>
    78     <body onload="start()">
    79         <p>Tests that the 'addtrack' event is fired when a TextTrack is created.</p>
     81    <body onload="loaded()">
     82        <p>Tests that the 'kind' attribute is set properly and that cues are only visible when 'kind' is set to 'captions' or 'subtitles'.</p>
    8083        <video>
    81             <track id=track_1>
     84            <track id=track_1 src="captions-webvtt/metadata.vtt" default>
    8285        </video>
    8386    </body>
  • trunk/Source/WebCore/ChangeLog

    r117809 r117811  
     12012-05-21 Anna Cavender  <annacc@chromium.org>
     2
     3        Only render text track cues if kind=captions or kind=subtitles.
     4        https://bugs.webkit.org/show_bug.cgi?id=83321
     5
     6        Reviewed by Eric Carlson.
     7
     8        No new tests. Modification to media/track/track-kind.html
     9
     10        * html/HTMLMediaElement.cpp:
     11        (WebCore::HTMLMediaElement::textTrackKindChanged):
     12           If the kind changes from a 'visible' kind to a 'non-visible' kind,
     13           update the track's mode to HIDDEN.
     14
     15        * html/shadow/MediaControlElements.cpp:
     16        (WebCore::MediaControlTextTrackContainerElement::updateDisplay):
     17            Do not render cues from tracks that are not captions or subtitles.
     18
     19        * html/track/TextTrack.cpp:
     20        (WebCore::TextTrack::setMode):
     21            If the track's mode changes from SHOWING to HIDDEN or DISABLED,
     22            ensure any currently visible cues will no longer be rendered.
     23
     24        * html/track/TextTrackCue.cpp:
     25        (WebCore::TextTrackCue::removeDisplayTree): New method.
     26        * html/track/TextTrackCue.h:
     27        (TextTrackCue):
     28 
    1292012-05-21  Andreas Kling  <kling@webkit.org>
    230
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r117662 r117811  
    12861286}
    12871287
    1288 void HTMLMediaElement::textTrackKindChanged(TextTrack*)
    1289 {
    1290     // FIXME(62885): Implement.
     1288void HTMLMediaElement::textTrackKindChanged(TextTrack* track)
     1289{
     1290    if (track->kind() != TextTrack::captionsKeyword() && track->kind() != TextTrack::subtitlesKeyword() && track->mode() == TextTrack::SHOWING)
     1291        track->setMode(TextTrack::HIDDEN, ASSERT_NO_EXCEPTION);
    12911292}
    12921293
  • trunk/Source/WebCore/html/shadow/MediaControlElements.cpp

    r116900 r117811  
    12851285
    12861286        ASSERT(cue->isActive());
     1287        if (cue->track()->kind() != TextTrack::captionsKeyword() && cue->track()->kind() != TextTrack::subtitlesKeyword())
     1288            continue;
     1289
    12871290        if (!cue->track() || cue->track()->mode() != TextTrack::SHOWING)
    12881291            continue;
  • trunk/Source/WebCore/html/track/TextTrack.cpp

    r114026 r117811  
    143143    // because they will no longer be accessible from the cues() function.
    144144    if (mode == TextTrack::DISABLED && m_client && m_cues)
    145          m_client->textTrackRemoveCues(this, m_cues.get());
     145        m_client->textTrackRemoveCues(this, m_cues.get());
     146         
     147    if (mode != TextTrack::SHOWING && m_cues)
     148        for (size_t i = 0; i < m_cues->length(); ++i)
     149            m_cues->item(i)->removeDisplayTree();
    146150
    147151    //  ... Note: If the mode had been showing by default, this will change it to showing,
  • trunk/Source/WebCore/html/track/TextTrackCue.cpp

    r114760 r117811  
    609609}
    610610
     611void TextTrackCue::removeDisplayTree()
     612{
     613    if (m_displayTree->parentNode())
     614        m_displayTree->remove(ASSERT_NO_EXCEPTION);
     615}
     616
    611617std::pair<double, double> TextTrackCue::getPositionCoordinates()
    612618{
  • trunk/Source/WebCore/html/track/TextTrackCue.h

    r114640 r117811  
    103103
    104104    PassRefPtr<HTMLDivElement> getDisplayTree();
     105    void removeDisplayTree();
    105106
    106107    virtual const AtomicString& interfaceName() const;
Note: See TracChangeset for help on using the changeset viewer.