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

Unified Diff: chrome/browser/component_updater/widevine_cdm_component_installer.cc

Issue 1637083002: Add CdmService to keep track of CDMs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ContentDecryptionModule Created 4 years, 10 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/component_updater/widevine_cdm_component_installer.cc
diff --git a/chrome/browser/component_updater/widevine_cdm_component_installer.cc b/chrome/browser/component_updater/widevine_cdm_component_installer.cc
index 68c6d589cd267ddb0b29d9ecfc3c07431cc4d6f3..90f89aeab8d944fe479fbb68f8313727ed7fa7f4 100644
--- a/chrome/browser/component_updater/widevine_cdm_component_installer.cc
+++ b/chrome/browser/component_updater/widevine_cdm_component_installer.cc
@@ -21,6 +21,7 @@
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "build/build_config.h"
@@ -31,6 +32,7 @@
#include "components/version_info/version_info.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/plugin_service.h"
+#include "content/public/common/content_decryption_module_service.h"
#include "content/public/common/pepper_plugin_info.h"
#include "media/cdm/supported_cdm_versions.h"
#include "third_party/widevine/cdm/widevine_cdm_common.h"
@@ -38,6 +40,7 @@
#include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR. NOLINT
using content::BrowserThread;
+using content::ContentDecryptionModuleService;
using content::PluginService;
namespace component_updater {
@@ -108,12 +111,10 @@ base::FilePath GetPlatformDirectory(const base::FilePath& base_path) {
return base_path.AppendASCII("_platform_specific").AppendASCII(platform_arch);
}
-bool MakeWidevineCdmPluginInfo(
- const base::Version& version,
- const base::FilePath& path,
- const std::vector<base::string16>& additional_param_names,
- const std::vector<base::string16>& additional_param_values,
- content::PepperPluginInfo* plugin_info) {
+bool MakeWidevineCdmPluginInfo(const base::Version& version,
+ const base::FilePath& path,
+ base::string16 codecs,
+ content::PepperPluginInfo* plugin_info) {
if (!version.IsValid() ||
version.components().size() !=
static_cast<size_t>(kWidevineCdmVersionNumComponents)) {
@@ -133,8 +134,10 @@ bool MakeWidevineCdmPluginInfo(
kWidevineCdmPluginMimeType,
kWidevineCdmPluginExtension,
kWidevineCdmPluginMimeTypeDescription);
- widevine_cdm_mime_type.additional_param_names = additional_param_names;
- widevine_cdm_mime_type.additional_param_values = additional_param_values;
+ widevine_cdm_mime_type.additional_param_names.push_back(
+ base::ASCIIToUTF16(kCdmSupportedCodecsParamName));
+ widevine_cdm_mime_type.additional_param_values.push_back(codecs);
+
plugin_info->mime_types.push_back(widevine_cdm_mime_type);
plugin_info->permissions = kWidevineCdmPluginPermissions;
@@ -185,34 +188,25 @@ bool IsCompatibleWithChrome(const base::DictionaryValue& manifest) {
media::IsSupportedCdmHostVersion);
}
-void GetAdditionalParams(const base::DictionaryValue& manifest,
- std::vector<base::string16>* additional_param_names,
- std::vector<base::string16>* additional_param_values) {
+base::string16 GetCodecs(const base::DictionaryValue& manifest) {
base::string16 codecs;
if (manifest.GetString(kCdmCodecsListName, &codecs)) {
DLOG_IF(WARNING, codecs.empty())
<< "Widevine CDM component manifest has empty codecs list";
- additional_param_names->push_back(
- base::ASCIIToUTF16(kCdmSupportedCodecsParamName));
- additional_param_values->push_back(codecs);
- } else {
- DLOG(WARNING) << "Widevine CDM component manifest is missing codecs";
+ return codecs;
}
+
+ DLOG(WARNING) << "Widevine CDM component manifest is missing codecs";
+ return base::string16();
}
void RegisterWidevineCdmWithChrome(const base::Version& cdm_version,
const base::FilePath& adapter_install_path,
scoped_ptr<base::DictionaryValue> manifest) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
- std::vector<base::string16> additional_param_names;
- std::vector<base::string16> additional_param_values;
- GetAdditionalParams(
- *manifest, &additional_param_names, &additional_param_values);
+ base::string16 codecs = GetCodecs(*manifest);
content::PepperPluginInfo plugin_info;
- if (!MakeWidevineCdmPluginInfo(cdm_version,
- adapter_install_path,
- additional_param_names,
- additional_param_values,
+ if (!MakeWidevineCdmPluginInfo(cdm_version, adapter_install_path, codecs,
&plugin_info)) {
return;
}
@@ -224,6 +218,21 @@ void RegisterWidevineCdmWithChrome(const base::Version& cdm_version,
// update their plugin list caches.
PluginService::GetInstance()->RefreshPlugins();
PluginService::GetInstance()->PurgePluginListCache(NULL, false);
+
+ // Also register Widevine with the ContentDecryptionModuleService. It needs
+ // |path| to be the actual Widevine library, not the adapter, so adjust as
+ // necessary. It will be in the same directory as the installed adapter.
+ // TODO(crbug.com/469202). Add support for initDataTypes in the manifest,
+ // and then derive |supported_init_data_types| from it.
+ std::vector<base::string16> supported_codecs = base::SplitString(
+ codecs,
+ base::ASCIIToUTF16(std::string(1, kCdmSupportedCodecsValueDelimiter)),
+ base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
+ std::vector<base::string16> supported_init_data_types;
+ ContentDecryptionModuleService::GetInstance()->Register(
+ kWidevineKeySystem, cdm_version.GetString(),
+ adapter_install_path.DirName().AppendASCII(kWidevineCdmFileName),
+ supported_codecs, supported_init_data_types);
}
} // namespace
« no previous file with comments | « no previous file | chrome/common/chrome_content_client.h » ('j') | content/common/media/content_decryption_module_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698