Bug 1269178: P3. Add mochitest. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Mon, 02 May 2016 11:16:00 +1000
changeset 358186 db5d1b8cf1eabb38015df57d9c5d21f0efda47af
parent 358185 86d8f7449993934539bec175a834081bd8b0ca97
child 358187 1978416db81b4ce363968d79edaf9e709905fe9e
child 358188 322f65949a74dc80240d5f28274541bff8f3fc95
push id16959
push userbmo:jyavenard@mozilla.com
push dateMon, 02 May 2016 06:10:08 +0000
reviewersgerald
bugs1269178
milestone49.0a1
Bug 1269178: P3. Add mochitest. r?gerald MozReview-Commit-ID: 2iqZetykYgj
dom/media/mediasource/test/mochitest.ini
dom/media/mediasource/test/test_ResumeAfterClearing_mp4.html
--- a/dom/media/mediasource/test/mochitest.ini
+++ b/dom/media/mediasource/test/mochitest.ini
@@ -73,16 +73,18 @@ skip-if = ((os == "win" && os_version ==
 [test_MediaSource_mp4.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_MediaSource_disabled.html]
 [test_MultipleInitSegments.html]
 [test_MultipleInitSegments_mp4.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_PlayEvents.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
+[test_ResumeAfterClearing_mp4.html]
+skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_SeekableAfterEndOfStream.html]
 [test_SeekableAfterEndOfStream_mp4.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_SeekableAfterEndOfStreamSplit.html]
 [test_SeekableAfterEndOfStreamSplit_mp4.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_SeekableBeforeEndOfStream.html]
 [test_SeekableBeforeEndOfStream_mp4.html]
new file mode 100644
--- /dev/null
+++ b/dom/media/mediasource/test/test_ResumeAfterClearing_mp4.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<html><head>
+<meta http-equiv="content-type" content="text/html; charset=windows-1252">
+  <title>MSE: Don't get stuck buffering for too long when we have frames to show</title>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="text/javascript" src="mediasource.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<pre id="test"><script class="testbody" type="text/javascript">
+
+SimpleTest.waitForExplicitFinish();
+
+var receivedSourceOpen = false;
+runWithMSE(function(ms, v) {
+  ms.addEventListener("sourceopen", function() {
+    ok(true, "Receive a sourceopen event");
+    ok(!receivedSourceOpen, "Should only receive one sourceopen for this test");
+    receivedSourceOpen = true;
+    var sb = ms.addSourceBuffer("video/mp4");
+    ok(sb, "Create a SourceBuffer");
+
+    sb.addEventListener('error', (e) => { ok(false, "Got Error: " + e); SimpleTest.finish(); });
+    fetchAndLoad(sb, 'bipbop/bipbop', ['init'], '.mp4')
+    .then(function() {
+      var promises = [];
+      promises.push(fetchAndLoad(sb, 'bipbop/bipbop', range(1,3), '.m4s'));
+      promises.push(once(v, "loadeddata"));
+      return Promise.all(promises);
+    }).then(function() {
+      // clear the entire sourcebuffer.
+      sb.remove(0, 5);
+      return once(sb, "updateend");
+    }).then(function() {
+      v.play();
+      // We have nothing to play, waiting will be fired.
+      return once(v, "waiting");
+    }).then(function() {
+      var promises = [];
+      promises.push(once(v, "playing"));
+      promises.push(fetchAndLoad(sb, 'bipbop/bipbop', range(1,3), '.m4s'));
+      return Promise.all(promises);
+    }).then(function() {
+      ms.endOfStream();
+      var promises = [];
+      promises.push(once(ms, "sourceended"));
+      promises.push(once(v, "ended"));
+      return Promise.all(promises);
+    }).then(SimpleTest.finish.bind(SimpleTest));
+  });
+});
+</script>
+</pre>
+</body>
+</html>