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/logging.h"
10 #include "media/cdm/library_cdm/cdm_host_proxy.h"
11 #include "media/cdm/library_cdm/cdm_host_proxy_impl.h"
12
13 namespace media {
14
15 namespace {
16 static MockLibraryCdm* g_mock_library_cdm = nullptr;
17 } // namespace
18
19 // static
GetInstance()20 MockLibraryCdm* MockLibraryCdm::GetInstance() {
21 return g_mock_library_cdm;
22 }
23
24 template <typename HostInterface>
MockLibraryCdm(HostInterface * host,const std::string & key_system)25 MockLibraryCdm::MockLibraryCdm(HostInterface* host,
26 const std::string& key_system)
27 : cdm_host_proxy_(new CdmHostProxyImpl<HostInterface>(host)) {}
28
~MockLibraryCdm()29 MockLibraryCdm::~MockLibraryCdm() {
30 DCHECK(g_mock_library_cdm);
31 g_mock_library_cdm = nullptr;
32 }
33
GetCdmHostProxy()34 CdmHostProxy* MockLibraryCdm::GetCdmHostProxy() {
35 return cdm_host_proxy_.get();
36 }
37
Initialize(bool allow_distinctive_identifier,bool allow_persistent_state,bool use_hw_secure_codecs)38 void MockLibraryCdm::Initialize(bool allow_distinctive_identifier,
39 bool allow_persistent_state,
40 bool use_hw_secure_codecs) {
41 cdm_host_proxy_->OnInitialized(true);
42 }
43
CreateMockLibraryCdm(int cdm_interface_version,const char * key_system,uint32_t key_system_size,GetCdmHostFunc get_cdm_host_func,void * user_data)44 void* CreateMockLibraryCdm(int cdm_interface_version,
45 const char* key_system,
46 uint32_t key_system_size,
47 GetCdmHostFunc get_cdm_host_func,
48 void* user_data) {
49 DVLOG(1) << __func__;
50 DCHECK(!g_mock_library_cdm);
51
52 std::string key_system_string(key_system, key_system_size);
53
54 // We support CDM_10 and CDM_11.
55 using CDM_10 = cdm::ContentDecryptionModule_10;
56 using CDM_11 = cdm::ContentDecryptionModule_11;
57
58 if (cdm_interface_version == CDM_10::kVersion) {
59 CDM_10::Host* host = static_cast<CDM_10::Host*>(
60 get_cdm_host_func(CDM_10::Host::kVersion, user_data));
61 if (!host)
62 return nullptr;
63
64 DVLOG(1) << __func__ << ": Create ClearKeyCdm with CDM_10::Host.";
65 g_mock_library_cdm = new MockLibraryCdm(host, key_system_string);
66 return static_cast<CDM_10*>(g_mock_library_cdm);
67 }
68
69 if (cdm_interface_version == CDM_11::kVersion) {
70 CDM_11::Host* host = static_cast<CDM_11::Host*>(
71 get_cdm_host_func(CDM_11::Host::kVersion, user_data));
72 if (!host)
73 return nullptr;
74
75 DVLOG(1) << __func__ << ": Create ClearKeyCdm with CDM_11::Host.";
76 g_mock_library_cdm = new MockLibraryCdm(host, key_system_string);
77 return static_cast<CDM_11*>(g_mock_library_cdm);
78 }
79
80 return nullptr;
81 }
82
83 } // namespace media
84