summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-05 13:57:55 +0100
committerJonatan Pålsson <jonatan.palsson@pelagicore.com>2014-02-05 13:57:55 +0100
commit016f6a47bfe026016e318d150bfee7bd07393d82 (patch)
treee4c68fa457a301deb1d1663a12ea740b8ac8b7b9
parent072f182b498f8244a949005102faf5015e74b69a (diff)
downloadbrowser-poc-016f6a47bfe026016e318d150bfee7bd07393d82.tar.gz
Implemented getPageIcon
-rw-r--r--browser/browserview.cpp35
-rw-r--r--browser/browserview.h9
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp9
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.h1
-rw-r--r--browser/unit-tests/browserview/testbrowser.cpp14
-rw-r--r--browser/unit-tests/browserview/testbrowser.h1
-rw-r--r--browser/webpagewindow.cpp8
-rw-r--r--browser/webpagewindow.h2
-rw-r--r--common/browserdbus.cpp14
-rw-r--r--common/browserdbus.h1
10 files changed, 88 insertions, 6 deletions
diff --git a/browser/browserview.cpp b/browser/browserview.cpp
index 7d31ba0..163832b 100644
--- a/browser/browserview.cpp
+++ b/browser/browserview.cpp
@@ -15,6 +15,8 @@
#include <QWebFrame>
#include <QWebPage>
#include <QCoreApplication>
+#include <QTemporaryFile>
+#include <QSemaphore>
#include "browserview.h"
#include "../common/browserdefs.h"
@@ -180,7 +182,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));
- m_webview.page()->mainFrame()->evaluateJavaScript(cmd);
+ m_webview.page()->mainFrame()->evaluateJavaScript(cmd);
m_scrollPositionX = x;
m_scrollPositionY = y;
}
@@ -190,3 +192,34 @@ void BrowserView::getScrollPosition(uint &x, uint &y)
x = m_scrollPositionX;
y = m_scrollPositionY;
}
+
+QString BrowserView::createScreenshot(QString url) {
+ WebPageWaiter waiter;
+ QWebPage wp;
+ QSize renderSize(640,480);
+
+ connect(&wp, SIGNAL(loadFinished(bool)), &waiter, SLOT (loadFinished(void)));
+
+ wp.mainFrame()->load(QUrl(url));
+ wp.setViewportSize(renderSize);
+ wp.mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
+ wp.mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
+
+ for (int i = 0; i < 100; i++) {
+ waiter.finishedSem.tryAcquire(1,10);
+ QCoreApplication::processEvents();
+ }
+
+ QImage *image = new QImage(renderSize,
+ QImage::Format_ARGB32);
+ QPainter *painter = new QPainter(image);
+ QTemporaryFile outFile("XXXXXX.png");
+ outFile.setAutoRemove(false);
+ outFile.open();
+ wp.mainFrame()->render(painter);
+
+ painter->end();
+ image->save(&outFile, "PNG");
+ outFile.close();
+ return outFile.fileName();
+}
diff --git a/browser/browserview.h b/browser/browserview.h
index 32f9f9d..b889628 100644
--- a/browser/browserview.h
+++ b/browser/browserview.h
@@ -19,9 +19,17 @@
#include <QResizeEvent>
#include <QWebElement>
#include <QDebug>
+#include <QSemaphore>
#include "../common/browserdefs.h"
+class WebPageWaiter : public QObject {
+Q_OBJECT
+public slots:
+ void loadFinished() { finishedSem.release(1); }
+public:
+ QSemaphore finishedSem;
+};
class InputHandler : public QObject {
Q_OBJECT
@@ -68,6 +76,7 @@ public:
double getZoomFactor();
void getScrollPosition(uint&, uint&);
void setScrollPosition(uint, uint);
+ static QString createScreenshot(QString url);
signals:
void pageLoadStarted();
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
index 393a3a7..ca462ef 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
@@ -178,4 +178,13 @@ void TestBrowserDBus::testCanSetAndGetScrollPosition() {
QVERIFY(spy.last().value(1).toUInt() == 0);
}
+void TestBrowserDBus::testCanGeneratePageIcon() {
+ m_bdb->loadurl(testFileUrl());
+ QTest::qSleep(300);
+ QString iconPath;
+ m_bdb->getPageIcon(testFileUrl(), iconPath);
+ qDebug() << iconPath;
+ QVERIFY(iconPath.compare(QString("")) != 0);
+}
+
QTEST_MAIN (TestBrowserDBus);
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.h b/browser/unit-tests/browserdbus/testbrowserdbus.h
index d362402..8702923 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.h
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.h
@@ -34,6 +34,7 @@ private slots:
void testGetsNotifiedWhenScrollingChanges();
void testCanSetAndGetZoomFactor();
void testCanSetAndGetScrollPosition();
+ void testCanGeneratePageIcon();
private:
QString testFileUrl() {
diff --git a/browser/unit-tests/browserview/testbrowser.cpp b/browser/unit-tests/browserview/testbrowser.cpp
index 7db92dc..b273683 100644
--- a/browser/unit-tests/browserview/testbrowser.cpp
+++ b/browser/unit-tests/browserview/testbrowser.cpp
@@ -3,9 +3,10 @@
#include <QMainWindow>
#include <QGraphicsScene>
#include <QGraphicsView>
+#include <QFileInfo>
#include "testbrowser.h"
-#include "../browserview.h"
+#include "../../browserview.h"
/////////////// Test cases ///////////////
@@ -175,4 +176,15 @@ void TestBrowser::testGetUrl()
QVERIFY (before.compare(after) != 0);
}
+void TestBrowser::testCanCreateScreenshot() {
+ BrowserView bvi;
+ bvi.show();
+ {
+ QSignalSpy spy (&bvi, SIGNAL(pageLoadFinished(bool)));
+ spy.wait(1000);
+ }
+ QString fileName = bvi.createScreenshot();
+ QVERIFY(QFileInfo(fileName).size() > 0);
+}
+
QTEST_MAIN (TestBrowser);
diff --git a/browser/unit-tests/browserview/testbrowser.h b/browser/unit-tests/browserview/testbrowser.h
index 6d6cc54..c080273 100644
--- a/browser/unit-tests/browserview/testbrowser.h
+++ b/browser/unit-tests/browserview/testbrowser.h
@@ -14,4 +14,5 @@ private slots:
void testReload();
void testGetTitle();
void testGetUrl();
+ void testCanCreateScreenshot();
};
diff --git a/browser/webpagewindow.cpp b/browser/webpagewindow.cpp
index b57d198..ecc70fb 100644
--- a/browser/webpagewindow.cpp
+++ b/browser/webpagewindow.cpp
@@ -58,8 +58,9 @@ conn::brw::ERROR_IDS webpagewindow::activate() {
return conn::brw::EID_NOT_IMPLEMENTED;
}
-conn::brw::ERROR_IDS webpagewindow::getPageIcon(QString iconPath, QString iconFilePath) {
- return conn::brw::EID_NOT_IMPLEMENTED;
+conn::brw::ERROR_IDS webpagewindow::getPageIcon(QString iconPath, QString &iconFilePath) {
+ iconFilePath = webitem->createScreenshot(iconPath);
+ return conn::brw::EID_NO_ERROR;
}
conn::brw::ERROR_IDS webpagewindow::back() {
@@ -233,4 +234,5 @@ conn::brw::ERROR_IDS webpagewindow::setScrollPosition(uint &x, uint &y) {
return conn::brw::EID_NO_ERROR;
}
-conn::brw::ERROR_IDS webpagewindow::getFavicon(const QString&, QString&) {}
+conn::brw::ERROR_IDS webpagewindow::getFavicon(const QString&, QString&) {
+}
diff --git a/browser/webpagewindow.h b/browser/webpagewindow.h
index f7a6f01..72a570b 100644
--- a/browser/webpagewindow.h
+++ b/browser/webpagewindow.h
@@ -61,7 +61,7 @@ public Q_SLOTS:
conn::brw::ERROR_IDS setVisible(bool a_bVisible);
conn::brw::ERROR_IDS stop();
conn::brw::ERROR_IDS activate();
- conn::brw::ERROR_IDS getPageIcon(QString iconPath, QString iconFilePath);
+ conn::brw::ERROR_IDS getPageIcon(QString iconPath, QString &iconFilePath);
conn::brw::ERROR_IDS getScrollPosition(uint &posX, uint &posY);
QString getTitle();
diff --git a/common/browserdbus.cpp b/common/browserdbus.cpp
index b574bdb..7c4996e 100644
--- a/common/browserdbus.cpp
+++ b/common/browserdbus.cpp
@@ -600,3 +600,17 @@ void BrowserDbus::setScrollPosition(uint &x, uint &y) {
qDebug() << "ERROR " << error.name() << error.message();
}
}
+
+void BrowserDbus::getPageIcon(QString iconPath, QString &iconFilePath) {
+ qDebug() << __PRETTY_FUNCTION__;
+
+ QDBusReply<conn::brw::ERROR_IDS> reply =
+ actualtab->getPageIcon(iconPath,iconFilePath);
+ 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 79e59cc..6482ef0 100644
--- a/common/browserdbus.h
+++ b/common/browserdbus.h
@@ -68,6 +68,7 @@ public:
Q_INVOKABLE void setZoomFactor(double);
Q_INVOKABLE void getScrollPosition(uint &x, uint &y);
Q_INVOKABLE void setScrollPosition(uint &x, uint &y);
+ Q_INVOKABLE void getPageIcon(QString, QString &);
QString title() { return m_title; }
void setTitle(QString title) { m_title = title; }