diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-27 03:20:29 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-27 03:20:29 +0000 |
commit | 03a2e986db5629dd161947d9c2c2541c60f079fd (patch) | |
tree | 373f386f1fc7310cadba3395c198495b3a45025f /android_webview/browser | |
parent | f4416f9e5bb40c71b233b40318c629f90f7c8715 (diff) | |
download | chromium_src-03a2e986db5629dd161947d9c2c2541c60f079fd.zip chromium_src-03a2e986db5629dd161947d9c2c2541c60f079fd.tar.gz chromium_src-03a2e986db5629dd161947d9c2c2541c60f079fd.tar.bz2 |
Improve URLRequestContextBuilder for use in android_webview
Implemented [Enable|Disable]HttpCache methods.
Added OS_ANDROID for set_proxy_config_service guard.
Added set_network_delegate method.
Also fix a double owning issue introduced by me in r164387.
BUG=
Review URL: https://chromiumcodereview.appspot.com/11266049
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@164495 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/browser')
-rw-r--r-- | android_webview/browser/net/aw_url_request_context_getter.cc | 125 |
1 files changed, 16 insertions, 109 deletions
diff --git a/android_webview/browser/net/aw_url_request_context_getter.cc b/android_webview/browser/net/aw_url_request_context_getter.cc index bcc51f4..40d14b3 100644 --- a/android_webview/browser/net/aw_url_request_context_getter.cc +++ b/android_webview/browser/net/aw_url_request_context_getter.cc @@ -14,22 +14,11 @@ #include "content/public/browser/resource_context.h" #include "content/public/common/content_client.h" #include "content/public/common/url_constants.h" -#include "net/base/cert_verifier.h" -#include "net/base/host_resolver.h" -#include "net/base/ssl_config_service_defaults.h" -#include "net/base/transport_security_state.h" -#include "net/base/transport_security_state.h" -#include "net/cookies/cookie_monster.h" -#include "net/ftp/ftp_network_layer.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/url_request/data_protocol_handler.h" #include "net/url_request/file_protocol_handler.h" +#include "net/url_request/url_request_context_builder.h" #include "net/url_request/url_request_context.h" -#include "net/url_request/url_request_context_storage.h" using content::BrowserThread; @@ -67,39 +56,6 @@ net::URLRequestContext* AwResourceContext::GetRequestContext() { return context_; } -// Inspired by BasicURLRequestContext. -// TODO(boliu): Remove this class and use URLRequestContextBuilder when it -// has all the necessary features for Android WebView. -class AwURLRequestContext : public net::URLRequestContext { - public: - AwURLRequestContext(); - virtual ~AwURLRequestContext(); - - virtual const std::string& GetUserAgent(const GURL& url) const OVERRIDE; - - net::URLRequestContextStorage* storage(); - - private: - net::URLRequestContextStorage storage_; - - DISALLOW_COPY_AND_ASSIGN(AwURLRequestContext); -}; - -AwURLRequestContext::AwURLRequestContext() - : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this)) { -} - -AwURLRequestContext::~AwURLRequestContext() { -} - -const std::string& AwURLRequestContext::GetUserAgent(const GURL& url) const { - return content::GetUserAgent(url); -} - -net::URLRequestContextStorage* AwURLRequestContext::storage() { - return &storage_; -} - } // namespace AwURLRequestContextGetter::AwURLRequestContextGetter( @@ -123,7 +79,20 @@ AwURLRequestContextGetter::~AwURLRequestContextGetter() { void AwURLRequestContextGetter::Init() { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); - url_request_context_.reset(new AwURLRequestContext); + net::URLRequestContextBuilder builder; + builder.set_user_agent(content::GetUserAgent(GURL())); + builder.set_network_delegate(new AwNetworkDelegate()); + builder.set_ftp_enabled(false); // Android WebView does not support ftp yet. + builder.set_proxy_config_service(proxy_config_service_.release()); + + net::URLRequestContextBuilder::HttpCacheParams cache_params; + cache_params.type = net::URLRequestContextBuilder::HttpCacheParams::DISK; + cache_params.max_size = 10 * 1024 * 1024; // 10M + cache_params.path = + browser_context_->GetPath().Append(FILE_PATH_LITERAL("Cache")), + builder.EnableHttpCache(cache_params); + + url_request_context_.reset(builder.Build()); url_request_context_->set_accept_language( net::HttpUtil::GenerateAcceptLanguageHeader( @@ -134,68 +103,6 @@ void AwURLRequestContextGetter::Init() { url_request_context_->set_accept_charset( net::HttpUtil::GenerateAcceptCharsetHeader("ISO-8859-1")); - net::URLRequestContextStorage* storage = - static_cast<AwURLRequestContext*>(url_request_context_.get())->storage(); - - storage->set_network_delegate(new AwNetworkDelegate()); - - storage->set_host_resolver(net::HostResolver::CreateDefaultResolver( - content::GetContentClient()->browser()->GetNetLog())); - - // Note we do not call set_ftp_transaction_factory here since we do not - // support ftp yet in Android WebView. - - storage->set_proxy_service( - net::ProxyService::CreateUsingSystemProxyResolver( - proxy_config_service_.release(), - 0, // Use default number of threads. - url_request_context_->net_log())); - - storage->set_ssl_config_service(new net::SSLConfigServiceDefaults); - storage->set_http_auth_handler_factory( - net::HttpAuthHandlerRegistryFactory::CreateDefault( - url_request_context_->host_resolver())); - storage->set_cookie_store(new net::CookieMonster(NULL, NULL)); - storage->set_transport_security_state(new net::TransportSecurityState()); - storage->set_http_server_properties(new net::HttpServerPropertiesImpl); - storage->set_cert_verifier(net::CertVerifier::CreateDefault()); - - net::HttpNetworkSession::Params network_session_params; - network_session_params.host_resolver = - url_request_context_->host_resolver(); - network_session_params.cert_verifier = - url_request_context_->cert_verifier(); - network_session_params.transport_security_state = - url_request_context_->transport_security_state(); - network_session_params.proxy_service = - url_request_context_->proxy_service(); - network_session_params.ssl_config_service = - url_request_context_->ssl_config_service(); - network_session_params.http_auth_handler_factory = - url_request_context_->http_auth_handler_factory(); - network_session_params.network_delegate = - url_request_context_->network_delegate(); - network_session_params.http_server_properties = - url_request_context_->http_server_properties(); - network_session_params.net_log = url_request_context_->net_log(); - network_session_params.server_bound_cert_service = - url_request_context_->server_bound_cert_service(); - network_session_params.ignore_certificate_errors = false; - network_session_params.http_pipelining_enabled = false; - // TODO(boliu): Other settings are set by commandline switches in chrome/ - // and seem to be only used in testing. Check if we need to set them here. - - scoped_ptr<net::HttpCache::BackendFactory> http_cache_backend( - new net::HttpCache::DefaultBackend( - net::DISK_CACHE, - browser_context_->GetPath().Append(FILE_PATH_LITERAL("Cache")), - 10*1024*1024, // Max cache size 10M - BrowserThread::GetMessageLoopProxyForThread( - BrowserThread::CACHE))); - - storage->set_http_transaction_factory(new net::HttpCache( - network_session_params, http_cache_backend.release())); - job_factory_.reset(new AwURLRequestJobFactory); bool set_protocol = job_factory_->SetProtocolHandler( chrome::kFileScheme, new net::FileProtocolHandler()); @@ -205,7 +112,7 @@ void AwURLRequestContextGetter::Init() { DCHECK(set_protocol); RegisterAndroidProtocolsOnIOThread(job_factory_.get()); job_factory_->AddInterceptor(new AwRequestInterceptor()); - storage->set_job_factory(job_factory_.get()); + url_request_context_->set_job_factory(job_factory_.get()); } content::ResourceContext* AwURLRequestContextGetter::GetResourceContext() { |