Index: LayoutTests/http/tests/media/media-source/mediasource-config-changes.js |
diff --git a/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js b/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7c17ccfd199cfe6099388760f7b4090f85ca2e6c |
--- /dev/null |
+++ b/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js |
@@ -0,0 +1,78 @@ |
+function fetchManifestAndData(test, manifestFilename, callback) |
+{ |
+ var baseURL = '/media/resources/media-source/'; |
+ var manifestURL = baseURL + manifestFilename; |
+ MediaSourceUtil.loadTextData(test, manifestURL, function(manifestText) |
+ { |
+ var manifest = JSON.parse(manifestText); |
+ |
+ assert_true(MediaSource.isTypeSupported(manifest.type), manifest.type + " is supported."); |
+ |
+ var mediaURL = baseURL + manifest.url; |
+ MediaSourceUtil.loadBinaryData(test, mediaURL, function(mediaData) |
+ { |
+ callback(manifest.type, mediaData); |
+ }); |
+ }); |
+} |
+ |
+function appendBuffer(test, sourceBuffer, data) |
+{ |
+ test.expectEvent(sourceBuffer, "update"); |
+ test.expectEvent(sourceBuffer, "updateend"); |
+ sourceBuffer.appendBuffer(data); |
+} |
+ |
+function mediaSourceConfigChangeTest(directory, idA, idB, description) |
+{ |
+ var manifestFilenameA = directory + "/test-" + idA + "-manifest.json"; |
+ var manifestFilenameB = directory + "/test-" + idB + "-manifest.json"; |
+ mediasource_test(function(test, mediaElement, mediaSource) |
+ { |
+ mediaElement.pause(); |
+ test.failOnEvent(mediaElement, 'error'); |
+ test.endOnEvent(mediaElement, 'ended'); |
+ |
+ fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA) |
+ { |
+ fetchManifestAndData(test, manifestFilenameB, function(typeB, dataB) |
+ { |
+ assert_equals(typeA, typeB, "Media format types match"); |
+ |
+ var sourceBuffer = mediaSource.addSourceBuffer(typeA); |
+ |
+ appendBuffer(test, sourceBuffer, dataA); |
+ |
+ test.waitForExpectedEvents(function() |
+ { |
+ // Add the second buffer starting at 0.5 second. |
+ sourceBuffer.timestampOffset = 0.5; |
+ appendBuffer(test, sourceBuffer, dataB); |
+ }); |
+ |
+ test.waitForExpectedEvents(function() |
+ { |
+ // Add the first buffer starting at 1 second. |
+ sourceBuffer.timestampOffset = 1; |
+ appendBuffer(test, sourceBuffer, dataA); |
+ }); |
+ |
+ test.waitForExpectedEvents(function() |
+ { |
+ // Add the second buffer starting at 1.5 second. |
+ sourceBuffer.timestampOffset = 1.5; |
+ appendBuffer(test, sourceBuffer, dataB); |
+ }); |
+ |
+ test.waitForExpectedEvents(function() |
+ { |
+ // Truncate the presentation to a duration of 2 seconds. |
+ mediaSource.duration = 2; |
+ mediaSource.endOfStream(); |
+ |
+ mediaElement.play(); |
+ }); |
+ }); |
+ }); |
+ }, description, { timeout: 10000 } ); |
+}; |