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

Side by Side Diff: chrome/browser/profiles/profile_io_data.cc

Issue 187223003: Allow content layer to pass ProtocolInterceptors when we create URLRequestContext (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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/profiles/profile_io_data.h" 5 #include "chrome/browser/profiles/profile_io_data.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 664 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 ChromeURLRequestContext* ProfileIOData::GetExtensionsRequestContext() const { 675 ChromeURLRequestContext* ProfileIOData::GetExtensionsRequestContext() const {
676 DCHECK(initialized_); 676 DCHECK(initialized_);
677 return extensions_request_context_.get(); 677 return extensions_request_context_.get();
678 } 678 }
679 679
680 ChromeURLRequestContext* ProfileIOData::GetIsolatedAppRequestContext( 680 ChromeURLRequestContext* ProfileIOData::GetIsolatedAppRequestContext(
681 ChromeURLRequestContext* main_context, 681 ChromeURLRequestContext* main_context,
682 const StoragePartitionDescriptor& partition_descriptor, 682 const StoragePartitionDescriptor& partition_descriptor,
683 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> 683 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
684 protocol_handler_interceptor, 684 protocol_handler_interceptor,
685 content::ProtocolHandlerMap* protocol_handlers) const { 685 content::ProtocolHandlerMap* protocol_handlers,
686 content::ProtocolHandlerScopedVector protocol_interceptors) const {
686 DCHECK(initialized_); 687 DCHECK(initialized_);
687 ChromeURLRequestContext* context = NULL; 688 ChromeURLRequestContext* context = NULL;
688 if (ContainsKey(app_request_context_map_, partition_descriptor)) { 689 if (ContainsKey(app_request_context_map_, partition_descriptor)) {
689 context = app_request_context_map_[partition_descriptor]; 690 context = app_request_context_map_[partition_descriptor];
690 } else { 691 } else {
691 context = AcquireIsolatedAppRequestContext( 692 context =
692 main_context, partition_descriptor, protocol_handler_interceptor.Pass(), 693 AcquireIsolatedAppRequestContext(main_context,
693 protocol_handlers); 694 partition_descriptor,
695 protocol_handler_interceptor.Pass(),
696 protocol_handlers,
697 protocol_interceptors.Pass());
694 app_request_context_map_[partition_descriptor] = context; 698 app_request_context_map_[partition_descriptor] = context;
695 } 699 }
696 DCHECK(context); 700 DCHECK(context);
697 return context; 701 return context;
698 } 702 }
699 703
700 ChromeURLRequestContext* ProfileIOData::GetIsolatedMediaRequestContext( 704 ChromeURLRequestContext* ProfileIOData::GetIsolatedMediaRequestContext(
701 ChromeURLRequestContext* app_context, 705 ChromeURLRequestContext* app_context,
702 const StoragePartitionDescriptor& partition_descriptor) const { 706 const StoragePartitionDescriptor& partition_descriptor) const {
703 DCHECK(initialized_); 707 DCHECK(initialized_);
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 std::string ProfileIOData::GetSSLSessionCacheShard() { 888 std::string ProfileIOData::GetSSLSessionCacheShard() {
885 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 889 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
886 // The SSL session cache is partitioned by setting a string. This returns a 890 // The SSL session cache is partitioned by setting a string. This returns a
887 // unique string to partition the SSL session cache. Each time we create a 891 // unique string to partition the SSL session cache. Each time we create a
888 // new profile, we'll get a fresh SSL session cache which is separate from 892 // new profile, we'll get a fresh SSL session cache which is separate from
889 // the other profiles. 893 // the other profiles.
890 static unsigned ssl_session_cache_instance = 0; 894 static unsigned ssl_session_cache_instance = 0;
891 return base::StringPrintf("profile/%u", ssl_session_cache_instance++); 895 return base::StringPrintf("profile/%u", ssl_session_cache_instance++);
892 } 896 }
893 897
894 void ProfileIOData::Init(content::ProtocolHandlerMap* protocol_handlers) const { 898 void ProfileIOData::Init(
899 content::ProtocolHandlerMap* protocol_handlers,
900 content::ProtocolHandlerScopedVector protocol_interceptors) const {
895 // The basic logic is implemented here. The specific initialization 901 // The basic logic is implemented here. The specific initialization
896 // is done in InitializeInternal(), implemented by subtypes. Static helper 902 // is done in InitializeInternal(), implemented by subtypes. Static helper
897 // functions have been provided to assist in common operations. 903 // functions have been provided to assist in common operations.
898 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 904 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
899 DCHECK(!initialized_); 905 DCHECK(!initialized_);
900 906
901 startup_metric_utils::ScopedSlowStartupUMA 907 startup_metric_utils::ScopedSlowStartupUMA
902 scoped_timer("Startup.SlowStartupProfileIODataInit"); 908 scoped_timer("Startup.SlowStartupProfileIODataInit");
903 909
904 // TODO(jhawkins): Remove once crbug.com/102004 is fixed. 910 // TODO(jhawkins): Remove once crbug.com/102004 is fixed.
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 main_request_context_->set_cert_verifier(cert_verifier_.get()); 991 main_request_context_->set_cert_verifier(cert_verifier_.get());
986 } else { 992 } else {
987 main_request_context_->set_cert_verifier( 993 main_request_context_->set_cert_verifier(
988 new net::MultiThreadedCertVerifier(verify_proc.get())); 994 new net::MultiThreadedCertVerifier(verify_proc.get()));
989 } 995 }
990 #else 996 #else
991 main_request_context_->set_cert_verifier( 997 main_request_context_->set_cert_verifier(
992 io_thread_globals->cert_verifier.get()); 998 io_thread_globals->cert_verifier.get());
993 #endif 999 #endif
994 1000
995 InitializeInternal(profile_params_.get(), protocol_handlers); 1001 InitializeInternal(
1002 profile_params_.get(), protocol_handlers, protocol_interceptors.Pass());
996 1003
997 profile_params_.reset(); 1004 profile_params_.reset();
998 initialized_ = true; 1005 initialized_ = true;
999 } 1006 }
1000 1007
1001 void ProfileIOData::ApplyProfileParamsToContext( 1008 void ProfileIOData::ApplyProfileParamsToContext(
1002 ChromeURLRequestContext* context) const { 1009 ChromeURLRequestContext* context) const {
1003 context->set_http_user_agent_settings( 1010 context->set_http_user_agent_settings(
1004 chrome_http_user_agent_settings_.get()); 1011 chrome_http_user_agent_settings_.get());
1005 context->set_ssl_config_service(profile_params_->ssl_config_service.get()); 1012 context->set_ssl_config_service(profile_params_->ssl_config_service.get());
1006 } 1013 }
1007 1014
1008 scoped_ptr<net::URLRequestJobFactory> ProfileIOData::SetUpJobFactoryDefaults( 1015 scoped_ptr<net::URLRequestJobFactory> ProfileIOData::SetUpJobFactoryDefaults(
1009 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory, 1016 scoped_ptr<net::URLRequestJobFactoryImpl> job_factory,
1017 content::ProtocolHandlerScopedVector protocol_interceptors,
1010 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory> 1018 scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
1011 protocol_handler_interceptor, 1019 protocol_handler_interceptor,
1012 net::NetworkDelegate* network_delegate, 1020 net::NetworkDelegate* network_delegate,
1013 net::FtpTransactionFactory* ftp_transaction_factory) const { 1021 net::FtpTransactionFactory* ftp_transaction_factory) const {
1014 // NOTE(willchan): Keep these protocol handlers in sync with 1022 // NOTE(willchan): Keep these protocol handlers in sync with
1015 // ProfileIOData::IsHandledProtocol(). 1023 // ProfileIOData::IsHandledProtocol().
1016 bool set_protocol = job_factory->SetProtocolHandler( 1024 bool set_protocol = job_factory->SetProtocolHandler(
1017 content::kFileScheme, 1025 content::kFileScheme,
1018 new net::FileProtocolHandler( 1026 new net::FileProtocolHandler(
1019 content::BrowserThread::GetBlockingPool()-> 1027 content::BrowserThread::GetBlockingPool()->
(...skipping 26 matching lines...) Expand all
1046 job_factory->SetProtocolHandler( 1054 job_factory->SetProtocolHandler(
1047 chrome::kAboutScheme, 1055 chrome::kAboutScheme,
1048 new chrome_browser_net::AboutProtocolHandler()); 1056 new chrome_browser_net::AboutProtocolHandler());
1049 #if !defined(DISABLE_FTP_SUPPORT) 1057 #if !defined(DISABLE_FTP_SUPPORT)
1050 DCHECK(ftp_transaction_factory); 1058 DCHECK(ftp_transaction_factory);
1051 job_factory->SetProtocolHandler( 1059 job_factory->SetProtocolHandler(
1052 content::kFtpScheme, 1060 content::kFtpScheme,
1053 new net::FtpProtocolHandler(ftp_transaction_factory)); 1061 new net::FtpProtocolHandler(ftp_transaction_factory));
1054 #endif // !defined(DISABLE_FTP_SUPPORT) 1062 #endif // !defined(DISABLE_FTP_SUPPORT)
1055 1063
1064 #if defined(DEBUG_DEVTOOLS)
1065 protocol_interceptors.push_back(new DebugDevToolsInterceptor);
1066 #endif
1067
1068 // Set up interceptors in the reverse order.
1056 scoped_ptr<net::URLRequestJobFactory> top_job_factory = 1069 scoped_ptr<net::URLRequestJobFactory> top_job_factory =
1057 job_factory.PassAs<net::URLRequestJobFactory>(); 1070 job_factory.PassAs<net::URLRequestJobFactory>();
1058 #if defined(DEBUG_DEVTOOLS) 1071 for (content::ProtocolHandlerScopedVector::reverse_iterator i =
1059 top_job_factory.reset(new net::ProtocolInterceptJobFactory( 1072 protocol_interceptors.rbegin();
1060 top_job_factory.Pass(), 1073 i != protocol_interceptors.rend();
1061 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>( 1074 ++i) {
1062 new DebugDevToolsInterceptor))); 1075 top_job_factory.reset(new net::ProtocolInterceptJobFactory(
1063 #endif 1076 top_job_factory.Pass(), make_scoped_ptr(*i)));
1077 }
1078 protocol_interceptors.weak_clear();
1064 1079
1065 if (protocol_handler_interceptor) { 1080 if (protocol_handler_interceptor) {
1066 protocol_handler_interceptor->Chain(top_job_factory.Pass()); 1081 protocol_handler_interceptor->Chain(top_job_factory.Pass());
1067 return protocol_handler_interceptor.PassAs<net::URLRequestJobFactory>(); 1082 return protocol_handler_interceptor.PassAs<net::URLRequestJobFactory>();
1068 } else { 1083 } else {
1069 return top_job_factory.Pass(); 1084 return top_job_factory.Pass();
1070 } 1085 }
1071 } 1086 }
1072 1087
1073 void ProfileIOData::ShutdownOnUIThread() { 1088 void ProfileIOData::ShutdownOnUIThread() {
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1143 void ProfileIOData::SetCookieSettingsForTesting( 1158 void ProfileIOData::SetCookieSettingsForTesting(
1144 CookieSettings* cookie_settings) { 1159 CookieSettings* cookie_settings) {
1145 DCHECK(!cookie_settings_.get()); 1160 DCHECK(!cookie_settings_.get());
1146 cookie_settings_ = cookie_settings; 1161 cookie_settings_ = cookie_settings;
1147 } 1162 }
1148 1163
1149 void ProfileIOData::set_signin_names_for_testing( 1164 void ProfileIOData::set_signin_names_for_testing(
1150 SigninNamesOnIOThread* signin_names) { 1165 SigninNamesOnIOThread* signin_names) {
1151 signin_names_.reset(signin_names); 1166 signin_names_.reset(signin_names);
1152 } 1167 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698