[EME] Push CDMFactory into the platform layer
[WebKit-https.git] / Source / WebCore / platform / encryptedmedia / clearkey / CDMClearKey.h
1 /*
2  * Copyright (C) 2016 Metrological Group B.V.
3  * Copyright (C) 2016 Igalia S.L.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright
10  *    notice, this list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above
12  *    copyright notice, this list of conditions and the following
13  *    disclaimer in the documentation and/or other materials provided
14  *    with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 #pragma once
30
31 #if ENABLE(ENCRYPTED_MEDIA)
32
33 #include "CDMFactory.h"
34 #include "CDMInstance.h"
35 #include "CDMPrivate.h"
36
37 namespace WebCore {
38
39 class CDMFactoryClearKey final : public CDMFactory {
40 public:
41     CDMFactoryClearKey();
42     virtual ~CDMFactoryClearKey();
43
44     std::unique_ptr<CDMPrivate> createCDM() override;
45     bool supportsKeySystem(const String&) override;
46 };
47
48 class CDMPrivateClearKey final : public CDMPrivate {
49 public:
50     CDMPrivateClearKey();
51     virtual ~CDMPrivateClearKey();
52
53     bool supportsInitDataType(const AtomicString&) const override;
54     bool supportsConfiguration(const CDMKeySystemConfiguration&) const override;
55     bool supportsConfigurationWithRestrictions(const CDMKeySystemConfiguration&, const CDMRestrictions&) const override;
56     bool supportsSessionTypeWithConfiguration(CDMSessionType&, const CDMKeySystemConfiguration&) const override;
57     bool supportsRobustness(const String&) const override;
58     CDMRequirement distinctiveIdentifiersRequirement(const CDMKeySystemConfiguration&, const CDMRestrictions&) const override;
59     CDMRequirement persistentStateRequirement(const CDMKeySystemConfiguration&, const CDMRestrictions&) const override;
60     bool distinctiveIdentifiersAreUniquePerOriginAndClearable(const CDMKeySystemConfiguration&) const override;
61     RefPtr<CDMInstance> createInstance() override;
62     void loadAndInitialize() override;
63     bool supportsServerCertificates() const override;
64     bool supportsSessions() const override;
65     bool supportsInitData(const AtomicString&, const SharedBuffer&) const override;
66     RefPtr<SharedBuffer> sanitizeResponse(const SharedBuffer&) const override;
67     std::optional<String> sanitizeSessionId(const String&) const override;
68 };
69
70 class CDMInstanceClearKey final : public CDMInstance {
71 public:
72     CDMInstanceClearKey();
73     virtual ~CDMInstanceClearKey();
74
75     ImplementationType implementationType() const { return ImplementationType::ClearKey; }
76
77     SuccessValue initializeWithConfiguration(const CDMKeySystemConfiguration&) override;
78     SuccessValue setDistinctiveIdentifiersAllowed(bool) override;
79     SuccessValue setPersistentStateAllowed(bool) override;
80     SuccessValue setServerCertificate(Ref<SharedBuffer>&&) override;
81
82     void requestLicense(LicenseType, const AtomicString& initDataType, Ref<SharedBuffer>&& initData, LicenseCallback) override;
83     void updateLicense(const String&, LicenseType, const SharedBuffer&, LicenseUpdateCallback) override;
84     void loadSession(LicenseType, const String&, const String&, LoadSessionCallback) override;
85     void closeSession(const String&, CloseSessionCallback) override;
86     void removeSessionData(const String&, LicenseType, RemoveSessionDataCallback) override;
87     void storeRecordOfKeyUsage(const String&) override;
88 };
89
90 } // namespace WebCore
91
92 SPECIALIZE_TYPE_TRAITS_CDM_INSTANCE(WebCore::CDMInstanceClearKey, WebCore::CDMInstance::ImplementationType::ClearKey);
93
94 #endif // ENABLE(ENCRYPTED_MEDIA)