diff options
author | michael.bruning@digia.com <michael.bruning@digia.com> | 2013-01-24 12:25:19 +0000 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-02-13 15:31:39 +0100 |
commit | ca9b6836810d2f9535810790fcca86ab35834caa (patch) | |
tree | 42506fd66a9d9190d97bdff4822d639a0f84d9cc /Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp | |
parent | 11a7cbc1a9dc5df9a63e0102c589a6f05d4a39fa (diff) | |
download | qtwebkit-ca9b6836810d2f9535810790fcca86ab35834caa.tar.gz |
[Qt][WK2] Pages / resources cannot be loaded from qrc files.
https://bugs.webkit.org/show_bug.cgi?id=107031
Reviewed by Jocelyn Turcotte.
Enables WebKit2 Qt applications to load files from the bundled
qrc files. This is achieved by adding a url scheme handler for
the "qrc" scheme using the application scheme handler and ignoring
all handlers for the qrc application scheme that the application might
set.
* UIProcess/API/qt/qquickurlschemedelegate.cpp:
(QQuickQrcSchemeDelegate::QQuickQrcSchemeDelegate):
(QQuickQrcSchemeDelegate::readResourceAndSend):
* UIProcess/API/qt/qquickurlschemedelegate_p.h:
(QQuickQrcSchemeDelegate):
* UIProcess/API/qt/qquickwebview.cpp:
(QQuickWebViewPrivate::initialize):
(QQuickWebViewExperimental::schemeDelegates_Append):
(QQuickWebViewExperimental::invokeApplicationSchemeHandler):
* UIProcess/API/qt/tests/qmltests/WebView/tst_applicationScheme.qml:
* UIProcess/API/qt/tests/qmltests/common/qrctest.html: Added.
* UIProcess/API/qt/tests/qmltests/resources.qrc:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@140676 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Change-Id: Ia1cbd499ff9d1ca03373f6fb542d41f25231d656
Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp index 437d08b94..bf742ad11 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp @@ -323,6 +323,7 @@ void QQuickWebViewPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pa pageClient.initialize(q_ptr, pageViewPrivate->eventHandler.data(), &undoController); webPageProxy->initializeWebPage(); + webPageProxy->registerApplicationScheme(ASCIILiteral("qrc")); q_ptr->setAcceptedMouseButtons(Qt::MouseButtonMask); q_ptr->setAcceptHoverEvents(true); @@ -1291,6 +1292,12 @@ QQuickUrlSchemeDelegate* QQuickWebViewExperimental::schemeDelegates_At(QQmlListP void QQuickWebViewExperimental::schemeDelegates_Append(QQmlListProperty<QQuickUrlSchemeDelegate>* property, QQuickUrlSchemeDelegate *scheme) { + if (!scheme->scheme().compare(QLatin1String("qrc"), Qt::CaseInsensitive)) { + qWarning("WARNING: The qrc scheme is reserved to be handled internally. The handler will be ignored."); + delete scheme; + return; + } + QObject* schemeParent = property->object; scheme->setParent(schemeParent); QQuickWebViewExperimental* webViewExperimental = qobject_cast<QQuickWebViewExperimental*>(property->object->parent()); @@ -1328,6 +1335,15 @@ QQmlListProperty<QQuickUrlSchemeDelegate> QQuickWebViewExperimental::schemeDeleg void QQuickWebViewExperimental::invokeApplicationSchemeHandler(PassRefPtr<QtRefCountedNetworkRequestData> request) { RefPtr<QtRefCountedNetworkRequestData> req = request; + if (req->data().m_scheme.startsWith("qrc", false)) { + QQuickQrcSchemeDelegate qrcDelegate(QUrl(QString(req->data().m_urlString))); + qrcDelegate.request()->setNetworkRequestData(req); + qrcDelegate.reply()->setNetworkRequestData(req); + qrcDelegate.reply()->setWebViewExperimental(this); + qrcDelegate.readResourceAndSend(); + return; + } + const QObjectList children = schemeParent->children(); for (int index = 0; index < children.count(); index++) { QQuickUrlSchemeDelegate* delegate = qobject_cast<QQuickUrlSchemeDelegate*>(children.at(index)); |