Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: content/common/media/cdm_host_files.cc

Issue 2849163003: media: Move the callsite of CdmHostFiles::InitVerification() (Closed)
Patch Set: windows-only Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/media/cdm_host_files.h" 5 #include "content/common/media/cdm_host_files.h"
6 6
7 #include <map> 7 #include <map>
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 // static 127 // static
128 std::unique_ptr<CdmHostFiles> CdmHostFiles::Create( 128 std::unique_ptr<CdmHostFiles> CdmHostFiles::Create(
129 const base::FilePath& cdm_adapter_path) { 129 const base::FilePath& cdm_adapter_path) {
130 DVLOG(1) << __func__; 130 DVLOG(1) << __func__;
131 std::unique_ptr<CdmHostFiles> cdm_host_files = 131 std::unique_ptr<CdmHostFiles> cdm_host_files =
132 base::MakeUnique<CdmHostFiles>(); 132 base::MakeUnique<CdmHostFiles>();
133 cdm_host_files->OpenFiles(cdm_adapter_path); 133 cdm_host_files->OpenFiles(cdm_adapter_path);
134 return cdm_host_files; 134 return cdm_host_files;
135 } 135 }
136 136
137 bool CdmHostFiles::VerifyFiles(base::NativeLibrary cdm_adapter_library, 137 bool CdmHostFiles::InitVerification(base::NativeLibrary cdm_adapter_library,
138 const base::FilePath& cdm_adapter_path) { 138 const base::FilePath& cdm_adapter_path) {
139 DVLOG(1) << __func__; 139 DVLOG(1) << __func__;
140 DCHECK(cdm_adapter_library); 140 DCHECK(cdm_adapter_library);
141 141
142 // Get function pointer exported by the CDM. 142 // Get function pointer exported by the CDM.
143 // See media/cdm/api/content_decryption_module_ext.h. 143 // See media/cdm/api/content_decryption_module_ext.h.
144 using VerifyCdmHostFunc = 144 using InitVerificationFunc =
145 bool (*)(const cdm::HostFile* cdm_host_files, uint32_t num_files); 145 bool (*)(const cdm::HostFile* cdm_host_files, uint32_t num_files);
146 static const char kVerifyCdmHostFuncName[] = "VerifyCdmHost_0"; 146 static const char kInitVerificationFuncName[] = "VerifyCdmHost_0";
147 147
148 base::NativeLibrary cdm_library; 148 base::NativeLibrary cdm_library;
149 #if defined(OS_LINUX) || defined(OS_MACOSX) 149 #if defined(OS_LINUX) || defined(OS_MACOSX)
150 // On POSIX, "the dlsym() function shall search for the named symbol in all 150 // On POSIX, "the dlsym() function shall search for the named symbol in all
151 // objects loaded automatically as a result of loading the object referenced 151 // objects loaded automatically as a result of loading the object referenced
152 // by handle". Since the CDM is loaded automatically as a result of loading 152 // by handle". Since the CDM is loaded automatically as a result of loading
153 // the CDM adapter, we can just use the adapter to look for CDM symbols. 153 // the CDM adapter, we can just use the adapter to look for CDM symbols.
154 cdm_library = cdm_adapter_library; 154 cdm_library = cdm_adapter_library;
155 #elif defined(OS_WIN) 155 #elif defined(OS_WIN)
156 // On Windows, we have manually load the CDM. 156 // On Windows, we have manually load the CDM.
157 base::ScopedNativeLibrary scoped_cdm_library; 157 base::ScopedNativeLibrary scoped_cdm_library;
158 base::NativeLibraryLoadError error; 158 base::NativeLibraryLoadError error;
159 scoped_cdm_library.Reset( 159 scoped_cdm_library.Reset(
160 base::LoadNativeLibrary(GetCdmPath(cdm_adapter_path), &error)); 160 base::LoadNativeLibrary(GetCdmPath(cdm_adapter_path), &error));
161 if (!scoped_cdm_library.is_valid()) { 161 if (!scoped_cdm_library.is_valid()) {
162 LOG(ERROR) << "Failed to load CDM (error: " << error.ToString() << ")"; 162 LOG(ERROR) << "Failed to load CDM (error: " << error.ToString() << ")";
163 CloseAllFiles(); 163 CloseAllFiles();
164 return true; 164 return true;
165 } 165 }
166 cdm_library = scoped_cdm_library.get(); 166 cdm_library = scoped_cdm_library.get();
167 #endif 167 #endif
168 168
169 VerifyCdmHostFunc verify_cdm_host_func = reinterpret_cast<VerifyCdmHostFunc>( 169 InitVerificationFunc init_verification_func =
170 base::GetFunctionPointerFromNativeLibrary(cdm_library, 170 reinterpret_cast<InitVerificationFunc>(
171 kVerifyCdmHostFuncName)); 171 base::GetFunctionPointerFromNativeLibrary(cdm_library,
172 if (!verify_cdm_host_func) { 172 kInitVerificationFuncName));
173 LOG(ERROR) << "Function " << kVerifyCdmHostFuncName << " not found."; 173 if (!init_verification_func) {
174 LOG(ERROR) << "Function " << kInitVerificationFuncName << " not found.";
174 CloseAllFiles(); 175 CloseAllFiles();
175 return true; 176 return true;
176 } 177 }
177 178
178 // Fills |cdm_host_files| with common and CDM specific files for 179 // Fills |cdm_host_files| with common and CDM specific files for
179 // |cdm_adapter_path|. 180 // |cdm_adapter_path|.
180 std::vector<cdm::HostFile> cdm_host_files; 181 std::vector<cdm::HostFile> cdm_host_files;
181 TakePlatformFiles(cdm_adapter_path, &cdm_host_files); 182 TakePlatformFiles(cdm_adapter_path, &cdm_host_files);
182 183
183 // std::vector::data() is not guaranteed to be nullptr when empty(). 184 // std::vector::data() is not guaranteed to be nullptr when empty().
184 const cdm::HostFile* cdm_host_files_ptr = 185 const cdm::HostFile* cdm_host_files_ptr =
185 cdm_host_files.empty() ? nullptr : cdm_host_files.data(); 186 cdm_host_files.empty() ? nullptr : cdm_host_files.data();
186 187
187 // Call |verify_cdm_host_func| on the CDM with |cdm_host_files|. Note that 188 // Call |init_verification_func| on the CDM with |cdm_host_files|. Note that
188 // the ownership of these files are transferred to the CDM, which will close 189 // the ownership of these files are transferred to the CDM, which will close
189 // the files immediately after use. 190 // the files immediately after use.
190 DVLOG(1) << __func__ << ": Calling " << kVerifyCdmHostFuncName << "() with " 191 DVLOG(1) << __func__ << ": Calling " << kInitVerificationFuncName
191 << cdm_host_files.size() << " files."; 192 << "() with " << cdm_host_files.size() << " files.";
192 for (const auto& host_file : cdm_host_files) { 193 for (const auto& host_file : cdm_host_files) {
193 DVLOG(1) << " - File Path: " << host_file.file_path; 194 DVLOG(1) << " - File Path: " << host_file.file_path;
194 DVLOG(1) << " - File: " << host_file.file; 195 DVLOG(1) << " - File: " << host_file.file;
195 DVLOG(1) << " - Sig File: " << host_file.sig_file; 196 DVLOG(1) << " - Sig File: " << host_file.sig_file;
196 } 197 }
197 198
198 if (!verify_cdm_host_func(cdm_host_files_ptr, cdm_host_files.size())) { 199 if (!init_verification_func(cdm_host_files_ptr, cdm_host_files.size())) {
199 DVLOG(1) << "Failed to verify CDM host."; 200 DVLOG(1) << "Failed to verify CDM host.";
200 CloseAllFiles(); 201 CloseAllFiles();
201 return false; 202 return false;
202 } 203 }
203 204
204 // Close all files not passed to the CDM. 205 // Close all files not passed to the CDM.
205 CloseAllFiles(); 206 CloseAllFiles();
206 return true; 207 return true;
207 } 208 }
208 209
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 cdm_specific_files_map_.clear(); 285 cdm_specific_files_map_.clear();
285 } 286 }
286 287
287 // Question(xhwang): Any better way to check whether a plugin is a CDM? Maybe 288 // Question(xhwang): Any better way to check whether a plugin is a CDM? Maybe
288 // when we register the plugin we can set some flag explicitly? 289 // when we register the plugin we can set some flag explicitly?
289 bool IsCdm(const base::FilePath& cdm_adapter_path) { 290 bool IsCdm(const base::FilePath& cdm_adapter_path) {
290 return !GetCdmPath(cdm_adapter_path).empty(); 291 return !GetCdmPath(cdm_adapter_path).empty();
291 } 292 }
292 293
293 } // namespace content 294 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698