From 6555874455eb23722974b06b388c3cbde0a24f95 Mon Sep 17 00:00:00 2001 From: Pierre Rossi <pierre.rossi@digia.com> Date: Mon, 10 Jun 2013 19:33:44 +0200 Subject: [PATCH] And shell is out ! Introduce a few more bits of our own very basic implementations (URLRequestContextGetter and NetworkDelegate subclasses). Still need to figure out the appropriate dependancies in blinq.gypi --- build/qmake/mkspecs/features/default_pre.prf | 2 - example/example.pro | 1 + lib/browser_context_qt.h | 19 ++- lib/content_browser_client_qt.cpp | 29 ++-- lib/content_browser_client_qt.h | 8 +- lib/lib.pro | 5 + lib/network_delegate_qt.cpp | 42 +++++ lib/network_delegate_qt.h | 117 ++++++++++++++ lib/qquickwebcontentsview.cpp | 4 +- lib/qwebcontentsview.cpp | 4 +- lib/resource_context_qt.cpp | 6 +- lib/resource_context_qt.h | 8 +- lib/url_request_context_getter_qt.cpp | 156 +++++++++++++++++++ lib/url_request_context_getter_qt.h | 78 ++++++++++ 14 files changed, 435 insertions(+), 44 deletions(-) create mode 100644 lib/network_delegate_qt.cpp create mode 100644 lib/network_delegate_qt.h create mode 100644 lib/url_request_context_getter_qt.cpp create mode 100644 lib/url_request_context_getter_qt.h diff --git a/build/qmake/mkspecs/features/default_pre.prf b/build/qmake/mkspecs/features/default_pre.prf index 027d35af9..07ec22750 100644 --- a/build/qmake/mkspecs/features/default_pre.prf +++ b/build/qmake/mkspecs/features/default_pre.prf @@ -8,5 +8,3 @@ CHROMIUM_SRC_DIR = $$(CHROMIUM_SRC_DIR) isEmpty(CHROMIUM_SRC_DIR):error("please set CHROMIUM_SRC_DIR") load(functions) -# So that moc generated files don't end up polluting the source tree -OUT_PWD = $$getOutDir() diff --git a/example/example.pro b/example/example.pro index 33a2f6182..7b98e1bf2 100644 --- a/example/example.pro +++ b/example/example.pro @@ -12,3 +12,4 @@ LIBS += -L$$LIBPATH -lblinq QMAKE_RPATHDIR += $$LIBPATH QT += widgets quick +MOC_DIR=$$PWD diff --git a/lib/browser_context_qt.h b/lib/browser_context_qt.h index 79eb13f1d..5bcbd6887 100644 --- a/lib/browser_context_qt.h +++ b/lib/browser_context_qt.h @@ -1,19 +1,25 @@ +#ifndef BROWSER_CONTEXT_QT +#define BROWSER_CONTEXT_QT + #include "content/public/browser/browser_context.h" #include "base/files/scoped_temp_dir.h" + #include "base/time.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/resource_context.h" #include "content/public/browser/storage_partition.h" -#include "net/url_request/url_request_context_getter.h" +#include "net/url_request/url_request_context.h" +#include "net/proxy/proxy_config_service.h" -#include "content/shell/shell_url_request_context_getter.h" +#include <qglobal.h> +#include <QByteArray> #include "resource_context_qt.h" +#include "url_request_context_getter_qt.h" + -#ifndef BROWSER_CONTEXT_QT -#define BROWSER_CONTEXT_QT class BrowserContextQt : public content::BrowserContext { @@ -56,8 +62,7 @@ public: net::URLRequestContextGetter *CreateRequestContext(content::ProtocolHandlerMap* protocol_handlers) { - url_request_getter_ = new content::ShellURLRequestContextGetter(/*ignore_certificate_errors = */ false, GetPath(), content::BrowserThread::UnsafeGetMessageLoopForThread(content::BrowserThread::IO) - , content::BrowserThread::UnsafeGetMessageLoopForThread(content::BrowserThread::FILE), protocol_handlers); + url_request_getter_ = new URLRequestContextGetterQt(GetPath()); static_cast<ResourceContextQt*>(resourceContext.get())->set_url_request_context_getter(url_request_getter_.get()); return url_request_getter_.get(); } @@ -65,7 +70,7 @@ public: private: scoped_ptr<content::ResourceContext> resourceContext; base::ScopedTempDir tempBasePath; // ### Should become permanent location. - scoped_refptr<content::ShellURLRequestContextGetter> url_request_getter_; + scoped_refptr<net::URLRequestContextGetter> url_request_getter_; DISALLOW_COPY_AND_ASSIGN(BrowserContextQt); }; diff --git a/lib/content_browser_client_qt.cpp b/lib/content_browser_client_qt.cpp index da8f08116..3c02d4359 100644 --- a/lib/content_browser_client_qt.cpp +++ b/lib/content_browser_client_qt.cpp @@ -1,17 +1,13 @@ #include "content_browser_client_qt.h" +#include "content/public/browser/browser_main_parts.h" #include "content/public/browser/notification_source.h" #include "content/public/browser/notification_types.h" -#include "content/public/common/main_function_params.h" #include "content/public/browser/render_process_host.h" - -// To be cleaned up -#include "content/shell/shell.h" -#include "content/shell/shell_browser_main_parts.h" -#include "content/shell/shell_browser_context.h" -#include "content/public/browser/browser_main_parts.h" +#include "content/public/common/main_function_params.h" #include "net/base/net_module.h" #include "net/base/net_util.h" + #include "browser_context_qt.h" #include "web_contents_view_qt.h" @@ -44,8 +40,8 @@ public: void PreEarlyInitialization() { } void PreMainMessageLoopRun() { - m_browserContext.reset(new content::ShellBrowserContext(false)); - m_offTheRecordBrowserContext.reset(new content::ShellBrowserContext(true)); + + m_browserContext.reset(new BrowserContextQt()); if (m_parameters.ui_task) { m_parameters.ui_task->Run(); @@ -60,16 +56,14 @@ public: void PostMainMessageLoopRun() { m_browserContext.reset(); - m_offTheRecordBrowserContext.reset(); } - content::ShellBrowserContext* browser_context() const { + BrowserContextQt* browser_context() const { return m_browserContext.get(); } private: - scoped_ptr<content::ShellBrowserContext> m_browserContext; - scoped_ptr<content::ShellBrowserContext> m_offTheRecordBrowserContext; + scoped_ptr<BrowserContextQt> m_browserContext; // For running content_browsertests. const content::MainFunctionParams& m_parameters; @@ -90,20 +84,17 @@ content::WebContentsViewPort* ContentBrowserClientQt::OverrideCreateWebContentsV content::BrowserMainParts *ContentBrowserClientQt::CreateBrowserMainParts(const content::MainFunctionParams ¶meters) { m_browserMainParts = new BrowserMainPartsQt(parameters); - // FIXME: We don't seem to need it yet, the ShellBrowserContext was being used. - // m_browser_context = new BrowserContextQt(); return m_browserMainParts; } -content::ShellBrowserContext* ContentBrowserClientQt::browser_context() { - return m_browserMainParts->browser_context(); - // return m_browser_context; +BrowserContextQt* ContentBrowserClientQt::browser_context() { + return static_cast<BrowserMainPartsQt*>(m_browserMainParts)->browser_context(); } net::URLRequestContextGetter* ContentBrowserClientQt::CreateRequestContext(content::BrowserContext* content_browser_context, content::ProtocolHandlerMap* protocol_handlers) { if (content_browser_context != browser_context()) fprintf(stderr, "Warning: off the record browser context not implemented !\n"); - return browser_context()->CreateRequestContext(protocol_handlers); + return static_cast<BrowserContextQt*>(browser_context())->CreateRequestContext(protocol_handlers); } diff --git a/lib/content_browser_client_qt.h b/lib/content_browser_client_qt.h index 4783fa598..0cf8199e4 100644 --- a/lib/content_browser_client_qt.h +++ b/lib/content_browser_client_qt.h @@ -8,11 +8,10 @@ class URLRequestContextGetter; } namespace content { +class BrowserContext; class BrowserMainParts; class RenderProcessHost; class RenderViewHostDelegateView; -class ShellBrowserContext; -class ShellBrowserMainParts; class WebContentsViewPort; class WebContents; struct MainFunctionParams; @@ -27,13 +26,14 @@ public: virtual content::WebContentsViewPort* OverrideCreateWebContentsView(content::WebContents* , content::RenderViewHostDelegateView**) /*Q_DECL_OVERRIDE*/; virtual content::BrowserMainParts* CreateBrowserMainParts(const content::MainFunctionParams& parameters) /*Q_DECL_OVERRIDE*/; - content::ShellBrowserContext *browser_context(); + + BrowserContextQt* browser_context(); net::URLRequestContextGetter *CreateRequestContext(content::BrowserContext *content_browser_context, content::ProtocolHandlerMap *protocol_handlers); private: - BrowserContextQt* m_browser_context; BrowserMainPartsQt* m_browserMainParts; + }; #endif // CONTENT_BROWSER_CLIENT_QT diff --git a/lib/lib.pro b/lib/lib.pro index 71fd95419..d8c47ef88 100644 --- a/lib/lib.pro +++ b/lib/lib.pro @@ -25,7 +25,9 @@ SOURCES = \ qquickwebcontentsview.cpp \ qwebcontentsview.cpp \ resource_context_qt.cpp \ + url_request_context_getter_qt.cpp \ web_contents_delegate_qt.cpp + web_event_factory.cpp HEADERS = \ blinqapplication.h \ @@ -34,4 +36,7 @@ HEADERS = \ qquickwebcontentsview.h \ qwebcontentsview.h \ resource_context_qt.h \ + url_request_context_getter_qt.h \ web_contents_delegate_qt.h + web_event_factory.h + diff --git a/lib/network_delegate_qt.cpp b/lib/network_delegate_qt.cpp new file mode 100644 index 000000000..27807c499 --- /dev/null +++ b/lib/network_delegate_qt.cpp @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "network_delegate_qt.h" diff --git a/lib/network_delegate_qt.h b/lib/network_delegate_qt.h new file mode 100644 index 000000000..f31b98212 --- /dev/null +++ b/lib/network_delegate_qt.h @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef NETWORK_DELEGATE_QT_H +#define NETWORK_DELEGATE_QT_H + +#include "net/base/network_delegate.h" + +class NetworkDelegateQt : public net::NetworkDelegate { + public: + NetworkDelegateQt() {} + virtual ~NetworkDelegateQt() {} + + + private: + // net::NetworkDelegate implementation. + virtual int OnBeforeURLRequest(net::URLRequest* request, const net::CompletionCallback& callback, GURL* new_url) /*Q_DECL_OVERRIDE*/ + { + return net::OK; + } + virtual int OnBeforeSendHeaders(net::URLRequest* request, + const net::CompletionCallback& callback, + net::HttpRequestHeaders* headers) /*Q_DECL_OVERRIDE*/ { + return net::OK; + } + virtual void OnSendHeaders(net::URLRequest* request, + const net::HttpRequestHeaders& headers) /*Q_DECL_OVERRIDE*/ {} + virtual int OnHeadersReceived( + net::URLRequest* request, + const net::CompletionCallback& callback, + const net::HttpResponseHeaders* original_response_headers, + scoped_refptr<net::HttpResponseHeaders>* override_response_headers) /*Q_DECL_OVERRIDE*/ { + return net::OK; + } + virtual void OnBeforeRedirect(net::URLRequest* request, + const GURL& new_location) /*Q_DECL_OVERRIDE*/ {} + virtual void OnResponseStarted(net::URLRequest* request) /*Q_DECL_OVERRIDE*/ {} + virtual void OnRawBytesRead(const net::URLRequest& request, + int bytes_read) /*Q_DECL_OVERRIDE*/ {} + virtual void OnCompleted(net::URLRequest* request, bool started) /*Q_DECL_OVERRIDE*/ {} + virtual void OnURLRequestDestroyed(net::URLRequest* request) /*Q_DECL_OVERRIDE*/ {} + + virtual void OnPACScriptError(int line_number, + const base::string16& error) /*Q_DECL_OVERRIDE*/ { + } + virtual AuthRequiredResponse OnAuthRequired( + net::URLRequest* request, + const net::AuthChallengeInfo& auth_info, + const AuthCallback& callback, + net::AuthCredentials* credentials) /*Q_DECL_OVERRIDE*/ { + return AUTH_REQUIRED_RESPONSE_NO_ACTION; + } + virtual bool OnCanGetCookies(const net::URLRequest& request, + const net::CookieList& cookie_list) /*Q_DECL_OVERRIDE*/ { + return true; + } + virtual bool OnCanSetCookie(const net::URLRequest& request, + const std::string& cookie_line, + net::CookieOptions* options) /*Q_DECL_OVERRIDE*/ { + return true; + } + virtual bool OnCanAccessFile(const net::URLRequest& request, + const base::FilePath& path) const /*Q_DECL_OVERRIDE*/ { + return true; + } + virtual bool OnCanThrottleRequest(const net::URLRequest& request) const /*Q_DECL_OVERRIDE*/ { + return false; + } + virtual int OnBeforeSocketStreamConnect( + net::SocketStream* stream, + const net::CompletionCallback& callback) /*Q_DECL_OVERRIDE*/ { + return net::OK; + } + virtual void OnRequestWaitStateChange(const net::URLRequest& request, + RequestWaitState state) /*Q_DECL_OVERRIDE*/ { + } + +}; + +#endif // NETWORK_DELEGATE_QT_H diff --git a/lib/qquickwebcontentsview.cpp b/lib/qquickwebcontentsview.cpp index 3e20e90f7..1d7357cd0 100644 --- a/lib/qquickwebcontentsview.cpp +++ b/lib/qquickwebcontentsview.cpp @@ -46,9 +46,9 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_view.h" -#include "content/shell/shell.h" -#include "content/shell/shell_browser_context.h" +#include "ipc/ipc_message.h" +#include "browser_context_qt.h" #include "content_browser_client_qt.h" #include "web_contents_delegate_qt.h" diff --git a/lib/qwebcontentsview.cpp b/lib/qwebcontentsview.cpp index 2ce75f3a6..64bdb9c36 100644 --- a/lib/qwebcontentsview.cpp +++ b/lib/qwebcontentsview.cpp @@ -46,9 +46,9 @@ #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_view.h" -#include "content/shell/shell.h" -#include "content/shell/shell_browser_context.h" +#include "ipc/ipc_message.h" +#include "browser_context_qt.h" #include "content_browser_client_qt.h" #include "web_contents_delegate_qt.h" diff --git a/lib/resource_context_qt.cpp b/lib/resource_context_qt.cpp index ca680e6c1..52892feab 100644 --- a/lib/resource_context_qt.cpp +++ b/lib/resource_context_qt.cpp @@ -2,14 +2,12 @@ #include "net/url_request/url_request_context_getter.h" -#include "content/shell/shell_url_request_context_getter.h" - #include "browser_context_qt.h" net::HostResolver *ResourceContextQt::GetHostResolver() { CHECK(getter_); - return getter_->host_resolver(); + return getter_->GetURLRequestContext()->host_resolver(); } net::URLRequestContext* ResourceContextQt::GetRequestContext() @@ -19,7 +17,7 @@ net::URLRequestContext* ResourceContextQt::GetRequestContext() return context->GetRequestContext()->GetURLRequestContext(); } -void ResourceContextQt::set_url_request_context_getter(content::ShellURLRequestContextGetter *getter) +void ResourceContextQt::set_url_request_context_getter(net::URLRequestContextGetter *getter) { getter_ = getter; } diff --git a/lib/resource_context_qt.h b/lib/resource_context_qt.h index c4c3faca4..c42c00cd4 100644 --- a/lib/resource_context_qt.h +++ b/lib/resource_context_qt.h @@ -3,8 +3,8 @@ #ifndef RESOURCE_CONTEXT_QT #define RESOURCE_CONTEXT_QT -namespace content { -class ShellURLRequestContextGetter; +namespace net { +class URLRequestContextGetter; } class BrowserContextQt; @@ -21,11 +21,11 @@ public: virtual net::URLRequestContext* GetRequestContext(); - void set_url_request_context_getter(content::ShellURLRequestContextGetter* getter); + void set_url_request_context_getter(net::URLRequestContextGetter* getter); private: BrowserContextQt *context; - content::ShellURLRequestContextGetter* getter_; + net::URLRequestContextGetter* getter_; DISALLOW_COPY_AND_ASSIGN(ResourceContextQt); }; diff --git a/lib/url_request_context_getter_qt.cpp b/lib/url_request_context_getter_qt.cpp new file mode 100644 index 000000000..1b523697d --- /dev/null +++ b/lib/url_request_context_getter_qt.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "url_request_context_getter_qt.h" + +#include "base/string_util.h" +#include "base/threading/worker_pool.h" +#include "content/public/browser/browser_thread.h" +#include "net/base/cache_type.h" +#include "net/cert/cert_verifier.h" +#include "net/cookies/cookie_monster.h" +#include "net/dns/host_resolver.h" +#include "net/dns/mapped_host_resolver.h" +#include "net/http/http_auth_handler_factory.h" +#include "net/http/http_cache.h" +#include "net/http/http_network_session.h" +#include "net/http/http_server_properties_impl.h" +#include "net/proxy/proxy_service.h" +#include "net/ssl/default_server_bound_cert_store.h" +#include "net/ssl/server_bound_cert_service.h" +#include "net/ssl/ssl_config_service_defaults.h" +#include "net/url_request/static_http_user_agent_settings.h" +#include "net/url_request/url_request_context.h" + +#include "network_delegate_qt.h" + +using content::BrowserThread; + +URLRequestContextGetterQt::URLRequestContextGetterQt(const base::FilePath &basePath) + : m_ignoreCertificateErrors(false) + , m_basePath(basePath) +{ + + // We must create the proxy config service on the UI loop on Linux because it + // must synchronously run on the glib message loop. This will be passed to + // the URLRequestContextStorage on the IO thread in GetURLRequestContext(). +//#ifdef Q_OS_LINUX + m_proxyConfigService.reset(net::ProxyService::CreateSystemProxyConfigService(BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO)->message_loop_proxy() + , BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE))); +//#endif +} + +net::URLRequestContext *URLRequestContextGetterQt::GetURLRequestContext() +{ + if (!m_urlRequestContext) { + + m_urlRequestContext.reset(new net::URLRequestContext()); + m_networkDelegate.reset(new NetworkDelegateQt); + + m_urlRequestContext->set_network_delegate(m_networkDelegate.get()); + m_storage.reset(new net::URLRequestContextStorage(m_urlRequestContext.get())); + m_storage->set_cookie_store(new net::CookieMonster(NULL, NULL)); + m_storage->set_server_bound_cert_service(new net::ServerBoundCertService( + new net::DefaultServerBoundCertStore(NULL), + base::WorkerPool::GetTaskRunner(true))); + m_storage->set_http_user_agent_settings( + new net::StaticHttpUserAgentSettings("en-us,en", EmptyString())); + + scoped_ptr<net::HostResolver> host_resolver( + net::HostResolver::CreateDefaultResolver(NULL)); + + m_storage->set_cert_verifier(net::CertVerifier::CreateDefault()); + + m_storage->set_proxy_service(net::ProxyService::CreateUsingSystemProxyResolver(m_proxyConfigService.release(), 0, NULL)); + + m_storage->set_ssl_config_service(new net::SSLConfigServiceDefaults); + m_storage->set_http_auth_handler_factory( + net::HttpAuthHandlerFactory::CreateDefault(host_resolver.get())); + m_storage->set_http_server_properties(new net::HttpServerPropertiesImpl); + + base::FilePath cache_path = m_basePath.Append(FILE_PATH_LITERAL("Cache")); + net::HttpCache::DefaultBackend* main_backend = + new net::HttpCache::DefaultBackend( + net::DISK_CACHE, + net::CACHE_BACKEND_DEFAULT, + cache_path, + 0, + BrowserThread::GetMessageLoopProxyForThread( + BrowserThread::CACHE)); + + net::HttpNetworkSession::Params network_session_params; + network_session_params.cert_verifier = + m_urlRequestContext->cert_verifier(); + network_session_params.server_bound_cert_service = + m_urlRequestContext->server_bound_cert_service(); + network_session_params.proxy_service = + m_urlRequestContext->proxy_service(); + network_session_params.ssl_config_service = + m_urlRequestContext->ssl_config_service(); + network_session_params.http_auth_handler_factory = + m_urlRequestContext->http_auth_handler_factory(); + network_session_params.network_delegate = + m_networkDelegate.get(); + network_session_params.http_server_properties = + m_urlRequestContext->http_server_properties(); + network_session_params.ignore_certificate_errors = + m_ignoreCertificateErrors; + + // Give |m_storage| ownership at the end in case it's |mapped_host_resolver|. + m_storage->set_host_resolver(host_resolver.Pass()); + network_session_params.host_resolver = + m_urlRequestContext->host_resolver(); + + net::HttpCache* main_cache = new net::HttpCache( + network_session_params, main_backend); + m_storage->set_http_transaction_factory(main_cache); + + // FIXME: add protocol handling + } + + return m_urlRequestContext.get(); +} + + +scoped_refptr<base::SingleThreadTaskRunner> URLRequestContextGetterQt::GetNetworkTaskRunner() const +{ + return content::BrowserThread::GetMessageLoopProxyForThread(content::BrowserThread::IO); +} diff --git a/lib/url_request_context_getter_qt.h b/lib/url_request_context_getter_qt.h new file mode 100644 index 000000000..bd9bae723 --- /dev/null +++ b/lib/url_request_context_getter_qt.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 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 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef URL_REQUEST_CONTEXT_GETTER_QT_H +#define URL_REQUEST_CONTEXT_GETTER_QT_H + +#include "net/url_request/url_request_context_getter.h" + +#include "base/files/file_path.h" +#include "base/memory/scoped_ptr.h" +#include "base/single_thread_task_runner.h" +#include "net/url_request/url_request_context_storage.h" + +namespace net { +class HostResolver; +class MappedHostResolver; +class NetworkDelegate; +class ProxyConfigService; +} + +class URLRequestContextGetterQt : public net::URLRequestContextGetter { +public: + explicit URLRequestContextGetterQt(const base::FilePath&); + + virtual net::URLRequestContext* GetURLRequestContext() /*OVERRIDE*/; + + virtual scoped_refptr<base::SingleThreadTaskRunner> GetNetworkTaskRunner() const /*OVERRIDE*/; + +private: + virtual ~URLRequestContextGetterQt() {} + + bool m_ignoreCertificateErrors; + base::FilePath m_basePath; + + scoped_ptr<net::ProxyConfigService> m_proxyConfigService; + scoped_ptr<net::URLRequestContext> m_urlRequestContext; + scoped_ptr<net::NetworkDelegate> m_networkDelegate; + scoped_ptr<net::URLRequestContextStorage> m_storage; +}; + +#endif // URL_REQUEST_CONTEXT_GETTER_QT_H -- GitLab