summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/browser_context_adapter.cpp14
-rw-r--r--src/core/url_request_context_getter_qt.cpp23
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp28
3 files changed, 44 insertions, 21 deletions
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index 9af8d3ef5..c7118b4f7 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -440,7 +440,21 @@ QString BrowserContextAdapter::httpAcceptLanguage() const
void BrowserContextAdapter::setHttpAcceptLanguage(const QString &httpAcceptLanguage)
{
+ if (m_httpAcceptLanguage == httpAcceptLanguage)
+ return;
m_httpAcceptLanguage = httpAcceptLanguage;
+
+ std::vector<content::WebContentsImpl *> list = content::WebContentsImpl::GetAllWebContents();
+ Q_FOREACH (content::WebContentsImpl *web_contents, list) {
+ if (web_contents->GetBrowserContext() == m_browserContext.data()) {
+ content::RendererPreferences* rendererPrefs = web_contents->GetMutableRendererPrefs();
+ rendererPrefs->accept_languages = httpAcceptLanguageWithoutQualities().toStdString();
+ web_contents->GetRenderViewHost()->SyncRendererPrefs();
+ }
+ }
+
+ if (m_browserContext->url_request_getter_.get())
+ m_browserContext->url_request_getter_->updateUserAgent();
}
} // namespace QtWebEngineCore
diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp
index bbabb8707..0a6a85e41 100644
--- a/src/core/url_request_context_getter_qt.cpp
+++ b/src/core/url_request_context_getter_qt.cpp
@@ -268,33 +268,14 @@ void URLRequestContextGetterQt::updateUserAgent()
content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestContextGetterQt::generateUserAgent, this));
}
-class HttpUserAgentSettingsQt : public net::HttpUserAgentSettings
-{
- const BrowserContextAdapter *m_browserContext;
-public:
- HttpUserAgentSettingsQt(const BrowserContextAdapter *ctx)
- : m_browserContext(ctx)
- {
- }
-
- std::string GetAcceptLanguage() const Q_DECL_OVERRIDE
- {
- return m_browserContext->httpAcceptLanguage().toStdString();
- }
-
- std::string GetUserAgent() const Q_DECL_OVERRIDE
- {
- return m_browserContext->httpUserAgent().toStdString();
- }
-};
-
void URLRequestContextGetterQt::generateUserAgent()
{
Q_ASSERT(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
Q_ASSERT(m_urlRequestContext);
Q_ASSERT(m_storage);
- m_storage->set_http_user_agent_settings(new HttpUserAgentSettingsQt(m_browserContext.data()));
+ m_storage->set_http_user_agent_settings(
+ new net::StaticHttpUserAgentSettings(m_browserContext->httpAcceptLanguage().toStdString(), m_browserContext->httpUserAgent().toStdString()));
}
void URLRequestContextGetterQt::updateHttpCache()
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index e89940d71..287e2364a 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -53,6 +53,7 @@ private Q_SLOTS:
void urlSchemeHandlers();
void urlSchemeHandlerFailRequest();
void customUserAgent();
+ void httpAcceptLanguage();
};
void tst_QWebEngineProfile::defaultProfile()
@@ -217,5 +218,32 @@ void tst_QWebEngineProfile::customUserAgent()
QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("navigator.userAgent")).toString(), testUserAgent);
}
+void tst_QWebEngineProfile::httpAcceptLanguage()
+{
+ QWebEnginePage page;
+ QSignalSpy loadFinishedSpy(&page, SIGNAL(loadFinished(bool)));
+ page.setHtml(QStringLiteral("<html><body>Hello world!</body></html>"));
+ QTRY_COMPARE(loadFinishedSpy.count(), 1);
+
+ QStringList defaultLanguages = evaluateJavaScriptSync(&page, QStringLiteral("navigator.languages")).toStringList();
+
+ const QString testLang = QStringLiteral("xx-YY");
+ QWebEngineProfile testProfile;
+ testProfile.setHttpAcceptLanguage(testLang);
+
+ // Test a completely new profile
+ QWebEnginePage page2(&testProfile);
+ QSignalSpy loadFinishedSpy2(&page2, SIGNAL(loadFinished(bool)));
+ page2.setHtml(QStringLiteral("<html><body>Hello again!</body></html>"));
+ QTRY_COMPARE(loadFinishedSpy2.count(), 1);
+ QCOMPARE(evaluateJavaScriptSync(&page2, QStringLiteral("navigator.languages")).toStringList(), QStringList(testLang));
+ // Test the old one wasn't affected
+ QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("navigator.languages")).toStringList(), defaultLanguages);
+
+ // Test changing an existing page and profile
+ QWebEngineProfile::defaultProfile()->setHttpAcceptLanguage(testLang);
+ QCOMPARE(evaluateJavaScriptSync(&page, QStringLiteral("navigator.languages")).toStringList(), QStringList(testLang));
+}
+
QTEST_MAIN(tst_QWebEngineProfile)
#include "tst_qwebengineprofile.moc"