--- a/testing/web-platform/tests/media-source/mediasource-duration.html
+++ b/testing/web-platform/tests/media-source/mediasource-duration.html
@@ -23,19 +23,16 @@
// Append all the segments
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
test.expectEvent(mediaElement, 'playing', 'Playing triggered');
sourceBuffer.appendBuffer(mediaData);
test.waitForExpectedEvents(function()
{
- assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration');
- assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');
-
test.expectEvent(mediaElement, 'seeking', 'seeking to seekTo');
test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while seeking to seekTo');
test.expectEvent(mediaElement, 'seeked', 'seeked to seekTo');
mediaElement.currentTime = seekTo;
assert_true(mediaElement.seeking, 'mediaElement.seeking (to seekTo)');
});
test.waitForExpectedEvents(function()
@@ -50,19 +47,19 @@
assert_true(sourceBuffer.updating, 'sourceBuffer.updating');
test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
});
test.waitForExpectedEvents(function()
{
+ // remove will not remove partial frames. The truncated duration is as such the highest end time.
+ truncatedDuration = sourceBuffer.buffered.end(sourceBuffer.buffered.length-1);
assert_greater_than_equal(mediaElement.currentTime, seekTo, 'Playback time has reached seekTo');
- assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration after seekTo');
- assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration after seekTo');
test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration');
assert_false(sourceBuffer.updating, 'sourceBuffer.updating');
mediaSource.duration = truncatedDuration;
assert_true(mediaElement.seeking, 'Seeking after setting truncatedDuration');
});
@@ -130,18 +127,20 @@
test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while finishing seek to truncatedDuration');
test.expectEvent(mediaElement, 'seeked', 'seeked to truncatedDuration');
// Call endOfStream() to complete the pending seek.
mediaSource.endOfStream();
test.waitForExpectedEvents(function()
{
- assert_equals(mediaElement.currentTime, truncatedDuration,
+ assert_greater_than_equal(mediaElement.currentTime, truncatedDuration,
'Playback time has reached truncatedDuration');
+ // The mediaSource.readyState is "ended". Buffered ranges have been adjusted to the longest track.
+ truncatedDuration = sourceBuffer.buffered.end(sourceBuffer.buffered.length-1);
assert_equals(mediaElement.duration, truncatedDuration,
'mediaElement truncatedDuration after seek to it');
assert_equals(mediaSource.duration, truncatedDuration,
'mediaSource truncatedDuration after seek to it');
assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to truncatedDuration');
test.done();
});
@@ -153,63 +152,54 @@
var fullDuration = segmentInfo.duration;
var newDuration = 0.5;
var expectedDurationChangeEventCount = 1;
var durationchangeEventCounter = 0;
var durationchangeEventHandler = test.step_func(function(event)
{
- assert_equals(mediaElement.duration, newDuration, 'mediaElement newDuration');
- assert_equals(mediaSource.duration, newDuration, 'mediaSource newDuration');
+ assert_equals(mediaElement.duration, mediaSource.duration, 'mediaElement newDuration');
+ // Final duration may be greater than originally set as per MSE's 2.4.6 Duration change
+ // Adjust newDuration accordingly.
+ assert_less_than_equal(newDuration, mediaSource.duration, 'mediaSource newDuration');
durationchangeEventCounter++;
});
mediaElement.play();
// Append all the segments
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
test.expectEvent(mediaElement, 'playing', 'Playing triggered');
sourceBuffer.appendBuffer(mediaData);
test.waitForExpectedEvents(function()
{
- assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration');
- assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');
assert_less_than(mediaElement.currentTime, newDuration / 2, 'mediaElement currentTime');
assert_false(sourceBuffer.updating, "updating");
// Truncate duration. This should result in one 'durationchange' fired.
sourceBuffer.remove(newDuration, Infinity);
assert_true(sourceBuffer.updating, "updating");
test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
});
test.waitForExpectedEvents(function()
{
- assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration');
- assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');
- assert_less_than(mediaElement.currentTime, newDuration / 2, 'mediaElement currentTime');
-
// Media load also fires 'durationchange' event, so only start counting them now.
mediaElement.addEventListener('durationchange', durationchangeEventHandler);
assert_false(sourceBuffer.updating, "updating");
// Truncate duration. This should result in one 'durationchange' fired.
mediaSource.duration = newDuration;
- });
-
- test.waitForExpectedEvents(function()
- {
- assert_false(sourceBuffer.updating, "updating");
// Final duration may be greater than originally set as per MSE's 2.4.6 Duration change
// Adjust newDuration accordingly.
assert_true(newDuration <= mediaSource.duration, 'adjusted duration');
newDuration = mediaSource.duration;
// Set duration again to make sure it does not trigger another 'durationchange' event.
mediaSource.duration = newDuration;