summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 17:06:16 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-20 17:06:16 +0100
commit5871c548a1aa47a84852e0181291f0668224c0bc (patch)
treec76ce18746dbf80a64ac351f36f526707dc091ba
parent3e8f63d8a07555e0e562b00ad18fd5fdcbc069b5 (diff)
downloadbrowser-poc-5871c548a1aa47a84852e0181291f0668224c0bc.tar.gz
Implemented selectOption
-rw-r--r--browser/browser.cpp7
-rw-r--r--browser/browserview.cpp8
-rw-r--r--browser/browserview.h1
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp25
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.h1
-rw-r--r--browser/unit-tests/browserdbus/webpagegenerator.h2
-rw-r--r--browser/userinput.cpp10
-rw-r--r--browser/userinput.h1
-rw-r--r--common/browserdbus.cpp15
-rw-r--r--common/browserdbus.h1
10 files changed, 65 insertions, 6 deletions
diff --git a/browser/browser.cpp b/browser/browser.cpp
index 324817b..a16ba44 100644
--- a/browser/browser.cpp
+++ b/browser/browser.cpp
@@ -59,9 +59,10 @@ conn::brw::ERROR_IDS browser::createPageWindow(int a_eDeviceId, const conn::brw:
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)));
- connect(bvi, SIGNAL(onSelect(const QString &, const conn::brw::SelectableOptionList &, bool)),
- m_userInput, SIGNAL(onSelect(const QString &, const conn::brw::SelectableOptionList &, bool)));
+ connect(m_userInput, SIGNAL(inputText(QString)), this, SLOT(inputText(QString)));
+ connect(bvi, SIGNAL(onSelect(const QString &, const conn::brw::SelectableOptionList &, bool)),
+ m_userInput, SIGNAL(onSelect(const QString &, const conn::brw::SelectableOptionList &, bool)));
+ connect(m_userInput, SIGNAL(selectIndexes(QList<int>)), bvi, SLOT(onSelectIndexes(QList<int>)));
QString *webpagewindowservice = new QString("/Browser/IWebPageWindow" + QString::number(a_hPageWindowHandle));
qDebug() << *webpagewindowservice;
diff --git a/browser/browserview.cpp b/browser/browserview.cpp
index 593d0af..60f57c0 100644
--- a/browser/browserview.cpp
+++ b/browser/browserview.cpp
@@ -277,3 +277,11 @@ void BrowserView::select() {
void BrowserView::activate() {
this->activateWindow();
}
+
+void BrowserView::onSelectIndexes(QList<int> indexes) {
+ for (int i = 0; i < indexes.size(); i++) {
+ QString cmd = QString("document.activeElement.options[%1].selected = true").arg(
+ QString::number(indexes.at(i)));
+ m_webview.page()->mainFrame()->evaluateJavaScript(cmd);
+ }
+}
diff --git a/browser/browserview.h b/browser/browserview.h
index 177e646..509d762 100644
--- a/browser/browserview.h
+++ b/browser/browserview.h
@@ -139,6 +139,7 @@ protected slots:
void linkClicked(QUrl);
void scrollPositionChanged(uint x, uint y);
void contentSizeChanged(const QSize&);
+ void onSelectIndexes(QList<int>);
private:
QGraphicsWebView m_webview;
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
index 1a78126..5de6cd1 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
@@ -330,6 +330,10 @@ void TestBrowserDBus::testGetsNotifiedWhenSelectIsSelected() {
QTest::qSleep(300);
QProcess::execute("xdotool click 1");
QVERIFY(spy.wait(1000));
+ conn::brw::SelectableOptionList options = spy.takeFirst().at(1).value<conn::brw::SelectableOptionList>();
+ for (int i = 0; i < options.size(); i++) {
+ qDebug() << options.at(i).strValue;
+ }
}
void TestBrowserDBus::testGetsNotifiedOnAuthDialog() {
@@ -392,4 +396,25 @@ void TestBrowserDBus::testCanCancelAuth() {
QVERIFY(spy2.wait(1000));
}
+void TestBrowserDBus::testCanSelectOptionsInSelectList() {
+ QSignalSpy spy (m_bdb, SIGNAL(onSelect(const QString &, const conn::brw::SelectableOptionList &, bool)));
+ m_bdb->createPageWindow(1,0,0,800,600);
+ m_bdb->loadurl(testFileUrl());
+ QTest::qSleep(300);
+ QProcess::execute("xdotool mousemove 320 375");
+ QProcess::execute("xdotool click 1");
+ QTest::qSleep(300);
+ QProcess::execute("xdotool click 1");
+ QVERIFY(spy.wait(1000));
+ conn::brw::SelectableOptionList options = spy.takeFirst().at(1).value<conn::brw::SelectableOptionList>();
+ conn::brw::SelectableOption newOption = options.at(0);
+ conn::brw::SelectableOption newOption2 = options.at(1);
+ newOption.bSelected = true;
+ newOption2.bSelected = true;
+ options.replace(0, newOption);
+ options.replace(1, newOption2);
+
+ m_bdb->selectOption(options);
+}
+
QTEST_MAIN (TestBrowserDBus);
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.h b/browser/unit-tests/browserdbus/testbrowserdbus.h
index 22c5583..8a0a373 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.h
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.h
@@ -55,6 +55,7 @@ private slots:
void testCanCloseSslDialog();
void testCanCancelSSL();
void testCanCancelAuth();
+ void testCanSelectOptionsInSelectList();
private:
QString testFileUrl() {
diff --git a/browser/unit-tests/browserdbus/webpagegenerator.h b/browser/unit-tests/browserdbus/webpagegenerator.h
index ebb8d28..2169d29 100644
--- a/browser/unit-tests/browserdbus/webpagegenerator.h
+++ b/browser/unit-tests/browserdbus/webpagegenerator.h
@@ -29,7 +29,7 @@ public:
" Set status bar text"
" </DIV>"
" <INPUT type='text' name='input' style='float:left;'></INPUT>"
- " <SELECT style='float:left'><OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION></SELECT>"
+ " <SELECT style='float:left' multiple><OPTION>1</OPTION><OPTION>2</OPTION><OPTION>3</OPTION></SELECT>"
" <DIV style='height:100; width:100; background-color:gray; float: left; clear:left'"
" onClick=\"JavaScript:alert('browser-poc');\" >"
" Trigger alert"
diff --git a/browser/userinput.cpp b/browser/userinput.cpp
index da06fda..978a9a1 100644
--- a/browser/userinput.cpp
+++ b/browser/userinput.cpp
@@ -102,5 +102,13 @@ conn::brw::ERROR_IDS userinput::getPrevEnteredValues (const QString &a_strInputN
conn::brw::ERROR_IDS userinput::selectOption(const conn::brw::SelectableOptionList &a_oOptionList)
{
- return conn::brw::EID_NOT_IMPLEMENTED;
+ QList<int> indexes;
+ for (int i = 0; i < a_oOptionList.size(); i++) {
+ if (a_oOptionList.at(i).bSelected) {
+ indexes.append(i);
+ }
+ }
+
+ emit selectIndexes (indexes);
+ return conn::brw::EID_NO_ERROR;
}
diff --git a/browser/userinput.h b/browser/userinput.h
index 814bd1e..54f21de 100644
--- a/browser/userinput.h
+++ b/browser/userinput.h
@@ -44,6 +44,7 @@ signals:
void doCloseAlertDialog(void);
void doCloseConfirmDialog(bool);
void doClosePromptDialog(QString, bool);
+ void selectIndexes(QList<int>);
public Q_SLOTS:
conn::brw::ERROR_IDS inputText(conn::brw::DIALOG_RESULT a_eResult, const QString &a_strInputValue);
diff --git a/common/browserdbus.cpp b/common/browserdbus.cpp
index 7c13574..df81f39 100644
--- a/common/browserdbus.cpp
+++ b/common/browserdbus.cpp
@@ -776,7 +776,6 @@ void BrowserDbus::closeAuthenticationDialog(conn::brw::DIALOG_RESULT r, const co
void BrowserDbus::closeSslErrorDialog(conn::brw::DIALOG_RESULT r, bool b)
{
qDebug() << __PRETTY_FUNCTION__;
- QStringList list;
QDBusReply<conn::brw::ERROR_IDS> reply = networkmanager->closeSslErrorDialog(r,b);
if(reply.isValid()) {
@@ -787,3 +786,17 @@ void BrowserDbus::closeSslErrorDialog(conn::brw::DIALOG_RESULT r, bool b)
qDebug() << "ERROR " << error.name() << error.message();
}
}
+
+void BrowserDbus::selectOption(const conn::brw::SelectableOptionList &lst)
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QDBusReply<conn::brw::ERROR_IDS> reply = userinput->selectOption(lst);
+ 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();
+ }
+}
diff --git a/common/browserdbus.h b/common/browserdbus.h
index 8cb6250..e88efef 100644
--- a/common/browserdbus.h
+++ b/common/browserdbus.h
@@ -79,6 +79,7 @@ public:
Q_INVOKABLE QStringList getPrevEnteredValues(QString name, QString value, conn::brw::INPUT_ELEMENT_TYPE type);
Q_INVOKABLE void closeAuthenticationDialog(conn::brw::DIALOG_RESULT, const conn::brw::AuthenticationData&);
Q_INVOKABLE void closeSslErrorDialog(conn::brw::DIALOG_RESULT, bool);
+ Q_INVOKABLE void selectOption(const conn::brw::SelectableOptionList&);
QString title() { return m_title; }