From b1e5af755c1588729894e25ce8f6ee256d028a75 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 12 Jul 2022 15:32:05 +0200 Subject: [PATCH] fix: ensure that requestMediaKeySystemAccess resolves (#34890) When widevine was disabled at the build level we never dealt with the callback passed into GetSupportedKeySystems. This was ok until requests became marked pending in https://chromium-review.googlesource.com/c/chromium/src/+/3430502 until the callback was called. This resulted in a promise never resolving / rejecting and certain media websites (E.g. spotify) hanging on load waiting for a signal that would never arrive. Co-authored-by: Samuel Attard --- shell/app/electron_content_client.cc | 13 +++++++------ shell/renderer/renderer_client_base.cc | 7 +++++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/shell/app/electron_content_client.cc b/shell/app/electron_content_client.cc index b755232a2b53b..a63aebdddad5e 100644 --- a/shell/app/electron_content_client.cc +++ b/shell/app/electron_content_client.cc @@ -22,17 +22,18 @@ #include "ppapi/buildflags/buildflags.h" #include "shell/common/electron_paths.h" #include "shell/common/options_switches.h" +#include "third_party/widevine/cdm/buildflags.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" #include "url/url_constants.h" // In SHARED_INTERMEDIATE_DIR. #include "widevine_cdm_version.h" // NOLINT(build/include_directory) -#if defined(WIDEVINE_CDM_AVAILABLE) +#if BUILDFLAG(ENABLE_WIDEVINE) #include "base/native_library.h" #include "content/public/common/cdm_info.h" #include "media/base/video_codecs.h" -#endif // defined(WIDEVINE_CDM_AVAILABLE) +#endif // BUILDFLAG(ENABLE_WIDEVINE) #if BUILDFLAG(ENABLE_PDF_VIEWER) #include "chrome/common/pdf_util.h" @@ -58,7 +59,7 @@ enum class WidevineCdmFileCheck { kNotFound, }; -#if defined(WIDEVINE_CDM_AVAILABLE) +#if BUILDFLAG(ENABLE_WIDEVINE) bool IsWidevineAvailable( base::FilePath* cdm_path, std::vector* codecs_supported, @@ -102,7 +103,7 @@ bool IsWidevineAvailable( return false; } -#endif // defined(WIDEVINE_CDM_AVAILABLE) +#endif // BUILDFLAG(ENABLE_WIDEVINE) #if BUILDFLAG(ENABLE_PLUGINS) void ComputeBuiltInPlugins(std::vector* plugins) { @@ -227,7 +228,7 @@ void ElectronContentClient::AddContentDecryptionModules( std::vector* cdms, std::vector* cdm_host_file_paths) { if (cdms) { -#if defined(WIDEVINE_CDM_AVAILABLE) +#if BUILDFLAG(ENABLE_WIDEVINE) base::FilePath cdm_path; std::vector video_codecs_supported; base::flat_set session_types_supported; @@ -252,7 +253,7 @@ void ElectronContentClient::AddContentDecryptionModules( kWidevineCdmDisplayName, kWidevineCdmGuid, version, cdm_path, kWidevineCdmFileSystemId, capability, kWidevineKeySystem, false)); } -#endif // defined(WIDEVINE_CDM_AVAILABLE) +#endif // BUILDFLAG(ENABLE_WIDEVINE) } } diff --git a/shell/renderer/renderer_client_base.cc b/shell/renderer/renderer_client_base.cc index 7a5fc524ff315..e4553e4c7e6b4 100644 --- a/shell/renderer/renderer_client_base.cc +++ b/shell/renderer/renderer_client_base.cc @@ -47,6 +47,7 @@ #include "third_party/blink/public/web/web_view.h" #include "third_party/blink/renderer/platform/media/multi_buffer_data_source.h" // nogncheck #include "third_party/blink/renderer/platform/weborigin/scheme_registry.h" // nogncheck +#include "third_party/widevine/cdm/buildflags.h" #if BUILDFLAG(IS_MAC) #include "base/strings/sys_string_conversions.h" @@ -56,7 +57,7 @@ #include #endif -#if defined(WIDEVINE_CDM_AVAILABLE) +#if BUILDFLAG(ENABLE_WIDEVINE) #include "chrome/renderer/media/chrome_key_systems.h" // nogncheck #endif @@ -377,8 +378,10 @@ bool RendererClientBase::OverrideCreatePlugin( void RendererClientBase::GetSupportedKeySystems( media::GetSupportedKeySystemsCB cb) { -#if defined(WIDEVINE_CDM_AVAILABLE) +#if BUILDFLAG(ENABLE_WIDEVINE) GetChromeKeySystems(std::move(cb)); +#else + std::move(cb).Run({}); #endif }