summaryrefslogtreecommitdiff
blob: dcfdeae3c6f3cc0a899f2616395c5fd34855ad6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
From b99042fb839021a0a3d2fe0cac7ac3899c4acbba Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
Date: Tue, 14 Jun 2022 14:19:24 +0200
Subject: [PATCH] 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>
---
 src/core/content_client_qt.cpp | 54 ++++++++++++++++++++++++++++++----
 1 file changed, 49 insertions(+), 5 deletions(-)

diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index 6c914b7729..7167332d9b 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -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
     }