• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef DRM_ADAPTER_H
17 #define DRM_ADAPTER_H
18 
19 #include <memory>
20 #include <string>
21 
22 namespace OHOS::NWeb {
23 
24 using OHOSMediaKeySession = void*;
25 
26 class DrmCallbackAdapter {
27 public:
28     virtual ~DrmCallbackAdapter() = default;
29 
30     virtual void OnSessionMessage(const std::string& sessionId, int32_t& type, const std::vector<uint8_t>& message) = 0;
31 
32     virtual void OnProvisionRequest(const std::string& defaultUrl, const std::string& requestData) = 0;
33 
34     virtual void OnProvisioningComplete(bool success) = 0;
35 
36     virtual void OnMediaKeySessionReady(void* session) = 0;
37 
38     virtual void OnPromiseRejected(uint32_t promiseId, const std::string& errorMessage) = 0;
39 
40     virtual void OnPromiseResolved(uint32_t promiseId) = 0;
41 
42     virtual void OnPromiseResolvedWithSession(uint32_t promiseId, const std::string& sessionId) = 0;
43 
44     virtual void OnSessionClosed(const std::string& sessionId) = 0;
45 
46     virtual void OnSessionKeysChange(const std::string& sessionId, const std::vector<std::string>& keyIdArray,
47         const std::vector<uint32_t>& statusArray, bool hasAdditionalUsableKey, bool isKeyRelease) = 0;
48 
49     virtual void OnSessionExpirationUpdate(const std::string& sessionId, uint64_t expirationTime) = 0;
50 
51     virtual void OnStorageProvisioned() = 0;
52 
53     virtual void OnStorageSaveInfo(const std::vector<uint8_t>& ketSetId, const std::string& mimeType,
54         const std::string& sessionId, int32_t keyType) = 0;
55 
56     virtual void OnStorageLoadInfo(const std::string& sessionId) = 0;
57 
58     virtual void OnStorageClearInfoForKeyRelease(const std::string& sessionId) = 0;
59 
60     virtual void OnStorageClearInfoForLoadFail(const std::string& sessionId) = 0;
61 
OnMediaLicenseReady(bool success)62     virtual void OnMediaLicenseReady(bool success) {};
63 };
64 
65 class DrmAdapter {
66 public:
67     DrmAdapter() = default;
68 
69     virtual ~DrmAdapter() = default;
70 
71     virtual bool IsSupported(const std::string& name) = 0;
72 
73     virtual bool IsSupported2(const std::string& name, const std::string& mimeType) = 0;
74 
75     virtual bool IsSupported3(const std::string& name, const std::string& mimeType, int32_t level) = 0;
76 
77     virtual std::vector<uint8_t> GetUUID(const std::string& name) = 0;
78 
79     virtual void StorageProvisionedResult(bool result) = 0;
80 
81     virtual void StorageSaveInfoResult(bool result, int32_t type) = 0;
82 
83     virtual void StorageLoadInfoResult(const std::string& sessionId, const std::vector<uint8_t>& keySetId,
84         const std::string& mimeType, uint32_t keyType) = 0;
85 
86     virtual void StorageClearInfoResult(bool result, int32_t type) = 0;
87 
88     virtual int32_t ReleaseMediaKeySystem() = 0;
89 
90     virtual int32_t ReleaseMediaKeySession() = 0;
91 
92     virtual int32_t CreateKeySystem(const std::string& name, const std::string& origin, int32_t securityLevel) = 0;
93 
94     virtual int32_t SetConfigurationString(const std::string& configName, const std::string& value) = 0;
95 
96     virtual int32_t GetConfigurationString(const std::string& configName, char* value, int32_t valueLen) = 0;
97 
98     virtual int32_t SetConfigurationByteArray(
99         const std::string& configName, const uint8_t* value, int32_t valueLen) = 0;
100 
101     virtual int32_t GetConfigurationByteArray(const std::string& configName, uint8_t* value, int32_t* valueLen) = 0;
102 
103     virtual int32_t GetMaxContentProtectionLevel(int32_t& level) = 0;
104 
105     virtual int32_t ProcessKeySystemResponse(const std::string& response, bool isResponseReceived) = 0;
106 
107     virtual int32_t GetCertificateStatus(int32_t& certStatus) = 0;
108 
109     virtual int32_t RegistDrmCallback(std::shared_ptr<DrmCallbackAdapter> callbackAdapter) = 0;
110 
111     virtual int32_t UpdateSession(uint32_t promiseId, const std::string& sessionId, std::vector<uint8_t> response) = 0;
112 
113     virtual int32_t CloseSession(uint32_t promiseId, const std::string& sessionId) = 0;
114 
115     virtual int32_t RemoveSession(uint32_t promiseId, const std::string& sessionId) = 0;
116 
117     virtual int32_t LoadSession(uint32_t promiseId, const std::string& sessionId) = 0;
118 
119     virtual int32_t ClearMediaKeys() = 0;
120 
121     virtual int32_t GetSecurityLevel() = 0;
122 
123     virtual int32_t RequireSecureDecoderModule(const std::string& mimeType, bool& status) = 0;
124 
125     virtual int32_t GenerateMediaKeyRequest(const std::string& sessionId, int32_t type, int32_t initDataLen,
126         const std::vector<uint8_t>& initData, const std::string& mimeType, uint32_t promiseId) = 0;
127 };
128 } // namespace OHOS::NWeb
129 #endif // DRM_ADAPTER_H