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 @@ -29,7 +29,7 @@ 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 @@ -32,13 +32,15 @@ MailWebEnginePage::MailWebEnginePage(QWebEngineProfile *profile, QObject *parent) : WebEngineViewer::WebEnginePage(profile, parent) { + // Take 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. + profile->setParent(this); 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 @@ -81,7 +81,10 @@ : WebEngineViewer::WebEngineView(parent) , d(new MessageViewer::MailWebEngineViewPrivate) { - d->mPageEngine = new MailWebEnginePage(new QWebEngineProfile(this), this); + // Do not create the QWebEngineProfile as a child of us, the MailWebEnginePage + // will take ownershp of it and ensure that it it correctly deleted during + // destruction. + d->mPageEngine = new MailWebEnginePage(new QWebEngineProfile, this); setPage(d->mPageEngine); d->mWebViewAccessKey = new WebEngineViewer::WebEngineAccessKey(this, this); d->mWebViewAccessKey->setActionCollection(ac);