summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-02-20 11:59:02 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-02-20 14:16:22 +0000
commit61dec11a8bc36d37ed36acc6ad897653735d4564 (patch)
tree2de013b04c38fd6734f744182d1e40b13521516d /src/webenginewidgets
parentd2b9c003f87e34ca599d3264a9af371e435ad0f8 (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')
-rw-r--r--src/webenginewidgets/api/qwebengineurlschemehandler.cpp9
-rw-r--r--src/webenginewidgets/api/qwebengineurlschemehandler_p.h2
-rw-r--r--src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h4
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