Bug 1208371 - Improve reliability of test_mediarecorder_record_timeslice.html. r?jwwang draft
authorAndreas Pehrson <pehrsons@gmail.com>
Wed, 06 Jan 2016 11:56:27 +0800
changeset 342167 323442c4e049bac5f4cf210980c79aa573e4d21b
parent 342166 f558878e2449672141fec69b0ce58464a986998f
child 342168 b772f4d4bc19b82712cb4b876bc4c783add0cce2
push id13352
push userpehrsons@gmail.com
push dateFri, 18 Mar 2016 13:49:47 +0000
reviewersjwwang
bugs1208371
milestone47.0a1
Bug 1208371 - Improve reliability of test_mediarecorder_record_timeslice.html. r?jwwang MozReview-Commit-ID: HFstfYnRyJP
dom/media/test/test_mediarecorder_record_timeslice.html
--- a/dom/media/test/test_mediarecorder_record_timeslice.html
+++ b/dom/media/test/test_mediarecorder_record_timeslice.html
@@ -20,85 +20,85 @@ function startTest(test, token) {
   var expectedMimeType = test.type.substring(0, test.type.indexOf(';'));
 
   element.token = token;
   manager.started(token);
 
   element.src = test.name;
   element.test = test;
   element.stream = element.mozCaptureStream();
-  element.loop = true;
-
-  var mediaRecorder = new MediaRecorder(element.stream);
-
-  mediaRecorder.onerror = function () {
-    ok(false, 'Unexpected onerror callback fired');
-  };
-
-  mediaRecorder.onwarning = function () {
-    ok(false, 'Unexpected onwarning callback fired');
-  };
-
-  mediaRecorder.onstop = function () {
-    ok(false, 'Unexpected onstop callback fired');
-  };
-
-  var dataAvailableCount = 0;
-  var onDataAvailableFirst = false;
-
-  // This handler fires every 250ms to generate a blob.
-  mediaRecorder.ondataavailable = function (evt) {
-    info('ondataavailable fired');
-    dataAvailableCount++;
-
-    ok(evt instanceof BlobEvent,
-       'Events fired from ondataavailable should be BlobEvent');
-    is(evt.type, 'dataavailable',
-       'Event type should dataavailable');
-    ok(evt.data.size >= 0,
-       'Blob data size received is greater than or equal to zero');
+  element.preload = "auto";
 
-    is(evt.data.type, expectedMimeType,
-       'Blob data received should have type = ' + expectedMimeType);
-    is(mediaRecorder.mimeType, expectedMimeType,
-       'Mime type in ondataavailable = ' + mediaRecorder.mimeType);
-
-    // We'll stop recording upon the 1st blob being received
-    if (dataAvailableCount === 1) {
-      mediaRecorder.onstop = function (evt) {
-        info('onstop fired');
-
-        if (!onDataAvailableFirst) {
-          ok(false, 'onstop unexpectedly fired before ondataavailable');
-        }
-        element.pause();
-        manager.finished(token);
-      };
-
-      mediaRecorder.stop();
-      is(mediaRecorder.state, 'inactive',
-         'Media recorder is inactive after being stopped');
-      is(mediaRecorder.stream, element.stream,
-         'Media recorder stream = element stream post recording');
-
-    } else if (dataAvailableCount === 2) {
-      // Ensure we've received at least two ondataavailable events before onstop
-      onDataAvailableFirst = true;
-    }
-  };
-
-  // Start recording once metadataloaded fires
+  // Set up MediaRecorder once loadedmetadata fires and tracks are available.
   element.onloadedmetadata = function() {
     element.onloadedmetadata = null;
+
+    var mediaRecorder = new MediaRecorder(element.stream);
+
+    mediaRecorder.onerror = function () {
+      ok(false, 'Unexpected onerror callback fired');
+    };
+
+    mediaRecorder.onwarning = function () {
+      ok(false, 'Unexpected onwarning callback fired');
+    };
+
+    mediaRecorder.onstop = function () {
+      ok(false, 'Unexpected onstop callback fired');
+    };
+
+    var dataAvailableCount = 0;
+    var onDataAvailableFirst = false;
+
+    // This handler fires every 250ms to generate a blob.
+    mediaRecorder.ondataavailable = function (evt) {
+      info('ondataavailable fired');
+      dataAvailableCount++;
+
+      ok(evt instanceof BlobEvent,
+         'Events fired from ondataavailable should be BlobEvent');
+      is(evt.type, 'dataavailable',
+         'Event type should dataavailable');
+      ok(evt.data.size >= 0,
+         'Blob data size received is greater than or equal to zero');
+
+      is(evt.data.type, expectedMimeType,
+         'Blob data received should have type = ' + expectedMimeType);
+      is(mediaRecorder.mimeType, expectedMimeType,
+         'Mime type in ondataavailable = ' + mediaRecorder.mimeType);
+
+      // We'll stop recording upon the 1st blob being received
+      if (dataAvailableCount === 1) {
+        mediaRecorder.onstop = function (evt) {
+          info('onstop fired');
+
+          if (!onDataAvailableFirst) {
+            ok(false, 'onstop unexpectedly fired before ondataavailable');
+          }
+          element.pause();
+          manager.finished(token);
+        };
+
+        mediaRecorder.stop();
+        is(mediaRecorder.state, 'inactive',
+           'Media recorder is inactive after being stopped');
+        is(mediaRecorder.stream, element.stream,
+           'Media recorder stream = element stream post recording');
+
+      } else if (dataAvailableCount === 2) {
+        // Ensure we've received at least two ondataavailable events before onstop
+        onDataAvailableFirst = true;
+      }
+    };
+
     mediaRecorder.start(250);
+    element.play();
     is(mediaRecorder.state, 'recording', 'Media recorder should be recording');
     is(mediaRecorder.stream, element.stream,
        'Media recorder stream = element stream at the start of recording');
   };
-
-  element.play();
 }
 
 manager.runTests(gMediaRecorderTests, startTest);
 </script>
 </pre>
 </body>
 </html>