Chromium Code Reviews| 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..67b146a3cd2f082120e13c1a95e1f1a7e5a7098c 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/cdm_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::CdmService; |
| 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,30 @@ 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(); |
|
xhwang
2016/03/18 19:35:38
move line 196 here?
jrummell
2016/03/23 21:38:09
Done.
|
| +} |
| + |
| +std::vector<base::string16> GetInitDataTypes() { |
| + // TODO(http://crbug.com/469202): Add this to the manifest and extract here. |
|
xhwang
2016/03/18 19:35:38
nit: TODO(jrummell) or TODO(xhwang)
jrummell
2016/03/23 21:38:09
Removed this.
|
| + return std::vector<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 +223,20 @@ 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 CdmService. 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, |
|
xhwang
2016/03/18 19:35:38
ditto about TODO
jrummell
2016/03/23 21:38:09
Also removed.
|
| + // 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); |
| + CdmService::GetInstance()->Register( |
| + kWidevineKeySystem, cdm_version.GetString(), |
| + adapter_install_path.DirName().AppendASCII(kWidevineCdmFileName), |
| + supported_codecs, GetInitDataTypes()); |
| } |
| } // namespace |