aboutsummaryrefslogtreecommitdiff
path: root/src/webengine
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine')
-rw-r--r--src/webengine/CMakeLists.txt10
-rw-r--r--src/webengine/webpage.cpp4
-rw-r--r--src/webengine/webpage.h4
-rw-r--r--src/webengine/webprofile.cpp2
-rw-r--r--src/webengine/webprofilemanager.cpp1
-rw-r--r--src/webengine/webprofilemanager.h13
-rw-r--r--src/webengine/webview.cpp14
-rw-r--r--src/webengine/webviewcontextmenu.cpp97
8 files changed, 27 insertions, 118 deletions
diff --git a/src/webengine/CMakeLists.txt b/src/webengine/CMakeLists.txt
new file mode 100644
index 0000000..704a6d0
--- /dev/null
+++ b/src/webengine/CMakeLists.txt
@@ -0,0 +1,10 @@
+add_library(webengine STATIC
+ urlinterceptor.cpp urlinterceptor.h
+ webpage.cpp webpage.h
+ webprofile.cpp webprofile.h
+ webprofilemanager.cpp webprofilemanager.h
+ webviewcontextmenu.cpp webviewcontextmenu.h
+ webview.cpp webview.h
+)
+target_link_libraries(webengine PUBLIC Qt6::WebEngineCore Qt6::WebEngineWidgets)
+target_include_directories(webengine PUBLIC ${CMAKE_CURRENT_LIST_DIR} ${PROJECT_SOURCE_DIR}/include)
diff --git a/src/webengine/webpage.cpp b/src/webengine/webpage.cpp
index b2b19b5..f8a8f7f 100644
--- a/src/webengine/webpage.cpp
+++ b/src/webengine/webpage.cpp
@@ -62,6 +62,7 @@ WebPage::WebPage(QWebEngineProfile *profile, QObject *parent)
connect(this, &QWebEnginePage::featurePermissionRequested, this, &WebPage::featurePermissionDialog);
connect(this, &QWebEnginePage::renderProcessTerminated, this, &WebPage::renderProcessCrashed);
+ connect(this, &QWebEnginePage::certificateError, this, &WebPage::certificateError);
}
bool WebPage::certificateError(const QWebEngineCertificateError &certificateError)
@@ -77,9 +78,8 @@ bool WebPage::certificateError(const QWebEngineCertificateError &certificateErro
messageBox.setText(tr("An SSL error has occurred on <strong>%1</strong>").arg(certificateError.url().toString()));
messageBox.setInformativeText(tr("<p>%1</p>"
"<p>This error %2 be overridden.</p>")
- .arg(certificateError.errorDescription(),
+ .arg(certificateError.description(),
certificateError.isOverridable() ? tr("can") : tr("cannot")));
- messageBox.setDetailedText(tr("Error code: %1").arg(certificateError.error()));
if(certificateError.isOverridable()) {
messageBox.setStandardButtons(QMessageBox::Ignore | QMessageBox::Abort);
diff --git a/src/webengine/webpage.h b/src/webengine/webpage.h
index 91ae4f3..bd7d54c 100644
--- a/src/webengine/webpage.h
+++ b/src/webengine/webpage.h
@@ -19,12 +19,10 @@ public:
WebPage(QWebEngineProfile *profile, QObject *parent = nullptr);
~WebPage() override = default;
-protected:
- bool certificateError(const QWebEngineCertificateError &certificateError) override;
-
protected slots:
void featurePermissionDialog(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
void renderProcessCrashed(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode);
+ bool certificateError(const QWebEngineCertificateError &certificateError);
};
#endif // SMOLBOTE_WEBPAGE_H
diff --git a/src/webengine/webprofile.cpp b/src/webengine/webprofile.cpp
index 719ab34..f1e71fb 100644
--- a/src/webengine/webprofile.cpp
+++ b/src/webengine/webprofile.cpp
@@ -18,12 +18,10 @@ static WebProfile *s_profile = nullptr;
void WebProfile::setDefaultProfile(WebProfile *profile)
{
- Q_CHECK_PTR(profile);
s_profile = profile;
}
WebProfile *WebProfile::defaultProfile()
{
- Q_CHECK_PTR(s_profile);
return s_profile;
}
diff --git a/src/webengine/webprofilemanager.cpp b/src/webengine/webprofilemanager.cpp
index 5cc83f8..9ae2960 100644
--- a/src/webengine/webprofilemanager.cpp
+++ b/src/webengine/webprofilemanager.cpp
@@ -8,6 +8,7 @@
#include "webprofilemanager.h"
#include "webprofile.h"
+#include <QActionGroup>
static WebProfileManager<false> *s_instance = nullptr;
diff --git a/src/webengine/webprofilemanager.h b/src/webengine/webprofilemanager.h
index 91dcaf8..a356506 100644
--- a/src/webengine/webprofilemanager.h
+++ b/src/webengine/webprofilemanager.h
@@ -41,10 +41,11 @@ public:
}
if(!profiles.contains(default_id)) {
- Profile profile;
- profile.settings = WebProfile::load(QString(), search, homepage, newtab);
- profile.ptr = WebProfile::load(default_id, profile.settings, true);
- profiles[default_id] = profile;
+ auto *settings = WebProfile::load(QString(), search, homepage, newtab);
+ profiles[default_id] = Profile{
+ .settings = settings,
+ .ptr = WebProfile::load(default_id, settings, true),
+ };
}
WebProfile::setDefaultProfile(profiles[default_id].ptr);
}
@@ -73,7 +74,7 @@ public:
}
if(profile != nullptr && settings != nullptr) {
- profiles[id] = Profile{ profile, settings, false };
+ profiles[id] = Profile{ settings, profile, false };
}
}
@@ -101,8 +102,8 @@ private:
set_typestate(consumed) void consume() {}
struct Profile {
- WebProfile *ptr = nullptr;
QSettings *settings = nullptr;
+ WebProfile *ptr = nullptr;
bool selfDestruct = false;
};
diff --git a/src/webengine/webview.cpp b/src/webengine/webview.cpp
index 38e564a..bc52102 100644
--- a/src/webengine/webview.cpp
+++ b/src/webengine/webview.cpp
@@ -37,9 +37,7 @@ WebView::WebView(WebProfile *profile, cb_createWindow_t cb, QWidget *parent)
: WebView(parent)
{
cb_createWindow = cb;
- Q_CHECK_PTR(profile);
- m_profile = profile;
- setPage(new WebPage(profile, this));
+ setProfile(profile);
}
WebView::WebView(const Session::WebView &webview_data, cb_createWindow_t cb, QWidget *parent)
@@ -47,11 +45,7 @@ WebView::WebView(const Session::WebView &webview_data, cb_createWindow_t cb, QWi
{
cb_createWindow = cb;
WebProfileManager profileManager;
-
- auto *profile = profileManager.profile(webview_data.profile);
- if(profile != nullptr) {
- setProfile(profile);
- }
+ setProfile(profileManager.profile(webview_data.profile));
if(!webview_data.url.isEmpty())
load(QUrl::fromUserInput(webview_data.url));
@@ -64,9 +58,9 @@ WebView::WebView(const Session::WebView &webview_data, cb_createWindow_t cb, QWi
void WebView::setProfile(WebProfile *profile)
{
- m_profile = profile;
+ m_profile = (profile == nullptr) ? WebProfile::defaultProfile() : profile;
const auto url = this->url();
- setPage(new WebPage(profile, this));
+ setPage(new WebPage(m_profile, this));
this->load(url);
}
diff --git a/src/webengine/webviewcontextmenu.cpp b/src/webengine/webviewcontextmenu.cpp
index ea5e8c6..0de3b9f 100644
--- a/src/webengine/webviewcontextmenu.cpp
+++ b/src/webengine/webviewcontextmenu.cpp
@@ -17,7 +17,7 @@
#include <QStyle>
#include <QToolButton>
#include <QVBoxLayout>
-#include <QWebEngineContextMenuData>
+#include <QWebEngineContextMenuRequest>
#include <QWebEngineHistory>
#include <QWidgetAction>
@@ -94,100 +94,7 @@ WebViewContextMenu::WebViewContextMenu(WebView *view)
this->addAction(navButtons);
this->addSeparator();
- const auto ctxdata = view->page()->contextMenuData();
-
- if(ctxdata.mediaType() == QWebEngineContextMenuData::MediaTypeNone) {
- auto *backMenu = this->addMenu(tr("Back"));
- if(!view->history()->canGoBack()) {
- backMenu->setEnabled(false);
- } else {
- connect(backMenu, &QMenu::aboutToShow, view, [view, backMenu]() {
- backMenu->clear();
- const auto backItems = view->history()->backItems(10);
- for(const QWebEngineHistoryItem &item : backItems) {
- backMenu->addAction(historyAction(view, item));
- }
- });
- }
-
- auto *forwardMenu = this->addMenu(tr("Forward"));
- if(!view->history()->canGoForward()) {
- forwardMenu->setEnabled(false);
- } else {
- connect(forwardMenu, &QMenu::aboutToShow, view, [view, forwardMenu]() {
- forwardMenu->clear();
- const auto forwardItems = view->history()->forwardItems(10);
- for(const QWebEngineHistoryItem &item : forwardItems) {
- forwardMenu->addAction(historyAction(view, item));
- }
- });
- }
-
- connect(this->addAction(tr("Reload")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::Reload);
- });
- connect(this->addAction(tr("Reload and bypass Cache")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::ReloadAndBypassCache);
- });
-
- this->addSeparator();
-
- connect(this->addAction(tr("Select All")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::SelectAll);
- });
- connect(this->addAction(tr("Clear Selection")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::Unselect);
- });
- connect(this->addAction(tr("Copy to clipboard")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::Copy);
- });
-
- } else if(ctxdata.mediaType() == QWebEngineContextMenuData::MediaTypeImage) {
- connect(this->addAction(tr("Copy image to clipboard")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::CopyImageToClipboard);
- });
- connect(this->addAction(tr("Copy image URL to clipboard")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::CopyImageUrlToClipboard);
- });
- if(!ctxdata.mediaUrl().isEmpty()) {
- if(view->url() != ctxdata.mediaUrl()) {
- connect(this->addAction(tr("Open image")), &QAction::triggered, view, [view, ctxdata]() {
- view->load(ctxdata.mediaUrl());
- });
- connect(this->addAction(tr("Open image in new tab")), &QAction::triggered, view, [view, ctxdata]() {
- view->createWindow(QWebEnginePage::WebBrowserTab)->load(ctxdata.mediaUrl());
- });
- }
- connect(this->addAction(tr("Save image")), &QAction::triggered, view, [view, ctxdata]() {
- view->page()->download(ctxdata.mediaUrl());
- });
- }
-
- } else {
- addMenu(view->page()->createStandardContextMenu());
- }
-
- if(!ctxdata.linkUrl().isEmpty()) {
- this->addSeparator();
- connect(this->addAction(tr("Open link in new tab")), &QAction::triggered, view, [view, ctxdata]() {
- view->createWindow(QWebEnginePage::WebBrowserTab)->load(ctxdata.linkUrl());
- });
-
- auto *newTabMenu = this->addMenu(tr("Open link in new tab with profile"));
- profileMenu(newTabMenu, [view, ctxdata](WebProfile *profile) {
- auto *v = view->createWindow(QWebEnginePage::WebBrowserTab);
- v->setProfile(profile);
- v->load(ctxdata.linkUrl());
- });
-
- connect(this->addAction(tr("Open link in new window")), &QAction::triggered, view, [view, ctxdata]() {
- view->createWindow(QWebEnginePage::WebBrowserWindow)->load(ctxdata.linkUrl());
- });
-
- connect(this->addAction(tr("Copy link address")), &QAction::triggered, view, [view]() {
- view->page()->triggerAction(QWebEnginePage::CopyLinkToClipboard);
- });
- }
+ addMenu(view->createStandardContextMenu());
// zoom widget
{