From d9d1cc3ec8931cecc0b0dcb5d5d184cdb53ff434 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 12 Oct 2015 17:38:32 +0200 Subject: Decouple scheme and url scheme handler Remove the scheme from the url scheme handler constructor, this way the same handler can handle multiple schemes, the API look more natural and we can get rid of the private class. Change-Id: I33906b8a5ea51641e28a53f93f4feb1472c24baf Reviewed-by: Kai Koehne --- src/webenginewidgets/api/qwebengineprofile.cpp | 39 +++++++++++++++++--------- src/webenginewidgets/api/qwebengineprofile.h | 5 ++-- 2 files changed, 29 insertions(+), 15 deletions(-) (limited to 'src/webenginewidgets') diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index b98aa3a61..0d9e400ed 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -562,43 +562,56 @@ static bool checkInternalScheme(const QByteArray &scheme) /*! \since 5.6 - Installs the custom URL scheme handler \a handler in the profile. + Registers a handler \a handler for custom URL scheme \a scheme in the profile. */ -void QWebEngineProfile::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) +void QWebEngineProfile::installUrlSchemeHandler(const QByteArray &scheme, QWebEngineUrlSchemeHandler *handler) { Q_D(QWebEngineProfile); Q_ASSERT(handler); - QByteArray scheme = handler->scheme(); if (checkInternalScheme(scheme)) { - qWarning("Can not install a URL scheme handler overriding internal scheme: %s", scheme.constData()); + qWarning("Cannot install a URL scheme handler overriding internal scheme: %s", scheme.constData()); return; } if (d->browserContext()->customUrlSchemeHandlers().contains(scheme)) { - qWarning("URL scheme handler already installed for the scheme: %s", scheme.constData()); + if (d->browserContext()->customUrlSchemeHandlers().value(scheme) != handler) + qWarning("URL scheme handler already installed for the scheme: %s", scheme.constData()); return; } - d->browserContext()->customUrlSchemeHandlers().insert(scheme, handler); - d->browserContext()->updateCustomUrlSchemeHandlers(); + d->browserContext()->addCustomUrlSchemeHandler(scheme, handler); connect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*))); } /*! \since 5.6 - Removes the custom URL scheme handler \a handler from the profile + Removes the custom URL scheme handler \a handler from the profile. + + \sa removeUrlScheme() */ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) { Q_D(QWebEngineProfile); Q_ASSERT(handler); - if (!handler) + if (!d->browserContext()->removeCustomUrlSchemeHandler(handler)) return; - int count = d->browserContext()->customUrlSchemeHandlers().remove(handler->scheme()); - if (!count) + disconnect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*))); +} + +/*! + \since 5.6 + + Removes the custom URL scheme \a scheme from the profile. + + \sa removeUrlSchemeHandler() +*/ +void QWebEngineProfile::removeUrlScheme(const QByteArray &scheme) +{ + Q_D(QWebEngineProfile); + QWebEngineUrlSchemeHandler *handler = d->browserContext()->takeCustomUrlSchemeHandler(scheme); + if (!handler) return; disconnect(handler, SIGNAL(destroyed(QWebEngineUrlSchemeHandler*)), this, SLOT(destroyedUrlSchemeHandler(QWebEngineUrlSchemeHandler*))); - d->browserContext()->updateCustomUrlSchemeHandlers(); } /*! @@ -606,7 +619,7 @@ void QWebEngineProfile::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handl Removes all custom URL scheme handlers installed in the profile. */ -void QWebEngineProfile::clearUrlSchemeHandlers() +void QWebEngineProfile::removeAllUrlSchemeHandlers() { Q_D(QWebEngineProfile); d->browserContext()->customUrlSchemeHandlers().clear(); diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h index 82946a223..4bed186fb 100644 --- a/src/webenginewidgets/api/qwebengineprofile.h +++ b/src/webenginewidgets/api/qwebengineprofile.h @@ -111,9 +111,10 @@ public: QWebEngineScriptCollection *scripts() const; const QWebEngineUrlSchemeHandler *urlSchemeHandler(const QByteArray &) const; - void installUrlSchemeHandler(QWebEngineUrlSchemeHandler *); + void installUrlSchemeHandler(const QByteArray &scheme, QWebEngineUrlSchemeHandler *); + void removeUrlScheme(const QByteArray &scheme); void removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *); - void clearUrlSchemeHandlers(); + void removeAllUrlSchemeHandlers(); static QWebEngineProfile *defaultProfile(); -- cgit v1.2.3