summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-19 16:15:39 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-19 16:20:17 +0100
commitd7683b0ad757b807dd9617e8aee6614efca95c18 (patch)
treedab1959db053a8baf0a565ebb533a63559571919
parentb76617aa6cde293efb2e3ef539855ec6cfcc47ab (diff)
downloadbrowser-poc-d7683b0ad757b807dd9617e8aee6614efca95c18.tar.gz
Implemented onAuthenticationDialog
-rw-r--r--browser/browser.cpp12
-rw-r--r--browser/browser.h4
-rw-r--r--browser/browser.pro15
-rw-r--r--browser/browserhelper.cpp9
-rw-r--r--browser/networkmanager.cpp51
-rw-r--r--browser/networkmanager.h58
-rw-r--r--browser/unit-tests/browserdbus/browserdbus.pro3
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp7
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.h1
-rw-r--r--common/browserdbus.cpp9
-rw-r--r--common/browserdbus.h3
-rw-r--r--common/browserdefs.h106
-rw-r--r--demoui/demoui.pro3
-rw-r--r--testapp/testapp.pro3
14 files changed, 276 insertions, 8 deletions
diff --git a/browser/browser.cpp b/browser/browser.cpp
index 96ab0f4..324817b 100644
--- a/browser/browser.cpp
+++ b/browser/browser.cpp
@@ -18,9 +18,10 @@
#include "browser.h"
#include "browserview.h"
#include "userinput.h"
+#include "networkmanager.h"
-browser::browser(cachemanager *manager, userinput *uip, QObject *parent) :
- QObject(parent), m_cacheManager (manager), m_userInput (uip)
+browser::browser(cachemanager *manager, userinput *uip, networkmanager *nm, QObject *parent) :
+ QObject(parent), m_cacheManager (manager), m_userInput (uip), m_networkManager(nm)
{
qDebug() << __PRETTY_FUNCTION__;
}
@@ -80,6 +81,13 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw:
exit(1);
}
+ QString *networkmanagerservice = new QString( *webpagewindowservice + "/INetworkManager");
+ qDebug() << *networkmanagerservice;
+ if(!conn.registerObject(*networkmanagerservice, m_networkManager)) {
+ qDebug() << "failed register object INetworkManager";
+ exit(1);
+ }
+
emit onPageWindowCreated(a_hPageWindowHandle, conn::brw::EID_NO_ERROR);
return conn::brw::EID_NO_ERROR;
}
diff --git a/browser/browser.h b/browser/browser.h
index ec4b707..60d1271 100644
--- a/browser/browser.h
+++ b/browser/browser.h
@@ -23,12 +23,13 @@
#include "browserview.h"
#include "cachemanager.h"
#include "userinput.h"
+#include "networkmanager.h"
class browser : public QObject, protected QDBusContext
{
Q_OBJECT
public:
- explicit browser(cachemanager *, userinput *, QObject *parent = 0);
+ explicit browser(cachemanager *, userinput *, networkmanager *, QObject *parent = 0);
webpagewindow *wpw;
@@ -53,6 +54,7 @@ private:
QHash<QString, BrowserView *> webviewhash;
cachemanager *m_cacheManager;
userinput *m_userInput;
+ networkmanager *m_networkManager;
};
#endif // BROWSER_H
diff --git a/browser/browser.pro b/browser/browser.pro
index 7d0a6fc..f6e14b8 100644
--- a/browser/browser.pro
+++ b/browser/browser.pro
@@ -26,12 +26,17 @@ my_dbus_browser_adaptors.files += ../common/IBrowser.xml
my_dbus_browser_adaptors.header_flags = -i browser.h -i ../common/browserdefs.h -l browser
my_dbus_browser_adaptors.source_flags = -l browser
+my_dbus_networkmanager_adaptors.files += ../common/INetworkManager.xml
+my_dbus_networkmanager_adaptors.header_flags = -i networkmanager.h -i ../common/networkmanager.h -l networkmanager
+my_dbus_networkmanager_adaptors.source_flags = -l networkmanager
+
DBUS_ADAPTORS += my_dbus_bookmark_adaptors \
my_dbus_cachemanager_adaptors \
my_dbus_userinput_adaptors \
my_dbus_webpagewindow_adaptors \
my_dbus_browser_adaptors \
- my_dbus_errorlogger_adaptors
+ my_dbus_errorlogger_adaptors \
+ my_dbus_networkmanager_adaptors
SOURCES += main.cpp \
bookmarkmanager.cpp \
@@ -44,6 +49,7 @@ SOURCES += main.cpp \
cachemanager.cpp \
errorlogger.cpp \
browserpage.cpp \
+ networkmanager.cpp \
../common/bookmark.cpp \
HEADERS += \
@@ -57,6 +63,7 @@ HEADERS += \
cachemanager.h \
errorlogger.h \
browserpage.h \
+ networkmanager.h \
../common/bookmark.h \
../common/browserdefs.h \
@@ -72,3 +79,9 @@ system("$$[QT_INSTALL_PREFIX]/bin/qdbusxml2cpp -i errorlogger.h\
-l errorlogger\
-a ierrorlogger_adaptor\
../common/IErrorLogger.xml")
+
+system("$$[QT_INSTALL_PREFIX]/bin/qdbusxml2cpp -i networkmanager.h\
+ -i ../common/browserdefs.h\
+ -l networkmanager\
+ -a inetworkmanager_adaptor\
+ ../common/INetworkManager.xml")
diff --git a/browser/browserhelper.cpp b/browser/browserhelper.cpp
index c564181..7878a7c 100644
--- a/browser/browserhelper.cpp
+++ b/browser/browserhelper.cpp
@@ -20,6 +20,7 @@
#include "ibrowser_adaptor.h"
#include "icachemanager_adaptor.h"
#include "ierrorlogger_adaptor.h"
+#include "inetworkmanager_adaptor.h"
browserhelper::browserhelper(QString instanceId, QObject *parent) :
@@ -58,7 +59,10 @@ browserhelper::browserhelper(QString instanceId, QObject *parent) :
exit(1);
}
- browser *br = new browser(cm, ui);
+ networkmanager *nm = new networkmanager(cm->getNetworkAccessManager());
+ new INetworkManagerAdaptor(nm);
+
+ browser *br = new browser(cm, ui, nm);
new IBrowserAdaptor(br);
if(!connection->registerObject("/Browser/IBrowser", br)) {
qDebug() << "failed register object IBrowser";
@@ -99,5 +103,8 @@ void browserhelper::registertypes() {
qDBusRegisterMetaType<conn::brw::OBJECT_HANDLE>();
qDBusRegisterMetaType<conn::brw::ObjectHandleList>();
qDBusRegisterMetaType<conn::brw::CACHE_POLICY>();
+ qDBusRegisterMetaType<conn::brw::AuthenticationData>();
+ qDBusRegisterMetaType<conn::brw::SelectableOption>();
+ qDBusRegisterMetaType<conn::brw::SelectableOptionList>();
}
diff --git a/browser/networkmanager.cpp b/browser/networkmanager.cpp
new file mode 100644
index 0000000..10c6712
--- /dev/null
+++ b/browser/networkmanager.cpp
@@ -0,0 +1,51 @@
+/**
+ * Copyright (C) 2014, Pelagicore
+ *
+ * Author: Jonatan Pålsson <jonatan.palsson@pelagicore.com>
+ *
+ * This file is part of the GENIVI project Browser Proof-Of-Concept
+ * For further information, see http://genivi.org/
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#include "networkmanager.h"
+#include <QDebug>
+#include <QDBusMessage>
+#include <QAuthenticator>
+#include <QEventLoop>
+
+networkmanager::networkmanager(QNetworkAccessManager *nam, QObject *parent) :
+ QObject(parent), m_nam (nam)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ connect(nam, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)),
+ this,SLOT (onAuthenticationRequired(QNetworkReply *, QAuthenticator *)));
+}
+
+conn::brw::ERROR_IDS networkmanager::closeAuthenticationDialog(conn::brw::DIALOG_RESULT res, const conn::brw::AuthenticationData& data)
+{
+ emit doCloseAuthenticationDialog(res == conn::brw::DR_OK, data);
+ return conn::brw::EID_NO_ERROR;
+}
+conn::brw::ERROR_IDS networkmanager::closeSslErrorDialog(conn::brw::DIALOG_RESULT res, bool saveCert)
+{
+}
+
+void networkmanager::onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
+{
+ conn::brw::AuthenticationData data;
+ 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)), &loop, SLOT(quit()));
+ loop.exec();
+ qDebug() << "Authentication provided";
+
+ authenticator->setUser(m_authData.strUserName);
+ authenticator->setPassword(m_authData.strPassword);
+}
diff --git a/browser/networkmanager.h b/browser/networkmanager.h
new file mode 100644
index 0000000..68e51ab
--- /dev/null
+++ b/browser/networkmanager.h
@@ -0,0 +1,58 @@
+/**
+ * Copyright (C) 2014, Pelagicore
+ *
+ * Author: Jonatan Pålsson <jonatan.palsson@pelagicore.com>
+ *
+ * This file is part of the GENIVI project Browser Proof-Of-Concept
+ * For further information, see http://genivi.org/
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#ifndef NETWORKMAMAGER_H
+#define NETWORKMAMAGER_H
+
+#include <QObject>
+#include <QDBusContext>
+#include <QDebug>
+#include <QNetworkAccessManager>
+#include <QAuthenticator>
+
+#include "../common/browserdefs.h"
+
+class networkmanager : public QObject, protected QDBusContext
+{
+ Q_OBJECT
+public:
+ explicit networkmanager(QNetworkAccessManager *nam, QObject *parent = 0);
+
+
+signals:
+ void onAuthenticationDialog(const conn::brw::AuthenticationData &);
+ void onAuthenticationDialogCancel(conn::brw::AuthenticationData &);
+ void onSslErrorDialog(conn::brw::AuthenticationData &);
+ void onSslErrorDialogCancel(const conn::brw::SslError &);
+
+ // Internal
+ void doCloseAuthenticationDialog(bool, const conn::brw::AuthenticationData);
+
+public Q_SLOTS:
+ conn::brw::ERROR_IDS closeAuthenticationDialog(conn::brw::DIALOG_RESULT, const conn::brw::AuthenticationData&);
+ conn::brw::ERROR_IDS closeSslErrorDialog(conn::brw::DIALOG_RESULT, bool);
+
+ // Internal
+ void onAuthenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
+ void authenticate(bool b, const conn::brw::AuthenticationData ad)
+ {
+ m_authBool = b;
+ m_authData = ad;
+ }
+private:
+ QNetworkAccessManager *m_nam;
+ bool m_authBool;
+ conn::brw::AuthenticationData m_authData;
+};
+
+#endif // NETWORKMAMAGER_H
diff --git a/browser/unit-tests/browserdbus/browserdbus.pro b/browser/unit-tests/browserdbus/browserdbus.pro
index dd1bd0e..1333b71 100644
--- a/browser/unit-tests/browserdbus/browserdbus.pro
+++ b/browser/unit-tests/browserdbus/browserdbus.pro
@@ -11,7 +11,8 @@ QT += dbus webkitwidgets
my_dbus_interfaces.files += ../../../common/IBookmarkManager.xml \
../../../common/IUserInput.xml \
../../../common/IWebPageWindow.xml \
- ../../../common/IBrowser.xml
+ ../../../common/IBrowser.xml \
+ ../../../common/INetworkManager.xml
my_dbus_interfaces.header_flags = -i ../../../common/browserdefs.h
DBUS_INTERFACES += my_dbus_interfaces
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
index 76b4c1f..afda8aa 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
@@ -331,4 +331,11 @@ void TestBrowserDBus::testGetsNotifiedWhenSelectIsSelected() {
QProcess::execute("xdotool click 1");
QVERIFY(spy.wait(1000));
}
+
+void TestBrowserDBus::testGetsNotifiedOnAuthDialog() {
+ QSignalSpy spy (m_bdb, SIGNAL(onAuthenticationDialog(const conn::brw::AuthenticationData&)));
+ m_bdb->createPageWindow(1,0,0,800,600);
+ m_bdb->loadurl("http://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx");
+ QVERIFY(spy.wait(5000));
+}
QTEST_MAIN (TestBrowserDBus);
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.h b/browser/unit-tests/browserdbus/testbrowserdbus.h
index faaceeb..5dc4edc 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.h
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.h
@@ -49,6 +49,7 @@ private slots:
void testAlertDialog();
void testGetPrevEnteredValues();
void testGetsNotifiedWhenSelectIsSelected();
+ void testGetsNotifiedOnAuthDialog();
private:
QString testFileUrl() {
diff --git a/common/browserdbus.cpp b/common/browserdbus.cpp
index 330fd67..45f11dd 100644
--- a/common/browserdbus.cpp
+++ b/common/browserdbus.cpp
@@ -41,6 +41,7 @@ void BrowserDbus::registertypes() {
qDBusRegisterMetaType<conn::brw::BrowserActions>();
qDBusRegisterMetaType<conn::brw::OBJECT_HANDLE>();
qDBusRegisterMetaType<conn::brw::ObjectHandleList>();
+ qDBusRegisterMetaType<conn::brw::AuthenticationData>();
}
void BrowserDbus::connectdbussession(QString id) {
@@ -223,6 +224,14 @@ void BrowserDbus::createPageWindow(int deviceid, int x, int y, int width, int he
qDebug() << "failed create object /Browser/IWebPageWindow*/IUserInput";
connect(actualuserinput, SIGNAL(onInputText(QString,QString,conn::brw::INPUT_ELEMENT_TYPE,int,int,int,int)), this, SLOT(InputTextReceived(QString,QString,conn::brw::INPUT_ELEMENT_TYPE,int,int,int,int)));
+
+ QString *networkmanagerservice = new QString(*webpagewindowservice + "/INetworkManager");
+
+ networkmanager = new conn::brw::INetworkManager(*dbusservicename, *networkmanagerservice,
+ QDBusConnection::sessionBus(), this);
+
+ connect(networkmanager, SIGNAL(onAuthenticationDialog(const conn::brw::AuthenticationData&)),
+ this, SIGNAL(onAuthenticationDialog(const conn::brw::AuthenticationData&)));
} else {
QDBusError error = reply.error();
qDebug() << "ERROR " << error.name() << error.message();
diff --git a/common/browserdbus.h b/common/browserdbus.h
index 65d7a04..155981d 100644
--- a/common/browserdbus.h
+++ b/common/browserdbus.h
@@ -21,6 +21,7 @@
#include "iuserinput_interface.h"
#include "iwebpagewindow_interface.h"
#include "ibrowser_interface.h"
+#include "inetworkmanager_interface.h"
#include "../common/bookmark.h"
class BrowserDbus : public QObject
@@ -111,6 +112,7 @@ signals:
void onAlertDialog(QString);
void onDialogCanceled(void);
void onSelect(const QString &, const conn::brw::SelectableOptionList &, bool);
+ void onAuthenticationDialog(const conn::brw::AuthenticationData&);
public slots:
void pageloadingstarted();
@@ -127,6 +129,7 @@ private:
conn::brw::IWebPageWindow *webpagewindow;
conn::brw::IWebPageWindow *actualtab;
conn::brw::IUserInput *actualuserinput;
+ conn::brw::INetworkManager *networkmanager;
QList<conn::brw::OBJECT_HANDLE> handlelist;
conn::brw::IBrowser *browser;
QString m_title;
diff --git a/common/browserdefs.h b/common/browserdefs.h
index d2ce3c1..6f60c8f 100644
--- a/common/browserdefs.h
+++ b/common/browserdefs.h
@@ -656,6 +656,110 @@ namespace conn {
return args;
//#]
}
+
+ /*!
+ * Authentication data used for Server and Proxy authentication.
+ */
+ //## type AuthenticationData
+ struct AuthenticationData
+ {
+ /*!
+ * Host name or Url for which the password is valid. In case of proxy authentication the customer receives "host:port" url, in case of the content authentication the url contans the resource URI.
+ */
+ QString strHost; //## attribute strHost
+ /*!
+ * User name
+ */
+ QString strUserName; //## attribute strUserName
+ /*!
+ * User password
+ */
+ QString strPassword; //## attribute strPassword
+ /*!
+ * Defines to store password into database.
+ */
+ bool bSave; //## attribute bSave
+
+ AuthenticationData()
+ :strHost("")
+ ,strUserName("")
+ ,strPassword("")
+ ,bSave(true)
+ {}
+ };
+ inline const QDBusArgument& operator>>(const QDBusArgument& args, AuthenticationData& ad) {
+ args.beginStructure();
+ args >> ad.strHost
+ >> ad.strUserName
+ >> ad.strPassword
+ >> ad.bSave;
+ args.endStructure();
+ return args;
+ }
+
+ inline QDBusArgument& operator<<(QDBusArgument& args, const AuthenticationData& ad) {
+ args.beginStructure();
+ args << ad.strHost
+ << ad.strUserName
+ << ad.strPassword
+ << ad.bSave;
+ args.endStructure();
+ return args;
+ }
+
+ /*!
+ * SslErrors
+ */
+ //## type SSL_ERROR
+ enum SSL_ERROR {
+ NoError,
+ UnableToGetIssuerCertificate,
+ UnableToDecryptCertificateSignature,
+ UnableToDecodeIssuerPublicKey,
+ CertificateSignatureFailed,
+ CertificateNotYetValid,
+ CertificateExpired,
+ InvalidNotBeforeField,
+ InvalidNotAfterField,
+ SelfSignedCertificate,
+ SelfSignedCertificateInChain,
+ UnableToGetLocalIssuerCertificate,
+ UnableToVerifyFirstCertificate,
+ CertificateRevoked,
+ InvalidCaCertificate,
+ PathLengthExceeded,
+ InvalidPurpose,
+ CertificateUntrusted,
+ CertificateRejected,
+ SubjectIssuerMismatch,
+ hostnamemismatch,
+ AuthorityIssuerSerialNumberMismatch,
+ NoPeerCertificate,
+ HostNameMismatch,
+ NoSslSupport,
+ CertificateBlacklisted,
+ UnspecifiedError = -1
+ };
+
+ /*!
+ * The SslError structure describes the error information happens during ssl connection.
+ */
+ //## type SslError
+ struct SslError {
+ /*!
+ * Error code. It could be HTTP error codes, or internal codes.
+ */
+ SSL_ERROR sslError; //## attribute sslError
+ /*!
+ * Url
+ */
+ QString strUrl; //## attribute strUrl
+ /*!
+ * Short text description of the error.
+ */
+ QString strErrorMessage; //## attribute strErrorMessage
+ };
+
}
}
@@ -678,5 +782,7 @@ Q_DECLARE_METATYPE(conn::brw::CACHE_POLICY);
Q_DECLARE_METATYPE(conn::brw::ErrorItemList);
Q_DECLARE_METATYPE(conn::brw::ErrorItem);
Q_DECLARE_METATYPE(conn::brw::ERROR_SORT_TYPE);
+Q_DECLARE_METATYPE(conn::brw::AuthenticationData);
+Q_DECLARE_METATYPE(conn::brw::SslError);
#endif // BROWSERDEFS_H
diff --git a/demoui/demoui.pro b/demoui/demoui.pro
index 56f67a2..d9640ca 100644
--- a/demoui/demoui.pro
+++ b/demoui/demoui.pro
@@ -9,7 +9,8 @@ QML_IMPORT_PATH =
my_dbus_interfaces.files += ../common/IBookmarkManager.xml \
../common/IUserInput.xml \
../common/IWebPageWindow.xml \
- ../common/IBrowser.xml
+ ../common/IBrowser.xml \
+ ../common/INetworkManager.xml
my_dbus_interfaces.header_flags = -i ../common/browserdefs.h
DBUS_INTERFACES += my_dbus_interfaces
diff --git a/testapp/testapp.pro b/testapp/testapp.pro
index 7966569..da84a8b 100644
--- a/testapp/testapp.pro
+++ b/testapp/testapp.pro
@@ -16,7 +16,8 @@ TEMPLATE = app
my_dbus_interfaces.files += ../common/IBookmarkManager.xml \
../common/IUserInput.xml \
../common/IWebPageWindow.xml \
- ../common/IBrowser.xml
+ ../common/IBrowser.xml \
+ ../common/INetworkManager.xml
my_dbus_interfaces.header_flags = -i ../common/browserdefs.h
my_dbus_interfaces.files += ../common/ICacheManager.xml