diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | browser/browser.cpp | 18 | ||||
-rw-r--r-- | browser/browser.h | 7 | ||||
-rw-r--r-- | browser/browser.pro | 2 | ||||
-rw-r--r-- | browser/browserhelper.cpp | 9 | ||||
-rw-r--r-- | browser/browserpage.cpp | 49 | ||||
-rw-r--r-- | browser/browserpage.h | 46 | ||||
-rw-r--r-- | browser/browserview.cpp | 7 | ||||
-rw-r--r-- | browser/browserview.h | 4 | ||||
-rw-r--r-- | browser/unit-tests/browserdbus/testbrowserdbus.cpp | 18 | ||||
-rw-r--r-- | browser/unit-tests/browserdbus/testbrowserdbus.h | 2 | ||||
-rw-r--r-- | browser/unit-tests/browserdbus/webpagegenerator.h | 12 | ||||
-rw-r--r-- | browser/userinput.cpp | 36 | ||||
-rw-r--r-- | browser/userinput.h | 8 | ||||
-rw-r--r-- | common/browserdbus.cpp | 51 | ||||
-rw-r--r-- | common/browserdbus.h | 3 |
16 files changed, 252 insertions, 22 deletions
@@ -1,7 +1,6 @@ *.o moc_* Makefile -./browser *.pro.user browser.desktop browser64.png @@ -22,4 +21,3 @@ BrowserDefs* browserdbus-tests cachemanagerdbus-tests unit-tests -browser diff --git a/browser/browser.cpp b/browser/browser.cpp index 5cf030b..c9e75e2 100644 --- a/browser/browser.cpp +++ b/browser/browser.cpp @@ -17,15 +17,12 @@ #include "browser.h" #include "browserview.h" +#include "userinput.h" -browser::browser(cachemanager *manager, QObject *parent) : - QObject(parent) +browser::browser(cachemanager *manager, userinput *uip, QObject *parent) : + QObject(parent), m_cacheManager (manager), m_userInput (uip) { qDebug() << __PRETTY_FUNCTION__; - if (manager) { - qDebug() << "Setting default cacheManager"; - m_cacheManager = manager; - } } conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw::Rect & a_oGeometry, conn::brw::OBJECT_HANDLE &a_hPageWindowHandle) { @@ -33,7 +30,7 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw: Q_UNUSED(a_eDeviceId); - BrowserView *bvi = new BrowserView(m_cacheManager); + BrowserView *bvi = new BrowserView(m_cacheManager, m_userInput); bvi->setGeometry(a_oGeometry.i32X, a_oGeometry.i32Y, a_oGeometry.i32Width, a_oGeometry.i32Height); @@ -44,7 +41,6 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw: wpw->webitem = bvi; connect(bvi, SIGNAL(pageLoadFinished(bool)), wpw, SLOT(getUrlTitle())); - connect(ui, SIGNAL(inputText(QString)), this, SLOT(inputText(QString))); connect(bvi, SIGNAL(pageLoadStarted()), wpw, SLOT(browserStartLoading())); connect(bvi, SIGNAL(onVisibilityChanged(bool)), wpw, SIGNAL(onVisibilityChanged(bool))); connect(bvi, SIGNAL(pageLoadFinished(bool)), wpw, SIGNAL(onLoadFinished(bool))); @@ -55,13 +51,15 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw: connect(bvi, SIGNAL(onStatusTextChanged(QString)), wpw, SIGNAL(onStatusTextChanged(QString))); connect(bvi, SIGNAL(onZoomFactorChanged(double)), wpw, SIGNAL(onZoomFactorChanged(double))); connect(bvi, SIGNAL(onLinkHovered(QString)), wpw, SIGNAL(onLinkHovered(QString))); - connect(bvi, SIGNAL(onInputText(QString, QString, int, int, int, int, int)), ui, SLOT(inputTextReceived(QString, QString, int, int, int, int, int))); + connect(bvi, SIGNAL(onInputText(QString, QString, int, int, int, int, int)), m_userInput, SLOT(inputTextReceived(QString, QString, int, int, int, int, int))); connect(this,SIGNAL(onPageWindowDestroyed(qlonglong)), wpw, SIGNAL(onClose())); connect(bvi, SIGNAL(onScrollPositionChanged(uint,uint)), wpw, SIGNAL(onScrollPositionChanged(uint,uint))); connect(bvi, SIGNAL(onActionStateChanged(uint)), wpw, SIGNAL(onActionStateChanged(uint))); connect(bvi, SIGNAL(onContentSizeChanged(uint, uint)),wpw,SIGNAL(onContentSizeChanged(uint,uint))); connect(bvi, SIGNAL(onFaviconReceived()), wpw, SIGNAL(onFaviconReceived())); + connect(m_userInput, SIGNAL(inputText(QString)), this, SLOT(inputText(QString))); + QString *webpagewindowservice = new QString("/Browser/IWebPageWindow" + QString::number(a_hPageWindowHandle)); qDebug() << *webpagewindowservice; @@ -75,7 +73,7 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw: QString *userinputservice = new QString( *webpagewindowservice + "/IUserInput"); qDebug() << *userinputservice; - if(!conn.registerObject(*userinputservice, ui)) { + if(!conn.registerObject(*userinputservice, m_userInput)) { qDebug() << "failed register object IUserInput"; exit(1); } diff --git a/browser/browser.h b/browser/browser.h index 871ad32..5fb64ba 100644 --- a/browser/browser.h +++ b/browser/browser.h @@ -22,15 +22,15 @@ #include "userinput.h" #include "browserview.h" #include "cachemanager.h" +#include "userinput.h" class browser : public QObject, protected QDBusContext { Q_OBJECT public: - explicit browser(cachemanager *defaultManager = 0, QObject *parent = 0); + explicit browser(cachemanager *, userinput *, QObject *parent = 0); webpagewindow *wpw; - userinput *ui; signals: void onPageWindowCreated(qlonglong a_hPageWindowHandle, conn::brw::ERROR_IDS a_eErrorId); @@ -52,7 +52,8 @@ public Q_SLOTS: private: QHash<conn::brw::OBJECT_HANDLE, QWidget*> windowhash; QHash<QString, BrowserView *> webviewhash; - cachemanager *m_cacheManager = NULL; + cachemanager *m_cacheManager; + userinput *m_userInput; }; #endif // BROWSER_H diff --git a/browser/browser.pro b/browser/browser.pro index 877cb4e..5541b31 100644 --- a/browser/browser.pro +++ b/browser/browser.pro @@ -41,6 +41,7 @@ SOURCES += main.cpp \ browserconfig.cpp \ cachemanager.cpp \ errorlogger.cpp \ + browserpage.cpp \ ../common/bookmark.cpp \ HEADERS += \ @@ -53,6 +54,7 @@ HEADERS += \ browserconfig.h \ cachemanager.h \ errorlogger.h \ + browserpage.h \ ../common/bookmark.h \ ../common/browserdefs.h \ diff --git a/browser/browserhelper.cpp b/browser/browserhelper.cpp index f225065..c564181 100644 --- a/browser/browserhelper.cpp +++ b/browser/browserhelper.cpp @@ -48,6 +48,9 @@ browserhelper::browserhelper(QString instanceId, QObject *parent) : exit(1); } + userinput *ui = new userinput(); + new IUserInputAdaptor(ui); + cachemanager *cm = new cachemanager(); new ICacheManagerAdaptor(cm); if(!connection->registerObject("/Browser/ICacheManager", cm)) { @@ -55,7 +58,7 @@ browserhelper::browserhelper(QString instanceId, QObject *parent) : exit(1); } - browser *br = new browser(cm); + browser *br = new browser(cm, ui); new IBrowserAdaptor(br); if(!connection->registerObject("/Browser/IBrowser", br)) { qDebug() << "failed register object IBrowser"; @@ -73,10 +76,6 @@ browserhelper::browserhelper(QString instanceId, QObject *parent) : new IWebPageWindowAdaptor(wpw); br->wpw = wpw; - userinput *ui = new userinput(); - new IUserInputAdaptor(ui); - br->ui = ui; - connect(cm, SIGNAL(onCachePolicyChanged(conn::brw::CACHE_POLICY)), br, SLOT (cachePolicyChanged (conn::brw::CACHE_POLICY))); connect(cm, SIGNAL(onClearCache(void)), diff --git a/browser/browserpage.cpp b/browser/browserpage.cpp new file mode 100644 index 0000000..40b12bc --- /dev/null +++ b/browser/browserpage.cpp @@ -0,0 +1,49 @@ +/** + * 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 <QWebFrame> +#include <QDebug> +#include <QEventLoop> + +#include "browserpage.h" +#include "userinput.h" + +void BrowserPage::javaScriptAlert(QWebFrame *frame, const QString &message) +{ + QEventLoop loop; + qDebug() << "Alert dialog opened:" << message; + connect (m_userInput, SIGNAL(doCloseAlertDialog(void)), &loop, SLOT(quit(void))); + loop.exec(); + qDebug() << "Alert dialog closed"; +} + +bool BrowserPage::javaScriptConfirm(QWebFrame *frame, const QString &message) +{ + QEventLoop loop; + qDebug() << "Confirm dialog opened:" << message; + connect (m_userInput, SIGNAL(doCloseConfirmDialog(bool)), this, SLOT(confirm(bool))); + connect (m_userInput, SIGNAL(doCloseConfirmDialog(bool)), &loop, SLOT(quit())); + loop.exec(); + qDebug() << "Confirm dialog closed:" << m_confirm; +} +bool BrowserPage::javaScriptPrompt(QWebFrame *frame, const QString &msg, const QString &defaultValue, QString *result ) +{ + QEventLoop loop; + qDebug() << "Confirm dialog opened (default:" << defaultValue << ")"; + connect (m_userInput, SIGNAL(doClosePromptDialog(QString, bool)), this, SLOT(prompt(QString, bool))); + connect (m_userInput, SIGNAL(doClosePromptDialog(QString, bool)), &loop, SLOT(quit())); + loop.exec(); + result = &m_promptStr; + qDebug() << "Confirm dialog closed:" << m_promptBool << m_promptStr; + return m_promptBool; +} diff --git a/browser/browserpage.h b/browser/browserpage.h new file mode 100644 index 0000000..9922b72 --- /dev/null +++ b/browser/browserpage.h @@ -0,0 +1,46 @@ +/** + * 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 BROWSERPAGE_H +#define BROWSERPAGE_H + +#include <QWebPage> +#include <QObject> + +#include "userinput.h" + +class BrowserPage : public QWebPage { +Q_OBJECT + +public: + BrowserPage(QObject *parent, userinput *input) + : QWebPage (parent), m_userInput (input){} + ~BrowserPage(){} + +protected: + void javaScriptAlert(QWebFrame *frame, const QString &message); + bool javaScriptConfirm(QWebFrame *frame, const QString &message); + bool javaScriptPrompt (QWebFrame *, const QString &, const QString &, QString *); + +protected slots: + void confirm(bool b) {m_confirm = b;} + void prompt (QString s, bool b) {m_promptBool = b; m_promptStr = s;} + +private: + userinput *m_userInput; + bool m_confirm; + bool m_promptBool; + QString m_promptStr; +}; + +#endif /* BROWSERPAGE_H */ diff --git a/browser/browserview.cpp b/browser/browserview.cpp index a063afb..d455deb 100644 --- a/browser/browserview.cpp +++ b/browser/browserview.cpp @@ -22,8 +22,11 @@ #include "browserview.h" #include "cachemanager.h" #include "../common/browserdefs.h" +#include "browserpage.h" +#include "userinput.h" -BrowserView::BrowserView(cachemanager *cm) +BrowserView::BrowserView(cachemanager *cm, userinput *uip) + : m_cacheManager (cm) { m_cacheManager = cm; if (!this->scene()) { @@ -33,6 +36,8 @@ BrowserView::BrowserView(cachemanager *cm) QWebSettings::setIconDatabasePath("."); + m_webview.setPage(new BrowserPage(this, uip)); + m_webview.page()->setNetworkAccessManager(cm->getNetworkAccessManager()); this->load("http://www.bmw.com"); diff --git a/browser/browserview.h b/browser/browserview.h index 3099c34..12ec1df 100644 --- a/browser/browserview.h +++ b/browser/browserview.h @@ -24,6 +24,8 @@ #include "cachemanager.h" #include "../common/browserdefs.h" +#include "browserpage.h" +#include "userinput.h" class WebPageWaiter : public QObject { Q_OBJECT @@ -62,7 +64,7 @@ class BrowserView : public QGraphicsView { Q_OBJECT public: - BrowserView(cachemanager *); + BrowserView(cachemanager *, userinput *); bool load(const QString &a_Url); int getProgress() { return m_currentProgress; } QString getUrl() { return m_webview.url().toString(); } diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp index 8ce7b5d..39702fc 100644 --- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp +++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp @@ -248,4 +248,22 @@ void TestBrowserDBus::testActivate() { QProcess::execute("xdotool getwindowname `xdotool getwindowfocus`"); } +void TestBrowserDBus::testConfirmDialog() { + m_bdb->createPageWindow(1,0,0,800,600); + m_bdb->loadurl(testFileUrl()); + QProcess::execute("xdotool mousemove 150 500"); + QProcess::execute("xdotool click 1"); + QTest::qSleep(300); + m_bdb->closeConfirmDialog(conn::brw::DR_OK); +} + +void TestBrowserDBus::testPromptDialog() { + m_bdb->createPageWindow(1,0,0,800,600); + m_bdb->loadurl(testFileUrl()); + QProcess::execute("xdotool mousemove 250 500"); + QProcess::execute("xdotool click 1"); + QTest::qSleep(300); + m_bdb->closePromptDialog("Hello!", conn::brw::DR_OK); +} + QTEST_MAIN (TestBrowserDBus); diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.h b/browser/unit-tests/browserdbus/testbrowserdbus.h index 4c75908..1ca6cb5 100644 --- a/browser/unit-tests/browserdbus/testbrowserdbus.h +++ b/browser/unit-tests/browserdbus/testbrowserdbus.h @@ -42,6 +42,8 @@ private slots: void testOnFaviconReceived(); void testSelect(); void testActivate(); + void testConfirmDialog(); + void testPromptDialog(); private: QString testFileUrl() { diff --git a/browser/unit-tests/browserdbus/webpagegenerator.h b/browser/unit-tests/browserdbus/webpagegenerator.h index e656b45..fc7f665 100644 --- a/browser/unit-tests/browserdbus/webpagegenerator.h +++ b/browser/unit-tests/browserdbus/webpagegenerator.h @@ -28,6 +28,18 @@ public: " onClick=\"JavaScript:window.status='browser-poc';\" >" " Set status bar text" " </DIV>" + " <DIV style='height:100; width:100; background-color:gray; float: left'" + " onClick=\"JavaScript:alert('browser-poc');\" >" + " Trigger alert" + " </DIV>" + " <DIV style='height:100; width:100; background-color:gray; float: left'" + " onClick=\"JavaScript:confirm('browser-poc');\" >" + " Trigger confirm" + " </DIV>" + " <DIV style='height:100; width:100; background-color:gray; float: left'" + " onClick=\"JavaScript:prompt('browser-poc');\" >" + " Trigger prompt" + " </DIV>" " <DIV style='height:900;width:900;'></DIV>" " </BODY>" "</HTML>" diff --git a/browser/userinput.cpp b/browser/userinput.cpp index 01f2645..6406677 100644 --- a/browser/userinput.cpp +++ b/browser/userinput.cpp @@ -37,3 +37,39 @@ void userinput::inputTextReceived(QString a_strInputName, QString a_strDefaultIn emit onInputText(a_strInputName, a_strDefaultInputValue, (conn::brw::INPUT_ELEMENT_TYPE)a_i32InputValueType, a_s32MaxLength, a_s32Max, a_s32Min, a_s32Step); } + +conn::brw::ERROR_IDS userinput::closeAlertDialog (void) +{ + emit doCloseAlertDialog(); + return conn::brw::EID_NO_ERROR; +} + +conn::brw::ERROR_IDS userinput::closeConfirmDialog (conn::brw::DIALOG_RESULT b) +{ + switch (b) { + case conn::brw::DR_OK: + emit doCloseConfirmDialog(true); + break; + case conn::brw::DR_CANCEL: + emit doCloseConfirmDialog(false); + break; + default: + qDebug() << "Bad value for conn::brw::DIALOG_RESULT"; + } + return conn::brw::EID_NO_ERROR; +} + +conn::brw::ERROR_IDS userinput::closePromptDialog(QString resultStr, conn::brw::DIALOG_RESULT resultEn) +{ + switch (resultEn) { + case conn::brw::DR_OK: + emit doClosePromptDialog(resultStr, true); + break; + case conn::brw::DR_CANCEL: + emit doClosePromptDialog(resultStr, false); + break; + default: + qDebug() << "Bad value for conn::brw::DIALOG_RESULT"; + } + return conn::brw::EID_NO_ERROR; +} diff --git a/browser/userinput.h b/browser/userinput.h index b613bdf..8bcc2b1 100644 --- a/browser/userinput.h +++ b/browser/userinput.h @@ -33,11 +33,19 @@ signals: int a_s32Max, int a_s32Min, int a_s32Step); void inputText(QString input); void setOutputWebview(QString path); + + // Internal + void doCloseAlertDialog(void); + void doCloseConfirmDialog(bool); + void doClosePromptDialog(QString, bool); public Q_SLOTS: conn::brw::ERROR_IDS inputText(conn::brw::DIALOG_RESULT a_eResult, const QString &a_strInputValue); void inputTextReceived(QString a_strInputName, QString a_strDefaultInputValue, int a_i32InputValueType, int a_s32MaxLength, int a_s32Max, int a_s32Min, int a_s32Step); + conn::brw::ERROR_IDS closeAlertDialog (void); + conn::brw::ERROR_IDS closeConfirmDialog (conn::brw::DIALOG_RESULT); + conn::brw::ERROR_IDS closePromptDialog (QString, conn::brw::DIALOG_RESULT); }; #endif // USERINPUT_H diff --git a/common/browserdbus.cpp b/common/browserdbus.cpp index fddfb90..c4abd77 100644 --- a/common/browserdbus.cpp +++ b/common/browserdbus.cpp @@ -285,6 +285,57 @@ void BrowserDbus::inputText(conn::brw::DIALOG_RESULT a_eResult, QString a_strInp } } +void BrowserDbus::closeAlertDialog() +{ + qDebug() << __PRETTY_FUNCTION__; + + QDBusPendingReply<conn::brw::ERROR_IDS> reply = actualuserinput->closeAlertDialog(); + + reply.waitForFinished(); + if(reply.isValid()) { + conn::brw::ERROR_IDS ret = reply.value(); + + qDebug() << "ERROR_IDS " << ret; + } else { + QDBusError error = reply.error(); + qDebug() << "ERROR " << error.name() << error.message(); + } +} + +void BrowserDbus::closeConfirmDialog(conn::brw::DIALOG_RESULT d) +{ + qDebug() << __PRETTY_FUNCTION__; + + QDBusPendingReply<conn::brw::ERROR_IDS> reply = actualuserinput->closeConfirmDialog(d); + + reply.waitForFinished(); + if(reply.isValid()) { + conn::brw::ERROR_IDS ret = reply.value(); + + qDebug() << "ERROR_IDS " << ret; + } else { + QDBusError error = reply.error(); + qDebug() << "ERROR " << error.name() << error.message(); + } +} + +void BrowserDbus::closePromptDialog(QString s, conn::brw::DIALOG_RESULT d) +{ + qDebug() << __PRETTY_FUNCTION__; + + QDBusPendingReply<conn::brw::ERROR_IDS> reply = actualuserinput->closePromptDialog(s,d); + + reply.waitForFinished(); + if(reply.isValid()) { + conn::brw::ERROR_IDS ret = reply.value(); + + qDebug() << "ERROR_IDS " << ret; + } else { + QDBusError error = reply.error(); + qDebug() << "ERROR " << error.name() << error.message(); + } +} + void BrowserDbus::InputTextReceived(QString a_strInputName, QString a_strDefaultInputValue, conn::brw::INPUT_ELEMENT_TYPE a_i32InputValueType, int a_s32MaxLength, int a_s32Max, int a_s32Min, int a_s32Step) { qDebug() << __PRETTY_FUNCTION__ << a_strInputName << a_strDefaultInputValue << a_i32InputValueType << a_s32MaxLength << a_s32Max << a_s32Min << a_s32Step; } diff --git a/common/browserdbus.h b/common/browserdbus.h index 2ba59b9..7afd832 100644 --- a/common/browserdbus.h +++ b/common/browserdbus.h @@ -72,6 +72,9 @@ public: Q_INVOKABLE QString getFavicon(QString); Q_INVOKABLE void activate(); Q_INVOKABLE void select(); + Q_INVOKABLE void closeAlertDialog(); + Q_INVOKABLE void closeConfirmDialog(conn::brw::DIALOG_RESULT); + Q_INVOKABLE void closePromptDialog(QString, conn::brw::DIALOG_RESULT); QString title() { return m_title; } void setTitle(QString title) { m_title = title; } |