From ee48bb49e1dfe9eb64a896b03948c37851e666e6 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Mon, 11 Jul 2022 17:06:31 -0700 Subject: [PATCH] fix: ensure that requestMediaKeySystemAccess resolves 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. --- 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 }