Bug 1286810: [MSE] P5. Update webref MSE tests according to updated spec. r?jgraham
See w3c/MSE Issue 19, 20 & 26.
Changing the duration now can never call the range removal algorithm. An explicit call to remove must be used for range removal.
This spec change performed the following:
- Require remove() for all Range Removals
- Error on Duration Changes that need remove first
- Error on abort() during Range Removals
MozReview-Commit-ID: 1Xy8hi0tr7Q
--- a/testing/web-platform/tests/media-source/mediasource-config-changes.js
+++ b/testing/web-platform/tests/media-source/mediasource-config-changes.js
@@ -59,25 +59,35 @@ function mediaSourceConfigChangeTest(dir
sourceBuffer.timestampOffset = 1.5;
appendBuffer(test, sourceBuffer, dataB);
++expectedResizeEventCount;
});
test.waitForExpectedEvents(function()
{
assert_false(sourceBuffer.updating, "updating");
+
+ // Truncate the presentation to a duration of 2 seconds.
+ sourceBuffer.remove(2, 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_false(sourceBuffer.updating, "updating");
assert_greater_than(mediaSource.duration, 2, "duration");
// Truncate the presentation to a duration of 2 seconds.
mediaSource.duration = 2;
- assert_true(sourceBuffer.updating, "updating");
- test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, "durationchange");
});
test.waitForExpectedEvents(function()
{
assert_false(sourceBuffer.updating, "updating");
mediaSource.endOfStream();
--- a/testing/web-platform/tests/media-source/mediasource-duration.html
+++ b/testing/web-platform/tests/media-source/mediasource-duration.html
@@ -36,31 +36,39 @@
test.expectEvent(mediaElement, 'seeked', 'seeked to seekTo');
mediaElement.currentTime = seekTo;
assert_true(mediaElement.seeking, 'mediaElement.seeking (to seekTo)');
});
test.waitForExpectedEvents(function()
{
assert_greater_than_equal(mediaElement.currentTime, seekTo, 'Playback time has reached seekTo');
+ assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to seekTo');
+
+ assert_false(sourceBuffer.updating, 'sourceBuffer.updating');
+
+ sourceBuffer.remove(truncatedDuration, Infinity);;
+
+ assert_true(sourceBuffer.updating, 'sourceBuffer.updating');
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ 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');
- assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to seekTo');
-
test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration');
assert_false(sourceBuffer.updating, 'sourceBuffer.updating');
mediaSource.duration = truncatedDuration;
- assert_true(sourceBuffer.updating, 'sourceBuffer.updating');
- test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
-
assert_true(mediaElement.seeking, 'Seeking after setting truncatedDuration');
});
test.waitForExpectedEvents(function()
{
assert_equals(mediaElement.currentTime, truncatedDuration,
'Playback time is truncatedDuration while seeking');
assert_true(mediaElement.seeking, 'mediaElement.seeking while seeking to truncatedDuration');
@@ -163,46 +171,62 @@
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');
- // 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;
+ 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;
// Mark endOfStream so that playback can reach 'ended' at the new duration.
test.expectEvent(mediaSource, 'sourceended', 'endOfStream acknowledged');
mediaSource.endOfStream();
- // endOfStream can change duration downwards slightly.
+ // endOfStream can change duration slightly.
// Allow for one more 'durationchange' event only in this case.
var currentDuration = mediaSource.duration;
if (currentDuration != newDuration) {
- assert_true(currentDuration > 0 && currentDuration < newDuration, 'adjusted duration');
newDuration = currentDuration;
++expectedDurationChangeEventCount;
}
// Allow media to play to end while counting 'durationchange' events.
test.expectEvent(mediaElement, 'ended', 'Playback ended');
test.waitForExpectedEvents(function()
{
--- a/testing/web-platform/tests/media-source/mediasource-getvideoplaybackquality.html
+++ b/testing/web-platform/tests/media-source/mediasource-getvideoplaybackquality.html
@@ -38,28 +38,37 @@
test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
sourceBuffer.appendBuffer(mediaData);
test.waitForExpectedEvents(function()
{
assert_false(sourceBuffer.updating, "updating");
- assert_greater_than(mediaSource.duration, 1, "duration");
- mediaSource.duration = 1;
+ sourceBuffer.remove(1, 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_false(sourceBuffer.updating, "updating");
+ assert_greater_than(mediaSource.duration, 1, "duration");
+
+ mediaSource.duration = 1;
+
+ test.expectEvent(mediaElement, "durationchange");
+ });
+
+ test.waitForExpectedEvents(function()
+ {
mediaSource.endOfStream();
mediaElement.play();
test.expectEvent(mediaElement, 'ended', 'mediaElement');
});
test.waitForExpectedEvents(function()
{
assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
--- a/testing/web-platform/tests/media-source/mediasource-play.html
+++ b/testing/web-platform/tests/media-source/mediasource-play.html
@@ -18,27 +18,36 @@
test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
sourceBuffer.appendBuffer(mediaData);
test.waitForExpectedEvents(function()
{
assert_false(sourceBuffer.updating, "updating");
- assert_greater_than(mediaSource.duration, 1, "duration");
- mediaSource.duration = 1;
+ sourceBuffer.remove(1, 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_false(sourceBuffer.updating, "updating");
+ assert_greater_than(mediaSource.duration, 1, "duration");
+
+ mediaSource.duration = 1;
+
+ test.expectEvent(mediaElement, "durationchange");
+ });
+
+ test.waitForExpectedEvents(function()
+ {
mediaSource.endOfStream();
mediaElement.play();
});
}, "Test normal playback case with MediaSource API");
</script>
</body>
</html>
--- a/testing/web-platform/tests/media-source/mediasource-remove.html
+++ b/testing/web-platform/tests/media-source/mediasource-remove.html
@@ -131,25 +131,28 @@
mediasource_test(function(test, mediaElement, mediaSource)
{
var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
mediaSource.duration = 10;
test.expectEvent(sourceBuffer, "updatestart");
- test.expectEvent(sourceBuffer, "abort");
+ test.expectEvent(sourceBuffer, "update");
test.expectEvent(sourceBuffer, "updateend");
sourceBuffer.remove(1, 2);
assert_true(sourceBuffer.updating, "updating");
- sourceBuffer.abort();
+ assert_throws("InvalidStateError", function()
+ {
+ sourceBuffer.abort();
+ }, "abort");
- assert_false(sourceBuffer.updating, "updating");
+ assert_true(sourceBuffer.updating, "updating");
test.waitForExpectedEvents(function()
{
test.done();
});
}, "Test aborting a remove operation.");
mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)