Bug 1514016 - Check that MediaRecorder::Stop is idempotent. r=jib
authorAndreas Pehrson <apehrson@mozilla.com>
Mon, 14 Jan 2019 18:32:57 +0000
changeset 510906 b7b6a2978011a99cb8b65deb73b293a52fd13874
parent 510905 8183cba74edddbea9c6629c1667cbafeb7335c41
child 510907 3b55c65ded33d50a48b0284f0b9e0c7b8b0188ac
push id10547
push userffxbld-merge
push dateMon, 21 Jan 2019 13:03:58 +0000
treeherdermozilla-beta@24ec1916bffe [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjib
bugs1514016
milestone66.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1514016 - Check that MediaRecorder::Stop is idempotent. r=jib Differential Revision: https://phabricator.services.mozilla.com/D15911
testing/web-platform/tests/mediacapture-record/MediaRecorder-stop.html
--- a/testing/web-platform/tests/mediacapture-record/MediaRecorder-stop.html
+++ b/testing/web-platform/tests/mediacapture-record/MediaRecorder-stop.html
@@ -25,27 +25,41 @@
 
         video.getVideoTracks()[0].stop();
         assert_equals(recorder.state, "recording", "MediaRecorder state should be recording immediately following last track ending");
         let event = await new Promise(r => recorder.onstop = r);
 
         assert_equals(event.type, "stop", "the event type should be stop");
         assert_true(event.isTrusted, "isTrusted should be true when the event is created by C++");
         assert_equals(recorder.state, "inactive", "MediaRecorder is inactive after stop event");
+
+        recorder.stop();
+        await Promise.race([
+            new Promise((_, reject) => recorder.onstop =
+                _ => reject(new Error("stop() is idempotent"))),
+            new Promise(r => t.step_timeout(r, 0))
+        ]);
     }, "MediaRecorder will stop recording and fire a stop event when all tracks are ended");
 
     promise_test(async t => {
         let video = createVideoStream();
         let recorder = new MediaRecorder(video);
         recorder.start();
         assert_equals(recorder.state, "recording", "MediaRecorder has been started successfully");
 
         recorder.stop();
         assert_equals(recorder.state, "inactive", "MediaRecorder state should be inactive immediately following stop() call");
 
         let event = await new Promise (r => recorder.onstop = r);
         assert_equals(event.type, "stop", "the event type should be stop");
         assert_true(event.isTrusted, "isTrusted should be true when the event is created by C++");
         assert_equals(recorder.state, "inactive", "MediaRecorder is inactive after stop event");
+
+        recorder.stop();
+        await Promise.race([
+            new Promise((_, reject) => recorder.onstop =
+                _ => reject(new Error("stop() is idempotent"))),
+            new Promise(r => t.step_timeout(r, 0))
+        ]);
     }, "MediaRecorder will stop recording and fire a stop event when stop() is called");
 </script>
 </body>
 </html>