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

Unified Diff: net/quic/quic_stream_factory.cc

Issue 665083009: ABANDONED Handle multiple AlternateProtocols for each HostPortPair. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: net/quic/quic_stream_factory.cc
diff --git a/net/quic/quic_stream_factory.cc b/net/quic/quic_stream_factory.cc
index 678463ea70be5b59e5753ecb7022f4cd2012e4b6..2b4335a9739e8eb9c39772b9c5e298d3f9fc4b99 100644
--- a/net/quic/quic_stream_factory.cc
+++ b/net/quic/quic_stream_factory.cc
@@ -603,10 +603,18 @@ int QuicStreamFactory::Create(const HostPortPair& host_port_pair,
if (!task_runner_)
task_runner_ = base::MessageLoop::current()->message_loop_proxy().get();
- bool was_alternate_protocol_recently_broken =
- http_server_properties_ &&
- http_server_properties_->WasAlternateProtocolRecentlyBroken(
- server_id.host_port_pair());
+ bool was_alternate_protocol_recently_broken = false;
+ if (http_server_properties_ &&
+ http_server_properties_->HasAlternateProtocol(
+ server_id.host_port_pair())) {
+ AlternateProtocols alternate_protocols =
+ http_server_properties_->GetAlternateProtocol(
+ server_id.host_port_pair());
+ AlternateProtocolInfo alternate_protocol = alternate_protocols[0];
+ was_alternate_protocol_recently_broken =
+ http_server_properties_->WasAlternateProtocolRecentlyBroken(
+ server_id.host_port_pair(), alternate_protocol);
+ }
scoped_ptr<Job> job(new Job(this, host_resolver_, host_port_pair, is_https,
was_alternate_protocol_recently_broken,
privacy_mode, method, quic_server_info, net_log));
@@ -1041,9 +1049,20 @@ void QuicStreamFactory::ProcessGoingAwaySession(
// session connected until the handshake has been confirmed.
HistogramBrokenAlternateProtocolLocation(
BROKEN_ALTERNATE_PROTOCOL_LOCATION_QUIC_STREAM_FACTORY);
- AlternateProtocolInfo alternate =
+
+ const AlternateProtocols alternate_protocols =
http_server_properties_->GetAlternateProtocol(server);
- DCHECK_EQ(QUIC, alternate.protocol);
+ AlternateProtocols::const_iterator alternate;
+ for (alternate = alternate_protocols.begin();
+ alternate != alternate_protocols.end();
+ ++alternate) {
+ if (alternate->protocol == QUIC) {
+ break;
+ }
+ }
+ // Do not use DCHECK_NE as operator<<(ostream, iterator) is not defined.
+ DCHECK(alternate != alternate_protocols.end())
+ << "No QUIC alternate protocol found";
// Since the session was active, there's no longer an
// HttpStreamFactoryImpl::Job running which can mark it broken, unless the
@@ -1051,14 +1070,12 @@ void QuicStreamFactory::ProcessGoingAwaySession(
// we mark it as broken, and then immediately re-enable it. This leaves
// QUIC as "recently broken" which means that 0-RTT will be disabled but
// we'll still race.
- http_server_properties_->SetBrokenAlternateProtocol(server);
- http_server_properties_->ClearAlternateProtocol(server);
- http_server_properties_->SetAlternateProtocol(
- server, alternate.port, alternate.protocol, 1);
- DCHECK_EQ(QUIC,
- http_server_properties_->GetAlternateProtocol(server).protocol);
+ http_server_properties_->SetBrokenAlternateProtocol(server, *alternate);
+ http_server_properties_->RemoveAlternateProtocol(server, *alternate);
+ http_server_properties_->AddAlternateProtocol(
+ server, alternate->port, alternate->protocol, 1);
DCHECK(http_server_properties_->WasAlternateProtocolRecentlyBroken(
- server));
+ server, *alternate));
}
} // namespace net

Powered by Google App Engine
This is Rietveld 408576698