diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-02-20 11:59:02 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-02-20 14:16:22 +0000 |
commit | 61dec11a8bc36d37ed36acc6ad897653735d4564 (patch) | |
tree | 2de013b04c38fd6734f744182d1e40b13521516d /src/webenginewidgets | |
parent | d2b9c003f87e34ca599d3264a9af371e435ad0f8 (diff) |
Fix crashes and ownership issues in Custom URL scheme handling
Fixes crashes exposed by implementing the qthelp protocol handler for
Qt assistant.
Change-Id: I0b1153bc52ff82838cde009f1fe1ac46edc43210
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'src/webenginewidgets')
3 files changed, 8 insertions, 7 deletions
diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler.cpp b/src/webenginewidgets/api/qwebengineurlschemehandler.cpp index b52912b7c..ccb92258b 100644 --- a/src/webenginewidgets/api/qwebengineurlschemehandler.cpp +++ b/src/webenginewidgets/api/qwebengineurlschemehandler.cpp @@ -41,8 +41,6 @@ #include "qwebengineprofile_p.h" #include "qwebengineurlrequestjob_p.h" -#include <QSharedPointer> - QT_BEGIN_NAMESPACE QWebEngineUrlSchemeHandlerPrivate::QWebEngineUrlSchemeHandlerPrivate(const QByteArray &scheme, QWebEngineUrlSchemeHandler *q, QWebEngineProfile *profile) @@ -63,8 +61,8 @@ bool QWebEngineUrlSchemeHandlerPrivate::handleJob(URLRequestCustomJobDelegate *j return true; } -QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile) - : QObject(profile) +QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile, QObject *parent) + : QObject(parent) , d_ptr(new QWebEngineUrlSchemeHandlerPrivate(scheme, this, profile)) { profile->d_func()->installUrlSchemeHandler(this); @@ -72,7 +70,8 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler() { - d_ptr->m_profile->d_func()->removeUrlSchemeHandler(this); + if (d_ptr->m_profile) + d_ptr->m_profile->d_func()->removeUrlSchemeHandler(this); } QByteArray QWebEngineUrlSchemeHandler::scheme() const diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler_p.h b/src/webenginewidgets/api/qwebengineurlschemehandler_p.h index 0455128c7..153b78f81 100644 --- a/src/webenginewidgets/api/qwebengineurlschemehandler_p.h +++ b/src/webenginewidgets/api/qwebengineurlschemehandler_p.h @@ -54,7 +54,7 @@ class QWebEngineUrlSchemeHandlerPrivate; class QWEBENGINEWIDGETS_EXPORT QWebEngineUrlSchemeHandler : public QObject { Q_OBJECT public: - QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile); + QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile, QObject *parent = 0); virtual ~QWebEngineUrlSchemeHandler(); QByteArray scheme() const; diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h b/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h index e880bf000..6146cc05e 100644 --- a/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h +++ b/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h @@ -41,6 +41,8 @@ #include "custom_url_scheme_handler.h" +#include <QPointer> + QT_BEGIN_NAMESPACE class QWebEngineProfile; @@ -58,7 +60,7 @@ public: private: QWebEngineUrlSchemeHandler *q_ptr; - QWebEngineProfile* m_profile; + QPointer<QWebEngineProfile> m_profile; }; QT_END_NAMESPACE |