Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1256)

Side by Side Diff: android_webview/browser/net/aw_url_request_context_getter.cc

Issue 11308362: Add StoragePartition's ProtocolHandlers at URLRequestContext construction time. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync (r179907) Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/net/aw_url_request_context_getter.h" 5 #include "android_webview/browser/net/aw_url_request_context_getter.h"
6 6
7 #include "android_webview/browser/aw_browser_context.h" 7 #include "android_webview/browser/aw_browser_context.h"
8 #include "android_webview/browser/aw_request_interceptor.h" 8 #include "android_webview/browser/aw_request_interceptor.h"
9 #include "android_webview/browser/net/aw_network_delegate.h" 9 #include "android_webview/browser/net/aw_network_delegate.h"
10 #include "android_webview/browser/net/aw_url_request_job_factory.h" 10 #include "android_webview/browser/net/aw_url_request_job_factory.h"
11 #include "android_webview/browser/net/init_native_callback.h" 11 #include "android_webview/browser/net/init_native_callback.h"
12 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
13 #include "content/public/browser/content_browser_client.h" 13 #include "content/public/browser/content_browser_client.h"
14 #include "content/public/browser/resource_context.h"
15 #include "content/public/common/content_client.h" 14 #include "content/public/common/content_client.h"
16 #include "content/public/common/url_constants.h" 15 #include "content/public/common/url_constants.h"
17 #include "net/http/http_cache.h" 16 #include "net/http/http_cache.h"
18 #include "net/proxy/proxy_service.h" 17 #include "net/proxy/proxy_service.h"
19 #include "net/url_request/data_protocol_handler.h" 18 #include "net/url_request/data_protocol_handler.h"
20 #include "net/url_request/file_protocol_handler.h" 19 #include "net/url_request/file_protocol_handler.h"
21 #include "net/url_request/protocol_intercept_job_factory.h" 20 #include "net/url_request/protocol_intercept_job_factory.h"
22 #include "net/url_request/url_request_context_builder.h" 21 #include "net/url_request/url_request_context_builder.h"
23 #include "net/url_request/url_request_context.h" 22 #include "net/url_request/url_request_context.h"
24 23
25 using content::BrowserThread; 24 using content::BrowserThread;
26 25
27 namespace android_webview { 26 namespace android_webview {
28 27
29 namespace {
30
31 class AwResourceContext : public content::ResourceContext {
32 public:
33 AwResourceContext(net::URLRequestContext* getter);
34 virtual ~AwResourceContext();
35 virtual net::HostResolver* GetHostResolver() OVERRIDE;
36 virtual net::URLRequestContext* GetRequestContext() OVERRIDE;
37
38 private:
39 net::URLRequestContext* context_; // weak
40
41 DISALLOW_COPY_AND_ASSIGN(AwResourceContext);
42 };
43
44 AwResourceContext::AwResourceContext(net::URLRequestContext* context)
45 : context_(context) {
46 }
47
48 AwResourceContext::~AwResourceContext() {
49 }
50
51 net::HostResolver* AwResourceContext::GetHostResolver() {
52 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
53 return context_->host_resolver();
54 }
55
56 net::URLRequestContext* AwResourceContext::GetRequestContext() {
57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
58 return context_;
59 }
60
61 } // namespace
62
63 AwURLRequestContextGetter::AwURLRequestContextGetter( 28 AwURLRequestContextGetter::AwURLRequestContextGetter(
64 AwBrowserContext* browser_context) 29 AwBrowserContext* browser_context)
65 : browser_context_(browser_context), 30 : browser_context_(browser_context),
66 proxy_config_service_(net::ProxyService::CreateSystemProxyConfigService( 31 proxy_config_service_(net::ProxyService::CreateSystemProxyConfigService(
67 GetNetworkTaskRunner(), 32 GetNetworkTaskRunner(),
68 NULL /* Ignored on Android */)) { 33 NULL /* Ignored on Android */)) {
69 // CreateSystemProxyConfigService for Android must be called on main thread. 34 // CreateSystemProxyConfigService for Android must be called on main thread.
70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
71 36
72 // All network stack initialization is done on the synchronous Init call when 37 // All network stack initialization is done on the synchronous Init call when
(...skipping 15 matching lines...) Expand all
88 builder.set_proxy_config_service(proxy_config_service_.release()); 53 builder.set_proxy_config_service(proxy_config_service_.release());
89 builder.set_accept_language(net::HttpUtil::GenerateAcceptLanguageHeader( 54 builder.set_accept_language(net::HttpUtil::GenerateAcceptLanguageHeader(
90 content::GetContentClient()->browser()->GetAcceptLangs( 55 content::GetContentClient()->browser()->GetAcceptLangs(
91 browser_context_))); 56 browser_context_)));
92 57
93 builder.set_accept_charset( 58 builder.set_accept_charset(
94 net::HttpUtil::GenerateAcceptCharsetHeader("utf-8")); 59 net::HttpUtil::GenerateAcceptCharsetHeader("utf-8"));
95 60
96 url_request_context_.reset(builder.Build()); 61 url_request_context_.reset(builder.Build());
97 62
98 scoped_ptr<AwURLRequestJobFactory> job_factory(new AwURLRequestJobFactory);
99 bool set_protocol = job_factory->SetProtocolHandler(
100 chrome::kFileScheme, new net::FileProtocolHandler());
101 DCHECK(set_protocol);
102 set_protocol = job_factory->SetProtocolHandler(
103 chrome::kDataScheme, new net::DataProtocolHandler());
104 DCHECK(set_protocol);
105
106 // TODO(mnaganov): Fix URLRequestContextBuilder to use proper threads. 63 // TODO(mnaganov): Fix URLRequestContextBuilder to use proper threads.
107 net::HttpNetworkSession::Params network_session_params; 64 net::HttpNetworkSession::Params network_session_params;
108 PopulateNetworkSessionParams(&network_session_params); 65 PopulateNetworkSessionParams(&network_session_params);
109 net::HttpCache* main_cache = new net::HttpCache( 66 net::HttpCache* main_cache = new net::HttpCache(
110 network_session_params, 67 network_session_params,
111 new net::HttpCache::DefaultBackend( 68 new net::HttpCache::DefaultBackend(
112 net::DISK_CACHE, 69 net::DISK_CACHE,
113 browser_context_->GetPath().Append(FILE_PATH_LITERAL("Cache")), 70 browser_context_->GetPath().Append(FILE_PATH_LITERAL("Cache")),
114 10 * 1024 * 1024, // 10M 71 10 * 1024 * 1024, // 10M
115 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE))); 72 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::CACHE)));
116 main_http_factory_.reset(main_cache); 73 main_http_factory_.reset(main_cache);
117 url_request_context_->set_http_transaction_factory(main_cache); 74 url_request_context_->set_http_transaction_factory(main_cache);
118
119 job_factory_ = CreateAndroidJobFactoryAndCookieMonster(
120 url_request_context_.get(), job_factory.Pass());
121 job_factory_.reset(new net::ProtocolInterceptJobFactory(
122 job_factory_.Pass(),
123 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
124 new AwRequestInterceptor())));
125 url_request_context_->set_job_factory(job_factory_.get());
126 } 75 }
127 76
128 void AwURLRequestContextGetter::PopulateNetworkSessionParams( 77 void AwURLRequestContextGetter::PopulateNetworkSessionParams(
129 net::HttpNetworkSession::Params* params) { 78 net::HttpNetworkSession::Params* params) {
130 net::URLRequestContext* context = url_request_context_.get(); 79 net::URLRequestContext* context = url_request_context_.get();
131 params->host_resolver = context->host_resolver(); 80 params->host_resolver = context->host_resolver();
132 params->cert_verifier = context->cert_verifier(); 81 params->cert_verifier = context->cert_verifier();
133 params->server_bound_cert_service = context->server_bound_cert_service(); 82 params->server_bound_cert_service = context->server_bound_cert_service();
134 params->transport_security_state = context->transport_security_state(); 83 params->transport_security_state = context->transport_security_state();
135 params->proxy_service = context->proxy_service(); 84 params->proxy_service = context->proxy_service();
136 params->ssl_config_service = context->ssl_config_service(); 85 params->ssl_config_service = context->ssl_config_service();
137 params->http_auth_handler_factory = context->http_auth_handler_factory(); 86 params->http_auth_handler_factory = context->http_auth_handler_factory();
138 params->network_delegate = context->network_delegate(); 87 params->network_delegate = context->network_delegate();
139 params->http_server_properties = context->http_server_properties(); 88 params->http_server_properties = context->http_server_properties();
140 params->net_log = context->net_log(); 89 params->net_log = context->net_log();
141 } 90 }
142 91
143 content::ResourceContext* AwURLRequestContextGetter::GetResourceContext() {
144 DCHECK(url_request_context_);
145 if (!resource_context_)
146 resource_context_.reset(new AwResourceContext(url_request_context_.get()));
147 return resource_context_.get();
148 }
149
150 net::URLRequestContext* AwURLRequestContextGetter::GetURLRequestContext() { 92 net::URLRequestContext* AwURLRequestContextGetter::GetURLRequestContext() {
151 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 93 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
94 if (!job_factory_) {
95 scoped_ptr<AwURLRequestJobFactory> job_factory(new AwURLRequestJobFactory);
96 bool set_protocol = job_factory->SetProtocolHandler(
97 chrome::kFileScheme, new net::FileProtocolHandler());
98 DCHECK(set_protocol);
99 set_protocol = job_factory->SetProtocolHandler(
100 chrome::kDataScheme, new net::DataProtocolHandler());
101 DCHECK(set_protocol);
102 DCHECK(blob_protocol_handler_);
103 set_protocol = job_factory->SetProtocolHandler(
104 chrome::kBlobScheme, blob_protocol_handler_.release());
105 DCHECK(set_protocol);
106 DCHECK(file_system_protocol_handler_);
107 set_protocol = job_factory->SetProtocolHandler(
108 chrome::kFileSystemScheme, file_system_protocol_handler_.release());
109 DCHECK(set_protocol);
110 DCHECK(chrome_protocol_handler_);
111 set_protocol = job_factory->SetProtocolHandler(
112 chrome::kChromeUIScheme, chrome_protocol_handler_.release());
113 DCHECK(set_protocol);
114 DCHECK(chrome_devtools_protocol_handler_);
115 set_protocol = job_factory->SetProtocolHandler(
116 chrome::kChromeDevToolsScheme,
117 chrome_devtools_protocol_handler_.release());
118 DCHECK(set_protocol);
119 job_factory_ = CreateAndroidJobFactoryAndCookieMonster(
120 url_request_context_.get(), job_factory.Pass());
121 job_factory_.reset(new net::ProtocolInterceptJobFactory(
122 job_factory_.Pass(),
123 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>(
124 new AwRequestInterceptor())));
125 job_factory_.reset(new net::ProtocolInterceptJobFactory(
126 job_factory_.Pass(),
127 developer_protocol_handler_.Pass()));
128 url_request_context_->set_job_factory(job_factory_.get());
129 }
152 return url_request_context_.get(); 130 return url_request_context_.get();
153 } 131 }
154 132
155 scoped_refptr<base::SingleThreadTaskRunner> 133 scoped_refptr<base::SingleThreadTaskRunner>
156 AwURLRequestContextGetter::GetNetworkTaskRunner() const { 134 AwURLRequestContextGetter::GetNetworkTaskRunner() const {
157 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO); 135 return BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
158 } 136 }
159 137
138 void AwURLRequestContextGetter::SetProtocolHandlers(
139 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
140 blob_protocol_handler,
141 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
142 file_system_protocol_handler,
143 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
144 developer_protocol_handler,
145 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
146 chrome_protocol_handler,
147 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
148 chrome_devtools_protocol_handler) {
149 blob_protocol_handler_ = blob_protocol_handler.Pass();
150 file_system_protocol_handler_ = file_system_protocol_handler.Pass();
151 developer_protocol_handler_ = developer_protocol_handler.Pass();
152 chrome_protocol_handler_ = chrome_protocol_handler.Pass();
153 chrome_devtools_protocol_handler_ = chrome_devtools_protocol_handler.Pass();
154 }
155
160 } // namespace android_webview 156 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698