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

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: changes Created 4 years, 9 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
« no previous file with comments | « no previous file | chrome/common/chrome_content_client.h » ('j') | chrome/common/chrome_content_client.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « no previous file | chrome/common/chrome_content_client.h » ('j') | chrome/common/chrome_content_client.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698