forked from pool/libqt5-qtwebengine
0792994e04
Qt WebEngine 5.15.3. Also compatible with Qt 5.12 OBS-URL: https://build.opensuse.org/request/show/881623 OBS-URL: https://build.opensuse.org/package/show/KDE:Qt:5.15/libqt5-qtwebengine?expand=0&rev=23
136 lines
5.1 KiB
Diff
136 lines
5.1 KiB
Diff
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
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
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>
|
|
---
|
|
src/core/content_browser_client_qt.cpp | 7 +++++-
|
|
src/core/content_browser_client_qt.h | 2 ++
|
|
src/core/web_engine_library_info.cpp | 18 +++++++-------
|
|
.../qwebengineview/tst_qwebengineview.cpp | 24 +++++++++++++++++++
|
|
4 files changed, 40 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
|
|
index e13ecd8d..c2c78ff8 100644
|
|
--- a/src/core/content_browser_client_qt.cpp
|
|
+++ b/src/core/content_browser_client_qt.cpp
|
|
@@ -471,7 +471,12 @@ std::unique_ptr<net::ClientCertStore> ContentBrowserClientQt::CreateClientCertSt
|
|
|
|
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 7c8aa3ac..1ccd2926 100644
|
|
--- a/src/core/content_browser_client_qt.h
|
|
+++ b/src/core/content_browser_client_qt.h
|
|
@@ -269,6 +269,8 @@ public:
|
|
|
|
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 2ad5b756..09a4141b 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 @@ base::string16 WebEngineLibraryInfo::getApplicationName()
|
|
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 02198638..bf2c28ae 100644
|
|
--- a/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
|
+++ b/tests/auto/widgets/qwebengineview/tst_qwebengineview.cpp
|
|
@@ -123,6 +123,7 @@ private Q_SLOTS:
|
|
void doNotBreakLayout();
|
|
|
|
void changeLocale();
|
|
+ void mixLangLocale();
|
|
void inputMethodsTextFormat_data();
|
|
void inputMethodsTextFormat();
|
|
void keyboardEvents();
|
|
@@ -1210,6 +1211,29 @@ void tst_QWebEngineView::changeLocale()
|
|
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");
|
|
--
|
|
2.30.2
|
|
|