| 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 // * A "holdback" group with SPDY disabled, and corresponding control | 129 // * A "holdback" group with SPDY disabled, and corresponding control |
| 130 // (SPDY/3.1). The primary purpose of the holdback group is to encourage site | 130 // (SPDY/3.1). The primary purpose of the holdback group is to encourage site |
| 131 // operators to do feature detection rather than UA-sniffing. As such, this | 131 // operators to do feature detection rather than UA-sniffing. As such, this |
| 132 // trial runs continuously. | 132 // trial runs continuously. |
| 133 // * A SPDY/4 experiment, for SPDY/4 (aka HTTP/2) vs SPDY/3.1 comparisons and | 133 // * A SPDY/4 experiment, for SPDY/4 (aka HTTP/2) vs SPDY/3.1 comparisons and |
| 134 // eventual SPDY/4 deployment. | 134 // eventual SPDY/4 deployment. |
| 135 const char kSpdyFieldTrialName[] = "SPDY"; | 135 const char kSpdyFieldTrialName[] = "SPDY"; |
| 136 const char kSpdyFieldTrialHoldbackGroupNamePrefix[] = "SpdyDisabled"; | 136 const char kSpdyFieldTrialHoldbackGroupNamePrefix[] = "SpdyDisabled"; |
| 137 const char kSpdyFieldTrialSpdy31GroupNamePrefix[] = "Spdy31Enabled"; | 137 const char kSpdyFieldTrialSpdy31GroupNamePrefix[] = "Spdy31Enabled"; |
| 138 const char kSpdyFieldTrialSpdy4GroupNamePrefix[] = "Spdy4Enabled"; | 138 const char kSpdyFieldTrialSpdy4GroupNamePrefix[] = "Spdy4Enabled"; |
| 139 const char kSpdyFieldTrialParametrizedPrefix[] = "Parametrized"; |
| 139 | 140 |
| 140 // Field trial for Cache-Control: stale-while-revalidate directive. | 141 // Field trial for Cache-Control: stale-while-revalidate directive. |
| 141 const char kStaleWhileRevalidateFieldTrialName[] = "StaleWhileRevalidate"; | 142 const char kStaleWhileRevalidateFieldTrialName[] = "StaleWhileRevalidate"; |
| 142 | 143 |
| 143 #if defined(OS_MACOSX) && !defined(OS_IOS) | 144 #if defined(OS_MACOSX) && !defined(OS_IOS) |
| 144 void ObserveKeychainEvents() { | 145 void ObserveKeychainEvents() { |
| 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 146 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 146 net::CertDatabase::GetInstance()->SetMessageLoopForKeychainEvents(); | 147 net::CertDatabase::GetInstance()->SetMessageLoopForKeychainEvents(); |
| 147 } | 148 } |
| 148 #endif | 149 #endif |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 const base::CommandLine& command_line) { | 313 const base::CommandLine& command_line) { |
| 313 const std::string group_name = | 314 const std::string group_name = |
| 314 base::FieldTrialList::FindFullName("CTRequiredForEVTrial"); | 315 base::FieldTrialList::FindFullName("CTRequiredForEVTrial"); |
| 315 if (command_line.HasSwitch( | 316 if (command_line.HasSwitch( |
| 316 switches::kDisableCertificateTransparencyRequirementForEV)) | 317 switches::kDisableCertificateTransparencyRequirementForEV)) |
| 317 return false; | 318 return false; |
| 318 | 319 |
| 319 return group_name == "RequirementEnforced"; | 320 return group_name == "RequirementEnforced"; |
| 320 } | 321 } |
| 321 | 322 |
| 323 // Parse kUseSpdy command line flag options, which may contain the following: |
| 324 // |
| 325 // "off" : Disables SPDY support entirely. |
| 326 // "ssl" : Forces SPDY for all HTTPS requests. |
| 327 // "no-ssl" : Forces SPDY for all HTTP requests. |
| 328 // "no-ping" : Disables SPDY ping connection testing. |
| 329 // "exclude=<host>" : Disables SPDY support for the host <host>. |
| 330 // "no-compress" : Disables SPDY header compression. |
| 331 // "no-alt-protocols : Disables alternate protocol support. |
| 332 // "force-alt-protocols : Forces an alternate protocol of SPDY/3 |
| 333 // on port 443. |
| 334 // "single-domain" : Forces all spdy traffic to a single domain. |
| 335 // "init-max-streams=<limit>" : Specifies the maximum number of concurrent |
| 336 // streams for a SPDY session, unless the |
| 337 // specifies a different value via SETTINGS. |
| 338 void ConfigureSpdyGlobalsFromUseSpdyArgument(const std::string& mode, |
| 339 IOThread::Globals* globals) { |
| 340 static const char kOff[] = "off"; |
| 341 static const char kSSL[] = "ssl"; |
| 342 static const char kDisableSSL[] = "no-ssl"; |
| 343 static const char kDisablePing[] = "no-ping"; |
| 344 static const char kExclude[] = "exclude"; // Hosts to exclude |
| 345 static const char kDisableCompression[] = "no-compress"; |
| 346 static const char kDisableAltProtocols[] = "no-alt-protocols"; |
| 347 static const char kForceAltProtocols[] = "force-alt-protocols"; |
| 348 static const char kSingleDomain[] = "single-domain"; |
| 349 |
| 350 static const char kInitialMaxConcurrentStreams[] = "init-max-streams"; |
| 351 |
| 352 std::vector<std::string> spdy_options; |
| 353 base::SplitString(mode, ',', &spdy_options); |
| 354 |
| 355 for (const std::string& element : spdy_options) { |
| 356 std::vector<std::string> name_value; |
| 357 base::SplitString(element, '=', &name_value); |
| 358 const std::string& option = |
| 359 name_value.size() > 0 ? name_value[0] : std::string(); |
| 360 const std::string value = |
| 361 name_value.size() > 1 ? name_value[1] : std::string(); |
| 362 |
| 363 if (option == kOff) { |
| 364 net::HttpStreamFactory::set_spdy_enabled(false); |
| 365 continue; |
| 366 } |
| 367 if (option == kDisableSSL) { |
| 368 globals->spdy_default_protocol.set(net::kProtoSPDY31); |
| 369 globals->force_spdy_over_ssl.set(false); |
| 370 globals->force_spdy_always.set(true); |
| 371 continue; |
| 372 } |
| 373 if (option == kSSL) { |
| 374 globals->spdy_default_protocol.set(net::kProtoSPDY31); |
| 375 globals->force_spdy_over_ssl.set(true); |
| 376 globals->force_spdy_always.set(true); |
| 377 continue; |
| 378 } |
| 379 if (option == kDisablePing) { |
| 380 globals->enable_spdy_ping_based_connection_checking.set(false); |
| 381 continue; |
| 382 } |
| 383 if (option == kExclude) { |
| 384 globals->forced_spdy_exclusions.insert( |
| 385 net::HostPortPair::FromURL(GURL(value))); |
| 386 continue; |
| 387 } |
| 388 if (option == kDisableCompression) { |
| 389 globals->enable_spdy_compression.set(false); |
| 390 continue; |
| 391 } |
| 392 if (option == kDisableAltProtocols) { |
| 393 globals->use_alternate_protocols.set(false); |
| 394 continue; |
| 395 } |
| 396 if (option == kForceAltProtocols) { |
| 397 net::AlternateProtocolInfo pair(443, net::NPN_SPDY_3, 1); |
| 398 net::HttpServerPropertiesImpl::ForceAlternateProtocol(pair); |
| 399 continue; |
| 400 } |
| 401 if (option == kSingleDomain) { |
| 402 DVLOG(1) << "FORCING SINGLE DOMAIN"; |
| 403 globals->force_spdy_single_domain.set(true); |
| 404 continue; |
| 405 } |
| 406 if (option == kInitialMaxConcurrentStreams) { |
| 407 int streams; |
| 408 if (base::StringToInt(value, &streams)) { |
| 409 globals->initial_max_spdy_concurrent_streams.set(streams); |
| 410 continue; |
| 411 } |
| 412 } |
| 413 LOG(DFATAL) << "Unrecognized spdy option: " << option; |
| 414 } |
| 415 } |
| 416 |
| 322 } // namespace | 417 } // namespace |
| 323 | 418 |
| 324 class IOThread::LoggingNetworkChangeObserver | 419 class IOThread::LoggingNetworkChangeObserver |
| 325 : public net::NetworkChangeNotifier::IPAddressObserver, | 420 : public net::NetworkChangeNotifier::IPAddressObserver, |
| 326 public net::NetworkChangeNotifier::ConnectionTypeObserver, | 421 public net::NetworkChangeNotifier::ConnectionTypeObserver, |
| 327 public net::NetworkChangeNotifier::NetworkChangeObserver { | 422 public net::NetworkChangeNotifier::NetworkChangeObserver { |
| 328 public: | 423 public: |
| 329 // |net_log| must remain valid throughout our lifetime. | 424 // |net_log| must remain valid throughout our lifetime. |
| 330 explicit LoggingNetworkChangeObserver(net::NetLog* net_log) | 425 explicit LoggingNetworkChangeObserver(net::NetLog* net_log) |
| 331 : net_log_(net_log) { | 426 : net_log_(net_log) { |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 858 } | 953 } |
| 859 | 954 |
| 860 void IOThread::InitializeNetworkOptions(const base::CommandLine& command_line) { | 955 void IOThread::InitializeNetworkOptions(const base::CommandLine& command_line) { |
| 861 // Only handle use-spdy command line flags if "spdy.disabled" preference is | 956 // Only handle use-spdy command line flags if "spdy.disabled" preference is |
| 862 // not disabled via policy. | 957 // not disabled via policy. |
| 863 if (is_spdy_disabled_by_policy_) { | 958 if (is_spdy_disabled_by_policy_) { |
| 864 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName); | 959 base::FieldTrial* trial = base::FieldTrialList::Find(kSpdyFieldTrialName); |
| 865 if (trial) | 960 if (trial) |
| 866 trial->Disable(); | 961 trial->Disable(); |
| 867 } else { | 962 } else { |
| 868 if (command_line.HasSwitch(switches::kTrustedSpdyProxy)) { | 963 std::string group = base::FieldTrialList::FindFullName(kSpdyFieldTrialName); |
| 869 globals_->trusted_spdy_proxy.set( | 964 VariationParameters params; |
| 870 command_line.GetSwitchValueASCII(switches::kTrustedSpdyProxy)); | 965 if (!variations::GetVariationParams(kSpdyFieldTrialName, ¶ms)) { |
| 966 params.clear(); |
| 871 } | 967 } |
| 872 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) | 968 ConfigureSpdyGlobals(command_line, group, params, globals_); |
| 873 net::URLFetcher::SetIgnoreCertificateRequests(true); | |
| 874 | |
| 875 if (command_line.HasSwitch(switches::kUseSpdy)) { | |
| 876 std::string spdy_mode = | |
| 877 command_line.GetSwitchValueASCII(switches::kUseSpdy); | |
| 878 EnableSpdy(spdy_mode); | |
| 879 } else if (command_line.HasSwitch(switches::kEnableSpdy4)) { | |
| 880 globals_->next_protos = net::NextProtosSpdy4Http2(); | |
| 881 globals_->use_alternate_protocols.set(true); | |
| 882 } else if (command_line.HasSwitch(switches::kEnableNpnHttpOnly)) { | |
| 883 globals_->next_protos = net::NextProtosHttpOnly(); | |
| 884 globals_->use_alternate_protocols.set(false); | |
| 885 } else { | |
| 886 // No SPDY command-line flags have been specified. Examine trial groups. | |
| 887 ConfigureSpdyFromTrial( | |
| 888 base::FieldTrialList::FindFullName(kSpdyFieldTrialName), globals_); | |
| 889 } | |
| 890 } | 969 } |
| 891 | 970 |
| 892 ConfigureTCPFastOpen(command_line); | 971 ConfigureTCPFastOpen(command_line); |
| 893 ConfigureSdch(); | 972 ConfigureSdch(); |
| 894 | 973 |
| 895 // TODO(rch): Make the client socket factory a per-network session | 974 // TODO(rch): Make the client socket factory a per-network session |
| 896 // instance, constructed from a NetworkSession::Params, to allow us | 975 // instance, constructed from a NetworkSession::Params, to allow us |
| 897 // to move this option to IOThread::Globals & | 976 // to move this option to IOThread::Globals & |
| 898 // HttpNetworkSession::Params. | 977 // HttpNetworkSession::Params. |
| 899 } | 978 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 923 base::FieldTrialList::FindFullName(kSdchFieldTrialName); | 1002 base::FieldTrialList::FindFullName(kSdchFieldTrialName); |
| 924 base::StringPiece sdch_trial_group(sdch_trial_group_string); | 1003 base::StringPiece sdch_trial_group(sdch_trial_group_string); |
| 925 if (sdch_trial_group.starts_with(kEnabledHttpOnlyGroupName)) { | 1004 if (sdch_trial_group.starts_with(kEnabledHttpOnlyGroupName)) { |
| 926 net::SdchManager::EnableSdchSupport(true); | 1005 net::SdchManager::EnableSdchSupport(true); |
| 927 net::SdchManager::EnableSecureSchemeSupport(false); | 1006 net::SdchManager::EnableSecureSchemeSupport(false); |
| 928 } else if (sdch_trial_group.starts_with(kDisabledAllGroupName)) { | 1007 } else if (sdch_trial_group.starts_with(kDisabledAllGroupName)) { |
| 929 net::SdchManager::EnableSdchSupport(false); | 1008 net::SdchManager::EnableSdchSupport(false); |
| 930 } | 1009 } |
| 931 } | 1010 } |
| 932 | 1011 |
| 933 void IOThread::ConfigureSpdyFromTrial(base::StringPiece spdy_trial_group, | |
| 934 Globals* globals) { | |
| 935 if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { | |
| 936 // TODO(jgraettinger): Use net::NextProtosHttpOnly() instead? | |
| 937 net::HttpStreamFactory::set_spdy_enabled(false); | |
| 938 } else if (spdy_trial_group.starts_with( | |
| 939 kSpdyFieldTrialSpdy31GroupNamePrefix)) { | |
| 940 globals->next_protos = net::NextProtosSpdy31(); | |
| 941 globals->use_alternate_protocols.set(true); | |
| 942 } else if (spdy_trial_group.starts_with( | |
| 943 kSpdyFieldTrialSpdy4GroupNamePrefix)) { | |
| 944 globals->next_protos = net::NextProtosSpdy4Http2(); | |
| 945 globals->use_alternate_protocols.set(true); | |
| 946 } else { | |
| 947 // By default, enable HTTP/2. | |
| 948 globals->next_protos = net::NextProtosSpdy4Http2(); | |
| 949 globals->use_alternate_protocols.set(true); | |
| 950 } | |
| 951 } | |
| 952 | |
| 953 void IOThread::EnableSpdy(const std::string& mode) { | |
| 954 static const char kOff[] = "off"; | |
| 955 static const char kSSL[] = "ssl"; | |
| 956 static const char kDisableSSL[] = "no-ssl"; | |
| 957 static const char kDisablePing[] = "no-ping"; | |
| 958 static const char kExclude[] = "exclude"; // Hosts to exclude | |
| 959 static const char kDisableCompression[] = "no-compress"; | |
| 960 static const char kDisableAltProtocols[] = "no-alt-protocols"; | |
| 961 static const char kForceAltProtocols[] = "force-alt-protocols"; | |
| 962 static const char kSingleDomain[] = "single-domain"; | |
| 963 | |
| 964 static const char kInitialMaxConcurrentStreams[] = "init-max-streams"; | |
| 965 | |
| 966 std::vector<std::string> spdy_options; | |
| 967 base::SplitString(mode, ',', &spdy_options); | |
| 968 | |
| 969 for (std::vector<std::string>::iterator it = spdy_options.begin(); | |
| 970 it != spdy_options.end(); ++it) { | |
| 971 const std::string& element = *it; | |
| 972 std::vector<std::string> name_value; | |
| 973 base::SplitString(element, '=', &name_value); | |
| 974 const std::string& option = | |
| 975 name_value.size() > 0 ? name_value[0] : std::string(); | |
| 976 const std::string value = | |
| 977 name_value.size() > 1 ? name_value[1] : std::string(); | |
| 978 | |
| 979 if (option == kOff) { | |
| 980 net::HttpStreamFactory::set_spdy_enabled(false); | |
| 981 } else if (option == kDisableSSL) { | |
| 982 globals_->spdy_default_protocol.set(net::kProtoSPDY31); | |
| 983 globals_->force_spdy_over_ssl.set(false); | |
| 984 globals_->force_spdy_always.set(true); | |
| 985 } else if (option == kSSL) { | |
| 986 globals_->spdy_default_protocol.set(net::kProtoSPDY31); | |
| 987 globals_->force_spdy_over_ssl.set(true); | |
| 988 globals_->force_spdy_always.set(true); | |
| 989 } else if (option == kDisablePing) { | |
| 990 globals_->enable_spdy_ping_based_connection_checking.set(false); | |
| 991 } else if (option == kExclude) { | |
| 992 globals_->forced_spdy_exclusions.insert( | |
| 993 net::HostPortPair::FromURL(GURL(value))); | |
| 994 } else if (option == kDisableCompression) { | |
| 995 globals_->enable_spdy_compression.set(false); | |
| 996 } else if (option == kDisableAltProtocols) { | |
| 997 globals_->use_alternate_protocols.set(false); | |
| 998 } else if (option == kForceAltProtocols) { | |
| 999 net::AlternateProtocolInfo pair(443, net::NPN_SPDY_3, 1); | |
| 1000 net::HttpServerPropertiesImpl::ForceAlternateProtocol(pair); | |
| 1001 } else if (option == kSingleDomain) { | |
| 1002 DVLOG(1) << "FORCING SINGLE DOMAIN"; | |
| 1003 globals_->force_spdy_single_domain.set(true); | |
| 1004 } else if (option == kInitialMaxConcurrentStreams) { | |
| 1005 int streams; | |
| 1006 if (base::StringToInt(value, &streams)) | |
| 1007 globals_->initial_max_spdy_concurrent_streams.set(streams); | |
| 1008 } else if (option.empty() && it == spdy_options.begin()) { | |
| 1009 continue; | |
| 1010 } else { | |
| 1011 LOG(DFATAL) << "Unrecognized spdy option: " << option; | |
| 1012 } | |
| 1013 } | |
| 1014 } | |
| 1015 | |
| 1016 // static | 1012 // static |
| 1013 void IOThread::ConfigureSpdyGlobals( |
| 1014 const base::CommandLine& command_line, |
| 1015 base::StringPiece spdy_trial_group, |
| 1016 const VariationParameters& spdy_trial_params, |
| 1017 IOThread::Globals* globals) { |
| 1018 if (command_line.HasSwitch(switches::kTrustedSpdyProxy)) { |
| 1019 globals->trusted_spdy_proxy.set( |
| 1020 command_line.GetSwitchValueASCII(switches::kTrustedSpdyProxy)); |
| 1021 } |
| 1022 if (command_line.HasSwitch(switches::kIgnoreUrlFetcherCertRequests)) |
| 1023 net::URLFetcher::SetIgnoreCertificateRequests(true); |
| 1024 |
| 1025 if (command_line.HasSwitch(switches::kUseSpdy)) { |
| 1026 std::string spdy_mode = |
| 1027 command_line.GetSwitchValueASCII(switches::kUseSpdy); |
| 1028 ConfigureSpdyGlobalsFromUseSpdyArgument(spdy_mode, globals); |
| 1029 return; |
| 1030 } |
| 1031 |
| 1032 globals->next_protos.clear(); |
| 1033 globals->next_protos.push_back(net::kProtoHTTP11); |
| 1034 bool enable_quic = false; |
| 1035 globals->enable_quic.CopyToIfSet(&enable_quic); |
| 1036 if (enable_quic) { |
| 1037 globals->next_protos.push_back(net::kProtoQUIC1SPDY3); |
| 1038 } |
| 1039 |
| 1040 if (command_line.HasSwitch(switches::kEnableSpdy4)) { |
| 1041 globals->next_protos.push_back(net::kProtoSPDY31); |
| 1042 globals->next_protos.push_back(net::kProtoSPDY4_14); |
| 1043 globals->next_protos.push_back(net::kProtoSPDY4); |
| 1044 globals->use_alternate_protocols.set(true); |
| 1045 return; |
| 1046 } |
| 1047 if (command_line.HasSwitch(switches::kEnableNpnHttpOnly)) { |
| 1048 globals->use_alternate_protocols.set(false); |
| 1049 return; |
| 1050 } |
| 1051 |
| 1052 // No SPDY command-line flags have been specified. Examine trial groups. |
| 1053 if (spdy_trial_group.starts_with(kSpdyFieldTrialHoldbackGroupNamePrefix)) { |
| 1054 net::HttpStreamFactory::set_spdy_enabled(false); |
| 1055 return; |
| 1056 } |
| 1057 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy31GroupNamePrefix)) { |
| 1058 globals->next_protos.push_back(net::kProtoSPDY31); |
| 1059 globals->use_alternate_protocols.set(true); |
| 1060 return; |
| 1061 } |
| 1062 if (spdy_trial_group.starts_with(kSpdyFieldTrialSpdy4GroupNamePrefix)) { |
| 1063 globals->next_protos.push_back(net::kProtoSPDY31); |
| 1064 globals->next_protos.push_back(net::kProtoSPDY4_14); |
| 1065 globals->next_protos.push_back(net::kProtoSPDY4); |
| 1066 globals->use_alternate_protocols.set(true); |
| 1067 return; |
| 1068 } |
| 1069 if (spdy_trial_group.starts_with(kSpdyFieldTrialParametrizedPrefix)) { |
| 1070 bool spdy_enabled = false; |
| 1071 if (LowerCaseEqualsASCII( |
| 1072 GetVariationParam(spdy_trial_params, "enable_spdy31"), "true")) { |
| 1073 globals->next_protos.push_back(net::kProtoSPDY31); |
| 1074 spdy_enabled = true; |
| 1075 } |
| 1076 if (LowerCaseEqualsASCII( |
| 1077 GetVariationParam(spdy_trial_params, "enable_http2_14"), "true")) { |
| 1078 globals->next_protos.push_back(net::kProtoSPDY4_14); |
| 1079 spdy_enabled = true; |
| 1080 } |
| 1081 if (LowerCaseEqualsASCII( |
| 1082 GetVariationParam(spdy_trial_params, "enable_http2"), "true")) { |
| 1083 globals->next_protos.push_back(net::kProtoSPDY4); |
| 1084 spdy_enabled = true; |
| 1085 } |
| 1086 // TODO(bnc): HttpStreamFactory::spdy_enabled_ is redundant with |
| 1087 // globals->next_protos, can it be eliminated? |
| 1088 net::HttpStreamFactory::set_spdy_enabled(spdy_enabled); |
| 1089 globals->use_alternate_protocols.set(true); |
| 1090 return; |
| 1091 } |
| 1092 |
| 1093 // By default, enable HTTP/2. |
| 1094 globals->next_protos.push_back(net::kProtoSPDY31); |
| 1095 globals->next_protos.push_back(net::kProtoSPDY4_14); |
| 1096 globals->next_protos.push_back(net::kProtoSPDY4); |
| 1097 globals->use_alternate_protocols.set(true); |
| 1098 } |
| 1099 |
| 1100 // static |
| 1017 void IOThread::RegisterPrefs(PrefRegistrySimple* registry) { | 1101 void IOThread::RegisterPrefs(PrefRegistrySimple* registry) { |
| 1018 registry->RegisterStringPref(prefs::kAuthSchemes, | 1102 registry->RegisterStringPref(prefs::kAuthSchemes, |
| 1019 "basic,digest,ntlm,negotiate," | 1103 "basic,digest,ntlm,negotiate," |
| 1020 "spdyproxy"); | 1104 "spdyproxy"); |
| 1021 registry->RegisterBooleanPref(prefs::kDisableAuthNegotiateCnameLookup, false); | 1105 registry->RegisterBooleanPref(prefs::kDisableAuthNegotiateCnameLookup, false); |
| 1022 registry->RegisterBooleanPref(prefs::kEnableAuthNegotiatePort, false); | 1106 registry->RegisterBooleanPref(prefs::kEnableAuthNegotiatePort, false); |
| 1023 registry->RegisterStringPref(prefs::kAuthServerWhitelist, std::string()); | 1107 registry->RegisterStringPref(prefs::kAuthServerWhitelist, std::string()); |
| 1024 registry->RegisterStringPref(prefs::kAuthNegotiateDelegateWhitelist, | 1108 registry->RegisterStringPref(prefs::kAuthNegotiateDelegateWhitelist, |
| 1025 std::string()); | 1109 std::string()); |
| 1026 registry->RegisterStringPref(prefs::kGSSAPILibraryName, std::string()); | 1110 registry->RegisterStringPref(prefs::kGSSAPILibraryName, std::string()); |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1514 net::QuicVersionVector supported_versions = net::QuicSupportedVersions(); | 1598 net::QuicVersionVector supported_versions = net::QuicSupportedVersions(); |
| 1515 for (size_t i = 0; i < supported_versions.size(); ++i) { | 1599 for (size_t i = 0; i < supported_versions.size(); ++i) { |
| 1516 net::QuicVersion version = supported_versions[i]; | 1600 net::QuicVersion version = supported_versions[i]; |
| 1517 if (net::QuicVersionToString(version) == quic_version) { | 1601 if (net::QuicVersionToString(version) == quic_version) { |
| 1518 return version; | 1602 return version; |
| 1519 } | 1603 } |
| 1520 } | 1604 } |
| 1521 | 1605 |
| 1522 return net::QUIC_VERSION_UNSUPPORTED; | 1606 return net::QUIC_VERSION_UNSUPPORTED; |
| 1523 } | 1607 } |
| OLD | NEW |