summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--browser/browserview.cpp23
-rw-r--r--browser/browserview.h2
-rw-r--r--browser/cachemanager.cpp10
-rw-r--r--browser/cachemanager.h4
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.cpp24
-rw-r--r--browser/unit-tests/browserdbus/testbrowserdbus.h2
-rw-r--r--browser/webpagewindow.cpp4
-rw-r--r--common/browserdbus.cpp6
-rw-r--r--common/browserdbus.h2
9 files changed, 70 insertions, 7 deletions
diff --git a/browser/browserview.cpp b/browser/browserview.cpp
index d8ad8e8..91851b8 100644
--- a/browser/browserview.cpp
+++ b/browser/browserview.cpp
@@ -18,6 +18,7 @@
#include <QTemporaryFile>
#include <QSemaphore>
#include <QWebSettings>
+#include <QWebHistory>
#include "browserview.h"
#include "cachemanager.h"
@@ -28,7 +29,8 @@
#include "errorlogger.h"
BrowserView::BrowserView(cachemanager *cm, userinput *uip)
- : m_scrollPositionX(0), m_scrollPositionY (0), m_cacheManager (cm)
+ : m_scrollPositionX(0), m_scrollPositionY (0), m_cacheManager (cm),
+ m_previousCacheSize(0)
{
QString startPage;
m_cacheManager = cm;
@@ -142,6 +144,17 @@ void BrowserView::loadFinished(bool ok)
"}, true);");
emit pageLoadFinished (ok);
+
+ unsigned int changes = 0;
+ changes |= canGoBack() ? 0x1 : 0;
+ changes |= canGoForward() ? 0x2 : 0;
+
+ if (changes) {
+ qDebug() << "Emitting signal onActionStateChanged";
+ emit onActionStateChanged(changes);
+ }
+
+ m_cacheManager->checkForChanges();
}
void BrowserView::scroll (conn::brw::SCROLL_DIRECTION dir, conn::brw::SCROLL_TYPE type)
@@ -330,3 +343,11 @@ void BrowserView::onSelectIndexes(QList<int> indexes) {
m_webview.page()->mainFrame()->evaluateJavaScript(cmd);
}
}
+
+bool BrowserView::canGoBack() {
+ return m_webview.history()->canGoBack();
+}
+
+bool BrowserView::canGoForward() {
+ return m_webview.history()->canGoForward();
+}
diff --git a/browser/browserview.h b/browser/browserview.h
index 9f5b5f8..dcbb9eb 100644
--- a/browser/browserview.h
+++ b/browser/browserview.h
@@ -122,6 +122,8 @@ public:
QString getFaviconFilePath(QString url);
void activate();
void select();
+ bool canGoBack();
+ bool canGoForward();
signals:
void pageLoadStarted();
diff --git a/browser/cachemanager.cpp b/browser/cachemanager.cpp
index f75054b..aeba1f8 100644
--- a/browser/cachemanager.cpp
+++ b/browser/cachemanager.cpp
@@ -113,3 +113,13 @@ QNetworkRequest::CacheLoadControl cachemanager::getCacheLoadControl()
return QNetworkRequest::PreferCache;
}
}
+
+void cachemanager::checkForChanges()
+{
+ if (m_previousCacheSize != getCacheSize()) {
+ m_previousCacheSize = getCacheSize();
+ qDebug() << "Emitting onCacheChanged";
+ emit onCacheChanged();
+ }
+ qDebug() << "No changes detected. Not emitting onCacheChanged";
+}
diff --git a/browser/cachemanager.h b/browser/cachemanager.h
index f8f25dd..bf08dee 100644
--- a/browser/cachemanager.h
+++ b/browser/cachemanager.h
@@ -29,9 +29,10 @@ public:
cachemanager(QObject *parent = 0);
QNetworkAccessManager *getNetworkAccessManager();
QNetworkRequest::CacheLoadControl getCacheLoadControl();
+ void checkForChanges();
signals:
- void cacheChanged();
+ void onCacheChanged();
void onCachePolicyChanged(conn::brw::CACHE_POLICY);
void onClearCache(void);
@@ -46,6 +47,7 @@ private:
BrowserConfig *m_config;
conn::brw::CACHE_POLICY m_policy;
QNetworkAccessManager *m_manager;
+ qint64 m_previousCacheSize;
};
#endif // CACHEMANAGER_H
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.cpp b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
index daed02a..c68fafa 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.cpp
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.cpp
@@ -486,4 +486,28 @@ void TestBrowserDBus::testDoesntNeedUnfocusToTriggerInputSignal() {
QVERIFY(prevValue == "Hello world");
}
+void TestBrowserDBus::testCorrectlySetsBackBrowserActionState() {
+ QSignalSpy spy (m_bdb, SIGNAL (onActionStateChanged(uint)));
+ m_bdb->createPageWindow(1,0,0,800,600);
+ m_bdb->loadurl(testFileUrl());
+ QTest::qSleep(1000);
+ m_bdb->loadurl("http://google.com");
+ QTest::qSleep(1000);
+ m_bdb->loadurl("http://amazon.com");
+ QTest::qSleep(1000);
+ QVERIFY(spy.wait(1000));
+ qDebug() << spy;
+
+ conn::brw::BrowserActions ba = m_bdb->getBrowserActionState();
+ QVERIFY(ba.u8Back);
+ QVERIFY(!ba.u8Forward);
+
+ m_bdb->goBack();
+ QVERIFY(spy.wait(1000));
+ QVERIFY(spy.wait(1000));
+ ba = m_bdb->getBrowserActionState();
+ QVERIFY(ba.u8Back);
+ QVERIFY(ba.u8Forward);
+ qDebug() << spy;
+}
QTEST_MAIN (TestBrowserDBus);
diff --git a/browser/unit-tests/browserdbus/testbrowserdbus.h b/browser/unit-tests/browserdbus/testbrowserdbus.h
index e06c65d..65334d7 100644
--- a/browser/unit-tests/browserdbus/testbrowserdbus.h
+++ b/browser/unit-tests/browserdbus/testbrowserdbus.h
@@ -59,7 +59,7 @@ private slots:
void testGetOldInputText();
void testNewTextReplacesOldText();
void testDoesntNeedUnfocusToTriggerInputSignal();
-
+ void testCorrectlySetsBackBrowserActionState();
private:
QString testFileUrl() {
diff --git a/browser/webpagewindow.cpp b/browser/webpagewindow.cpp
index 2c0c700..745f9be 100644
--- a/browser/webpagewindow.cpp
+++ b/browser/webpagewindow.cpp
@@ -109,8 +109,8 @@ conn::brw::ERROR_IDS webpagewindow::getBrowserActionsState(conn::brw::BrowserAct
temp_scrolldirections->u8Bottom = 1;
conn::brw::BrowserActions *temp_browseractions = new conn::brw::BrowserActions();
- temp_browseractions->u8Back = 0x03;
- temp_browseractions->u8Forward = 0x03;
+ temp_browseractions->u8Back = webitem->canGoBack() ? 0x03 : 0x0;
+ temp_browseractions->u8Forward = webitem->canGoForward() ? 0x03 : 0x0;
temp_browseractions->u8Reload = 0x03;
temp_browseractions->u8Stop = 0x03;
temp_browseractions->u8LoadUrl = 0x03;
diff --git a/common/browserdbus.cpp b/common/browserdbus.cpp
index 696a4ac..cc41cdd 100644
--- a/common/browserdbus.cpp
+++ b/common/browserdbus.cpp
@@ -369,8 +369,9 @@ void BrowserDbus::InputTextReceived(QString a_strInputName, QString a_strDefault
}
// IWebPageWindow
-void BrowserDbus::getBrowserActionState() {
+conn::brw::BrowserActions BrowserDbus::getBrowserActionState() {
qDebug() << __PRETTY_FUNCTION__;
+ conn::brw::BrowserActions ba;
QDBusPendingReply<conn::brw::ERROR_IDS, conn::brw::BrowserActions> reply = actualtab->getBrowserActionsState();
reply.waitForFinished();
@@ -380,10 +381,13 @@ void BrowserDbus::getBrowserActionState() {
qDebug() << "ERROR_IDS " << ret << actions.u8Back << actions.u8Forward <<
actions.u8Reload << actions.u8Stop << actions.u8LoadUrl << actions.u8Select;
+ ba = actions;
} else {
QDBusError error = reply.error();
qDebug() << "ERROR " << error.name() << error.message();
}
+
+ return ba;
}
void BrowserDbus::getContentSize() {
diff --git a/common/browserdbus.h b/common/browserdbus.h
index e9f01a4..f7edd67 100644
--- a/common/browserdbus.h
+++ b/common/browserdbus.h
@@ -56,7 +56,7 @@ public:
Q_INVOKABLE void getGeometry();
Q_INVOKABLE void setGeometry(int x, int y, int width, int height);
Q_INVOKABLE void getContentSize();
- Q_INVOKABLE void getBrowserActionState();
+ Q_INVOKABLE conn::brw::BrowserActions getBrowserActionState();
Q_INVOKABLE void createPageWindow(int deviceid, int x, int y, int width, int height);
Q_INVOKABLE void destroyPageWindow(qlonglong windowhandle);
Q_INVOKABLE void getPageWindows();