diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-14 14:19:24 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-18 20:33:05 +0200 |
commit | b99042fb839021a0a3d2fe0cac7ac3899c4acbba (patch) | |
tree | 433d7763429f1b966eab7a4a799c00aab8735b76 /src | |
parent | 5202f2f2819eb996d3bfd225eee827b6064499f4 (diff) |
Find modern Chrome, Chromium and Firefox CDM modules
The default download location has moved again, but we can now
also use firefox CDMs.
Pick-to: 6.4 6.3
Task-number: QTBUG-104238
Change-Id: I7ee581fa63e50df970acb31ea6d3f67d332aef59
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/content_client_qt.cpp | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp index 6c914b772..7167332d9 100644 --- a/src/core/content_client_qt.cpp +++ b/src/core/content_client_qt.cpp @@ -53,6 +53,7 @@ #include "extensions/common/constants.h" #include "media/base/media_switches.h" #include "media/base/video_codecs.h" +#include "media/cdm/supported_audio_codecs.h" #include "media/media_buildflags.h" #include "ui/base/layout.h" #include "ui/base/l10n/l10n_util.h" @@ -250,15 +251,56 @@ static bool IsWidevineAvailable(base::FilePath *cdm_path, } } #elif defined(Q_OS_LINUX) - pluginPaths << QStringLiteral("/opt/google/chrome/libwidevinecdm.so") // Old Google Chrome + QList<QDir> potentialWidevineVersionDirs; + + // Google Chrome widevine modules + QDir chromeWidevineDir(QDir::homePath() + "/.config/google-chrome/WidevineCdm"); + if (chromeWidevineDir.exists()) + potentialWidevineVersionDirs << chromeWidevineDir; + + // Firefox widevine modules + QDir firefoxPotentialProfilesDir(QDir::homePath() + "/.mozilla/firefox"); + if (firefoxPotentialProfilesDir.exists()) { + QFileInfoList firefoxProfileDirs = firefoxPotentialProfilesDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed); + for (const QFileInfo &info : firefoxProfileDirs) { + QDir widevinePluginsDir(info.absoluteFilePath() + "/gmp-widevinecdm"); + if (widevinePluginsDir.exists()) + potentialWidevineVersionDirs << widevinePluginsDir; + } + } + + // Chromium widevine modules (might not work with proprietary codecs) + QDir chromiumWidevineDir(QDir::homePath() + "/.config/chromium/WidevineCdm"); + if (chromiumWidevineDir.exists()) + potentialWidevineVersionDirs << chromiumWidevineDir; + + // Search for widewine versions + for (const QDir &dir : potentialWidevineVersionDirs) { + QFileInfoList widevineVersionDirs = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed); + // ### alternatively look up in the manifest.json and take the path from there. #if Q_PROCESSOR_WORDSIZE == 8 - << QStringLiteral("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so") + const QString library = QLatin1String("/_platform_specific/linux_x64/libwidevinecdm.so"); #else - << QStringLiteral("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x86/libwidevinecdm.so") + const QString library = QLatin1String("/_platform_specific/linux_x86/libwidevinecdm.so"); #endif - << QStringLiteral("/usr/lib/chromium/libwidevinecdm.so") // Arch + for (const QFileInfo &info : widevineVersionDirs) { + pluginPaths << info.absoluteFilePath() + "/libwidevinecdm.so"; + pluginPaths << info.absoluteFilePath() + library; + } + } + + // Fixed paths: + pluginPaths << QStringLiteral("/usr/lib/chromium/libwidevinecdm.so") // Arch << QStringLiteral("/usr/lib/chromium-browser/libwidevinecdm.so") // Ubuntu/neon - << QStringLiteral("/usr/lib64/chromium/libwidevinecdm.so"); // OpenSUSE style + << QStringLiteral("/usr/lib64/chromium/libwidevinecdm.so") // OpenSUSE style +#if Q_PROCESSOR_WORDSIZE == 8 + << QStringLiteral("/usr/lib64/chromium-browser/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so") // Gentoo + << QStringLiteral("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so") // Old Google Chrome +#else + << QStringLiteral("/usr/lib/chromium-browser/WidevineCdm/_platform_specific/linux_x86/libwidevinecdm.so") // Gentoo + << QStringLiteral("/opt/google/chrome/WidevineCdm/_platform_specific/linux_x86/libwidevinecdm.so") // Old Google Chrome +#endif + << QStringLiteral("/opt/google/chrome/libwidevinecdm.so"); // Older Google Chrome #endif } @@ -277,6 +319,8 @@ static bool IsWidevineAvailable(base::FilePath *cdm_path, #if BUILDFLAG(ENABLE_PLATFORM_HEVC) capability->video_codecs.emplace(media::VideoCodec::kHEVC, kAllProfiles); #endif + capability->audio_codecs = media::GetCdmSupportedAudioCodecs(); + // Add the supported encryption schemes as if they came from the // component manifest. This list must match the CDM that is being // bundled with Chrome. |