[EME] Add support of multi keys from different sessions in CDMinstanceClearKey
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2018 12:07:42 +0000 (12:07 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Jan 2018 12:07:42 +0000 (12:07 +0000)
https://bugs.webkit.org/show_bug.cgi?id=180083

Patch by Yacine Bandou <yacine.bandou_ext@softathome.com> on 2018-01-23
Reviewed by Xabier Rodriguez-Calvar.

Add support of multi keys from different MediaKeySession in CDMInstanceClearKey.

Currently the CDMInstanceClearKey manages two "m_keys", one is a WTF::Vector
where it stores the list of last added keys, an other which is defined in the
ClearKeyState::singleton it is a WTF::HashMap, in this last one, it stores the
keys lists of each created session.

The method "keys()" of CDMInstanceClearKey returns the first "m_keys" which
contains just the list of last keys.

The goal of this commit is to return all keys lists of all sessions, thus
we remove the "m_keys" which is WTF::Vector and we modify the method
"keys()" to return all keys lists, which is stored in "m_keys" WTF::HashMap,
in one Vector instead of return just the list of last keys.

* platform/encryptedmedia/clearkey/CDMClearKey.cpp:
(WebCore::CDMInstanceClearKey::keys const):
(WebCore::CDMInstanceClearKey::updateLicense):
* platform/encryptedmedia/clearkey/CDMClearKey.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@227409 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.cpp
Source/WebCore/platform/encryptedmedia/clearkey/CDMClearKey.h

index 55c21d6..04037a0 100644 (file)
@@ -1,3 +1,30 @@
+2018-01-23  Yacine Bandou  <yacine.bandou_ext@softathome.com>
+
+        [EME] Add support of multi keys from different sessions in CDMinstanceClearKey
+        https://bugs.webkit.org/show_bug.cgi?id=180083
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Add support of multi keys from different MediaKeySession in CDMInstanceClearKey.
+
+        Currently the CDMInstanceClearKey manages two "m_keys", one is a WTF::Vector
+        where it stores the list of last added keys, an other which is defined in the
+        ClearKeyState::singleton it is a WTF::HashMap, in this last one, it stores the
+        keys lists of each created session.
+
+        The method "keys()" of CDMInstanceClearKey returns the first "m_keys" which
+        contains just the list of last keys.
+
+        The goal of this commit is to return all keys lists of all sessions, thus
+        we remove the "m_keys" which is WTF::Vector and we modify the method
+        "keys()" to return all keys lists, which is stored in "m_keys" WTF::HashMap,
+        in one Vector instead of return just the list of last keys.
+
+        * platform/encryptedmedia/clearkey/CDMClearKey.cpp:
+        (WebCore::CDMInstanceClearKey::keys const):
+        (WebCore::CDMInstanceClearKey::updateLicense):
+        * platform/encryptedmedia/clearkey/CDMClearKey.h:
+
 2018-01-22  Simon Fraser  <simon.fraser@apple.com>
 
         Optimize building the non-fast scrollable region with multiple iframes
index 9784f93..85551bf 100644 (file)
@@ -480,6 +480,16 @@ void CDMInstanceClearKey::requestLicense(LicenseType, const AtomicString& initDa
         });
 }
 
+const Vector<CDMInstanceClearKey::Key> CDMInstanceClearKey::keys() const
+{
+    // Return the keys of all sessions.
+    Vector<CDMInstanceClearKey::Key> allKeys { };
+    for (auto& key : ClearKeyState::singleton().keys().values())
+        allKeys.appendVector(key);
+
+    return allKeys;
+}
+
 void CDMInstanceClearKey::updateLicense(const String& sessionId, LicenseType, const SharedBuffer& response, LicenseUpdateCallback callback)
 {
     // Use a helper functor that schedules the callback dispatch, avoiding
@@ -565,9 +575,6 @@ void CDMInstanceClearKey::updateLicense(const String& sessionId, LicenseType, co
             changedKeys = WTFMove(keyStatusVector);
         }
 
-        // Cache the key information Vector on CDMInstance for easier access from the pipeline.
-        m_keys = keyVector;
-
         dispatchCallback(false, WTFMove(changedKeys), SuccessValue::Succeeded);
         return;
     }
@@ -576,7 +583,6 @@ void CDMInstanceClearKey::updateLicense(const String& sessionId, LicenseType, co
     if (parseLicenseReleaseAcknowledgementFormat(*root)) {
         // FIXME: Retrieve the key ID information and use it to validate the keys for this sessionId.
         ClearKeyState::singleton().keys().remove(sessionId);
-        m_keys.clear();
         dispatchCallback(true, std::nullopt, SuccessValue::Succeeded);
         return;
     }
index 0784543..d98fe07 100644 (file)
@@ -102,11 +102,10 @@ public:
         RefPtr<SharedBuffer> keyValueData;
     };
 
-    const Vector<Key>& keys() const { return m_keys; }
+    const Vector<Key> keys() const;
 
 private:
     WeakPtrFactory<CDMInstanceClearKey> m_weakPtrFactory;
-    Vector<Key> m_keys;
 };
 
 } // namespace WebCore