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::addScript(
const QString &source,
const QString &scriptName, QWebEngineScript::InjectionPoint injectionPoint)
101 d->mManagerScript->addScript(page()->profile(), source, scriptName, injectionPoint);
104 void WebEngineView::forwardWheelEvent(
QWheelEvent *event)
109 void WebEngineView::forwardKeyPressEvent(
QKeyEvent *event)
114 void WebEngineView::forwardKeyReleaseEvent(
QKeyEvent *event)
119 void WebEngineView::forwardMousePressEvent(
QMouseEvent *event)
124 void WebEngineView::forwardMouseMoveEvent(
QMouseEvent *event)
129 void WebEngineView::forwardMouseReleaseEvent(
QMouseEvent *event)
138 parentWidget()->installEventFilter(
this);
144 if (focusProxy() && d->mCurrentWidget != focusProxy()) {
145 d->mCurrentWidget = focusProxy();
146 d->mCurrentWidget->installEventFilter(
this);
152 if (obj == d->mCurrentWidget) {
153 #define HANDLE_EVENT(f, t) \
155 bool wasAccepted = event->isAccepted(); \
156 event->setAccepted(false); \
157 f(static_cast<t *>(event)); \
158 bool ret = event->isAccepted(); \
159 event->setAccepted(wasAccepted); \
163 switch (
event->type()) {
165 HANDLE_EVENT(forwardKeyPressEvent,
QKeyEvent)
167 HANDLE_EVENT(forwardKeyReleaseEvent,
QKeyEvent)
171 HANDLE_EVENT(forwardMouseReleaseEvent,
QMouseEvent)
184 switch (
event->type()) {
197 return QWebEngineView::eventFilter(obj, event);
200 QWebEngineView *WebEngineView::createWindow(QWebEnginePage::WebWindowType type)
203 delete d->mWebEngineNavigatorInterceptor;
204 delete d->mWebEngineNavigatorInterceptorView;
207 d->mWebEngineNavigatorInterceptor =
new WebEngineNavigationRequestInterceptor(this->page());
208 d->mWebEngineNavigatorInterceptorView->setPage(d->mWebEngineNavigatorInterceptor);
209 return d->mWebEngineNavigatorInterceptorView;
212 void WebEngineView::clearRelativePosition()
214 d->mSavedRelativePosition = -1;
217 void WebEngineView::saveRelativePosition()
219 if (d->mSavedRelativePosition != -1) {
220 d->mSavedRelativePosition = page()->scrollPosition().toPoint().y();
224 qreal WebEngineView::relativePosition()
const
226 qCDebug(WEBENGINEVIEWER_LOG) <<
"Relative Position" << d->mSavedRelativePosition;
227 return d->mSavedRelativePosition;
232 if (!d->mPhishingDatabase) {
234 d->mPhishingDatabase->initialize();
236 return d->mPhishingDatabase;