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

Side by Side Diff: chrome/browser/io_thread.cc

Issue 10299002: Stop refcounting URLRequestContext. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More fixes Created 8 years, 7 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 "chrome/browser/io_thread.h" 5 #include "chrome/browser/io_thread.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 net_log_->AddGlobalEntry(net::NetLog::TYPE_NETWORK_IP_ADDRESSES_CHANGED, 190 net_log_->AddGlobalEntry(net::NetLog::TYPE_NETWORK_IP_ADDRESSES_CHANGED,
191 NULL); 191 NULL);
192 } 192 }
193 193
194 private: 194 private:
195 net::NetLog* net_log_; 195 net::NetLog* net_log_;
196 DISALLOW_COPY_AND_ASSIGN(LoggingNetworkChangeObserver); 196 DISALLOW_COPY_AND_ASSIGN(LoggingNetworkChangeObserver);
197 }; 197 };
198 198
199 // Create a separate request context for PAC fetches to avoid reference cycles. 199 // Create a separate request context for PAC fetches to avoid reference cycles.
eroman 2012/05/04 04:27:02 nit: I wander if "reference cycles" is the right w
200 // See IOThread::Globals for details. 200 // See IOThread::Globals for details.
201 scoped_refptr<net::URLRequestContext> 201 net::URLRequestContext*
202 ConstructProxyScriptFetcherContext(IOThread::Globals* globals, 202 ConstructProxyScriptFetcherContext(IOThread::Globals* globals,
203 net::NetLog* net_log) { 203 net::NetLog* net_log) {
204 scoped_refptr<net::URLRequestContext> context( 204 net::URLRequestContext* context = new URLRequestContextWithUserAgent;
205 new URLRequestContextWithUserAgent);
206 context->set_net_log(net_log); 205 context->set_net_log(net_log);
207 context->set_host_resolver(globals->host_resolver.get()); 206 context->set_host_resolver(globals->host_resolver.get());
208 context->set_cert_verifier(globals->cert_verifier.get()); 207 context->set_cert_verifier(globals->cert_verifier.get());
209 context->set_transport_security_state( 208 context->set_transport_security_state(
210 globals->transport_security_state.get()); 209 globals->transport_security_state.get());
211 context->set_http_auth_handler_factory( 210 context->set_http_auth_handler_factory(
212 globals->http_auth_handler_factory.get()); 211 globals->http_auth_handler_factory.get());
213 context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get()); 212 context->set_proxy_service(globals->proxy_script_fetcher_proxy_service.get());
214 context->set_http_transaction_factory( 213 context->set_http_transaction_factory(
215 globals->proxy_script_fetcher_http_transaction_factory.get()); 214 globals->proxy_script_fetcher_http_transaction_factory.get());
216 context->set_ftp_transaction_factory( 215 context->set_ftp_transaction_factory(
217 globals->proxy_script_fetcher_ftp_transaction_factory.get()); 216 globals->proxy_script_fetcher_ftp_transaction_factory.get());
218 context->set_cookie_store(globals->system_cookie_store.get()); 217 context->set_cookie_store(globals->system_cookie_store.get());
219 context->set_server_bound_cert_service( 218 context->set_server_bound_cert_service(
220 globals->system_server_bound_cert_service.get()); 219 globals->system_server_bound_cert_service.get());
221 context->set_network_delegate(globals->system_network_delegate.get()); 220 context->set_network_delegate(globals->system_network_delegate.get());
222 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the 221 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the
223 // system URLRequestContext too. There's no reason this should be tied to a 222 // system URLRequestContext too. There's no reason this should be tied to a
224 // profile. 223 // profile.
225 return context; 224 return context;
226 } 225 }
227 226
228 scoped_refptr<net::URLRequestContext> 227 net::URLRequestContext*
229 ConstructSystemRequestContext(IOThread::Globals* globals, 228 ConstructSystemRequestContext(IOThread::Globals* globals,
230 net::NetLog* net_log) { 229 net::NetLog* net_log) {
231 scoped_refptr<net::URLRequestContext> context( 230 net::URLRequestContext* context = new SystemURLRequestContext;
232 new SystemURLRequestContext);
233 context->set_net_log(net_log); 231 context->set_net_log(net_log);
234 context->set_host_resolver(globals->host_resolver.get()); 232 context->set_host_resolver(globals->host_resolver.get());
235 context->set_cert_verifier(globals->cert_verifier.get()); 233 context->set_cert_verifier(globals->cert_verifier.get());
236 context->set_transport_security_state( 234 context->set_transport_security_state(
237 globals->transport_security_state.get()); 235 globals->transport_security_state.get());
238 context->set_http_auth_handler_factory( 236 context->set_http_auth_handler_factory(
239 globals->http_auth_handler_factory.get()); 237 globals->http_auth_handler_factory.get());
240 context->set_proxy_service(globals->system_proxy_service.get()); 238 context->set_proxy_service(globals->system_proxy_service.get());
241 context->set_http_transaction_factory( 239 context->set_http_transaction_factory(
242 globals->system_http_transaction_factory.get()); 240 globals->system_http_transaction_factory.get());
(...skipping 30 matching lines...) Expand all
273 IOThread* io_thread) 271 IOThread* io_thread)
274 : io_thread_(io_thread), 272 : io_thread_(io_thread),
275 io_message_loop_proxy_( 273 io_message_loop_proxy_(
276 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) { 274 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) {
277 } 275 }
278 276
279 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {} 277 SystemURLRequestContextGetter::~SystemURLRequestContextGetter() {}
280 278
281 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() { 279 net::URLRequestContext* SystemURLRequestContextGetter::GetURLRequestContext() {
282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
283 DCHECK(io_thread_->globals()->system_request_context); 281 DCHECK(io_thread_->globals()->system_request_context.get());
284 282
285 return io_thread_->globals()->system_request_context; 283 return io_thread_->globals()->system_request_context.get();
286 } 284 }
287 285
288 scoped_refptr<base::MessageLoopProxy> 286 scoped_refptr<base::MessageLoopProxy>
289 SystemURLRequestContextGetter::GetIOMessageLoopProxy() const { 287 SystemURLRequestContextGetter::GetIOMessageLoopProxy() const {
290 return io_message_loop_proxy_; 288 return io_message_loop_proxy_;
291 } 289 }
292 290
293 IOThread::Globals:: 291 IOThread::Globals::
294 SystemRequestContextLeakChecker::SystemRequestContextLeakChecker( 292 SystemRequestContextLeakChecker::SystemRequestContextLeakChecker(
295 Globals* globals) 293 Globals* globals)
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 445
448 globals_->throttler_manager.reset(new net::URLRequestThrottlerManager()); 446 globals_->throttler_manager.reset(new net::URLRequestThrottlerManager());
449 // Always done in production, disabled only for unit tests. 447 // Always done in production, disabled only for unit tests.
450 globals_->throttler_manager->set_enable_thread_checks(true); 448 globals_->throttler_manager->set_enable_thread_checks(true);
451 if (CommandLine::ForCurrentProcess()->HasSwitch( 449 if (CommandLine::ForCurrentProcess()->HasSwitch(
452 switches::kDisableExtensionsHttpThrottling)) { 450 switches::kDisableExtensionsHttpThrottling)) {
453 globals_->throttler_manager->set_enforce_throttling(false); 451 globals_->throttler_manager->set_enforce_throttling(false);
454 } 452 }
455 globals_->throttler_manager->set_net_log(net_log_); 453 globals_->throttler_manager->set_net_log(net_log_);
456 454
457 globals_->proxy_script_fetcher_context = 455 globals_->proxy_script_fetcher_context.reset(
458 ConstructProxyScriptFetcherContext(globals_, net_log_); 456 ConstructProxyScriptFetcherContext(globals_, net_log_));
459 457
460 sdch_manager_ = new net::SdchManager(); 458 sdch_manager_ = new net::SdchManager();
461 459
462 // InitSystemRequestContext turns right around and posts a task back 460 // InitSystemRequestContext turns right around and posts a task back
463 // to the IO thread, so we can't let it run until we know the IO 461 // to the IO thread, so we can't let it run until we know the IO
464 // thread has started. 462 // thread has started.
465 // 463 //
466 // Note that since we are at BrowserThread::Init time, the UI thread 464 // Note that since we are at BrowserThread::Init time, the UI thread
467 // is blocked waiting for the thread to start. Therefore, posting 465 // is blocked waiting for the thread to start. Therefore, posting
468 // this task to the main thread's message loop here is guaranteed to 466 // this task to the main thread's message loop here is guaranteed to
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 591
594 void IOThread::InitSystemRequestContextOnIOThread() { 592 void IOThread::InitSystemRequestContextOnIOThread() {
595 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 593 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
596 DCHECK(!globals_->system_proxy_service.get()); 594 DCHECK(!globals_->system_proxy_service.get());
597 DCHECK(system_proxy_config_service_.get()); 595 DCHECK(system_proxy_config_service_.get());
598 596
599 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 597 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
600 globals_->system_proxy_service.reset( 598 globals_->system_proxy_service.reset(
601 ProxyServiceFactory::CreateProxyService( 599 ProxyServiceFactory::CreateProxyService(
602 net_log_, 600 net_log_,
603 globals_->proxy_script_fetcher_context, 601 globals_->proxy_script_fetcher_context.get(),
604 system_proxy_config_service_.release(), 602 system_proxy_config_service_.release(),
605 command_line)); 603 command_line));
606 net::HttpNetworkSession::Params system_params; 604 net::HttpNetworkSession::Params system_params;
607 system_params.host_resolver = globals_->host_resolver.get(); 605 system_params.host_resolver = globals_->host_resolver.get();
608 system_params.cert_verifier = globals_->cert_verifier.get(); 606 system_params.cert_verifier = globals_->cert_verifier.get();
609 system_params.server_bound_cert_service = 607 system_params.server_bound_cert_service =
610 globals_->system_server_bound_cert_service.get(); 608 globals_->system_server_bound_cert_service.get();
611 system_params.transport_security_state = 609 system_params.transport_security_state =
612 globals_->transport_security_state.get(); 610 globals_->transport_security_state.get();
613 system_params.ssl_host_info_factory = NULL; 611 system_params.ssl_host_info_factory = NULL;
614 system_params.proxy_service = globals_->system_proxy_service.get(); 612 system_params.proxy_service = globals_->system_proxy_service.get();
615 system_params.ssl_config_service = globals_->ssl_config_service.get(); 613 system_params.ssl_config_service = globals_->ssl_config_service.get();
616 system_params.http_auth_handler_factory = 614 system_params.http_auth_handler_factory =
617 globals_->http_auth_handler_factory.get(); 615 globals_->http_auth_handler_factory.get();
618 system_params.http_server_properties = globals_->http_server_properties.get(); 616 system_params.http_server_properties = globals_->http_server_properties.get();
619 system_params.network_delegate = globals_->system_network_delegate.get(); 617 system_params.network_delegate = globals_->system_network_delegate.get();
620 system_params.net_log = net_log_; 618 system_params.net_log = net_log_;
621 globals_->system_http_transaction_factory.reset( 619 globals_->system_http_transaction_factory.reset(
622 new net::HttpNetworkLayer( 620 new net::HttpNetworkLayer(
623 new net::HttpNetworkSession(system_params))); 621 new net::HttpNetworkSession(system_params)));
624 globals_->system_ftp_transaction_factory.reset( 622 globals_->system_ftp_transaction_factory.reset(
625 new net::FtpNetworkLayer(globals_->host_resolver.get())); 623 new net::FtpNetworkLayer(globals_->host_resolver.get()));
626 globals_->system_request_context = 624 globals_->system_request_context.reset(
627 ConstructSystemRequestContext(globals_, net_log_); 625 ConstructSystemRequestContext(globals_, net_log_));
628 626
629 sdch_manager_->set_sdch_fetcher( 627 sdch_manager_->set_sdch_fetcher(
630 new SdchDictionaryFetcher(system_url_request_context_getter_.get())); 628 new SdchDictionaryFetcher(system_url_request_context_getter_.get()));
631 } 629 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698