1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "media/cdm/library_cdm/mock_library_cdm.h"
6
7 #include <string>
8
9 #include "base/check.h"
10 #include "base/logging.h"
11 #include "media/cdm/library_cdm/cdm_host_proxy.h"
12 #include "media/cdm/library_cdm/cdm_host_proxy_impl.h"
13
14 namespace media {
15
16 namespace {
17 static MockLibraryCdm* g_mock_library_cdm = nullptr;
18 } // namespace
19
20 // static
GetInstance()21 MockLibraryCdm* MockLibraryCdm::GetInstance() {
22 return g_mock_library_cdm;
23 }
24
25 template <typename HostInterface>
MockLibraryCdm(HostInterface * host,const std::string & key_system)26 MockLibraryCdm::MockLibraryCdm(HostInterface* host,
27 const std::string& key_system)
28 : cdm_host_proxy_(new CdmHostProxyImpl<HostInterface>(host)) {}
29
~MockLibraryCdm()30 MockLibraryCdm::~MockLibraryCdm() {
31 DCHECK(g_mock_library_cdm);
32 g_mock_library_cdm = nullptr;
33 }
34
GetCdmHostProxy()35 CdmHostProxy* MockLibraryCdm::GetCdmHostProxy() {
36 return cdm_host_proxy_.get();
37 }
38
Initialize(bool allow_distinctive_identifier,bool allow_persistent_state,bool use_hw_secure_codecs)39 void MockLibraryCdm::Initialize(bool allow_distinctive_identifier,
40 bool allow_persistent_state,
41 bool use_hw_secure_codecs) {
42 cdm_host_proxy_->OnInitialized(true);
43 }
44
CreateMockLibraryCdm(int cdm_interface_version,const char * key_system,uint32_t key_system_size,GetCdmHostFunc get_cdm_host_func,void * user_data)45 void* CreateMockLibraryCdm(int cdm_interface_version,
46 const char* key_system,
47 uint32_t key_system_size,
48 GetCdmHostFunc get_cdm_host_func,
49 void* user_data) {
50 DVLOG(1) << __func__;
51 DCHECK(!g_mock_library_cdm);
52
53 std::string key_system_string(key_system, key_system_size);
54
55 // We support CDM_10 and CDM_11.
56 using CDM_10 = cdm::ContentDecryptionModule_10;
57 using CDM_11 = cdm::ContentDecryptionModule_11;
58
59 if (cdm_interface_version == CDM_10::kVersion) {
60 CDM_10::Host* host = static_cast<CDM_10::Host*>(
61 get_cdm_host_func(CDM_10::Host::kVersion, user_data));
62 if (!host)
63 return nullptr;
64
65 DVLOG(1) << __func__ << ": Create ClearKeyCdm with CDM_10::Host.";
66 g_mock_library_cdm = new MockLibraryCdm(host, key_system_string);
67 return static_cast<CDM_10*>(g_mock_library_cdm);
68 }
69
70 if (cdm_interface_version == CDM_11::kVersion) {
71 CDM_11::Host* host = static_cast<CDM_11::Host*>(
72 get_cdm_host_func(CDM_11::Host::kVersion, user_data));
73 if (!host)
74 return nullptr;
75
76 DVLOG(1) << __func__ << ": Create ClearKeyCdm with CDM_11::Host.";
77 g_mock_library_cdm = new MockLibraryCdm(host, key_system_string);
78 return static_cast<CDM_11*>(g_mock_library_cdm);
79 }
80
81 return nullptr;
82 }
83
84 } // namespace media
85