mediasource-detach.html (2630B)
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 mediasource_detach_test(testFunction, description) 9 { 10 mediasource_test(function(test, mediaElement, mediaSource) 11 { 12 var segmentInfo = MediaSourceUtil.SEGMENT_INFO; 13 var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type); 14 15 assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING); 16 assert_equals(mediaSource.readyState, 'open'); 17 18 mediaSource.addEventListener('sourceclose', test.step_func(function (event) 19 { 20 assert_equals(mediaSource.sourceBuffers.length, 0, 'sourceBuffers is empty'); 21 assert_equals(mediaSource.activeSourceBuffers.length, 0, 'activeSourceBuffers is empty'); 22 assert_equals(mediaSource.readyState, 'closed', 'readyState is "closed"'); 23 assert_true(Number.isNaN(mediaSource.duration), 'duration is NaN'); 24 test.done(); 25 })); 26 27 MediaSourceUtil.loadBinaryData(test, segmentInfo.url, function(mediaData) 28 { 29 testFunction(test, mediaElement, mediaSource, sourceBuffer, mediaData); 30 }); 31 }, description); 32 } 33 34 mediasource_detach_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData) 35 { 36 mediaElement.load(); 37 }, 'Test media.load() before appending data will trigger MediaSource detaching from a media element.'); 38 39 mediasource_detach_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData) 40 { 41 test.expectEvent(sourceBuffer, 'updateend', 'updateend after appending data'); 42 test.expectEvent(mediaElement, 'loadedmetadata', 'media element loadedmetata'); 43 test.waitForExpectedEvents(() => 44 { 45 assert_greater_than(mediaElement.readyState, HTMLMediaElement.HAVE_NOTHING, 46 'media element readyState is greater than "HAVE_NOTHING"'); 47 assert_false(sourceBuffer.updating, 'updating attribute is false'); 48 assert_equals(mediaSource.readyState, 'open'); 49 mediaElement.load(); 50 }); 51 52 sourceBuffer.appendBuffer(mediaData); 53 }, 'Test media.load() after appending data will trigger MediaSource detaching from a media element.'); 54 </script>