From da19f5f180300ba02b544e8445c163b68ac237a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Thu, 10 Apr 2014 13:25:12 +0200 Subject: Added support for HTTP proxies, with settings read from BrowserSettings --- browser/browser.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ browser/browserconfig.h | 4 ++++ 2 files changed, 58 insertions(+) diff --git a/browser/browser.cpp b/browser/browser.cpp index 6dcd0df..5a0834c 100644 --- a/browser/browser.cpp +++ b/browser/browser.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include "browser.h" #include "browserview.h" @@ -22,6 +23,9 @@ #include "networkmanager.h" #include "iwebpagewindow_adaptor.h" #include "iuserinput_adaptor.h" +#include "browserconfig.h" + +bool restoreSavedProxyConfig(); browser::browser(cachemanager *manager, networkmanager *nm, QObject *parent) : QObject(parent), m_cacheManager (manager), m_networkManager(nm) @@ -30,6 +34,8 @@ browser::browser(cachemanager *manager, networkmanager *nm, QObject *parent) : QWebSettings::globalSettings()-> setAttribute(QWebSettings::PluginsEnabled, true); + + restoreSavedProxyConfig(); } conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw::Rect & a_oGeometry, conn::brw::OBJECT_HANDLE &a_hPageWindowHandle) { @@ -128,3 +134,51 @@ conn::brw::ERROR_IDS browser::getPageWindows(conn::brw::ObjectHandleList &a_oPag } return ret; } + +bool restoreSavedProxyConfig() { + QString proxyHost; + int proxyPort; + QString proxyUsername; + QString proxyPassword; + BrowserConfig *bc = BrowserConfig::instance(); + + if (bc->contains(BrowserConfig::CONFIG_PROXY_HOST)) + proxyHost = bc->getValue(BrowserConfig::CONFIG_PROXY_HOST); + else + return false; + + if (bc->contains(BrowserConfig::CONFIG_PROXY_PORT)) { + proxyPort = bc->getValue(BrowserConfig::CONFIG_PROXY_PORT); + } + else { + qDebug("Found partial proxy configuration; CONFIG_PROXY_PORT missing"); + return false; + } + + if (bc->contains(BrowserConfig::CONFIG_PROXY_USERNAME)) { + proxyUsername = bc->getValue(BrowserConfig::CONFIG_PROXY_USERNAME); + } + else { + qDebug("Found partial proxy configuration; CONFIG_PROXY_USERNAME missing"); + return false; + } + + if (bc->contains(BrowserConfig::CONFIG_PROXY_PASSWORD)) { + proxyPassword = bc->getValue(BrowserConfig::CONFIG_PROXY_PASSWORD); + } + else { + qDebug("Found partial proxy configuration; CONFIG_PROXY_PASSWORD missing"); + return false; + } + + // All properties found, let's set up the proxy + + QNetworkProxy proxy; + proxy.setType(QNetworkProxy::HttpProxy); + proxy.setHostName(proxyHost); + proxy.setPort(proxyPort); + proxy.setUser(proxyUsername); + proxy.setPassword(proxyPassword); + QNetworkProxy::setApplicationProxy(proxy); + +} diff --git a/browser/browserconfig.h b/browser/browserconfig.h index 8a43bed..493d9dd 100644 --- a/browser/browserconfig.h +++ b/browser/browserconfig.h @@ -24,6 +24,10 @@ public: enum BrowserConfigKey { CONFIG_CACHEPOLICY, CONFIG_STARTPAGE, + CONFIG_PROXY_HOST, + CONFIG_PROXY_PORT, + CONFIG_PROXY_USERNAME, + CONFIG_PROXY_PASSWORD }; static BrowserConfig* instance() { -- cgit v1.2.1 From 1cf006f7d1b29382af99dbd8e4bf47974749ef51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Mon, 14 Apr 2014 12:24:08 +0200 Subject: Use window.scroll() instead of window.scrollTo() when scrolling absolutely --- browser/browserview.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/browser/browserview.cpp b/browser/browserview.cpp index 697361a..d8ad8e8 100644 --- a/browser/browserview.cpp +++ b/browser/browserview.cpp @@ -253,7 +253,7 @@ void BrowserView::scrollPositionChanged(uint x, uint y) void BrowserView::setScrollPosition(uint x, uint y) { - QString cmd = QString("window.scrollTo(%1,%2);").arg(QString::number(x), QString::number(y)); + QString cmd = QString("window.scroll(%1,%2);").arg(QString::number(x), QString::number(y)); m_webview.page()->mainFrame()->evaluateJavaScript(cmd); m_scrollPositionX = x; m_scrollPositionY = y; -- cgit v1.2.1 From 1a7ca3a227be6083a20a343a25afa595559b119b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonatan=20P=C3=A5lsson?= Date: Wed, 16 Apr 2014 10:53:29 +0200 Subject: Listen to onProxyAuthenticationRequired signal --- browser/networkmanager.cpp | 29 +++++++++++++++++++++++++++-- browser/networkmanager.h | 10 ++++++++-- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/browser/networkmanager.cpp b/browser/networkmanager.cpp index e047138..05e62b3 100644 --- a/browser/networkmanager.cpp +++ b/browser/networkmanager.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -93,6 +94,9 @@ networkmanager::networkmanager(QNetworkAccessManager *nam, QObject *parent) : this,SLOT (onAuthenticationRequired(QNetworkReply *, QAuthenticator *))); connect(nam, SIGNAL(sslErrors(QNetworkReply *, const QList &)), this,SLOT (onSslErrors(QNetworkReply *, const QList &))); + connect(nam, SIGNAL(proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *)), + this,SLOT (onProxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *))); + } conn::brw::ERROR_IDS networkmanager::closeAuthenticationDialog(conn::brw::DIALOG_RESULT res, const conn::brw::AuthenticationData& data) @@ -113,12 +117,12 @@ void networkmanager::onAuthenticationRequired(QNetworkReply *reply, QAuthenticat emit onAuthenticationDialog(data); qDebug() << "Authentication required"; QEventLoop loop; - connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticate(bool, const conn::brw::AuthenticationData))); + connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticateProxy(bool, const conn::brw::AuthenticationData))); connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), &loop, SLOT(quit())); loop.exec(); qDebug() << "Authentication provided: user" << m_authData.strUserName << "password:" << m_authData.strPassword; - if (m_authBool) { + if (m_authBoolProxy) { authenticator->setUser(m_authData.strUserName); authenticator->setPassword(m_authData.strPassword); } else { @@ -158,3 +162,24 @@ void networkmanager::onSslErrors(QNetworkReply *reply, const QList & } } +void networkmanager::onProxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator) +{ + conn::brw::AuthenticationData data; + data.strHost = proxy.hostName(); + emit onAuthenticationDialog(data); + qDebug() << "Proxy authentication required"; + QEventLoop loop; + connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), this, SLOT(authenticate(bool, const conn::brw::AuthenticationData))); + connect (this, SIGNAL(doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData)), &loop, SLOT(quit())); + loop.exec(); + qDebug() << "Proxy authentication provided: user" << m_authData.strUserName << "password:" << m_authData.strPassword; + + if (m_authBool) { + authenticator->setUser(m_authData.strUserName); + authenticator->setPassword(m_authData.strPassword); + } else { + qDebug() << "Action was cancelled"; + emit onAuthenticationDialogCancel(data); + } +} + diff --git a/browser/networkmanager.h b/browser/networkmanager.h index 7ee7229..618425b 100644 --- a/browser/networkmanager.h +++ b/browser/networkmanager.h @@ -46,11 +46,17 @@ public Q_SLOTS: // Internal void onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); void onSslErrors(QNetworkReply *reply, const QList & errors); + void onProxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *); void authenticate(bool b, const conn::brw::AuthenticationData ad) { m_authBool = b; m_authData = ad; } + void authenticateProxy(bool b, const conn::brw::AuthenticationData ad) + { + m_authBoolProxy = b; + m_authDataProxy = ad; + } void closeSsl(bool isOK, bool saveCert) { m_isSslOk = isOK; @@ -58,8 +64,8 @@ public Q_SLOTS: } private: QNetworkAccessManager *m_nam; - bool m_authBool, m_isSslOk, m_sslSaveCert; - conn::brw::AuthenticationData m_authData; + bool m_authBool, m_authBoolProxy, m_isSslOk, m_sslSaveCert; + conn::brw::AuthenticationData m_authData, m_authDataProxy; }; #endif // NETWORKMAMAGER_H -- cgit v1.2.1