| OLD | NEW |
| 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 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 | 108 |
| 109 using content::BrowserThread; | 109 using content::BrowserThread; |
| 110 | 110 |
| 111 class SafeBrowsingURLRequestContext; | 111 class SafeBrowsingURLRequestContext; |
| 112 | 112 |
| 113 // The IOThread object must outlive any tasks posted to the IO thread before the | 113 // The IOThread object must outlive any tasks posted to the IO thread before the |
| 114 // Quit task, so base::Bind() calls are not refcounted. | 114 // Quit task, so base::Bind() calls are not refcounted. |
| 115 | 115 |
| 116 namespace { | 116 namespace { |
| 117 | 117 |
| 118 const char kTCPFastOpenFieldTrialName[] = "TCPFastOpen"; |
| 119 const char kTCPFastOpenHttpsEnabledGroupName[] = "HttpsEnabled"; |
| 120 |
| 118 const char kQuicFieldTrialName[] = "QUIC"; | 121 const char kQuicFieldTrialName[] = "QUIC"; |
| 119 const char kQuicFieldTrialEnabledGroupName[] = "Enabled"; | 122 const char kQuicFieldTrialEnabledGroupName[] = "Enabled"; |
| 120 const char kQuicFieldTrialHttpsEnabledGroupName[] = "HttpsEnabled"; | 123 const char kQuicFieldTrialHttpsEnabledGroupName[] = "HttpsEnabled"; |
| 121 const char kQuicFieldTrialPacketLengthSuffix[] = "BytePackets"; | 124 const char kQuicFieldTrialPacketLengthSuffix[] = "BytePackets"; |
| 122 const char kQuicFieldTrialPacingSuffix[] = "WithPacing"; | 125 const char kQuicFieldTrialPacingSuffix[] = "WithPacing"; |
| 123 const char kQuicFieldTrialTimeBasedLossDetectionSuffix[] = | 126 const char kQuicFieldTrialTimeBasedLossDetectionSuffix[] = |
| 124 "WithTimeBasedLossDetection"; | 127 "WithTimeBasedLossDetection"; |
| 125 | 128 |
| 126 // The SPDY trial composes two different trial plus control groups: | 129 // The SPDY trial composes two different trial plus control groups: |
| 127 // * A "holdback" group with SPDY disabled, and corresponding control | 130 // * A "holdback" group with SPDY disabled, and corresponding control |
| (...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 } else { | 835 } else { |
| 833 // No SPDY command-line flags have been specified. Examine trial groups. | 836 // No SPDY command-line flags have been specified. Examine trial groups. |
| 834 ConfigureSpdyFromTrial( | 837 ConfigureSpdyFromTrial( |
| 835 base::FieldTrialList::FindFullName(kSpdyFieldTrialName), globals_); | 838 base::FieldTrialList::FindFullName(kSpdyFieldTrialName), globals_); |
| 836 } | 839 } |
| 837 | 840 |
| 838 if (command_line.HasSwitch(switches::kEnableWebSocketOverSpdy)) | 841 if (command_line.HasSwitch(switches::kEnableWebSocketOverSpdy)) |
| 839 globals_->enable_websocket_over_spdy.set(true); | 842 globals_->enable_websocket_over_spdy.set(true); |
| 840 } | 843 } |
| 841 | 844 |
| 845 ConfigureTCPFastOpen(command_line); |
| 846 |
| 842 // TODO(rch): Make the client socket factory a per-network session | 847 // TODO(rch): Make the client socket factory a per-network session |
| 843 // instance, constructed from a NetworkSession::Params, to allow us | 848 // instance, constructed from a NetworkSession::Params, to allow us |
| 844 // to move this option to IOThread::Globals & | 849 // to move this option to IOThread::Globals & |
| 845 // HttpNetworkSession::Params. | 850 // HttpNetworkSession::Params. |
| 851 } |
| 846 | 852 |
| 853 void IOThread::ConfigureTCPFastOpen(const CommandLine& command_line) { |
| 854 const std::string trial_group = |
| 855 base::FieldTrialList::FindFullName(kTCPFastOpenFieldTrialName); |
| 856 if (trial_group == kTCPFastOpenHttpsEnabledGroupName) |
| 857 globals_->enable_tcp_fast_open_for_ssl.set(true); |
| 847 bool always_enable_if_supported = | 858 bool always_enable_if_supported = |
| 848 command_line.HasSwitch(switches::kEnableTcpFastOpen); | 859 command_line.HasSwitch(switches::kEnableTcpFastOpen); |
| 849 // Check for OS support of TCP FastOpen, and turn it on for all connections | 860 // Check for OS support of TCP FastOpen, and turn it on for all connections |
| 850 // if indicated by user. | 861 // if indicated by user. |
| 851 net::CheckSupportAndMaybeEnableTCPFastOpen(always_enable_if_supported); | 862 net::CheckSupportAndMaybeEnableTCPFastOpen(always_enable_if_supported); |
| 852 } | 863 } |
| 853 | 864 |
| 854 void IOThread::ConfigureSpdyFromTrial(const std::string& spdy_trial_group, | 865 void IOThread::ConfigureSpdyFromTrial(const std::string& spdy_trial_group, |
| 855 Globals* globals) { | 866 Globals* globals) { |
| 856 if (spdy_trial_group == kSpdyFieldTrialHoldbackGroupName) { | 867 if (spdy_trial_group == kSpdyFieldTrialHoldbackGroupName) { |
| 857 // TODO(jgraettinger): Use net::NextProtosHttpOnly() instead? | 868 // TODO(jgraettinger): Use net::NextProtosHttpOnly() instead? |
| 858 net::HttpStreamFactory::set_spdy_enabled(false); | 869 net::HttpStreamFactory::set_spdy_enabled(false); |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 params->http_auth_handler_factory = globals.http_auth_handler_factory.get(); | 1018 params->http_auth_handler_factory = globals.http_auth_handler_factory.get(); |
| 1008 params->http_server_properties = | 1019 params->http_server_properties = |
| 1009 globals.http_server_properties->GetWeakPtr(); | 1020 globals.http_server_properties->GetWeakPtr(); |
| 1010 params->network_delegate = globals.system_network_delegate.get(); | 1021 params->network_delegate = globals.system_network_delegate.get(); |
| 1011 params->host_mapping_rules = globals.host_mapping_rules.get(); | 1022 params->host_mapping_rules = globals.host_mapping_rules.get(); |
| 1012 params->enable_ssl_connect_job_waiting = | 1023 params->enable_ssl_connect_job_waiting = |
| 1013 globals.enable_ssl_connect_job_waiting; | 1024 globals.enable_ssl_connect_job_waiting; |
| 1014 params->ignore_certificate_errors = globals.ignore_certificate_errors; | 1025 params->ignore_certificate_errors = globals.ignore_certificate_errors; |
| 1015 params->testing_fixed_http_port = globals.testing_fixed_http_port; | 1026 params->testing_fixed_http_port = globals.testing_fixed_http_port; |
| 1016 params->testing_fixed_https_port = globals.testing_fixed_https_port; | 1027 params->testing_fixed_https_port = globals.testing_fixed_https_port; |
| 1028 globals.enable_tcp_fast_open_for_ssl.CopyToIfSet( |
| 1029 ¶ms->enable_tcp_fast_open_for_ssl); |
| 1017 | 1030 |
| 1018 globals.initial_max_spdy_concurrent_streams.CopyToIfSet( | 1031 globals.initial_max_spdy_concurrent_streams.CopyToIfSet( |
| 1019 ¶ms->spdy_initial_max_concurrent_streams); | 1032 ¶ms->spdy_initial_max_concurrent_streams); |
| 1020 globals.force_spdy_single_domain.CopyToIfSet( | 1033 globals.force_spdy_single_domain.CopyToIfSet( |
| 1021 ¶ms->force_spdy_single_domain); | 1034 ¶ms->force_spdy_single_domain); |
| 1022 globals.enable_spdy_compression.CopyToIfSet( | 1035 globals.enable_spdy_compression.CopyToIfSet( |
| 1023 ¶ms->enable_spdy_compression); | 1036 ¶ms->enable_spdy_compression); |
| 1024 globals.enable_spdy_ping_based_connection_checking.CopyToIfSet( | 1037 globals.enable_spdy_ping_based_connection_checking.CopyToIfSet( |
| 1025 ¶ms->enable_spdy_ping_based_connection_checking); | 1038 ¶ms->enable_spdy_ping_based_connection_checking); |
| 1026 globals.spdy_default_protocol.CopyToIfSet( | 1039 globals.spdy_default_protocol.CopyToIfSet( |
| (...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1399 net::QuicVersionVector supported_versions = net::QuicSupportedVersions(); | 1412 net::QuicVersionVector supported_versions = net::QuicSupportedVersions(); |
| 1400 for (size_t i = 0; i < supported_versions.size(); ++i) { | 1413 for (size_t i = 0; i < supported_versions.size(); ++i) { |
| 1401 net::QuicVersion version = supported_versions[i]; | 1414 net::QuicVersion version = supported_versions[i]; |
| 1402 if (net::QuicVersionToString(version) == quic_version) { | 1415 if (net::QuicVersionToString(version) == quic_version) { |
| 1403 return version; | 1416 return version; |
| 1404 } | 1417 } |
| 1405 } | 1418 } |
| 1406 | 1419 |
| 1407 return net::QUIC_VERSION_UNSUPPORTED; | 1420 return net::QUIC_VERSION_UNSUPPORTED; |
| 1408 } | 1421 } |
| OLD | NEW |