summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-09-29 15:41:46 +0200
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-09-30 10:38:41 +0000
commit2a972c4046bbee49ec9c770f2c1e12fb95500240 (patch)
tree6231b8ec2257f7cacde2386d7540562f9877e306
parent6a45d22a1f93b8ae6e1ce3fb000f620fa1907e7b (diff)
Fix assert on deleting installed custom URL scheme handler
When the QObject::destroyed signal is emitted the inherited class parts have already been destroyed and thus it is no longer a QWebEngineUrlSchemeHandler and qobject_cast will return 0, which is asserted against. Change-Id: I7130c60a26088067930499a30e0081ed297a92d9 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
-rw-r--r--src/core/api/qwebengineurlschemehandler.cpp1
-rw-r--r--src/core/api/qwebengineurlschemehandler.h3
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.cpp8
-rw-r--r--src/webenginewidgets/api/qwebengineprofile.h2
4 files changed, 9 insertions, 5 deletions
diff --git a/src/core/api/qwebengineurlschemehandler.cpp b/src/core/api/qwebengineurlschemehandler.cpp
index 330648893..e14da6fb5 100644
--- a/src/core/api/qwebengineurlschemehandler.cpp
+++ b/src/core/api/qwebengineurlschemehandler.cpp
@@ -84,6 +84,7 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme,
QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()
{
+ Q_EMIT destroyed(this);
delete d_ptr;
}
diff --git a/src/core/api/qwebengineurlschemehandler.h b/src/core/api/qwebengineurlschemehandler.h
index b6f6a69f0..1ec32e46c 100644
--- a/src/core/api/qwebengineurlschemehandler.h
+++ b/src/core/api/qwebengineurlschemehandler.h
@@ -57,6 +57,9 @@ public:
virtual void requestStarted(QWebEngineUrlRequestJob*) = 0;
+Q_SIGNALS:
+ void destroyed(QWebEngineUrlSchemeHandler*);
+
private:
Q_DISABLE_COPY(QWebEngineUrlSchemeHandler)
Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler)
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp
index 323659827..66cba9bc3 100644
--- a/src/webenginewidgets/api/qwebengineprofile.cpp
+++ b/src/webenginewidgets/api/qwebengineprofile.cpp
@@ -582,7 +582,7 @@ void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *hand
d->m_urlSchemeHandlers.insert(scheme, handler);
d->browserContext()->customUrlSchemeHandlers().append(handler->d_func());
d->browserContext()->updateCustomUrlSchemeHandlers();
- connect(handler, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedUrlSchemeHandler(QObject*)));
+ connect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
}
/*!
@@ -599,7 +599,7 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl
int count = d->m_urlSchemeHandlers.remove(handler->scheme());
if (!count)
return;
- disconnect(handler, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedUrlSchemeHandler(QObject*)));
+ disconnect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*)));
d->browserContext()->removeCustomUrlSchemeHandler(handler->d_func());
d->browserContext()->updateCustomUrlSchemeHandlers();
}
@@ -617,9 +617,9 @@ void QWebEngineProfile::clearUrlSchemeHandlers()
d->browserContext()->updateCustomUrlSchemeHandlers();
}
-void QWebEngineProfile::destroyedUrlSchemeHandler(QObject *obj)
+void QWebEngineProfile::destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj)
{
- removeUrlSchemeHandler(qobject_cast<QWebEngineUrlSchemeHandler*>(obj));
+ removeUrlSchemeHandler(obj);
}
QT_END_NAMESPACE
diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h
index 5532f12ee..82946a223 100644
--- a/src/webenginewidgets/api/qwebengineprofile.h
+++ b/src/webenginewidgets/api/qwebengineprofile.h
@@ -121,7 +121,7 @@ Q_SIGNALS:
void downloadRequested(QWebEngineDownloadItem *download);
private Q_SLOTS:
- void destroyedUrlSchemeHandler(QObject *obj);
+ void destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj);
private:
Q_DISABLE_COPY(QWebEngineProfile)