diff --git a/spark-webapp-runtime/mainwindow.cpp b/spark-webapp-runtime/mainwindow.cpp
index 0d5a97b..c2fea63 100644
--- a/spark-webapp-runtime/mainwindow.cpp
+++ b/spark-webapp-runtime/mainwindow.cpp
@@ -10,7 +10,7 @@
 #include <QDir>
 #include <QCloseEvent>
 
-#include "webenginepage.h"
+#include "webengineview.h"
 
 MainWindow::MainWindow(QString szTitle,
                        QString szUrl,
diff --git a/spark-webapp-runtime/spark-webapp-runtime.pro b/spark-webapp-runtime/spark-webapp-runtime.pro
index 7336ad4..a76bd94 100644
--- a/spark-webapp-runtime/spark-webapp-runtime.pro
+++ b/spark-webapp-runtime/spark-webapp-runtime.pro
@@ -1,4 +1,4 @@
-QT += core gui webengine webenginewidgets svg concurrent
+QT += core gui webenginewidgets svg concurrent
 
 greaterThan(QT_MAJOR_VERSION, 5): QT += widgets
 
@@ -9,20 +9,20 @@ DEFINES += QT_DEPRECATED_WARNINGS
 CONFIG += c++11 link_pkgconfig
 PKGCONFIG += dtkwidget
 
-HEADERS  += \
-         mainwindow.h \
-         globaldefine.h \
-         httpd.h \
-         httplib.h \
-         webenginepage.h \
-         widget.h
+HEADERS += \
+        mainwindow.h \
+        globaldefine.h \
+        httpd.h \
+        httplib.h \
+        widget.h \
+        webengineview.h
 
 SOURCES += \
         main.cpp \
         httpd.cpp \
         mainwindow.cpp \
-        webenginepage.cpp \
-        widget.cpp
+        widget.cpp \
+        webengineview.cpp
 
 RESOURCES += \
           imgs.qrc
diff --git a/spark-webapp-runtime/webenginepage.cpp b/spark-webapp-runtime/webenginepage.cpp
deleted file mode 100644
index 3e9e94a..0000000
--- a/spark-webapp-runtime/webenginepage.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "webenginepage.h"
-
-WebEnginePage::WebEnginePage(QObject *parent)
-    : QWebEnginePage(parent)
-{
-}
-
-QWebEnginePage *WebEnginePage::createWindow(QWebEnginePage::WebWindowType type)
-{
-    Q_UNUSED(type)
-    WebEnginePage *page = new WebEnginePage;
-    connect(page, &QWebEnginePage::urlChanged, this, &WebEnginePage::on_urlChanged);
-    return page;
-}
-
-void WebEnginePage::on_urlChanged(const QUrl url)
-{
-    setUrl(url);
-    sender()->deleteLater();
-}
diff --git a/spark-webapp-runtime/webenginepage.h b/spark-webapp-runtime/webenginepage.h
deleted file mode 100644
index afa2d05..0000000
--- a/spark-webapp-runtime/webenginepage.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef WEBENGINEPAGE_H
-#define WEBENGINEPAGE_H
-
-#include <QWebEnginePage>
-#include <QWebEngineProfile>
-#include <QObject>
-
-class WebEnginePage : public QWebEnginePage
-{
-public:
-    WebEnginePage(QObject *parent = nullptr);
-
-protected:
-    QWebEnginePage *createWindow(WebWindowType type) override;
-
-private slots:
-    void on_urlChanged(const QUrl url);
-
-};
-
-#endif // WEBENGINEPAGE_H
diff --git a/spark-webapp-runtime/webengineview.cpp b/spark-webapp-runtime/webengineview.cpp
new file mode 100644
index 0000000..b1e8cd5
--- /dev/null
+++ b/spark-webapp-runtime/webengineview.cpp
@@ -0,0 +1,23 @@
+#include "webengineview.h"
+
+WebEngineView::WebEngineView(QWidget *parent)
+    : QWebEngineView(parent)
+{
+
+}
+
+QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type)
+{
+    Q_UNUSED(type)
+
+    QWebEngineView *view = new QWebEngineView;
+    connect(view, &QWebEngineView::urlChanged, this, &WebEngineView::on_urlChanged);
+
+    return view;
+}
+
+void WebEngineView::on_urlChanged(QUrl url)
+{
+    setUrl(url);
+    sender()->deleteLater();
+}
diff --git a/spark-webapp-runtime/webengineview.h b/spark-webapp-runtime/webengineview.h
new file mode 100644
index 0000000..8102441
--- /dev/null
+++ b/spark-webapp-runtime/webengineview.h
@@ -0,0 +1,21 @@
+#ifndef WEBENGINEVIEW_H
+#define WEBENGINEVIEW_H
+
+#include <QWebEngineView>
+
+class WebEngineView : public QWebEngineView
+{
+    Q_OBJECT
+
+public:
+    explicit WebEngineView(QWidget *parent = nullptr);
+
+protected:
+    QWebEngineView *createWindow(QWebEnginePage::WebWindowType type) override;
+
+private slots:
+    void on_urlChanged(QUrl url);
+
+};
+
+#endif // WEBENGINEVIEW_H
diff --git a/spark-webapp-runtime/widget.cpp b/spark-webapp-runtime/widget.cpp
index cf77e31..4c439a9 100644
--- a/spark-webapp-runtime/widget.cpp
+++ b/spark-webapp-runtime/widget.cpp
@@ -2,7 +2,7 @@
 
 Widget::Widget(QString szUrl, QWidget *parent)
     : QWidget(parent)
-    , m_webEngineView(new QWebEngineView)
+    , m_webEngineView(new WebEngineView)
     , m_szUrl(szUrl)
     , m_spinner(new DSpinner)
     , main(new QHBoxLayout)
@@ -16,7 +16,7 @@ Widget::Widget(QString szUrl, QWidget *parent)
     m_webEngineView->setAutoFillBackground(false);
     m_webEngineView->setZoomFactor(1);
 
-    WebEnginePage *page = new WebEnginePage;
+    QWebEnginePage *page = new QWebEnginePage;
     m_webEngineView->setPage(page);
 
     m_webEngineView->setUrl(QUrl(nullptr));
diff --git a/spark-webapp-runtime/widget.h b/spark-webapp-runtime/widget.h
index ba41739..f50223e 100644
--- a/spark-webapp-runtime/widget.h
+++ b/spark-webapp-runtime/widget.h
@@ -2,12 +2,13 @@
 #define WIDGET_H
 
 #include <QWidget>
+#include <QWebEngineProfile>
 #include <QWebEngineView>
 #include <QLayout>
 
 #include <DSpinner>
 
-#include "webenginepage.h"
+#include "webengineview.h"
 
 DWIDGET_USE_NAMESPACE
 
@@ -25,7 +26,7 @@ public:
     void refresh();
 
 private:
-    QWebEngineView *m_webEngineView;
+    WebEngineView *m_webEngineView;
     QString m_szUrl;
     DSpinner *m_spinner;