Bug 1476975 - P2. Add mochitests. r=dminor draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Fri, 20 Jul 2018 10:59:20 +0200
changeset 821048 a946636ed0d6e066a222b011113b1471109539bf
parent 821047 5fd1b263f3051f0565f899919a2d066320346b77
child 821049 84dea2f686df88c91b18e8739de0f2a4542e6007
push id116999
push userbmo:jyavenard@mozilla.com
push dateFri, 20 Jul 2018 20:56:24 +0000
reviewersdminor
bugs1476975
milestone63.0a1
Bug 1476975 - P2. Add mochitests. r=dminor
dom/media/test/can_play_type_webm.js
dom/media/test/test_can_play_type_mpeg.html
dom/media/test/test_can_play_type_webm.html
--- a/dom/media/test/can_play_type_webm.js
+++ b/dom/media/test/can_play_type_webm.js
@@ -1,11 +1,11 @@
-function check_webm(v, enabled) {
+async function check_webm(v, enabled) {
   function check(type, expected) {
-    is(v.canPlayType(type), enabled ? expected : "", type);
+    is(v.canPlayType(type), enabled ? expected : "", type + "='" + expected + "'");
   }
 
   // WebM types
   check("video/webm", "maybe");
   check("audio/webm", "maybe");
 
   var video = ['vp8', 'vp8.0', 'vp9', 'vp9.0'];
   var audio = ['vorbis', 'opus'];
@@ -21,9 +21,36 @@ function check_webm(v, enabled) {
         check("video/webm; codecs=\"" + acodec + ", " + vcodec + "\"", "probably");
     });
   });
 
   // Unsupported WebM codecs
   check("video/webm; codecs=xyz", "");
   check("video/webm; codecs=xyz,vorbis", "");
   check("video/webm; codecs=vorbis,xyz", "");
+
+  function getPref(name) {
+    var pref = false;
+    try {
+      pref = SpecialPowers.getBoolPref(name);
+    } catch(ex) { }
+    return pref;
+  }
+
+  function isWindows32() {
+    return navigator.userAgent.includes("Windows") &&
+           !navigator.userAgent.includes("Win64");
+  }
+
+  function isAndroid() {
+    return navigator.userAgent.includes("Android");
+  }
+
+  const haveAv1 = getPref("media.av1.enabled");
+  check("video/webm; codecs=\"av1\"", haveAv1 ? "probably" : "");
+
+  await SpecialPowers.pushPrefEnv({"set": [["media.av1.enabled", true]]});
+  // AV1 is disabled on Windows 32 bits (bug 1475564) and Android (bug 1368843)
+  check("video/webm; codecs=\"av1\"", (isWindows32() || isAndroid()) ? "" : "probably");
+
+  await SpecialPowers.pushPrefEnv({"set": [["media.av1.enabled", false]]});
+  check("video/webm; codecs=\"av1\"", "");
 }
--- a/dom/media/test/test_can_play_type_mpeg.html
+++ b/dom/media/test/test_can_play_type_mpeg.html
@@ -98,16 +98,19 @@ function check_mp4(v, enabled) {
     check(codec, "");
     // But VP9 in MP4 is supported in MSE.
     ok(MediaSource.isTypeSupported(codec), "VP9 in MP4 should be supported in MSE");
   });
 
   check("video/mp4; codecs=vp9", "");
   check("video/mp4; codecs=\"vp9\"", "");
   check("video/mp4; codecs=\"vp9.0\"", "");
+
+  // AV1 (disabled until bug 1417050 is fixed)
+  check("video/mp4; codecs=\"av1\"", "");
 }
 
 function check_mp3(v, enabled) {
   function check(type, expected) {
     var ex = enabled ? expected : "";
     is(v.canPlayType(type), ex, type + "='" + ex + "'");
   }
 
--- a/dom/media/test/test_can_play_type_webm.html
+++ b/dom/media/test/test_can_play_type_webm.html
@@ -16,14 +16,24 @@ a Bug 566245</a>
 <div id="content" style="display: none">
 </div>
 
 <video id="v"></video>
 
 <pre id="test">
 <script src="can_play_type_webm.js"></script>
 <script>
-check_webm(document.getElementById('v'), true);
-mediaTestCleanup();
+  async function runTest() {
+    try {
+      await check_webm(document.getElementById('v'), true);
+      mediaTestCleanup();
+    } catch (e) {
+      info("Exception " + e.message);
+      ok(false, "Threw exception " + e.message);
+    }
+    SimpleTest.finish();
+  }
+  SimpleTest.waitForExplicitFinish();
+  addLoadEvent(runTest);
 </script>
 </pre>
 </body>
 </html>