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..11cae1d745ada94b7086b7e0a7d97cf948022771 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" |
| @@ -30,6 +31,7 @@ |
| #include "components/component_updater/default_component_installer.h" |
| #include "components/version_info/version_info.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/cdm_service.h" |
| #include "content/public/browser/plugin_service.h" |
| #include "content/public/common/pepper_plugin_info.h" |
| #include "media/cdm/supported_cdm_versions.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,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; |
| } |
| 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,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. |
| + base::FilePath cdm_install_path = |
| + adapter_install_path.DirName().AppendASCII(kWidevineCdmFileName); |
|
xhwang
2016/04/13 00:22:12
This is a bit hacky. To be future proof, can we pa
jrummell
2016/04/14 01:32:15
Done.
|
| + std::vector<std::string> supported_codecs = |
| + base::SplitString(base::UTF16ToASCII(codecs), |
| + std::string(1, kCdmSupportedCodecsValueDelimiter), |
| + base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL); |
|
xhwang
2016/04/13 00:22:12
nit: We probably don't want whitespace and don't l
jrummell
2016/04/14 01:32:15
Done.
|
| + CdmService::GetInstance()->RegisterCdm( |
| + content::CdmInfo(kWidevineCdmType, cdm_version, cdm_install_path, |
| + supported_codecs), |
| + true); |
|
xhwang
2016/04/13 00:22:12
Now we don't take a boolean any more.
jrummell
2016/04/14 01:32:15
Done.
|
| } |
| } // namespace |