Commit 2a972c40 authored by Allan Sandfeld Jensen's avatar Allan Sandfeld Jensen
Browse files

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: default avatarKai Koehne <kai.koehne@theqtcompany.com>
Showing with 9 additions and 5 deletions
...@@ -84,6 +84,7 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, ...@@ -84,6 +84,7 @@ QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme,
QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler() QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler()
{ {
Q_EMIT destroyed(this);
delete d_ptr; delete d_ptr;
} }
......
...@@ -57,6 +57,9 @@ public: ...@@ -57,6 +57,9 @@ public:
virtual void requestStarted(QWebEngineUrlRequestJob*) = 0; virtual void requestStarted(QWebEngineUrlRequestJob*) = 0;
Q_SIGNALS:
void destroyed(QWebEngineUrlSchemeHandler*);
private: private:
Q_DISABLE_COPY(QWebEngineUrlSchemeHandler) Q_DISABLE_COPY(QWebEngineUrlSchemeHandler)
Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler) Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler)
......
...@@ -582,7 +582,7 @@ void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *hand ...@@ -582,7 +582,7 @@ void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *hand
d->m_urlSchemeHandlers.insert(scheme, handler); d->m_urlSchemeHandlers.insert(scheme, handler);
d->browserContext()->customUrlSchemeHandlers().append(handler->d_func()); d->browserContext()->customUrlSchemeHandlers().append(handler->d_func());
d->browserContext()->updateCustomUrlSchemeHandlers(); 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 ...@@ -599,7 +599,7 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl
int count = d->m_urlSchemeHandlers.remove(handler->scheme()); int count = d->m_urlSchemeHandlers.remove(handler->scheme());
if (!count) if (!count)
return; 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()->removeCustomUrlSchemeHandler(handler->d_func());
d->browserContext()->updateCustomUrlSchemeHandlers(); d->browserContext()->updateCustomUrlSchemeHandlers();
} }
...@@ -617,9 +617,9 @@ void QWebEngineProfile::clearUrlSchemeHandlers() ...@@ -617,9 +617,9 @@ void QWebEngineProfile::clearUrlSchemeHandlers()
d->browserContext()->updateCustomUrlSchemeHandlers(); d->browserContext()->updateCustomUrlSchemeHandlers();
} }
void QWebEngineProfile::destroyedUrlSchemeHandler(QObject *obj) void QWebEngineProfile::destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj)
{ {
removeUrlSchemeHandler(qobject_cast<QWebEngineUrlSchemeHandler*>(obj)); removeUrlSchemeHandler(obj);
} }
QT_END_NAMESPACE QT_END_NAMESPACE
...@@ -121,7 +121,7 @@ Q_SIGNALS: ...@@ -121,7 +121,7 @@ Q_SIGNALS:
void downloadRequested(QWebEngineDownloadItem *download); void downloadRequested(QWebEngineDownloadItem *download);
private Q_SLOTS: private Q_SLOTS:
void destroyedUrlSchemeHandler(QObject *obj); void destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler *obj);
private: private:
Q_DISABLE_COPY(QWebEngineProfile) Q_DISABLE_COPY(QWebEngineProfile)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment