diff --git a/messageviewer/src/viewer/webengine/mailwebenginepage.h b/messageviewer/src/viewer/webengine/mailwebenginepage.h --- a/messageviewer/src/viewer/webengine/mailwebenginepage.h +++ b/messageviewer/src/viewer/webengine/mailwebenginepage.h @@ -28,8 +28,7 @@ Q_OBJECT public: explicit MailWebEnginePage(QObject *parent = nullptr); - explicit MailWebEnginePage(QWebEngineProfile *profile, QObject *parent = nullptr); - ~MailWebEnginePage(); + virtual ~MailWebEnginePage() = default; void setPrintElementBackground(bool printElementBackground); diff --git a/messageviewer/src/viewer/webengine/mailwebenginepage.cpp b/messageviewer/src/viewer/webengine/mailwebenginepage.cpp --- a/messageviewer/src/viewer/webengine/mailwebenginepage.cpp +++ b/messageviewer/src/viewer/webengine/mailwebenginepage.cpp @@ -24,21 +24,25 @@ using namespace MessageViewer; MailWebEnginePage::MailWebEnginePage(QObject *parent) - : WebEngineViewer::WebEnginePage(parent) + : WebEngineViewer::WebEnginePage(new QWebEngineProfile, parent) { + // Set ownership of the private QWebEngineProfile here, so that it will be + // deleted along with the QWebEnginePage. The profile must remain active + // for as long as any QWebEnginePage's belonging to it exist, see the API + // documentation of QWebEnginePage::QWebEnginePage(QWebEngineProfile *, QObject *). + // Deleting it as our child on destruction is safe. + // + // Do not change this to try to set the parent on construction: + // + // MailWebEnginePage::MailWebEnginePage(QObject *parent) + // : WebEngineViewer::WebEnginePage(new QWebEngineProfile(this), parent) + // + // because the QWebEngineProfile constructor calls out to the QWebEnginePage + // and crashes because the QWebEnginePage is not fully constructed yet. + profile()->setParent(this); initialize(); } -MailWebEnginePage::MailWebEnginePage(QWebEngineProfile *profile, QObject *parent) - : WebEngineViewer::WebEnginePage(profile, parent) -{ - initialize(); -} - -MailWebEnginePage::~MailWebEnginePage() -{ -} - void MailWebEnginePage::initialize() { settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, false); diff --git a/messageviewer/src/viewer/webengine/mailwebengineview.cpp b/messageviewer/src/viewer/webengine/mailwebengineview.cpp --- a/messageviewer/src/viewer/webengine/mailwebengineview.cpp +++ b/messageviewer/src/viewer/webengine/mailwebengineview.cpp @@ -34,7 +34,6 @@ #include #include -#include #include #include @@ -81,7 +80,7 @@ : WebEngineViewer::WebEngineView(parent) , d(new MessageViewer::MailWebEngineViewPrivate) { - d->mPageEngine = new MailWebEnginePage(new QWebEngineProfile(this), this); + d->mPageEngine = new MailWebEnginePage(this); setPage(d->mPageEngine); d->mWebViewAccessKey = new WebEngineViewer::WebEngineAccessKey(this, this); d->mWebViewAccessKey->setActionCollection(ac);