[email protected] | 4617d2da | 2012-01-13 20:46:49 | [diff] [blame] | 1 | // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef CHROME_BROWSER_IO_THREAD_H_ |
| 6 | #define CHROME_BROWSER_IO_THREAD_H_ |
| 7 | |
avi | 6846aef | 2015-12-26 01:09:38 | [diff] [blame] | 8 | #include <stddef.h> |
| 9 | #include <stdint.h> |
| 10 | |
tbansal | b177b539 | 2015-06-25 11:13:02 | [diff] [blame] | 11 | #include <map> |
dcheng | 4af4858 | 2016-04-19 00:29:35 | [diff] [blame] | 12 | #include <memory> |
bnc | a580cbcf4 | 2015-08-17 17:21:19 | [diff] [blame] | 13 | #include <set> |
[email protected] | bcefe0f | 2010-11-10 16:19:10 | [diff] [blame] | 14 | #include <string> |
rch | 74da0e1a | 2016-01-14 02:49:32 | [diff] [blame] | 15 | #include <unordered_set> |
[email protected] | d0389f6 | 2013-11-08 06:06:13 | [diff] [blame] | 16 | #include <vector> |
[email protected] | c38831a1 | 2011-10-28 12:44:49 | [diff] [blame] | 17 | |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 18 | #include "base/compiler_specific.h" |
avi | 6846aef | 2015-12-26 01:09:38 | [diff] [blame] | 19 | #include "base/macros.h" |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 20 | #include "base/memory/ref_counted.h" |
[email protected] | 21ee224e | 2011-11-21 02:17:53 | [diff] [blame] | 21 | #include "base/memory/weak_ptr.h" |
bnc | e3553d9 | 2014-10-30 22:29:45 | [diff] [blame] | 22 | #include "base/strings/string_piece.h" |
avi | 6846aef | 2015-12-26 01:09:38 | [diff] [blame] | 23 | #include "build/build_config.h" |
[email protected] | a702da7 | 2014-07-09 05:23:54 | [diff] [blame] | 24 | #include "chrome/browser/net/chrome_network_delegate.h" |
mmenke | f73a512 | 2017-07-13 23:27:39 | [diff] [blame] | 25 | #include "chrome/browser/net/system_network_context_manager.h" |
Ryan Sleevi | 4689ad3 | 2018-04-16 19:09:05 | [diff] [blame] | 26 | #include "chrome/browser/ssl/ssl_config_service_manager.h" |
Scott Violet | 6200d33 | 2018-02-23 21:29:23 | [diff] [blame] | 27 | #include "chrome/common/buildflags.h" |
rajendrant | 14a5a85 | 2016-11-17 17:58:48 | [diff] [blame] | 28 | #include "components/metrics/data_use_tracker.h" |
brettw | b1fc1b8 | 2016-02-02 00:19:08 | [diff] [blame] | 29 | #include "components/prefs/pref_member.h" |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 30 | #include "content/public/browser/browser_thread.h" |
| 31 | #include "content/public/browser/browser_thread_delegate.h" |
Scott Violet | c8240b0 | 2018-03-08 22:03:59 | [diff] [blame] | 32 | #include "extensions/buildflags/buildflags.h" |
[email protected] | 58bc704 | 2010-07-07 18:04:14 | [diff] [blame] | 33 | #include "net/base/network_change_notifier.h" |
Ken Rockot | 54311e6 | 2018-02-10 19:01:52 | [diff] [blame] | 34 | #include "services/network/public/mojom/network_service.mojom.h" |
John Abd-El-Malek | 4556c6b0 | 2018-02-01 22:11:23 | [diff] [blame] | 35 | #include "services/network/url_request_context_owner.h" |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 36 | |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 37 | class PrefRegistrySimple; |
Matt Menke | d2a43b3 | 2017-12-04 23:30:16 | [diff] [blame] | 38 | class PrefService; |
Matt Menke | 21b9cc6 | 2017-08-23 15:45:45 | [diff] [blame] | 39 | class SystemNetworkContextManager; |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 40 | |
zpeng | db4a58e | 2017-01-10 17:40:32 | [diff] [blame] | 41 | #if defined(OS_ANDROID) |
tbansal | 41fc4b7 | 2015-11-09 22:19:28 | [diff] [blame] | 42 | namespace android { |
| 43 | class ExternalDataUseObserver; |
| 44 | } |
zpeng | db4a58e | 2017-01-10 17:40:32 | [diff] [blame] | 45 | #endif // defined(OS_ANDROID) |
tbansal | 41fc4b7 | 2015-11-09 22:19:28 | [diff] [blame] | 46 | |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 47 | namespace certificate_transparency { |
| 48 | class TreeStateTracker; |
Ryan Sleevi | 6d00e4f3 | 2018-04-06 23:45:51 | [diff] [blame] | 49 | class STHObserver; |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 50 | } |
| 51 | |
[email protected] | 7613faae | 2012-04-18 01:01:19 | [diff] [blame] | 52 | namespace chrome_browser_net { |
[email protected] | 4588b3d | 2012-11-14 00:37:38 | [diff] [blame] | 53 | class DnsProbeService; |
[email protected] | 7613faae | 2012-04-18 01:01:19 | [diff] [blame] | 54 | } |
| 55 | |
sclittle | 3f98c6c | 2015-11-19 22:59:29 | [diff] [blame] | 56 | namespace data_usage { |
| 57 | class DataUseAggregator; |
| 58 | } |
| 59 | |
kundaji | f617523b | 2016-09-09 22:41:24 | [diff] [blame] | 60 | namespace data_use_measurement { |
| 61 | class ChromeDataUseAscriber; |
| 62 | } |
| 63 | |
[email protected] | 5a38dfd | 2012-07-23 23:22:10 | [diff] [blame] | 64 | namespace extensions { |
| 65 | class EventRouterForwarder; |
| 66 | } |
| 67 | |
[email protected] | d13c327 | 2010-02-04 00:24:51 | [diff] [blame] | 68 | namespace net { |
Rob Percival | 5c442f8 | 2018-03-28 22:10:57 | [diff] [blame] | 69 | class CertVerifier; |
eranm | 1a79db2 | 2015-11-24 10:56:49 | [diff] [blame] | 70 | class CTLogVerifier; |
[email protected] | 1889dc1b | 2010-10-14 22:03:13 | [diff] [blame] | 71 | class HostResolver; |
mmenke | c2af595 | 2017-06-07 23:26:47 | [diff] [blame] | 72 | class HttpAuthHandlerFactory; |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 73 | class HttpAuthPreferences; |
tbansal | ea2fb8c | 2015-05-22 22:23:00 | [diff] [blame] | 74 | class NetworkQualityEstimator; |
tbansal | 1bd4a95 | 2017-06-06 23:01:46 | [diff] [blame] | 75 | class RTTAndThroughputEstimatesObserver; |
[email protected] | 2fb62920 | 2010-12-23 23:52:57 | [diff] [blame] | 76 | class SSLConfigService; |
[email protected] | 27a112c | 2011-01-06 04:19:30 | [diff] [blame] | 77 | class URLRequestContext; |
[email protected] | abe2c03 | 2011-03-31 18:49:34 | [diff] [blame] | 78 | class URLRequestContextGetter; |
[email protected] | d13c327 | 2010-02-04 00:24:51 | [diff] [blame] | 79 | } // namespace net |
| 80 | |
droger | c690e880 | 2015-09-21 14:29:16 | [diff] [blame] | 81 | namespace net_log { |
| 82 | class ChromeNetLog; |
| 83 | } |
| 84 | |
John Abd-El-Malek | 3bbbdf9 | 2018-01-30 03:27:35 | [diff] [blame] | 85 | namespace network { |
| 86 | class URLRequestContextBuilderMojo; |
| 87 | } |
| 88 | |
[email protected] | 7730542 | 2012-11-29 16:51:39 | [diff] [blame] | 89 | namespace policy { |
| 90 | class PolicyService; |
| 91 | } // namespace policy |
| 92 | |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 93 | // Contains state associated with, initialized and cleaned up on, and |
[email protected] | dd48370 | 2011-12-02 14:47:42 | [diff] [blame] | 94 | // primarily used on, the IO thread. |
[email protected] | c92b861 | 2011-12-13 22:18:59 | [diff] [blame] | 95 | // |
| 96 | // If you are looking to interact with the IO thread (e.g. post tasks |
| 97 | // to it or check if it is the current thread), see |
| 98 | // content::BrowserThread. |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 99 | class IOThread : public content::BrowserThreadDelegate { |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 100 | public: |
[email protected] | d13c327 | 2010-02-04 00:24:51 | [diff] [blame] | 101 | struct Globals { |
[email protected] | c93123fa | 2012-04-19 02:49:48 | [diff] [blame] | 102 | class SystemRequestContextLeakChecker { |
| 103 | public: |
| 104 | explicit SystemRequestContextLeakChecker(Globals* globals); |
| 105 | ~SystemRequestContextLeakChecker(); |
| 106 | |
| 107 | private: |
| 108 | Globals* const globals_; |
| 109 | }; |
| 110 | |
[email protected] | 1889dc1b | 2010-10-14 22:03:13 | [diff] [blame] | 111 | Globals(); |
| 112 | ~Globals(); |
| 113 | |
John Abd-El-Malek | deec008 | 2017-12-20 20:47:47 | [diff] [blame] | 114 | bool quic_disabled = false; |
mmenke | f73a512 | 2017-07-13 23:27:39 | [diff] [blame] | 115 | |
kundaji | f617523b | 2016-09-09 22:41:24 | [diff] [blame] | 116 | // Ascribes all data use in Chrome to a source, such as page loads. |
| 117 | std::unique_ptr<data_use_measurement::ChromeDataUseAscriber> |
| 118 | data_use_ascriber; |
sclittle | 3f98c6c | 2015-11-19 22:59:29 | [diff] [blame] | 119 | // Global aggregator of data use. It must outlive the |
| 120 | // |system_network_delegate|. |
dcheng | 4af4858 | 2016-04-19 00:29:35 | [diff] [blame] | 121 | std::unique_ptr<data_usage::DataUseAggregator> data_use_aggregator; |
zpeng | db4a58e | 2017-01-10 17:40:32 | [diff] [blame] | 122 | #if defined(OS_ANDROID) |
sclittle | 3f98c6c | 2015-11-19 22:59:29 | [diff] [blame] | 123 | // An external observer of data use. |
cm.sanchi | c0fc634 | 2017-11-28 03:59:29 | [diff] [blame] | 124 | std::unique_ptr<android::ExternalDataUseObserver> |
sclittle | 3f98c6c | 2015-11-19 22:59:29 | [diff] [blame] | 125 | external_data_use_observer; |
zpeng | db4a58e | 2017-01-10 17:40:32 | [diff] [blame] | 126 | #endif // defined(OS_ANDROID) |
eranm | 1a79db2 | 2015-11-24 10:56:49 | [diff] [blame] | 127 | std::vector<scoped_refptr<const net::CTLogVerifier>> ct_logs; |
dcheng | 4af4858 | 2016-04-19 00:29:35 | [diff] [blame] | 128 | std::unique_ptr<net::HttpAuthPreferences> http_auth_preferences; |
Matt Menke | d9ec7077b | 2018-02-28 01:13:36 | [diff] [blame] | 129 | |
Matt Menke | abb7a38 | 2018-03-23 18:25:23 | [diff] [blame] | 130 | // NetworkQualityEstimator only for use in dummy in-process |
| 131 | // URLRequestContext when network service is enabled. |
| 132 | // TODO(mmenke): Remove this, once all consumers only access the |
| 133 | // NetworkQualityEstimator through network service APIs. Then will no longer |
| 134 | // need to create an in-process one. |
| 135 | std::unique_ptr<net::NetworkQualityEstimator> |
| 136 | deprecated_network_quality_estimator; |
| 137 | |
Matt Menke | d9ec7077b | 2018-02-28 01:13:36 | [diff] [blame] | 138 | std::unique_ptr<net::RTTAndThroughputEstimatesObserver> |
| 139 | network_quality_observer; |
| 140 | |
John Abd-El-Malek | deec008 | 2017-12-20 20:47:47 | [diff] [blame] | 141 | // When the network service is enabled, this holds on to a |
| 142 | // content::NetworkContext class that owns |system_request_context|. |
John Abd-El-Malek | 53670dd | 2018-01-18 22:07:21 | [diff] [blame] | 143 | std::unique_ptr<network::mojom::NetworkContext> system_network_context; |
John Abd-El-Malek | deec008 | 2017-12-20 20:47:47 | [diff] [blame] | 144 | // When the network service is disabled, this owns |system_request_context|. |
John Abd-El-Malek | 3bbbdf9 | 2018-01-30 03:27:35 | [diff] [blame] | 145 | network::URLRequestContextOwner system_request_context_owner; |
mmenke | f73a512 | 2017-07-13 23:27:39 | [diff] [blame] | 146 | net::URLRequestContext* system_request_context; |
brettw | 00899e6 | 2016-11-12 02:10:17 | [diff] [blame] | 147 | #if BUILDFLAG(ENABLE_EXTENSIONS) |
[email protected] | 5a38dfd | 2012-07-23 23:22:10 | [diff] [blame] | 148 | scoped_refptr<extensions::EventRouterForwarder> |
[email protected] | 3ce0241 | 2011-03-01 12:01:15 | [diff] [blame] | 149 | extension_event_router_forwarder; |
[email protected] | 84b7a55 | 2014-07-19 04:52:06 | [diff] [blame] | 150 | #endif |
[email protected] | 4588b3d | 2012-11-14 00:37:38 | [diff] [blame] | 151 | // NetErrorTabHelper uses |dns_probe_service| to send DNS probes when a |
| 152 | // main frame load fails with a DNS error in order to provide more useful |
| 153 | // information to the renderer so it can show a more specific error page. |
dcheng | 4af4858 | 2016-04-19 00:29:35 | [diff] [blame] | 154 | std::unique_ptr<chrome_browser_net::DnsProbeService> dns_probe_service; |
bnc | 18fb77f | 2016-04-04 20:54:04 | [diff] [blame] | 155 | }; |
| 156 | |
[email protected] | b2fcd0e | 2010-12-01 15:19:40 | [diff] [blame] | 157 | // |net_log| must either outlive the IOThread or be NULL. |
[email protected] | b1de2c7 | 2013-02-06 02:45:47 | [diff] [blame] | 158 | IOThread(PrefService* local_state, |
[email protected] | 7730542 | 2012-11-29 16:51:39 | [diff] [blame] | 159 | policy::PolicyService* policy_service, |
droger | c690e880 | 2015-09-21 14:29:16 | [diff] [blame] | 160 | net_log::ChromeNetLog* net_log, |
Matt Menke | 21b9cc6 | 2017-08-23 15:45:45 | [diff] [blame] | 161 | extensions::EventRouterForwarder* extension_event_router_forwarder, |
| 162 | SystemNetworkContextManager* system_network_context_manager); |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 163 | |
Daniel Cheng | a542fca | 2014-10-21 09:51:29 | [diff] [blame] | 164 | ~IOThread() override; |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 165 | |
[email protected] | 3c319eb | 2013-02-21 14:44:45 | [diff] [blame] | 166 | static void RegisterPrefs(PrefRegistrySimple* registry); |
Rob Percival | 5c442f8 | 2018-03-28 22:10:57 | [diff] [blame] | 167 | static void SetCertVerifierForTesting(net::CertVerifier* cert_verifier); |
[email protected] | 3c319eb | 2013-02-21 14:44:45 | [diff] [blame] | 168 | |
[email protected] | d13c327 | 2010-02-04 00:24:51 | [diff] [blame] | 169 | // Can only be called on the IO thread. |
| 170 | Globals* globals(); |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 171 | |
droger | c690e880 | 2015-09-21 14:29:16 | [diff] [blame] | 172 | net_log::ChromeNetLog* net_log(); |
[email protected] | b2fcd0e | 2010-12-01 15:19:40 | [diff] [blame] | 173 | |
[email protected] | b09f76d6 | 2011-12-07 01:51:06 | [diff] [blame] | 174 | // Handles changing to On The Record mode, discarding confidential data. |
| 175 | void ChangedToOnTheRecord(); |
| 176 | |
[email protected] | db0e86dd | 2011-03-16 14:47:21 | [diff] [blame] | 177 | // Returns a getter for the URLRequestContext. Only called on the UI thread. |
[email protected] | abe2c03 | 2011-03-31 18:49:34 | [diff] [blame] | 178 | net::URLRequestContextGetter* system_url_request_context_getter(); |
[email protected] | db0e86dd | 2011-03-16 14:47:21 | [diff] [blame] | 179 | |
msramek | 94f5656c | 2016-08-31 17:08:29 | [diff] [blame] | 180 | // Clears the host cache. Intended to be used to prevent exposing recently |
[email protected] | 67372ecf | 2011-09-10 01:30:46 | [diff] [blame] | 181 | // visited sites on about:net-internals/#dns and about:dns pages. Must be |
msramek | 94f5656c | 2016-08-31 17:08:29 | [diff] [blame] | 182 | // called on the IO thread. If |host_filter| is not null, only hosts matched |
| 183 | // by it are deleted from the cache. |
| 184 | void ClearHostCache( |
| 185 | const base::Callback<bool(const std::string&)>& host_filter); |
[email protected] | d6f37fc | 2011-02-13 23:58:41 | [diff] [blame] | 186 | |
Matt Menke | cfef87d | 2017-08-03 13:03:06 | [diff] [blame] | 187 | // Dynamically disables QUIC for all NetworkContexts using the IOThread's |
| 188 | // NetworkService. Re-enabling Quic dynamically is not supported for |
| 189 | // simplicity and requires a browser restart. May only be called on the IO |
| 190 | // thread. |
pmarko | 6ab8be24 | 2017-01-11 11:02:55 | [diff] [blame] | 191 | void DisableQuic(); |
| 192 | |
gayane | 0b46091c | 2016-04-07 21:01:05 | [diff] [blame] | 193 | // Returns the callback for updating data use prefs. |
robliao | 7253fd2 | 2016-12-01 18:41:38 | [diff] [blame] | 194 | metrics::UpdateUsagePrefCallbackType GetMetricsDataUseForwarder(); |
gayane | 0b46091c | 2016-04-07 21:01:05 | [diff] [blame] | 195 | |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 196 | // Registers the |observer| for new STH notifications. |
Ryan Sleevi | 6d00e4f3 | 2018-04-06 23:45:51 | [diff] [blame] | 197 | void RegisterSTHObserver(certificate_transparency::STHObserver* observer); |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 198 | |
| 199 | // Un-registers the |observer|. |
Ryan Sleevi | 6d00e4f3 | 2018-04-06 23:45:51 | [diff] [blame] | 200 | void UnregisterSTHObserver(certificate_transparency::STHObserver* observer); |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 201 | |
Lily Houghton | 8c2f97d | 2018-01-22 05:06:59 | [diff] [blame] | 202 | // Configures |builder|'s ProxyResolutionService based on prefs and policies. |
John Abd-El-Malek | 3bbbdf9 | 2018-01-30 03:27:35 | [diff] [blame] | 203 | void SetUpProxyService(network::URLRequestContextBuilderMojo* builder) const; |
mmenke | 1c261ff | 2017-07-23 17:06:35 | [diff] [blame] | 204 | |
Rob Percival | bc658a2 | 2017-12-13 08:24:42 | [diff] [blame] | 205 | certificate_transparency::TreeStateTracker* ct_tree_tracker() const; |
| 206 | |
[email protected] | 2e5b60a2 | 2011-11-28 15:56:41 | [diff] [blame] | 207 | private: |
| 208 | // BrowserThreadDelegate implementation, runs on the IO thread. |
| 209 | // This handles initialization and destruction of state that must |
| 210 | // live on the IO thread. |
Daniel Cheng | a542fca | 2014-10-21 09:51:29 | [diff] [blame] | 211 | void Init() override; |
Daniel Cheng | a542fca | 2014-10-21 09:51:29 | [diff] [blame] | 212 | void CleanUp() override; |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 213 | |
mmenke | c2af595 | 2017-06-07 23:26:47 | [diff] [blame] | 214 | std::unique_ptr<net::HttpAuthHandlerFactory> CreateDefaultAuthHandlerFactory( |
| 215 | net::HostResolver* host_resolver); |
[email protected] | eb3cac7 | 2010-02-26 21:07:45 | [diff] [blame] | 216 | |
[email protected] | 4d45a6de | 2011-05-13 05:20:18 | [diff] [blame] | 217 | // Returns an SSLConfigService instance. |
| 218 | net::SSLConfigService* GetSSLConfigService(); |
| 219 | |
[email protected] | b09f76d6 | 2011-12-07 01:51:06 | [diff] [blame] | 220 | void ChangedToOnTheRecordOnIOThread(); |
| 221 | |
[email protected] | fa4b6c3 | 2012-11-26 23:02:39 | [diff] [blame] | 222 | void UpdateDnsClientEnabled(); |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 223 | void UpdateServerWhitelist(); |
| 224 | void UpdateDelegateWhitelist(); |
| 225 | void UpdateAndroidAuthNegotiateAccountType(); |
| 226 | void UpdateNegotiateDisableCnameLookup(); |
| 227 | void UpdateNegotiateEnablePort(); |
Zentaro Kavanagh | bad511c | 2017-10-18 22:29:00 | [diff] [blame] | 228 | #if defined(OS_POSIX) |
| 229 | void UpdateNtlmV2Enabled(); |
| 230 | #endif |
[email protected] | fa4b6c3 | 2012-11-26 23:02:39 | [diff] [blame] | 231 | |
[email protected] | 84b7a55 | 2014-07-19 04:52:06 | [diff] [blame] | 232 | extensions::EventRouterForwarder* extension_event_router_forwarder() { |
brettw | 00899e6 | 2016-11-12 02:10:17 | [diff] [blame] | 233 | #if BUILDFLAG(ENABLE_EXTENSIONS) |
[email protected] | 84b7a55 | 2014-07-19 04:52:06 | [diff] [blame] | 234 | return extension_event_router_forwarder_; |
| 235 | #else |
| 236 | return NULL; |
| 237 | #endif |
| 238 | } |
mmenke | f2e53b2 | 2017-05-15 18:40:18 | [diff] [blame] | 239 | void ConstructSystemRequestContext(); |
wjmaclean | ea309f7 | 2015-08-25 20:56:59 | [diff] [blame] | 240 | |
[email protected] | b2fcd0e | 2010-12-01 15:19:40 | [diff] [blame] | 241 | // The NetLog is owned by the browser process, to allow logging from other |
| 242 | // threads during shutdown, but is used most frequently on the IOThread. |
droger | c690e880 | 2015-09-21 14:29:16 | [diff] [blame] | 243 | net_log::ChromeNetLog* net_log_; |
[email protected] | b2fcd0e | 2010-12-01 15:19:40 | [diff] [blame] | 244 | |
brettw | 00899e6 | 2016-11-12 02:10:17 | [diff] [blame] | 245 | #if BUILDFLAG(ENABLE_EXTENSIONS) |
[email protected] | 5a38dfd | 2012-07-23 23:22:10 | [diff] [blame] | 246 | // The extensions::EventRouterForwarder allows for sending events to |
| 247 | // extensions from the IOThread. |
| 248 | extensions::EventRouterForwarder* extension_event_router_forwarder_; |
[email protected] | 84b7a55 | 2014-07-19 04:52:06 | [diff] [blame] | 249 | #endif |
[email protected] | 3ce0241 | 2011-03-01 12:01:15 | [diff] [blame] | 250 | |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 251 | // These member variables are basically global, but their lifetimes are tied |
| 252 | // to the IOThread. IOThread owns them all, despite not using scoped_ptr. |
| 253 | // This is because the destructor of IOThread runs on the wrong thread. All |
[email protected] | b2fcd0e | 2010-12-01 15:19:40 | [diff] [blame] | 254 | // member variables should be deleted in CleanUp(). |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 255 | |
[email protected] | d13c327 | 2010-02-04 00:24:51 | [diff] [blame] | 256 | // These member variables are initialized in Init() and do not change for the |
| 257 | // lifetime of the IO thread. |
| 258 | |
| 259 | Globals* globals_; |
| 260 | |
eranm | 3c2d643 | 2016-06-01 10:17:27 | [diff] [blame] | 261 | std::unique_ptr<certificate_transparency::TreeStateTracker> ct_tree_tracker_; |
| 262 | |
[email protected] | 0a8db0d | 2011-04-13 15:15:40 | [diff] [blame] | 263 | BooleanPrefMember system_enable_referrers_; |
| 264 | |
[email protected] | fa4b6c3 | 2012-11-26 23:02:39 | [diff] [blame] | 265 | BooleanPrefMember dns_client_enabled_; |
| 266 | |
Brad Lassey | 786929ad | 2018-02-21 20:54:27 | [diff] [blame] | 267 | StringListPrefMember dns_over_https_servers_; |
| 268 | |
| 269 | StringListPrefMember dns_over_https_server_methods_; |
| 270 | |
[email protected] | bcefe0f | 2010-11-10 16:19:10 | [diff] [blame] | 271 | // Store HTTP Auth-related policies in this thread. |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 272 | // TODO(aberent) Make the list of auth schemes a PrefMember, so that the |
| 273 | // policy can change after startup (https://crbug/549273). |
[email protected] | bcefe0f | 2010-11-10 16:19:10 | [diff] [blame] | 274 | std::string auth_schemes_; |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 275 | BooleanPrefMember negotiate_disable_cname_lookup_; |
| 276 | BooleanPrefMember negotiate_enable_port_; |
Zentaro Kavanagh | bad511c | 2017-10-18 22:29:00 | [diff] [blame] | 277 | #if defined(OS_POSIX) |
| 278 | BooleanPrefMember ntlm_v2_enabled_; |
| 279 | #endif |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 280 | StringPrefMember auth_server_whitelist_; |
| 281 | StringPrefMember auth_delegate_whitelist_; |
| 282 | |
| 283 | #if defined(OS_ANDROID) |
| 284 | StringPrefMember auth_android_negotiate_account_type_; |
| 285 | #endif |
Lutz Justen | 9edd41e5 | 2017-09-29 04:53:08 | [diff] [blame] | 286 | #if defined(OS_POSIX) && !defined(OS_ANDROID) && !defined(OS_CHROMEOS) |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 287 | // No PrefMember for the GSSAPI library name, since changing it after startup |
| 288 | // requires unloading the existing GSSAPI library, which could cause all sorts |
| 289 | // of problems for, for example, active Negotiate transactions. |
[email protected] | ac7f3fdb | 2010-11-12 12:47:05 | [diff] [blame] | 290 | std::string gssapi_library_name_; |
aberent | bba302d | 2015-12-03 10:20:19 | [diff] [blame] | 291 | #endif |
[email protected] | bcefe0f | 2010-11-10 16:19:10 | [diff] [blame] | 292 | |
zentaro | e032635 | 2017-05-09 13:11:51 | [diff] [blame] | 293 | #if defined(OS_CHROMEOS) |
| 294 | bool allow_gssapi_library_load_; |
| 295 | #endif |
| 296 | |
mmenke | f73a512 | 2017-07-13 23:27:39 | [diff] [blame] | 297 | // These are set on the UI thread, and then consumed during initialization on |
| 298 | // the IO thread. |
John Abd-El-Malek | 53670dd | 2018-01-18 22:07:21 | [diff] [blame] | 299 | network::mojom::NetworkContextRequest network_context_request_; |
| 300 | network::mojom::NetworkContextParamsPtr network_context_params_; |
mmenke | f73a512 | 2017-07-13 23:27:39 | [diff] [blame] | 301 | |
[email protected] | 4d45a6de | 2011-05-13 05:20:18 | [diff] [blame] | 302 | // This is an instance of the default SSLConfigServiceManager for the current |
| 303 | // platform and it gets SSL preferences from local_state object. |
Ryan Sleevi | 4689ad3 | 2018-04-16 19:09:05 | [diff] [blame] | 304 | std::unique_ptr<SSLConfigServiceManager> ssl_config_service_manager_; |
[email protected] | 4d45a6de | 2011-05-13 05:20:18 | [diff] [blame] | 305 | |
[email protected] | abe2c03 | 2011-03-31 18:49:34 | [diff] [blame] | 306 | scoped_refptr<net::URLRequestContextGetter> |
| 307 | system_url_request_context_getter_; |
[email protected] | db0e86dd | 2011-03-16 14:47:21 | [diff] [blame] | 308 | |
Matt Menke | cfef87d | 2017-08-03 13:03:06 | [diff] [blame] | 309 | // True if QUIC is initially enabled. |
| 310 | bool is_quic_allowed_on_init_; |
peletskyi | 5df83d4 | 2015-04-30 16:37:46 | [diff] [blame] | 311 | |
mohan.reddy | 14cb4ad4 | 2014-09-17 18:15:14 | [diff] [blame] | 312 | base::WeakPtrFactory<IOThread> weak_factory_; |
| 313 | |
[email protected] | 0ac8368 | 2010-01-22 17:46:27 | [diff] [blame] | 314 | DISALLOW_COPY_AND_ASSIGN(IOThread); |
| 315 | }; |
| 316 | |
[email protected] | fa55e19 | 2010-02-15 14:25:50 | [diff] [blame] | 317 | #endif // CHROME_BROWSER_IO_THREAD_H_ |