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

Unified Diff: ios/chrome/browser/ios_chrome_io_thread.h

Issue 1464083002: Upstream IOSChromeIOThread to hold data primarily used on IO thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: git cl upload --similarity=30 Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: ios/chrome/browser/ios_chrome_io_thread.h
diff --git a/chrome/browser/io_thread.h b/ios/chrome/browser/ios_chrome_io_thread.h
similarity index 60%
copy from chrome/browser/io_thread.h
copy to ios/chrome/browser/ios_chrome_io_thread.h
index 41c042fe8ac9fd2e3c84bae2927a22e1a268c699..3dfe1ea6f08936315940683a0c9352e0c081c60c 100644
--- a/chrome/browser/io_thread.h
+++ b/ios/chrome/browser/ios_chrome_io_thread.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_IO_THREAD_H_
-#define CHROME_BROWSER_IO_THREAD_H_
+#ifndef IOS_CHROME_BROWSER_IOS_CHROME_IO_THREAD_H_
+#define IOS_CHROME_BROWSER_IOS_CHROME_IO_THREAD_H_
#include <map>
#include <set>
@@ -18,42 +18,19 @@
#include "base/prefs/pref_member.h"
#include "base/strings/string_piece.h"
#include "base/time/time.h"
-#include "chrome/browser/net/chrome_network_delegate.h"
#include "components/ssl_config/ssl_config_service_manager.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/browser_thread_delegate.h"
+#include "ios/web/public/web_thread_delegate.h"
#include "net/base/network_change_notifier.h"
#include "net/http/http_network_session.h"
#include "net/socket/next_proto.h"
class PrefProxyConfigTracker;
class PrefService;
-class PrefRegistrySimple;
class SystemURLRequestContextGetter;
namespace base {
class CommandLine;
-}
-
-#if defined(OS_ANDROID)
-namespace chrome {
-namespace android {
-class ExternalDataUseObserver;
-}
-}
-#endif // defined(OS_ANDROID)
-
-namespace chrome_browser_net {
-class DnsProbeService;
-}
-
-namespace data_usage {
-class DataUseAggregator;
-}
-
-namespace extensions {
-class EventRouterForwarder;
-}
+} // namespace base
namespace net {
class CertPolicyEnforcer;
@@ -61,8 +38,6 @@ class CertVerifier;
class ChannelIDService;
class CookieStore;
class CTVerifier;
-class FtpTransactionFactory;
-class HostMappingRules;
class HostResolver;
class HttpAuthHandlerFactory;
class HttpNetworkSession;
@@ -84,23 +59,14 @@ class URLSecurityManager;
namespace net_log {
class ChromeNetLog;
-}
-
-namespace policy {
-class PolicyService;
-} // namespace policy
-
-namespace test {
-class IOThreadPeer;
-} // namespace test
+} // namespace net_log
// Contains state associated with, initialized and cleaned up on, and
// primarily used on, the IO thread.
//
// If you are looking to interact with the IO thread (e.g. post tasks
-// to it or check if it is the current thread), see
-// content::BrowserThread.
-class IOThread : public content::BrowserThreadDelegate {
+// to it or check if it is the current thread), see web::WebThread.
+class IOSChromeIOThread : public web::WebThreadDelegate {
public:
struct Globals {
template <typename T>
@@ -135,15 +101,8 @@ class IOThread : public content::BrowserThreadDelegate {
Globals();
~Globals();
- // Global aggregator of data use. It must outlive the
- // |system_network_delegate|.
- scoped_ptr<data_usage::DataUseAggregator> data_use_aggregator;
-#if defined(OS_ANDROID)
- // An external observer of data use.
- scoped_ptr<chrome::android::ExternalDataUseObserver>
- external_data_use_observer;
-#endif // defined(OS_ANDROID)
- // The "system" NetworkDelegate, used for Profile-agnostic network events.
+ // The "system" NetworkDelegate, used for BrowserState-agnostic network
+ // events.
scoped_ptr<net::NetworkDelegate> system_network_delegate;
scoped_ptr<net::HostResolver> host_resolver;
scoped_ptr<net::CertVerifier> cert_verifier;
@@ -158,41 +117,17 @@ class IOThread : public content::BrowserThreadDelegate {
scoped_refptr<net::SSLConfigService> ssl_config_service;
scoped_ptr<net::HttpAuthHandlerFactory> http_auth_handler_factory;
scoped_ptr<net::HttpServerProperties> http_server_properties;
- scoped_ptr<net::ProxyService> proxy_script_fetcher_proxy_service;
- scoped_ptr<net::HttpNetworkSession>
- proxy_script_fetcher_http_network_session;
- scoped_ptr<net::HttpTransactionFactory>
- proxy_script_fetcher_http_transaction_factory;
- scoped_ptr<net::FtpTransactionFactory>
- proxy_script_fetcher_ftp_transaction_factory;
- scoped_ptr<net::URLRequestJobFactory>
- proxy_script_fetcher_url_request_job_factory;
scoped_ptr<net::URLRequestBackoffManager> url_request_backoff_manager;
scoped_ptr<net::URLSecurityManager> url_security_manager;
- // TODO(willchan): Remove proxy script fetcher context since it's not
- // necessary now that I got rid of refcounting URLRequestContexts.
- //
- // The first URLRequestContext is |system_url_request_context|. We introduce
- // |proxy_script_fetcher_context| for the second context. It has a direct
- // ProxyService, since we always directly connect to fetch the PAC script.
- scoped_ptr<net::URLRequestContext> proxy_script_fetcher_context;
scoped_ptr<net::ProxyService> system_proxy_service;
scoped_ptr<net::HttpNetworkSession> system_http_network_session;
scoped_ptr<net::HttpTransactionFactory> system_http_transaction_factory;
scoped_ptr<net::URLRequestJobFactory> system_url_request_job_factory;
scoped_ptr<net::URLRequestContext> system_request_context;
SystemRequestContextLeakChecker system_request_context_leak_checker;
- // |system_cookie_store| and |system_channel_id_service| are shared
- // between |proxy_script_fetcher_context| and |system_request_context|.
scoped_refptr<net::CookieStore> system_cookie_store;
-#if defined(ENABLE_EXTENSIONS)
- scoped_refptr<extensions::EventRouterForwarder>
- extension_event_router_forwarder;
-#endif
- scoped_ptr<net::HostMappingRules> host_mapping_rules;
scoped_ptr<net::HttpUserAgentSettings> http_user_agent_settings;
scoped_ptr<net::NetworkQualityEstimator> network_quality_estimator;
- bool ignore_certificate_errors;
uint16 testing_fixed_http_port;
uint16 testing_fixed_https_port;
Optional<bool> enable_tcp_fast_open_for_ssl;
@@ -200,9 +135,7 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<size_t> initial_max_spdy_concurrent_streams;
Optional<bool> enable_spdy_compression;
Optional<bool> enable_spdy_ping_based_connection_checking;
- Optional<net::NextProto> spdy_default_protocol;
net::NextProtoVector next_protos;
- Optional<std::string> trusted_spdy_proxy;
std::set<net::HostPortPair> forced_spdy_exclusions;
Optional<bool> use_alternative_services;
Optional<double> alternative_service_probability_threshold;
@@ -211,7 +144,6 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<bool> enable_quic;
Optional<bool> enable_quic_for_proxies;
- Optional<bool> enable_quic_port_selection;
Optional<bool> quic_always_require_handshake_confirmation;
Optional<bool> quic_disable_connection_pooling;
Optional<float> quic_load_server_info_timeout_srtt_multiplier;
@@ -227,31 +159,20 @@ class IOThread : public content::BrowserThreadDelegate {
net::QuicTagVector quic_connection_options;
Optional<std::string> quic_user_agent_id;
Optional<net::QuicVersionVector> quic_supported_versions;
- Optional<net::HostPortPair> origin_to_force_quic_on;
Optional<bool> quic_close_sessions_on_ip_change;
- bool enable_user_alternate_protocol_ports;
- // NetErrorTabHelper uses |dns_probe_service| to send DNS probes when a
- // main frame load fails with a DNS error in order to provide more useful
- // information to the renderer so it can show a more specific error page.
- scoped_ptr<chrome_browser_net::DnsProbeService> dns_probe_service;
};
- // |net_log| must either outlive the IOThread or be NULL.
- IOThread(PrefService* local_state,
- policy::PolicyService* policy_service,
- net_log::ChromeNetLog* net_log,
- extensions::EventRouterForwarder* extension_event_router_forwarder);
+ // |net_log| must either outlive the IOSChromeIOThread or be NULL.
+ IOSChromeIOThread(PrefService* local_state, net_log::ChromeNetLog* net_log);
- ~IOThread() override;
-
- static void RegisterPrefs(PrefRegistrySimple* registry);
+ ~IOSChromeIOThread() override;
// Can only be called on the IO thread.
Globals* globals();
- // Allows overriding Globals in tests where IOThread::Init() and
- // IOThread::CleanUp() are not called. This allows for injecting mocks into
- // IOThread global objects.
+ // Allows overriding Globals in tests where IOSChromeIOThread::Init() and
+ // IOSChromeIOThread::CleanUp() are not called. This allows for injecting
+ // mocks into IOSChromeIOThread global objects.
void SetGlobalsForTesting(Globals* globals);
net_log::ChromeNetLog* net_log();
@@ -271,8 +192,8 @@ class IOThread : public content::BrowserThreadDelegate {
base::TimeTicks creation_time() const;
- // Returns true if QUIC should be enabled for data reduction proxy, either as
- // a result of a field trial or a command line flag.
+ // Returns true if QUIC should be enabled for data reduction proxy as a result
+ // of a field trial.
static bool ShouldEnableQuicForDataReductionProxy();
private:
@@ -283,12 +204,11 @@ class IOThread : public content::BrowserThreadDelegate {
// InitSystemRequestContext().
friend class SystemURLRequestContextGetter;
- friend class test::IOThreadPeer;
-
- // BrowserThreadDelegate implementation, runs on the IO thread.
+ // WebThreadDelegate implementation, runs on the IO thread.
// This handles initialization and destruction of state that must
// live on the IO thread.
void Init() override;
+ void InitAsync() override;
void CleanUp() override;
// Initializes |params| based on the settings in |globals|.
@@ -296,16 +216,15 @@ class IOThread : public content::BrowserThreadDelegate {
const Globals& globals,
net::HttpNetworkSession::Params* params);
- void InitializeNetworkOptions(const base::CommandLine& parsed_command_line);
+ void InitializeNetworkOptions();
- // Sets up TCP FastOpen if enabled via field trials or via the command line.
- void ConfigureTCPFastOpen(const base::CommandLine& command_line);
+ // Sets up SSL TCP FastOpen if enabled via field trials.
+ void ConfigureSSLTCPFastOpen();
- // Configures available SPDY protocol versions in |globals| based on the flags
- // in |command_lin| as well as SPDY field trial group and parameters. Must be
- // called after ConfigureQuicGlobals.
- static void ConfigureSpdyGlobals(const base::CommandLine& command_line,
- base::StringPiece quic_trial_group,
+ // Configures available SPDY protocol versions in |globals| based on the SPDY
+ // field trial group and parameters.
+ // Must be called after ConfigureQuicGlobals.
+ static void ConfigureSpdyGlobals(base::StringPiece quic_trial_group,
const VariationParameters& quic_trial_params,
Globals* globals);
@@ -331,49 +250,22 @@ class IOThread : public content::BrowserThreadDelegate {
void ChangedToOnTheRecordOnIOThread();
- void UpdateDnsClientEnabled();
-
- // Configures QUIC options based on the flags in |command_line| as
- // well as the QUIC field trial group.
- void ConfigureQuic(const base::CommandLine& command_line);
+ // Configures QUIC options based on the QUIC field trial group.
+ void ConfigureQuic();
- extensions::EventRouterForwarder* extension_event_router_forwarder() {
-#if defined(ENABLE_EXTENSIONS)
- return extension_event_router_forwarder_;
-#else
- return NULL;
-#endif
- }
// Configures QUIC options in |globals| based on the flags in |command_line|
- // as well as the QUIC field trial group and parameters. Must be called
- // before ConfigureSpdyGlobals.
- static void ConfigureQuicGlobals(
- const base::CommandLine& command_line,
- base::StringPiece quic_trial_group,
- const VariationParameters& quic_trial_params,
- bool quic_allowed_by_policy,
- Globals* globals);
-
- // Returns true if QUIC should be enabled, either as a result
- // of a field trial or a command line flag.
- static bool ShouldEnableQuic(
- const base::CommandLine& command_line,
- base::StringPiece quic_trial_group,
- bool quic_allowed_by_policy);
-
- // Returns true if QUIC should be enabled for proxies, either as a result
- // of a field trial or a command line flag.
- static bool ShouldEnableQuicForProxies(
- const base::CommandLine& command_line,
- base::StringPiece quic_trial_group,
- bool quic_allowed_by_policy);
-
- // Returns true if the selection of the ephemeral port in bind() should be
- // performed by Chromium, and false if the OS should select the port. The OS
- // option is used to prevent Windows from posting a security security warning
- // dialog.
- static bool ShouldEnableQuicPortSelection(
- const base::CommandLine& command_line);
+ // as well as the QUIC field trial group and parameters.
+ // Must be called before ConfigureSpdyGlobals.
+ static void ConfigureQuicGlobals(base::StringPiece quic_trial_group,
+ const VariationParameters& quic_trial_params,
+ Globals* globals);
+
+ // Returns true if QUIC should be enabled as a result of a field trial.
+ static bool ShouldEnableQuic(base::StringPiece quic_trial_group);
+
+ // Returns true if QUIC should be enabled for proxies as a result of a
+ // field trial.
+ static bool ShouldEnableQuicForProxies(base::StringPiece quic_trial_group);
// Returns true if QUIC should always require handshake confirmation during
// the QUIC handshake.
@@ -408,7 +300,6 @@ class IOThread : public content::BrowserThreadDelegate {
// Returns true if QUIC should enable alternative services.
static bool ShouldQuicEnableAlternativeServices(
- const base::CommandLine& command_line,
const VariationParameters& quic_trial_params);
// Returns the maximum number of QUIC connections with high packet loss in a
@@ -437,17 +328,14 @@ class IOThread : public content::BrowserThreadDelegate {
static bool ShouldQuicCloseSessionsOnIpChange(
const VariationParameters& quic_trial_params);
- // Returns the maximum length for QUIC packets, based on any flags in
- // |command_line| or the field trial. Returns 0 if there is an error
- // parsing any of the options, or if the default value should be used.
+ // Returns the maximum length for QUIC packets, based on any flags in the
+ // field trial. Returns 0 if there is an error parsing any of the options,
+ // or if the default value should be used.
static size_t GetQuicMaxPacketLength(
- const base::CommandLine& command_line,
const VariationParameters& quic_trial_params);
- // Returns the QUIC versions specified by any flags in |command_line|
- // or |quic_trial_params|.
+ // Returns the QUIC versions specified by any flags in |quic_trial_params|.
static net::QuicVersion GetQuicVersion(
- const base::CommandLine& command_line,
const VariationParameters& quic_trial_params);
// Returns the QUIC version specified by |quic_version| or
@@ -455,42 +343,27 @@ class IOThread : public content::BrowserThreadDelegate {
static net::QuicVersion ParseQuicVersion(const std::string& quic_version);
// Returns the QUIC connection options specified by any flags in
- // |command_line| or |quic_trial_params|.
+ // |quic_trial_params|.
static net::QuicTagVector GetQuicConnectionOptions(
- const base::CommandLine& command_line,
const VariationParameters& quic_trial_params);
// Returns the alternative service probability threshold specified by
- // any flags in |command_line| or |quic_trial_params|.
+ // any flags in |quic_trial_params|.
static double GetAlternativeProtocolProbabilityThreshold(
- const base::CommandLine& command_line,
const VariationParameters& quic_trial_params);
static net::URLRequestContext* ConstructSystemRequestContext(
- IOThread::Globals* globals,
- net::NetLog* net_log);
-
- // TODO(willchan): Remove proxy script fetcher context since it's not
- // necessary now that I got rid of refcounting URLRequestContexts.
- // See IOThread::Globals for details.
- static net::URLRequestContext* ConstructProxyScriptFetcherContext(
- IOThread::Globals* globals,
+ Globals* globals,
net::NetLog* net_log);
- // The NetLog is owned by the browser process, to allow logging from other
- // threads during shutdown, but is used most frequently on the IOThread.
+ // The NetLog is owned by the application context, to allow logging from other
+ // threads during shutdown, but is used most frequently on the IO thread.
net_log::ChromeNetLog* net_log_;
-#if defined(ENABLE_EXTENSIONS)
- // The extensions::EventRouterForwarder allows for sending events to
- // extensions from the IOThread.
- extensions::EventRouterForwarder* extension_event_router_forwarder_;
-#endif
-
// These member variables are basically global, but their lifetimes are tied
- // to the IOThread. IOThread owns them all, despite not using scoped_ptr.
- // This is because the destructor of IOThread runs on the wrong thread. All
- // member variables should be deleted in CleanUp().
+ // to the IOSChromeIOThread. IOSChromeIOThread owns them all, despite not
+ // using scoped_ptr. This is because the destructor of IOSChromeIOThread runs
+ // on the wrong thread. All member variables should be deleted in CleanUp().
// These member variables are initialized in Init() and do not change for the
// lifetime of the IO thread.
@@ -501,27 +374,12 @@ class IOThread : public content::BrowserThreadDelegate {
class LoggingNetworkChangeObserver;
scoped_ptr<LoggingNetworkChangeObserver> network_change_observer_;
- BooleanPrefMember system_enable_referrers_;
-
- BooleanPrefMember dns_client_enabled_;
-
- BooleanPrefMember quick_check_enabled_;
-
- // Store HTTP Auth-related policies in this thread.
- std::string auth_schemes_;
- bool negotiate_disable_cname_lookup_;
- bool negotiate_enable_port_;
- std::string auth_server_whitelist_;
- std::string auth_delegate_whitelist_;
- std::string gssapi_library_name_;
- std::string auth_android_negotiate_account_type_;
-
// This is an instance of the default SSLConfigServiceManager for the current
// platform and it gets SSL preferences from local_state object.
scoped_ptr<ssl_config::SSLConfigServiceManager> ssl_config_service_manager_;
// These member variables are initialized by a task posted to the IO thread,
- // which gets posted by calling certain member functions of IOThread.
+ // which gets posted by calling certain member functions of IOSChromeIOThread.
scoped_ptr<net::ProxyConfigService> system_proxy_config_service_;
scoped_ptr<PrefProxyConfigTracker> pref_proxy_config_tracker_;
@@ -529,17 +387,11 @@ class IOThread : public content::BrowserThreadDelegate {
scoped_refptr<net::URLRequestContextGetter>
system_url_request_context_getter_;
- // True if SPDY is disabled by policy.
- bool is_spdy_disabled_by_policy_;
-
- // True if QUIC is allowed by policy.
- bool is_quic_allowed_by_policy_;
-
const base::TimeTicks creation_time_;
- base::WeakPtrFactory<IOThread> weak_factory_;
+ base::WeakPtrFactory<IOSChromeIOThread> weak_factory_;
- DISALLOW_COPY_AND_ASSIGN(IOThread);
+ DISALLOW_COPY_AND_ASSIGN(IOSChromeIOThread);
};
-#endif // CHROME_BROWSER_IO_THREAD_H_
+#endif // IOS_CHROME_BROWSER_IOS_CHROME_IO_THREAD_H_

Powered by Google App Engine
This is Rietveld 408576698