<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[170542] trunk/LayoutTests</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/170542">170542</a></dd>
<dt>Author</dt> <dd>jer.noble@apple.com</dd>
<dt>Date</dt> <dd>2014-06-27 11:43:01 -0700 (Fri, 27 Jun 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>[MSE] Import latest Media Source tests from W3C test suite
https://bugs.webkit.org/show_bug.cgi?id=134388
Reviewed by Eric Carlson.
Import the most recent Media Source tests from the proposed W3C test suite:
<https://github.com/acolwell/web-platform-tests/tree/submission/acolwell/media-source/media-source>
No ports currently enable these tests, so update the expected results for each
test with the ideal expected result.
* http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt:
* http/tests/media/media-source/mediasource-addsourcebuffer.html:
* http/tests/media/media-source/mediasource-append-buffer-expected.txt:
* http/tests/media/media-source/mediasource-append-buffer.html:
* http/tests/media/media-source/mediasource-append-stream-expected.txt: Added.
* http/tests/media/media-source/mediasource-append-stream.html: Added.
* http/tests/media/media-source/mediasource-appendwindow-expected.txt: Added.
* http/tests/media/media-source/mediasource-appendwindow.html: Added.
* http/tests/media/media-source/mediasource-buffered-expected.txt:
* http/tests/media/media-source/mediasource-buffered.html:
* http/tests/media/media-source/mediasource-closed-expected.txt:
* http/tests/media/media-source/mediasource-closed.html:
* http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html:
* http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html:
* http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt:
* http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html:
* http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html:
* http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html:
* http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html:
* http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt:
* http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html:
* http/tests/media/media-source/mediasource-config-changes.js:
* http/tests/media/media-source/mediasource-duration-expected.txt: Added.
* http/tests/media/media-source/mediasource-duration.html: Added.
* http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt: Added.
* http/tests/media/media-source/mediasource-endofstream-invaliderror.html: Added.
* http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt: Added.
* http/tests/media/media-source/mediasource-getvideoplaybackquality.html: Added.
* http/tests/media/media-source/mediasource-is-type-supported-expected.txt:
* http/tests/media/media-source/mediasource-is-type-supported.html:
* http/tests/media/media-source/mediasource-multiple-attach-expected.txt:
* http/tests/media/media-source/mediasource-multiple-attach.html:
* http/tests/media/media-source/mediasource-play-expected.txt:
* http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt: Added.
* http/tests/media/media-source/mediasource-play-then-seek-back.html: Added.
* http/tests/media/media-source/mediasource-play.html:
* http/tests/media/media-source/mediasource-redundant-seek-expected.txt: Added.
* http/tests/media/media-source/mediasource-redundant-seek.html: Added.
* http/tests/media/media-source/mediasource-remove-expected.txt: Added.
* http/tests/media/media-source/mediasource-remove.html: Added.
* http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt: Added.
* http/tests/media/media-source/mediasource-seek-beyond-duration.html: Added.
* http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt: Added.
* http/tests/media/media-source/mediasource-seek-during-pending-seek.html: Added.
* http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt: Added.
* http/tests/media/media-source/mediasource-sourcebuffer-mode.html: Added.
* http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt:
* http/tests/media/media-source/mediasource-sourcebufferlist.html:
* http/tests/media/media-source/mediasource-util.js:
* http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json: Added.
* http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4: Added.
* http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json: Added.
* http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch.mp4: Added.
* http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr.mp4: Added.
* http/tests/media/media-source/mp4/test.mp4: Added.
* http/tests/media/media-source/seek-to-end-after-duration-change-expected.txt: Removed.
* http/tests/media/media-source/seek-to-end-after-duration-change.html: Removed.
* http/tests/media/media-source/video-media-source-abort-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-abort.html: Removed.
* http/tests/media/media-source/video-media-source-add-and-remove-buffers-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-add-and-remove-buffers.html: Removed.
* http/tests/media/media-source/video-media-source-append-in-ended-state-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-append-in-ended-state.html: Removed.
* http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state.html: Removed.
* http/tests/media/media-source/video-media-source-async-events-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-async-events.html: Removed.
* http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction.html: Removed.
* http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-duration-boundaryconditions.html: Removed.
* http/tests/media/media-source/video-media-source-duration-changed-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-duration-changed.html: Removed.
* http/tests/media/media-source/video-media-source-duration-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-duration.html: Removed.
* http/tests/media/media-source/video-media-source-errors-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-errors.html: Removed.
* http/tests/media/media-source/video-media-source-event-attributes-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-event-attributes.html: Removed.
* http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen.html: Removed.
* http/tests/media/media-source/video-media-source-is-type-supported-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-is-type-supported.html: Removed.
* http/tests/media/media-source/video-media-source-objects-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-objects.html: Removed.
* http/tests/media/media-source/video-media-source-play-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-play.html: Removed.
* http/tests/media/media-source/video-media-source-reject-append-after-reopening-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-reject-append-after-reopening.html: Removed.
* http/tests/media/media-source/video-media-source-seek-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-seek.html: Removed.
* http/tests/media/media-source/video-media-source-sourcebufferlist-crash-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-sourcebufferlist-crash.html: Removed.
* http/tests/media/media-source/video-media-source-state-changes-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-state-changes.html: Removed.
* http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state-expected.txt: Removed.
* http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state.html: Removed.
* http/tests/media/media-source/webm/segment-info.js: Added.
* http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json: Added.
* http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch.webm: Added.
* http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json: Added.
* http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch.webm: Added.
* http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr.webm: Added.
* http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json: Added.
* http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr.webm: Added.
* http/tests/media/media-source/webm/test-vp8-vorbis-webvtt.webm: Added.
* http/tests/media/media-source/webm/test.webm: Added.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceaddsourcebufferexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceaddsourcebufferhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendbufferexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendbufferhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcebufferedexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcebufferedhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceclosedexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-closed-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceclosedhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-closed.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4abitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4abitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avaudiobitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avaudiobitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avframesizeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avframesizehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avvideobitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avvideobitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vbitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vbitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframerateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframeratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframesizeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframesizehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmabitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmabitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavaudiobitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavaudiobitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavframesizeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavframesizehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavvideobitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavvideobitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvbitrateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvbitratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframerateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframeratehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframesizeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframesizehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangesjs">trunk/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceistypesupportedexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceistypesupportedhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcemultipleattachexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcemultipleattachhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceplayexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-play-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceplayhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-play.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebufferlistexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebufferlisthtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceutiljs">trunk/LayoutTests/http/tests/media/media-source/mediasource-util.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendstreamexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendstreamhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendwindowexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceappendwindowhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcedurationexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-duration-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcedurationhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-duration.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceendofstreaminvaliderrorexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceendofstreaminvaliderrorhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcegetvideoplaybackqualityexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcegetvideoplaybackqualityhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceplaythenseekbackexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceplaythenseekbackhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceredundantseekexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceredundantseekhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceremoveexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceremovehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-remove.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceseekbeyonddurationexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceseekbeyonddurationhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceseekduringpendingseekexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourceseekduringpendingseekhtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebuffermodeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebuffermodehtml">trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode.html</a></li>
<li>trunk/LayoutTests/http/tests/media/media-source/mp4/</li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testa128k44100Hz1chmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testa128k44100Hz1chmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testa192k44100Hz1chmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testa192k44100Hz1chmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav384k44100Hz1ch320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav384k44100Hz1ch320x24030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav384k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav384k44100Hz1ch640x48030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav448k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav448k44100Hz1ch640x48030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav640k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testav640k44100Hz1ch640x48030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k320x24024fps8kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k320x24024fps8kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k320x24030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv128k640x48030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv256k320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testv256k320x24030fps10kfrmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr.mp4</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcemp4testmp4">trunk/LayoutTests/http/tests/media/media-source/mp4/test.mp4</a></li>
<li>trunk/LayoutTests/http/tests/media/media-source/webm/</li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmsegmentinfojs">trunk/LayoutTests/http/tests/media/media-source/webm/segment-info.js</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtesta128k44100Hz1chmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtesta128k44100Hz1chwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtesta192k44100Hz1chmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtesta192k44100Hz1chwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav384k44100Hz1ch320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav384k44100Hz1ch320x24030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav384k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav384k44100Hz1ch640x48030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav448k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav448k44100Hz1ch640x48030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav640k44100Hz1ch640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestav640k44100Hz1ch640x48030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k320x24024fps8kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k320x24024fps8kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k320x24030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k640x48030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv128k640x48030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv256k320x24030fps10kfrmanifestjson">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestv256k320x24030fps10kfrwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestvp8vorbiswebvttwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test-vp8-vorbis-webvtt.webm</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcewebmtestwebm">trunk/LayoutTests/http/tests/media/media-source/webm/test.webm</a></li>
</ul>
<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkLayoutTestshttptestsmediamediasourceseektoendafterdurationchangeexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/seek-to-end-after-duration-change-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourceseektoendafterdurationchangehtml">trunk/LayoutTests/http/tests/media/media-source/seek-to-end-after-duration-change.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceabortexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-abort-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceaborthtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-abort.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceaddandremovebuffersexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-add-and-remove-buffers-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceaddandremovebuffershtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-add-and-remove-buffers.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceappendinendedstateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-append-in-ended-state-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceappendinendedstatehtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-append-in-ended-state.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceappendwithoffsetinendedstateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceappendwithoffsetinendedstatehtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceasynceventsexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-async-events-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceasynceventshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-async-events.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceclosedonhtmlmediaelementdestructionexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceclosedonhtmlmediaelementdestructionhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationboundaryconditionsexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationboundaryconditionshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-boundaryconditions.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationchangedexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-changed-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationchangedhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-changed.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcedurationhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-duration.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceerrorsexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-errors-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceerrorshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-errors.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceeventattributesexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-event-attributes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceeventattributeshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-event-attributes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcegarbagecollectionbeforesourceopenexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcegarbagecollectionbeforesourceopenhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceistypesupportedexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-is-type-supported-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceistypesupportedhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-is-type-supported.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceobjectsexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-objects-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceobjectshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-objects.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceplayexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-play-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceplayhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-play.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcerejectappendafterreopeningexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-reject-append-after-reopening-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcerejectappendafterreopeninghtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-reject-append-after-reopening.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceseekexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-seek-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourceseekhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-seek.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcesourcebufferlistcrashexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-sourcebufferlist-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcesourcebufferlistcrashhtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-sourcebufferlist-crash.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcestatechangesexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-state-changes-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcestatechangeshtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-state-changes.html</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcezerobyteappendinendedstateexpectedtxt">trunk/LayoutTests/http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsmediamediasourcevideomediasourcezerobyteappendinendedstatehtml">trunk/LayoutTests/http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state.html</a></li>
<li>trunk/LayoutTests/http/tests/media/resources/media-source/mp4/</li>
<li>trunk/LayoutTests/http/tests/media/resources/media-source/webm/</li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/ChangeLog        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,171 @@
</span><ins>+2014-06-27 Jer Noble <jer.noble@apple.com>
+
+ [MSE] Import latest Media Source tests from W3C test suite
+ https://bugs.webkit.org/show_bug.cgi?id=134388
+
+ Reviewed by Eric Carlson.
+
+ Import the most recent Media Source tests from the proposed W3C test suite:
+ <https://github.com/acolwell/web-platform-tests/tree/submission/acolwell/media-source/media-source>
+
+ No ports currently enable these tests, so update the expected results for each
+ test with the ideal expected result.
+
+ * http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt:
+ * http/tests/media/media-source/mediasource-addsourcebuffer.html:
+ * http/tests/media/media-source/mediasource-append-buffer-expected.txt:
+ * http/tests/media/media-source/mediasource-append-buffer.html:
+ * http/tests/media/media-source/mediasource-append-stream-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-append-stream.html: Added.
+ * http/tests/media/media-source/mediasource-appendwindow-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-appendwindow.html: Added.
+ * http/tests/media/media-source/mediasource-buffered-expected.txt:
+ * http/tests/media/media-source/mediasource-buffered.html:
+ * http/tests/media/media-source/mediasource-closed-expected.txt:
+ * http/tests/media/media-source/mediasource-closed.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt:
+ * http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html:
+ * http/tests/media/media-source/mediasource-config-changes.js:
+ * http/tests/media/media-source/mediasource-duration-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-duration.html: Added.
+ * http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-endofstream-invaliderror.html: Added.
+ * http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-getvideoplaybackquality.html: Added.
+ * http/tests/media/media-source/mediasource-is-type-supported-expected.txt:
+ * http/tests/media/media-source/mediasource-is-type-supported.html:
+ * http/tests/media/media-source/mediasource-multiple-attach-expected.txt:
+ * http/tests/media/media-source/mediasource-multiple-attach.html:
+ * http/tests/media/media-source/mediasource-play-expected.txt:
+ * http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-play-then-seek-back.html: Added.
+ * http/tests/media/media-source/mediasource-play.html:
+ * http/tests/media/media-source/mediasource-redundant-seek-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-redundant-seek.html: Added.
+ * http/tests/media/media-source/mediasource-remove-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-remove.html: Added.
+ * http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-seek-beyond-duration.html: Added.
+ * http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-seek-during-pending-seek.html: Added.
+ * http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt: Added.
+ * http/tests/media/media-source/mediasource-sourcebuffer-mode.html: Added.
+ * http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt:
+ * http/tests/media/media-source/mediasource-sourcebufferlist.html:
+ * http/tests/media/media-source/mediasource-util.js:
+ * http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4: Added.
+ * http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-a-192k-44100Hz-1ch.mp4: Added.
+ * http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-320x240-24fps-8kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-320x240-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-v-128k-640x480-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/mp4/test-v-256k-320x240-30fps-10kfr.mp4: Added.
+ * http/tests/media/media-source/mp4/test.mp4: Added.
+ * http/tests/media/media-source/seek-to-end-after-duration-change-expected.txt: Removed.
+ * http/tests/media/media-source/seek-to-end-after-duration-change.html: Removed.
+ * http/tests/media/media-source/video-media-source-abort-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-abort.html: Removed.
+ * http/tests/media/media-source/video-media-source-add-and-remove-buffers-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-add-and-remove-buffers.html: Removed.
+ * http/tests/media/media-source/video-media-source-append-in-ended-state-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-append-in-ended-state.html: Removed.
+ * http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-append-with-offset-in-ended-state.html: Removed.
+ * http/tests/media/media-source/video-media-source-async-events-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-async-events.html: Removed.
+ * http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-closed-on-htmlmediaelement-destruction.html: Removed.
+ * http/tests/media/media-source/video-media-source-duration-boundaryconditions-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-duration-boundaryconditions.html: Removed.
+ * http/tests/media/media-source/video-media-source-duration-changed-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-duration-changed.html: Removed.
+ * http/tests/media/media-source/video-media-source-duration-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-duration.html: Removed.
+ * http/tests/media/media-source/video-media-source-errors-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-errors.html: Removed.
+ * http/tests/media/media-source/video-media-source-event-attributes-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-event-attributes.html: Removed.
+ * http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-garbage-collection-before-sourceopen.html: Removed.
+ * http/tests/media/media-source/video-media-source-is-type-supported-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-is-type-supported.html: Removed.
+ * http/tests/media/media-source/video-media-source-objects-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-objects.html: Removed.
+ * http/tests/media/media-source/video-media-source-play-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-play.html: Removed.
+ * http/tests/media/media-source/video-media-source-reject-append-after-reopening-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-reject-append-after-reopening.html: Removed.
+ * http/tests/media/media-source/video-media-source-seek-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-seek.html: Removed.
+ * http/tests/media/media-source/video-media-source-sourcebufferlist-crash-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-sourcebufferlist-crash.html: Removed.
+ * http/tests/media/media-source/video-media-source-state-changes-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-state-changes.html: Removed.
+ * http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state-expected.txt: Removed.
+ * http/tests/media/media-source/video-media-source-zero-byte-append-in-ended-state.html: Removed.
+ * http/tests/media/media-source/webm/segment-info.js: Added.
+ * http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-a-128k-44100Hz-1ch.webm: Added.
+ * http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-a-192k-44100Hz-1ch.webm: Added.
+ * http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-av-384k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-av-448k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-av-640k-44100Hz-1ch-640x480-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-v-128k-320x240-24fps-8kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-v-128k-320x240-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-v-128k-640x480-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr-manifest.json: Added.
+ * http/tests/media/media-source/webm/test-v-256k-320x240-30fps-10kfr.webm: Added.
+ * http/tests/media/media-source/webm/test-vp8-vorbis-webvtt.webm: Added.
+ * http/tests/media/media-source/webm/test.webm: Added.
+
</ins><span class="cx"> 2014-06-27 Carlos Alberto Lopez Perez <clopez@igalia.com>
</span><span class="cx">
</span><span class="cx"> [GTK] Unreviewed GTK gardening.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceaddsourcebufferexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,8 +1,8 @@
</span><del>-
-PASS Test addSourceBuffer() with empty type
-PASS Test addSourceBuffer() with unsupported type
-PASS Test addSourceBuffer() with Vorbis and VP8
-PASS Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers
-FAIL Test addSourceBuffer() with AAC and H.264 assert_true: video/mp4;codecs="avc1.4D4001,mp4a.40.2" is supported expected true got false
-FAIL Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers assert_true: video/mp4;codecs="avc1.4D4001" is supported expected true got false
</del><span class="cx">
</span><ins>+PASS Test addSourceBuffer() with empty type
+PASS Test addSourceBuffer() with unsupported type
+PASS Test addSourceBuffer() with Vorbis and VP8
+PASS Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers
+PASS Test addSourceBuffer() with AAC and H.264
+PASS Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceaddsourcebufferhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-addsourcebuffer.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,8 +4,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>-
- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="lines">@@ -36,7 +34,7 @@
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
</span><span class="cx"> assert_true(sourceBuffer != null, "New SourceBuffer returned");
</span><span class="cx"> assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> test.done();
</span><span class="cx"> }, "Test addSourceBuffer() with Vorbis and VP8");
</span><span class="cx">
</span><span class="lines">@@ -51,9 +49,9 @@
</span><span class="cx"> var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
</span><span class="cx"> var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
</span><span class="cx"> assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> test.done();
</span><span class="cx"> }, "Test addSourceBuffer() with Vorbis and VP8 in separate SourceBuffers");
</span><span class="cx">
</span><span class="lines">@@ -66,7 +64,7 @@
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
</span><span class="cx"> assert_true(sourceBuffer != null, "New SourceBuffer returned");
</span><span class="cx"> assert_equals(mediaSource.sourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[0], sourceBuffer, "SourceBuffer is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBuffer is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> test.done();
</span><span class="cx"> }, "Test addSourceBuffer() with AAC and H.264");
</span><span class="cx">
</span><span class="lines">@@ -81,9 +79,9 @@
</span><span class="cx"> var sourceBufferA = mediaSource.addSourceBuffer(videoMimetype);
</span><span class="cx"> var sourceBufferB = mediaSource.addSourceBuffer(audioMimetype);
</span><span class="cx"> assert_equals(mediaSource.sourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[0], sourceBufferA, "sourceBufferA is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferA is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> assert_equals(mediaSource.sourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.sourceBuffers");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[1], sourceBufferB, "sourceBufferB is in mediaSource.activeSourceBuffers");
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "SourceBufferB is not in mediaSource.activeSourceBuffers");
</ins><span class="cx"> test.done();
</span><span class="cx"> }, "Test addSourceBuffer() with AAC and H.264 in separate SourceBuffers");
</span><span class="cx"> </script>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendbufferexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,10 +1,12 @@
</span><del>-
-PASS Test SourceBuffer.appendBuffer() event dispatching.
-PASS Test SourceBuffer.appendBuffer() call during a pending appendBuffer().
-PASS Test SourceBuffer.abort() call during a pending appendBuffer().
-PASS Test SourceBuffer.appendBuffer() triggering an 'ended' to 'open' transition.
-PASS Test MediaSource.removeSourceBuffer() call during a pending appendBuffer().
-PASS Test set SourceBuffer.timestampOffset during a pending appendBuffer().
-PASS Test appending an empty ArrayBufferView.
-PASS Test appending an empty ArrayBuffer.
</del><span class="cx">
</span><ins>+PASS Test SourceBuffer.appendBuffer() event dispatching.
+PASS Test SourceBuffer.appendBuffer() call during a pending appendBuffer().
+PASS Test SourceBuffer.abort() call during a pending appendBuffer().
+PASS Test SourceBuffer.appendBuffer() triggering an 'ended' to 'open' transition.
+PASS Test MediaSource.removeSourceBuffer() call during a pending appendBuffer().
+PASS Test set MediaSource.duration during a pending appendBuffer() for one of its SourceBuffers.
+PASS Test MediaSource.endOfStream() during a pending appendBuffer() for one of its SourceBuffers.
+PASS Test set SourceBuffer.timestampOffset during a pending appendBuffer().
+PASS Test appending an empty ArrayBufferView.
+PASS Test appending an empty ArrayBuffer.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendbufferhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-append-buffer.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,28 +4,12 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="cx"> <script>
</span><del>- mediasource_loaddata_test = function(callback, description)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- var mediaType = 'video/webm;codecs="vp8,vorbis"';
- var mediaURL = '/media/resources/media-source/webm/test.webm';
- var sourceBuffer = mediaSource.addSourceBuffer(mediaType);
- MediaSourceUtil.loadBinaryData(test, mediaURL, function(mediaData)
- {
- callback(test, mediaElement, mediaSource, sourceBuffer, mediaData);
-
- });
- }, description);
- };
-
- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
- {
</del><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="cx"> test.expectEvent(sourceBuffer, "updatestart", "Append started.");
</span><span class="lines">@@ -42,7 +26,7 @@
</span><span class="cx"> });
</span><span class="cx"> }, "Test SourceBuffer.appendBuffer() event dispatching.");
</span><span class="cx">
</span><del>- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="lines">@@ -66,7 +50,7 @@
</span><span class="cx"> });
</span><span class="cx"> }, "Test SourceBuffer.appendBuffer() call during a pending appendBuffer().");
</span><span class="cx">
</span><del>- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="lines">@@ -88,7 +72,7 @@
</span><span class="cx"> });
</span><span class="cx"> }, "Test SourceBuffer.abort() call during a pending appendBuffer().");
</span><span class="cx">
</span><del>- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="lines">@@ -129,7 +113,7 @@
</span><span class="cx"> });
</span><span class="cx"> }, "Test SourceBuffer.appendBuffer() triggering an 'ended' to 'open' transition.");
</span><span class="cx">
</span><del>- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="lines">@@ -139,8 +123,8 @@
</span><span class="cx"> sourceBuffer.appendBuffer(mediaData);
</span><span class="cx">
</span><span class="cx"> assert_true(sourceBuffer.updating, "updating attribute is true");
</span><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers.length");
</ins><span class="cx">
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");
</del><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");
</span><span class="cx"> mediaSource.removeSourceBuffer(sourceBuffer);
</span><span class="cx">
</span><span class="lines">@@ -157,7 +141,7 @@
</span><span class="cx"> });
</span><span class="cx"> }, "Test MediaSource.removeSourceBuffer() call during a pending appendBuffer().");
</span><span class="cx">
</span><del>- mediasource_loaddata_test(function(test, mediaElement, mediaSource, sourceBuffer, mediaData)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx">
</span><span class="lines">@@ -168,6 +152,52 @@
</span><span class="cx"> assert_true(sourceBuffer.updating, "updating attribute is true");
</span><span class="cx">
</span><span class="cx"> assert_throws("InvalidStateError",
</span><ins>+ function() { mediaSource.duration = 1.0; },
+ "set duration throws an exception when updating attribute is true.");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ }, "Test set MediaSource.duration during a pending appendBuffer() for one of its SourceBuffers.");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.failOnEvent(mediaElement, "error");
+ test.failOnEvent(mediaSource, "sourceended");
+
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendBuffer(mediaData);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { mediaSource.endOfStream(); },
+ "endOfStream() throws an exception when updating attribute is true.");
+
+ assert_equals(mediaSource.readyState, "open");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ assert_equals(mediaSource.readyState, "open");
+ test.done();
+ });
+ }, "Test MediaSource.endOfStream() during a pending appendBuffer() for one of its SourceBuffers.");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.failOnEvent(mediaElement, 'error');
+
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendBuffer(mediaData);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
</ins><span class="cx"> function() { sourceBuffer.timestampOffset = 10.0; },
</span><span class="cx"> "set timestampOffset throws an exception when updating attribute is true.");
</span><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendstreamexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+
+PASS Test SourceBuffer.appendStream() event dispatching.
+PASS Test SourceBuffer.appendStream() call during a pending appendStream().
+PASS Test SourceBuffer.abort() call during a pending appendStream().
+PASS Test SourceBuffer.appendStream() triggering an 'ended' to 'open' transition.
+PASS Test MediaSource.removeSourceBuffer() call during a pending appendStream().
+PASS Test setting MediaSource.duration during a pending appendStream() for one of its SourceBuffers.
+PASS Test MediaSource.endOfStream() during a pending appendStream() for one of its SourceBuffers.
+PASS Test setting SourceBuffer.timestampOffset during a pending appendStream().
+PASS Test appending a Stream with maxSize equal to 0.
+PASS Test appending a Stream with maxSize value less than the size of the XHR response.
+PASS Test appending a Stream with maxSize value greater than the size of the XHR response.
+PASS Test appending a Stream with an invalid maxSize.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendstreamhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-append-stream.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,384 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ function createMediaXHR() {
+ var mediaURL = MediaSourceUtil.SEGMENT_INFO.url;
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', mediaURL, true);
+ xhr.responseType = 'stream';
+
+ assert_equals(xhr.responseType, "stream", "Verify response type was set.");
+
+ return xhr;
+ }
+
+ function waitForLoadingState(test, xhr, callback)
+ {
+ var eventHandler = test.step_func(function(e)
+ {
+ if (e.target.readyState < e.target.LOADING)
+ return;
+ xhr.removeEventListener('readystatechange', eventHandler);
+ callback();
+ });
+ xhr.addEventListener('readystatechange', eventHandler);
+ }
+
+ function appendStream(test, sourceBuffer, callback)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+
+ xhr.send();
+
+ waitForLoadingState(test, xhr, function()
+ {
+ assert_true(xhr.response != null, "xhr.response is not null");
+
+ test.expectEvent(xhr, "load", "XHR load completed.");
+ test.expectEvent(xhr, "loadend", "XHR load ended.");
+
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ callback();
+ });
+ });
+ }
+
+ function appendStreamTest(callback, description)
+ {
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.SEGMENT_INFO.type);
+ test.failOnEvent(mediaElement, 'error');
+ callback(test, mediaElement, mediaSource, sourceBuffer);
+ }, description);
+ }
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ test.expectEvent(mediaElement, "canplaythrough", "Reached HAVE_ENOUGH_DATA.");
+ appendStream(test, sourceBuffer, function() { test.done(); });
+ }, "Test SourceBuffer.appendStream() event dispatching.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ var xhr2 = createMediaXHR();
+ xhr2.send();
+ waitForLoadingState(test, xhr2, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendStream(xhr2.response); },
+ "appendStream() throws an exception because there is a pending append.");
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ });
+ }, "Test SourceBuffer.appendStream() call during a pending appendStream().");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "abort", "Append aborted.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ sourceBuffer.abort();
+
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test SourceBuffer.abort() call during a pending appendStream().");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ appendStream(test, sourceBuffer, function()
+ {
+ test.expectEvent(mediaSource, "sourceended", "MediaSource sourceended event");
+ mediaSource.endOfStream();
+ assert_equals(mediaSource.readyState, "ended", "MediaSource readyState is 'ended'");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaSource.readyState, "ended", "MediaSource readyState is 'ended'");
+
+ var xhr2 = createMediaXHR();
+ xhr2.send();
+ waitForLoadingState(test, xhr2, function()
+ {
+ test.expectEvent(mediaSource, "sourceopen", "MediaSource sourceopen event");
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr2.response);
+
+ assert_equals(mediaSource.readyState, "open", "MediaSource readyState is 'open'");
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaSource.readyState, "open", "MediaSource readyState is 'open'");
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ });
+ });
+ }, "Test SourceBuffer.appendStream() triggering an 'ended' to 'open' transition.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "abort", "Append aborted.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers.length");
+
+ test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");
+ mediaSource.removeSourceBuffer(sourceBuffer);
+
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+
+ var xhr2 = createMediaXHR();
+ test.failOnEvent(xhr2, 'error');
+ xhr2.send();
+ waitForLoadingState(test, xhr2, function()
+ {
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendStream(xhr2.response); },
+ "appendStream() throws an exception because it isn't attached to the mediaSource anymore.");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ });
+ }, "Test MediaSource.removeSourceBuffer() call during a pending appendStream().");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { mediaSource.duration = 1.0; },
+ "set duration throws an exception when updating attribute is true.");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test setting MediaSource.duration during a pending appendStream() for one of its SourceBuffers.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, "error");
+ test.failOnEvent(mediaSource, "sourceended");
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { mediaSource.endOfStream(); },
+ "endOfStream() throws an exception when updating attribute is true.");
+
+ assert_equals(mediaSource.readyState, "open");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ assert_equals(mediaSource.readyState, "open");
+ test.done();
+ });
+ });
+ }, "Test MediaSource.endOfStream() during a pending appendStream() for one of its SourceBuffers.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.timestampOffset = 10.0; },
+ "set timestampOffset throws an exception when updating attribute is true.");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test setting SourceBuffer.timestampOffset during a pending appendStream().");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response, 0);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test appending a Stream with maxSize equal to 0.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response, 10);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test appending a Stream with maxSize value less than the size of the XHR response.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response, 10 * 1024 * 1024);
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test appending a Stream with maxSize value greater than the size of the XHR response.");
+
+ appendStreamTest(function(test, mediaElement, mediaSource, sourceBuffer)
+ {
+ var xhr = createMediaXHR();
+ test.failOnEvent(xhr, 'error');
+ xhr.send();
+ waitForLoadingState(test, xhr, function()
+ {
+ test.expectEvent(sourceBuffer, "updatestart", "Append started.");
+ test.expectEvent(sourceBuffer, "update", "Append success.");
+ test.expectEvent(sourceBuffer, "updateend", "Append ended.");
+ sourceBuffer.appendStream(xhr.response, "test");
+
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ });
+ }, "Test appending a Stream with an invalid maxSize.");
+
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendwindowexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+
+PASS Test correctly reset appendWindowStart and appendWindowEnd values
+PASS Test set wrong values to appendWindowStart and appendWindowEnd.
+PASS Test appendwindow throw error when mediasource object is not associated with a sourebuffer.
+PASS Test set appendWindowStart and appendWindowEnd when source buffer updating.
+PASS Test appendWindowStart and appendWindowEnd value after a sourceBuffer.abort().
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceappendwindowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-appendwindow.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,114 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+ assert_true(sourceBuffer != null, "New SourceBuffer returned");
+
+ sourceBuffer.appendWindowStart = 100.0;
+ sourceBuffer.appendWindowEnd = 500.0;
+ assert_equals(sourceBuffer.appendWindowStart, 100.0, "appendWindowStart is correctly set'");
+ assert_equals(sourceBuffer.appendWindowEnd, 500.0, "appendWindowEnd is correctly set'");
+
+ sourceBuffer.appendWindowStart = 200.0;
+ sourceBuffer.appendWindowEnd = 400.0;
+ assert_equals(sourceBuffer.appendWindowStart, 200.0, "appendWindowStart is correctly reset'");
+ assert_equals(sourceBuffer.appendWindowEnd, 400.0, "appendWindowEnd is correctly reset'");
+ test.done();
+ }, "Test correctly reset appendWindowStart and appendWindowEnd values");
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+ assert_true(sourceBuffer != null, "New SourceBuffer returned");
+ sourceBuffer.appendWindowEnd = 500.0;
+
+ assert_throws(new TypeError(),
+ function() { sourceBuffer.appendWindowStart = Number.NEGATIVE_INFINITY; },
+ "set appendWindowStart throws an exception for Number.NEGATIVE_INFINITY.");
+
+ assert_throws(new TypeError(),
+ function() { sourceBuffer.appendWindowStart = Number.POSITIVE_INFINITY; },
+ "set appendWindowStart throws an exception for Number.POSITIVE_INFINITY.");
+
+ assert_throws(new TypeError(),
+ function() { sourceBuffer.appendWindowStart = Number.NaN; },
+ "set appendWindowStart throws an exception for Number.NaN.");
+
+ assert_throws("InvalidAccessError",
+ function() { sourceBuffer.appendWindowStart = 600.0; },
+ "set appendWindowStart throws an exception when greater than appendWindowEnd.");
+
+ assert_throws("InvalidAccessError",
+ function() { sourceBuffer.appendWindowStart = -100.0; },
+ "set appendWindowStart throws an exception when less than 0.");
+
+ assert_throws("InvalidAccessError",
+ function() { sourceBuffer.appendWindowEnd = Number.NaN; },
+ "set appendWindowEnd throws an exception if NaN.");
+ test.done();
+ }, "Test set wrong values to appendWindowStart and appendWindowEnd.");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaSource.removeSourceBuffer(sourceBuffer);
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendWindowStart = 100.0; },
+ "set appendWindowStart throws an exception when mediasource object is not associated with a buffer.");
+
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendWindowEnd = 500.0; },
+ "set appendWindowEnd throws an exception when mediasource object is not associated with a buffer.");
+ test.done();
+
+ }, "Test appendwindow throw error when mediasource object is not associated with a sourebuffer.");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.expectEvent(sourceBuffer, "updateend", "sourceBuffer");
+ sourceBuffer.appendBuffer(mediaData);
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendWindowStart = 100.0; },
+ "set appendWindowStart throws an exception when there is a pending append.");
+
+ assert_throws("InvalidStateError",
+ function() { sourceBuffer.appendWindowEnd = 500.0; },
+ "set appendWindowEnd throws an exception when there is a pending append.");
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ }, "Test set appendWindowStart and appendWindowEnd when source buffer updating.");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.expectEvent(sourceBuffer, "updateend", "sourceBuffer");
+ sourceBuffer.appendBuffer(mediaData);
+ assert_true(sourceBuffer.updating, "updating attribute is true");
+
+ sourceBuffer.abort();
+ assert_equals(sourceBuffer.appendWindowStart, 0, "appendWindowStart is 0 after an abort'");
+ assert_equals(sourceBuffer.appendWindowEnd, Number.POSITIVE_INFINITY,
+ "appendWindowStart is POSITIVE_INFINITY after an abort");
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating attribute is false");
+ test.done();
+ });
+ }, "Test appendWindowStart and appendWindowEnd value after a sourceBuffer.abort().");
+
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcebufferedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><del>-
-PASS Demuxed content with different lengths
-PASS Muxed tracks with different lengths
-PASS Demuxed content with an empty buffered range on one SourceBuffer
-PASS Muxed content empty buffered ranges.
</del><span class="cx">
</span><ins>+PASS Demuxed content with different lengths
+PASS Muxed tracks with different lengths
+PASS Demuxed content with an empty buffered range on one SourceBuffer
+PASS Muxed content empty buffered ranges.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcebufferedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-buffered.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,15 +4,27 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="cx"> <script>
</span><ins>+ var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_TYPE);
+
+ var manifestFilenameA = subType + "/test-a-128k-44100Hz-1ch-manifest.json";
+ var manifestFilenameB = subType + "/test-v-128k-320x240-30fps-10kfr-manifest.json";
+
+ var expectationsA = {
+ webm: "{ [0.000, 2.022) }",
+ mp4: "{ [0.000, 2.043) }",
+ };
+
+ var expectationsB = {
+ webm: "{ [0.000, 2.000) }",
+ mp4: "{ [0.000, 2.000) }",
+ };
+
</ins><span class="cx"> function mediaSourceDemuxedTest(callback, description)
</span><span class="cx"> {
</span><del>- var manifestFilenameA = "webm/test-a-128k-44100Hz-1ch-manifest.json";
- var manifestFilenameB = "webm/test-v-128k-320x240-30fps-10kfr-manifest.json";
</del><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><span class="cx"> mediaElement.pause();
</span><span class="lines">@@ -25,7 +37,7 @@
</span><span class="cx"> {
</span><span class="cx"> mediaSource.addSourceBuffer(typeA);
</span><span class="cx"> mediaSource.addSourceBuffer(typeB);
</span><del>- assert_equals(mediaSource.activeSourceBuffers.length, 2);
</del><ins>+ assert_equals(mediaSource.sourceBuffers.length, 2);
</ins><span class="cx">
</span><span class="cx"> callback(test, mediaElement, mediaSource, dataA, dataB);
</span><span class="cx"> });
</span><span class="lines">@@ -35,8 +47,8 @@
</span><span class="cx">
</span><span class="cx"> function appendData(test, mediaSource, dataA, dataB, callback)
</span><span class="cx"> {
</span><del>- var sourceBufferA = mediaSource.activeSourceBuffers[0];
- var sourceBufferB = mediaSource.activeSourceBuffers[1];
</del><ins>+ var sourceBufferA = mediaSource.sourceBuffers[0];
+ var sourceBufferB = mediaSource.sourceBuffers[1];
</ins><span class="cx">
</span><span class="cx"> test.expectEvent(sourceBufferA, "update");
</span><span class="cx"> test.expectEvent(sourceBufferA, "updateend");
</span><span class="lines">@@ -52,33 +64,18 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>- function timeRangesToString(ranges)
- {
- var s = "{";
- for (var i = 0; i < ranges.length; ++i) {
- s += " [" + ranges.start(i).toFixed(3) + ", " + ranges.end(i).toFixed(3) + ")";
- }
- return s + " }";
- }
-
- function assertBufferedEquals(obj, expected, description)
- {
- var actual = timeRangesToString(obj.buffered);
- assert_equals(actual, expected, description);
- }
-
</del><span class="cx"> mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
</span><span class="cx"> appendData(test, mediaSource, dataA, dataB, function()
</span><span class="cx"> {
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.023) }", "mediaSource.activeSourceBuffers[0]");
- assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ [0.000, 2.001) }", "mediaSource.activeSourceBuffers[1]");
- assertBufferedEquals(mediaElement, "{ [0.000, 2.001) }", "mediaElement.buffered");
</del><ins>+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
+ assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
+ assertBufferedEquals(mediaElement, expectationsB[subType], "mediaElement.buffered");
</ins><span class="cx">
</span><span class="cx"> mediaSource.endOfStream();
</span><span class="cx">
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.023) }", "mediaSource.activeSourceBuffers[0]");
- assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ [0.000, 2.001) }", "mediaSource.activeSourceBuffers[1]");
- assertBufferedEquals(mediaElement, "{ [0.000, 2.023) }", "mediaElement.buffered");
</del><ins>+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
+ assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
+ assertBufferedEquals(mediaElement, expectationsA[subType], "mediaElement.buffered");
</ins><span class="cx">
</span><span class="cx"> test.done();
</span><span class="cx"> });
</span><span class="lines">@@ -90,7 +87,7 @@
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx"> test.endOnEvent(mediaElement, 'ended');
</span><span class="cx">
</span><del>- MediaSourceUtil.fetchManifestAndData(test, "webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
</del><ins>+ MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
</ins><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(type);
</span><span class="cx"> test.expectEvent(sourceBuffer, "update");
</span><span class="lines">@@ -99,30 +96,41 @@
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.004) }", "mediaSource.activeSourceBuffers[0]");
- assertBufferedEquals(mediaElement, "{ [0.000, 2.004) }", "mediaElement.buffered");
</del><ins>+ var expectationsAV = {
+ webm: ["{ [0.000, 2.003) }", "{ [0.000, 2.022) }"],
+ mp4: ["{ [0.000, 2.000) }", "{ [0.000, 2.043) }"],
+ };
</ins><span class="cx">
</span><ins>+ var expectedBeforeEndOfStream = expectationsAV[subType][0];
+ var expectedAfterEndOfStream = expectationsAV[subType][1];
+
+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedBeforeEndOfStream, "mediaSource.activeSourceBuffers[0]");
+ assertBufferedEquals(mediaElement, expectedBeforeEndOfStream, "mediaElement.buffered");
+
</ins><span class="cx"> mediaSource.endOfStream();
</span><span class="cx">
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.023) }", "mediaSource.activeSourceBuffers[0]");
- assertBufferedEquals(mediaElement, "{ [0.000, 2.023) }", "mediaElement.buffered");
</del><ins>+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, "mediaSource.activeSourceBuffers[0]");
+ assertBufferedEquals(mediaElement, expectedAfterEndOfStream, "mediaElement.buffered");
</ins><span class="cx">
</span><span class="cx"> test.done();
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx"> }, "Muxed tracks with different lengths");
</span><span class="cx">
</span><del>-
</del><span class="cx"> mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
</span><del>- appendData(test, mediaSource, dataA, dataB.subarray(0, 318), function()
</del><ins>+ var dataBSize = {
+ webm: 318,
+ mp4: 856,
+ };
+ appendData(test, mediaSource, dataA, dataB.subarray(0, dataBSize[subType]), function()
</ins><span class="cx"> {
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.023) }", "mediaSource.activeSourceBuffers[0]");
</del><ins>+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
</ins><span class="cx"> assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
</span><span class="cx"> assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
</span><span class="cx">
</span><span class="cx"> mediaSource.endOfStream();
</span><span class="cx">
</span><del>- assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ [0.000, 2.023) }", "mediaSource.activeSourceBuffers[0]");
</del><ins>+ assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
</ins><span class="cx"> assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
</span><span class="cx"> assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
</span><span class="cx">
</span><span class="lines">@@ -136,7 +144,7 @@
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx"> test.endOnEvent(mediaElement, 'ended');
</span><span class="cx">
</span><del>- MediaSourceUtil.fetchManifestAndData(test, "webm/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
</del><ins>+ MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
</ins><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(type);
</span><span class="cx"> test.expectEvent(sourceBuffer, "update");
</span><span class="lines">@@ -157,6 +165,7 @@
</span><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx"> }, "Muxed content empty buffered ranges.");
</span><ins>+
</ins><span class="cx"> </script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceclosedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-closed-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-closed-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-closed-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,7 +1,7 @@
</span><del>-
-PASS Test attribute values on a closed MediaSource object.
-PASS Test addSourceBuffer() while closed.
-PASS Test removeSourceBuffer() while closed.
-PASS Test endOfStream() while closed.
-PASS Test setting duration while closed.
</del><span class="cx">
</span><ins>+PASS Test attribute values on a closed MediaSource object.
+PASS Test addSourceBuffer() while closed.
+PASS Test removeSourceBuffer() while closed.
+PASS Test endOfStream() while closed.
+PASS Test setting duration while closed.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceclosedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-closed.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-closed.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-closed.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,7 +4,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="lines">@@ -22,16 +21,13 @@
</span><span class="cx"> {
</span><span class="cx"> var mediaSource = new MediaSource();
</span><span class="cx"> assert_throws("InvalidStateError",
</span><del>- function() { mediaSource.addSourceBuffer('video/webm;codecs="vp8"'); },
</del><ins>+ function() { mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE); },
</ins><span class="cx"> "addSourceBuffer() throws an exception when closed.");
</span><span class="cx"> }, "Test addSourceBuffer() while closed.");
</span><span class="cx">
</span><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><del>- var VORBIS_TYPE = 'video/webm;codecs="vorbis"';
- var AAC_TYPE = 'video/mp4;codecs="mp4a.40.2"';
- var mediaType = MediaSource.isTypeSupported(VORBIS_TYPE) ? VORBIS_TYPE : AAC_TYPE;
- var sourceBuffer = mediaSource.addSourceBuffer(mediaType);
</del><ins>+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
</ins><span class="cx">
</span><span class="cx"> // Setup a handler to run when the MediaSource closes.
</span><span class="cx"> mediaSource.addEventListener('sourceclose', test.step_func(function (event)
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4abitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 audio-only bitrate changes. assert_true: audio/mp4;codecs="mp4a.40.2" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 audio-only bitrate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4abitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-a-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avaudiobitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 audio bitrate changes in multiplexed content. assert_true: video/mp4;codecs="avc1.4D4001,mp4a.40.2" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 audio bitrate changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avaudiobitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-audio-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avframesizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 frame size changes in multiplexed content. assert_true: video/mp4;codecs="avc1.4D4001,mp4a.40.2" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 frame size changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avframesizehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-framesize.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avvideobitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 video bitrate changes in multiplexed content. assert_true: video/mp4;codecs="avc1.4D4001,mp4a.40.2" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 video bitrate changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4avvideobitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-av-video-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vbitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 video-only bitrate changes. assert_true: video/mp4;codecs="avc1.4D4001" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 video-only bitrate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vbitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframerateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 video-only frame rate changes. assert_true: video/mp4;codecs="avc1.4D4001" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 video-only frame rate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframeratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framerate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframesizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-FAIL Tests mp4 video-only frame size changes. assert_true: video/mp4;codecs="avc1.4D4001" is supported. expected true got false
</del><span class="cx">
</span><ins>+PASS Tests mp4 video-only frame size changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangemp4vframesizehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-mp4-v-framesize.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmabitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm audio-only bitrate changes.
</del><span class="cx">
</span><ins>+PASS Tests webm audio-only bitrate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmabitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-a-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavaudiobitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm audio bitrate changes in multiplexed content.
</del><span class="cx">
</span><ins>+PASS Tests webm audio bitrate changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavaudiobitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-audio-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavframesizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm frame size changes in multiplexed content.
</del><span class="cx">
</span><ins>+PASS Tests webm frame size changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavframesizehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-framesize.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavvideobitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm video bitrate changes in multiplexed content.
</del><span class="cx">
</span><ins>+PASS Tests webm video bitrate changes in multiplexed content.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmavvideobitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-av-video-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvbitrateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm video-only bitrate changes.
</del><span class="cx">
</span><ins>+PASS Tests webm video-only bitrate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvbitratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-bitrate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframerateexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm video-only frame rate changes.
</del><span class="cx">
</span><ins>+PASS Tests webm video-only frame rate changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframeratehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framerate.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframesizeexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Tests webm video-only frame size changes.
</del><span class="cx">
</span><ins>+PASS Tests webm video-only frame size changes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangewebmvframesizehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-change-webm-v-framesize.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -5,7 +5,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script src="mediasource-config-changes.js"></script>
</span><del>- <link rel="stylesheet" href="/w3c/resources/testharness.css">
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceconfigchangesjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-config-changes.js        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+// Extract & return the resolution string from a filename, if any.
+function resolutionFromFilename(filename)
+{
+ resolution = filename.replace(/^.*[^0-9]([0-9]+x[0-9]+)[^0-9].*$/, "$1");
+ if (resolution != filename) {
+ return resolution;
+ }
+ return "";
+}
+
</ins><span class="cx"> function appendBuffer(test, sourceBuffer, data)
</span><span class="cx"> {
</span><span class="cx"> test.expectEvent(sourceBuffer, "update");
</span><span class="lines">@@ -13,7 +23,8 @@
</span><span class="cx"> {
</span><span class="cx"> mediaElement.pause();
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><del>- test.endOnEvent(mediaElement, 'ended');
</del><ins>+ var expectResizeEvents = resolutionFromFilename(manifestFilenameA) != resolutionFromFilename(manifestFilenameB);
+ var expectedResizeEventCount = 0;
</ins><span class="cx">
</span><span class="cx"> MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA)
</span><span class="cx"> {
</span><span class="lines">@@ -24,12 +35,14 @@
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(typeA);
</span><span class="cx">
</span><span class="cx"> appendBuffer(test, sourceBuffer, dataA);
</span><ins>+ ++expectedResizeEventCount;
</ins><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><span class="cx"> // Add the second buffer starting at 0.5 second.
</span><span class="cx"> sourceBuffer.timestampOffset = 0.5;
</span><span class="cx"> appendBuffer(test, sourceBuffer, dataB);
</span><ins>+ ++expectedResizeEventCount;
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="lines">@@ -37,6 +50,7 @@
</span><span class="cx"> // Add the first buffer starting at 1 second.
</span><span class="cx"> sourceBuffer.timestampOffset = 1;
</span><span class="cx"> appendBuffer(test, sourceBuffer, dataA);
</span><ins>+ ++expectedResizeEventCount;
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="lines">@@ -44,16 +58,43 @@
</span><span class="cx"> // Add the second buffer starting at 1.5 second.
</span><span class="cx"> sourceBuffer.timestampOffset = 1.5;
</span><span class="cx"> appendBuffer(test, sourceBuffer, dataB);
</span><ins>+ ++expectedResizeEventCount;
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><ins>+ assert_false(sourceBuffer.updating, "updating");
+ assert_greater_than(mediaSource.duration, 2, "duration");
+
</ins><span class="cx"> // Truncate the presentation to a duration of 2 seconds.
</span><span class="cx"> mediaSource.duration = 2;
</span><ins>+
+ assert_true(sourceBuffer.updating, "updating");
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+                });
+
+                test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating");
+
</ins><span class="cx"> mediaSource.endOfStream();
</span><span class="cx">
</span><ins>+ assert_false(sourceBuffer.updating, "updating");
+
+ if (expectResizeEvents) {
+ for (var i = 0; i < expectedResizeEventCount; ++i) {
+ test.expectEvent(mediaElement, "resize");
+ }
+ }
+ test.expectEvent(mediaElement, "ended");
</ins><span class="cx"> mediaElement.play();
</span><span class="cx"> });
</span><ins>+
+ test.waitForExpectedEvents(function() {
+ test.done();
+ });
</ins><span class="cx"> });
</span><span class="cx"> });
</span><span class="cx"> }, description, { timeout: 10000 } );
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcedurationexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-duration-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-duration-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-duration-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+
+PASS Test seek starts on duration truncation below currentTime
+PASS Test appendBuffer completes previous seek to truncated duration
+PASS Test endOfStream completes previous seek to truncated duration
+PASS Test setting same duration multiple times does not fire duplicate durationchange
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcedurationhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-duration.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-duration.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-duration.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,216 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ function mediasource_truncated_duration_seek_test(testFunction, description, options)
+ {
+ return mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ assert_greater_than(segmentInfo.duration, 2, 'Sufficient test media duration');
+
+ var fullDuration = segmentInfo.duration;
+ var seekTo = fullDuration / 2.0;
+ var truncatedDuration = seekTo / 2.0;
+
+ mediaElement.play();
+
+ // Append all the segments
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'playing', 'Playing triggered');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration');
+ assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');
+
+ test.expectEvent(mediaElement, 'seeking', 'seeking to seekTo');
+ test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while seeking to seekTo');
+ test.expectEvent(mediaElement, 'seeked', 'seeked to seekTo');
+ mediaElement.currentTime = seekTo;
+ assert_true(mediaElement.seeking, 'mediaElement.seeking (to seekTo)');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than_equal(mediaElement.currentTime, seekTo, 'Playback time has reached seekTo');
+ assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration after seekTo');
+ assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration after seekTo');
+ assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to seekTo');
+
+ test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration');
+
+ assert_false(sourceBuffer.updating, 'sourceBuffer.updating');
+
+ mediaSource.duration = truncatedDuration;
+
+ assert_true(sourceBuffer.updating, 'sourceBuffer.updating');
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+
+ assert_true(mediaElement.seeking, 'Seeking after setting truncatedDuration');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.currentTime, truncatedDuration,
+ 'Playback time is truncatedDuration while seeking');
+ assert_true(mediaElement.seeking, 'mediaElement.seeking while seeking to truncatedDuration');
+ assert_equals(mediaElement.duration, truncatedDuration,
+ 'mediaElement truncatedDuration during seek to it');
+ assert_equals(mediaSource.duration, truncatedDuration,
+ 'mediaSource truncatedDuration during seek to it');
+
+ testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData,
+ truncatedDuration);
+ });
+ }, description, options);
+ }
+
+ mediasource_truncated_duration_seek_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer,
+ mediaData, truncatedDuration)
+ {
+ // Tests that duration truncation below current playback position
+ // starts seek to new duration.
+ test.done();
+ }, 'Test seek starts on duration truncation below currentTime');
+
+ mediasource_truncated_duration_seek_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer,
+ mediaData, truncatedDuration)
+ {
+ // The duration has been truncated at this point, and there is an
+ // outstanding seek pending.
+ test.expectEvent(sourceBuffer, 'updateend', 'updateend after appending more data');
+
+ test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while finishing seek to truncatedDuration');
+ test.expectEvent(mediaElement, 'seeked', 'seeked to truncatedDuration');
+
+ // Allow seek to complete by appending more data beginning at the
+ // truncated duration timestamp.
+ sourceBuffer.timestampOffset = truncatedDuration;
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than_equal(mediaElement.currentTime, truncatedDuration,
+ 'Playback time has reached truncatedDuration');
+ assert_approx_equals(mediaElement.duration, truncatedDuration + segmentInfo.duration, 0.05,
+ 'mediaElement duration increased by new append');
+ assert_equals(mediaSource.duration, mediaElement.duration,
+ 'mediaSource duration increased by new append');
+ assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to truncatedDuration');
+
+ test.done();
+ });
+ }, 'Test appendBuffer completes previous seek to truncated duration');
+
+ mediasource_truncated_duration_seek_test(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer,
+ mediaData, truncatedDuration)
+ {
+ // The duration has been truncated at this point, and there is an
+ // outstanding seek pending.
+ test.expectEvent(mediaSource, 'sourceended', 'endOfStream acknowledged');
+
+ test.expectEvent(mediaElement, 'timeupdate', 'timeupdate while finishing seek to truncatedDuration');
+ test.expectEvent(mediaElement, 'seeked', 'seeked to truncatedDuration');
+
+ // Call endOfStream() to complete the pending seek.
+ mediaSource.endOfStream();
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.currentTime, truncatedDuration,
+ 'Playback time has reached truncatedDuration');
+ assert_equals(mediaElement.duration, truncatedDuration,
+ 'mediaElement truncatedDuration after seek to it');
+ assert_equals(mediaSource.duration, truncatedDuration,
+ 'mediaSource truncatedDuration after seek to it');
+ assert_false(mediaElement.seeking, 'mediaElement.seeking after seeked to truncatedDuration');
+
+ test.done();
+ });
+ }, 'Test endOfStream completes previous seek to truncated duration');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ assert_greater_than(segmentInfo.duration, 2, 'Sufficient test media duration');
+
+ var fullDuration = segmentInfo.duration;
+ var newDuration = 0.5;
+
+ var expectedDurationChangeEventCount = 1;
+ var durationchangeEventCounter = 0;
+ var durationchangeEventHandler = test.step_func(function(event)
+ {
+ assert_equals(mediaElement.duration, newDuration, 'mediaElement newDuration');
+ assert_equals(mediaSource.duration, newDuration, 'mediaSource newDuration');
+ durationchangeEventCounter++;
+ });
+
+ mediaElement.play();
+
+ // Append all the segments
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'playing', 'Playing triggered');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.duration, fullDuration, 'mediaElement fullDuration');
+ assert_equals(mediaSource.duration, fullDuration, 'mediaSource fullDuration');
+ assert_less_than(mediaElement.currentTime, newDuration / 2, 'mediaElement currentTime');
+
+ // Media load also fires 'durationchange' event, so only start counting them now.
+ mediaElement.addEventListener('durationchange', durationchangeEventHandler);
+
+ assert_false(sourceBuffer.updating, "updating");
+
+ // Truncate duration. This should result in one 'durationchange' fired.
+ mediaSource.duration = newDuration;
+
+ assert_true(sourceBuffer.updating, "updating");
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating");
+
+ // Set duration again to make sure it does not trigger another 'durationchange' event.
+ mediaSource.duration = newDuration;
+
+ // Mark endOfStream so that playback can reach 'ended' at the new duration.
+ test.expectEvent(mediaSource, 'sourceended', 'endOfStream acknowledged');
+ mediaSource.endOfStream();
+
+ // endOfStream can change duration downwards slightly.
+ // Allow for one more 'durationchange' event only in this case.
+ var currentDuration = mediaSource.duration;
+ if (currentDuration != newDuration) {
+ assert_true(currentDuration > 0 && currentDuration < newDuration, 'adjusted duration');
+ newDuration = currentDuration;
+ ++expectedDurationChangeEventCount;
+ }
+
+ // Allow media to play to end while counting 'durationchange' events.
+ test.expectEvent(mediaElement, 'ended', 'Playback ended');
+ test.waitForExpectedEvents(function()
+ {
+ mediaElement.removeEventListener('durationchange', durationchangeEventHandler);
+ assert_equals(durationchangeEventCounter, expectedDurationChangeEventCount, 'durationchanges');
+ test.done();
+ });
+ });
+ }, 'Test setting same duration multiple times does not fire duplicate durationchange', {timeout: 2500});
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceendofstreaminvaliderrorexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Test MediaSource.endOfStream() with invalid non-empty error string.
+PASS Test MediaSource.endOfStream() with invalid empty error string.
+PASS Test MediaSource.endOfStream() with invalid null error parameter.
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceendofstreaminvaliderrorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-endofstream-invaliderror.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,51 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ test.failOnEvent(mediaElement, 'error');
+ assert_equals(mediaSource.readyState, 'open');
+
+ assert_throws(new TypeError(),
+ function() { mediaSource.endOfStream('garbage'); },
+ 'endOfStream(\'garbage\') throws TypeError');
+
+ assert_equals(mediaSource.readyState, 'open');
+ test.done();
+ }, 'Test MediaSource.endOfStream() with invalid non-empty error string.');
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ test.failOnEvent(mediaElement, 'error');
+ assert_equals(mediaSource.readyState, 'open');
+
+ assert_throws(new TypeError(),
+ function() { mediaSource.endOfStream(''); },
+ 'endOfStream(\'\') throws TypeError');
+
+ assert_equals(mediaSource.readyState, 'open');
+ test.done();
+ }, 'Test MediaSource.endOfStream() with invalid empty error string.');
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ test.failOnEvent(mediaElement, 'error');
+ assert_equals(mediaSource.readyState, 'open');
+
+ assert_throws(new TypeError(),
+ function() { mediaSource.endOfStream(null); },
+ 'endOfStream(null) throws TypeError');
+
+ assert_equals(mediaSource.readyState, 'open');
+ test.done();
+ }, 'Test MediaSource.endOfStream() with invalid null error parameter.');
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcegetvideoplaybackqualityexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcegetvideoplaybackqualityhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-getvideoplaybackquality.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,70 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ var previousQuality = mediaElement.getVideoPlaybackQuality();
+ var timeUpdateCount = 0;
+ mediaElement.addEventListener("timeupdate", test.step_func(function (e)
+ {
+ var videoElement = e.target;
+ var newQuality = videoElement.getVideoPlaybackQuality();
+
+ assert_not_equals(previousQuality, newQuality, "Verify new object");
+ assert_greater_than(newQuality.creationTime, previousQuality.creationTime, "creationTime");
+
+ assert_greater_than_equal(newQuality.totalVideoFrames, 0, "totalVideoFrames >= 0");
+ assert_greater_than_equal(newQuality.totalVideoFrames, previousQuality.totalVideoFrames, "totalVideoFrames");
+
+ assert_greater_than_equal(newQuality.droppedVideoFrames, 0, "droppedVideoFrames >= 0");
+ assert_greater_than_equal(newQuality.droppedVideoFrames, previousQuality.droppedVideoFrames, "droppedVideoFrames");
+
+ assert_greater_than_equal(newQuality.corruptedVideoFrames, 0, "corruptedVideoFrames >= 0");
+ assert_greater_than_equal(newQuality.corruptedVideoFrames, previousQuality.corruptedVideoFrames, "corruptedVideoFrames");
+ previousQuality = newQuality;
+ timeUpdateCount++;
+ }));
+
+ test.failOnEvent(mediaElement, 'error');
+
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating");
+ assert_greater_than(mediaSource.duration, 1, "duration");
+
+ mediaSource.duration = 1;
+
+ assert_true(sourceBuffer.updating, "updating");
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.endOfStream();
+ mediaElement.play();
+ test.expectEvent(mediaElement, 'ended', 'mediaElement');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
+ test.done();
+ });
+ }, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API", {timeout: 5000});
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceistypesupportedexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,5 +1,37 @@
</span><span class="cx">
</span><del>-PASS Test invalid types
-PASS Test valid WebM types
-FAIL Test valid MP4 types assert_true: Type "video/mp4;codecs="avc1.4d001e"" supported expected true got false
</del><ins>+PASS Test invalid MIME format "video"
+PASS Test invalid MIME format "video/"
+PASS Test invalid MIME format "video/webm"
+PASS Test invalid MIME format "video/webm;"
+PASS Test invalid MIME format "video/webm;codecs"
+PASS Test invalid MIME format "video/webm;codecs="
+PASS Test invalid MIME format "video/webm;codecs=""
+PASS Test invalid MIME format "video/webm;codecs="""
+PASS Test invalid MIME format "video/webm;codecs=",""
+PASS Test invalid mismatch between major type and codec ID "audio/webm;codecs="vp8""
+PASS Test invalid mismatch between major type and codec ID "audio/mp4;codecs="avc1.4d001e""
+PASS Test invalid mismatch between minor type and codec ID "audio/mp4;codecs="vorbis""
+PASS Test invalid mismatch between minor type and codec ID "audio/webm;codecs="mp4a.40.2""
+PASS Test invalid mismatch between minor type and codec ID "video/mp4;codecs="vp8""
+PASS Test invalid mismatch between minor type and codec ID "video/webm;codecs="mp4a.40.2""
+PASS Test invalid mismatch between minor type and codec ID "video/mp4;codecs="vorbis""
+PASS Test invalid mismatch between minor type and codec ID "video/webm;codecs="mp4a.40.2""
+PASS Test invalid codec ID "audio/mp4;codecs="mp4a""
+PASS Test invalid codec ID "audio/mp4;codecs="mp4a.40""
+PASS Test invalid codec ID "audio/mp4;codecs="mp4a.40.""
+PASS Test invalid codec ID "audio/mp4;codecs="mp4a.67.3""
+PASS Test valid WebM type "video/webm;codecs="vp8""
+PASS Test valid WebM type "video/webm;codecs="vorbis""
+PASS Test valid WebM type "video/webm;codecs="vp8,vorbis""
+PASS Test valid WebM type "video/webm;codecs="vorbis, vp8""
+PASS Test valid WebM type "audio/webm;codecs="vorbis""
+PASS Test valid MP4 type "video/mp4;codecs="avc1.4d001e""
+PASS Test valid MP4 type "video/mp4;codecs="avc1.42001e""
+PASS Test valid MP4 type "audio/mp4;codecs="mp4a.40.2""
+PASS Test valid MP4 type "audio/mp4;codecs="mp4a.40.5""
+PASS Test valid MP4 type "audio/mp4;codecs="mp4a.67""
+PASS Test valid MP4 type "video/mp4;codecs="mp4a.40.2""
+PASS Test valid MP4 type "video/mp4;codecs="avc1.4d001e,mp4a.40.2""
+PASS Test valid MP4 type "video/mp4;codecs="mp4a.40.2 , avc1.4d001e ""
+PASS Test valid MP4 type "video/mp4;codecs="avc1.4d001e,mp4a.40.5""
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceistypesupportedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-is-type-supported.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -3,81 +3,74 @@
</span><span class="cx"> <head>
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><del>- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="cx"> <script>
</span><del>- test(function ()
</del><ins>+ // Generate a distinct test for each type in types
+ function test_type_support(types, expectation, description)
</ins><span class="cx"> {
</span><del>- var invalidTypes = [
- // Invalid MIME format.
- 'video',
- 'video/',
- 'video/webm',
- 'video/webm;',
- 'video/webm;codecs',
- 'video/webm;codecs=',
- 'video/webm;codecs="',
- 'video/webm;codecs=""',
- 'video/webm;codecs=","',
</del><ins>+ for (var i = 0; i < types.length; ++i) {
+ test(function()
+ {
+ assert_equals(MediaSource.isTypeSupported(types[i]),
+ expectation, 'supported');
+ }, description + ' "' + types[i] + '"');
+ }
+ };
</ins><span class="cx">
</span><del>- // Mismatch between major type and codec ID
- 'audio/webm;codecs="vp8"',
- 'audio/mp4;codecs="avc1.4d001e"',
</del><ins>+ test_type_support([
+ 'video',
+ 'video/',
+ 'video/webm',
+ 'video/webm;',
+ 'video/webm;codecs',
+ 'video/webm;codecs=',
+ 'video/webm;codecs="',
+ 'video/webm;codecs=""',
+ 'video/webm;codecs=","',
+ ], false, 'Test invalid MIME format');
</ins><span class="cx">
</span><del>- // Mismatch between minor type and codec ID.
- 'audio/mp4;codecs="vorbis"',
- 'audio/webm;codecs="mp4a.40.2"',
- 'video/mp4;codecs="vp8"',
- 'video/webm;codecs="mp4a.40.2"',
</del><ins>+ test_type_support([
+ 'audio/webm;codecs="vp8"',
+ 'audio/mp4;codecs="avc1.4d001e"',
+ ], false, 'Test invalid mismatch between major type and codec ID');
</ins><span class="cx">
</span><del>- // Invalid codec IDs.
- 'audio/webm;codecs="mp4a"',
- 'audio/webm;codecs="mp4a.40"',
- 'audio/webm;codecs="mp4a.40."',
- 'audio/mp4;codecs="mp4a.67.3"'
- ];
</del><ins>+ test_type_support([
+ 'audio/mp4;codecs="vorbis"',
+ 'audio/webm;codecs="mp4a.40.2"',
+ 'video/mp4;codecs="vp8"',
+ 'video/webm;codecs="mp4a.40.2"',
+ 'video/mp4;codecs="vorbis"',
+ 'video/webm;codecs="mp4a.40.2"',
+ ], false, 'Test invalid mismatch between minor type and codec ID');
</ins><span class="cx">
</span><del>- for (var i = 0; i < invalidTypes.length; ++i) {
- assert_false(MediaSource.isTypeSupported(invalidTypes[i]), "Type \"" + invalidTypes[i] + "\" not supported");
- }
- }, "Test invalid types");
</del><ins>+ test_type_support([
+ 'audio/mp4;codecs="mp4a"',
+ 'audio/mp4;codecs="mp4a.40"',
+ 'audio/mp4;codecs="mp4a.40."',
+ 'audio/mp4;codecs="mp4a.67.3"'
+ ], false, 'Test invalid codec ID');
</ins><span class="cx">
</span><del>- test(function ()
- {
- var validTypes = [
- 'video/webm;codecs="vp8"',
- 'video/webm;codecs="vorbis"',
- 'video/webm;codecs="vp8,vorbis"',
- 'video/webm;codecs="vorbis, vp8"',
- 'audio/webm;codecs="vorbis"',
- ];
</del><ins>+ test_type_support([
+ 'video/webm;codecs="vp8"',
+ 'video/webm;codecs="vorbis"',
+ 'video/webm;codecs="vp8,vorbis"',
+ 'video/webm;codecs="vorbis, vp8"',
+ 'audio/webm;codecs="vorbis"',
+ ], true, 'Test valid WebM type');
</ins><span class="cx">
</span><del>- for (var i = 0; i < validTypes.length; ++i) {
- assert_true(MediaSource.isTypeSupported(validTypes[i]), "Type \"" + validTypes[i] + "\" supported");
- }
- }, "Test valid WebM types");
-
- test(function ()
- {
- var validTypes = [
- 'video/mp4;codecs="avc1.4d001e"', // H.264 Main Profile level 3.0
- 'video/mp4;codecs="avc1.42001e"', // H.264 Baseline Profile level 3.0
- 'audio/mp4;codecs="mp4a.40.2"', // MPEG4 AAC-LC
- 'audio/mp4;codecs="mp4a.40.5"', // MPEG4 HE-AAC
- 'audio/mp4;codecs="mp4a.67"', // MPEG2 AAC-LC
- 'video/mp4;codecs="mp4a.40.2"',
- 'video/mp4;codecs="avc1.4d001e,mp4a.40.2"',
- 'video/mp4;codecs="mp4a.40.2 , avc1.4d001e "',
- 'video/mp4;codecs="avc1.4d001e,mp4a.40.5"',
- 'video/mp4;codecs="avc1.4d001e,mp4a.40.5"',
- ];
-
- for (var i = 0; i < validTypes.length; ++i) {
- assert_true(MediaSource.isTypeSupported(validTypes[i]), "Type \"" + validTypes[i] + "\" supported");
- }
- }, "Test valid MP4 types");
</del><ins>+ test_type_support([
+ 'video/mp4;codecs="avc1.4d001e"', // H.264 Main Profile level 3.0
+ 'video/mp4;codecs="avc1.42001e"', // H.264 Baseline Profile level 3.0
+ 'audio/mp4;codecs="mp4a.40.2"', // MPEG4 AAC-LC
+ 'audio/mp4;codecs="mp4a.40.5"', // MPEG4 HE-AAC
+ 'audio/mp4;codecs="mp4a.67"', // MPEG2 AAC-LC
+ 'video/mp4;codecs="mp4a.40.2"',
+ 'video/mp4;codecs="avc1.4d001e,mp4a.40.2"',
+ 'video/mp4;codecs="mp4a.40.2 , avc1.4d001e "',
+ 'video/mp4;codecs="avc1.4d001e,mp4a.40.5"',
+ ], true, 'Test valid MP4 type');
</ins><span class="cx"> </script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcemultipleattachexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-
-PASS Test exactly one succeeds when two MediaElements attach to same MediaSource
-PASS Test that MediaSource can reattach if closed first
</del><span class="cx">
</span><ins>+PASS Test exactly one succeeds when two MediaElements attach to same MediaSource
+PASS Test that MediaSource can reattach if closed first
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcemultipleattachhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-multiple-attach.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,7 +4,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceplayexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-play-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-play-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-play-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,3 +1,3 @@
</span><del>-
-PASS Test normal playback case with MediaSource API
</del><span class="cx">
</span><ins>+PASS Test normal playback case with MediaSource API
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceplaythenseekbackexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Test playing then seeking back.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceplaythenseekbackhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-play-then-seek-back.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+
+ mediaElement.play();
+ // Append all the segments
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'playing', 'Playing triggered');
+ sourceBuffer.appendBuffer(mediaData);
+
+ function confirmPlayThenEnd()
+ {
+ test.waitForCurrentTimeChange(mediaElement, function ()
+ {
+ assert_greater_than(mediaElement.currentTime, 0.0, 'Playback has started after seek.');
+ test.done();
+ });
+ }
+
+ function finishSeekThenPlay()
+ {
+ assert_true(mediaElement.seeking, 'mediaElement is seeking');
+ assert_equals(mediaElement.currentTime, 0.0, 'Current time is 0.0');
+ test.expectEvent(mediaElement, 'seeked', 'mediaElement finished seek');
+
+ test.waitForExpectedEvents(confirmPlayThenEnd);
+ }
+
+ function delayedPlayHandler()
+ {
+ assert_greater_than(mediaElement.currentTime, 0.0, 'Playback has started.');
+ test.expectEvent(mediaElement, 'seeking', 'mediaElement');
+ mediaElement.currentTime = 0.0;
+
+ test.waitForExpectedEvents(finishSeekThenPlay);
+ }
+
+ test.waitForExpectedEvents(function()
+ {
+ test.waitForCurrentTimeChange(mediaElement, delayedPlayHandler);
+ });
+
+ }, 'Test playing then seeking back.');
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceplayhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-play.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-play.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-play.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,31 +4,40 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="cx"> <script>
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</ins><span class="cx"> {
</span><span class="cx"> test.failOnEvent(mediaElement, 'error');
</span><span class="cx"> test.endOnEvent(mediaElement, 'ended');
</span><span class="cx">
</span><del>- var mediaType = 'video/webm;codecs="vp8,vorbis"';
- var mediaURL = '/media/resources/media-source/webm/test.webm';
- var sourceBuffer = mediaSource.addSourceBuffer(mediaType);
</del><ins>+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
</ins><span class="cx">
</span><del>- MediaSourceUtil.loadBinaryData(test, mediaURL, function(data)
</del><ins>+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
</ins><span class="cx"> {
</span><del>- sourceBuffer.addEventListener('updateend', test.step_func(function()
- {
- mediaSource.duration = 1;
- mediaSource.endOfStream();
- mediaElement.play();
- }));
- sourceBuffer.appendBuffer(data);
</del><ins>+ assert_false(sourceBuffer.updating, "updating");
+ assert_greater_than(mediaSource.duration, 1, "duration");
+
+ mediaSource.duration = 1;
+
+ assert_true(sourceBuffer.updating, "updating");
+ test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
</ins><span class="cx"> });
</span><del>- }, "Test normal playback case with MediaSource API");
</del><ins>+
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.endOfStream();
+ mediaElement.play();
+ });
+ }, "Test normal playback case with MediaSource API", {timeout: 5000});
</ins><span class="cx"> </script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceredundantseekexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+
+PASS Test redundant fully prebuffered seek
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceredundantseekhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-redundant-seek.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,70 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaElement.play();
+
+ // Append all media data for complete playback.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
+ test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
+ test.expectEvent(mediaElement, 'playing', 'Playing media.');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ var bufferedRanges = mediaElement.buffered;
+
+ assert_greater_than_equal(mediaElement.duration, 4.0, 'Duration is >= 4.0s');
+ assert_equals(bufferedRanges.length, 1, 'Just one buffered range');
+ assert_less_than_equal(bufferedRanges.start(0), 1.0, 'Buffered range starts <= 1.0s');
+ assert_greater_than_equal(bufferedRanges.end(0), 4.0, 'Buffered range ends >= 4.0s');
+
+ test.expectEvent(mediaElement, 'seeking', 'seeking');
+ test.expectEvent(mediaElement, 'timeupdate', 'timeupdate');
+ test.expectEvent(mediaElement, 'seeked', 'seeked');
+
+ // Request seeks.
+ mediaElement.currentTime = 1.0;
+
+ // This 'ephemeral' seek should be invisible to javascript, except any latency incurred in its processing.
+ mediaElement.currentTime = 3.0;
+
+ mediaElement.currentTime = 1.0;
+
+ assert_true(mediaElement.seeking, 'Element is seeking');
+ assert_equals(mediaElement.currentTime, 1.0, 'Element time is at last seek time');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ // No more seeking or seeked events should occur.
+ test.failOnEvent(mediaElement, 'seeking');
+ test.failOnEvent(mediaElement, 'seeked');
+
+ assert_false(mediaElement.seeking, 'Element is not seeking');
+ assert_greater_than_equal(mediaElement.currentTime, 1.0, 'Element time is at or after last seek time');
+ assert_less_than(mediaElement.currentTime, 3.0, 'Element time is before the ephemeral seek time');
+
+ var timeBeforeWait = mediaElement.currentTime;
+ test.waitForCurrentTimeChange(mediaElement, function()
+ {
+ // Time should have advanced a little, but not yet reached the ephemeral seek time.
+ assert_greater_than(mediaElement.currentTime, timeBeforeWait, 'Element time has increased');
+ assert_less_than(mediaElement.currentTime, 3.0, 'Element time is still before the ephemeral seek time');
+ test.done();
+ });
+ });
+ }, 'Test redundant fully prebuffered seek');
+
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceremoveexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-remove-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-remove-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-remove-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+
+PASS Test remove with an negative start.
+PASS Test remove with a start beyond the duration.
+PASS Test remove with a start larger than the end.
+PASS Test remove after SourceBuffer removed from mediaSource.
+PASS Test remove while update pending.
+PASS Test aborting a remove operation.
+PASS Test remove transitioning readyState from 'ended' to 'open'.
+PASS Test removing all appended data.
+PASS Test removing beginning of appended data.
+PASS Test removing the middle of appended data.
+PASS Test removing the end of appended data.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceremovehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-remove.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-remove.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-remove.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,222 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ assert_throws("InvalidAccessError", function()
+ {
+ sourceBuffer.remove(-1, 2);
+ }, "remove");
+
+ test.done();
+ }, "Test remove with an negative start.");
+
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ mediaSource.duration = 10;
+
+ assert_throws("InvalidAccessError", function()
+ {
+ sourceBuffer.remove(11, 12);
+ }, "remove");
+
+ test.done();
+ }, "Test remove with a start beyond the duration.");
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ mediaSource.duration = 10;
+
+ assert_throws("InvalidAccessError", function()
+ {
+ sourceBuffer.remove(2, 1);
+ }, "remove");
+
+ test.done();
+ }, "Test remove with a start larger than the end.");
+
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ mediaSource.duration = 10;
+
+ mediaSource.removeSourceBuffer(sourceBuffer);
+
+ assert_throws("InvalidStateError", function()
+ {
+ sourceBuffer.remove(1, 2);
+ }, "remove");
+
+ test.done();
+ }, "Test remove after SourceBuffer removed from mediaSource.");
+
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ mediaSource.duration = 10;
+
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "update");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.remove(1, 2);
+
+ assert_true(sourceBuffer.updating, "updating");
+
+ assert_throws("InvalidStateError", function()
+ {
+ sourceBuffer.remove(3, 4);
+ }, "remove");
+
+ test.waitForExpectedEvents(function()
+ {
+ test.done();
+ });
+ }, "Test remove while update pending.");
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
+
+ mediaSource.duration = 10;
+
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "abort");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.remove(1, 2);
+
+ assert_true(sourceBuffer.updating, "updating");
+
+ sourceBuffer.abort();
+
+ assert_false(sourceBuffer.updating, "updating");
+
+ test.waitForExpectedEvents(function()
+ {
+ test.done();
+ });
+ }, "Test aborting a remove operation.");
+
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "update");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.endOfStream();
+
+ assert_equals(mediaSource.readyState, "ended");
+
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "update");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.remove(1, 2);
+
+ assert_true(sourceBuffer.updating, "updating");
+ assert_equals(mediaSource.readyState, "open");
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, "updating");
+ test.done();
+ });
+ }, "Test remove transitioning readyState from 'ended' to 'open'.");
+
+ function removeAppendedDataTests(callback, description)
+ {
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "update");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ var duration = segmentInfo.duration.toFixed(3);
+ var subType = MediaSourceUtil.getSubType(segmentInfo.type);
+
+ assertBufferedEquals(sourceBuffer, "{ [0.000, " + duration + ") }", "Initial buffered range.");
+ callback(test, sourceBuffer, duration, subType);
+ });
+ }, description);
+ };
+
+ function removeAndCheckBufferedRanges(test, sourceBuffer, start, end, expected)
+ {
+ test.expectEvent(sourceBuffer, "updatestart");
+ test.expectEvent(sourceBuffer, "update");
+ test.expectEvent(sourceBuffer, "updateend");
+ sourceBuffer.remove(start, end);
+
+ test.waitForExpectedEvents(function()
+ {
+ assertBufferedEquals(sourceBuffer, expected, "Buffered ranges after remove().");
+ test.done();
+ });
+ }
+
+ removeAppendedDataTests(function(test, sourceBuffer, duration, subType)
+ {
+ removeAndCheckBufferedRanges(test, sourceBuffer, 0, Number.POSITIVE_INFINITY, "{ }");
+ }, "Test removing all appended data.");
+
+ removeAppendedDataTests(function(test, sourceBuffer, duration, subType)
+ {
+ var expectations = {
+ webm: ("{ [3.187, " + duration + ") }"),
+ mp4: ("{ [3.021, " + duration + ") }"),
+ };
+
+ // Note: Range doesn't start exactly at the end of the remove range because there isn't
+ // a keyframe there. The resulting range starts at the first keyframe >= the end time.
+ removeAndCheckBufferedRanges(test, sourceBuffer, 0, 3, expectations[subType]);
+ }, "Test removing beginning of appended data.");
+
+ removeAppendedDataTests(function(test, sourceBuffer, duration, subType)
+ {
+ var expectations = {
+ webm: ("{ [0.000, 1.012) [3.187, " + duration + ") }"),
+ mp4: ("{ [0.000, 1.022) [3.021, " + duration + ") }"),
+ };
+
+ // Note: The first resulting range ends slightly after start because the removal algorithm only removes
+ // frames with a timestamp >= the start time. If a frame starts before and ends after the remove() start
+ // timestamp, then it stays in the buffer.
+ removeAndCheckBufferedRanges(test, sourceBuffer, 1, 3, expectations[subType]);
+ }, "Test removing the middle of appended data.");
+
+ removeAppendedDataTests(function(test, sourceBuffer, duration, subType)
+ {
+ var expectations = {
+ webm: "{ [0.000, 1.012) }",
+ mp4: "{ [0.000, 1.022) }",
+ };
+
+ removeAndCheckBufferedRanges(test, sourceBuffer, 1, Number.POSITIVE_INFINITY, expectations[subType]);
+ }, "Test removing the end of appended data.");
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceseekbeyonddurationexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Test seeking beyond updated media duration.
+PASS Test seeking beyond media duration.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceseekbeyonddurationhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-beyond-duration.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,94 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+
+ function seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, seekToTime)
+ {
+ assert_less_than(mediaElement.currentTime, mediaElement.duration, 'Not at the end yet.');
+ test.expectEvent(mediaElement, 'seeking', 'mediaElement seeking');
+ // Seek to specified time.
+ mediaElement.currentTime = seekToTime;
+ if (seekToTime >= mediaSource.duration) {
+ assert_equals(mediaElement.currentTime, mediaSource.duration, 'Current time equals duration.');
+ } else {
+ assert_equals(mediaElement.currentTime, seekToTime, 'Current time equals specified seek time.');
+ }
+
+ test.waitForExpectedEvents(function()
+ {
+ test.expectEvent(mediaElement, 'timeupdate', 'mediaElement time updated.');
+ test.expectEvent(mediaElement, 'seeked', 'mediaElement seeked');
+ test.expectEvent(mediaElement, 'ended', 'mediaElement ended.');
+ test.expectEvent(mediaSource, 'sourceended', 'mediaSource ended.');
+ mediaSource.endOfStream();
+ assert_true(mediaElement.seeking, 'mediaElement seeking.');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.currentTime, mediaSource.duration, 'Current time equals duration.');
+ test.done();
+ });
+ };
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaElement.play();
+ var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
+
+ // Append the initialization segment to trigger a transition to HAVE_METADATA.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
+ test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
+ sourceBuffer.appendBuffer(initSegment);
+
+ test.waitForExpectedEvents(function()
+ {
+ // Add sufficient segments to have at least 2s of play-time.
+ var playbackData = MediaSourceUtil.getMediaDataForPlaybackTime(mediaData, segmentInfo, 2.0);
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'playing', 'Playing media.');
+ sourceBuffer.appendBuffer(playbackData);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.duration, segmentInfo.duration);
+ assert_greater_than_equal(mediaElement.duration, 2.0, 'Duration is >2.0s.');
+ test.waitForCurrentTimeChange(mediaElement, function()
+ {
+ // Update duration.
+ mediaSource.duration = 1.5;
+ seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, 1.8);
+ });
+ });
+ }, 'Test seeking beyond updated media duration.');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaElement.play();
+
+ // Append all media data for complete playback.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer end update.');
+ test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
+ test.expectEvent(mediaElement, 'playing', 'Playing media.');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ test.waitForCurrentTimeChange(mediaElement, function()
+ {
+ seekToSpecifiedTimeSetEOSAndVerifyDone(test, mediaElement, mediaSource, mediaSource.duration, mediaSource.duration + 0.1);
+ });
+ });
+
+ }, 'Test seeking beyond media duration.');
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceseekduringpendingseekexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+
+PASS Test seeking to a new location before transitioning beyond HAVE_METADATA.
+PASS Test seeking to a new location during a pending seek.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceseekduringpendingseekhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-seek-during-pending-seek.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,142 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaElement.play();
+
+ var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
+ var firstSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
+ var secondSegmentInfo = segmentInfo.media[2];
+ var secondSegment = MediaSourceUtil.extractSegmentData(mediaData, secondSegmentInfo);
+
+ // Append the initialization segment to trigger a transition to HAVE_METADATA.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
+ sourceBuffer.appendBuffer(initSegment);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(mediaElement.seeking, 'mediaElement is not seeking');
+ assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA, 'Still in HAVE_METADATA');
+
+ // Seek to a new position before letting the initial seek to 0 completes.
+ test.expectEvent(mediaElement, 'seeking', 'mediaElement');
+ mediaElement.currentTime = secondSegmentInfo.timecode;
+ assert_true(mediaElement.seeking, 'mediaElement is seeking');
+
+ // Append media data for time 0.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ sourceBuffer.appendBuffer(firstSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ // Verify that the media data didn't trigger a 'seeking' event or a transition beyond HAVE_METADATA.
+ assert_true(mediaElement.seeking, 'mediaElement is still seeking');
+ assert_equals(mediaElement.readyState, mediaElement.HAVE_METADATA, 'Still in HAVE_METADATA');
+
+ // Append media data for the current position.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'seeked', 'mediaElement finished seek');
+ test.expectEvent(mediaElement, 'playing', 'mediaElement playing');
+ sourceBuffer.appendBuffer(secondSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ test.expectEvent(mediaSource, 'sourceended', 'mediaSource ended');
+ mediaSource.endOfStream();
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA, 'Greater than HAVE_CURRENT_DATA');
+ test.done();
+ });
+
+ }, 'Test seeking to a new location before transitioning beyond HAVE_METADATA.', {timeout: 10000} );
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaElement.play();
+
+ var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
+ var firstSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
+ var secondSegmentInfo = segmentInfo.media[2];
+ var secondSegment = MediaSourceUtil.extractSegmentData(mediaData, secondSegmentInfo);
+ var thirdSegmentInfo = segmentInfo.media[4];
+ var thirdSegment = MediaSourceUtil.extractSegmentData(mediaData, thirdSegmentInfo);
+
+ // Append the initialization segment to trigger a transition to HAVE_METADATA.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'loadedmetadata', 'Reached HAVE_METADATA');
+ sourceBuffer.appendBuffer(initSegment);
+
+ test.waitForExpectedEvents(function()
+ {
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'playing', 'mediaElement playing');
+ sourceBuffer.appendBuffer(firstSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA, 'Greater than HAVE_CURRENT_DATA');
+
+ // Seek to a new position.
+ test.expectEvent(mediaElement, 'seeking', 'mediaElement');
+ mediaElement.currentTime = secondSegmentInfo.timecode;
+ assert_true(mediaElement.seeking, 'mediaElement is seeking');
+
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_true(mediaElement.seeking, 'mediaElement is still seeking');
+
+ // Seek to a second position while the first seek is still pending.
+ test.expectEvent(mediaElement, 'seeking', 'mediaElement');
+ mediaElement.currentTime = thirdSegmentInfo.timecode;
+ assert_true(mediaElement.seeking, 'mediaElement is seeking');
+
+ // Append media data for the first seek position.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ sourceBuffer.appendBuffer(secondSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_true(mediaElement.seeking, 'mediaElement is still seeking');
+
+ // Append media data for the second seek position.
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
+ test.expectEvent(mediaElement, 'seeked', 'mediaElement finished seek');
+ sourceBuffer.appendBuffer(thirdSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(mediaElement.seeking, 'mediaElement is no longer seeking');
+
+ test.expectEvent(mediaSource, 'sourceended', 'mediaSource ended');
+ mediaSource.endOfStream();
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_greater_than(mediaElement.readyState, mediaElement.HAVE_CURRENT_DATA, 'Greater than HAVE_CURRENT_DATA');
+ test.done();
+ });
+ }, 'Test seeking to a new location during a pending seek.', {timeout: 10000} );
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebuffermodeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+
+PASS Test initial value of SourceBuffer.mode is "segments"
+PASS Test setting SourceBuffer.mode
+PASS Test setting a removed SourceBuffer's mode
+PASS Test setting SourceBuffer.mode while still updating
+PASS Test setting SourceBuffer.mode triggers parent MediaSource 'ended' to 'open' transition.
+PASS Test setting SourceBuffer.mode and SourceBuffer.timestampOffset while parsing media segment.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebuffermodehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode.html (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode.html         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebuffer-mode.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,139 @@
</span><ins>+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="/w3c/resources/testharness.js"></script>
+ <script src="/w3c/resources/testharnessreport.js"></script>
+ <script src="mediasource-util.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ assert_equals(sourceBuffer.mode, 'segments', 'default append mode should be \'segments\'');
+ test.done();
+ }, 'Test initial value of SourceBuffer.mode is "segments"');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ sourceBuffer.mode = 'sequence';
+ assert_equals(sourceBuffer.mode, 'sequence', 'mode after setting it to \'sequence\'');
+
+ // Setting a mode that is not in AppendMode IDL enum should be ignored and not cause exception.
+ sourceBuffer.mode = 'invalidmode';
+ sourceBuffer.mode = null;
+ sourceBuffer.mode = '';
+ sourceBuffer.mode = 'Segments';
+ assert_equals(sourceBuffer.mode, 'sequence', 'mode unchanged by attempts to set invalid modes');
+
+ sourceBuffer.mode = 'segments';
+ assert_equals(sourceBuffer.mode, 'segments', 'mode after setting it to \'segments\'');
+ test.done();
+ }, 'Test setting SourceBuffer.mode');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ mediaSource.removeSourceBuffer(sourceBuffer);
+ assert_throws('InvalidStateError',
+ function() { sourceBuffer.mode = 'segments'; },
+ 'Setting valid sourceBuffer.mode on removed SourceBuffer should throw InvalidStateError.');
+ test.done();
+ }, 'Test setting a removed SourceBuffer\'s mode');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ sourceBuffer.appendBuffer(mediaData);
+ assert_true(sourceBuffer.updating, 'updating attribute is true');
+ assert_throws('InvalidStateError',
+ function() { sourceBuffer.mode = 'segments'; },
+ 'Setting valid sourceBuffer.mode on updating SourceBuffer threw InvalidStateError.');
+ test.done();
+ }, 'Test setting SourceBuffer.mode while still updating');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ test.expectEvent(sourceBuffer, 'updateend', 'Append ended.');
+ sourceBuffer.appendBuffer(mediaData);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, 'updating attribute is false');
+
+ test.expectEvent(mediaSource, 'sourceended', 'MediaSource sourceended event');
+ mediaSource.endOfStream();
+ assert_equals(mediaSource.readyState, 'ended', 'MediaSource readyState is \'ended\'');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaSource.readyState, 'ended', 'MediaSource readyState is \'ended\'');
+
+ test.expectEvent(mediaSource, 'sourceopen', 'MediaSource sourceopen event');
+ sourceBuffer.mode = 'segments';
+
+ assert_equals(mediaSource.readyState, 'open', 'MediaSource readyState is \'open\'');
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaSource.readyState, 'open', 'MediaSource readyState is \'open\'');
+ test.done();
+ });
+ }, 'Test setting SourceBuffer.mode triggers parent MediaSource \'ended\' to \'open\' transition.');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
+ var fullMediaSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[0]);
+ var truncateAt = Math.floor(segmentInfo.media[0].size * 0.5); // Pick first 50% of segment bytes.
+ var partialMediaSegment = fullMediaSegment.subarray(0, truncateAt);
+ var mediaSegmentRemainder = fullMediaSegment.subarray(truncateAt);
+
+ // Append init segment.
+ test.expectEvent(sourceBuffer, 'updateend', 'Init segment append ended.');
+ sourceBuffer.appendBuffer(initSegment);
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, 'updating attribute is false');
+ assert_equals(sourceBuffer.mode, 'segments');
+ sourceBuffer.mode = 'segments'; // No exception should occur.
+ assert_equals(sourceBuffer.timestampOffset, 0.0);
+ sourceBuffer.timestampOffset = 10.123456789; // No exception should occur.
+ assert_equals(sourceBuffer.timestampOffset, 10.123456789); // Super-precise offsets should round-trip.
+
+ // Append first part of media segment.
+ test.expectEvent(sourceBuffer, 'updateend', 'Partial media segment append ended.');
+ sourceBuffer.appendBuffer(partialMediaSegment);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, 'updating attribute is false');
+ assert_equals(sourceBuffer.mode, 'segments');
+ assert_throws('InvalidStateError',
+ function() { sourceBuffer.mode = 'segments'; },
+ 'Setting valid sourceBuffer.mode while still parsing media segment threw InvalidStateError.');
+ assert_equals(sourceBuffer.timestampOffset, 10.123456789);
+ assert_throws('InvalidStateError',
+ function() { sourceBuffer.timestampOffset = 20.0; },
+ 'Setting valid sourceBuffer.timestampOffset while still parsing media segment threw InvalidStateError.');
+
+ // Append remainder of media segment.
+ test.expectEvent(sourceBuffer, 'updateend', 'Append ended of remainder of media segment.');
+ sourceBuffer.appendBuffer(mediaSegmentRemainder);
+ });
+
+ test.waitForExpectedEvents(function()
+ {
+ assert_false(sourceBuffer.updating, 'updating attribute is false');
+ assert_equals(sourceBuffer.mode, 'segments');
+ sourceBuffer.mode = 'segments'; // No exception should occur.
+ assert_equals(sourceBuffer.timestampOffset, 10.123456789);
+ sourceBuffer.timestampOffset = 20.0; // No exception should occur.
+ test.done();
+ });
+ }, 'Test setting SourceBuffer.mode and SourceBuffer.timestampOffset while parsing media segment.');
+ </script>
+ </body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebufferlistexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist-expected.txt        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><del>-
-PASS Test SourceBufferList event dispatching.
-PASS Test that only 1 removesourcebuffer event fires on each SourceBufferList when the MediaSource closes.
</del><span class="cx">
</span><ins>+PASS Test SourceBufferList event dispatching.
+PASS Test that only 1 removesourcebuffer event fires on each SourceBufferList when the MediaSource closes.
+
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourcesourcebufferlisthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist.html (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist.html        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-sourcebufferlist.html        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -4,8 +4,6 @@
</span><span class="cx"> <script src="/w3c/resources/testharness.js"></script>
</span><span class="cx"> <script src="/w3c/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><del>-
- <link rel='stylesheet' href='/w3c/resources/testharness.css'>
</del><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="lines">@@ -13,24 +11,20 @@
</span><span class="cx"> function verifySourceBufferLists(mediaSource, expected)
</span><span class="cx"> {
</span><span class="cx"> assert_equals(mediaSource.sourceBuffers.length, expected.length, "sourceBuffers length");
</span><del>- assert_equals(mediaSource.activeSourceBuffers.length, expected.length, "activeSourceBuffers length");
- for (var i = 0; i < expected.length; ++i) {
</del><ins>+ assert_equals(mediaSource.activeSourceBuffers.length, 0, "activeSourceBuffers length");
+ for (var i = 0; i < expected.length; ++i)
</ins><span class="cx"> assert_equals(mediaSource.sourceBuffers[i], expected[i], "Verifying mediaSource.sourceBuffers[" + i + "]");
</span><del>- assert_equals(mediaSource.activeSourceBuffers[i], expected[i], "Verifying mediaSource.activeSourceBuffers[" + i + "]");
- }
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers");
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");
</del><span class="cx"> var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
</span><span class="cx"> var sourceBufferB = null;
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers");
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");
</del><span class="cx"> sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
</span><span class="cx">
</span><span class="cx"> verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]);
</span><span class="lines">@@ -38,14 +32,12 @@
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");
</del><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");
</span><span class="cx"> mediaSource.removeSourceBuffer(sourceBufferA);
</span><span class="cx">
</span><span class="cx"> verifySourceBufferLists(mediaSource, [sourceBufferB]);
</span><span class="cx">
</span><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers");
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");
</del><span class="cx"> sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
</span><span class="cx">
</span><span class="cx"> verifySourceBufferLists(mediaSource, [sourceBufferB, sourceBufferA]);
</span><span class="lines">@@ -60,9 +52,7 @@
</span><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers");
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");
</del><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "addsourcebuffer", "sourceBuffers");
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "addsourcebuffer", "activeSourceBuffers");
</del><span class="cx"> var sourceBufferA = mediaSource.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
</span><span class="cx"> var sourceBufferB = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
</span><span class="cx">
</span><span class="lines">@@ -73,7 +63,6 @@
</span><span class="cx"> verifySourceBufferLists(mediaSource, [sourceBufferA, sourceBufferB]);
</span><span class="cx">
</span><span class="cx"> // Force the media element to close the MediaSource object.
</span><del>- test.expectEvent(mediaSource.activeSourceBuffers, "removesourcebuffer", "activeSourceBuffers");
</del><span class="cx"> test.expectEvent(mediaSource.sourceBuffers, "removesourcebuffer", "sourceBuffers");
</span><span class="cx"> test.expectEvent(mediaSource, "sourceclose", "mediaSource closing");
</span><span class="cx"> mediaElement.src = "";
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemediasourceutiljs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/media/media-source/mediasource-util.js (170541 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mediasource-util.js        2014-06-27 18:28:39 UTC (rev 170541)
+++ trunk/LayoutTests/http/tests/media/media-source/mediasource-util.js        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -1,4 +1,48 @@
</span><span class="cx"> (function(window) {
</span><ins>+ setup({ timeout: 12000 });
+
+ var SEGMENT_INFO_LIST = [
+ {
+ url: 'webm/test.webm',
+ type: 'video/webm; codecs="vp8, vorbis"',
+ duration: 6.042,
+ init: { offset: 0, size: 4357 },
+ media: [
+ { offset: 4357, size: 11830, timecode: 0 },
+ { offset: 16187, size: 12588, timecode: 0.385 },
+ { offset: 28775, size: 14588, timecode: 0.779 },
+ { offset: 43363, size: 13023, timecode: 1.174 },
+ { offset: 56386, size: 13127, timecode: 1.592 },
+ { offset: 69513, size: 14456, timecode: 1.987 },
+ { offset: 83969, size: 13458, timecode: 2.381 },
+ { offset: 97427, size: 14566, timecode: 2.776 },
+ { offset: 111993, size: 13201, timecode: 3.171 },
+ { offset: 125194, size: 14061, timecode: 3.566 },
+ { offset: 139255, size: 15353, timecode: 3.96 },
+ { offset: 154608, size: 13618, timecode: 4.378 },
+ { offset: 168226, size: 15094, timecode: 4.773 },
+ { offset: 183320, size: 13069, timecode: 5.168 },
+ { offset: 196389, size: 13788, timecode: 5.563 },
+ { offset: 210177, size: 9009, timecode: 5.957 },
+ ],
+ },
+ {
+ url: 'mp4/test.mp4',
+ type: 'video/mp4; codecs="mp4a.40.2, avc1.4D401E"',
+ duration: 6.0424,
+ init: { offset: 0, size: 1279 },
+ media: [
+ { offset: 1406, size: 23863, timecode: 0 },
+ { offset: 25270, size: 25435, timecode: 0.797 },
+ { offset: 50705, size: 24796, timecode: 1.594 },
+ { offset: 75501, size: 25167, timecode: 2.390 },
+ { offset: 100668, size: 22976, timecode: 3.187 },
+ { offset: 123644, size: 25030, timecode: 3.984},
+ { offset: 148674, size: 24929, timecode: 4.781 },
+ { offset: 173603, size: 19271, timecode: 5.578 },
+ ],
+ }
+ ];
</ins><span class="cx"> EventExpectationsManager = function(test)
</span><span class="cx"> {
</span><span class="cx"> this.test_ = test;
</span><span class="lines">@@ -13,7 +57,7 @@
</span><span class="cx"> expectations.push(eventInfo);
</span><span class="cx">
</span><span class="cx"> var t = this;
</span><del>- var waitHandler = this.test_.step_func(function() { t.handleWaitCallback_(); });
</del><ins>+ var waitHandler = this.test_.step_func(this.handleWaitCallback_.bind(this));
</ins><span class="cx"> var eventHandler = this.test_.step_func(function(event)
</span><span class="cx"> {
</span><span class="cx"> object.removeEventListener(eventName, eventHandler);
</span><span class="lines">@@ -32,7 +76,7 @@
</span><span class="cx"> EventExpectationsManager.prototype.waitForExpectedEvents = function(callback)
</span><span class="cx"> {
</span><span class="cx"> this.waitCallbacks_.push(callback);
</span><del>- setTimeout(this.handleWaitCallback_.bind(this), 0);
</del><ins>+ setTimeout(this.test_.step_func(this.handleWaitCallback_.bind(this)), 0);
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> EventExpectationsManager.prototype.expectingEvents = function()
</span><span class="lines">@@ -123,7 +167,7 @@
</span><span class="cx">
</span><span class="cx"> MediaSourceUtil.fetchManifestAndData = function(test, manifestFilename, callback)
</span><span class="cx"> {
</span><del>- var baseURL = '/media/resources/media-source/';
</del><ins>+ var baseURL = '';
</ins><span class="cx"> var manifestURL = baseURL + manifestFilename;
</span><span class="cx"> MediaSourceUtil.loadTextData(test, manifestURL, function(manifestText)
</span><span class="cx"> {
</span><span class="lines">@@ -139,6 +183,28 @@
</span><span class="cx"> });
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+ MediaSourceUtil.extractSegmentData = function(mediaData, info)
+ {
+ var start = info.offset;
+ var end = start + info.size;
+ return mediaData.subarray(start, end);
+ }
+
+ MediaSourceUtil.getMediaDataForPlaybackTime = function(mediaData, segmentInfo, playbackTimeToAdd)
+ {
+ assert_less_than_equal(playbackTimeToAdd, segmentInfo.duration);
+ var mediaInfo = segmentInfo.media;
+ var start = mediaInfo[0].offset;
+ var numBytes = 0;
+ var segmentIndex = 0;
+ while (segmentIndex < mediaInfo.length && mediaInfo[segmentIndex].timecode <= playbackTimeToAdd)
+ {
+ numBytes += mediaInfo[segmentIndex].size;
+ ++segmentIndex;
+ }
+ return mediaData.subarray(start, numBytes + start);
+ }
+
</ins><span class="cx"> function getFirstSupportedType(typeList)
</span><span class="cx"> {
</span><span class="cx"> for (var i = 0; i < typeList.length; ++i) {
</span><span class="lines">@@ -148,13 +214,46 @@
</span><span class="cx"> return "";
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+ function getSegmentInfo()
+ {
+ for (var i = 0; i < SEGMENT_INFO_LIST.length; ++i) {
+ var segmentInfo = SEGMENT_INFO_LIST[i];
+ if (MediaSource.isTypeSupported(segmentInfo.type)) {
+ return segmentInfo;
+ }
+ }
+ return null;
+ }
+
</ins><span class="cx"> var audioOnlyTypes = ['audio/webm;codecs="vorbis"', 'audio/mp4;codecs="mp4a.40.2"'];
</span><span class="cx"> var videoOnlyTypes = ['video/webm;codecs="vp8"', 'video/mp4;codecs="avc1.4D4001"'];
</span><del>- var audioVideoTypes = ['video/webm;codecs="vp8,vorbis"', 'video/mp4;codecs="mp4a.40.2"'];
</del><ins>+ var audioVideoTypes = ['video/webm;codecs="vp8,vorbis"', 'video/mp4;codecs="avc1.4D4001,mp4a.40.2"'];
</ins><span class="cx"> MediaSourceUtil.AUDIO_ONLY_TYPE = getFirstSupportedType(audioOnlyTypes);
</span><span class="cx"> MediaSourceUtil.VIDEO_ONLY_TYPE = getFirstSupportedType(videoOnlyTypes);
</span><span class="cx"> MediaSourceUtil.AUDIO_VIDEO_TYPE = getFirstSupportedType(audioVideoTypes);
</span><ins>+ MediaSourceUtil.SEGMENT_INFO = getSegmentInfo();
</ins><span class="cx">
</span><ins>+ MediaSourceUtil.getSubType = function(mimetype) {
+ var slashIndex = mimetype.indexOf("/");
+ var semicolonIndex = mimetype.indexOf(";");
+ if (slashIndex <= 0) {
+ assert_unreached("Invalid mimetype '" + mimetype + "'");
+ return;
+ }
+
+ var start = slashIndex + 1;
+ if (semicolonIndex >= 0) {
+ if (semicolonIndex <= start) {
+ assert_unreached("Invalid mimetype '" + mimetype + "'");
+ return;
+ }
+
+ return mimetype.substr(start, semicolonIndex - start)
+ }
+
+ return mimetype.substr(start);
+ };
+
</ins><span class="cx"> function addExtraTestMethods(test)
</span><span class="cx"> {
</span><span class="cx"> test.failOnEvent = function(object, eventName)
</span><span class="lines">@@ -181,11 +280,27 @@
</span><span class="cx"> test.eventExpectations_.waitForExpectedEvents(callback);
</span><span class="cx"> };
</span><span class="cx">
</span><ins>+ test.waitForCurrentTimeChange = function(mediaElement, callback)
+ {
+ var initialTime = mediaElement.currentTime;
+
+ var onTimeUpdate = test.step_func(function()
+ {
+ if (mediaElement.currentTime != initialTime) {
+ mediaElement.removeEventListener('timeupdate', onTimeUpdate);
+ callback();
+ }
+ });
+
+ mediaElement.addEventListener('timeupdate', onTimeUpdate);
+ }
+
</ins><span class="cx"> var oldTestDone = test.done.bind(test);
</span><span class="cx"> test.done = function()
</span><span class="cx"> {
</span><del>- if (test.status == test.PASS)
</del><ins>+ if (test.status == test.PASS) {
</ins><span class="cx"> assert_false(test.eventExpectations_.expectingEvents(), "No pending event expectations.");
</span><ins>+ }
</ins><span class="cx"> oldTestDone();
</span><span class="cx"> };
</span><span class="cx"> };
</span><span class="lines">@@ -224,6 +339,42 @@
</span><span class="cx"> testFunction(test, mediaTag, mediaSource);
</span><span class="cx"> });
</span><span class="cx"> }, description, options);
</span><ins>+ };
</ins><span class="cx">
</span><ins>+ window['mediasource_testafterdataloaded'] = function(testFunction, description, options)
+ {
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var segmentInfo = MediaSourceUtil.SEGMENT_INFO;
+
+ if (!segmentInfo) {
+ assert_unreached("No segment info compatible with this MediaSource implementation.");
+ return;
+ }
+
+ test.failOnEvent(mediaElement, 'error');
+
+ var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type);
+ MediaSourceUtil.loadBinaryData(test, segmentInfo.url, function(mediaData)
+ {
+ testFunction(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData);
+ });
+ }, description, options);
+ }
+
+ function timeRangesToString(ranges)
+ {
+ var s = "{";
+ for (var i = 0; i < ranges.length; ++i) {
+ s += " [" + ranges.start(i).toFixed(3) + ", " + ranges.end(i).toFixed(3) + ")";
+ }
+ return s + " }";
+ }
+
+ window['assertBufferedEquals'] = function(obj, expected, description)
+ {
+ var actual = timeRangesToString(obj.buffered);
+ assert_equals(actual, expected, description);
</ins><span class="cx"> };
</span><ins>+
</ins><span class="cx"> })(window);
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemp4testa128k44100Hz1chmanifestjsonfromrev170541trunkLayoutTestshttptestsmediaresourcesmediasourcemp4testa128k44100Hz1chmanifestjson"></a>
<div class="copfile"><h4>Copied: trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json (from rev 170541, trunk/LayoutTests/http/tests/media/resources/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json) (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch-manifest.json        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+{
+ "url": "mp4/test-a-128k-44100Hz-1ch.mp4",
+ "type": "audio/mp4;codecs=\"mp4a.40.2\""
+}
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsmediamediasourcemp4testa128k44100Hz1chmp4"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4 (0 => 170542)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4         (rev 0)
+++ trunk/LayoutTests/http/tests/media/media-source/mp4/test-a-128k-44100Hz-1ch.mp4        2014-06-27 18:43:01 UTC (rev 170542)
</span><span class="lines">@@ -0,0 +1,118 @@
</span><ins>+ ftypisom isomiso2mp41dash 7freeIsoMedia File Produced with GPAC 0.4.6-DEV-rev \x99moov lmvhd \xE8 @ (mvex trex \x9Ctrak \tkhd \xCD暪 @ 8mdia mdhd \xACD U\xC4 -hdlr soun SoundHandler \xE3minf smhd $dinf dref url