From d3f80fb0b71e3020e4e8173e2002dc93efdc5f60 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> Date: Thu, 5 Feb 2015 10:48:38 +0100 Subject: [PATCH] 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> --- src/core/browser_context_adapter.cpp | 11 ++ src/core/browser_context_adapter.h | 6 + src/core/core_gyp_generator.pro | 8 + src/core/custom_protocol_handler.cpp | 55 +++++++ src/core/custom_protocol_handler.h | 71 +++++++++ src/core/custom_url_scheme_handler.cpp | 63 ++++++++ src/core/custom_url_scheme_handler.h | 67 ++++++++ src/core/url_request_context_getter_qt.cpp | 6 + src/core/url_request_custom_job.cpp | 143 ++++++++++++++++++ src/core/url_request_custom_job.h | 80 ++++++++++ src/core/url_request_custom_job_delegate.cpp | 63 ++++++++ src/core/url_request_custom_job_delegate.h | 65 ++++++++ .../api/qwebengineprofile.cpp | 48 ++++++ src/webenginewidgets/api/qwebengineprofile.h | 3 +- .../api/qwebengineprofile_p.h | 7 + .../api/qwebengineurlrequestjob.cpp | 67 ++++++++ .../api/qwebengineurlrequestjob_p.h | 69 +++++++++ .../api/qwebengineurlschemehandler.cpp | 83 ++++++++++ .../api/qwebengineurlschemehandler_p.h | 72 +++++++++ .../api/qwebengineurlschemehandler_p_p.h | 66 ++++++++ src/webenginewidgets/webenginewidgets.pro | 5 + 21 files changed, 1057 insertions(+), 1 deletion(-) create mode 100644 src/core/custom_protocol_handler.cpp create mode 100644 src/core/custom_protocol_handler.h create mode 100644 src/core/custom_url_scheme_handler.cpp create mode 100644 src/core/custom_url_scheme_handler.h create mode 100644 src/core/url_request_custom_job.cpp create mode 100644 src/core/url_request_custom_job.h create mode 100644 src/core/url_request_custom_job_delegate.cpp create mode 100644 src/core/url_request_custom_job_delegate.h create mode 100644 src/webenginewidgets/api/qwebengineurlrequestjob.cpp create mode 100644 src/webenginewidgets/api/qwebengineurlrequestjob_p.h create mode 100644 src/webenginewidgets/api/qwebengineurlschemehandler.cpp create mode 100644 src/webenginewidgets/api/qwebengineurlschemehandler_p.h create mode 100644 src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp index b8c14c39e..1749fc708 100644 --- a/src/core/browser_context_adapter.cpp +++ b/src/core/browser_context_adapter.cpp @@ -314,3 +314,14 @@ void BrowserContextAdapter::setHttpCacheMaxSize(int maxSize) if (m_browserContext->url_request_getter_.get()) m_browserContext->url_request_getter_->updateHttpCache(); } + +QVector<CustomUrlSchemeHandler*> &BrowserContextAdapter::customUrlSchemeHandlers() +{ + return m_customUrlSchemeHandlers; +} + +void BrowserContextAdapter::updateCustomUrlSchemeHandlers() +{ + if (m_browserContext->url_request_getter_.get()) + m_browserContext->url_request_getter_->updateStorageSettings(); +} diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h index 90f0bec7a..6389d666c 100644 --- a/src/core/browser_context_adapter.h +++ b/src/core/browser_context_adapter.h @@ -42,9 +42,11 @@ #include <QScopedPointer> #include <QSharedData> #include <QString> +#include <QVector> class BrowserContextAdapterClient; class BrowserContextQt; +class CustomUrlSchemeHandler; class DownloadManagerDelegateQt; class WebEngineVisitedLinksManager; @@ -119,6 +121,9 @@ public: bool trackVisitedLinks() const; bool persistVisitedLinks() const; + QVector<CustomUrlSchemeHandler*> &customUrlSchemeHandlers(); + void updateCustomUrlSchemeHandlers(); + private: QString m_name; bool m_offTheRecord; @@ -131,6 +136,7 @@ private: HttpCacheType m_httpCacheType; PersistentCookiesPolicy m_persistentCookiesPolicy; VisitedLinksPolicy m_visitedLinksPolicy; + QVector<CustomUrlSchemeHandler*> m_customUrlSchemeHandlers; BrowserContextAdapterClient *m_client; int m_httpCacheMaxSize; diff --git a/src/core/core_gyp_generator.pro b/src/core/core_gyp_generator.pro index 3980dcc5a..b93ea0175 100644 --- a/src/core/core_gyp_generator.pro +++ b/src/core/core_gyp_generator.pro @@ -41,6 +41,8 @@ SOURCES = \ content_client_qt.cpp \ content_browser_client_qt.cpp \ content_main_delegate_qt.cpp \ + custom_protocol_handler.cpp \ + custom_url_scheme_handler.cpp \ delegated_frame_node.cpp \ desktop_screen_qt.cpp \ dev_tools_http_handler_delegate_qt.cpp \ @@ -66,6 +68,8 @@ SOURCES = \ stream_video_node.cpp \ surface_factory_qt.cpp \ url_request_context_getter_qt.cpp \ + url_request_custom_job.cpp \ + url_request_custom_job_delegate.cpp \ url_request_qrc_job_qt.cpp \ web_channel_ipc_transport_host.cpp \ web_contents_adapter.cpp \ @@ -94,6 +98,8 @@ HEADERS = \ content_client_qt.h \ content_browser_client_qt.h \ content_main_delegate_qt.h \ + custom_protocol_handler.h \ + custom_url_scheme_handler.h \ delegated_frame_node.h \ desktop_screen_qt.h \ dev_tools_http_handler_delegate_qt.h \ @@ -121,6 +127,8 @@ HEADERS = \ surface_factory_qt.h \ type_conversion.h \ url_request_context_getter_qt.h \ + url_request_custom_job.h \ + url_request_custom_job_delegate.h \ url_request_qrc_job_qt.h \ web_channel_ipc_transport_host.h \ web_contents_adapter.h \ diff --git a/src/core/custom_protocol_handler.cpp b/src/core/custom_protocol_handler.cpp new file mode 100644 index 000000000..fd8cebb9e --- /dev/null +++ b/src/core/custom_protocol_handler.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "custom_protocol_handler.h" +#include "url_request_custom_job.h" + +#include "net/base/net_errors.h" +#include "net/url_request/url_request.h" +#include "net/url_request/url_request_error_job.h" + +CustomProtocolHandler::CustomProtocolHandler(CustomUrlSchemeHandler *schemeHandler) + : m_schemeHandler(schemeHandler) +{ +} + +net::URLRequestJob *CustomProtocolHandler::MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const +{ + if (!networkDelegate) + return new net::URLRequestErrorJob(request, Q_NULLPTR, net::ERR_ACCESS_DENIED); + + return new URLRequestCustomJob(request, networkDelegate, m_schemeHandler); +} diff --git a/src/core/custom_protocol_handler.h b/src/core/custom_protocol_handler.h new file mode 100644 index 000000000..4b29a82b7 --- /dev/null +++ b/src/core/custom_protocol_handler.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CUSTOM_PROTOCOL_HANDLER_H_ +#define CUSTOM_PROTOCOL_HANDLER_H_ + +#include "qtwebenginecoreglobal.h" +#include "net/url_request/url_request_job_factory.h" + +#include <QtCore/QByteArray> +#include <QtCore/QObject> +#include <QtCore/qcompilerdetection.h> // Needed for Q_DECL_OVERRIDE + +class BrowserContextAdapter; +class CustomUrlSchemeHandler; + +QT_FORWARD_DECLARE_CLASS(QIODevice) + +namespace net { +class NetworkDelegate; +class URLRequestJob; +} // namespace + +// Implements a ProtocolHandler for custom URL schemes. +// If |network_delegate_| is NULL then all file requests will fail with ERR_ACCESS_DENIED. +class QWEBENGINE_EXPORT CustomProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { + +public: + CustomProtocolHandler(CustomUrlSchemeHandler *); + + virtual net::URLRequestJob *MaybeCreateJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate) const Q_DECL_OVERRIDE; + +private: + DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler); + CustomUrlSchemeHandler *m_schemeHandler; +}; + +#endif // CUSTOM_PROTOCOL_HANDLER_H_ diff --git a/src/core/custom_url_scheme_handler.cpp b/src/core/custom_url_scheme_handler.cpp new file mode 100644 index 000000000..a8701a5d4 --- /dev/null +++ b/src/core/custom_url_scheme_handler.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "custom_url_scheme_handler.h" +#include "custom_protocol_handler.h" + +CustomUrlSchemeHandler::CustomUrlSchemeHandler(const QByteArray &scheme) + : m_scheme(scheme) + , m_protocolHandler(new CustomProtocolHandler(this)) +{ +} + +CustomUrlSchemeHandler::~CustomUrlSchemeHandler() +{ +} + +QByteArray CustomUrlSchemeHandler::scheme() const +{ + return m_scheme; +} + +void CustomUrlSchemeHandler::setScheme(const QByteArray &scheme) +{ + m_scheme = scheme; +} + +CustomProtocolHandler *CustomUrlSchemeHandler::protocolHandler() +{ + return m_protocolHandler.data(); +} diff --git a/src/core/custom_url_scheme_handler.h b/src/core/custom_url_scheme_handler.h new file mode 100644 index 000000000..fef29c98a --- /dev/null +++ b/src/core/custom_url_scheme_handler.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef CUSTOM_URL_SCHEME_HANDLER_H_ +#define CUSTOM_URL_SCHEME_HANDLER_H_ + +#include "qtwebenginecoreglobal.h" + +#include <QtCore/QByteArray> +#include <QtCore/QScopedPointer> + +class BrowserContextAdapter; +class CustomProtocolHandler; +class URLRequestCustomJobDelegate; + +QT_FORWARD_DECLARE_CLASS(QIODevice) + +class QWEBENGINE_EXPORT CustomUrlSchemeHandler { +public: + explicit CustomUrlSchemeHandler(const QByteArray &); + ~CustomUrlSchemeHandler(); + + QByteArray scheme() const; + void setScheme(const QByteArray &); + CustomProtocolHandler *protocolHandler(); + + virtual bool handleJob(URLRequestCustomJobDelegate*) = 0; + +private: + QByteArray m_scheme; + QScopedPointer<CustomProtocolHandler> m_protocolHandler; +}; + +#endif // CUSTOM_URL_SCHEME_HANDLER_H_ diff --git a/src/core/url_request_context_getter_qt.cpp b/src/core/url_request_context_getter_qt.cpp index 96ba36565..41af37e5d 100644 --- a/src/core/url_request_context_getter_qt.cpp +++ b/src/core/url_request_context_getter_qt.cpp @@ -62,6 +62,8 @@ #include "net/ftp/ftp_network_layer.h" #include "browser_context_adapter.h" +#include "custom_protocol_handler.h" +#include "custom_url_scheme_handler.h" #include "content_client_qt.h" #include "network_delegate_qt.h" #include "qrc_protocol_handler_qt.h" @@ -282,6 +284,10 @@ void URLRequestContextGetterQt::generateJobFactory() m_jobFactory->SetProtocolHandler(url::kFtpScheme, new net::FtpProtocolHandler(new net::FtpNetworkLayer(m_urlRequestContext->host_resolver()))); + Q_FOREACH (CustomUrlSchemeHandler* handler, m_browserContext->customUrlSchemeHandlers()) { + m_jobFactory->SetProtocolHandler(handler->scheme().toStdString(), handler->protocolHandler()); + } + m_urlRequestContext->set_job_factory(m_jobFactory.get()); } diff --git a/src/core/url_request_custom_job.cpp b/src/core/url_request_custom_job.cpp new file mode 100644 index 000000000..e97804c2f --- /dev/null +++ b/src/core/url_request_custom_job.cpp @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "url_request_custom_job.h" +#include "url_request_custom_job_delegate.h" + +#include "custom_url_scheme_handler.h" +#include "type_conversion.h" + +#include "content/public/browser/browser_thread.h" +#include "net/base/net_errors.h" +#include "net/base/io_buffer.h" + +#include <QFileInfo> +#include <QMimeDatabase> +#include <QMimeType> +#include <QUrl> + +using namespace net; + +URLRequestCustomJob::URLRequestCustomJob(URLRequest *request, NetworkDelegate *networkDelegate, CustomUrlSchemeHandler *schemeHandler) + : URLRequestJob(request, networkDelegate) + , m_device(0) + , m_schemeHandler(schemeHandler) + , m_weakFactory(this) +{ +} + +URLRequestCustomJob::~URLRequestCustomJob() +{ + if (m_device && m_device->isOpen()) + m_device->close(); +} + +void URLRequestCustomJob::Start() +{ + content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, base::Bind(&URLRequestCustomJob::startAsync, m_weakFactory.GetWeakPtr())); +} + +void URLRequestCustomJob::Kill() +{ + if (m_device->isOpen()) + m_device->close(); + m_weakFactory.InvalidateWeakPtrs(); + + URLRequestJob::Kill(); +} + +bool URLRequestCustomJob::GetMimeType(std::string *mimeType) const +{ + if (m_mimeType.size() > 0) { + *mimeType = m_mimeType; + return true; + } + return false; +} + +bool URLRequestCustomJob::GetCharset(std::string* charset) +{ + if (m_charset.size() > 0) { + *charset = m_charset; + return true; + } + return false; +} + +void URLRequestCustomJob::setReplyMimeType(const std::string &mimeType) +{ + m_mimeType = mimeType; +} + +void URLRequestCustomJob::setReplyCharset(const std::string &charset) +{ + m_charset = charset; +} + +void URLRequestCustomJob::setReplyDevice(QIODevice *device) +{ + m_device = device; + if (m_device && !m_device->isReadable()) + m_device->open(QIODevice::ReadOnly); + content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, base::Bind(&URLRequestCustomJob::notifyStarted, m_weakFactory.GetWeakPtr())); +} + +bool URLRequestCustomJob::ReadRawData(IOBuffer *buf, int bufSize, int *bytesRead) +{ + Q_ASSERT(bytesRead); + qint64 rv = m_device ? m_device->read(buf->data(), bufSize) : -1; + if (rv >= 0) { + *bytesRead = static_cast<int>(rv); + return true; + } else { + NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, ERR_FAILED)); + } + return false; +} + +void URLRequestCustomJob::notifyStarted() +{ + if (m_device && m_device->isReadable()) + NotifyHeadersComplete(); + else + NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, ERR_INVALID_URL)); +} + +void URLRequestCustomJob::startAsync() +{ + m_delegate.reset(new URLRequestCustomJobDelegate(this)); + m_schemeHandler->handleJob(m_delegate.get()); +} diff --git a/src/core/url_request_custom_job.h b/src/core/url_request_custom_job.h new file mode 100644 index 000000000..c47358e71 --- /dev/null +++ b/src/core/url_request_custom_job.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef URL_REQUEST_CUSTOM_JOB_H_ +#define URL_REQUEST_CUSTOM_JOB_H_ + +#include "net/url_request/url_request.h" +#include "net/url_request/url_request_job.h" + +#include <QtCore/qglobal.h> + +QT_FORWARD_DECLARE_CLASS(QIODevice) + +class CustomUrlSchemeHandler; +class URLRequestCustomJobDelegate; + +// A request job that handles reading custom URL schemes +class URLRequestCustomJob : public net::URLRequestJob { +public: + URLRequestCustomJob(net::URLRequest *request, net::NetworkDelegate *networkDelegate, CustomUrlSchemeHandler *schemeHandler); + virtual void Start() Q_DECL_OVERRIDE; + virtual void Kill() Q_DECL_OVERRIDE; + virtual bool ReadRawData(net::IOBuffer *buf, int bufSize, int *bytesRead) Q_DECL_OVERRIDE; + virtual bool GetMimeType(std::string *mimeType) const Q_DECL_OVERRIDE; + virtual bool GetCharset(std::string *charset) Q_DECL_OVERRIDE; + + void setReplyMimeType(const std::string &); + void setReplyCharset(const std::string &); + void setReplyDevice(QIODevice *); + +protected: + virtual ~URLRequestCustomJob(); + void startAsync(); + void notifyStarted(); + +private: + QIODevice *m_device; + scoped_ptr<URLRequestCustomJobDelegate> m_delegate; + CustomUrlSchemeHandler *m_schemeHandler; + std::string m_mimeType; + std::string m_charset; + base::WeakPtrFactory<URLRequestCustomJob> m_weakFactory; + + DISALLOW_COPY_AND_ASSIGN(URLRequestCustomJob); +}; + +#endif // URL_REQUEST_CUSTOM_JOB_H_ diff --git a/src/core/url_request_custom_job_delegate.cpp b/src/core/url_request_custom_job_delegate.cpp new file mode 100644 index 000000000..fcb2220bc --- /dev/null +++ b/src/core/url_request_custom_job_delegate.cpp @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "url_request_custom_job.h" +#include "url_request_custom_job_delegate.h" + +#include "type_conversion.h" + +#include <QByteArray> + +URLRequestCustomJobDelegate::URLRequestCustomJobDelegate(URLRequestCustomJob *job) + : m_job(job) +{ +} + +URLRequestCustomJobDelegate::~URLRequestCustomJobDelegate() +{ +} + +QUrl URLRequestCustomJobDelegate::url() const +{ + return toQt(m_job->request()->url()); +} + +void URLRequestCustomJobDelegate::setReply(const QByteArray &contentType, QIODevice *device) +{ + m_job->setReplyMimeType(contentType.toStdString()); + m_job->setReplyDevice(device); +} + diff --git a/src/core/url_request_custom_job_delegate.h b/src/core/url_request_custom_job_delegate.h new file mode 100644 index 000000000..e82debdf2 --- /dev/null +++ b/src/core/url_request_custom_job_delegate.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef URL_REQUEST_CUSTOM_JOB_DELEGATE_H_ +#define URL_REQUEST_CUSTOM_JOB_DELEGATE_H_ + +#include "qtwebenginecoreglobal.h" + +#include <QObject> +#include <QUrl> + +QT_FORWARD_DECLARE_CLASS(QIODevice) + +class URLRequestCustomJob; + +class QWEBENGINE_EXPORT URLRequestCustomJobDelegate : public QObject { + Q_OBJECT +public: + ~URLRequestCustomJobDelegate(); + + QUrl url() const; + + void setReply(const QByteArray &contentType, QIODevice *device); + +private: + URLRequestCustomJobDelegate(URLRequestCustomJob *job); + + friend class URLRequestCustomJob; + URLRequestCustomJob *m_job; +}; + +#endif // URL_REQUEST_CUSTOM_JOB_DELEGATE_H_ 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 diff --git a/src/webenginewidgets/api/qwebengineprofile.h b/src/webenginewidgets/api/qwebengineprofile.h index ac875c050..a2523edad 100644 --- a/src/webenginewidgets/api/qwebengineprofile.h +++ b/src/webenginewidgets/api/qwebengineprofile.h @@ -104,10 +104,11 @@ Q_SIGNALS: void downloadRequested(QWebEngineDownloadItem *download); private: - Q_DECLARE_PRIVATE(QWebEngineProfile); + Q_DECLARE_PRIVATE(QWebEngineProfile) QWebEngineProfile(QWebEngineProfilePrivate *); friend class QWebEnginePagePrivate; + friend class QWebEngineUrlSchemeHandler; QScopedPointer<QWebEngineProfilePrivate> d_ptr; }; diff --git a/src/webenginewidgets/api/qwebengineprofile_p.h b/src/webenginewidgets/api/qwebengineprofile_p.h index b56e1b3b2..1fc2297c7 100644 --- a/src/webenginewidgets/api/qwebengineprofile_p.h +++ b/src/webenginewidgets/api/qwebengineprofile_p.h @@ -39,6 +39,7 @@ #include "browser_context_adapter_client.h" #include "qwebengineprofile.h" +#include "qwebengineurlschemehandler_p.h" #include <QMap> #include <QPointer> @@ -63,12 +64,18 @@ public: void downloadRequested(DownloadItemInfo &info) Q_DECL_OVERRIDE; void downloadUpdated(const DownloadItemInfo &info) Q_DECL_OVERRIDE; + QWebEngineUrlSchemeHandler *urlSchemeHandler(const QByteArray &); + void installUrlSchemeHandler(QWebEngineUrlSchemeHandler *); + void removeUrlSchemeHandler(QWebEngineUrlSchemeHandler *); + void clearUrlSchemeHandlers(); + private: QWebEngineProfile *q_ptr; QWebEngineSettings *m_settings; BrowserContextAdapter *m_browserContext; QExplicitlySharedDataPointer<BrowserContextAdapter> m_browserContextRef; QMap<quint32, QPointer<QWebEngineDownloadItem> > m_ongoingDownloads; + QMap<QByteArray, QPointer<QWebEngineUrlSchemeHandler> > m_urlSchemeHandlers; }; QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineurlrequestjob.cpp b/src/webenginewidgets/api/qwebengineurlrequestjob.cpp new file mode 100644 index 000000000..e937a5bba --- /dev/null +++ b/src/webenginewidgets/api/qwebengineurlrequestjob.cpp @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwebengineurlrequestjob_p.h" + +#include "qwebengineprofile.h" + +#include "url_request_custom_job_delegate.h" + +QT_BEGIN_NAMESPACE + +QWebEngineUrlRequestJob::QWebEngineUrlRequestJob(URLRequestCustomJobDelegate * p) + : QObject(p) // owned by the jobdelegate and deleted when the job is done + , d_ptr(p) +{ +} + +QWebEngineUrlRequestJob::~QWebEngineUrlRequestJob() +{ +} + +QUrl QWebEngineUrlRequestJob::requestUrl() const +{ + return d_ptr->url(); +} + +void QWebEngineUrlRequestJob::setReply(const QByteArray &contentType, QIODevice *device) +{ + d_ptr->setReply(contentType, device); +} + + + +QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineurlrequestjob_p.h b/src/webenginewidgets/api/qwebengineurlrequestjob_p.h new file mode 100644 index 000000000..3aea80d2f --- /dev/null +++ b/src/webenginewidgets/api/qwebengineurlrequestjob_p.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWEBENGINEURLREQUESTJOB_H +#define QWEBENGINEURLREQUESTJOB_H + +#include "qtwebenginewidgetsglobal.h" + +#include <QtCore/QByteArray> +#include <QtCore/QObject> +#include <QtCore/QUrl> + +class URLRequestCustomJobDelegate; + +QT_BEGIN_NAMESPACE + +class QIODevice; + +class QWEBENGINEWIDGETS_EXPORT QWebEngineUrlRequestJob : public QObject { + Q_OBJECT +public: + ~QWebEngineUrlRequestJob(); + + QUrl requestUrl() const; + void setReply(const QByteArray &contentType, QIODevice *device); + +private: + QWebEngineUrlRequestJob(URLRequestCustomJobDelegate *); + friend class QWebEngineUrlSchemeHandlerPrivate; + + URLRequestCustomJobDelegate* d_ptr; +}; + +QT_END_NAMESPACE + +#endif // QWEBENGINEURLREQUESTJOB_H diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler.cpp b/src/webenginewidgets/api/qwebengineurlschemehandler.cpp new file mode 100644 index 000000000..b52912b7c --- /dev/null +++ b/src/webenginewidgets/api/qwebengineurlschemehandler.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwebengineurlschemehandler_p.h" +#include "qwebengineurlschemehandler_p_p.h" + +#include "qwebengineprofile.h" +#include "qwebengineprofile_p.h" +#include "qwebengineurlrequestjob_p.h" + +#include <QSharedPointer> + +QT_BEGIN_NAMESPACE + +QWebEngineUrlSchemeHandlerPrivate::QWebEngineUrlSchemeHandlerPrivate(const QByteArray &scheme, QWebEngineUrlSchemeHandler *q, QWebEngineProfile *profile) + : CustomUrlSchemeHandler(scheme) + , q_ptr(q) + , m_profile(profile) +{ +} + +QWebEngineUrlSchemeHandlerPrivate::~QWebEngineUrlSchemeHandlerPrivate() +{ +} + +bool QWebEngineUrlSchemeHandlerPrivate::handleJob(URLRequestCustomJobDelegate *job) +{ + QWebEngineUrlRequestJob *requestJob = new QWebEngineUrlRequestJob(job); + q_ptr->requestStarted(requestJob); + return true; +} + +QWebEngineUrlSchemeHandler::QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile) + : QObject(profile) + , d_ptr(new QWebEngineUrlSchemeHandlerPrivate(scheme, this, profile)) +{ + profile->d_func()->installUrlSchemeHandler(this); +} + +QWebEngineUrlSchemeHandler::~QWebEngineUrlSchemeHandler() +{ + d_ptr->m_profile->d_func()->removeUrlSchemeHandler(this); +} + +QByteArray QWebEngineUrlSchemeHandler::scheme() const +{ + return d_ptr->scheme(); +} + +QT_END_NAMESPACE diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler_p.h b/src/webenginewidgets/api/qwebengineurlschemehandler_p.h new file mode 100644 index 000000000..0455128c7 --- /dev/null +++ b/src/webenginewidgets/api/qwebengineurlschemehandler_p.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWEBENGINEURLSCHEMEHANDLER_H +#define QWEBENGINEURLSCHEMEHANDLER_H + +#include "qtwebenginewidgetsglobal.h" + +#include <QtCore/QByteArray> +#include <QtCore/QIODevice> +#include <QtCore/QObject> +#include <QtCore/QScopedPointer> +#include <QtCore/QUrl> + +QT_BEGIN_NAMESPACE + +class QWebEngineProfile; +class QWebEngineUrlRequestJob; +class QWebEngineUrlSchemeHandlerPrivate; + +class QWEBENGINEWIDGETS_EXPORT QWebEngineUrlSchemeHandler : public QObject { + Q_OBJECT +public: + QWebEngineUrlSchemeHandler(const QByteArray &scheme, QWebEngineProfile *profile); + virtual ~QWebEngineUrlSchemeHandler(); + + QByteArray scheme() const; + + virtual void requestStarted(QWebEngineUrlRequestJob*) = 0; + +private: + Q_DECLARE_PRIVATE(QWebEngineUrlSchemeHandler) + friend class QWebEngineProfilePrivate; + QScopedPointer<QWebEngineUrlSchemeHandlerPrivate> d_ptr; +}; + +QT_END_NAMESPACE + +#endif // QWEBENGINEURLSCHEMEHANDLER_H diff --git a/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h b/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h new file mode 100644 index 000000000..e880bf000 --- /dev/null +++ b/src/webenginewidgets/api/qwebengineurlschemehandler_p_p.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/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.LGPLv3 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.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 later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWEBENGINEURLSCHEMEHANDLER_P_H +#define QWEBENGINEURLSCHEMEHANDLER_P_H + +#include "qwebengineurlschemehandler_p.h" + +#include "custom_url_scheme_handler.h" + +QT_BEGIN_NAMESPACE + +class QWebEngineProfile; +class QWebEngineUrlRequestJob; +class QWebEngineUrlSchemeHandler; + +class QWebEngineUrlSchemeHandlerPrivate : public CustomUrlSchemeHandler { +public: + Q_DECLARE_PUBLIC(QWebEngineUrlSchemeHandler) + + QWebEngineUrlSchemeHandlerPrivate(const QByteArray &, QWebEngineUrlSchemeHandler *, QWebEngineProfile *); + virtual ~QWebEngineUrlSchemeHandlerPrivate(); + + virtual bool handleJob(URLRequestCustomJobDelegate*) Q_DECL_OVERRIDE; + +private: + QWebEngineUrlSchemeHandler *q_ptr; + QWebEngineProfile* m_profile; +}; + +QT_END_NAMESPACE + +#endif // QWEBENGINEURLSCHEMEHANDLER_P_H diff --git a/src/webenginewidgets/webenginewidgets.pro b/src/webenginewidgets/webenginewidgets.pro index 82908bfd0..7fa630702 100644 --- a/src/webenginewidgets/webenginewidgets.pro +++ b/src/webenginewidgets/webenginewidgets.pro @@ -18,6 +18,8 @@ SOURCES = \ api/qwebenginepage.cpp \ api/qwebengineprofile.cpp \ api/qwebenginesettings.cpp \ + api/qwebengineurlrequestjob.cpp \ + api/qwebengineurlschemehandler.cpp \ api/qwebengineview.cpp \ render_widget_host_view_qt_delegate_widget.cpp @@ -32,6 +34,9 @@ HEADERS = \ api/qwebengineprofile.h \ api/qwebengineprofile_p.h \ api/qwebenginesettings.h \ + api/qwebengineurlrequestjob_p.h \ + api/qwebengineurlschemehandler_p.h \ + api/qwebengineurlschemehandler_p_p.h \ api/qwebengineview.h \ api/qwebengineview_p.h \ render_widget_host_view_qt_delegate_widget.h -- GitLab