summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-17 16:07:18 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-17 16:07:18 +0100
commit5619ac198cb6e18bccdceaf487f2486c61c5f954 (patch)
tree58ef65aae29073981229054a97a01e4f5fefefa0
parentb9fc08ce7f457cbdd09fec325e166bcf90f64907 (diff)
downloadbrowser-poc-5619ac198cb6e18bccdceaf487f2486c61c5f954.tar.gz
Added closeAlert/Prompt/Confirm -dialog API
-rw-r--r--.gitignore2
-rw-r--r--browser/browser.cpp18
-rw-r--r--browser/browser.h7
-rw-r--r--browser/browser.pro2
-rw-r--r--browser/browserhelper.cpp9
-rw-r--r--browser/browserpage.cpp49
-rw-r--r--browser/browserpage.h46
-rw-r--r--browser/browserview.cpp7
-rw-r--r--browser/browserview.h4
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp18
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.h2
-rw-r--r--browser/unit-tests/browserdbus/webpagegenerator.h12
-rw-r--r--browser/userinput.cpp36
-rw-r--r--browser/userinput.h8
-rw-r--r--common/browserdbus.cpp51
-rw-r--r--common/browserdbus.h3
16 files changed, 252 insertions, 22 deletions
diff --git a/.gitignore b/.gitignore
index 92eb961..83b21ca 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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; }