[EME] Push CDMInstance, CDMPrivate and associated types into the Platform layer
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jul 2017 06:09:56 +0000 (06:09 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jul 2017 06:09:56 +0000 (06:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=174496

Reviewed by Xabier Rodriguez-Calvar.

Move the CDMInstance and CDMPrivate interfaces into the platform layer, enabling
implementations of specific key systems at that level, as well as integration with
the MediaPlayerPrivate stack without any layering violations.

While the platform layer still uses the WebCore namespace, the two interface files
have now been moved under the platform/encryptedmedia/ directory and out of the
Modules/encryptedmedia/ directory where the Web-facing API implementation resides.

The two interfaces integrated closely with the Web-facing enumerations and
dictionaries: MediaKeyMessageType, MediaKeySessionType, MediaKeyStatus,
MediaKeySystemConfiguration, MediaKeySystemCapability, MediaKeysRequirement
and MediaKeysRestrictions. Definitions of these types are also moved to the
platform layer without any changes (apart from renaming), and the previous
types now alias against the types now located in the platform layer.

No new tests -- no change in behavior.

* CMakeLists.txt:
* Modules/encryptedmedia/CDM.cpp:
* Modules/encryptedmedia/CDM.h:
* Modules/encryptedmedia/MediaKeyMessageType.h:
* Modules/encryptedmedia/MediaKeySessionType.h:
* Modules/encryptedmedia/MediaKeyStatus.h:
* Modules/encryptedmedia/MediaKeySystemAccess.cpp:
* Modules/encryptedmedia/MediaKeySystemAccess.h:
* Modules/encryptedmedia/MediaKeySystemConfiguration.h:
* Modules/encryptedmedia/MediaKeySystemMediaCapability.h:
* Modules/encryptedmedia/MediaKeysRequirement.h:
* Modules/encryptedmedia/MediaKeysRestrictions.h:
* platform/encryptedmedia/CDMInstance.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMInstance.h.
* platform/encryptedmedia/CDMKeyStatus.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyStatus.h.
* platform/encryptedmedia/CDMKeySystemConfiguration.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.h.
* platform/encryptedmedia/CDMMediaCapability.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemMediaCapability.h.
* platform/encryptedmedia/CDMMessageType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageType.h.
* platform/encryptedmedia/CDMPrivate.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivate.h.
* platform/encryptedmedia/CDMRequirement.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRequirement.h.
* platform/encryptedmedia/CDMRestrictions.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRestrictions.h.
* platform/encryptedmedia/CDMSessionType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySessionType.h.

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

22 files changed:
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/Modules/encryptedmedia/CDM.cpp
Source/WebCore/Modules/encryptedmedia/CDM.h
Source/WebCore/Modules/encryptedmedia/MediaKeyMessageType.h
Source/WebCore/Modules/encryptedmedia/MediaKeySessionType.h
Source/WebCore/Modules/encryptedmedia/MediaKeyStatus.h
Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.cpp
Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.h
Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.h
Source/WebCore/Modules/encryptedmedia/MediaKeySystemMediaCapability.h
Source/WebCore/Modules/encryptedmedia/MediaKeysRequirement.h
Source/WebCore/Modules/encryptedmedia/MediaKeysRestrictions.h
Source/WebCore/platform/encryptedmedia/CDMInstance.h [moved from Source/WebCore/Modules/encryptedmedia/CDMInstance.h with 90% similarity]
Source/WebCore/platform/encryptedmedia/CDMKeyStatus.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMKeySystemConfiguration.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMMediaCapability.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMMessageType.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMPrivate.h [moved from Source/WebCore/Modules/encryptedmedia/CDMPrivate.h with 73% similarity]
Source/WebCore/platform/encryptedmedia/CDMRequirement.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMRestrictions.h [new file with mode: 0644]
Source/WebCore/platform/encryptedmedia/CDMSessionType.h [new file with mode: 0644]

index 8add1a3..a8bf038 100644 (file)
@@ -83,6 +83,7 @@ set(WebCore_INCLUDE_DIRECTORIES
     "${WEBCORE_DIR}/platform/animation"
     "${WEBCORE_DIR}/platform/audio"
     "${WEBCORE_DIR}/platform/crypto"
+    "${WEBCORE_DIR}/platform/encryptedmedia"
     "${WEBCORE_DIR}/platform/gamepad"
     "${WEBCORE_DIR}/platform/gamepad/deprecated"
     "${WEBCORE_DIR}/platform/gamepad/linux"
index c5c5636..18c93ab 100644 (file)
@@ -1,5 +1,51 @@
 2017-07-19  Zan Dobersek  <zdobersek@igalia.com>
 
+        [EME] Push CDMInstance, CDMPrivate and associated types into the Platform layer
+        https://bugs.webkit.org/show_bug.cgi?id=174496
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Move the CDMInstance and CDMPrivate interfaces into the platform layer, enabling
+        implementations of specific key systems at that level, as well as integration with
+        the MediaPlayerPrivate stack without any layering violations.
+
+        While the platform layer still uses the WebCore namespace, the two interface files
+        have now been moved under the platform/encryptedmedia/ directory and out of the
+        Modules/encryptedmedia/ directory where the Web-facing API implementation resides.
+
+        The two interfaces integrated closely with the Web-facing enumerations and
+        dictionaries: MediaKeyMessageType, MediaKeySessionType, MediaKeyStatus,
+        MediaKeySystemConfiguration, MediaKeySystemCapability, MediaKeysRequirement
+        and MediaKeysRestrictions. Definitions of these types are also moved to the
+        platform layer without any changes (apart from renaming), and the previous
+        types now alias against the types now located in the platform layer.
+
+        No new tests -- no change in behavior.
+
+        * CMakeLists.txt:
+        * Modules/encryptedmedia/CDM.cpp:
+        * Modules/encryptedmedia/CDM.h:
+        * Modules/encryptedmedia/MediaKeyMessageType.h:
+        * Modules/encryptedmedia/MediaKeySessionType.h:
+        * Modules/encryptedmedia/MediaKeyStatus.h:
+        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
+        * Modules/encryptedmedia/MediaKeySystemAccess.h:
+        * Modules/encryptedmedia/MediaKeySystemConfiguration.h:
+        * Modules/encryptedmedia/MediaKeySystemMediaCapability.h:
+        * Modules/encryptedmedia/MediaKeysRequirement.h:
+        * Modules/encryptedmedia/MediaKeysRestrictions.h:
+        * platform/encryptedmedia/CDMInstance.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMInstance.h.
+        * platform/encryptedmedia/CDMKeyStatus.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyStatus.h.
+        * platform/encryptedmedia/CDMKeySystemConfiguration.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.h.
+        * platform/encryptedmedia/CDMMediaCapability.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySystemMediaCapability.h.
+        * platform/encryptedmedia/CDMMessageType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeyMessageType.h.
+        * platform/encryptedmedia/CDMPrivate.h: Renamed from Source/WebCore/Modules/encryptedmedia/CDMPrivate.h.
+        * platform/encryptedmedia/CDMRequirement.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRequirement.h.
+        * platform/encryptedmedia/CDMRestrictions.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeysRestrictions.h.
+        * platform/encryptedmedia/CDMSessionType.h: Copied from Source/WebCore/Modules/encryptedmedia/MediaKeySessionType.h.
+
+2017-07-19  Zan Dobersek  <zdobersek@igalia.com>
+
         Unreviewed follow-up to r219674.
 
         * page/scrolling/coordinatedgraphics/ScrollingCoordinatorCoordinatedGraphics.cpp:
index d3d0966..d72227c 100644 (file)
@@ -31,7 +31,7 @@
 #include "CDMPrivate.h"
 #include "Document.h"
 #include "InitDataRegistry.h"
-#include "MediaKeysRestrictions.h"
+#include "MediaKeysRequirement.h"
 #include "MediaPlayer.h"
 #include "NotImplemented.h"
 #include "ParsedContentType.h"
index f656afd..b08baf1 100644 (file)
 #if ENABLE(ENCRYPTED_MEDIA)
 
 #include "ContextDestructionObserver.h"
+#include "MediaKeySessionType.h"
 #include "MediaKeySystemConfiguration.h"
+#include "MediaKeySystemMediaCapability.h"
+#include "MediaKeysRestrictions.h"
 #include "SharedBuffer.h"
 #include <wtf/Function.h>
 #include <wtf/HashSet.h>
@@ -46,8 +49,6 @@ class Document;
 class ScriptExecutionContext;
 class SharedBuffer;
 
-struct MediaKeysRestrictions;
-
 class CDMFactory {
 public:
     virtual ~CDMFactory() { };
index da7361e..1f6d086 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
+#include "CDMMessageType.h"
+
 namespace WebCore {
 
-enum class MediaKeyMessageType {
-    LicenseRequest,
-    LicenseRenewal,
-    LicenseRelease,
-    IndividualizationRequest
-};
+using MediaKeyMessageType = CDMMessageType;
 
 } // namespace WebCore
 
index f31c87c..d30d390 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
+#include "CDMSessionType.h"
+
 namespace WebCore {
 
-enum class MediaKeySessionType {
-    Temporary,
-    PersistentUsageRecord,
-    PersistentLicense
-};
+using MediaKeySessionType = CDMSessionType;
 
 } // namespace WebCore
 
index c3cf4c8..cbd643f 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
+#include "CDMKeyStatus.h"
+
 namespace WebCore {
 
-enum class MediaKeyStatus {
-    Usable,
-    Expired,
-    Released,
-    OutputRestricted,
-    OutputDownscaled,
-    StatusPending,
-    InternalError
-};
+using MediaKeyStatus = CDMKeyStatus;
 
 } // namespace WebCore
 
index d84a48d..a871e4e 100644 (file)
@@ -34,8 +34,8 @@
 #include "CDM.h"
 #include "CDMInstance.h"
 #include "JSMediaKeys.h"
-#include "MediaKeySystemConfiguration.h"
 #include "MediaKeys.h"
+#include "MediaKeysRequirement.h"
 
 namespace WebCore {
 
index 0a3b6e1..284d949 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "GenericTaskQueue.h"
 #include "JSDOMPromiseDeferred.h"
+#include "MediaKeySystemConfiguration.h"
 #include <wtf/RefCounted.h>
 #include <wtf/text/WTFString.h>
 
@@ -40,8 +41,6 @@ namespace WebCore {
 class CDM;
 class MediaKeys;
 
-struct MediaKeySystemConfiguration;
-
 class MediaKeySystemAccess : public RefCounted<MediaKeySystemAccess> {
 public:
     static Ref<MediaKeySystemAccess> create(const String& keySystem, MediaKeySystemConfiguration&&, Ref<CDM>&&);
index 7f358fd..2a0bc74 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
-#include "MediaKeySessionType.h"
-#include "MediaKeySystemMediaCapability.h"
-#include "MediaKeysRequirement.h"
-#include <wtf/Vector.h>
-#include <wtf/text/WTFString.h>
+#include "CDMKeySystemConfiguration.h"
 
 namespace WebCore {
 
-struct MediaKeySystemConfiguration {
-    using KeysRequirement = MediaKeysRequirement;
-
-    String label;
-    Vector<String> initDataTypes;
-    Vector<MediaKeySystemMediaCapability> audioCapabilities;
-    Vector<MediaKeySystemMediaCapability> videoCapabilities;
-    MediaKeysRequirement distinctiveIdentifier;
-    MediaKeysRequirement persistentState;
-    Vector<MediaKeySessionType> sessionTypes;
-};
+using MediaKeySystemConfiguration = CDMKeySystemConfiguration;
 
 } // namespace WebCore
 
index ba72005..c40c17b 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
-#include <wtf/text/WTFString.h>
+#include "CDMMediaCapability.h"
 
 namespace WebCore {
 
-struct MediaKeySystemMediaCapability {
-    String contentType;
-    String robustness;
-};
+using MediaKeySystemMediaCapability = CDMMediaCapability;
 
 } // namespace WebCore
 
index c6af6b4..4953350 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
+#include "CDMRequirement.h"
+
 namespace WebCore {
 
-enum class MediaKeysRequirement {
-    Required,
-    Optional,
-    NotAllowed
-};
+using MediaKeysRequirement = CDMRequirement;
 
 } // namespace WebCore
 
index 0be8567..06bd72d 100644 (file)
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
-#include <wtf/HashSet.h>
+#include "CDMRestrictions.h"
 
 namespace WebCore {
 
-struct MediaKeysRestrictions {
-    bool distinctiveIdentifierDenied { false };
-    bool persistentStateDenied { false };
-    HashSet<String> deniedSessionTypes;
-};
+using MediaKeysRestrictions = CDMRestrictions;
 
 } // namespace WebCore
 
@@ -27,9 +27,9 @@
 
 #if ENABLE(ENCRYPTED_MEDIA)
 
-#include "MediaKeyMessageType.h"
-#include "MediaKeySessionType.h"
-#include "MediaKeyStatus.h"
+#include "CDMKeyStatus.h"
+#include "CDMMessageType.h"
+#include "CDMSessionType.h"
 #include <utility>
 #include <wtf/Forward.h>
 #include <wtf/Optional.h>
 
 namespace WebCore {
 
-struct MediaKeySystemConfiguration;
 class SharedBuffer;
 
+struct CDMKeySystemConfiguration;
+
 class CDMInstance : public RefCounted<CDMInstance> {
 public:
     virtual ~CDMInstance() { }
@@ -50,11 +51,11 @@ public:
         Succeeded,
     };
 
-    using LicenseType = MediaKeySessionType;
-    using KeyStatus = MediaKeyStatus;
-    using MessageType = MediaKeyMessageType;
+    using KeyStatus = CDMKeyStatus;
+    using LicenseType = CDMSessionType;
+    using MessageType = CDMMessageType;
 
-    virtual SuccessValue initializeWithConfiguration(const MediaKeySystemConfiguration&) = 0;
+    virtual SuccessValue initializeWithConfiguration(const CDMKeySystemConfiguration&) = 0;
     virtual SuccessValue setDistinctiveIdentifiersAllowed(bool) = 0;
     virtual SuccessValue setPersistentStateAllowed(bool) = 0;
     virtual SuccessValue setServerCertificate(Ref<SharedBuffer>&&) = 0;
@@ -87,6 +88,6 @@ public:
     virtual void storeRecordOfKeyUsage(const String& sessionId) = 0;
 };
 
-}
+} // namespace WebCore
 
 #endif
diff --git a/Source/WebCore/platform/encryptedmedia/CDMKeyStatus.h b/Source/WebCore/platform/encryptedmedia/CDMKeyStatus.h
new file mode 100644 (file)
index 0000000..ad96962
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+namespace WebCore {
+
+enum class CDMKeyStatus {
+    Usable,
+    Expired,
+    Released,
+    OutputRestricted,
+    OutputDownscaled,
+    StatusPending,
+    InternalError
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
diff --git a/Source/WebCore/platform/encryptedmedia/CDMKeySystemConfiguration.h b/Source/WebCore/platform/encryptedmedia/CDMKeySystemConfiguration.h
new file mode 100644 (file)
index 0000000..3854921
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+#include "CDMMediaCapability.h"
+#include "CDMRequirement.h"
+#include "CDMSessionType.h"
+#include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+struct CDMKeySystemConfiguration {
+    using KeysRequirement = CDMRequirement;
+
+    String label;
+    Vector<String> initDataTypes;
+    Vector<CDMMediaCapability> audioCapabilities;
+    Vector<CDMMediaCapability> videoCapabilities;
+    CDMRequirement distinctiveIdentifier;
+    CDMRequirement persistentState;
+    Vector<CDMSessionType> sessionTypes;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
diff --git a/Source/WebCore/platform/encryptedmedia/CDMMediaCapability.h b/Source/WebCore/platform/encryptedmedia/CDMMediaCapability.h
new file mode 100644 (file)
index 0000000..13ded25
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+struct CDMMediaCapability {
+    String contentType;
+    String robustness;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
diff --git a/Source/WebCore/platform/encryptedmedia/CDMMessageType.h b/Source/WebCore/platform/encryptedmedia/CDMMessageType.h
new file mode 100644 (file)
index 0000000..e5f796a
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+namespace WebCore {
+
+enum class CDMMessageType {
+    LicenseRequest,
+    LicenseRenewal,
+    LicenseRelease,
+    IndividualizationRequest
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
 #if ENABLE(ENCRYPTED_MEDIA)
 
 #include "CDMInstance.h"
-#include "MediaKeySessionType.h"
-#include "MediaKeysRequirement.h"
+#include "CDMRequirement.h"
+#include "CDMSessionType.h"
 #include <wtf/Forward.h>
 
 namespace WebCore {
 
-struct MediaKeySystemConfiguration;
-struct MediaKeysRestrictions;
+struct CDMKeySystemConfiguration;
+struct CDMRestrictions;
 
 class CDMPrivate {
 public:
     virtual ~CDMPrivate() { }
 
     virtual bool supportsInitDataType(const AtomicString&) const = 0;
-    virtual bool supportsConfiguration(const MediaKeySystemConfiguration&) const = 0;
-    virtual bool supportsConfigurationWithRestrictions(const MediaKeySystemConfiguration&, const MediaKeysRestrictions&) const = 0;
-    virtual bool supportsSessionTypeWithConfiguration(MediaKeySessionType&, const MediaKeySystemConfiguration&) const = 0;
+    virtual bool supportsConfiguration(const CDMKeySystemConfiguration&) const = 0;
+    virtual bool supportsConfigurationWithRestrictions(const CDMKeySystemConfiguration&, const CDMRestrictions&) const = 0;
+    virtual bool supportsSessionTypeWithConfiguration(CDMSessionType&, const CDMKeySystemConfiguration&) const = 0;
     virtual bool supportsRobustness(const String&) const = 0;
-    virtual MediaKeysRequirement distinctiveIdentifiersRequirement(const MediaKeySystemConfiguration&, const MediaKeysRestrictions&) const = 0;
-    virtual MediaKeysRequirement persistentStateRequirement(const MediaKeySystemConfiguration&, const MediaKeysRestrictions&) const = 0;
-    virtual bool distinctiveIdentifiersAreUniquePerOriginAndClearable(const MediaKeySystemConfiguration&) const = 0;
+    virtual CDMRequirement distinctiveIdentifiersRequirement(const CDMKeySystemConfiguration&, const CDMRestrictions&) const = 0;
+    virtual CDMRequirement persistentStateRequirement(const CDMKeySystemConfiguration&, const CDMRestrictions&) const = 0;
+    virtual bool distinctiveIdentifiersAreUniquePerOriginAndClearable(const CDMKeySystemConfiguration&) const = 0;
     virtual RefPtr<CDMInstance> createInstance() = 0;
     virtual void loadAndInitialize() = 0;
     virtual bool supportsServerCertificates() const = 0;
diff --git a/Source/WebCore/platform/encryptedmedia/CDMRequirement.h b/Source/WebCore/platform/encryptedmedia/CDMRequirement.h
new file mode 100644 (file)
index 0000000..69ac12d
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+namespace WebCore {
+
+enum class CDMRequirement {
+    Required,
+    Optional,
+    NotAllowed
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
diff --git a/Source/WebCore/platform/encryptedmedia/CDMRestrictions.h b/Source/WebCore/platform/encryptedmedia/CDMRestrictions.h
new file mode 100644 (file)
index 0000000..9e3bc0b
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+#include <wtf/HashSet.h>
+
+namespace WebCore {
+
+struct CDMRestrictions {
+    bool distinctiveIdentifierDenied { false };
+    bool persistentStateDenied { false };
+    HashSet<String> deniedSessionTypes;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)
diff --git a/Source/WebCore/platform/encryptedmedia/CDMSessionType.h b/Source/WebCore/platform/encryptedmedia/CDMSessionType.h
new file mode 100644 (file)
index 0000000..60574a5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Metrological Group B.V.
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above
+ *    copyright notice, this list of conditions and the following
+ *    disclaimer in the documentation and/or other materials provided
+ *    with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(ENCRYPTED_MEDIA)
+
+namespace WebCore {
+
+enum class CDMSessionType {
+    Temporary,
+    PersistentUsageRecord,
+    PersistentLicense
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(ENCRYPTED_MEDIA)