forked from mirrors/gecko-dev
		
	MozReview-Commit-ID: 7u0jU4PkBVg --HG-- rename : testing/web-platform/tests/domparsing/insert_adjacent_html.xhtml => testing/web-platform/tests/domparsing/insert_adjacent_html-xhtml.xhtml
		
			
				
	
	
		
			140 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
	
		
			8.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
 | 
						|
<html>
 | 
						|
    <head>
 | 
						|
        <title>SourceBuffer.mode == "sequence" test cases.</title>
 | 
						|
        <script src="/resources/testharness.js"></script>
 | 
						|
        <script src="/resources/testharnessreport.js"></script>
 | 
						|
        <script src="mediasource-util.js"></script>
 | 
						|
    </head>
 | 
						|
    <body>
 | 
						|
        <div id="log"></div>
 | 
						|
        <script>
 | 
						|
          function mediasource_sequencemode_test(testFunction, description, options)
 | 
						|
          {
 | 
						|
              return mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
 | 
						|
              {
 | 
						|
                  assert_greater_than(segmentInfo.media.length, 3, "at least 3 media segments for supported type");
 | 
						|
                  mediaElement.addEventListener("error", test.unreached_func("Unexpected event 'error'"));
 | 
						|
                  sourceBuffer.mode = "sequence";
 | 
						|
                  assert_equals(sourceBuffer.mode, "sequence", "mode after setting it to \"sequence\"");
 | 
						|
 | 
						|
                  var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
 | 
						|
                  test.expectEvent(sourceBuffer, "updatestart", "initSegment append started.");
 | 
						|
                  test.expectEvent(sourceBuffer, "update", "initSegment append success.");
 | 
						|
                  test.expectEvent(sourceBuffer, "updateend", "initSegment append ended.");
 | 
						|
                  sourceBuffer.appendBuffer(initSegment);
 | 
						|
                  test.waitForExpectedEvents(function()
 | 
						|
                  {
 | 
						|
                      assert_equals(sourceBuffer.timestampOffset, 0, "timestampOffset initially 0");
 | 
						|
                      testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData);
 | 
						|
                  });
 | 
						|
              }, description, options);
 | 
						|
          }
 | 
						|
 | 
						|
          function append_segment(test, sourceBuffer, mediaData, info, callback)
 | 
						|
          {
 | 
						|
              var mediaSegment = MediaSourceUtil.extractSegmentData(mediaData, info);
 | 
						|
              test.expectEvent(sourceBuffer, "updatestart", "media segment append started.");
 | 
						|
              test.expectEvent(sourceBuffer, "update", "media segment append success.");
 | 
						|
              test.expectEvent(sourceBuffer, "updateend", "media segment append ended.");
 | 
						|
              sourceBuffer.appendBuffer(mediaSegment);
 | 
						|
              test.waitForExpectedEvents(callback);
 | 
						|
          }
 | 
						|
 | 
						|
          function threeDecimalPlaces(number)
 | 
						|
          {
 | 
						|
              return Number(number.toFixed(3));
 | 
						|
          }
 | 
						|
 | 
						|
          // Verifies expected times to 3 decimal places before and after mediaSource.endOfStream(),
 | 
						|
          // and calls |callback| on success.
 | 
						|
          function verify_offset_and_buffered(test, mediaSource, sourceBuffer,
 | 
						|
                                              expectedTimestampOffset, expectedBufferedRangeStartTime,
 | 
						|
                                              expectedBufferedRangeMaxEndTimeBeforeEOS,
 | 
						|
                                              expectedBufferedRangeEndTimeAfterEOS,
 | 
						|
                                              callback) {
 | 
						|
              assert_equals(threeDecimalPlaces(sourceBuffer.timestampOffset),
 | 
						|
                            threeDecimalPlaces(expectedTimestampOffset),
 | 
						|
                            "expectedTimestampOffset");
 | 
						|
 | 
						|
              // Prior to EOS, the buffered range end time may not have fully reached the next media
 | 
						|
              // segment's timecode (adjusted by any timestampOffset). It should not exceed it though.
 | 
						|
              // Therefore, an exact assertBufferedEquals() will not work here.
 | 
						|
              assert_greater_than(sourceBuffer.buffered.length, 0, "sourceBuffer.buffered has at least 1 range before EOS");
 | 
						|
              assert_equals(threeDecimalPlaces(sourceBuffer.buffered.start(0)),
 | 
						|
                            threeDecimalPlaces(expectedBufferedRangeStartTime),
 | 
						|
                            "sourceBuffer.buffered range begins where expected before EOS");
 | 
						|
              assert_less_than_equal(threeDecimalPlaces(sourceBuffer.buffered.end(0)),
 | 
						|
                                     threeDecimalPlaces(expectedBufferedRangeMaxEndTimeBeforeEOS),
 | 
						|
                                     "sourceBuffer.buffered range ends at or before expected upper bound before EOS");
 | 
						|
 | 
						|
              test.expectEvent(mediaSource, "sourceended", "mediaSource endOfStream");
 | 
						|
              mediaSource.endOfStream();
 | 
						|
              test.waitForExpectedEvents(function()
 | 
						|
              {
 | 
						|
                  assertBufferedEquals(sourceBuffer,
 | 
						|
                                       "{ [" + expectedBufferedRangeStartTime.toFixed(3) + ", " + expectedBufferedRangeEndTimeAfterEOS.toFixed(3) + ") }",
 | 
						|
                                       "sourceBuffer.buffered after EOS");
 | 
						|
                  callback();
 | 
						|
              });
 | 
						|
          }
 | 
						|
 | 
						|
          mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
 | 
						|
          {
 | 
						|
              var offset = Math.min(segmentInfo.media[0].timev, segmentInfo.media[0].timea);
 | 
						|
              var expectedStart = Math.max(segmentInfo.media[0].timev, segmentInfo.media[0].timea) - offset;
 | 
						|
              var expectedEnd = Math.min(segmentInfo.media[0].endtimev, segmentInfo.media[0].endtimea) - offset;
 | 
						|
              var expectedEndEOS = Math.max(segmentInfo.media[0].endtimev, segmentInfo.media[0].endtimea) - offset;
 | 
						|
              append_segment(test, sourceBuffer, mediaData, segmentInfo.media[0], function()
 | 
						|
              {
 | 
						|
                  verify_offset_and_buffered(test, mediaSource, sourceBuffer,
 | 
						|
                                             -offset, expectedStart,
 | 
						|
                                             expectedEnd, expectedEndEOS,
 | 
						|
                                             test.done);
 | 
						|
              });
 | 
						|
          }, "Test sequence AppendMode appendBuffer(first media segment)");
 | 
						|
 | 
						|
          mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
 | 
						|
          {
 | 
						|
              var offset = Math.min(segmentInfo.media[1].timev, segmentInfo.media[1].timea);
 | 
						|
              var expectedStart = Math.max(segmentInfo.media[1].timev, segmentInfo.media[1].timea) - offset;
 | 
						|
              var expectedEnd = Math.min(segmentInfo.media[1].endtimev, segmentInfo.media[1].endtimea) - offset;
 | 
						|
              var expectedEndEOS = Math.max(segmentInfo.media[1].endtimev, segmentInfo.media[1].endtimea) - offset;
 | 
						|
              assert_greater_than(Math.min(segmentInfo.media[1].timev, segmentInfo.media[1].timea), 0,
 | 
						|
                                  "segment starts after time 0");
 | 
						|
              append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1], function()
 | 
						|
              {
 | 
						|
                  verify_offset_and_buffered(test, mediaSource, sourceBuffer,
 | 
						|
                                             -offset, expectedStart,
 | 
						|
                                             expectedEnd, expectedEndEOS,
 | 
						|
                                             test.done);
 | 
						|
              });
 | 
						|
          }, "Test sequence AppendMode appendBuffer(second media segment)");
 | 
						|
 | 
						|
          mediasource_sequencemode_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
 | 
						|
          {
 | 
						|
              assert_greater_than(Math.min(segmentInfo.media[1].timev, segmentInfo.media[1].timea), 0,
 | 
						|
                                  "segment starts after time 0");
 | 
						|
              append_segment(test, sourceBuffer, mediaData, segmentInfo.media[1], function()
 | 
						|
              {
 | 
						|
                  append_segment(test, sourceBuffer, mediaData, segmentInfo.media[0], function()
 | 
						|
                  {
 | 
						|
                      var firstOffset = Math.min(segmentInfo.media[1].timev, segmentInfo.media[1].timea);
 | 
						|
                      var secondOffset = Math.max(segmentInfo.media[1].endtimev, segmentInfo.media[1].endtimea) - firstOffset;
 | 
						|
                      var expectedStart = Math.max(segmentInfo.media[1].timev, segmentInfo.media[1].timea) - firstOffset;
 | 
						|
                      var expectedEnd = Math.min(segmentInfo.media[0].endtimev, segmentInfo.media[0].endtimea) + secondOffset;
 | 
						|
                      var expectedEndEOS = Math.max(segmentInfo.media[0].endtimev, segmentInfo.media[0].endtimea) + secondOffset;
 | 
						|
                      // Current timestampOffset should reflect offset required to put media[0]
 | 
						|
                      // immediately after media[1]'s highest frame end timestamp (as was adjusted
 | 
						|
                      // by an earlier timestampOffset).
 | 
						|
                      verify_offset_and_buffered(test, mediaSource, sourceBuffer,
 | 
						|
                                                 secondOffset, expectedStart,
 | 
						|
                                                 expectedEnd, expectedEndEOS,
 | 
						|
                                                 test.done);
 | 
						|
                  })
 | 
						|
              });
 | 
						|
          }, "Test sequence AppendMode appendBuffer(second media segment, then first media segment)");
 | 
						|
        </script>
 | 
						|
    </body>
 | 
						|
</html>
 |