diff --git a/autotests/CMakeLists.txt b/autotests/CMakeLists.txt
index 17b9890c5..d701531fb 100644
--- a/autotests/CMakeLists.txt
+++ b/autotests/CMakeLists.txt
@@ -2,6 +2,8 @@ include(ECMMarkAsTest)
set(falkon_autotests_SRCS )
+qt5_add_resources(falkon_autotests_SRCS autotests.qrc)
+
macro(falkon_tests)
foreach(_testname ${ARGN})
add_executable(${_testname} ${_testname}.cpp ${falkon_autotests_SRCS})
@@ -18,6 +20,7 @@ falkon_tests(
adblocktest
updatertest
locationbartest
+ webviewtest
)
set(falkon_autotests_SRCS passwordbackendtest.cpp)
diff --git a/autotests/autotests.qrc b/autotests/autotests.qrc
new file mode 100644
index 000000000..55a721dc7
--- /dev/null
+++ b/autotests/autotests.qrc
@@ -0,0 +1,5 @@
+
+
+ data/basic_page.html
+
+
diff --git a/autotests/data/basic_page.html b/autotests/data/basic_page.html
new file mode 100644
index 000000000..d0142c415
--- /dev/null
+++ b/autotests/data/basic_page.html
@@ -0,0 +1,8 @@
+
+
+ Basic Page
+
+
+Hello World
+
+
diff --git a/autotests/webviewtest.cpp b/autotests/webviewtest.cpp
new file mode 100644
index 000000000..1e9380def
--- /dev/null
+++ b/autotests/webviewtest.cpp
@@ -0,0 +1,106 @@
+/* ============================================================
+* Falkon - Qt web browser
+* Copyright (C) 2018 David Rosca
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+* ============================================================ */
+#include "autotests.h"
+#include "webviewtest.h"
+#include "webview.h"
+#include "webpage.h"
+
+class TestWebView : public WebView
+{
+public:
+ explicit TestWebView()
+ : WebView()
+ {
+ }
+
+ QWidget *overlayWidget() override
+ {
+ return this;
+ }
+
+ void closeView() override
+ {
+ }
+
+ void loadInNewTab(const LoadRequest &req, Qz::NewTabPositionFlags position) override
+ {
+ Q_UNUSED(req)
+ Q_UNUSED(position)
+ }
+
+ bool isFullScreen() override
+ {
+ return m_fullScreen;
+ }
+
+ void requestFullScreen(bool enable) override
+ {
+ m_fullScreen = enable;
+ }
+
+ bool m_fullScreen = false;
+};
+
+void WebViewTest::initTestCase()
+{
+}
+
+void WebViewTest::cleanupTestCase()
+{
+}
+
+void WebViewTest::loadSignalsChangePageTest()
+{
+ TestWebView view;
+ WebPage *page1 = new WebPage;
+ view.setPage(page1);
+
+ QSignalSpy loadStartedSpy(&view, &WebView::loadStarted);
+ QSignalSpy loadFinishedSpy(&view, &WebView::loadFinished);
+
+ view.load(QUrl(":autotests/data/basic_page.html"));
+
+ QTRY_COMPARE(loadStartedSpy.count(), 1);
+ loadStartedSpy.clear();
+
+ WebPage *page2 = new WebPage;
+ view.setPage(page2);
+
+ // WebPage: Workaround for broken load started/finished signals in QtWebEngine 5.10
+ const int loadFinishedEmitCount = qstrcmp(qVersion(), "5.10.0") == 0 ? 2 : 1;
+
+ QTRY_COMPARE(loadFinishedSpy.count(), loadFinishedEmitCount);
+ QCOMPARE(loadStartedSpy.count(), 0);
+ loadFinishedSpy.clear();
+
+ QWebEngineView view2;
+ WebPage *page3 = new WebPage;
+ view2.setPage(page3);
+
+ QSignalSpy page3LoadStart(page3, &WebPage::loadStarted);
+ page3->load(QUrl(":autotests/data/basic_page.html"));
+ QVERIFY(page3LoadStart.wait());
+
+ view2.setPage(new QWebEnginePage(&view2));
+ view.setPage(page3);
+
+ QTRY_COMPARE(loadStartedSpy.count(), 1);
+ QCOMPARE(loadFinishedSpy.count(), 0);
+}
+
+FALKONTEST_MAIN(WebViewTest)
diff --git a/autotests/webviewtest.h b/autotests/webviewtest.h
new file mode 100644
index 000000000..5dd25743c
--- /dev/null
+++ b/autotests/webviewtest.h
@@ -0,0 +1,31 @@
+/* ============================================================
+* Falkon - Qt web browser
+* Copyright (C) 2018 David Rosca
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see .
+* ============================================================ */
+#pragma once
+
+#include
+
+class WebViewTest : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void loadSignalsChangePageTest();
+};