diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp index fdb410e66e1e226c73c4f8a257eda697bbe246b6..14f3b1c6cbbcb31700e267a68eaa3d1610abd071 100644 --- a/src/core/browser_context_adapter.cpp +++ b/src/core/browser_context_adapter.cpp @@ -368,4 +368,14 @@ void BrowserContextAdapter::permissionRequestReply(const QUrl &origin, Permissio static_cast<PermissionManagerQt*>(browserContext()->GetPermissionManager())->permissionRequestReply(origin, type, reply); } +QString BrowserContextAdapter::httpAcceptLanguage() const +{ + return m_httpAcceptLanguage; +} + +void BrowserContextAdapter::setHttpAcceptLanguage(const QString &httpAcceptLanguage) +{ + m_httpAcceptLanguage = httpAcceptLanguage; +} + } // namespace QtWebEngineCore diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h index d8609108ccf22b4725b4d79ab45f1515796de5f6..d58d8a4befe5debddb0044b828a801991a754432 100644 --- a/src/core/browser_context_adapter.h +++ b/src/core/browser_context_adapter.h @@ -151,6 +151,9 @@ public: void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply); + QString httpAcceptLanguage() const; + void setHttpAcceptLanguage(const QString &httpAcceptLanguage); + private: QString m_name; bool m_offTheRecord; @@ -165,6 +168,7 @@ private: QString m_cachePath; QString m_httpUserAgent; HttpCacheType m_httpCacheType; + QString m_httpAcceptLanguage; PersistentCookiesPolicy m_persistentCookiesPolicy; VisitedLinksPolicy m_visitedLinksPolicy; QVector<CustomUrlSchemeHandler*> m_customUrlSchemeHandlers; diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp index f38451901b2e5f425e23401cbe84341f20a49b56..a8cb54c0ce97ead09e61f3a26a19a5b258bbbc16 100644 --- a/src/core/content_browser_client_qt.cpp +++ b/src/core/content_browser_client_qt.cpp @@ -422,6 +422,11 @@ std::string ContentBrowserClientQt::GetApplicationLocale() return WebEngineLibraryInfo::getApplicationLocale(); } +std::string ContentBrowserClientQt::GetAcceptLangs(content::BrowserContext *context) +{ + return static_cast<BrowserContextQt*>(context)->adapter()->httpAcceptLanguage().toStdString(); +} + void ContentBrowserClientQt::AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) { Q_UNUSED(child_process_id); diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h index f6add6805dfb67c91f375b2d11803ea29f4c1d77..eea7d2a2266747b8611a87d2d97d83862711547d 100644 --- a/src/core/content_browser_client_qt.h +++ b/src/core/content_browser_client_qt.h @@ -106,6 +106,7 @@ public: virtual net::URLRequestContextGetter *CreateRequestContext(content::BrowserContext *browser_context, content::ProtocolHandlerMap *protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptorss) Q_DECL_OVERRIDE; virtual std::string GetApplicationLocale() Q_DECL_OVERRIDE; + std::string GetAcceptLangs(content::BrowserContext* context) Q_DECL_OVERRIDE; virtual void AppendExtraCommandLineSwitches(base::CommandLine* command_line, int child_process_id) Q_DECL_OVERRIDE; #if defined(ENABLE_PLUGINS) diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp index 7db1fa0947e6636c7bf1421126fb3204afb04d33..0eb5163f944e6532c3948257f7837f91bf8cb35d 100644 --- a/src/core/url_request_context_getter_qt.cpp +++ b/src/core/url_request_context_getter_qt.cpp @@ -236,13 +236,32 @@ 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(m_urlRequestContext); Q_ASSERT(m_storage); - m_storage->set_http_user_agent_settings( - new net::StaticHttpUserAgentSettings("en-us,en", m_browserContext->httpUserAgent().toStdString())); + m_storage->set_http_user_agent_settings(new HttpUserAgentSettingsQt(m_browserContext)); } void URLRequestContextGetterQt::updateHttpCache() diff --git a/src/webengine/api/qquickwebengineprofile.cpp b/src/webengine/api/qquickwebengineprofile.cpp index 75ac6bb629371c6007f3311d5d1d795fcc47a3ff..38b042fff38375d44f7d21a7e0adecc562339022 100644 --- a/src/webengine/api/qquickwebengineprofile.cpp +++ b/src/webengine/api/qquickwebengineprofile.cpp @@ -399,6 +399,28 @@ void QQuickWebEngineProfile::setHttpCacheMaximumSize(int maximumSize) emit httpCacheMaximumSizeChanged(); } +/*! + \qmlproperty QString WebEngineProfile::httpAcceptLanguage + + The value of the Accept-Language HTTP request-header field. + + \since QtWebEngine 1.2 +*/ +QString QQuickWebEngineProfile::httpAcceptLanguage() const +{ + Q_D(const QQuickWebEngineProfile); + return d->browserContext()->httpAcceptLanguage(); +} + +void QQuickWebEngineProfile::setHttpAcceptLanguage(const QString &httpAcceptLanguage) +{ + Q_D(QQuickWebEngineProfile); + if (d->browserContext()->httpAcceptLanguage() == httpAcceptLanguage) + return; + d->browserContext()->setHttpAcceptLanguage(httpAcceptLanguage); + emit httpAcceptLanguageChanged(); +} + QQuickWebEngineProfile *QQuickWebEngineProfile::defaultProfile() { static QQuickWebEngineProfile *profile = new QQuickWebEngineProfile( diff --git a/src/webengine/api/qquickwebengineprofile_p.h b/src/webengine/api/qquickwebengineprofile_p.h index 3978fc5e0c134cd77493a75ab80eef75c04cf344..174734fa1ac62437499ba5082d4281d1c80ec4b1 100644 --- a/src/webengine/api/qquickwebengineprofile_p.h +++ b/src/webengine/api/qquickwebengineprofile_p.h @@ -63,6 +63,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineProfile : public QObject { Q_PROPERTY(QString cachePath READ cachePath WRITE setCachePath NOTIFY cachePathChanged FINAL) Q_PROPERTY(QString httpUserAgent READ httpUserAgent WRITE setHttpUserAgent NOTIFY httpUserAgentChanged FINAL) Q_PROPERTY(HttpCacheType httpCacheType READ httpCacheType WRITE setHttpCacheType NOTIFY httpCacheTypeChanged FINAL) + Q_PROPERTY(QString httpAcceptLanguage READ httpAcceptLanguage WRITE setHttpAcceptLanguage NOTIFY httpAcceptLanguageChanged FINAL) Q_PROPERTY(PersistentCookiesPolicy persistentCookiesPolicy READ persistentCookiesPolicy WRITE setPersistentCookiesPolicy NOTIFY persistentCookiesPolicyChanged FINAL) Q_PROPERTY(int httpCacheMaximumSize READ httpCacheMaximumSize WRITE setHttpCacheMaximumSize NOTIFY httpCacheMaximumSizeChanged FINAL) public: @@ -104,6 +105,9 @@ public: int httpCacheMaximumSize() const; void setHttpCacheMaximumSize(int maxSize); + Q_REVISION(2) QString httpAcceptLanguage() const; + Q_REVISION(2) void setHttpAcceptLanguage(const QString &httpAcceptLanguage); + static QQuickWebEngineProfile *defaultProfile(); signals: @@ -115,6 +119,7 @@ signals: void httpCacheTypeChanged(); void persistentCookiesPolicyChanged(); void httpCacheMaximumSizeChanged(); + Q_REVISION(2) void httpAcceptLanguageChanged(); void downloadRequested(QQuickWebEngineDownloadItem *download); void downloadFinished(QQuickWebEngineDownloadItem *download); diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index b73355ac20933deffefc9fab6835a64d637f0ea5..29010b0ddd9cffdc255c7c9442cfebb68655e2d6 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -354,6 +354,28 @@ void QWebEngineProfile::setHttpCacheType(QWebEngineProfile::HttpCacheType httpCa d->browserContext()->setHttpCacheType(BrowserContextAdapter::HttpCacheType(httpCacheType)); } +/*! + Sets the value of the Accept-Language HTTP request-header field. + + \since 5.6 + */ +void QWebEngineProfile::setHttpAcceptLanguage(const QString &httpAcceptLanguage) +{ + Q_D(QWebEngineProfile); + d->browserContext()->setHttpAcceptLanguage(httpAcceptLanguage); +} + +/*! + Returns the value of the Accept-Language HTTP request-header field. + + \since 5.6 + */ +QString QWebEngineProfile::httpAcceptLanguage() const +{ + Q_D(const QWebEngineProfile); + return d->browserContext()->httpAcceptLanguage(); +} + /*! Returns the current policy for persistent cookies. diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h index c90ea01e5ec89d7612d6730656061643f85cab47..09160fecb9405566dd1f93a77ee979b57e767a5f 100644 --- a/src/webenginewidgets/api/qwebengineprofile.h +++ b/src/webenginewidgets/api/qwebengineprofile.h @@ -89,6 +89,9 @@ public: HttpCacheType httpCacheType() const; void setHttpCacheType(QWebEngineProfile::HttpCacheType); + void setHttpAcceptLanguage(const QString &httpAcceptLanguage); + QString httpAcceptLanguage() const; + PersistentCookiesPolicy persistentCookiesPolicy() const; void setPersistentCookiesPolicy(QWebEngineProfile::PersistentCookiesPolicy);