summaryrefslogtreecommitdiffstats
path: root/src/webenginewidgets/api/qwebengineprofile.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-02-05 10:48:38 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-02-19 14:49:08 +0000
commitd3f80fb0b71e3020e4e8173e2002dc93efdc5f60 (patch)
tree1a019dbd7330479a278cce5908975ee940af38ef /src/webenginewidgets/api/qwebengineprofile.cpp
parente263449d32e9392985c1587f2a0b4e0e77e605a2 (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.cpp48
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