diff options
author | Andy Shaw <andy.shaw@qt.io> | 2020-03-24 09:13:45 +0100 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2020-03-28 09:40:59 +0100 |
commit | 0223d2911cea5a8a412e4b8a625c19b8c8b7848b (patch) | |
tree | 15262bcba714aba345d62f2dd1cceb9a44a5217e | |
parent | 8947dc6902bfd2a8acd31b8c894407bf6a12695b (diff) |
Windows: Look for the WidevineCdm plugin in the new Chrome locations
With the later versions of Chrome it will place the WidevineCdm plugin
inside the Program Files folder, so we need to check in there for the
plugin on Windows as well as the older locations.
Change-Id: I4ce10536dbd4779a2c3631827a9cb3a5eb8cb7d0
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
-rw-r--r-- | src/core/content_client_qt.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp index 22f3f548f..7274615ea 100644 --- a/src/core/content_client_qt.cpp +++ b/src/core/content_client_qt.cpp @@ -114,6 +114,15 @@ static QString getLocalAppDataDir() result = QDir::fromNativeSeparators(QString::fromWCharArray(path)); return result; } + +static QString getProgramFilesDir(bool x86Dir = false) +{ + QString result; + wchar_t path[MAX_PATH]; + if (SHGetSpecialFolderPath(0, path, x86Dir ? CSIDL_PROGRAM_FILESX86 : CSIDL_PROGRAM_FILES, FALSE)) + result = QDir::fromNativeSeparators(QString::fromWCharArray(path)); + return result; +} #endif #if QT_CONFIG(webengine_pepper_plugins) @@ -307,6 +316,28 @@ static bool IsWidevineAvailable(base::FilePath *cdm_path, } } #elif defined(Q_OS_WIN) + const QString googleChromeDir = QLatin1String("/Google/Chrome/Application"); + const QStringList programFileDirs{getProgramFilesDir() + googleChromeDir, + getProgramFilesDir(true) + googleChromeDir}; + for (const QString &dir : programFileDirs) { + QDir d(dir); + if (d.exists()) { + QFileInfoList widevineVersionDirs = d.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed); + for (int i = 0; i < widevineVersionDirs.size(); ++i) { + QString versionDirPath(widevineVersionDirs.at(i).absoluteFilePath()); +#ifdef WIN64 + QString potentialWidevinePluginPath = versionDirPath + + "/WidevineCdm/_platform_specific/win_x64/" + + QString::fromLatin1(kWidevineCdmFileName); +#else + QString potentialWidevinePluginPath = versionDirPath + + "/WidevineCdm/_platform_specific/win_x86/" + + QString::fromLatin1(kWidevineCdmFileName); +#endif + pluginPaths << potentialWidevinePluginPath; + } + } + } QDir potentialWidevineDir(getLocalAppDataDir() + "/Google/Chrome/User Data/WidevineCDM"); if (potentialWidevineDir.exists()) { QFileInfoList widevineVersionDirs = potentialWidevineDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name | QDir::Reversed); |