tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_eme_mfcdm_getstatusforpolicy.html (3242B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test getStatusForPolicy on MFCDM</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      7  <script type="text/javascript" src="manifest.js"></script>
      8  <script type="text/javascript" src="eme.js"></script>
      9 </head>
     10 <body>
     11 <pre id="test">
     12 <video id="v" controls></video>
     13 <script class="testbody" type="text/javascript">
     14 
     15 add_task(async function setupTestingPrefs() {
     16  await SpecialPowers.pushPrefEnv({
     17    set: [
     18      ["media.eme.hdcp-policy-check.enabled", true],
     19      ["media.wmf.media-engine.enabled", 2],
     20      ["media.eme.playready.enabled", true],
     21      ["media.eme.widevine.experiment.enabled", true],
     22      // This is used to trigger Widevine CDM installation check
     23      ["media.gmp-widevinecdm-l1.enabled", true],
     24      ["media.eme.wmf.clearkey.enabled", true],
     25      // Use the mock clearkey CDM to create cdm for all other key systems.
     26      ["media.eme.wmf.use-mock-cdm-for-external-cdms", true],
     27    ],
     28  });
     29 });
     30 
     31 // We expect that all key system have HDCP 2.1 compliant, which is pre-defined
     32 // in `WMFClearKeyCDMFactory::IsTypeSupported`.
     33 const expectedResults = [
     34  {
     35    minHdcpVersion : "1.0",
     36    expectedResult : "usable"
     37  },
     38  {
     39    minHdcpVersion : "1.1",
     40    expectedResult : "usable"
     41  },
     42  {
     43    minHdcpVersion : "1.2",
     44    expectedResult : "usable"
     45  },
     46  {
     47    minHdcpVersion : "1.3",
     48    expectedResult : "usable"
     49  },
     50  {
     51    minHdcpVersion : "1.4",
     52    expectedResult : "usable"
     53  },
     54  {
     55    minHdcpVersion : "2.0",
     56    expectedResult : "usable"
     57  },
     58  {
     59    minHdcpVersion : "2.1",
     60    expectedResult : "usable"
     61  },
     62  {
     63    minHdcpVersion : "2.2",
     64    expectedResult : "output-restricted"
     65  },
     66  {
     67    minHdcpVersion : "2.3",
     68    expectedResult : "output-restricted"
     69  },
     70 ];
     71 
     72 const kKeySystems = [
     73  "com.microsoft.playready.recommendation",
     74  "com.microsoft.playready.recommendation.3000",
     75  "com.microsoft.playready.recommendation.3000.clearlead",
     76  "com.widevine.alpha.experiment",
     77  "com.widevine.alpha.experiment2",
     78  "org.w3.clearkey",
     79 ];
     80 
     81 add_task(async function testGetStatusForPolicy() {
     82  for (let keySystem of kKeySystems) {
     83    for (let result of expectedResults) {
     84      let mediaKey = await createMediaKeysAndSet(keySystem);
     85      let video = document.getElementById("v");
     86      is(video.mediaKeys, mediaKey,
     87        "Should have set MediaKeys on media element");
     88      let keyStatus = await
     89          video.mediaKeys.getStatusForPolicy({minHdcpVersion : result.minHdcpVersion})
     90          .catch(() => ok(false, "getStatusForPolicy failed!"));
     91      info(`getStatusForPolicy for HDCP ${result.minHdcpVersion} : ${keyStatus}`);
     92      is(keyStatus, result.expectedResult,
     93          `For ${keySystem}-${result.minHdcpVersion} : expected ${result.expectedResult}, got ${keyStatus}`);
     94    }
     95  }
     96 });
     97 
     98 // Helper function
     99 function createMediaKeysAndSet(keySystem) {
    100  return navigator.requestMediaKeySystemAccess(keySystem, gCencMediaKeySystemConfig)
    101  .then(function (access) {
    102    return access.createMediaKeys();
    103  })
    104  .then(function (mediaKeys) {
    105    document.getElementById("v").setMediaKeys(mediaKeys);
    106    return mediaKeys;
    107  });
    108 }
    109 
    110 </script>
    111 </pre>
    112 </body>
    113 </html>