| diff --git chrome/common/media/component_widevine_cdm_hint_file_linux.cc chrome/common/media/component_widevine_cdm_hint_file_linux.cc |
| index d529ecfb270c4..2e922ef345f04 100644 |
| --- chrome/common/media/component_widevine_cdm_hint_file_linux.cc |
| +++ chrome/common/media/component_widevine_cdm_hint_file_linux.cc |
| @@ -16,6 +16,7 @@ |
| #include "base/path_service.h" |
| #include "base/values.h" |
| #include "chrome/common/chrome_paths.h" |
| +#include "third_party/widevine/cdm/widevine_cdm_common.h" |
| |
| namespace { |
| |
| @@ -35,14 +36,33 @@ base::FilePath GetPath(const base::Value::Dict& dict) { |
| return path; |
| } |
| |
| +// On Linux the Widevine CDM is loaded into the zygote at startup. When the |
| +// component updater runs sometime later and finds a newer version of the |
| +// Widevine CDM, don't register it as the newer version can't be used. Instead, |
| +// save the path to the new Widevine CDM in this file. Next time at startup this |
| +// file will be checked, and if it references a usable Widevine CDM, use this |
| +// version instead of the old (potentially bundled) CDM. |
| +// Add this method instead of using chrome::FILE_COMPONENT_WIDEVINE_CDM_HINT |
| +// because only directories (not files) can be configured via |
| +// base::PathService::Override. |
| +bool GetHintFilePath(base::FilePath* hint_file_path) { |
| + base::FilePath user_data_dir; |
| + if (!base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)) |
| + return false; |
| + // Match the file name in chrome/common/chrome_paths.cc |
| + *hint_file_path = user_data_dir |
| + .AppendASCII(kWidevineCdmBaseDirectory) |
| + .Append(FILE_PATH_LITERAL("latest-component-updated-widevine-cdm")); |
| + return true; |
| +} |
| + |
| } // namespace |
| |
| bool UpdateWidevineCdmHintFile(const base::FilePath& cdm_base_path) { |
| DCHECK(!cdm_base_path.empty()); |
| |
| base::FilePath hint_file_path; |
| - CHECK(base::PathService::Get(chrome::FILE_COMPONENT_WIDEVINE_CDM_HINT, |
| - &hint_file_path)); |
| + CHECK(GetHintFilePath(&hint_file_path)); |
| |
| base::Value::Dict dict; |
| dict.Set(kPath, cdm_base_path.value()); |
| @@ -60,8 +80,7 @@ bool UpdateWidevineCdmHintFile(const base::FilePath& cdm_base_path) { |
| |
| base::FilePath GetLatestComponentUpdatedWidevineCdmDirectory() { |
| base::FilePath hint_file_path; |
| - CHECK(base::PathService::Get(chrome::FILE_COMPONENT_WIDEVINE_CDM_HINT, |
| - &hint_file_path)); |
| + CHECK(GetHintFilePath(&hint_file_path)); |
| |
| if (!base::PathExists(hint_file_path)) { |
| DVLOG(2) << "CDM hint file at " << hint_file_path << " does not exist."; |