Bug 1514016 - Check that MediaRecorder::Stop is idempotent. r=jib, a=RyanVM
authorAndreas Pehrson <apehrson@mozilla.com>
Mon, 14 Jan 2019 18:32:57 +0000
changeset 509511 c8acac1e463c896b758e5c229bf4b5ac2fc49b01
parent 509510 f11dd983a8aa763e42fa0582058597ca32cdea43
child 509512 944e9c24989d7a57fd5317dd17f9f4e1c546cca4
push id1905
push userffxbld-merge
push dateMon, 21 Jan 2019 12:33:13 +0000
treeherdermozilla-release@c2fca1944d8c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjib, RyanVM
bugs1514016
milestone65.0
Bug 1514016 - Check that MediaRecorder::Stop is idempotent. r=jib, a=RyanVM 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>