Index: third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/util/testmediasource.js |
diff --git a/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/util/testmediasource.js b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/util/testmediasource.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..47cfeb4512a4cf7adf17a84451dc88aa7b6794fe |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/imported/wpt/encrypted-media/util/testmediasource.js |
@@ -0,0 +1,49 @@ |
+function testmediasource(config) { |
+ |
+ return new Promise(function(resolve, reject) { |
+ // Fetch the media resources |
+ var fetches = [config.audioPath, config.videoPath].map(function(path) { |
+ return fetch(path).then(function(response) { |
+ if (!response.ok) throw new Error('Resource fetch failed'); |
+ return response.arrayBuffer(); |
+ }); |
+ }); |
+ |
+ Promise.all(fetches).then(function(resources) { |
+ config.audioMedia = resources[0]; |
+ config.videoMedia = resources[1]; |
+ |
+ // Create media source |
+ var source = new MediaSource(); |
+ source.done = new Promise(function(resolvesource,rejectsource){ |
+ |
+ // Create and fill source buffers when the media source is opened |
+ source.addEventListener('sourceopen', onSourceOpen); |
+ resolve(source); |
+ |
+ function onSourceOpen(event) { |
+ var audioSourceBuffer = source.addSourceBuffer(config.audioType), |
+ videoSourceBuffer = source.addSourceBuffer(config.videoType); |
+ |
+ audioSourceBuffer.addEventListener('updateend',onUpdateEnd); |
+ videoSourceBuffer.addEventListener('updateend',onUpdateEnd); |
+ |
+ audioSourceBuffer.appendBuffer(config.audioMedia); |
+ videoSourceBuffer.appendBuffer(config.videoMedia); |
+ |
+ function onUpdateEnd(event){ |
+ event.target.removeEventListener('updateend', onUpdateEnd); |
+ if (!audioSourceBuffer.updating && !videoSourceBuffer.updating) { |
+ if (source.readyState !== 'open') { |
+ rejectsource(new Error("Media source error")); |
+ } else { |
+ source.endOfStream(); |
+ resolvesource(); |
+ } |
+ } |
+ } |
+ } |
+ }); |
+ }); |
+ }); |
+} |