aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGleb Popov <arrowd@FreeBSD.org>2023-09-04 17:16:44 +0000
committerGleb Popov <arrowd@FreeBSD.org>2023-10-01 14:59:09 +0000
commit04ee4737c5f74da5b7d2e6d0f7f40a06343e1222 (patch)
treec01e4c2e12b99279df11ebe6a9a269aba55a72db
parent715f854059accb7ff03491710393fa8cb1d5c29c (diff)
www/chromium: Enable Widevine DRM via foreign-cdm.
These patches allow native Chromium to call out to the Linux Widevine library via a proxy program called foreign-cdm. Reviewed by: rnagy Differential Revision: https://reviews.freebsd.org/D42026
-rw-r--r--www/chromium/Makefile7
-rw-r--r--www/chromium/files/chrome.in5
-rw-r--r--www/chromium/files/patch-chrome_browser_component__updater_widevine__cdm__component__installer.cc11
-rw-r--r--www/chromium/files/patch-chrome_common_media_cdm__registration.cc52
-rw-r--r--www/chromium/files/patch-chrome_common_media_component__widevine__cdm__hint__file__linux.h11
-rw-r--r--www/chromium/files/patch-media_cdm_library__cdm_cdm__paths.gni11
-rw-r--r--www/chromium/files/patch-third__party_widevine_cdm_widevine.gni10
7 files changed, 106 insertions, 1 deletions
diff --git a/www/chromium/Makefile b/www/chromium/Makefile
index 6eee12f3ebd9..fdd0526fd357 100644
--- a/www/chromium/Makefile
+++ b/www/chromium/Makefile
@@ -1,5 +1,6 @@
PORTNAME= chromium
PORTVERSION= 117.0.5938.132
+PORTREVISION= 1
CATEGORIES= www wayland
MASTER_SITES= https://commondatastorage.googleapis.com/chromium-browser-official/ \
https://nerd.hu/distfiles/:external
@@ -102,6 +103,7 @@ GN_ARGS+= clang_use_chrome_plugins=false \
enable_nacl=false \
enable_remoting=false \
enable_rust=false \
+ enable_widevine=true \
fatal_linker_warnings=false \
icu_use_data_file=false \
is_clang=true \
@@ -137,7 +139,7 @@ GN_ARGS+= google_api_key="AIzaSyBsp9n41JLW8jCokwn7vhoaMejDFRd1mp8"
SUB_FILES= chromium-browser.desktop chrome
SUB_LIST+= COMMENT="${COMMENT}"
-OPTIONS_DEFINE= CODECS CUPS DEBUG DRIVER KERBEROS LTO PIPEWIRE TEST
+OPTIONS_DEFINE= CODECS CUPS DEBUG DRIVER KERBEROS LTO PIPEWIRE TEST WIDEVINE
OPTIONS_DEFAULT= CODECS CUPS DRIVER KERBEROS PIPEWIRE SNDIO
OPTIONS_EXCLUDE_aarch64=LTO
OPTIONS_GROUP= AUDIO
@@ -212,6 +214,9 @@ SNDIO_LIB_DEPENDS= libsndio.so:audio/sndio
SNDIO_VARS= GN_ARGS+=use_sndio=true
SNDIO_VARS_OFF= GN_ARGS+=use_sndio=false
+WIDEVINE_DESC= Depend on foreign-cdm to enable playback of DRM content
+WIDEVINE_RUN_DEPENDS= foreign-cdm>0:www/foreign-cdm
+
.include "Makefile.tests"
TEST_DISTFILES= ${PORTNAME}-${DISTVERSION}-testdata${EXTRACT_SUFX} \
test_fonts-336e775eec536b2d785cc80eff6ac39051931286.tar.gz:external
diff --git a/www/chromium/files/chrome.in b/www/chromium/files/chrome.in
index 51ebe9d24bf2..9bd861920963 100644
--- a/www/chromium/files/chrome.in
+++ b/www/chromium/files/chrome.in
@@ -16,4 +16,9 @@ EOMSG
exit 1
fi
ulimit -c 0
+
+# variables for foreign-cdm
+export FCDM_CDM_SO_PATH=/compat/linux/usr/lib/foreign-cdm/libwidevinecdm.so
+export FCDM_WORKER_PATH=/compat/linux/usr/bin/fcdm-worker
+
exec %%PREFIX%%/share/chromium/chrome ${1+"$@"}
diff --git a/www/chromium/files/patch-chrome_browser_component__updater_widevine__cdm__component__installer.cc b/www/chromium/files/patch-chrome_browser_component__updater_widevine__cdm__component__installer.cc
new file mode 100644
index 000000000000..ff0187e1cc42
--- /dev/null
+++ b/www/chromium/files/patch-chrome_browser_component__updater_widevine__cdm__component__installer.cc
@@ -0,0 +1,11 @@
+--- chrome/browser/component_updater/widevine_cdm_component_installer.cc.orig 2023-09-04 16:07:23 UTC
++++ chrome/browser/component_updater/widevine_cdm_component_installer.cc
+@@ -72,6 +72,8 @@ const char kWidevineCdmPlatform[] =
+ "cros";
+ #elif BUILDFLAG(IS_LINUX)
+ "linux";
++#elif BUILDFLAG(IS_FREEBSD)
++ "linux";
+ #else
+ #error This file should only be included for supported platforms.
+ #endif
diff --git a/www/chromium/files/patch-chrome_common_media_cdm__registration.cc b/www/chromium/files/patch-chrome_common_media_cdm__registration.cc
new file mode 100644
index 000000000000..cc4ebfdb5a15
--- /dev/null
+++ b/www/chromium/files/patch-chrome_common_media_cdm__registration.cc
@@ -0,0 +1,52 @@
+--- chrome/common/media/cdm_registration.cc.orig 2023-09-04 16:08:25 UTC
++++ chrome/common/media/cdm_registration.cc
+@@ -25,11 +25,11 @@
+
+ #if BUILDFLAG(ENABLE_WIDEVINE)
+ #include "third_party/widevine/cdm/widevine_cdm_common.h" // nogncheck
+-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
++#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_FREEBSD)
+ #include "base/native_library.h"
+ #include "chrome/common/chrome_paths.h"
+ #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
+-#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
++#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD)
+ #include "base/no_destructor.h"
+ #include "components/cdm/common/cdm_manifest.h"
+ #include "media/cdm/supported_audio_codecs.h"
+@@ -58,7 +58,7 @@ using Robustness = content::CdmInfo::Robustness;
+ #if BUILDFLAG(ENABLE_WIDEVINE)
+ #if (BUILDFLAG(BUNDLE_WIDEVINE_CDM) || \
+ BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)) && \
+- (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
++ (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD))
+ // Create a CdmInfo for a Widevine CDM, using |version|, |cdm_library_path|, and
+ // |capability|.
+ std::unique_ptr<content::CdmInfo> CreateWidevineCdmInfo(
+@@ -101,7 +101,7 @@ std::unique_ptr<content::CdmInfo> CreateCdmInfoFromWid
+ // BUILDFLAG(IS_CHROMEOS))
+
+ #if BUILDFLAG(BUNDLE_WIDEVINE_CDM) && \
+- (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
++ (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD))
+ // On Linux/ChromeOS we have to preload the CDM since it uses the zygote
+ // sandbox. On Windows and Mac, the bundled CDM is handled by the component
+ // updater.
+@@ -125,7 +125,7 @@ content::CdmInfo* GetBundledWidevine() {
+ // BUILDFLAG(IS_CHROMEOS))
+
+ #if BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT) && \
+- (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS))
++ (BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD))
+ // This code checks to see if a component updated Widevine CDM can be found. If
+ // there is one and it looks valid, return the CdmInfo for that CDM. Otherwise
+ // return nullptr.
+@@ -160,7 +160,7 @@ void AddSoftwareSecureWidevine(std::vector<content::Cd
+ /*supports_sub_key_systems=*/false, kWidevineCdmDisplayName,
+ kWidevineCdmType, base::Version(), base::FilePath());
+
+-#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
++#elif BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD)
+ #if defined(WIDEVINE_CDM_MIN_GLIBC_VERSION)
+ base::Version glibc_version(gnu_get_libc_version());
+ DCHECK(glibc_version.IsValid());
diff --git a/www/chromium/files/patch-chrome_common_media_component__widevine__cdm__hint__file__linux.h b/www/chromium/files/patch-chrome_common_media_component__widevine__cdm__hint__file__linux.h
new file mode 100644
index 000000000000..b8d1b2ff2528
--- /dev/null
+++ b/www/chromium/files/patch-chrome_common_media_component__widevine__cdm__hint__file__linux.h
@@ -0,0 +1,11 @@
+--- chrome/common/media/component_widevine_cdm_hint_file_linux.h.orig 2023-09-04 16:25:40 UTC
++++ chrome/common/media/component_widevine_cdm_hint_file_linux.h
+@@ -15,7 +15,7 @@
+
+ // TODO(crbug.com/1052397): Revisit the macro expression once build flag switch
+ // of lacros-chrome is complete.
+-#if !(BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS))
++#if !(BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_LACROS) || BUILDFLAG(IS_FREEBSD))
+ #error "This file only applies to desktop Linux."
+ #endif
+
diff --git a/www/chromium/files/patch-media_cdm_library__cdm_cdm__paths.gni b/www/chromium/files/patch-media_cdm_library__cdm_cdm__paths.gni
new file mode 100644
index 000000000000..751a1249d677
--- /dev/null
+++ b/www/chromium/files/patch-media_cdm_library__cdm_cdm__paths.gni
@@ -0,0 +1,11 @@
+--- media/cdm/library_cdm/cdm_paths.gni.orig 2023-09-04 16:51:48 UTC
++++ media/cdm/library_cdm/cdm_paths.gni
+@@ -23,6 +23,8 @@ if (is_chromeos) {
+ component_os = "mac"
+ } else if (is_fuchsia) {
+ component_os = "fuchsia"
++} else if (is_freebsd) {
++ component_os = "linux"
+ } else {
+ assert(false, "unsupported_platform")
+ }
diff --git a/www/chromium/files/patch-third__party_widevine_cdm_widevine.gni b/www/chromium/files/patch-third__party_widevine_cdm_widevine.gni
new file mode 100644
index 000000000000..8c0c0ff81bf4
--- /dev/null
+++ b/www/chromium/files/patch-third__party_widevine_cdm_widevine.gni
@@ -0,0 +1,10 @@
+--- third_party/widevine/cdm/widevine.gni.orig 2023-09-04 17:14:29 UTC
++++ third_party/widevine/cdm/widevine.gni
+@@ -27,6 +27,7 @@ library_widevine_cdm_available =
+ (is_chromeos &&
+ (target_cpu == "x64" || target_cpu == "arm" || target_cpu == "arm64")) ||
+ (target_os == "linux" && target_cpu == "x64") ||
++ (target_os == "freebsd" && target_cpu == "x64") ||
+ (target_os == "mac" && (target_cpu == "x64" || target_cpu == "arm64")) ||
+ (target_os == "win" &&
+ (target_cpu == "x86" || target_cpu == "x64" || target_cpu == "arm64"))