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
|
@ -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'
|
||||
pkgname=qt5-webengine
|
||||
version=5.15.3
|
||||
revision=1
|
||||
revision=2
|
||||
_commit=a059e7404a6db799f4da0ad696e65ae9c854b4b0
|
||||
_chromium_commit=d9d9e606cb34b1b4ac0f44de132b1eb10763f1f6
|
||||
archs="x86_64* i686* armv[67]* ppc64* aarch64*"
|
||||
|
|
Loading…
Reference in New Issue