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

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

Issue 1414313002: Allow dynamic updating of authentication policies (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix IOS compile problem - attempt 3 Created 5 years 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
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/base64.h" 9 #include "base/base64.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 #include "net/cert/ct_verifier.h" 69 #include "net/cert/ct_verifier.h"
70 #include "net/cert/multi_log_ct_verifier.h" 70 #include "net/cert/multi_log_ct_verifier.h"
71 #include "net/cert/multi_threaded_cert_verifier.h" 71 #include "net/cert/multi_threaded_cert_verifier.h"
72 #include "net/cookies/cookie_store.h" 72 #include "net/cookies/cookie_store.h"
73 #include "net/dns/host_cache.h" 73 #include "net/dns/host_cache.h"
74 #include "net/dns/host_resolver.h" 74 #include "net/dns/host_resolver.h"
75 #include "net/dns/mapped_host_resolver.h" 75 #include "net/dns/mapped_host_resolver.h"
76 #include "net/ftp/ftp_network_layer.h" 76 #include "net/ftp/ftp_network_layer.h"
77 #include "net/http/http_auth_filter.h" 77 #include "net/http/http_auth_filter.h"
78 #include "net/http/http_auth_handler_factory.h" 78 #include "net/http/http_auth_handler_factory.h"
79 #include "net/http/http_auth_preferences.h"
79 #include "net/http/http_network_layer.h" 80 #include "net/http/http_network_layer.h"
80 #include "net/http/http_network_session.h" 81 #include "net/http/http_network_session.h"
81 #include "net/http/http_server_properties_impl.h" 82 #include "net/http/http_server_properties_impl.h"
82 #include "net/proxy/proxy_config_service.h" 83 #include "net/proxy/proxy_config_service.h"
83 #include "net/proxy/proxy_script_fetcher_impl.h" 84 #include "net/proxy/proxy_script_fetcher_impl.h"
84 #include "net/proxy/proxy_service.h" 85 #include "net/proxy/proxy_service.h"
85 #include "net/quic/crypto/crypto_protocol.h" 86 #include "net/quic/crypto/crypto_protocol.h"
86 #include "net/quic/quic_protocol.h" 87 #include "net/quic/quic_protocol.h"
87 #include "net/quic/quic_utils.h" 88 #include "net/quic/quic_utils.h"
88 #include "net/socket/ssl_client_socket.h" 89 #include "net/socket/ssl_client_socket.h"
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 extensions::EventRouterForwarder* extension_event_router_forwarder) 461 extensions::EventRouterForwarder* extension_event_router_forwarder)
461 : net_log_(net_log), 462 : net_log_(net_log),
462 #if defined(ENABLE_EXTENSIONS) 463 #if defined(ENABLE_EXTENSIONS)
463 extension_event_router_forwarder_(extension_event_router_forwarder), 464 extension_event_router_forwarder_(extension_event_router_forwarder),
464 #endif 465 #endif
465 globals_(NULL), 466 globals_(NULL),
466 is_spdy_disabled_by_policy_(false), 467 is_spdy_disabled_by_policy_(false),
467 is_quic_allowed_by_policy_(true), 468 is_quic_allowed_by_policy_(true),
468 creation_time_(base::TimeTicks::Now()), 469 creation_time_(base::TimeTicks::Now()),
469 weak_factory_(this) { 470 weak_factory_(this) {
471 scoped_refptr<base::SingleThreadTaskRunner> io_thread_proxy =
472 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO);
470 auth_schemes_ = local_state->GetString(prefs::kAuthSchemes); 473 auth_schemes_ = local_state->GetString(prefs::kAuthSchemes);
471 negotiate_disable_cname_lookup_ = local_state->GetBoolean( 474 negotiate_disable_cname_lookup_.Init(
472 prefs::kDisableAuthNegotiateCnameLookup); 475 prefs::kDisableAuthNegotiateCnameLookup, local_state,
473 negotiate_enable_port_ = local_state->GetBoolean( 476 base::Bind(&IOThread::UpdateNegotiateDisableCnameLookup,
474 prefs::kEnableAuthNegotiatePort); 477 base::Unretained(this)));
475 auth_server_whitelist_ = local_state->GetString(prefs::kAuthServerWhitelist); 478 negotiate_disable_cname_lookup_.MoveToThread(io_thread_proxy);
476 auth_delegate_whitelist_ = local_state->GetString( 479 negotiate_enable_port_.Init(
477 prefs::kAuthNegotiateDelegateWhitelist); 480 prefs::kEnableAuthNegotiatePort, local_state,
481 base::Bind(&IOThread::UpdateNegotiateEnablePort, base::Unretained(this)));
482 negotiate_enable_port_.MoveToThread(io_thread_proxy);
483 auth_server_whitelist_.Init(
484 prefs::kAuthServerWhitelist, local_state,
485 base::Bind(&IOThread::UpdateServerWhitelist, base::Unretained(this)));
486 auth_server_whitelist_.MoveToThread(io_thread_proxy);
487 auth_delegate_whitelist_.Init(
488 prefs::kAuthNegotiateDelegateWhitelist, local_state,
489 base::Bind(&IOThread::UpdateDelegateWhitelist, base::Unretained(this)));
490 auth_delegate_whitelist_.MoveToThread(io_thread_proxy);
491 #if defined(OS_ANDROID)
492 auth_android_negotiate_account_type_.Init(
493 prefs::kAuthAndroidNegotiateAccountType, local_state,
494 base::Bind(&IOThread::UpdateAndroidAuthNegotiateAccountType,
495 base::Unretained(this)));
496 auth_android_negotiate_account_type_.MoveToThread(io_thread_proxy);
497 #endif
498 #if defined(OS_POSIX) && !defined(OS_ANDROID)
478 gssapi_library_name_ = local_state->GetString(prefs::kGSSAPILibraryName); 499 gssapi_library_name_ = local_state->GetString(prefs::kGSSAPILibraryName);
479 auth_android_negotiate_account_type_ = 500 #endif
480 local_state->GetString(prefs::kAuthAndroidNegotiateAccountType);
481 pref_proxy_config_tracker_.reset( 501 pref_proxy_config_tracker_.reset(
482 ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState( 502 ProxyServiceFactory::CreatePrefProxyConfigTrackerOfLocalState(
483 local_state)); 503 local_state));
484 ChromeNetworkDelegate::InitializePrefsOnUIThread( 504 ChromeNetworkDelegate::InitializePrefsOnUIThread(
485 &system_enable_referrers_, 505 &system_enable_referrers_,
486 NULL, 506 NULL,
487 NULL, 507 NULL,
488 NULL, 508 NULL,
489 local_state); 509 local_state);
490 ssl_config_service_manager_.reset( 510 ssl_config_service_manager_.reset(
491 ssl_config::SSLConfigServiceManager::CreateDefaultManager( 511 ssl_config::SSLConfigServiceManager::CreateDefaultManager(
492 local_state, 512 local_state,
493 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))); 513 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)));
494 514
495 base::Value* dns_client_enabled_default = new base::FundamentalValue( 515 base::Value* dns_client_enabled_default = new base::FundamentalValue(
496 chrome_browser_net::ConfigureAsyncDnsFieldTrial()); 516 chrome_browser_net::ConfigureAsyncDnsFieldTrial());
497 local_state->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled, 517 local_state->SetDefaultPrefValue(prefs::kBuiltInDnsClientEnabled,
498 dns_client_enabled_default); 518 dns_client_enabled_default);
499 chrome_browser_net::LogAsyncDnsPrefSource( 519 chrome_browser_net::LogAsyncDnsPrefSource(
500 local_state->FindPreference(prefs::kBuiltInDnsClientEnabled)); 520 local_state->FindPreference(prefs::kBuiltInDnsClientEnabled));
501 521
502 dns_client_enabled_.Init(prefs::kBuiltInDnsClientEnabled, 522 dns_client_enabled_.Init(prefs::kBuiltInDnsClientEnabled,
503 local_state, 523 local_state,
504 base::Bind(&IOThread::UpdateDnsClientEnabled, 524 base::Bind(&IOThread::UpdateDnsClientEnabled,
505 base::Unretained(this))); 525 base::Unretained(this)));
506 dns_client_enabled_.MoveToThread( 526 dns_client_enabled_.MoveToThread(io_thread_proxy);
507 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
508 527
509 quick_check_enabled_.Init(prefs::kQuickCheckEnabled, 528 quick_check_enabled_.Init(prefs::kQuickCheckEnabled,
510 local_state); 529 local_state);
511 quick_check_enabled_.MoveToThread( 530 quick_check_enabled_.MoveToThread(io_thread_proxy);
512 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO));
513 531
514 #if defined(ENABLE_CONFIGURATION_POLICY) 532 #if defined(ENABLE_CONFIGURATION_POLICY)
515 is_spdy_disabled_by_policy_ = policy_service->GetPolicies( 533 is_spdy_disabled_by_policy_ = policy_service->GetPolicies(
516 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())).Get( 534 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, std::string())).Get(
517 policy::key::kDisableSpdy) != NULL; 535 policy::key::kDisableSpdy) != NULL;
518 536
519 const base::Value* value = policy_service->GetPolicies( 537 const base::Value* value = policy_service->GetPolicies(
520 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME, 538 policy::PolicyNamespace(policy::POLICY_DOMAIN_CHROME,
521 std::string())).GetValue(policy::key::kQuicAllowed); 539 std::string())).GetValue(policy::key::kQuicAllowed);
522 if (value) 540 if (value)
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466432 753 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466432
736 // is fixed. 754 // is fixed.
737 tracked_objects::ScopedTracker tracking_profile10( 755 tracked_objects::ScopedTracker tracking_profile10(
738 FROM_HERE_WITH_EXPLICIT_FUNCTION( 756 FROM_HERE_WITH_EXPLICIT_FUNCTION(
739 "466432 IOThread::InitAsync::CertPolicyEnforcer")); 757 "466432 IOThread::InitAsync::CertPolicyEnforcer"));
740 net::CertPolicyEnforcer* policy_enforcer = new net::CertPolicyEnforcer; 758 net::CertPolicyEnforcer* policy_enforcer = new net::CertPolicyEnforcer;
741 globals_->cert_policy_enforcer.reset(policy_enforcer); 759 globals_->cert_policy_enforcer.reset(policy_enforcer);
742 760
743 globals_->ssl_config_service = GetSSLConfigService(); 761 globals_->ssl_config_service = GetSSLConfigService();
744 762
745 globals_->http_auth_handler_factory.reset(CreateDefaultAuthHandlerFactory( 763 CreateDefaultAuthHandlerFactory();
746 globals_->host_resolver.get()));
747 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl()); 764 globals_->http_server_properties.reset(new net::HttpServerPropertiesImpl());
748 // For the ProxyScriptFetcher, we use a direct ProxyService. 765 // For the ProxyScriptFetcher, we use a direct ProxyService.
749 globals_->proxy_script_fetcher_proxy_service = 766 globals_->proxy_script_fetcher_proxy_service =
750 net::ProxyService::CreateDirectWithNetLog(net_log_); 767 net::ProxyService::CreateDirectWithNetLog(net_log_);
751 // In-memory cookie store. 768 // In-memory cookie store.
752 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466432 769 // TODO(erikchen): Remove ScopedTracker below once http://crbug.com/466432
753 // is fixed. 770 // is fixed.
754 tracked_objects::ScopedTracker tracking_profile11( 771 tracked_objects::ScopedTracker tracking_profile11(
755 FROM_HERE_WITH_EXPLICIT_FUNCTION( 772 FROM_HERE_WITH_EXPLICIT_FUNCTION(
756 "466432 IOThread::InitAsync::CreateCookieStore::Start")); 773 "466432 IOThread::InitAsync::CreateCookieStore::Start"));
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
874 // Release objects that the net::URLRequestContext could have been pointing 891 // Release objects that the net::URLRequestContext could have been pointing
875 // to. 892 // to.
876 893
877 // Shutdown the HistogramWatcher on the IO thread. 894 // Shutdown the HistogramWatcher on the IO thread.
878 net::NetworkChangeNotifier::ShutdownHistogramWatcher(); 895 net::NetworkChangeNotifier::ShutdownHistogramWatcher();
879 896
880 // This must be reset before the ChromeNetLog is destroyed. 897 // This must be reset before the ChromeNetLog is destroyed.
881 network_change_observer_.reset(); 898 network_change_observer_.reset();
882 899
883 system_proxy_config_service_.reset(); 900 system_proxy_config_service_.reset();
884
885 delete globals_; 901 delete globals_;
886 globals_ = NULL; 902 globals_ = NULL;
887 903
888 base::debug::LeakTracker<SystemURLRequestContextGetter>::CheckForLeaks(); 904 base::debug::LeakTracker<SystemURLRequestContextGetter>::CheckForLeaks();
889 } 905 }
890 906
891 void IOThread::InitializeNetworkOptions(const base::CommandLine& command_line) { 907 void IOThread::InitializeNetworkOptions(const base::CommandLine& command_line) {
892 // Only handle use-spdy command line flags if "spdy.disabled" preference is 908 // Only handle use-spdy command line flags if "spdy.disabled" preference is
893 // not disabled via policy. 909 // not disabled via policy.
894 if (is_spdy_disabled_by_policy_) { 910 if (is_spdy_disabled_by_policy_) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 registry->RegisterStringPref(prefs::kAuthAndroidNegotiateAccountType, 1028 registry->RegisterStringPref(prefs::kAuthAndroidNegotiateAccountType,
1013 std::string()); 1029 std::string());
1014 registry->RegisterStringPref( 1030 registry->RegisterStringPref(
1015 data_reduction_proxy::prefs::kDataReductionProxy, std::string()); 1031 data_reduction_proxy::prefs::kDataReductionProxy, std::string());
1016 registry->RegisterBooleanPref(prefs::kEnableReferrers, true); 1032 registry->RegisterBooleanPref(prefs::kEnableReferrers, true);
1017 data_reduction_proxy::RegisterPrefs(registry); 1033 data_reduction_proxy::RegisterPrefs(registry);
1018 registry->RegisterBooleanPref(prefs::kBuiltInDnsClientEnabled, true); 1034 registry->RegisterBooleanPref(prefs::kBuiltInDnsClientEnabled, true);
1019 registry->RegisterBooleanPref(prefs::kQuickCheckEnabled, true); 1035 registry->RegisterBooleanPref(prefs::kQuickCheckEnabled, true);
1020 } 1036 }
1021 1037
1022 net::HttpAuthHandlerFactory* IOThread::CreateDefaultAuthHandlerFactory( 1038 void IOThread::UpdateServerWhitelist() {
1023 net::HostResolver* resolver) { 1039 globals_->http_auth_preferences->set_server_whitelist(
1024 net::HttpAuthFilterWhitelist* auth_filter_default_credentials = NULL; 1040 auth_server_whitelist_.GetValue());
1025 if (!auth_server_whitelist_.empty()) { 1041 }
1026 auth_filter_default_credentials = 1042
1027 new net::HttpAuthFilterWhitelist(auth_server_whitelist_); 1043 void IOThread::UpdateDelegateWhitelist() {
1028 } 1044 globals_->http_auth_preferences->set_delegate_whitelist(
1029 net::HttpAuthFilterWhitelist* auth_filter_delegate = NULL; 1045 auth_delegate_whitelist_.GetValue());
1030 if (!auth_delegate_whitelist_.empty()) { 1046 }
1031 auth_filter_delegate = 1047
1032 new net::HttpAuthFilterWhitelist(auth_delegate_whitelist_); 1048 #if defined(OS_ANDROID)
1033 } 1049 void IOThread::UpdateAndroidAuthNegotiateAccountType() {
1034 globals_->url_security_manager.reset( 1050 globals_->http_auth_preferences->set_auth_android_negotiate_account_type(
1035 net::URLSecurityManager::Create(auth_filter_default_credentials, 1051 auth_android_negotiate_account_type_.GetValue());
1036 auth_filter_delegate)); 1052 }
1053 #endif
1054
1055 void IOThread::UpdateNegotiateDisableCnameLookup() {
1056 globals_->http_auth_preferences->set_negotiate_disable_cname_lookup(
1057 negotiate_disable_cname_lookup_.GetValue());
1058 }
1059
1060 void IOThread::UpdateNegotiateEnablePort() {
1061 globals_->http_auth_preferences->set_negotiate_enable_port(
1062 negotiate_enable_port_.GetValue());
1063 }
1064 void IOThread::CreateDefaultAuthHandlerFactory() {
asanka 2015/11/25 19:00:09 Nit: add new line.
aberent 2015/11/26 15:58:00 Done.
1037 std::vector<std::string> supported_schemes = base::SplitString( 1065 std::vector<std::string> supported_schemes = base::SplitString(
1038 auth_schemes_, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); 1066 auth_schemes_, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
1039 1067 globals_->http_auth_preferences.reset(new net::HttpAuthPreferences(
1040 scoped_ptr<net::HttpAuthHandlerRegistryFactory> registry_factory( 1068 supported_schemes
1069 #if defined(OS_POSIX) && !defined(OS_ANDROID)
1070 ,
1071 gssapi_library_name_
1072 #endif
1073 ));
1074 UpdateServerWhitelist();
1075 UpdateDelegateWhitelist();
1076 UpdateNegotiateDisableCnameLookup();
1077 UpdateNegotiateEnablePort();
1078 #if defined(OS_ANDROID)
1079 UpdateAndroidAuthNegotiateAccountType();
1080 #endif
1081 globals_->http_auth_handler_factory =
1041 net::HttpAuthHandlerRegistryFactory::Create( 1082 net::HttpAuthHandlerRegistryFactory::Create(
1042 supported_schemes, globals_->url_security_manager.get(), resolver, 1083 globals_->http_auth_preferences.get(), globals_->host_resolver.get())
1043 gssapi_library_name_, auth_android_negotiate_account_type_, 1084 .Pass();
1044 negotiate_disable_cname_lookup_, negotiate_enable_port_));
1045 return registry_factory.release();
1046 } 1085 }
1047 1086
1048 void IOThread::ClearHostCache() { 1087 void IOThread::ClearHostCache() {
1049 DCHECK_CURRENTLY_ON(BrowserThread::IO); 1088 DCHECK_CURRENTLY_ON(BrowserThread::IO);
1050 1089
1051 net::HostCache* host_cache = globals_->host_resolver->GetHostCache(); 1090 net::HostCache* host_cache = globals_->host_resolver->GetHostCache();
1052 if (host_cache) 1091 if (host_cache)
1053 host_cache->clear(); 1092 host_cache->clear();
1054 } 1093 }
1055 1094
(...skipping 608 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 globals->proxy_script_fetcher_url_request_job_factory = job_factory.Pass(); 1703 globals->proxy_script_fetcher_url_request_job_factory = job_factory.Pass();
1665 1704
1666 context->set_job_factory( 1705 context->set_job_factory(
1667 globals->proxy_script_fetcher_url_request_job_factory.get()); 1706 globals->proxy_script_fetcher_url_request_job_factory.get());
1668 1707
1669 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the 1708 // TODO(rtenneti): We should probably use HttpServerPropertiesManager for the
1670 // system URLRequestContext too. There's no reason this should be tied to a 1709 // system URLRequestContext too. There's no reason this should be tied to a
1671 // profile. 1710 // profile.
1672 return context; 1711 return context;
1673 } 1712 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698