Skip to content

Commit

Permalink
Merge r220472 - Old subtitle track is not deleted on 'src' attribute …
Browse files Browse the repository at this point in the history
…change event

https://bugs.webkit.org/show_bug.cgi?id=175031

Patch by Kirill Ovchinnikov <kirill.ovchinnikov@lge.com> on 2017-08-09
Reviewed by Eric Carlson.

Source/WebCore:

Test: media/track/text-track-src-change.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::textTrackReadyStateChanged):
* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::loadTimerFired):
* html/shadow/MediaControls.cpp:
(WebCore::MediaControls::clearTextDisplayContainer):
* html/shadow/MediaControls.h:

LayoutTests:

* media/track/text-track-src-change-expected.txt: Added.
* media/track/text-track-src-change.html: Added.
  • Loading branch information
uprtdev authored and carlosgcampos committed Aug 14, 2017
1 parent 68040bb commit 2974cd5
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 0 deletions.
10 changes: 10 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,13 @@
2017-08-09 Kirill Ovchinnikov <kirill.ovchinnikov@lge.com>

Old subtitle track is not deleted on 'src' attribute change event
https://bugs.webkit.org/show_bug.cgi?id=175031

Reviewed by Eric Carlson.

* media/track/text-track-src-change-expected.txt: Added.
* media/track/text-track-src-change.html: Added.

2017-08-09 Ms2ger <Ms2ger@igalia.com>

[GTK] [WPE] Update expectations for global-constructors-attributes.html.
Expand Down
14 changes: 14 additions & 0 deletions LayoutTests/media/track/text-track-src-change-expected.txt
@@ -0,0 +1,14 @@
Tests Track 'src' changing handling



*** Testing Track 'src' changing
EXPECTED (cues.length == '4') OK

*** Changing 'src' attribute...
EXPECTED (cues.length == '100') OK

*** Changing back 'src' attribute...
EXPECTED (cues.length == '4') OK
END OF TEST

47 changes: 47 additions & 0 deletions LayoutTests/media/track/text-track-src-change.html
@@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script src=../media-file.js></script>
<script src=../video-test.js></script>
<script>
var stage = 0;

function trackLoaded()
{
var testTrack = document.getElementById('testTrack');
switch (stage) {
case 0:
consoleWrite("<br>*** Testing Track 'src' changing");
cues = testTrack.track.cues;
testExpected("cues.length", 4);
consoleWrite("<br>*** Changing 'src' attribute...");
++stage;
testTrack.src = "captions-webvtt/captions-long.vtt";
break;
case 1:
cues = testTrack.track.cues;
testExpected("cues.length", 100);
consoleWrite("<br>*** Changing back 'src' attribute...");
++stage;
testTrack.src = "captions-webvtt/tc013-settings.vtt";
break;
case 2:
cues = testTrack.track.cues;
testExpected("cues.length", 4);
endTest();
break;
}
}

setCaptionDisplayMode('Automatic');
</script>
</head>
<body>
<p>Tests Track 'src' changing handling</p>
<video>
<track id="testTrack" src="captions-webvtt/tc013-settings.vtt" kind="captions" onload="trackLoaded()" default>
</video>
</body>
</html>
17 changes: 17 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,20 @@
2017-08-09 Kirill Ovchinnikov <kirill.ovchinnikov@lge.com>

Old subtitle track is not deleted on 'src' attribute change event
https://bugs.webkit.org/show_bug.cgi?id=175031

Reviewed by Eric Carlson.

Test: media/track/text-track-src-change.html

* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::textTrackReadyStateChanged):
* html/HTMLTrackElement.cpp:
(WebCore::HTMLTrackElement::loadTimerFired):
* html/shadow/MediaControls.cpp:
(WebCore::MediaControls::clearTextDisplayContainer):
* html/shadow/MediaControls.h:

2017-08-09 Don Olmstead <don.olmstead@sony.com>

[WinCairo] Fix build after rev 220399
Expand Down
9 changes: 9 additions & 0 deletions Source/WebCore/html/HTMLMediaElement.cpp
Expand Up @@ -1855,6 +1855,15 @@ bool HTMLMediaElement::textTracksAreReady() const

void HTMLMediaElement::textTrackReadyStateChanged(TextTrack* track)
{
if (track->readinessState() != TextTrack::Loading
&& track->mode() != TextTrack::Mode::Disabled) {
// The display trees exist as long as the track is active, in this case,
// and if the same track is loaded again (for example if the src attribute was changed),
// cues can be accumulated with the old ones, that's why they needs to be flushed
if (hasMediaControls())
mediaControls()->clearTextDisplayContainer();
updateTextTrackDisplay();
}
if (m_player && m_textTracksWhenResourceSelectionBegan.contains(track)) {
if (track->readinessState() != TextTrack::Loading)
setReadyState(m_player->readyState());
Expand Down
4 changes: 4 additions & 0 deletions Source/WebCore/html/HTMLTrackElement.cpp
Expand Up @@ -202,6 +202,10 @@ void HTMLTrackElement::loadTimerFired()
return;
}

// When src attribute is changed we need to flush all collected track data
if (m_track)
m_track->removeAllCues();

track().scheduleLoad(url);
}

Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/html/shadow/MediaControls.cpp
Expand Up @@ -412,6 +412,12 @@ void MediaControls::textTrackPreferencesChanged()
m_textDisplayContainer->updateSizes(true);
}

void MediaControls::clearTextDisplayContainer()
{
if (m_textDisplayContainer)
m_textDisplayContainer->removeChildren();
}

#endif

void MediaControls::setSliderVolume()
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/html/shadow/MediaControls.h
Expand Up @@ -101,6 +101,7 @@ class MediaControls : public HTMLDivElement {
virtual void hideTextTrackDisplay();
virtual void updateTextTrackDisplay();
virtual void textTrackPreferencesChanged();
virtual void clearTextDisplayContainer();
#endif

protected:
Expand Down

0 comments on commit 2974cd5

Please sign in to comment.