summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorrch <rch@chromium.org>2014-12-01 15:23:39 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-01 23:24:39 +0000
commit77f87735cbbcc50ce6b89bb7cd37f22fa1c21a30 (patch)
tree82077bbf718fde136048243260b669bad59bcdda /net
parenta615e9c5e04dc5ffe13512d448e4a94b7107a102 (diff)
downloadchromium_src-77f87735cbbcc50ce6b89bb7cd37f22fa1c21a30.zip
chromium_src-77f87735cbbcc50ce6b89bb7cd37f22fa1c21a30.tar.gz
chromium_src-77f87735cbbcc50ce6b89bb7cd37f22fa1c21a30.tar.bz2
Fix a bug in HttpServerPropertiesImpl::HasAlternateProtocol
where Alternate-Protcol probability was not respected for canonical servers. BUG=437911 Review URL: https://codereview.chromium.org/768213002 Cr-Commit-Position: refs/heads/master@{#306288}
Diffstat (limited to 'net')
-rw-r--r--net/http/http_server_properties_impl.cc12
-rw-r--r--net/http/http_server_properties_impl_unittest.cc30
2 files changed, 38 insertions, 4 deletions
diff --git a/net/http/http_server_properties_impl.cc b/net/http/http_server_properties_impl.cc
index 1bf541b..477a68f 100644
--- a/net/http/http_server_properties_impl.cc
+++ b/net/http/http_server_properties_impl.cc
@@ -204,12 +204,16 @@ bool HttpServerPropertiesImpl::HasAlternateProtocol(
if (g_forced_alternate_protocol)
return true;
AlternateProtocolMap::const_iterator it = alternate_protocol_map_.Get(server);
- if (it != alternate_protocol_map_.end() &&
- it->second.probability >= alternate_protocol_probability_threshold_) {
- return true;
+ if (it != alternate_protocol_map_.end())
+ return it->second.probability >= alternate_protocol_probability_threshold_;
+
+ auto canonical = GetCanonicalHost(server);
+ if (canonical == canonical_host_to_origin_map_.end() ||
+ canonical->second.Equals(server)) {
+ return false;
}
- return GetCanonicalHost(server) != canonical_host_to_origin_map_.end();
+ return HasAlternateProtocol(canonical->second);
}
std::string HttpServerPropertiesImpl::GetCanonicalSuffix(
diff --git a/net/http/http_server_properties_impl_unittest.cc b/net/http/http_server_properties_impl_unittest.cc
index 3d1bacb..572b0fb 100644
--- a/net/http/http_server_properties_impl_unittest.cc
+++ b/net/http/http_server_properties_impl_unittest.cc
@@ -445,6 +445,36 @@ TEST_F(AlternateProtocolServerPropertiesTest, Canonical) {
EXPECT_EQ(".c.youtube.com", impl_.GetCanonicalSuffix(canonical_port_pair));
}
+TEST_F(AlternateProtocolServerPropertiesTest, CanonicalBelowThreshold) {
+ impl_.SetAlternateProtocolProbabilityThreshold(0.02);
+
+ HostPortPair test_host_port_pair("foo.c.youtube.com", 80);
+ HostPortPair canonical_port_pair("bar.c.youtube.com", 80);
+ AlternateProtocolInfo canonical_protocol(1234, QUIC, 0.01);
+
+ impl_.SetAlternateProtocol(canonical_port_pair,
+ canonical_protocol.port,
+ canonical_protocol.protocol,
+ canonical_protocol.probability);
+ EXPECT_FALSE(impl_.HasAlternateProtocol(canonical_port_pair));
+ EXPECT_FALSE(impl_.HasAlternateProtocol(test_host_port_pair));
+}
+
+TEST_F(AlternateProtocolServerPropertiesTest, CanonicalAboveThreshold) {
+ impl_.SetAlternateProtocolProbabilityThreshold(0.02);
+
+ HostPortPair test_host_port_pair("foo.c.youtube.com", 80);
+ HostPortPair canonical_port_pair("bar.c.youtube.com", 80);
+ AlternateProtocolInfo canonical_protocol(1234, QUIC, 0.03);
+
+ impl_.SetAlternateProtocol(canonical_port_pair,
+ canonical_protocol.port,
+ canonical_protocol.protocol,
+ canonical_protocol.probability);
+ EXPECT_TRUE(impl_.HasAlternateProtocol(canonical_port_pair));
+ EXPECT_TRUE(impl_.HasAlternateProtocol(test_host_port_pair));
+}
+
TEST_F(AlternateProtocolServerPropertiesTest, ClearCanonical) {
HostPortPair test_host_port_pair("foo.c.youtube.com", 80);
HostPortPair canonical_port_pair("bar.c.youtube.com", 80);