From 0a21df6d8ef2f7efb397fe109b1ff2a391db1735 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Tue, 11 Aug 2015 13:56:18 +0200 Subject: Move custom URL scheme handlers to core Makes the custom URL scheme handler API public, and moves it to core so that it may be shared with the QQuickWebEngine API. Change-Id: I745cb088df6f4cd11b1ac7c8c3c76f112032cb38 Reviewed-by: Joerg Bornemann --- src/webenginewidgets/api/qwebengineprofile.cpp | 68 +++++++++++++++++++------- 1 file changed, 51 insertions(+), 17 deletions(-) (limited to 'src/webenginewidgets/api/qwebengineprofile.cpp') diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index db8c0dc89..a38a78cf7 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -42,7 +42,7 @@ #include "qwebenginepage.h" #include "qwebengineprofile_p.h" #include "qwebenginesettings.h" -#include "qwebengineurlschemehandler_p_p.h" +#include "qwebengineurlschemehandler_p.h" #include "qwebenginescriptcollection_p.h" #include "browser_context_adapter.h" @@ -536,10 +536,16 @@ QWebEngineSettings *QWebEngineProfile::settings() const return d->settings(); } -QWebEngineUrlSchemeHandler *QWebEngineProfilePrivate::urlSchemeHandler(const QByteArray &protocol) +/*! + \since 5.6 + + Returns the custom URL scheme handler register for the URL scheme \a scheme. +*/ +const QWebEngineUrlSchemeHandler *QWebEngineProfile::urlSchemeHandler(const QByteArray &scheme) const { - if (m_urlSchemeHandlers.contains(protocol)) - return m_urlSchemeHandlers.value(protocol); + const Q_D(QWebEngineProfile); + if (d->m_urlSchemeHandlers.contains(scheme)) + return d->m_urlSchemeHandlers.value(scheme); return 0; } @@ -553,8 +559,14 @@ static bool checkInternalScheme(const QByteArray &scheme) return internalSchemes.contains(scheme); } -void QWebEngineProfilePrivate::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) +/*! + \since 5.6 + + Installs the custom URL scheme handler \a handler in the profile. +*/ +void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) { + Q_D(QWebEngineProfile); Q_ASSERT(handler); QByteArray scheme = handler->scheme(); if (checkInternalScheme(scheme)) { @@ -562,29 +574,51 @@ void QWebEngineProfilePrivate::installUrlSchemeHandler(QWebEngineUrlSchemeHandle return; } - if (m_urlSchemeHandlers.contains(scheme)) { + if (d->m_urlSchemeHandlers.contains(scheme)) { qWarning() << "URL scheme handler already installed for the scheme: " << scheme; return; } - m_urlSchemeHandlers.insert(scheme, handler); - browserContext()->customUrlSchemeHandlers().append(handler->d_func()); - browserContext()->updateCustomUrlSchemeHandlers(); + 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*))); } -void QWebEngineProfilePrivate::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) +/*! + \since 5.6 + + Removes the custom URL scheme handler \a handler from the profile +*/ +void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) { - int count = m_urlSchemeHandlers.remove(handler->scheme()); + Q_D(QWebEngineProfile); + Q_ASSERT(handler); + if (!handler) + return; + int count = d->m_urlSchemeHandlers.remove(handler->scheme()); if (!count) return; - browserContext()->customUrlSchemeHandlers().removeOne(handler->d_func()); - browserContext()->updateCustomUrlSchemeHandlers(); + disconnect(handler, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedUrlSchemeHandler(QObject*))); + d->browserContext()->removeCustomUrlSchemeHandler(handler->d_func()); + d->browserContext()->updateCustomUrlSchemeHandlers(); +} + +/*! + \since 5.6 + + Removes all custom URL scheme handlers installed in the profile. +*/ +void QWebEngineProfile::clearUrlSchemeHandlers() +{ + Q_D(QWebEngineProfile); + d->m_urlSchemeHandlers.clear(); + d->browserContext()->customUrlSchemeHandlers().clear(); + d->browserContext()->updateCustomUrlSchemeHandlers(); } -void QWebEngineProfilePrivate::clearUrlSchemeHandlers() +void QWebEngineProfile::destroyedUrlSchemeHandler(QObject *obj) { - m_urlSchemeHandlers.clear(); - browserContext()->customUrlSchemeHandlers().clear(); - browserContext()->updateCustomUrlSchemeHandlers(); + removeUrlSchemeHandler(qobject_cast(obj)); } QT_END_NAMESPACE -- cgit v1.2.3