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

Side by Side Diff: net/quic/chromium/quic_stream_factory.cc

Issue 2958133002: Change QuicStreamRequest::Request() to take a preferred QuicVersion so that (Closed)
Patch Set: Re #26 Created 3 years, 5 months 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 unified diff | Download patch
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('k') | net/quic/chromium/quic_stream_factory_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "net/quic/chromium/quic_stream_factory.h" 5 #include "net/quic/chromium/quic_stream_factory.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <tuple> 8 #include <tuple>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 base::WeakPtrFactory<CertVerifierJob> weak_factory_; 319 base::WeakPtrFactory<CertVerifierJob> weak_factory_;
320 320
321 DISALLOW_COPY_AND_ASSIGN(CertVerifierJob); 321 DISALLOW_COPY_AND_ASSIGN(CertVerifierJob);
322 }; 322 };
323 323
324 // Responsible for creating a new QUIC session to the specified server, and 324 // Responsible for creating a new QUIC session to the specified server, and
325 // for notifying any associated requests when complete. 325 // for notifying any associated requests when complete.
326 class QuicStreamFactory::Job { 326 class QuicStreamFactory::Job {
327 public: 327 public:
328 Job(QuicStreamFactory* factory, 328 Job(QuicStreamFactory* factory,
329 const QuicVersion& quic_version,
329 HostResolver* host_resolver, 330 HostResolver* host_resolver,
330 const QuicSessionKey& key, 331 const QuicSessionKey& key,
331 bool was_alternative_service_recently_broken, 332 bool was_alternative_service_recently_broken,
332 int cert_verify_flags, 333 int cert_verify_flags,
333 const NetLogWithSource& net_log); 334 const NetLogWithSource& net_log);
334 335
335 ~Job(); 336 ~Job();
336 337
337 int Run(const CompletionCallback& callback); 338 int Run(const CompletionCallback& callback);
338 339
(...skipping 20 matching lines...) Expand all
359 enum IoState { 360 enum IoState {
360 STATE_NONE, 361 STATE_NONE,
361 STATE_RESOLVE_HOST, 362 STATE_RESOLVE_HOST,
362 STATE_RESOLVE_HOST_COMPLETE, 363 STATE_RESOLVE_HOST_COMPLETE,
363 STATE_CONNECT, 364 STATE_CONNECT,
364 STATE_CONNECT_COMPLETE, 365 STATE_CONNECT_COMPLETE,
365 }; 366 };
366 IoState io_state_; 367 IoState io_state_;
367 368
368 QuicStreamFactory* factory_; 369 QuicStreamFactory* factory_;
370 QuicVersion quic_version_;
369 HostResolver* host_resolver_; 371 HostResolver* host_resolver_;
370 std::unique_ptr<HostResolver::Request> request_; 372 std::unique_ptr<HostResolver::Request> request_;
371 const QuicSessionKey key_; 373 const QuicSessionKey key_;
372 const int cert_verify_flags_; 374 const int cert_verify_flags_;
373 const bool was_alternative_service_recently_broken_; 375 const bool was_alternative_service_recently_broken_;
374 const NetLogWithSource net_log_; 376 const NetLogWithSource net_log_;
375 int num_sent_client_hellos_; 377 int num_sent_client_hellos_;
376 QuicChromiumClientSession* session_; 378 QuicChromiumClientSession* session_;
377 CompletionCallback callback_; 379 CompletionCallback callback_;
378 AddressList address_list_; 380 AddressList address_list_;
379 base::TimeTicks dns_resolution_start_time_; 381 base::TimeTicks dns_resolution_start_time_;
380 base::TimeTicks dns_resolution_end_time_; 382 base::TimeTicks dns_resolution_end_time_;
381 base::WeakPtrFactory<Job> weak_factory_; 383 base::WeakPtrFactory<Job> weak_factory_;
382 DISALLOW_COPY_AND_ASSIGN(Job); 384 DISALLOW_COPY_AND_ASSIGN(Job);
383 }; 385 };
384 386
385 QuicStreamFactory::Job::Job(QuicStreamFactory* factory, 387 QuicStreamFactory::Job::Job(QuicStreamFactory* factory,
388 const QuicVersion& quic_version,
386 HostResolver* host_resolver, 389 HostResolver* host_resolver,
387 const QuicSessionKey& key, 390 const QuicSessionKey& key,
388 bool was_alternative_service_recently_broken, 391 bool was_alternative_service_recently_broken,
389 int cert_verify_flags, 392 int cert_verify_flags,
390 const NetLogWithSource& net_log) 393 const NetLogWithSource& net_log)
391 : io_state_(STATE_RESOLVE_HOST), 394 : io_state_(STATE_RESOLVE_HOST),
392 factory_(factory), 395 factory_(factory),
396 quic_version_(quic_version),
393 host_resolver_(host_resolver), 397 host_resolver_(host_resolver),
394 key_(key), 398 key_(key),
395 cert_verify_flags_(cert_verify_flags), 399 cert_verify_flags_(cert_verify_flags),
396 was_alternative_service_recently_broken_( 400 was_alternative_service_recently_broken_(
397 was_alternative_service_recently_broken), 401 was_alternative_service_recently_broken),
398 net_log_( 402 net_log_(
399 NetLogWithSource::Make(net_log.net_log(), 403 NetLogWithSource::Make(net_log.net_log(),
400 NetLogSourceType::QUIC_STREAM_FACTORY_JOB)), 404 NetLogSourceType::QUIC_STREAM_FACTORY_JOB)),
401 num_sent_client_hellos_(0), 405 num_sent_client_hellos_(0),
402 session_(nullptr), 406 session_(nullptr),
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 505
502 int QuicStreamFactory::Job::DoConnect() { 506 int QuicStreamFactory::Job::DoConnect() {
503 io_state_ = STATE_CONNECT_COMPLETE; 507 io_state_ = STATE_CONNECT_COMPLETE;
504 508
505 bool require_confirmation = factory_->require_confirmation() || 509 bool require_confirmation = factory_->require_confirmation() ||
506 was_alternative_service_recently_broken_; 510 was_alternative_service_recently_broken_;
507 net_log_.BeginEvent( 511 net_log_.BeginEvent(
508 NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT, 512 NetLogEventType::QUIC_STREAM_FACTORY_JOB_CONNECT,
509 NetLog::BoolCallback("require_confirmation", require_confirmation)); 513 NetLog::BoolCallback("require_confirmation", require_confirmation));
510 514
511 int rv = 515 DCHECK_NE(quic_version_, QUIC_VERSION_UNSUPPORTED);
512 factory_->CreateSession(key_, cert_verify_flags_, require_confirmation, 516 int rv = factory_->CreateSession(
513 address_list_, dns_resolution_start_time_, 517 key_, quic_version_, cert_verify_flags_, require_confirmation,
514 dns_resolution_end_time_, net_log_, &session_); 518 address_list_, dns_resolution_start_time_, dns_resolution_end_time_,
519 net_log_, &session_);
515 if (rv != OK) { 520 if (rv != OK) {
516 DCHECK(rv != ERR_IO_PENDING); 521 DCHECK(rv != ERR_IO_PENDING);
517 DCHECK(!session_); 522 DCHECK(!session_);
518 return rv; 523 return rv;
519 } 524 }
520 525
521 if (!session_->connection()->connected()) 526 if (!session_->connection()->connected())
522 return ERR_CONNECTION_CLOSED; 527 return ERR_CONNECTION_CLOSED;
523 528
524 session_->StartReading(); 529 session_->StartReading();
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 579
575 QuicStreamRequest::QuicStreamRequest(QuicStreamFactory* factory) 580 QuicStreamRequest::QuicStreamRequest(QuicStreamFactory* factory)
576 : factory_(factory) {} 581 : factory_(factory) {}
577 582
578 QuicStreamRequest::~QuicStreamRequest() { 583 QuicStreamRequest::~QuicStreamRequest() {
579 if (factory_ && !callback_.is_null()) 584 if (factory_ && !callback_.is_null())
580 factory_->CancelRequest(this); 585 factory_->CancelRequest(this);
581 } 586 }
582 587
583 int QuicStreamRequest::Request(const HostPortPair& destination, 588 int QuicStreamRequest::Request(const HostPortPair& destination,
589 QuicVersion quic_version,
584 PrivacyMode privacy_mode, 590 PrivacyMode privacy_mode,
585 int cert_verify_flags, 591 int cert_verify_flags,
586 const GURL& url, 592 const GURL& url,
587 QuicStringPiece method, 593 QuicStringPiece method,
588 const NetLogWithSource& net_log, 594 const NetLogWithSource& net_log,
589 const CompletionCallback& callback) { 595 const CompletionCallback& callback) {
596 DCHECK_NE(quic_version, QUIC_VERSION_UNSUPPORTED);
590 DCHECK(callback_.is_null()); 597 DCHECK(callback_.is_null());
591 DCHECK(factory_); 598 DCHECK(factory_);
592 server_id_ = QuicServerId(HostPortPair::FromURL(url), privacy_mode); 599 server_id_ = QuicServerId(HostPortPair::FromURL(url), privacy_mode);
593 600
594 int rv = factory_->Create(server_id_, destination, cert_verify_flags, url, 601 int rv = factory_->Create(server_id_, destination, quic_version,
595 method, net_log, this); 602 cert_verify_flags, url, method, net_log, this);
596 if (rv == ERR_IO_PENDING) { 603 if (rv == ERR_IO_PENDING) {
597 net_log_ = net_log; 604 net_log_ = net_log;
598 callback_ = callback; 605 callback_ = callback;
599 } else { 606 } else {
600 factory_ = nullptr; 607 factory_ = nullptr;
601 } 608 }
602 if (rv == OK) 609 if (rv == OK)
603 DCHECK(session_); 610 DCHECK(session_);
604 return rv; 611 return rv;
605 } 612 }
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 CTPolicyEnforcer* ct_policy_enforcer, 652 CTPolicyEnforcer* ct_policy_enforcer,
646 ChannelIDService* channel_id_service, 653 ChannelIDService* channel_id_service,
647 TransportSecurityState* transport_security_state, 654 TransportSecurityState* transport_security_state,
648 CTVerifier* cert_transparency_verifier, 655 CTVerifier* cert_transparency_verifier,
649 SocketPerformanceWatcherFactory* socket_performance_watcher_factory, 656 SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
650 QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory, 657 QuicCryptoClientStreamFactory* quic_crypto_client_stream_factory,
651 QuicRandom* random_generator, 658 QuicRandom* random_generator,
652 QuicClock* clock, 659 QuicClock* clock,
653 size_t max_packet_length, 660 size_t max_packet_length,
654 const std::string& user_agent_id, 661 const std::string& user_agent_id,
655 const QuicVersionVector& supported_versions,
656 bool store_server_configs_in_properties, 662 bool store_server_configs_in_properties,
657 bool close_sessions_on_ip_change, 663 bool close_sessions_on_ip_change,
658 bool mark_quic_broken_when_network_blackholes, 664 bool mark_quic_broken_when_network_blackholes,
659 int idle_connection_timeout_seconds, 665 int idle_connection_timeout_seconds,
660 int reduced_ping_timeout_seconds, 666 int reduced_ping_timeout_seconds,
661 int packet_reader_yield_after_duration_milliseconds, 667 int packet_reader_yield_after_duration_milliseconds,
662 bool migrate_sessions_on_network_change, 668 bool migrate_sessions_on_network_change,
663 bool migrate_sessions_early, 669 bool migrate_sessions_early,
664 bool allow_server_migration, 670 bool allow_server_migration,
665 bool force_hol_blocking, 671 bool force_hol_blocking,
(...skipping 16 matching lines...) Expand all
682 max_packet_length_(max_packet_length), 688 max_packet_length_(max_packet_length),
683 clock_skew_detector_(base::TimeTicks::Now(), base::Time::Now()), 689 clock_skew_detector_(base::TimeTicks::Now(), base::Time::Now()),
684 socket_performance_watcher_factory_(socket_performance_watcher_factory), 690 socket_performance_watcher_factory_(socket_performance_watcher_factory),
685 config_(InitializeQuicConfig(connection_options, 691 config_(InitializeQuicConfig(connection_options,
686 idle_connection_timeout_seconds)), 692 idle_connection_timeout_seconds)),
687 crypto_config_(base::WrapUnique( 693 crypto_config_(base::WrapUnique(
688 new ProofVerifierChromium(cert_verifier, 694 new ProofVerifierChromium(cert_verifier,
689 ct_policy_enforcer, 695 ct_policy_enforcer,
690 transport_security_state, 696 transport_security_state,
691 cert_transparency_verifier))), 697 cert_transparency_verifier))),
692 supported_versions_(supported_versions),
693 mark_quic_broken_when_network_blackholes_( 698 mark_quic_broken_when_network_blackholes_(
694 mark_quic_broken_when_network_blackholes), 699 mark_quic_broken_when_network_blackholes),
695 store_server_configs_in_properties_(store_server_configs_in_properties), 700 store_server_configs_in_properties_(store_server_configs_in_properties),
696 ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)), 701 ping_timeout_(QuicTime::Delta::FromSeconds(kPingTimeoutSecs)),
697 reduced_ping_timeout_( 702 reduced_ping_timeout_(
698 QuicTime::Delta::FromSeconds(reduced_ping_timeout_seconds)), 703 QuicTime::Delta::FromSeconds(reduced_ping_timeout_seconds)),
699 yield_after_packets_(kQuicYieldAfterPacketsRead), 704 yield_after_packets_(kQuicYieldAfterPacketsRead),
700 yield_after_duration_(QuicTime::Delta::FromMilliseconds( 705 yield_after_duration_(QuicTime::Delta::FromMilliseconds(
701 packet_reader_yield_after_duration_milliseconds)), 706 packet_reader_yield_after_duration_milliseconds)),
702 close_sessions_on_ip_change_(close_sessions_on_ip_change), 707 close_sessions_on_ip_change_(close_sessions_on_ip_change),
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 session->CanPool(server_id.host(), server_id.privacy_mode())) { 847 session->CanPool(server_id.host(), server_id.privacy_mode())) {
843 return true; 848 return true;
844 } 849 }
845 } 850 }
846 851
847 return false; 852 return false;
848 } 853 }
849 854
850 int QuicStreamFactory::Create(const QuicServerId& server_id, 855 int QuicStreamFactory::Create(const QuicServerId& server_id,
851 const HostPortPair& destination, 856 const HostPortPair& destination,
857 QuicVersion quic_version,
852 int cert_verify_flags, 858 int cert_verify_flags,
853 const GURL& url, 859 const GURL& url,
854 QuicStringPiece method, 860 QuicStringPiece method,
855 const NetLogWithSource& net_log, 861 const NetLogWithSource& net_log,
856 QuicStreamRequest* request) { 862 QuicStreamRequest* request) {
857 if (clock_skew_detector_.ClockSkewDetected(base::TimeTicks::Now(), 863 if (clock_skew_detector_.ClockSkewDetected(base::TimeTicks::Now(),
858 base::Time::Now())) { 864 base::Time::Now())) {
859 while (!active_sessions_.empty()) { 865 while (!active_sessions_.empty()) {
860 QuicChromiumClientSession* session = active_sessions_.begin()->second; 866 QuicChromiumClientSession* session = active_sessions_.begin()->second;
861 OnSessionGoingAway(session); 867 OnSessionGoingAway(session);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
920 926
921 // TODO(rtenneti): |task_runner_| is used by the Job. Initialize task_runner_ 927 // TODO(rtenneti): |task_runner_| is used by the Job. Initialize task_runner_
922 // in the constructor after WebRequestActionWithThreadsTest.* tests are fixed. 928 // in the constructor after WebRequestActionWithThreadsTest.* tests are fixed.
923 if (!task_runner_) 929 if (!task_runner_)
924 task_runner_ = base::ThreadTaskRunnerHandle::Get().get(); 930 task_runner_ = base::ThreadTaskRunnerHandle::Get().get();
925 931
926 ignore_result(StartCertVerifyJob(server_id, cert_verify_flags, net_log)); 932 ignore_result(StartCertVerifyJob(server_id, cert_verify_flags, net_log));
927 933
928 QuicSessionKey key(destination, server_id); 934 QuicSessionKey key(destination, server_id);
929 std::unique_ptr<Job> job = base::MakeUnique<Job>( 935 std::unique_ptr<Job> job = base::MakeUnique<Job>(
930 this, host_resolver_, key, WasQuicRecentlyBroken(server_id), 936 this, quic_version, host_resolver_, key, WasQuicRecentlyBroken(server_id),
931 cert_verify_flags, net_log); 937 cert_verify_flags, net_log);
932 int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete, 938 int rv = job->Run(base::Bind(&QuicStreamFactory::OnJobComplete,
933 base::Unretained(this), job.get())); 939 base::Unretained(this), job.get()));
934 if (rv == ERR_IO_PENDING) { 940 if (rv == ERR_IO_PENDING) {
935 job_requests_map_[server_id].insert(request); 941 job_requests_map_[server_id].insert(request);
936 active_jobs_[server_id] = std::move(job); 942 active_jobs_[server_id] = std::move(job);
937 return rv; 943 return rv;
938 } 944 }
939 if (rv == OK) { 945 if (rv == OK) {
940 // TODO(rtenneti): crbug.com/498823 - revert active_sessions_.empty() 946 // TODO(rtenneti): crbug.com/498823 - revert active_sessions_.empty()
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
1451 IPAddress last_address; 1457 IPAddress last_address;
1452 if (http_server_properties_->GetSupportsQuic(&last_address) && 1458 if (http_server_properties_->GetSupportsQuic(&last_address) &&
1453 last_address == local_address_.address()) { 1459 last_address == local_address_.address()) {
1454 require_confirmation_ = false; 1460 require_confirmation_ = false;
1455 } 1461 }
1456 } 1462 }
1457 1463
1458 return OK; 1464 return OK;
1459 } 1465 }
1460 1466
1461 int QuicStreamFactory::CreateSession( 1467 int QuicStreamFactory::CreateSession(const QuicSessionKey& key,
1462 const QuicSessionKey& key, 1468 const QuicVersion& quic_version,
1463 int cert_verify_flags, 1469 int cert_verify_flags,
1464 bool require_confirmation, 1470 bool require_confirmation,
1465 const AddressList& address_list, 1471 const AddressList& address_list,
1466 base::TimeTicks dns_resolution_start_time, 1472 base::TimeTicks dns_resolution_start_time,
1467 base::TimeTicks dns_resolution_end_time, 1473 base::TimeTicks dns_resolution_end_time,
1468 const NetLogWithSource& net_log, 1474 const NetLogWithSource& net_log,
1469 QuicChromiumClientSession** session) { 1475 QuicChromiumClientSession** session) {
1470 TRACE_EVENT0(kNetTracingCategory, "QuicStreamFactory::CreateSession"); 1476 TRACE_EVENT0(kNetTracingCategory, "QuicStreamFactory::CreateSession");
1471 IPEndPoint addr = *address_list.begin(); 1477 IPEndPoint addr = *address_list.begin();
1472 const QuicServerId& server_id = key.server_id(); 1478 const QuicServerId& server_id = key.server_id();
1473 DatagramSocket::BindType bind_type = DatagramSocket::DEFAULT_BIND; 1479 DatagramSocket::BindType bind_type = DatagramSocket::DEFAULT_BIND;
1474 std::unique_ptr<DatagramClientSocket> socket( 1480 std::unique_ptr<DatagramClientSocket> socket(
1475 client_socket_factory_->CreateDatagramClientSocket( 1481 client_socket_factory_->CreateDatagramClientSocket(
1476 bind_type, RandIntCallback(), net_log.net_log(), net_log.source())); 1482 bind_type, RandIntCallback(), net_log.net_log(), net_log.source()));
1477 1483
1478 // Passing in kInvalidNetworkHandle binds socket to default network. 1484 // Passing in kInvalidNetworkHandle binds socket to default network.
1479 int rv = ConfigureSocket(socket.get(), addr, 1485 int rv = ConfigureSocket(socket.get(), addr,
(...skipping 15 matching lines...) Expand all
1495 if (store_server_configs_in_properties_) { 1501 if (store_server_configs_in_properties_) {
1496 server_info = base::MakeUnique<PropertiesBasedQuicServerInfo>( 1502 server_info = base::MakeUnique<PropertiesBasedQuicServerInfo>(
1497 server_id, http_server_properties_); 1503 server_id, http_server_properties_);
1498 } 1504 }
1499 InitializeCachedStateInCryptoConfig(server_id, server_info, &connection_id); 1505 InitializeCachedStateInCryptoConfig(server_id, server_info, &connection_id);
1500 1506
1501 QuicChromiumPacketWriter* writer = new QuicChromiumPacketWriter(socket.get()); 1507 QuicChromiumPacketWriter* writer = new QuicChromiumPacketWriter(socket.get());
1502 QuicConnection* connection = new QuicConnection( 1508 QuicConnection* connection = new QuicConnection(
1503 connection_id, QuicSocketAddress(QuicSocketAddressImpl(addr)), 1509 connection_id, QuicSocketAddress(QuicSocketAddressImpl(addr)),
1504 helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */, 1510 helper_.get(), alarm_factory_.get(), writer, true /* owns_writer */,
1505 Perspective::IS_CLIENT, supported_versions_); 1511 Perspective::IS_CLIENT, {quic_version});
1506 connection->set_ping_timeout(ping_timeout_); 1512 connection->set_ping_timeout(ping_timeout_);
1507 connection->SetMaxPacketLength(max_packet_length_); 1513 connection->SetMaxPacketLength(max_packet_length_);
1508 1514
1509 QuicConfig config = config_; 1515 QuicConfig config = config_;
1510 config.set_max_undecryptable_packets(kMaxUndecryptablePackets); 1516 config.set_max_undecryptable_packets(kMaxUndecryptablePackets);
1511 config.SetInitialSessionFlowControlWindowToSend( 1517 config.SetInitialSessionFlowControlWindowToSend(
1512 kQuicSessionMaxRecvWindowSize); 1518 kQuicSessionMaxRecvWindowSize);
1513 config.SetInitialStreamFlowControlWindowToSend(kQuicStreamMaxRecvWindowSize); 1519 config.SetInitialStreamFlowControlWindowToSend(kQuicStreamMaxRecvWindowSize);
1514 config.SetBytesForConnectionIdToSend(0); 1520 config.SetBytesForConnectionIdToSend(0);
1515 ConfigureInitialRttEstimate(server_id, &config); 1521 ConfigureInitialRttEstimate(server_id, &config);
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1713 // Since the session was active, there's no longer an 1719 // Since the session was active, there's no longer an
1714 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP 1720 // HttpStreamFactoryImpl::Job running which can mark it broken, unless the TCP
1715 // job also fails. So to avoid not using QUIC when we otherwise could, we mark 1721 // job also fails. So to avoid not using QUIC when we otherwise could, we mark
1716 // it as recently broken, which means that 0-RTT will be disabled but we'll 1722 // it as recently broken, which means that 0-RTT will be disabled but we'll
1717 // still race. 1723 // still race.
1718 http_server_properties_->MarkAlternativeServiceRecentlyBroken( 1724 http_server_properties_->MarkAlternativeServiceRecentlyBroken(
1719 alternative_service); 1725 alternative_service);
1720 } 1726 }
1721 1727
1722 } // namespace net 1728 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/chromium/quic_stream_factory.h ('k') | net/quic/chromium/quic_stream_factory_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698