Bug 1389844 - P1. Add mochitest. r?gerald draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 16 Aug 2017 19:20:45 +0200
changeset 647626 6947cc28755f18bee8677cd75c10b1abcb5d555a
parent 647460 6ebc251bd288c268b020815025b05854ccde5c08
child 647627 b96d6cc5b35280f9443dbc51d463b55348bcc925
push id74486
push userbmo:jyavenard@mozilla.com
push dateWed, 16 Aug 2017 17:44:54 +0000
reviewersgerald
bugs1389844
milestone57.0a1
Bug 1389844 - P1. Add mochitest. r?gerald Similar to test_PlayEventsAutoPlaying.html, but here we load 10s of data and ensure autoplaying kicks in. MozReview-Commit-ID: ImpjFIcBIo1
dom/media/mediasource/test/mochitest.ini
dom/media/mediasource/test/test_PlayEventsAutoPlaying2.html
--- a/dom/media/mediasource/test/mochitest.ini
+++ b/dom/media/mediasource/test/mochitest.ini
@@ -102,16 +102,18 @@ skip-if = ((os == "win" && os_version ==
 [test_MultipleInitSegments_mp4.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_OnEvents.html]
 skip-if = android_version == '22' # bug 1359010
 [test_PlayEvents.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
 [test_PlayEventsAutoPlaying.html]
 skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
+[test_PlayEventsAutoPlaying2.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
new file mode 100644
--- /dev/null
+++ b/dom/media/mediasource/test/test_PlayEventsAutoPlaying2.html
@@ -0,0 +1,76 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>MSE: basic functionality</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();
+
+// This test checks that readyState is properly set and the appropriate events are being fired accordingly:
+// 1. Ensure that play/playing aren't fired before any media data been added.
+// 2. Load more than 10s of data and ensure that canplay, play and playing events are fired.
+
+runWithMSE(function(ms, el) {
+  el.controls = true;
+  el.autoplay = true;
+  var eventCounts = { play: 0, playing: 0};
+  function ForbiddenEvents(e) {
+    var v = e.target;
+    ok(v.readyState >= v.HAVE_FUTURE_DATA, "Must not have received event too early");
+    is(eventCounts[e.type], 0, "event should have only be fired once");
+    eventCounts[e.type]++;
+  }
+  once(ms, 'sourceopen').then(function() {
+    // Log events for debugging.
+    var events = ["suspend", "play", "canplay", "canplaythrough", "loadstart", "loadedmetadata",
+                  "loadeddata", "playing", "ended", "error", "stalled", "emptied", "abort",
+                  "waiting", "pause", "durationchange", "seeking", "seeked"];
+    function logEvent(e) {
+      info("got " + e.type + " event");
+    }
+    events.forEach(function(e) {
+      el.addEventListener(e, logEvent);
+    });
+    el.addEventListener("play", ForbiddenEvents);
+    el.addEventListener("playing", ForbiddenEvents);
+
+    ok(true, "Receive a sourceopen event");
+    var videosb = ms.addSourceBuffer("video/mp4");
+    el.addEventListener("error", function(e) {
+      ok(false, "should not fire '" + e + "' event");
+    });
+    is(el.readyState, el.HAVE_NOTHING, "readyState is HAVE_NOTHING");
+    var promises = [];
+    promises.push(fetchAndLoad(videosb, 'bipbop/bipbop_video', ['init'], '.mp4'));
+    promises.push(once(el, 'loadedmetadata'));
+    Promise.all(promises)
+    .then(function() {
+       ok(true, "got loadedmetadata event");
+       var promises = [];
+       // We shift the timestamps slightly to create a small gaps at the start.
+       // one that should normally be ignored.
+       videosb.timestampOffset = 0.1;
+       promises.push(once(el, 'loadeddata'));
+       promises.push(once(el, 'canplay'));
+       promises.push(once(el, 'play'));
+       promises.push(once(el, 'playing'));
+       promises.push(fetchAndLoad(videosb, 'bipbop/bipbop_video', range(1, 14), '.m4s'));
+       return Promise.all(promises);
+    })
+    .then(function() {
+      ok(true, "got all required event");
+      SimpleTest.finish();
+    })
+  });
+});
+
+</script>
+</pre>
+</body>
+</html>