diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-02-05 10:48:38 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-02-19 14:49:08 +0000 |
commit | d3f80fb0b71e3020e4e8173e2002dc93efdc5f60 (patch) | |
tree | 1a019dbd7330479a278cce5908975ee940af38ef /src/webenginewidgets/api/qwebengineprofile.cpp | |
parent | e263449d32e9392985c1587f2a0b4e0e77e605a2 (diff) |
Experimental custom URL scheme API
Introduces API for custom URL scheme as an experimental API in widgets.
A QML api is not included yet.
Change-Id: Ice4542e5238feb961a4c9c60a809455e31dc1ec6
Reviewed-by: Andras Becsi <andras.becsi@theqtcompany.com>
Diffstat (limited to 'src/webenginewidgets/api/qwebengineprofile.cpp')
-rw-r--r-- | src/webenginewidgets/api/qwebengineprofile.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebengineprofile.cpp b/src/webenginewidgets/api/qwebengineprofile.cpp index 6427d3811..3de2fe521 100644 --- a/src/webenginewidgets/api/qwebengineprofile.cpp +++ b/src/webenginewidgets/api/qwebengineprofile.cpp @@ -41,6 +41,7 @@ #include "qwebenginepage.h" #include "qwebengineprofile_p.h" #include "qwebenginesettings.h" +#include "qwebengineurlschemehandler_p_p.h" #include "browser_context_adapter.h" #include "web_engine_visited_links_manager.h" @@ -453,4 +454,51 @@ QWebEngineSettings *QWebEngineProfile::settings() const return d->settings(); } +QWebEngineUrlSchemeHandler *QWebEngineProfilePrivate::urlSchemeHandler(const QByteArray &protocol) +{ + if (m_urlSchemeHandlers.contains(protocol)) + return m_urlSchemeHandlers.value(protocol); + return 0; +} + +static bool checkInternalScheme(const QByteArray &scheme) +{ + static QSet<QByteArray> internalSchemes; + if (internalSchemes.isEmpty()) { + internalSchemes << QByteArrayLiteral("qrc") << QByteArrayLiteral("data") << QByteArrayLiteral("blob") + << QByteArrayLiteral("http") << QByteArrayLiteral("ftp") << QByteArrayLiteral("javascript"); + } + return internalSchemes.contains(scheme); +} + +void QWebEngineProfilePrivate::installUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) +{ + Q_ASSERT(handler); + QByteArray scheme = handler->scheme(); + if (checkInternalScheme(scheme)) { + qWarning() << "Can not install a URL scheme handler overriding internal scheme: " << scheme; + return; + } + + m_urlSchemeHandlers.insert(scheme, handler); + browserContext()->customUrlSchemeHandlers().append(handler->d_func()); + browserContext()->updateCustomUrlSchemeHandlers(); +} + +void QWebEngineProfilePrivate::removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *handler) +{ + int count = m_urlSchemeHandlers.remove(handler->scheme()); + if (!count) + return; + browserContext()->customUrlSchemeHandlers().removeOne(handler->d_func()); + browserContext()->updateCustomUrlSchemeHandlers(); +} + +void QWebEngineProfilePrivate::clearUrlSchemeHandlers() +{ + m_urlSchemeHandlers.clear(); + browserContext()->customUrlSchemeHandlers().clear(); + browserContext()->updateCustomUrlSchemeHandlers(); +} + QT_END_NAMESPACE |