[EME] Allow CDMInstance type traits specialization
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Jul 2017 08:13:55 +0000 (08:13 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Jul 2017 08:13:55 +0000 (08:13 +0000)
https://bugs.webkit.org/show_bug.cgi?id=174886

Reviewed by Xabier Rodriguez-Calvar.

Allow using the trait-based type casting for the CDMInstance class and its
derivatives. ImplementationType enumeration values are to be used and
returned from the new implementationType() virtual method. This method is
leveraged in the type trait specialization that enables using is<>() and
downcast<>() helpers for CDMInstance objects.

This will allow differentiating between CDMInstance implementations once
the media playback pipeline has to retrieve any key information that's
necessary for playback of encrypted content.

MockCDMInstance class overrides the implementationType() method, returning
the ImplementationType::Mock value. Type trait specializations for this
class aren't added since they're not needed anywhere at this point.

* platform/encryptedmedia/CDMInstance.h:
* testing/MockCDMFactory.h:

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

Source/WebCore/ChangeLog
Source/WebCore/platform/encryptedmedia/CDMInstance.h
Source/WebCore/testing/MockCDMFactory.h

index d967719..99d92b3 100644 (file)
@@ -1,5 +1,29 @@
 2017-07-27  Zan Dobersek  <zdobersek@igalia.com>
 
+        [EME] Allow CDMInstance type traits specialization
+        https://bugs.webkit.org/show_bug.cgi?id=174886
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Allow using the trait-based type casting for the CDMInstance class and its
+        derivatives. ImplementationType enumeration values are to be used and
+        returned from the new implementationType() virtual method. This method is
+        leveraged in the type trait specialization that enables using is<>() and
+        downcast<>() helpers for CDMInstance objects.
+
+        This will allow differentiating between CDMInstance implementations once
+        the media playback pipeline has to retrieve any key information that's
+        necessary for playback of encrypted content.
+
+        MockCDMInstance class overrides the implementationType() method, returning
+        the ImplementationType::Mock value. Type trait specializations for this
+        class aren't added since they're not needed anywhere at this point.
+
+        * platform/encryptedmedia/CDMInstance.h:
+        * testing/MockCDMFactory.h:
+
+2017-07-27  Zan Dobersek  <zdobersek@igalia.com>
+
         [GCrypt] Key serialization support
         https://bugs.webkit.org/show_bug.cgi?id=173883
 
index 0f1a876..8a33beb 100644 (file)
@@ -34,6 +34,7 @@
 #include <wtf/Forward.h>
 #include <wtf/Optional.h>
 #include <wtf/RefCounted.h>
+#include <wtf/TypeCasts.h>
 #include <wtf/Vector.h>
 
 namespace WebCore {
@@ -46,6 +47,12 @@ class CDMInstance : public RefCounted<CDMInstance> {
 public:
     virtual ~CDMInstance() { }
 
+    enum class ImplementationType {
+        Mock,
+    };
+
+    virtual ImplementationType implementationType() const = 0;
+
     enum SuccessValue {
         Failed,
         Succeeded,
@@ -90,4 +97,9 @@ public:
 
 } // namespace WebCore
 
+#define SPECIALIZE_TYPE_TRAITS_CDM_INSTANCE(ToValueTypeName, ImplementationTypeName) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(ToValueTypeName) \
+static bool isType(const WebCore::CDMInstance& instance) { return instance.implementationType() == ImplementationTypeName; } \
+SPECIALIZE_TYPE_TRAITS_END()
+
 #endif
index 9e36a88..cfee400 100644 (file)
@@ -127,6 +127,7 @@ public:
     MockCDMInstance(WeakPtr<MockCDM>);
 
 private:
+    ImplementationType implementationType() const final { return ImplementationType::Mock; }
     SuccessValue initializeWithConfiguration(const MediaKeySystemConfiguration&) final;
     SuccessValue setDistinctiveIdentifiersAllowed(bool) final;
     SuccessValue setPersistentStateAllowed(bool) final;