mediasource-sourcebuffer-trackdefaults.html (3993B)
1 <!DOCTYPE html> 2 <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> 3 <meta charset="utf-8"> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <script src="mediasource-util.js"></script> 7 <script> 8 function sourceBufferTrackDefaultsTest(callback, description) 9 { 10 mediasource_test(function(test, mediaElement, mediaSource) 11 { 12 var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE); 13 assert_array_equals(sourceBuffer.trackDefaults, [], "Empty initial SourceBuffer.trackDefaults"); 14 callback(test, mediaElement, mediaSource, sourceBuffer); 15 }, description); 16 }; 17 18 sourceBufferTrackDefaultsTest(function(test, mediaElement, mediaSource, sourceBuffer) 19 { 20 var emptyList = new TrackDefaultList([]); 21 assert_not_equals(sourceBuffer.trackDefaults, emptyList, "Initial trackDefaults object differs from new empty list"); 22 23 sourceBuffer.trackDefaults = emptyList; 24 25 assert_array_equals(sourceBuffer.trackDefaults, [], "Round-tripped empty trackDefaults"); 26 assert_equals(sourceBuffer.trackDefaults, emptyList, "Round-tripped the empty TrackDefaultList object"); 27 test.done(); 28 }, "Test round-trip of empty SourceBuffer.trackDefaults"); 29 30 sourceBufferTrackDefaultsTest(function(test, mediaElement, mediaSource, sourceBuffer) 31 { 32 var trackDefault = new TrackDefault("audio", "en-US", "audio label", ["main"], "1"); 33 var trackDefaults = new TrackDefaultList([ trackDefault ]); 34 35 sourceBuffer.trackDefaults = trackDefaults; 36 37 assert_array_equals(sourceBuffer.trackDefaults, trackDefaults, "Round-tripped non-empty trackDefaults"); 38 assert_equals(sourceBuffer.trackDefaults.length, 1, "Confirmed non-empty trackDefaults"); 39 assert_equals(sourceBuffer.trackDefaults, trackDefaults, "Round-tripped the non-empty TrackDefaultList object"); 40 test.done(); 41 }, "Test round-trip of non-empty SourceBuffer.trackDefaults"); 42 43 sourceBufferTrackDefaultsTest(function(test, mediaElement, mediaSource, sourceBuffer) 44 { 45 mediaSource.removeSourceBuffer(sourceBuffer); 46 assert_throws_dom("InvalidStateError", 47 function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, 48 "Exception thrown when setting trackDefaults on SourceBuffer that is removed from MediaSource"); 49 test.done(); 50 }, "Test setting trackDefaults on an already-removed SourceBuffer"); 51 52 mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData) 53 { 54 assert_array_equals(sourceBuffer.trackDefaults, [], "Empty initial SourceBuffer.trackDefaults"); 55 test.expectEvent(sourceBuffer, "updateend", "Append ended"); 56 sourceBuffer.appendBuffer(mediaData); 57 assert_true(sourceBuffer.updating, "SourceBuffer is updating"); 58 59 assert_throws_dom("InvalidStateError", 60 function() { sourceBuffer.trackDefaults = new TrackDefaultList([]); }, 61 "Exception thrown when setting trackDefaults on SourceBuffer that is updating"); 62 63 test.waitForExpectedEvents(function() 64 { 65 assert_false(sourceBuffer.updating, "SourceBuffer is not updating"); 66 sourceBuffer.trackDefaults = new TrackDefaultList([]); 67 test.done(); 68 }); 69 }, "Test setting trackDefaults on a SourceBuffer that is updating"); 70 71 sourceBufferTrackDefaultsTest(function(test, mediaElement, mediaSource, sourceBuffer) 72 { 73 assert_throws_js(TypeError, 74 function() { sourceBuffer.trackDefaults = null; }, 75 "null should be disallowed by trackDefaults setter"); 76 test.done(); 77 }, "Test setting null SourceBuffer.trackDefaults"); 78 </script>