summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorJüri Valdmann <juri.valdmann@qt.io>2018-10-29 13:03:18 +0100
committerJüri Valdmann <juri.valdmann@qt.io>2018-10-31 23:24:55 +0000
commitbc1529f56b8c86259c7f952b0ea9b439f5cc8d53 (patch)
tree0bb3a0d05c5a286700002aa23de619815357269e /src/core
parent0c7376edee43718fa868f9fdbe0a9419ba4a636a (diff)
Use QWebEngineUrlSchemeHandler for qrc
Delete qrc protocol handler and use custom scheme protocol handler instead. Fixes: QTBUG-71215 Change-Id: I8aa390552c80b591a92f52b8a388e5a707d28f9e Reviewed-by: Michal Klocek <michal.klocek@qt.io>
Diffstat (limited to 'src/core')
-rw-r--r--src/core/content_browser_client_qt.cpp1
-rw-r--r--src/core/content_client_qt.cpp1
-rw-r--r--src/core/core_chromium.pri6
-rw-r--r--src/core/net/qrc_url_scheme_handler.cpp (renamed from src/core/net/qrc_protocol_handler_qt.h)46
-rw-r--r--src/core/net/qrc_url_scheme_handler.h (renamed from src/core/net/qrc_protocol_handler_qt.cpp)30
-rw-r--r--src/core/net/url_request_qrc_job_qt.cpp133
-rw-r--r--src/core/net/url_request_qrc_job_qt.h76
-rw-r--r--src/core/profile_adapter.cpp2
-rw-r--r--src/core/profile_adapter.h2
-rw-r--r--src/core/profile_io_data_qt.cpp4
10 files changed, 39 insertions, 262 deletions
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 83b4e7cb5..9f1b35ec9 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -100,7 +100,6 @@
#include "login_delegate_qt.h"
#include "media_capture_devices_dispatcher.h"
#include "net/network_delegate_qt.h"
-#include "net/qrc_protocol_handler_qt.h"
#include "net/url_request_context_getter_qt.h"
#if QT_CONFIG(webengine_printing_and_pdf)
#include "printing/printing_message_filter_qt.h"
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index 1a3be31be..def017916 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -56,7 +56,6 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-#include "net/qrc_protocol_handler_qt.h"
#include "type_conversion.h"
#include <QCoreApplication>
diff --git a/src/core/core_chromium.pri b/src/core/core_chromium.pri
index f0ff63676..c060185ba 100644
--- a/src/core/core_chromium.pri
+++ b/src/core/core_chromium.pri
@@ -75,13 +75,12 @@ SOURCES = \
net/custom_protocol_handler.cpp \
net/network_delegate_qt.cpp \
net/proxy_config_service_qt.cpp \
- net/qrc_protocol_handler_qt.cpp \
+ net/qrc_url_scheme_handler.cpp \
net/ssl_host_state_delegate_qt.cpp \
net/url_request_context_getter_qt.cpp \
net/url_request_custom_job.cpp \
net/url_request_custom_job_delegate.cpp \
net/url_request_custom_job_proxy.cpp \
- net/url_request_qrc_job_qt.cpp \
net/webui_controller_factory_qt.cpp \
ozone/gl_context_qt.cpp \
ozone/gl_ozone_egl_qt.cpp \
@@ -166,13 +165,12 @@ HEADERS = \
net/cookie_monster_delegate_qt.h \
net/custom_protocol_handler.h \
net/network_delegate_qt.h \
- net/qrc_protocol_handler_qt.h \
+ net/qrc_url_scheme_handler.h \
net/ssl_host_state_delegate_qt.h \
net/url_request_context_getter_qt.h \
net/url_request_custom_job.h \
net/url_request_custom_job_delegate.h \
net/url_request_custom_job_proxy.h \
- net/url_request_qrc_job_qt.h \
net/webui_controller_factory_qt.h \
ozone/gl_context_qt.h \
ozone/gl_ozone_egl_qt.h \
diff --git a/src/core/net/qrc_protocol_handler_qt.h b/src/core/net/qrc_url_scheme_handler.cpp
index f2849c1ef..74a77a7ec 100644
--- a/src/core/net/qrc_protocol_handler_qt.h
+++ b/src/core/net/qrc_url_scheme_handler.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWebEngine module of the Qt Toolkit.
@@ -37,34 +37,32 @@
**
****************************************************************************/
-#ifndef QRC_PROTOCOL_HANDLER_QT_H_
-#define QRC_PROTOCOL_HANDLER_QT_H_
+#include "qrc_url_scheme_handler.h"
-#include "net/url_request/url_request_job_factory.h"
+#include <QtWebEngineCore/qwebengineurlrequestjob.h>
-namespace net {
-
-class NetworkDelegate;
-class URLRequestJob;
-
-} // namespace
+#include <QFile>
+#include <QFileInfo>
+#include <QMimeDatabase>
+#include <QMimeType>
namespace QtWebEngineCore {
-extern const char kQrcSchemeQt[];
-
-// Implements a ProtocolHandler for qrc file jobs. If |network_delegate_| is NULL,
-// then all file requests will fail with ERR_ACCESS_DENIED.
-class QrcProtocolHandlerQt : public net::URLRequestJobFactory::ProtocolHandler {
+void QrcUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *job)
+{
+ QByteArray requestMethod = job->requestMethod();
+ if (requestMethod != "GET") {
+ job->fail(QWebEngineUrlRequestJob::RequestDenied);
+ return;
+ }
-public:
- QrcProtocolHandlerQt();
- net::URLRequestJob *MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const override;
-
-private:
- DISALLOW_COPY_AND_ASSIGN(QrcProtocolHandlerQt);
-};
+ QUrl requestUrl = job->requestUrl();
+ QString requestPath = requestUrl.path();
+ QScopedPointer<QFile> file(new QFile(':' + requestPath, job));
+ QFileInfo fileInfo(*file);
+ QMimeDatabase mimeDatabase;
+ QMimeType mimeType = mimeDatabase.mimeTypeForFile(fileInfo);
+ job->reply(mimeType.name().toUtf8(), file.take());
+}
} // namespace QtWebEngineCore
-
-#endif // QRC_PROTOCOL_HANDLER_QT_H_
diff --git a/src/core/net/qrc_protocol_handler_qt.cpp b/src/core/net/qrc_url_scheme_handler.h
index eb716f182..f6ca92879 100644
--- a/src/core/net/qrc_protocol_handler_qt.cpp
+++ b/src/core/net/qrc_url_scheme_handler.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2018 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtWebEngine module of the Qt Toolkit.
@@ -37,27 +37,19 @@
**
****************************************************************************/
-#include "qrc_protocol_handler_qt.h"
-#include "url_request_qrc_job_qt.h"
+#ifndef QRC_URL_SCHEME_HANDLER_H
+#define QRC_URL_SCHEME_HANDLER_H
-#include "net/base/net_errors.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_error_job.h"
+#include <QtWebEngineCore/private/qtwebenginecoreglobal_p.h>
+#include <QtWebEngineCore/qwebengineurlschemehandler.h>
namespace QtWebEngineCore {
-const char kQrcSchemeQt[] = "qrc";
-
-QrcProtocolHandlerQt::QrcProtocolHandlerQt()
-{
-}
-
-net::URLRequestJob *QrcProtocolHandlerQt::MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const
-{
- if (!networkDelegate)
- return new net::URLRequestErrorJob(request, Q_NULLPTR, net::ERR_ACCESS_DENIED);
-
- return new URLRequestQrcJobQt(request, networkDelegate);
-}
+class QrcUrlSchemeHandler final : public QWebEngineUrlSchemeHandler {
+public:
+ void requestStarted(QWebEngineUrlRequestJob *) override;
+};
} // namespace QtWebEngineCore
+
+#endif // !QRC_URL_SCHEME_HANDLER_H
diff --git a/src/core/net/url_request_qrc_job_qt.cpp b/src/core/net/url_request_qrc_job_qt.cpp
deleted file mode 100644
index a2712653d..000000000
--- a/src/core/net/url_request_qrc_job_qt.cpp
+++ /dev/null
@@ -1,133 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWebEngine module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "url_request_qrc_job_qt.h"
-
-#include "type_conversion.h"
-
-#include "base/pending_task.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "net/base/net_errors.h"
-#include "net/base/io_buffer.h"
-
-#include <QUrl>
-#include <QFileInfo>
-#include <QMimeDatabase>
-#include <QMimeType>
-
-using namespace net;
-namespace QtWebEngineCore {
-
-URLRequestQrcJobQt::URLRequestQrcJobQt(URLRequest *request, NetworkDelegate *networkDelegate)
- : URLRequestJob(request, networkDelegate)
- , m_remainingBytes(0)
- , m_weakFactory(this)
-{
-}
-
-URLRequestQrcJobQt::~URLRequestQrcJobQt()
-{
- if (m_file.isOpen())
- m_file.close();
-}
-
-void URLRequestQrcJobQt::Start()
-{
- base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, base::Bind(&URLRequestQrcJobQt::startGetHead, m_weakFactory.GetWeakPtr()));
-}
-
-void URLRequestQrcJobQt::Kill()
-{
- if (m_file.isOpen())
- m_file.close();
- m_weakFactory.InvalidateWeakPtrs();
-
- URLRequestJob::Kill();
-}
-
-bool URLRequestQrcJobQt::GetMimeType(std::string *mimeType) const
-{
- DCHECK(request_);
- if (m_mimeType.size() > 0) {
- *mimeType = m_mimeType;
- return true;
- }
- return false;
-}
-
-int URLRequestQrcJobQt::ReadRawData(IOBuffer *buf, int bufSize)
-{
- DCHECK_GE(m_remainingBytes, 0);
- // File has been read finished.
- if (!m_remainingBytes || !bufSize) {
- return 0;
- }
- if (m_remainingBytes < bufSize)
- bufSize = static_cast<int>(m_remainingBytes);
- qint64 rv = m_file.read(buf->data(), bufSize);
- if (rv >= 0) {
- m_remainingBytes -= rv;
- DCHECK_GE(m_remainingBytes, 0);
- return static_cast<int>(rv);
- }
- return static_cast<int>(rv);
-}
-
-void URLRequestQrcJobQt::startGetHead()
-{
- // Get qrc file path.
- QString qrcFilePath = ':' + toQt(request_->url()).path();
- m_file.setFileName(qrcFilePath);
- QFileInfo qrcFileInfo(m_file);
- // Get qrc file mime type.
- QMimeDatabase mimeDatabase;
- QMimeType mimeType = mimeDatabase.mimeTypeForFile(qrcFileInfo);
- m_mimeType = mimeType.name().toStdString();
- // Open file
- if (m_file.open(QIODevice::ReadOnly)) {
- m_remainingBytes = m_file.size();
- set_expected_content_size(m_remainingBytes);
- // Notify that the headers are complete
- NotifyHeadersComplete();
- } else {
- NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, ERR_INVALID_URL));
- }
-}
-
-} // namespace QtWebEngineCore
diff --git a/src/core/net/url_request_qrc_job_qt.h b/src/core/net/url_request_qrc_job_qt.h
deleted file mode 100644
index 11c130693..000000000
--- a/src/core/net/url_request_qrc_job_qt.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWebEngine module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef URL_REQUEST_QRC_JOB_QT_H_
-#define URL_REQUEST_QRC_JOB_QT_H_
-
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_job.h"
-
-#include <QFile>
-
-namespace QtWebEngineCore {
-
-// A request job that handles reading qrc file URLs
-class URLRequestQrcJobQt : public net::URLRequestJob {
-
-public:
- URLRequestQrcJobQt(net::URLRequest *request, net::NetworkDelegate *networkDelegate);
- void Start() override;
- void Kill() override;
- int ReadRawData(net::IOBuffer* buf, int buf_size) override;;
- bool GetMimeType(std::string *mimeType) const override;
-
-protected:
- virtual ~URLRequestQrcJobQt();
- // Get file mime type and try open file on a background thread.
- void startGetHead();
-
-private:
- qint64 m_remainingBytes;
- QFile m_file;
- std::string m_mimeType;
- base::WeakPtrFactory<URLRequestQrcJobQt> m_weakFactory;
-
- DISALLOW_COPY_AND_ASSIGN(URLRequestQrcJobQt);
-};
-
-} // namespace QtWebEngineCore
-
-#endif // URL_REQUEST_QRC_JOB_QT_H_
diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp
index f2b1d6998..437423a4a 100644
--- a/src/core/profile_adapter.cpp
+++ b/src/core/profile_adapter.cpp
@@ -90,6 +90,7 @@ ProfileAdapter::ProfileAdapter(const QString &storageName):
content::BrowserContext::Initialize(m_profile.data(), toFilePath(dataPath()));
// fixme: this should not be here
m_profile->m_profileIOData->initializeOnUIThread();
+ m_customUrlSchemeHandlers.insert(QByteArrayLiteral("qrc"), &m_qrcHandler);
}
ProfileAdapter::~ProfileAdapter()
@@ -495,6 +496,7 @@ void ProfileAdapter::installUrlSchemeHandler(const QByteArray &scheme, QWebEngin
void ProfileAdapter::removeAllUrlSchemeHandlers()
{
m_customUrlSchemeHandlers.clear();
+ m_customUrlSchemeHandlers.insert(QByteArrayLiteral("qrc"), &m_qrcHandler);
updateCustomUrlSchemeHandlers();
}
diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h
index de7b86f19..18e15954b 100644
--- a/src/core/profile_adapter.h
+++ b/src/core/profile_adapter.h
@@ -63,6 +63,7 @@
#include "api/qwebenginecookiestore.h"
#include "api/qwebengineurlrequestinterceptor.h"
#include "api/qwebengineurlschemehandler.h"
+#include "net/qrc_url_scheme_handler.h"
QT_FORWARD_DECLARE_CLASS(QObject)
@@ -219,6 +220,7 @@ private:
QList<ProfileAdapterClient*> m_clients;
int m_httpCacheMaxSize;
int m_pageRequestInterceptors;
+ QrcUrlSchemeHandler m_qrcHandler;
Q_DISABLE_COPY(ProfileAdapter)
};
diff --git a/src/core/profile_io_data_qt.cpp b/src/core/profile_io_data_qt.cpp
index d67a36863..ee59f3d96 100644
--- a/src/core/profile_io_data_qt.cpp
+++ b/src/core/profile_io_data_qt.cpp
@@ -79,7 +79,6 @@
#include "net/custom_protocol_handler.h"
#include "net/network_delegate_qt.h"
#include "net/proxy_config_service_qt.h"
-#include "net/qrc_protocol_handler_qt.h"
#include "net/url_request_context_getter_qt.h"
#include "profile_qt.h"
#include "resource_context_qt.h"
@@ -523,9 +522,6 @@ void ProfileIODataQt::generateJobFactory()
base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN}));
jobFactory->SetProtocolHandler(url::kFileScheme,
std::make_unique<net::FileProtocolHandler>(taskRunner));
- jobFactory->SetProtocolHandler(kQrcSchemeQt,
- std::unique_ptr<net::URLRequestJobFactory::ProtocolHandler>(
- new QrcProtocolHandlerQt()));
jobFactory->SetProtocolHandler(url::kFtpScheme,
net::FtpProtocolHandler::Create(m_urlRequestContext->host_resolver()));