qt5-webengine: import upstream patch to fix crashes with a lot locales
without this only en_GB and en_US seem to work
This commit is contained in:
parent
0868b04403
commit
a4d5c8a715
2 changed files with 125 additions and 1 deletions
124
srcpkgs/qt5-webengine/patches/QTBUG-91715.patch
Normal file
124
srcpkgs/qt5-webengine/patches/QTBUG-91715.patch
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
From 199ea00a9eea13315a652c62778738629185b059 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
|
||||||
|
Date: Wed, 10 Mar 2021 17:14:27 +0100
|
||||||
|
Subject: [PATCH] Fix normalization of app locales
|
||||||
|
|
||||||
|
Use the internal Chromium routine to get the app locale Chromium
|
||||||
|
expects.
|
||||||
|
|
||||||
|
Fixes: QTBUG-91715
|
||||||
|
Change-Id: I5042eb066cb6879ad69628959912f2841867b4e8
|
||||||
|
Reviewed-by: Michael Brüning <michael.bruning@qt.io>
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
|
||||||
|
index e13ecd8..c2c78ff 100644
|
||||||
|
--- a/src/core/content_browser_client_qt.cpp
|
||||||
|
+++ b/src/core/content_browser_client_qt.cpp
|
||||||
|
@@ -471,7 +471,12 @@
|
||||||
|
|
||||||
|
std::string ContentBrowserClientQt::GetApplicationLocale()
|
||||||
|
{
|
||||||
|
- return WebEngineLibraryInfo::getApplicationLocale();
|
||||||
|
+ std::string bcp47Name = QLocale().bcp47Name().toStdString();
|
||||||
|
+ if (m_cachedQtLocale != bcp47Name) {
|
||||||
|
+ m_cachedQtLocale = bcp47Name;
|
||||||
|
+ m_appLocale = WebEngineLibraryInfo::getApplicationLocale();
|
||||||
|
+ }
|
||||||
|
+ return m_appLocale;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ContentBrowserClientQt::GetAcceptLangs(content::BrowserContext *context)
|
||||||
|
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
|
||||||
|
index 7c8aa3a..1ccd292 100644
|
||||||
|
--- a/src/core/content_browser_client_qt.h
|
||||||
|
+++ b/src/core/content_browser_client_qt.h
|
||||||
|
@@ -269,6 +269,8 @@
|
||||||
|
|
||||||
|
private:
|
||||||
|
scoped_refptr<ShareGroupQtQuick> m_shareGroupQtQuick;
|
||||||
|
+ std::string m_appLocale;
|
||||||
|
+ std::string m_cachedQtLocale;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace QtWebEngineCore
|
||||||
|
diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp
|
||||||
|
index 2ad5b75..09a4141 100644
|
||||||
|
--- a/src/core/web_engine_library_info.cpp
|
||||||
|
+++ b/src/core/web_engine_library_info.cpp
|
||||||
|
@@ -46,6 +46,7 @@
|
||||||
|
#include "components/spellcheck/spellcheck_buildflags.h"
|
||||||
|
#include "content/public/common/content_paths.h"
|
||||||
|
#include "sandbox/policy/switches.h"
|
||||||
|
+#include "ui/base/l10n/l10n_util.h"
|
||||||
|
#include "ui/base/ui_base_paths.h"
|
||||||
|
#include "ui/base/ui_base_switches.h"
|
||||||
|
|
||||||
|
@@ -353,18 +354,15 @@
|
||||||
|
std::string WebEngineLibraryInfo::getApplicationLocale()
|
||||||
|
{
|
||||||
|
base::CommandLine *parsedCommandLine = base::CommandLine::ForCurrentProcess();
|
||||||
|
- if (!parsedCommandLine->HasSwitch(switches::kLang)) {
|
||||||
|
+ if (parsedCommandLine->HasSwitch(switches::kLang)) {
|
||||||
|
+ return parsedCommandLine->GetSwitchValueASCII(switches::kLang);
|
||||||
|
+ } else {
|
||||||
|
const QString &locale = QLocale().bcp47Name();
|
||||||
|
-
|
||||||
|
- // QLocale::bcp47Name returns "en" for American English locale. Chromium requires the "US" suffix
|
||||||
|
- // to clarify the dialect and ignores the shorter version.
|
||||||
|
- if (locale == "en")
|
||||||
|
- return "en-US";
|
||||||
|
-
|
||||||
|
- return locale.toStdString();
|
||||||
|
+ std::string resolvedLocale;
|
||||||
|
+ if (l10n_util::CheckAndResolveLocale(locale.toStdString(), &resolvedLocale))
|
||||||
|
+ return resolvedLocale;
|
||||||
|
}
|
||||||
|
-
|
||||||
|
- return parsedCommandLine->GetSwitchValueASCII(switches::kLang);
|
||||||
|
+ return "en-US";
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(OS_WIN)
|
||||||
|
diff --git a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
||||||
|
index 0219863..bf2c28a 100644
|
||||||
|
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
||||||
|
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
||||||
|
@@ -123,6 +123,7 @@
|
||||||
|
void doNotBreakLayout();
|
||||||
|
|
||||||
|
void changeLocale();
|
||||||
|
+ void mixLangLocale();
|
||||||
|
void inputMethodsTextFormat_data();
|
||||||
|
void inputMethodsTextFormat();
|
||||||
|
void keyboardEvents();
|
||||||
|
@@ -1210,6 +1211,29 @@
|
||||||
|
QCOMPARE(errorLines.first().toUtf8(), QByteArrayLiteral("Die Website ist nicht erreichbar"));
|
||||||
|
}
|
||||||
|
|
||||||
|
+void tst_QWebEngineView::mixLangLocale()
|
||||||
|
+{
|
||||||
|
+ for (QString locale : { "en_DK", "de_CH", "eu_ES" }) {
|
||||||
|
+ QLocale::setDefault(locale);
|
||||||
|
+ QWebEngineView view;
|
||||||
|
+ QSignalSpy loadSpy(&view, &QWebEngineView::loadFinished);
|
||||||
|
+
|
||||||
|
+ bool terminated = false;
|
||||||
|
+ auto sc = connect(view.page(), &QWebEnginePage::renderProcessTerminated, [&] () { terminated = true; });
|
||||||
|
+
|
||||||
|
+ view.load(QUrl("qrc:///resources/dummy.html"));
|
||||||
|
+ QTRY_VERIFY(terminated || loadSpy.count() == 1);
|
||||||
|
+
|
||||||
|
+ QVERIFY2(!terminated,
|
||||||
|
+ qPrintable(QString("Locale [%1] terminated: %2, loaded: %3").arg(locale).arg(terminated).arg(loadSpy.count())));
|
||||||
|
+ QVERIFY(loadSpy.first().first().toBool());
|
||||||
|
+
|
||||||
|
+ QString content = toPlainTextSync(view.page());
|
||||||
|
+ QVERIFY2(!content.isEmpty() && content.contains("test content"), qPrintable(content));
|
||||||
|
+ }
|
||||||
|
+ QLocale::setDefault(QLocale("en"));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void tst_QWebEngineView::inputMethodsTextFormat_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>("string");
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'qt5-webengine'
|
# Template file for 'qt5-webengine'
|
||||||
pkgname=qt5-webengine
|
pkgname=qt5-webengine
|
||||||
version=5.15.3
|
version=5.15.3
|
||||||
revision=1
|
revision=2
|
||||||
_commit=a059e7404a6db799f4da0ad696e65ae9c854b4b0
|
_commit=a059e7404a6db799f4da0ad696e65ae9c854b4b0
|
||||||
_chromium_commit=d9d9e606cb34b1b4ac0f44de132b1eb10763f1f6
|
_chromium_commit=d9d9e606cb34b1b4ac0f44de132b1eb10763f1f6
|
||||||
archs="x86_64* i686* armv[67]* ppc64* aarch64*"
|
archs="x86_64* i686* armv[67]* ppc64* aarch64*"
|
||||||
|
|
Loading…
Reference in a new issue