Bug 1310879 - Remove EME persistent-license sessions. r=kikuo
☠☠ backed out by 27eef31f9434 ☠ ☠
authorChris Pearce <cpearce@mozilla.com>
Tue, 18 Oct 2016 15:42:02 +1300
changeset 318480 2d160c26138431569ae79e70bc57f925bd80ba6f
parent 318479 5e74cf7dec1b68c0f0bb601452497b2c564c138c
child 318481 736a7891525950ecc45f8f7e60dd7b3b41dcdff8
push id33303
push usercpearce@mozilla.com
push dateWed, 19 Oct 2016 07:21:44 +0000
treeherderautoland@d344ae14671b [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskikuo
bugs1310879
milestone52.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 1310879 - Remove EME persistent-license sessions. r=kikuo This removes the ability for ClearKey to instantiate persistent-license sessions using the EME APIs. MozReview-Commit-ID: KXyuRNMJKIZ
dom/media/eme/MediaKeySystemAccess.cpp
dom/media/test/mochitest.ini
dom/media/test/test_eme_persistent_sessions.html
dom/media/test/test_eme_requestKeySystemAccess.html
--- a/dom/media/eme/MediaKeySystemAccess.cpp
+++ b/dom/media/eme/MediaKeySystemAccess.cpp
@@ -428,17 +428,16 @@ GetSupportedKeySystems()
       KeySystemConfig clearkey;
       clearkey.mKeySystem = NS_ConvertUTF8toUTF16(kEMEKeySystemClearkey);
       clearkey.mInitDataTypes.AppendElement(NS_LITERAL_STRING("cenc"));
       clearkey.mInitDataTypes.AppendElement(NS_LITERAL_STRING("keyids"));
       clearkey.mInitDataTypes.AppendElement(NS_LITERAL_STRING("webm"));
       clearkey.mPersistentState = KeySystemFeatureSupport::Requestable;
       clearkey.mDistinctiveIdentifier = KeySystemFeatureSupport::Prohibited;
       clearkey.mSessionTypes.AppendElement(MediaKeySessionType::Temporary);
-      clearkey.mSessionTypes.AppendElement(MediaKeySessionType::Persistent_license);
 #if defined(XP_WIN)
       // Clearkey CDM uses WMF decoders on Windows.
       if (WMFDecoderModule::HasAAC()) {
         clearkey.mMP4.SetCanDecryptAndDecode(GMP_CODEC_AAC);
       } else {
         clearkey.mMP4.SetCanDecrypt(GMP_CODEC_AAC);
       }
       if (WMFDecoderModule::HasH264()) {
--- a/dom/media/test/mochitest.ini
+++ b/dom/media/test/mochitest.ini
@@ -691,18 +691,16 @@ skip-if = toolkit == 'android' # bug 114
 [test_eme_initDataTypes.html]
 skip-if = toolkit == 'android' # bug 1149374
 [test_eme_missing_pssh.html]
 skip-if = toolkit == 'android' # bug 1149374
 [test_eme_non_mse_fails.html]
 skip-if = toolkit == 'android' # bug 1149374
 [test_eme_request_notifications.html]
 skip-if = toolkit == 'android' # bug 1149374
-[test_eme_persistent_sessions.html]
-skip-if = toolkit == 'android' # bug 1149374
 [test_eme_playback.html]
 skip-if = toolkit == 'android' || toolkit == 'gonk' # android: bug 1149374; gonk: bug 1193351
 [test_eme_requestKeySystemAccess.html]
 skip-if = toolkit == 'android' # bug 1149374
 [test_eme_setMediaKeys_before_attach_MediaSource.html]
 skip-if = toolkit == 'android' # bug 1149374
 [test_eme_stream_capture_blocked_case1.html]
 tags=msg capturestream
deleted file mode 100644
--- a/dom/media/test/test_eme_persistent_sessions.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-  <title>Test Encrypted Media Extensions</title>
-  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
-  <script type="text/javascript" src="manifest.js"></script>
-  <script type="text/javascript" src="eme.js"></script>
-</head>
-<body>
-<pre id="test">
-<script class="testbody" type="text/javascript">
-var manager = new MediaTestManager;
-
-function UsableKeyIdsMatch(usableKeyIds, expectedKeyIds) {
-  var hexKeyIds = usableKeyIds.map(function(keyId) {
-    return Base64ToHex(window.btoa(ArrayBufferToString(keyId)));
-  }).sort();
-  var expected = Object.keys(expectedKeyIds).sort();
-  if (expected.length != hexKeyIds.length) {
-    return false;
-  }
-  for (var i = 0; i < hexKeyIds.length; i++) {
-    if (hexKeyIds[i] != expected[i]){
-      return false;
-    }
-  }
-  return true;
-}
-
-function AwaitAllKeysUsable(session, keys, token) {
-  return new Promise(function(resolve, reject) {
-    function check() {
-      var map = session.keyStatuses;
-      var usableKeyIds = [];
-      for (var [key, val] of map.entries()) {
-        is(val, "usable", token + ": key status should be usable");
-        usableKeyIds.push(key);
-      }
-      if (UsableKeyIdsMatch(usableKeyIds, keys)) {
-        session.removeEventListener("keystatuseschange", check);
-        resolve();
-      }
-    }
-    session.addEventListener("keystatuseschange", check);
-    check(); // in case all keys are already usable
-  });
-}
-
-function AwaitAllKeysNotUsable(session, token) {
-  return new Promise(function(resolve, reject) {
-    function check() {
-      var map = session.keyStatuses;
-      if (map.size == 0) {
-        session.removeEventListener("keystatuseschange", check);
-        resolve();
-      }
-    }
-    session.addEventListener("keystatuseschange", check);
-    check(); // in case all keys are already removed
-  });
-}
-
-function startTest(test, token)
-{
-  manager.started(token);
-
-  var recreatedSession; // will have remove() called on it.
-
-  var keySystemAccess;
-
-  var v = SetupEME(test, token,
-    {
-      onsessionupdated: function(session) {
-        Log(token, "Session created");
-        var sessionId;
-
-        // Once the session has loaded and has all its keys usable, close
-        // all sessions without calling remove() on them.
-        AwaitAllKeysUsable(session, test.keys, token)
-        .then(function() {
-          sessionId = session.sessionId;
-          Log(token, "Closing session with id=" + sessionId);
-          return session.close();
-        })
-
-        // Once the session is closed, reload the MediaKeys and reload the session
-        .then(function() {
-          return navigator.requestMediaKeySystemAccess(CLEARKEY_KEYSYSTEM, gCencMediaKeySystemConfig);
-        })
-
-        .then(function(requestedKeySystemAccess) {
-          keySystemAccess = requestedKeySystemAccess;
-          return keySystemAccess.createMediaKeys();
-        })
-
-        .then(function(mediaKeys) {
-          Log(token, "re-created MediaKeys object ok");
-          recreatedSession = mediaKeys.createSession("persistent-license");
-          Log(token, "Created recreatedSession, loading sessionId=" + sessionId);
-          return recreatedSession.load(sessionId);
-        })
-
-        .then(function(suceeded) {
-          if (suceeded) {
-            return Promise.resolve();
-          } else {
-            return Promise.reject("Fail to load recreatedSession, sessionId=" + sessionId);
-          }
-        })
-
-        .then(function() {
-          return AwaitAllKeysUsable(recreatedSession, test.keys, token);
-        })
-
-        .then(function() {
-          Log(token, "re-loaded persistent session, all keys still usable");
-          return Promise.all([AwaitAllKeysNotUsable(recreatedSession, token), recreatedSession.remove()]);
-        })
-
-        .then(function() {
-          Log(token, "removed session, all keys unusable.");
-          // Attempt to recreate the session, the attempt should fail.
-          return keySystemAccess.createMediaKeys();
-        })
-
-        .then(function(mediaKeys) {
-          Log(token, "re-re-created MediaKeys object ok");
-          // Trying to load the removed persistent session should fail.
-          return mediaKeys.createSession("persistent-license").load(sessionId);
-        })
-
-        .then(function(suceeded) {
-          is(suceeded, false, token + " we expect the third session creation to fail, as the session should have been removed.");
-          manager.finished(token);
-        })
-
-        .catch(function(reason) {
-          // Catch rejections if any.
-          ok(false, token + " rejected, reason=" + reason);
-          manager.finished(token);
-        });
-
-      },
-      sessionType: "persistent-license",
-    }
-  );
-
-  LoadTestWithManagedLoadToken(test, v, manager, token,
-                               { onlyLoadFirstFragments:2, noEndOfStream:false });
-}
-
-function beginTest() {
-  manager.runTests(gEMETests.filter(t => t.sessionCount === 1), startTest);
-}
-
-if (!IsMacOSSnowLeopardOrEarlier()) {
-  SimpleTest.waitForExplicitFinish();
-  SetupEMEPref(beginTest);
-} else {
-  todo(false, "Test disabled on this platform.");
-}
-</script>
-</pre>
-</body>
-</html>
--- a/dom/media/test/test_eme_requestKeySystemAccess.html
+++ b/dom/media/test/test_eme_requestKeySystemAccess.html
@@ -243,58 +243,31 @@ var tests = [
       {
         label: SUPPORTED_LABEL,
         initDataTypes: ['cenc'],
         videoCapabilities: [{contentType: 'video/mp4'}],
         sessionTypes: ['temporary','persistent-license'],
         persistentState: 'required',
       }
     ],
-    expectedConfig: {
-      label: SUPPORTED_LABEL,
-      initDataTypes: ['cenc'],
-      videoCapabilities: [{contentType: 'video/mp4'}],
-      sessionTypes: ['temporary','persistent-license'],
-      persistentState: 'required',
-    },
-    shouldPass: true,
+    shouldPass: false,
   },
   {
     name: 'Persistent sessions not allowed when persistentState prohibited',
     options: [
       {
         initDataTypes: ['cenc'],
         videoCapabilities: [{contentType: 'video/mp4'}],
         sessionTypes: ['temporary','persistent-license'],
         persistentState: 'not-allowed',
       }
     ],
     shouldPass: false,
   },
   {
-    name: 'Persistent sessions; should bump optional persistState to required',
-    options: [
-      {
-        label: SUPPORTED_LABEL,
-        initDataTypes: ['cenc'],
-        videoCapabilities: [{contentType: 'video/mp4'}],
-        sessionTypes: ['temporary','persistent-license'],
-        persistentState: 'optional',
-      }
-    ],
-    expectedConfig: {
-      label: SUPPORTED_LABEL,
-      initDataTypes: ['cenc'],
-      videoCapabilities: [{contentType: 'video/mp4'}],
-      sessionTypes: ['temporary','persistent-license'],
-      persistentState: 'required',
-    },
-    shouldPass: true,
-  },
-  {
     name: 'Persistent-usage-record should not be supported by ClearKey',
     options: [
       {
         initDataTypes: ['cenc'],
         videoCapabilities: [{contentType: 'video/mp4'}],
         sessionTypes: ['persistent-usage-record'],
         persistentState: 'required',
       }