15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_IO_THREAD_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_IO_THREAD_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_member.h" 1729b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch#include "base/strings/string_piece.h" 18e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "base/time/time.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/net/chrome_network_delegate.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/ssl_config_service_manager.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread_delegate.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/network_change_notifier.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/http/http_network_session.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/socket/next_proto.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ChromeNetLog; 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochclass PrefProxyConfigTracker; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySimple; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemURLRequestContextGetter; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base { 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CommandLine; 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net { 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DnsProbeService; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace data_reduction_proxy { 426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DataReductionProxyAuthRequestHandler; 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass DataReductionProxyDelegate; 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DataReductionProxyParams; 456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)} 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class EventRouterForwarder; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CertVerifier; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class ChannelIDService; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CookieStore; 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class CTVerifier; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FtpTransactionFactory; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostMappingRules; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HostResolver; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpAuthHandlerFactory; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpServerProperties; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpTransactionFactory; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class HttpUserAgentSettings; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NetworkDelegate; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyConfigService; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProxyService; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SSLConfigService; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TransportSecurityState; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContext; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestContextGetter; 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class URLRequestJobFactory; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequestThrottlerManager; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLSecurityManager; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy { 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PolicyService; 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace test { 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass IOThreadPeer; 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace test 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Contains state associated with, initialized and cleaned up on, and 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// primarily used on, the IO thread. 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If you are looking to interact with the IO thread (e.g. post tasks 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to it or check if it is the current thread), see 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content::BrowserThread. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IOThread : public content::BrowserThreadDelegate { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct Globals { 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) template <typename T> 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class Optional { 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional() : set_(false) {} 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set(T value) { 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_ = true; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) value_ = value; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void CopyToIfSet(T* value) const { 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (set_) { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *value = value_; 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool set_; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T value_; 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class SystemRequestContextLeakChecker { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SystemRequestContextLeakChecker(Globals* globals); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~SystemRequestContextLeakChecker(); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Globals* const globals_; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Globals(); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Globals(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The "system" NetworkDelegate, used for Profile-agnostic network events. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::NetworkDelegate> system_network_delegate; 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HostResolver> host_resolver; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::CertVerifier> cert_verifier; 1285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The ChannelIDService must outlive the HttpTransactionFactory. 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<net::ChannelIDService> system_channel_id_service; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This TransportSecurityState doesn't load or save any state. It's only 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // used to enforce pinning for system requests and will only use built-in 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pins. 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::TransportSecurityState> transport_security_state; 134a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) scoped_ptr<net::CTVerifier> cert_transparency_verifier; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::SSLConfigService> ssl_config_service; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HttpServerProperties> http_server_properties; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::ProxyService> proxy_script_fetcher_proxy_service; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HttpTransactionFactory> 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_script_fetcher_http_transaction_factory; 141868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<net::FtpTransactionFactory> 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) proxy_script_fetcher_ftp_transaction_factory; 143868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<net::URLRequestJobFactory> 144868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) proxy_script_fetcher_url_request_job_factory; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLRequestThrottlerManager> throttler_manager; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLSecurityManager> url_security_manager; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(willchan): Remove proxy script fetcher context since it's not 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // necessary now that I got rid of refcounting URLRequestContexts. 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The first URLRequestContext is |system_url_request_context|. We introduce 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |proxy_script_fetcher_context| for the second context. It has a direct 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ProxyService, since we always directly connect to fetch the PAC script. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLRequestContext> proxy_script_fetcher_context; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::ProxyService> system_proxy_service; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HttpTransactionFactory> system_http_transaction_factory; 156f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<net::URLRequestJobFactory> system_url_request_job_factory; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::URLRequestContext> system_request_context; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SystemRequestContextLeakChecker system_request_context_leak_checker; 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // |system_cookie_store| and |system_channel_id_service| are shared 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // between |proxy_script_fetcher_context| and |system_request_context|. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::CookieStore> system_cookie_store; 1625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<extensions::EventRouterForwarder> 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_event_router_forwarder; 1655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HostMappingRules> host_mapping_rules; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::HttpUserAgentSettings> http_user_agent_settings; 1685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool enable_ssl_connect_job_waiting; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ignore_certificate_errors; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 testing_fixed_http_port; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint16 testing_fixed_https_port; 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Optional<bool> enable_tcp_fast_open_for_ssl; 173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<size_t> initial_max_spdy_concurrent_streams; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<bool> force_spdy_single_domain; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<bool> enable_spdy_compression; 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<bool> enable_spdy_ping_based_connection_checking; 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<net::NextProto> spdy_default_protocol; 179cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) net::NextProtoVector next_protos; 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Optional<string> trusted_spdy_proxy; 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Optional<bool> force_spdy_over_ssl; 182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Optional<bool> force_spdy_always; 183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::set<net::HostPortPair> forced_spdy_exclusions; 184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Optional<bool> use_alternate_protocols; 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Optional<double> alternate_protocol_probability_threshold; 18646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Optional<bool> enable_websocket_over_spdy; 187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Optional<bool> enable_quic; 1895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Optional<bool> enable_quic_time_based_loss_detection; 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Optional<bool> enable_quic_port_selection; 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Optional<bool> quic_always_require_handshake_confirmation; 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Optional<bool> quic_disable_connection_pooling; 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Optional<size_t> quic_max_packet_length; 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::QuicTagVector quic_connection_options; 19546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) Optional<std::string> quic_user_agent_id; 1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Optional<net::QuicVersionVector> quic_supported_versions; 197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Optional<net::HostPortPair> origin_to_force_quic_on; 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool enable_user_alternate_protocol_ports; 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NetErrorTabHelper uses |dns_probe_service| to send DNS probes when a 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // main frame load fails with a DNS error in order to provide more useful 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information to the renderer so it can show a more specific error page. 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<chrome_browser_net::DnsProbeService> dns_probe_service; 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<data_reduction_proxy::DataReductionProxyParams> 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy_params; 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<data_reduction_proxy::DataReductionProxyAuthRequestHandler> 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy_auth_request_handler; 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<data_reduction_proxy::DataReductionProxyDelegate> 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci data_reduction_proxy_delegate; 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |net_log| must either outlive the IOThread or be NULL. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IOThread(PrefService* local_state, 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy::PolicyService* policy_service, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeNetLog* net_log, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::EventRouterForwarder* extension_event_router_forwarder); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~IOThread(); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void RegisterPrefs(PrefRegistrySimple* registry); 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Can only be called on the IO thread. 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Globals* globals(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // Allows overriding Globals in tests where IOThread::Init() and 225a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // IOThread::CleanUp() are not called. This allows for injecting mocks into 226a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch // IOThread global objects. 227a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch void SetGlobalsForTesting(Globals* globals); 228a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeNetLog* net_log(); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Handles changing to On The Record mode, discarding confidential data. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ChangedToOnTheRecord(); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a getter for the URLRequestContext. Only called on the UI thread. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::URLRequestContextGetter* system_url_request_context_getter(); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears the host cache. Intended to be used to prevent exposing recently 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // visited sites on about:net-internals/#dns and about:dns pages. Must be 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // called on the IO thread. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearHostCache(); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InitializeNetworkSessionParams(net::HttpNetworkSession::Params* params); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 244e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch base::TimeTicks creation_time() const; 245e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Map from name to value for all parameters associate with a field trial. 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch typedef std::map<std::string, std::string> VariationParameters; 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Provide SystemURLRequestContextGetter with access to 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // InitSystemRequestContext(). 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class SystemURLRequestContextGetter; 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch friend class test::IOThreadPeer; 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BrowserThreadDelegate implementation, runs on the IO thread. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This handles initialization and destruction of state that must 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // live on the IO thread. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Init() OVERRIDE; 2607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void InitAsync() OVERRIDE; 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CleanUp() OVERRIDE; 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Initializes |params| based on the settings in |globals|. 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void InitializeNetworkSessionParamsFromGlobals( 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Globals& globals, 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::HttpNetworkSession::Params* params); 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 268a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void InitializeNetworkOptions(const base::CommandLine& parsed_command_line); 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Sets up TCP FastOpen if enabled via field trials or via the command line. 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void ConfigureTCPFastOpen(const base::CommandLine& command_line); 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Enable SPDY with the given mode, which may contain the following: 2744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "off" : Disables SPDY support entirely. 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "ssl" : Forces SPDY for all HTTPS requests. 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "no-ssl" : Forces SPDY for all HTTP requests. 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "no-ping" : Disables SPDY ping connection testing. 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "exclude=<host>" : Disables SPDY support for the host <host>. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "no-compress" : Disables SPDY header compression. 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "no-alt-protocols : Disables alternate protocol support. 2824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // "force-alt-protocols : Forces an alternate protocol of SPDY/3 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // on port 443. 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "single-domain" : Forces all spdy traffic to a single domain. 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // "init-max-streams=<limit>" : Specifies the maximum number of concurrent 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // streams for a SPDY session, unless the 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // specifies a different value via SETTINGS. 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void EnableSpdy(const std::string& mode); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Configures available SPDY protocol versions from the given trial. 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Used only if no command-line configuration was present. 29229b820f8d84e3bc97d62552e54923c42407f2f29Ben Murdoch static void ConfigureSpdyFromTrial(base::StringPiece spdy_trial_group, 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Globals* globals); 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Global state must be initialized on the IO thread, then this 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // method must be invoked on the UI thread. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitSystemRequestContext(); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Lazy initialization of system request context for 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SystemURLRequestContextGetter. To be called on IO thread only 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // after global state has been initialized on the IO thread, and 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SystemRequestContext state has been initialized on the UI thread. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitSystemRequestContextOnIOThread(); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HttpAuthHandlerFactory* CreateDefaultAuthHandlerFactory( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::HostResolver* resolver); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns an SSLConfigService instance. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::SSLConfigService* GetSSLConfigService(); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ChangedToOnTheRecordOnIOThread(); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateDnsClientEnabled(); 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Configures QUIC options based on the flags in |command_line| as 316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // well as the QUIC field trial group. 317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void ConfigureQuic(const base::CommandLine& command_line); 318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Set up data reduction proxy related objects on IO thread globals. 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetupDataReductionProxy(ChromeNetworkDelegate* network_delegate); 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::EventRouterForwarder* extension_event_router_forwarder() { 3235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 3245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return extension_event_router_forwarder_; 3255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#else 3265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 3275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 3285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Configures QUIC options in |globals| based on the flags in |command_line| 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // as well as the QUIC field trial group and parameters. 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static void ConfigureQuicGlobals( 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::StringPiece quic_trial_group, 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params, 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Globals* globals); 336868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns true if QUIC should be enabled, either as a result 338bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch // of a field trial or a command line flag. 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static bool ShouldEnableQuic( 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::StringPiece quic_trial_group); 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns true if the selection of the ephemeral port in bind() should be 3445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // performed by Chromium, and false if the OS should select the port. The OS 3455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // option is used to prevent Windows from posting a security security warning 3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // dialog. 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static bool ShouldEnableQuicPortSelection( 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line); 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns true if QUIC packet pacing should be negotiated during the 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // QUIC handshake. 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static bool ShouldEnableQuicPacing( 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::StringPiece quic_trial_group, 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Returns true if QUIC time-base loss detection should be negotiated during 3585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the QUIC handshake. 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static bool ShouldEnableQuicTimeBasedLossDetection( 3605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const base::CommandLine& command_line, 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::StringPiece quic_trial_group, 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 3635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if QUIC should always require handshake confirmation during 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the QUIC handshake. 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static bool ShouldQuicAlwaysRequireHandshakeConfirmation( 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const VariationParameters& quic_trial_params); 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns true if QUIC should disable connection pooling. 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static bool ShouldQuicDisableConnectionPooling( 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const VariationParameters& quic_trial_params); 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 373f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Returns the maximum length for QUIC packets, based on any flags in 374f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // |command_line| or the field trial. Returns 0 if there is an error 375f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // parsing any of the options, or if the default value should be used. 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static size_t GetQuicMaxPacketLength( 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::StringPiece quic_trial_group, 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the QUIC versions specified by any flags in |command_line| 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // or |quic_trial_params|. 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static net::QuicVersion GetQuicVersion( 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 386bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the QUIC version specified by |quic_version| or 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // QUIC_VERSION_UNSUPPORTED if |quic_version| is invalid. 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static net::QuicVersion ParseQuicVersion(const std::string& quic_version); 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the QUIC connection options specified by any flags in 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |command_line| or |quic_trial_params|. 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static net::QuicTagVector GetQuicConnectionOptions( 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the list of QUIC tags represented by the comma separated 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // string in |connection_options|. 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static net::QuicTagVector ParseQuicConnectionOptions( 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& connection_options); 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns the alternate protocol probability threshold specified by 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // any flags in |command_line| or |quic_trial_params|. 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static double GetAlternateProtocolProbabilityThreshold( 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::CommandLine& command_line, 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const VariationParameters& quic_trial_params); 4075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The NetLog is owned by the browser process, to allow logging from other 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // threads during shutdown, but is used most frequently on the IOThread. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeNetLog* net_log_; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#if defined(ENABLE_EXTENSIONS) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The extensions::EventRouterForwarder allows for sending events to 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions from the IOThread. 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extensions::EventRouterForwarder* extension_event_router_forwarder_; 4165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These member variables are basically global, but their lifetimes are tied 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to the IOThread. IOThread owns them all, despite not using scoped_ptr. 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is because the destructor of IOThread runs on the wrong thread. All 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // member variables should be deleted in CleanUp(). 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These member variables are initialized in Init() and do not change for the 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // lifetime of the IO thread. 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Globals* globals_; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observer that logs network changes to the ChromeNetLog. 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class LoggingNetworkChangeObserver; 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<LoggingNetworkChangeObserver> network_change_observer_; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BooleanPrefMember system_enable_referrers_; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BooleanPrefMember dns_client_enabled_; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BooleanPrefMember quick_check_enabled_; 4375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Store HTTP Auth-related policies in this thread. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string auth_schemes_; 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool negotiate_disable_cname_lookup_; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool negotiate_enable_port_; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string auth_server_whitelist_; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string auth_delegate_whitelist_; 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string gssapi_library_name_; 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is an instance of the default SSLConfigServiceManager for the current 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // platform and it gets SSL preferences from local_state object. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<SSLConfigServiceManager> ssl_config_service_manager_; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These member variables are initialized by a task posted to the IO thread, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // which gets posted by calling certain member functions of IOThread. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<net::ProxyConfigService> system_proxy_config_service_; 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 454ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_; 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<net::URLRequestContextGetter> 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_url_request_context_getter_; 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // True if SPDY is disabled by policy. 4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_spdy_disabled_by_policy_; 4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch const base::TimeTicks creation_time_; 463e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::WeakPtrFactory<IOThread> weak_factory_; 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(IOThread); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_IO_THREAD_H_ 470