7 #include "webengineview.h"
8 #include "checkphishingurl/localdatabasemanager.h"
9 #include "webenginemanagescript.h"
10 #include "webenginenavigationrequestinterceptor.h"
11 #include "webengineviewer_debug.h"
14 #include <QMouseEvent>
16 #include <QWheelEvent>
18 using namespace WebEngineViewer;
20 class WebEngineViewer::WebEngineViewPrivate
28 ~WebEngineViewPrivate()
30 delete mWebEngineNavigatorInterceptor;
31 mWebEngineNavigatorInterceptor =
nullptr;
32 delete mWebEngineNavigatorInterceptorView;
33 mWebEngineNavigatorInterceptorView =
nullptr;
36 void renderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus
status)
39 case QWebEnginePage::NormalTerminationStatus:
42 case QWebEnginePage::AbnormalTerminationStatus:
43 qCInfo(WEBENGINEVIEWER_LOG) <<
"WebEngine render process terminated abnormally";
45 case QWebEnginePage::CrashedTerminationStatus:
46 qCInfo(WEBENGINEVIEWER_LOG) <<
"WebEngine render process crashed";
48 case QWebEnginePage::KilledTerminationStatus:
49 qCInfo(WEBENGINEVIEWER_LOG) <<
"WebEngine render process killed";
55 if (++mCrashCount < 6) {
62 qreal mSavedRelativePosition = -1;
63 QWidget *mCurrentWidget =
nullptr;
65 WebEngineNavigationRequestInterceptor *mWebEngineNavigatorInterceptor =
nullptr;
74 WebEngineView::WebEngineView(
QWidget *parent)
75 : QWebEngineView(parent)
76 , d(new WebEngineViewer::WebEngineViewPrivate(this))
78 installEventFilter(
this);
81 connect(
this, &QWebEngineView::renderProcessTerminated,
this, [
this](QWebEnginePage::RenderProcessTerminationStatus
status) {
82 d->renderProcessTerminated(
status);
84 connect(
this, &QWebEngineView::loadFinished,
this, [
this]() {
92 WebEngineView::~WebEngineView() =
default;
96 return d->mManagerScript;
99 void WebEngineView::forwardWheelEvent(
QWheelEvent *event)
104 void WebEngineView::forwardKeyPressEvent(
QKeyEvent *event)
109 void WebEngineView::forwardKeyReleaseEvent(
QKeyEvent *event)
114 void WebEngineView::forwardMousePressEvent(
QMouseEvent *event)
119 void WebEngineView::forwardMouseMoveEvent(
QMouseEvent *event)
124 void WebEngineView::forwardMouseReleaseEvent(
QMouseEvent *event)
133 parentWidget()->installEventFilter(
this);
139 if (focusProxy() && d->mCurrentWidget != focusProxy()) {
140 d->mCurrentWidget = focusProxy();
141 d->mCurrentWidget->installEventFilter(
this);
147 if (obj == d->mCurrentWidget) {
148 #define HANDLE_EVENT(f, t) \
150 bool wasAccepted = event->isAccepted(); \
151 event->setAccepted(false); \
152 f(static_cast<t *>(event)); \
153 bool ret = event->isAccepted(); \
154 event->setAccepted(wasAccepted); \
158 switch (
event->type()) {
160 HANDLE_EVENT(forwardKeyPressEvent,
QKeyEvent)
162 HANDLE_EVENT(forwardKeyReleaseEvent,
QKeyEvent)
166 HANDLE_EVENT(forwardMouseReleaseEvent,
QMouseEvent)
179 switch (
event->type()) {
192 return QWebEngineView::eventFilter(obj, event);
195 QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type)
198 delete d->mWebEngineNavigatorInterceptor;
199 delete d->mWebEngineNavigatorInterceptorView;
202 d->mWebEngineNavigatorInterceptor =
new WebEngineNavigationRequestInterceptor(this->page());
203 d->mWebEngineNavigatorInterceptorView->setPage(d->mWebEngineNavigatorInterceptor);
204 return d->mWebEngineNavigatorInterceptorView;
207 void WebEngineView::clearRelativePosition()
209 d->mSavedRelativePosition = -1;
212 void WebEngineView::saveRelativePosition()
214 if (d->mSavedRelativePosition != -1) {
215 d->mSavedRelativePosition = page()->scrollPosition().toPoint().y();
219 qreal WebEngineView::relativePosition()
const
221 qCDebug(WEBENGINEVIEWER_LOG) <<
"Relative Position" << d->mSavedRelativePosition;
222 return d->mSavedRelativePosition;
227 if (!d->mPhishingDatabase) {
229 d->mPhishingDatabase->initialize();
231 return d->mPhishingDatabase;