<!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>[206129] trunk/LayoutTests/imported/w3c</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/206129">206129</a></dd>
<dt>Author</dt> <dd>jer.noble@apple.com</dd>
<dt>Date</dt> <dd>2016-09-19 16:30:53 -0700 (Mon, 19 Sep 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Unreviewed gardening; update LayoutTests/media-source to the most recent version (5a011ca).
* resources/TestRepositories:
* web-platform-tests/media-source/OWNERS:
* web-platform-tests/media-source/interfaces.html:
* web-platform-tests/media-source/manifest.txt:
* web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html:
* web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html: Added.
* web-platform-tests/media-source/mediasource-avtracks.html:
* web-platform-tests/media-source/mediasource-detach.html:
* web-platform-tests/media-source/mediasource-duration-expected.txt:
* web-platform-tests/media-source/mediasource-duration.html:
* web-platform-tests/media-source/mediasource-endofstream.html:
* web-platform-tests/media-source/mediasource-errors.html:
* web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt:
* web-platform-tests/media-source/mediasource-getvideoplaybackquality.html:
* web-platform-tests/media-source/mediasource-is-type-supported.html:
* web-platform-tests/media-source/mediasource-liveseekable.html:
* web-platform-tests/media-source/mediasource-remove-expected.txt:
* web-platform-tests/media-source/mediasource-remove.html:
* web-platform-tests/media-source/mediasource-removesourcebuffer.html:
* web-platform-tests/media-source/mediasource-seekable.html:
* web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html: Added.
* web-platform-tests/media-source/mediasource-sourcebuffer-mode.html:
* web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html:
* web-platform-tests/media-source/mediasource-timestamp-offset.html:
* web-platform-tests/media-source/mediasource-trackdefault.html:
* web-platform-tests/media-source/mediasource-trackdefaultlist.html:
* web-platform-tests/media-source/mediasource-util.js:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cChangeLog">trunk/LayoutTests/imported/w3c/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsimportedw3cresourcesTestRepositories">trunk/LayoutTests/imported/w3c/resources/TestRepositories</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourceOWNERS">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/OWNERS</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourceinterfaceshtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/interfaces.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemanifesttxt">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/manifest.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceappendbufferquotaexceededhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceavtrackshtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedetachhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-detach.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedurationexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedurationhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceendofstreamhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-endofstream.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceerrorshtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-errors.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcegetvideoplaybackqualityexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcegetvideoplaybackqualityhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceistypesupportedhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-is-type-supported.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceliveseekablehtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-liveseekable.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremoveexpectedtxt">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove-expected.txt</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremovehtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremovesourcebufferhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-removesourcebuffer.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceseekablehtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-seekable.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffermodehtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffertrackdefaultshtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetimestampoffsethtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-timestamp-offset.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetrackdefaulthtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefault.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetrackdefaultlisthtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefaultlist.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceutiljs">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-util.js</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceattachstopsdelayingloadeventhtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html</a></li>
<li><a href="#trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffermodetimestampshtml">trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsimportedw3cChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/ChangeLog (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/ChangeLog        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/ChangeLog        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2016-09-19 Jer Noble <jer.noble@apple.com>
+
+ Unreviewed gardening; update LayoutTests/media-source to the most recent version (5a011ca).
+
+ * resources/TestRepositories:
+ * web-platform-tests/media-source/OWNERS:
+ * web-platform-tests/media-source/interfaces.html:
+ * web-platform-tests/media-source/manifest.txt:
+ * web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html:
+ * web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html: Added.
+ * web-platform-tests/media-source/mediasource-avtracks.html:
+ * web-platform-tests/media-source/mediasource-detach.html:
+ * web-platform-tests/media-source/mediasource-duration-expected.txt:
+ * web-platform-tests/media-source/mediasource-duration.html:
+ * web-platform-tests/media-source/mediasource-endofstream.html:
+ * web-platform-tests/media-source/mediasource-errors.html:
+ * web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt:
+ * web-platform-tests/media-source/mediasource-getvideoplaybackquality.html:
+ * web-platform-tests/media-source/mediasource-is-type-supported.html:
+ * web-platform-tests/media-source/mediasource-liveseekable.html:
+ * web-platform-tests/media-source/mediasource-remove-expected.txt:
+ * web-platform-tests/media-source/mediasource-remove.html:
+ * web-platform-tests/media-source/mediasource-removesourcebuffer.html:
+ * web-platform-tests/media-source/mediasource-seekable.html:
+ * web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html: Added.
+ * web-platform-tests/media-source/mediasource-sourcebuffer-mode.html:
+ * web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html:
+ * web-platform-tests/media-source/mediasource-timestamp-offset.html:
+ * web-platform-tests/media-source/mediasource-trackdefault.html:
+ * web-platform-tests/media-source/mediasource-trackdefaultlist.html:
+ * web-platform-tests/media-source/mediasource-util.js:
+
</ins><span class="cx"> 2016-09-19 Chris Dumez <cdumez@apple.com>
</span><span class="cx">
</span><span class="cx"> Update XHTMLParser to recognize "-//W3C//DTD MathML 2.0//EN" public identifier
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cresourcesTestRepositories"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/resources/TestRepositories (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/resources/TestRepositories        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/resources/TestRepositories        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -15,7 +15,7 @@
</span><span class="cx"> {
</span><span class="cx"> "name": "web-platform-tests",
</span><span class="cx"> "url": "https://github.com/w3c/web-platform-tests.git",
</span><del>- "revision": "6d9c836",
</del><ins>+ "revision": "5a011ca",
</ins><span class="cx"> "paths_to_skip": [
</span><span class="cx"> "conformance-checkers",
</span><span class="cx"> "docs",
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourceOWNERS"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/OWNERS (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/OWNERS        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/OWNERS        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,3 @@
</span><del>-@bit
-@acolwell
</del><span class="cx"> @shishimaru
</span><span class="cx"> @sideshowbarker
</span><span class="cx"> @wolenetz
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourceinterfaceshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/interfaces.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/interfaces.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/interfaces.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -26,93 +26,63 @@
</span><span class="cx"> <script type=text/plain>
</span><span class="cx"> [Constructor]
</span><span class="cx"> interface MediaSource : EventTarget {
</span><del>- readonly attribute SourceBufferList sourceBuffers;
- readonly attribute SourceBufferList activeSourceBuffers;
- readonly attribute ReadyState readyState;
- attribute unrestricted double duration;
- attribute EventHandler onsourceopen;
- attribute EventHandler onsourceended;
- attribute EventHandler onsourceclose;
- SourceBuffer addSourceBuffer (DOMString type);
- void removeSourceBuffer (SourceBuffer sourceBuffer);
- void endOfStream (optional EndOfStreamError error);
- void setLiveSeekableRange (double start, double end);
- void clearLiveSeekableRange ();
- static boolean isTypeSupported (DOMString type);
</del><ins>+ readonly attribute SourceBufferList sourceBuffers;
+ readonly attribute SourceBufferList activeSourceBuffers;
+ readonly attribute ReadyState readyState;
+ attribute unrestricted double duration;
+ attribute EventHandler onsourceopen;
+ attribute EventHandler onsourceended;
+ attribute EventHandler onsourceclose;
+ SourceBuffer addSourceBuffer(DOMString type);
+ void removeSourceBuffer(SourceBuffer sourceBuffer);
+ void endOfStream(optional EndOfStreamError error);
+ void setLiveSeekableRange(double start, double end);
+ void clearLiveSeekableRange();
+ static boolean isTypeSupported(DOMString type);
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> interface SourceBuffer : EventTarget {
</span><del>- attribute AppendMode mode;
- readonly attribute boolean updating;
- readonly attribute TimeRanges buffered;
- attribute double timestampOffset;
- readonly attribute AudioTrackList audioTracks;
- readonly attribute VideoTrackList videoTracks;
- readonly attribute TextTrackList textTracks;
- attribute double appendWindowStart;
- attribute unrestricted double appendWindowEnd;
- attribute EventHandler onupdatestart;
- attribute EventHandler onupdate;
- attribute EventHandler onupdateend;
- attribute EventHandler onerror;
- attribute EventHandler onabort;
- void appendBuffer (ArrayBuffer data);
- void appendBuffer (ArrayBufferView data);
- void appendStream (ReadableStream stream, [EnforceRange] optional unsigned long long maxSize);
- void abort ();
- void remove (double start, unrestricted double end);
- attribute TrackDefaultList trackDefaults;
</del><ins>+ attribute AppendMode mode;
+ readonly attribute boolean updating;
+ readonly attribute TimeRanges buffered;
+ attribute double timestampOffset;
+ readonly attribute AudioTrackList audioTracks;
+ readonly attribute VideoTrackList videoTracks;
+ readonly attribute TextTrackList textTracks;
+ attribute double appendWindowStart;
+ attribute unrestricted double appendWindowEnd;
+ attribute EventHandler onupdatestart;
+ attribute EventHandler onupdate;
+ attribute EventHandler onupdateend;
+ attribute EventHandler onerror;
+ attribute EventHandler onabort;
+ void appendBuffer(BufferSource data);
+ void abort();
+ void remove(double start, unrestricted double end);
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> interface SourceBufferList : EventTarget {
</span><del>- readonly attribute unsigned long length;
- attribute EventHandler onaddsourcebuffer;
- attribute EventHandler onremovesourcebuffer;
</del><ins>+ readonly attribute unsigned long length;
+ attribute EventHandler onaddsourcebuffer;
+ attribute EventHandler onremovesourcebuffer;
</ins><span class="cx"> getter SourceBuffer (unsigned long index);
</span><span class="cx"> };
</span><span class="cx">
</span><del>-interface VideoPlaybackQuality {
- readonly attribute DOMHighResTimeStamp creationTime;
- readonly attribute unsigned long totalVideoFrames;
- readonly attribute unsigned long droppedVideoFrames;
- readonly attribute unsigned long corruptedVideoFrames;
- readonly attribute double totalFrameDelay;
-};
-
-[ Constructor (TrackDefaultType type, DOMString language, DOMString label, sequence<DOMString> kinds, optional DOMString byteStreamTrackID = "")]
-interface TrackDefault {
- readonly attribute TrackDefaultType type;
- readonly attribute DOMString byteStreamTrackID;
- readonly attribute DOMString language;
- readonly attribute DOMString label;
- sequence<DOMString> getKinds ();
-};
-
-[ Constructor (optional sequence<TrackDefault> trackDefaults = [])]
-interface TrackDefaultList {
- readonly attribute unsigned long length;
- getter TrackDefault (unsigned long index);
-};
-
</del><span class="cx"> [Exposed=Window,DedicatedWorker,SharedWorker]
</span><span class="cx"> partial interface URL {
</span><del>- static DOMString createObjectURL (MediaSource mediaSource);
</del><ins>+ static DOMString createObjectURL(MediaSource mediaSource);
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-partial interface HTMLVideoElement {
- VideoPlaybackQuality getVideoPlaybackQuality ();
-};
-
</del><span class="cx"> partial interface AudioTrack {
</span><del>- readonly attribute SourceBuffer? sourceBuffer;
</del><ins>+ readonly attribute SourceBuffer? sourceBuffer;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> partial interface VideoTrack {
</span><del>- readonly attribute SourceBuffer? sourceBuffer;
</del><ins>+ readonly attribute SourceBuffer? sourceBuffer;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> partial interface TextTrack {
</span><del>- readonly attribute SourceBuffer? sourceBuffer;
</del><ins>+ readonly attribute SourceBuffer? sourceBuffer;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> enum EndOfStreamError {
</span><span class="lines">@@ -130,15 +100,10 @@
</span><span class="cx"> "open",
</span><span class="cx"> "ended"
</span><span class="cx"> };
</span><del>-
-enum TrackDefaultType {
- "audio",
- "video",
- "text"
-};
</del><span class="cx"> </script>
</span><span class="cx"> <script>
</span><span class="cx"> "use strict";
</span><ins>+setup({ explicit_done: true });
</ins><span class="cx"> var mediaSource;
</span><span class="cx"> var sourceBuffer;
</span><span class="cx"> var video = document.createElement("video");
</span><span class="lines">@@ -154,11 +119,10 @@
</span><span class="cx"> idlArray.add_objects({
</span><span class="cx"> MediaSource: ['mediaSource'],
</span><span class="cx"> SourceBuffer: ['sourceBuffer'],
</span><del>- SourceBufferList: ['mediaSource.sourceBuffers'],
- VideoPlaybackQuality: ['video.getVideoPlaybackQuality()'],
- TrackDefaultList: ['sourceBuffer.trackDefaults']
</del><ins>+ SourceBufferList: ['mediaSource.sourceBuffers']
</ins><span class="cx"> });
</span><span class="cx"> idlArray.test();
</span><ins>+ done();
</ins><span class="cx"> }
</span><span class="cx"> mediaSource = new MediaSource();
</span><span class="cx"> video.src = URL.createObjectURL(mediaSource);
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemanifesttxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/manifest.txt (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/manifest.txt        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/manifest.txt        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,6 +1,12 @@
</span><ins>+interfaces.html
+mediasource-activesourcebuffers.html
</ins><span class="cx"> mediasource-addsourcebuffer.html
</span><ins>+mediasource-addsourcebuffer-mode.html
</ins><span class="cx"> mediasource-append-buffer.html
</span><ins>+mediasource-appendbuffer-quota-exceeded.html
</ins><span class="cx"> mediasource-appendwindow.html
</span><ins>+mediasource-attach-stops-delaying-load-event.html
+mediasource-avtracks.html
</ins><span class="cx"> mediasource-buffered.html
</span><span class="cx"> mediasource-closed.html
</span><span class="cx"> mediasource-config-change-mp4-a-bitrate.html
</span><span class="lines">@@ -17,10 +23,12 @@
</span><span class="cx"> mediasource-config-change-webm-v-bitrate.html
</span><span class="cx"> mediasource-config-change-webm-v-framerate.html
</span><span class="cx"> mediasource-config-change-webm-v-framesize.html
</span><ins>+mediasource-detach.html
</ins><span class="cx"> mediasource-duration-boundaryconditions.html
</span><span class="cx"> mediasource-duration.html
</span><ins>+mediasource-endofstream.html
</ins><span class="cx"> mediasource-endofstream-invaliderror.html
</span><del>-mediasource-getvideoplaybackquality.html
</del><ins>+mediasource-errors.html
</ins><span class="cx"> mediasource-is-type-supported.html
</span><span class="cx"> mediasource-liveseekable.html
</span><span class="cx"> mediasource-multiple-attach.html
</span><span class="lines">@@ -30,9 +38,18 @@
</span><span class="cx"> mediasource-redundant-seek.html
</span><span class="cx"> mediasource-remove.html
</span><span class="cx"> mediasource-removesourcebuffer.html
</span><ins>+mediasource-seekable.html
</ins><span class="cx"> mediasource-seek-beyond-duration.html
</span><span class="cx"> mediasource-seek-during-pending-seek.html
</span><span class="cx"> mediasource-sequencemode-append-buffer.html
</span><span class="cx"> mediasource-sourcebufferlist.html
</span><span class="cx"> mediasource-sourcebuffer-mode.html
</span><ins>+mediasource-sourcebuffer-mode-timestamps.html
</ins><span class="cx"> mediasource-timestamp-offset.html
</span><ins>+SourceBuffer-abort.html
+SourceBuffer-abort-readyState.html
+SourceBuffer-abort-removed.html
+SourceBuffer-abort-updating.html
+URL-createObjectURL.html
+URL-createObjectURL-null.html
+URL-createObjectURL-revoke.html
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceappendbufferquotaexceededhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-appendbuffer-quota-exceeded.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,10 +1,14 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><ins>+<meta name="timeout" content="long">
</ins><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span><span class="cx"> <script src="mediasource-util.js"></script>
</span><span class="cx"> <script>
</span><ins>+ var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_TYPE);
+ var manifestFilenameAudio = subType + "/test-a-128k-44100Hz-1ch-manifest.json";
+
</ins><span class="cx"> // Fill up a given SourceBuffer by appending data repeatedly via doAppendDataFunc until
</span><span class="cx"> // an exception is thrown. The thrown exception is passed to onCaughtExceptionCallback.
</span><span class="cx"> function fillUpSourceBuffer(test, sourceBuffer, doAppendDataFunc, onCaughtExceptionCallback) {
</span><span class="lines">@@ -19,16 +23,21 @@
</span><span class="cx"> test.waitForExpectedEvents(function() { fillUpSourceBuffer(test, sourceBuffer, doAppendDataFunc, onCaughtExceptionCallback); });
</span><span class="cx"> }
</span><span class="cx">
</span><del>- mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</del><ins>+ mediasource_test(function(test, mediaElement, mediaSource)
</ins><span class="cx"> {
</span><del>- sourceBuffer.mode = 'sequence';
- fillUpSourceBuffer(test, sourceBuffer,
- function () { // doAppendDataFunc
- sourceBuffer.appendBuffer(mediaData);
- },
- function (ex) { // onCaughtExceptionCallback
- assert_equals(ex.name, 'QuotaExceededError');
- test.done();
- });
</del><ins>+ mediaElement.addEventListener("error", test.unreached_func("Unexpected event 'error'"));
+ MediaSourceUtil.fetchManifestAndData(test, manifestFilenameAudio, function(typeAudio, dataAudio)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(typeAudio);
+ sourceBuffer.mode = 'sequence';
+ fillUpSourceBuffer(test, sourceBuffer,
+ function () { // doAppendDataFunc
+ sourceBuffer.appendBuffer(dataAudio);
+ },
+ function (ex) { // onCaughtExceptionCallback
+ assert_equals(ex.name, 'QuotaExceededError');
+ test.done();
+ });
+ });
</ins><span class="cx"> }, 'Appending data repeatedly should fill up the buffer and throw a QuotaExceededError when buffer is full.');
</span><span class="cx"> </script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceattachstopsdelayingloadeventhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html (0 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html         (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-attach-stops-delaying-load-event.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+<!DOCTYPE html>
+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
+<title>Tests that MediaSource attachment stops delaying the load event.</title>
+<link rel="author" title="Matthew Wolenetz" href="mailto:wolenetz@chromium.org"/>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+async_test(function(test)
+{
+ var receivedLoadEvent = false;
+ var receivedSourceOpenEvent = false;
+
+ window.addEventListener("load", test.step_func(function() {
+ assert_false(receivedLoadEvent, "window should not receive multiple load events");
+ receivedLoadEvent = true;
+ assert_equals(document.readyState, "complete", "document should be complete");
+ if (receivedLoadEvent && receivedSourceOpenEvent) {
+ test.done();
+ }
+ }));
+
+ assert_equals(document.readyState, "loading", "document should not be complete yet");
+ var video = document.createElement("video");
+ var mediaSource = new MediaSource();
+
+ // |video| should stop delaying the load event long and complete the MediaSource attachment
+ // before either a "progress", "stalled" or "suspend" event are enqueued.
+ video.addEventListener("suspend", test.unreached_func("unexpected 'suspend' event"));
+ video.addEventListener("stalled", test.unreached_func("unexpected 'stalled' event"));
+ video.addEventListener("progress", test.unreached_func("unexpected 'progress' event"));
+
+ // No error is expected.
+ video.addEventListener("error", test.unreached_func("unexpected 'error' event"));
+
+ mediaSource.addEventListener("sourceopen", test.step_func(function() {
+ assert_false(receivedSourceOpenEvent, "only one sourceopen event should occur in this test");
+ receivedSourceOpenEvent = true;
+ assert_equals(video.networkState, video.NETWORK_LOADING);
+ assert_equals(video.readyState, video.HAVE_NOTHING);
+ if (receivedLoadEvent && receivedSourceOpenEvent) {
+ test.done();
+ }
+ }));
+
+ var mediaSourceURL = URL.createObjectURL(mediaSource);
+ video.src = mediaSourceURL;
+ test.add_cleanup(function() { URL.revokeObjectURL(mediaSourceURL); });
+}, "MediaSource attachment should immediately stop delaying the load event");
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceavtrackshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-avtracks.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedetachhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-detach.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-detach.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-detach.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedurationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration-expected.txt (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration-expected.txt        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration-expected.txt        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -4,4 +4,8 @@
</span><span class="cx"> PASS Test endOfStream completes previous seek to truncated duration
</span><span class="cx"> PASS Test setting same duration multiple times does not fire duplicate durationchange
</span><span class="cx"> PASS Test setting the duration to less than the highest starting presentation timestamp will throw
</span><ins>+PASS Truncating the duration throws an InvalidStateError exception when new duration is less than the highest buffered range start time of one of the track buffers
+PASS Truncating the duration throws an InvalidStateError exception when new duration is less than a buffered coded frame presentation time
+PASS Increasing the duration does not trigger any SourceBuffer update
+PASS Increasing the duration during media playback does not trigger any SourceBuffer update
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcedurationhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-duration.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -10,6 +10,11 @@
</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 manifestFilenameAudio = subType + "/test-a-128k-44100Hz-1ch-manifest.json";
+ var manifestFilenameVideo = subType + "/test-v-128k-320x240-30fps-10kfr-manifest.json";
+
</ins><span class="cx"> function mediasource_truncated_duration_seek_test(testFunction, description, options)
</span><span class="cx"> {
</span><span class="cx"> return mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</span><span class="lines">@@ -53,15 +58,31 @@
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><del>- // remove will not remove partial frames. The truncated duration is as such the highest end time.
- truncatedDuration = sourceBuffer.buffered.end(sourceBuffer.buffered.length-1);
</del><span class="cx"> assert_greater_than_equal(mediaElement.currentTime, seekTo, 'Playback time has reached seekTo');
</span><del>- test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration');
-
</del><span class="cx"> assert_false(sourceBuffer.updating, 'sourceBuffer.updating');
</span><span class="cx">
</span><ins>+ // Remove will not remove partial frames, so the resulting duration is the highest end time
+ // of the track buffer ranges, and is greater than or equal to the highest coded frame
+ // presentation time across all track buffer ranges. We first obtain the intersected track buffer
+ // ranges end time and set the duration to that value.
+ truncatedDuration = sourceBuffer.buffered.end(sourceBuffer.buffered.length-1);
+ assert_less_than(truncatedDuration, seekTo,
+ 'remove has removed the current playback position from at least one track buffer');
+
</ins><span class="cx"> mediaSource.duration = truncatedDuration;
</span><ins>+ test.expectEvent(mediaElement, 'seeking', 'Seeking to truncated duration');
</ins><span class="cx">
</span><ins>+ // The actual duration may be slightly higher than truncatedDuration because the
+ // duration is adjusted upwards if necessary to be the highest end time across all track buffer
+ // ranges. Allow that increase here.
+ assert_less_than_equal(truncatedDuration, mediaSource.duration,
+ 'Duration should not be less than what was set');
+ // Here, we assume no test media coded frame duration is longer than 100ms.
+ assert_less_than(mediaSource.duration - truncatedDuration, 0.1);
+
+ // Update our truncatedDuration to be the actual new duration.
+ truncatedDuration = mediaSource.duration;
+
</ins><span class="cx"> assert_true(mediaElement.seeking, 'Seeking after setting truncatedDuration');
</span><span class="cx"> });
</span><span class="cx">
</span><span class="lines">@@ -253,6 +274,110 @@
</span><span class="cx"> });
</span><span class="cx"> }, 'Test setting the duration to less than the highest starting presentation timestamp will throw');
</span><span class="cx">
</span><ins>+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ mediaElement.addEventListener("error", test.unreached_func("Unexpected event 'error'"));
+ MediaSourceUtil.fetchManifestAndData(test, manifestFilenameAudio, function(typeAudio, dataAudio)
+ {
+ MediaSourceUtil.fetchManifestAndData(test, manifestFilenameVideo, function(typeVideo, dataVideo)
+ {
+ var sourceBufferAudio = mediaSource.addSourceBuffer(typeAudio);
+ var sourceBufferVideo = mediaSource.addSourceBuffer(typeVideo);
+ var newDuration = 1.2;
+
+ sourceBufferAudio.appendWindowEnd = 2.0;
+ sourceBufferAudio.appendWindowStart = newDuration / 2.0;
+ sourceBufferAudio.appendBuffer(dataAudio);
+
+ sourceBufferVideo.appendWindowEnd = 2.0;
+ sourceBufferVideo.appendWindowStart = newDuration * 1.3;
+ sourceBufferVideo.appendBuffer(dataVideo);
+
+ test.expectEvent(sourceBufferAudio, "updateend");
+ test.expectEvent(sourceBufferVideo, "updateend");
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(sourceBufferAudio.buffered.length, 1);
+ assert_equals(sourceBufferVideo.buffered.length, 1);
+ assert_less_than(sourceBufferAudio.buffered.start(0), newDuration);
+ assert_greater_than(sourceBufferVideo.buffered.start(0), newDuration);
+ assert_throws("InvalidStateError", function () { mediaSource.duration = newDuration; });
+ test.done();
+ });
+ });
+ });
+ }, "Truncating the duration throws an InvalidStateError exception when new duration is less than the highest buffered range start time of one of the track buffers");
+
+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ mediaElement.addEventListener("error", test.unreached_func("Unexpected event 'error'"));
+ MediaSourceUtil.fetchManifestAndData(test, manifestFilenameAudio, function(typeAudio, dataAudio)
+ {
+ MediaSourceUtil.fetchManifestAndData(test, manifestFilenameVideo, function(typeVideo, dataVideo)
+ {
+ var sourceBufferAudio = mediaSource.addSourceBuffer(typeAudio);
+ var sourceBufferVideo = mediaSource.addSourceBuffer(typeVideo);
+
+ // Buffer audio [0.8,1.8)
+ sourceBufferAudio.timestampOffset = 0.8;
+ sourceBufferAudio.appendWindowEnd = 1.8;
+ sourceBufferAudio.appendBuffer(dataAudio);
+
+ // Buffer video [1.5,3)
+ sourceBufferVideo.timestampOffset = 1.5;
+ sourceBufferVideo.appendWindowEnd = 3;
+ sourceBufferVideo.appendBuffer(dataVideo);
+
+ test.expectEvent(sourceBufferAudio, "updateend");
+ test.expectEvent(sourceBufferVideo, "updateend");
+ test.waitForExpectedEvents(function()
+ {
+ var newDuration = 2.0;
+
+ // Verify the test setup
+ assert_equals(sourceBufferAudio.buffered.length, 1);
+ assert_equals(sourceBufferVideo.buffered.length, 1);
+ assert_greater_than(sourceBufferAudio.buffered.end(0), 1.5);
+ assert_less_than(sourceBufferAudio.buffered.end(0), newDuration);
+ assert_less_than(sourceBufferVideo.buffered.start(0), newDuration);
+ assert_greater_than(sourceBufferVideo.buffered.end(0), newDuration + 0.5);
+
+ // Verify the expected error
+ // We assume relocated test video has at least one coded
+ // frame presentation interval which fits in [>2.0,>2.5)
+ assert_throws("InvalidStateError", function () { mediaSource.duration = newDuration; });
+ test.done();
+ });
+ });
+ });
+ }, "Truncating the duration throws an InvalidStateError exception when new duration is less than a buffered coded frame presentation time");
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ assert_less_than(segmentInfo.duration, 60, 'Sufficient test media duration');
+ sourceBuffer.appendBuffer(mediaData);
+ test.expectEvent(sourceBuffer, 'updateend', 'Media data appended to the SourceBuffer');
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.duration = 60;
+ assert_false(sourceBuffer.updating, 'No SourceBuffer update when duration is increased');
+ test.done();
+ });
+ }, 'Increasing the duration does not trigger any SourceBuffer update');
+
+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ assert_greater_than(segmentInfo.duration, 2, 'Sufficient test media duration');
+ mediaElement.play();
+ sourceBuffer.appendBuffer(mediaData);
+ test.expectEvent(sourceBuffer, 'updateend', 'Media data appended to the SourceBuffer');
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.duration = 60;
+ assert_false(sourceBuffer.updating, 'No SourceBuffer update when duration is increased');
+ test.done();
+ });
+ }, 'Increasing the duration during media playback does not trigger any SourceBuffer update');
</ins><span class="cx"> </script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceendofstreamhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-endofstream.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-endofstream.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-endofstream.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -23,37 +23,23 @@
</span><span class="cx"> mediaSource.endOfStream();
</span><span class="cx"> test.expectEvent(mediaElement, 'canplaythrough',
</span><span class="cx"> 'Media element may render the media content until the end');
</span><del>- test.waitForExpectedEvents(function()
- {
- assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA,
- 'Media element has enough data to render the content');
- test.done();
- });
</del><span class="cx"> });
</span><del>- }, 'MediaSource.endOfStream(): media element notified that it now has all of the media data');
</del><span class="cx">
</span><del>- mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
- {
- sourceBuffer.appendBuffer(mediaData);
- test.expectEvent(sourceBuffer, 'updateend',
- 'Media buffer appended to SourceBuffer');
</del><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><del>- assert_equals(sourceBuffer.buffered.length, 1,
- 'Media data properly buffered');
- var highestEndTime = sourceBuffer.buffered.end(0);
-
- mediaSource.endOfStream();
-
- assert_equals(sourceBuffer.buffered.end(0), highestEndTime,
- 'Ending the stream does not affect buffered data');
</del><ins>+ assert_equals(mediaElement.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA,
+ 'Media element has enough data to render the content');
</ins><span class="cx"> test.done();
</span><span class="cx"> });
</span><del>- }, 'MediaSource.endOfStream(): buffered data not modified when endOfStream is called');
</del><ins>+ }, 'MediaSource.endOfStream(): media element notified that it now has all of the media data');
</ins><span class="cx">
</span><ins>+ function threeDecimalPlaces(number)
+ {
+ return Number(number.toFixed(3));
+ }
+
</ins><span class="cx"> mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
</span><span class="cx"> {
</span><del>- assert_less_than(segmentInfo.duration, 60, 'Sufficient test media duration');
</del><span class="cx"> sourceBuffer.appendBuffer(mediaData);
</span><span class="cx"> test.expectEvent(sourceBuffer, 'updateend',
</span><span class="cx"> 'Media buffer appended to SourceBuffer');
</span><span class="lines">@@ -61,13 +47,30 @@
</span><span class="cx"> {
</span><span class="cx"> assert_equals(sourceBuffer.buffered.length, 1,
</span><span class="cx"> 'Media data properly buffered');
</span><ins>+ var highestEndTime = sourceBuffer.buffered.end(0);
</ins><span class="cx">
</span><del>- mediaSource.duration = 60;
</del><ins>+ // Note that segmentInfo.duration is expected to also be the
+ // highest track buffer range end time. Therefore, endOfStream() should
+ // not change duration with this media.
+ assert_equals(threeDecimalPlaces(segmentInfo.duration), threeDecimalPlaces(mediaSource.duration));
+ assert_less_than_equal(highestEndTime, mediaSource.duration,
+ 'Media duration may be slightly longer than intersected track buffered ranges');
+
+ // Set the duration even higher, then confirm that endOfStream() drops it back to be
+ // the highest track buffer range end time.
+ mediaSource.duration += 10;
</ins><span class="cx"> mediaSource.endOfStream();
</span><span class="cx">
</span><del>- assert_equals(mediaSource.duration, sourceBuffer.buffered.end(0),
- 'Duration set to the higest end time');
</del><ins>+ assert_equals(sourceBuffer.buffered.length, 1,
+ 'Media data properly buffered after endOfStream');
+
+ assert_equals(threeDecimalPlaces(segmentInfo.duration), threeDecimalPlaces(mediaSource.duration));
+ assert_less_than_equal(highestEndTime, mediaSource.duration,
+ 'Media duration may be slightly longer than intersected track buffered ranges');
+ assert_equals(sourceBuffer.buffered.end(0), mediaSource.duration,
+ 'After endOfStream(), highest buffered range end time must be the highest track buffer range end time');
+
</ins><span class="cx"> test.done();
</span><span class="cx"> });
</span><del>- }, 'MediaSource.endOfStream(): duration set to the highest end time reported by the buffered attribute');
-</script>
</del><span class="cx">\ No newline at end of file
</span><ins>+ }, 'MediaSource.endOfStream(): duration and buffered range end time before and after endOfStream');
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceerrorshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-errors.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-errors.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-errors.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcegetvideoplaybackqualityexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality-expected.txt        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,3 +1,4 @@
</span><span class="cx">
</span><span class="cx"> PASS Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API
</span><ins>+PASS Test the totalFrameDelay attribute of HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API
</ins><span class="cx">
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcegetvideoplaybackqualityhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-getvideoplaybackquality.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -18,18 +18,33 @@
</span><span class="cx"> {
</span><span class="cx"> var videoElement = e.target;
</span><span class="cx"> var newQuality = videoElement.getVideoPlaybackQuality();
</span><ins>+ var now = window.performance.now();
</ins><span class="cx">
</span><del>- assert_not_equals(previousQuality, newQuality, "Verify new object");
- assert_greater_than(newQuality.creationTime, previousQuality.creationTime, "creationTime");
</del><ins>+ assert_not_equals(previousQuality, newQuality,
+ "New quality object is different from the previous one");
+ assert_greater_than(newQuality.creationTime, previousQuality.creationTime,
+ "creationTime increases monotonically");
+ assert_approx_equals(newQuality.creationTime, now, 100,
+ "creationTime roughly equals current time");
</ins><span class="cx">
</span><span class="cx"> assert_greater_than_equal(newQuality.totalVideoFrames, 0, "totalVideoFrames >= 0");
</span><del>- assert_greater_than_equal(newQuality.totalVideoFrames, previousQuality.totalVideoFrames, "totalVideoFrames");
</del><ins>+ assert_greater_than_equal(newQuality.totalVideoFrames, previousQuality.totalVideoFrames,
+ "totalVideoFrames increases monotonically");
+ assert_less_than(newQuality.totalVideoFrames, 300,
+ "totalVideoFrames should remain low as duration is less than 10s and framerate less than 30fps");
</ins><span class="cx">
</span><span class="cx"> assert_greater_than_equal(newQuality.droppedVideoFrames, 0, "droppedVideoFrames >= 0");
</span><del>- assert_greater_than_equal(newQuality.droppedVideoFrames, previousQuality.droppedVideoFrames, "droppedVideoFrames");
</del><ins>+ assert_greater_than_equal(newQuality.droppedVideoFrames, previousQuality.droppedVideoFrames,
+ "droppedVideoFrames increases monotonically");
+ assert_less_than_equal(newQuality.droppedVideoFrames, newQuality.totalVideoFrames,
+ "droppedVideoFrames is only a portion of totalVideoFrames");
</ins><span class="cx">
</span><span class="cx"> assert_greater_than_equal(newQuality.corruptedVideoFrames, 0, "corruptedVideoFrames >= 0");
</span><del>- assert_greater_than_equal(newQuality.corruptedVideoFrames, previousQuality.corruptedVideoFrames, "corruptedVideoFrames");
</del><ins>+ assert_greater_than_equal(newQuality.corruptedVideoFrames, previousQuality.corruptedVideoFrames,
+ "corruptedVideoFrames increases monotonically");
+ assert_less_than_equal(newQuality.corruptedVideoFrames, newQuality.totalVideoFrames,
+ "corruptedVideoFrames is only a portion of totalVideoFrames");
+
</ins><span class="cx"> previousQuality = newQuality;
</span><span class="cx"> timeUpdateCount++;
</span><span class="cx"> }));
</span><span class="lines">@@ -36,36 +51,57 @@
</span><span class="cx">
</span><span class="cx"> mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
</span><span class="cx">
</span><del>- test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
</del><ins>+ sourceBuffer.appendBuffer(mediaData);
</ins><span class="cx"> test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
</span><del>- sourceBuffer.appendBuffer(mediaData);
</del><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><span class="cx"> assert_false(sourceBuffer.updating, "updating");
</span><del>-
- sourceBuffer.remove(1, Infinity);
-
- assert_true(sourceBuffer.updating, "updating");
- test.expectEvent(sourceBuffer, 'updatestart', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'update', 'sourceBuffer');
- test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
</del><ins>+ mediaSource.endOfStream();
+ assert_less_than(mediaSource.duration, 10, "duration");
+ mediaElement.play();
+ test.expectEvent(mediaElement, 'ended', 'mediaElement');
</ins><span class="cx"> });
</span><span class="cx">
</span><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><del>- assert_false(sourceBuffer.updating, "updating");
- assert_greater_than(mediaSource.duration, 1, "duration");
</del><ins>+ assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
+ test.done();
+ });
+ }, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
</ins><span class="cx">
</span><del>- mediaSource.duration = 1;
</del><span class="cx">
</span><del>- test.expectEvent(mediaElement, "durationchange");
- });
</del><ins>+ mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+ {
+ var previousQuality = mediaElement.getVideoPlaybackQuality();
+ var timeUpdateCount = 0;
+ var startTime = 0;
+ mediaElement.addEventListener("timeupdate", test.step_func(function (e)
+ {
+ var videoElement = e.target;
+ var newQuality = videoElement.getVideoPlaybackQuality();
+ var now = window.performance.now();
</ins><span class="cx">
</span><ins>+ assert_greater_than_equal(newQuality.totalFrameDelay, 0, "totalFrameDelay >= 0");
+ assert_greater_than_equal(newQuality.totalFrameDelay, previousQuality.totalFrameDelay,
+ "totalFrameDelay increases monotonically");
+ assert_less_than(newQuality.totalFrameDelay, (now - startTime) / 1000,
+ "totalFrameDelay does not exceed the time elapsed since playback started");
+
+ previousQuality = newQuality;
+ timeUpdateCount++;
+ }));
+
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+
+ sourceBuffer.appendBuffer(mediaData);
+ test.expectEvent(sourceBuffer, 'updateend', 'sourceBuffer');
</ins><span class="cx"> test.waitForExpectedEvents(function()
</span><span class="cx"> {
</span><ins>+ assert_false(sourceBuffer.updating, "updating");
</ins><span class="cx"> mediaSource.endOfStream();
</span><ins>+ assert_less_than(mediaSource.duration, 10, "duration");
+ startTime = window.performance.now();
</ins><span class="cx"> mediaElement.play();
</span><span class="cx"> test.expectEvent(mediaElement, 'ended', 'mediaElement');
</span><span class="cx"> });
</span><span class="lines">@@ -75,7 +111,7 @@
</span><span class="cx"> assert_greater_than(timeUpdateCount, 2, "timeUpdateCount");
</span><span class="cx"> test.done();
</span><span class="cx"> });
</span><del>- }, "Test HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
</del><ins>+ }, "Test the totalFrameDelay attribute of HTMLVideoElement.getVideoPlaybackQuality() with MediaSource API");
</ins><span class="cx"> </script>
</span><span class="cx"> </body>
</span><span class="cx"> </html>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceistypesupportedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-is-type-supported.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-is-type-supported.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-is-type-supported.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -5,6 +5,7 @@
</span><span class="cx"> <title>MediaSource.isTypeSupported() test cases.</title>
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span><ins>+ <script src="mediasource-util.js"></script>
</ins><span class="cx"> </head>
</span><span class="cx"> <body>
</span><span class="cx"> <div id="log"></div>
</span><span class="lines">@@ -36,6 +37,12 @@
</span><span class="cx"> ], false, 'Test invalid MIME format');
</span><span class="cx">
</span><span class="cx"> test_type_support([
</span><ins>+ 'xxx',
+ 'text/html',
+ 'image/jpeg'
+ ], false, 'Test invalid MSE MIME media type');
+
+ test_type_support([
</ins><span class="cx"> 'audio/webm;codecs="vp8"',
</span><span class="cx"> 'audio/mp4;codecs="avc1.4d001e"',
</span><span class="cx"> ], false, 'Test invalid mismatch between major type and codec ID');
</span><span class="lines">@@ -46,7 +53,6 @@
</span><span class="cx"> 'video/mp4;codecs="vp8"',
</span><span class="cx"> 'video/webm;codecs="mp4a.40.2"',
</span><span class="cx"> 'video/mp4;codecs="vorbis"',
</span><del>- 'video/webm;codecs="mp4a.40.2"',
</del><span class="cx"> ], false, 'Test invalid mismatch between minor type and codec ID');
</span><span class="cx">
</span><span class="cx"> test_type_support([
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceliveseekablehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-liveseekable.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-liveseekable.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-liveseekable.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,118 +1,137 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<html>
- <head>
- <title>Checks setting/clearing the live seekable range and HTMLMediaElement.seekable</title>
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <script src="mediasource-util.js"></script>
- </head>
- <body>
- <div id="log"></div>
- <script>
- test(function(test)
- {
- var mediaSource = new MediaSource();
- assert_equals(mediaSource.readyState, "closed", "media source is closed.");
- assert_throws("InvalidStateError", function() { mediaSource.setLiveSeekableRange(0, 1); });
- }, "setLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
+<meta charset="utf-8">
+<title>Checks setting/clearing the live seekable range and HTMLMediaElement.seekable</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="mediasource-util.js"></script>
+<script>
+test(function(test)
+{
+ var mediaSource = new MediaSource();
+ assert_equals(mediaSource.readyState, "closed", "media source is closed.");
+ assert_throws("InvalidStateError", function() { mediaSource.setLiveSeekableRange(0, 1); });
+}, "setLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");
</ins><span class="cx">
</span><span class="cx">
</span><del>- test(function(test)
- {
- var mediaSource = new MediaSource();
- assert_equals(mediaSource.readyState, "closed", "media source is closed.");
- assert_throws("InvalidStateError", function() { mediaSource.clearLiveSeekableRange(); });
- }, "clearLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");
</del><ins>+test(function(test)
+{
+ var mediaSource = new MediaSource();
+ assert_equals(mediaSource.readyState, "closed", "media source is closed.");
+ assert_throws("InvalidStateError", function() { mediaSource.clearLiveSeekableRange(); });
+}, "clearLiveSeekableRange throws an InvalidStateError exception if the readyState attribute is not 'open'");
</ins><span class="cx">
</span><span class="cx">
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
- assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(-1, 1); });
- test.done();
- }, "setLiveSeekableRange throws a TypeError if start is negative");
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
+ var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
+ sourceBuffer.appendBuffer(new Uint8Array(0));
+ assert_true(sourceBuffer.updating, "Updating set when a buffer is appended.");
+ mediaSource.setLiveSeekableRange(0, 1);
+ test.done();
+}, "setLiveSeekableRange does not restrict to not currently updating");
</ins><span class="cx">
</span><span class="cx">
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
- assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(2, 1); });
- test.done();
- }, "setLiveSeekableRange throws a TypeError if start is greater than end");
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ var mimetype = MediaSourceUtil.AUDIO_VIDEO_TYPE;
+ var sourceBuffer = mediaSource.addSourceBuffer(mimetype);
+ sourceBuffer.appendBuffer(new Uint8Array(0));
+ assert_true(sourceBuffer.updating, "Updating set when a buffer is appended.");
+ mediaSource.clearLiveSeekableRange();
+ test.done();
+}, "clearLiveSeekableRange does not restrict to not currently updating");
</ins><span class="cx">
</span><span class="cx">
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
- mediaSource.setLiveSeekableRange(0, 1);
- test.done();
- }, "setLiveSeekableRange returns with no error when conditions are correct");
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(-1, 1); });
+ test.done();
+}, "setLiveSeekableRange throws a TypeError if start is negative");
</ins><span class="cx">
</span><span class="cx">
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
- mediaSource.clearLiveSeekableRange();
- test.done();
- }, "clearLiveSeekableRange returns with no error when conditions are correct");
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ assert_throws(new TypeError(), function() { mediaSource.setLiveSeekableRange(2, 1); });
+ test.done();
+}, "setLiveSeekableRange throws a TypeError if start is greater than end");
</ins><span class="cx">
</span><span class="cx">
</span><del>- mediasource_test(function(test, mediaElement, mediaSource)
- {
- mediaSource.duration = +Infinity;
- mediaSource.setLiveSeekableRange(1, 2);
- assert_equals(mediaElement.seekable.length, 1,
- 'The seekable attribute contains a single range.');
- assertSeekableEquals(mediaElement, '{ [1.000, 2.000) }',
- 'The seekable attribute returns the correct range.');
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ mediaSource.setLiveSeekableRange(0, 1);
+ test.done();
+}, "setLiveSeekableRange returns with no error when conditions are correct");
</ins><span class="cx">
</span><del>- mediaSource.clearLiveSeekableRange();
- assertSeekableEquals(mediaElement, '{ }',
- 'The seekable attribute now returns an empty range.');
- test.done();
- }, "HTMLMediaElement.seekable returns the live seekable range or an empty range if that range was cleared when nothing is buffered");
</del><span class="cx">
</span><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaElement.addEventListener('error', test.unreached_func("Unexpected event 'error'"));
+ mediaSource.clearLiveSeekableRange();
+ test.done();
+}, "clearLiveSeekableRange returns with no error when conditions are correct");
</ins><span class="cx">
</span><del>- mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
- {
- var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
- test.expectEvent(sourceBuffer, 'updateend', 'Init segment appended to SourceBuffer.');
- sourceBuffer.appendBuffer(initSegment);
- test.waitForExpectedEvents(function()
- {
- mediaSource.duration = +Infinity;
- mediaSource.setLiveSeekableRange(40, 42);
</del><span class="cx">
</span><del>- // Append a segment that starts after 1s to ensure seekable
- // won't use 0 as starting point.
- var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[5]);
- test.expectEvent(sourceBuffer, 'updateend');
- sourceBuffer.appendBuffer(midSegment);
- test.waitForExpectedEvents(function()
- {
- assert_equals(mediaElement.seekable.length, 1,
- 'The seekable attribute contains a single range.');
- assert_equals(mediaElement.buffered.length, 1,
- 'The buffered attribute contains a single range.');
- assert_not_equals(mediaElement.seekable.start(0), 0,
- 'The range starts after 0.');
- assert_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0),
- 'The start time is the start time of the buffered range.');
- assert_equals(mediaElement.seekable.end(0), 42,
- 'The end time is the end time of the seekable range.');
</del><ins>+mediasource_test(function(test, mediaElement, mediaSource)
+{
+ mediaSource.duration = +Infinity;
+ mediaSource.setLiveSeekableRange(1, 2);
+ assert_equals(mediaElement.seekable.length, 1,
+ 'The seekable attribute contains a single range.');
+ assertSeekableEquals(mediaElement, '{ [1.000, 2.000) }',
+ 'The seekable attribute returns the correct range.');
</ins><span class="cx">
</span><del>- mediaSource.clearLiveSeekableRange();
- assert_equals(mediaElement.seekable.length, 1,
- 'The seekable attribute contains a single range.');
- assert_equals(mediaElement.seekable.start(0), 0,
- 'The start time is now 0.');
- assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0),
- 'The end time is now the end time of the buffered range.');
</del><ins>+ mediaSource.clearLiveSeekableRange();
+ assertSeekableEquals(mediaElement, '{ }',
+ 'The seekable attribute now returns an empty range.');
+ test.done();
+}, "HTMLMediaElement.seekable returns the live seekable range or an empty range if that range was cleared when nothing is buffered");
</ins><span class="cx">
</span><del>- test.done();
- });
- });
- }, 'HTMLMediaElement.seekable returns the union of the buffered range and the live seekable range, when set');
- </script>
- </body>
-</html>
</del><ins>+
+mediasource_testafterdataloaded(function(test, mediaElement, mediaSource, segmentInfo, sourceBuffer, mediaData)
+{
+ var initSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.init);
+ test.expectEvent(sourceBuffer, 'updateend', 'Init segment appended to SourceBuffer.');
+ sourceBuffer.appendBuffer(initSegment);
+ test.waitForExpectedEvents(function()
+ {
+ mediaSource.duration = +Infinity;
+ mediaSource.setLiveSeekableRange(40, 42);
+
+ // Append a segment that starts after 1s to ensure seekable
+ // won't use 0 as starting point.
+ var midSegment = MediaSourceUtil.extractSegmentData(mediaData, segmentInfo.media[5]);
+ test.expectEvent(sourceBuffer, 'updateend');
+ sourceBuffer.appendBuffer(midSegment);
+ test.waitForExpectedEvents(function()
+ {
+ assert_equals(mediaElement.seekable.length, 1,
+ 'The seekable attribute contains a single range.');
+ assert_equals(mediaElement.buffered.length, 1,
+ 'The buffered attribute contains a single range.');
+ assert_not_equals(mediaElement.seekable.start(0), 0,
+ 'The range starts after 0.');
+ assert_equals(mediaElement.seekable.start(0), mediaElement.buffered.start(0),
+ 'The start time is the start time of the buffered range.');
+ assert_equals(mediaElement.seekable.end(0), 42,
+ 'The end time is the end time of the seekable range.');
+
+ mediaSource.clearLiveSeekableRange();
+ assert_equals(mediaElement.seekable.length, 1,
+ 'The seekable attribute contains a single range.');
+ assert_equals(mediaElement.seekable.start(0), 0,
+ 'The start time is now 0.');
+ assert_equals(mediaElement.seekable.end(0), mediaElement.buffered.end(0),
+ 'The end time is now the end time of the buffered range.');
+
+ test.done();
+ });
+ });
+}, 'HTMLMediaElement.seekable returns the union of the buffered range and the live seekable range, when set');
+</script>
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremoveexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove-expected.txt (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove-expected.txt        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove-expected.txt        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -6,6 +6,7 @@
</span><span class="cx"> PASS Test remove with a NEGATIVE_INFINITY end.
</span><span class="cx"> PASS Test remove with a NaN end.
</span><span class="cx"> PASS Test remove after SourceBuffer removed from mediaSource.
</span><ins>+PASS Test remove with a NaN duration.
</ins><span class="cx"> PASS Test remove while update pending.
</span><span class="cx"> PASS Test aborting a remove operation.
</span><span class="cx"> PASS Test remove with a start at the duration.
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremovehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-remove.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -2,6 +2,7 @@
</span><span class="cx"> <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</span><span class="cx"> <html>
</span><span class="cx"> <head>
</span><ins>+ <meta charset="utf-8">
</ins><span class="cx"> <title>SourceBuffer.remove() test cases.</title>
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span><span class="lines">@@ -14,6 +15,8 @@
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span><span class="cx">
</span><ins>+ mediaSource.duration = 10;
+
</ins><span class="cx"> assert_throws(new TypeError(), function()
</span><span class="cx"> {
</span><span class="cx"> sourceBuffer.remove(-1, 2);
</span><span class="lines">@@ -26,6 +29,8 @@
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span><span class="cx">
</span><ins>+ mediaSource.duration = 10;
+
</ins><span class="cx"> [ undefined, NaN, Infinity, -Infinity ].forEach(function(item)
</span><span class="cx"> {
</span><span class="cx"> assert_throws(new TypeError(), function()
</span><span class="lines">@@ -69,6 +74,8 @@
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span><span class="cx">
</span><ins>+ mediaSource.duration = 10;
+
</ins><span class="cx"> assert_throws(new TypeError(), function()
</span><span class="cx"> {
</span><span class="cx"> sourceBuffer.remove(0, Number.NEGATIVE_INFINITY);
</span><span class="lines">@@ -81,6 +88,8 @@
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span><span class="cx">
</span><ins>+ mediaSource.duration = 10;
+
</ins><span class="cx"> assert_throws(new TypeError(), function()
</span><span class="cx"> {
</span><span class="cx"> sourceBuffer.remove(0, Number.NaN);
</span><span class="lines">@@ -105,7 +114,21 @@
</span><span class="cx"> test.done();
</span><span class="cx"> }, "Test remove after SourceBuffer removed from mediaSource.");
</span><span class="cx">
</span><ins>+ mediasource_test(function(test, mediaElement, mediaSource)
+ {
+ var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</ins><span class="cx">
</span><ins>+ assert_false(sourceBuffer.updating, "updating is false");
+ assert_equals(mediaSource.duration, NaN, "duration isn't set");
+
+ assert_throws(new TypeError(), function()
+ {
+ sourceBuffer.remove(0, 0);
+ }, "remove");
+
+ test.done();
+ }, "Test remove with a NaN duration.");
+
</ins><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span><span class="lines">@@ -201,6 +224,7 @@
</span><span class="cx"> test.expectEvent(sourceBuffer, "updatestart");
</span><span class="cx"> test.expectEvent(sourceBuffer, "update");
</span><span class="cx"> test.expectEvent(sourceBuffer, "updateend");
</span><ins>+ test.expectEvent(mediaSource, "sourceopen");
</ins><span class="cx"> sourceBuffer.remove(1, 2);
</span><span class="cx">
</span><span class="cx"> assert_true(sourceBuffer.updating, "updating");
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceremovesourcebufferhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-removesourcebuffer.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-removesourcebuffer.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-removesourcebuffer.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -42,11 +42,46 @@
</span><span class="cx">
</span><span class="cx"> assert_throws("NotFoundError",
</span><span class="cx"> function() { mediaSource.removeSourceBuffer(sourceBuffer); },
</span><del>- "removeSourceBuffer() threw an exception when a SourceBuffer that was already removed.");
</del><ins>+ "removeSourceBuffer() threw an exception for a SourceBuffer that was already removed.");
</ins><span class="cx">
</span><span class="cx"> test.done();
</span><span class="cx"> }, "Test calling removeSourceBuffer() twice with the same object.");
</span><span class="cx">
</span><ins>+ mediasource_test(function(test, mediaElement1, mediaSource1)
+ {
+ var sourceBuffer1 = mediaSource1.addSourceBuffer(MediaSourceUtil.AUDIO_ONLY_TYPE);
+ assert_class_string(sourceBuffer1, "SourceBuffer", "New SourceBuffer returned");
+
+ var mediaElement2 = document.createElement("video");
+ document.body.appendChild(mediaElement2);
+ test.add_cleanup(function() { document.body.removeChild(mediaElement2); });
+
+ var mediaSource2 = new MediaSource();
+ var mediaSource2URL = URL.createObjectURL(mediaSource2);
+ mediaElement2.src = mediaSource2URL;
+ test.expectEvent(mediaSource2, "sourceopen", "Second MediaSource opened");
+ test.waitForExpectedEvents(function()
+ {
+ URL.revokeObjectURL(mediaSource2URL);
+
+ var sourceBuffer2 = mediaSource2.addSourceBuffer(MediaSourceUtil.VIDEO_ONLY_TYPE);
+ assert_class_string(sourceBuffer2, "SourceBuffer", "Second new SourceBuffer returned");
+ assert_not_equals(mediaSource1, mediaSource2, "MediaSources are different instances");
+ assert_not_equals(sourceBuffer1, sourceBuffer2, "SourceBuffers are different instances");
+ assert_equals(mediaSource1.sourceBuffers[0], sourceBuffer1);
+ assert_equals(mediaSource2.sourceBuffers[0], sourceBuffer2);
+ assert_throws("NotFoundError",
+ function() { mediaSource1.removeSourceBuffer(sourceBuffer2); },
+ "MediaSource1.removeSourceBuffer() threw an exception for SourceBuffer2");
+ assert_throws("NotFoundError",
+ function() { mediaSource2.removeSourceBuffer(sourceBuffer1); },
+ "MediaSource2.removeSourceBuffer() threw an exception for SourceBuffer1");
+ mediaSource1.removeSourceBuffer(sourceBuffer1);
+ mediaSource2.removeSourceBuffer(sourceBuffer2);
+ test.done();
+ });
+ }, "Test calling removeSourceBuffer() for a sourceBuffer belonging to a different mediaSource instance.");
+
</ins><span class="cx"> mediasource_test(function(test, mediaElement, mediaSource)
</span><span class="cx"> {
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(MediaSourceUtil.AUDIO_VIDEO_TYPE);
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceseekablehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-seekable.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-seekable.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-seekable.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffermodetimestampshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html (0 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html         (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode-timestamps.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -0,0 +1,52 @@
</span><ins>+<!doctype html>
+<html>
+<head>
+ <meta charset='utf-8'>
+ <title>SourceBuffer#mode with generate timestamps flag true</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="log"></div>
+
+<script>
+var mimes = ['audio/aac', 'audio/mpeg'];
+
+//check the browser supports the MIME used in this test
+function isTypeSupported(mime) {
+ if(!MediaSource.isTypeSupported(mime)) {
+ this.step(function() {
+ assert_unreached("Browser doesn't support the MIME used in this test: " + mime);
+ });
+ this.done();
+ return false;
+ }
+ return true;
+}
+function mediaTest(mime) {
+ async_test(function(t) {
+ if(!isTypeSupported.bind(t)(mime)) {
+ return;
+ }
+ var mediaSource = new MediaSource();
+ mediaSource.addEventListener('sourceopen', t.step_func_done(function(e) {
+ var sourceBuffer = mediaSource.addSourceBuffer(mime);
+ assert_equals(sourceBuffer.updating, false, "SourceBuffer.updating is false");
+ assert_throws({name: 'TypeError'},
+ function() {
+ sourceBuffer.mode = "segments";
+ },
+ 'SourceBuffer#mode with generate timestamps flag true');
+ }), false);
+ var video = document.createElement('video');
+ video.src = window.URL.createObjectURL(mediaSource);
+ }, mime + ' : ' +
+ 'If generate timestamps flag equals true and new mode equals "segments", ' +
+ 'then throw a TypeError exception and abort these steps.');
+}
+mimes.forEach(function(mime) {
+ mediaTest(mime);
+});
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffermodehtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-mode.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -2,6 +2,7 @@
</span><span class="cx"> <!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</span><span class="cx"> <html>
</span><span class="cx"> <head>
</span><ins>+ <meta charset="utf-8">
</ins><span class="cx"> <title>SourceBuffer.mode test cases.</title>
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcesourcebuffertrackdefaultshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-sourcebuffer-trackdefaults.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetimestampoffsethtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-timestamp-offset.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-timestamp-offset.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-timestamp-offset.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -17,6 +17,9 @@
</span><span class="cx"> var segmentInfo = MediaSourceUtil.SEGMENT_INFO;
</span><span class="cx"> var sourceBuffer = mediaSource.addSourceBuffer(segmentInfo.type);
</span><span class="cx">
</span><ins>+ assert_equals(sourceBuffer.timestampOffset, 0,
+ "Initial timestampOffset of a SourceBuffer is 0");
+
</ins><span class="cx"> if (expected == "TypeError") {
</span><span class="cx"> assert_throws({name: "TypeError"},
</span><span class="cx"> function() { sourceBuffer.timestampOffset = value; },
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetrackdefaulthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefault.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefault.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefault.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourcetrackdefaultlisthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefaultlist.html (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefaultlist.html        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-trackdefaultlist.html        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> <!DOCTYPE html>
</span><del>-<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</del><ins>+<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
</ins><span class="cx"> <meta charset="utf-8">
</span><span class="cx"> <script src="/resources/testharness.js"></script>
</span><span class="cx"> <script src="/resources/testharnessreport.js"></script>
</span></span></pre></div>
<a id="trunkLayoutTestsimportedw3cwebplatformtestsmediasourcemediasourceutiljs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-util.js (206128 => 206129)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-util.js        2016-09-19 23:27:26 UTC (rev 206128)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/media-source/mediasource-util.js        2016-09-19 23:30:53 UTC (rev 206129)
</span><span class="lines">@@ -303,7 +303,7 @@
</span><span class="cx">
</span><span class="cx"> var i = startingIndex;
</span><span class="cx"> var onAppendDone = function() {
</span><del>- if (eventFired)
</del><ins>+ if (eventFired || (i >= (segmentInfo.media.length - 1)))
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> i++;
</span></span></pre>
</div>
</div>
</body>
</html>