Don't pool HTTP2 sessions used for tunnels and direct connections.
Pooling sockets from independent socket pools together breaks layering
assumptions. A later point in time, these pools will also need to
wrap lower layer objects than ClientSocketHandles.
Bug: 895562
Change-Id: I8235f244048475bcb64bf48b3e15309e8607e85e
Reviewed-on: https://chromium-review.googlesource.com/c/1362192
Commit-Queue: Matt Menke <[email protected]>
Reviewed-by: Bence Béky <[email protected]>
Cr-Commit-Position: refs/heads/master@{#615585}
diff --git a/net/http/bidirectional_stream_unittest.cc b/net/http/bidirectional_stream_unittest.cc
index 0c4cc7b..28f52e6 100644
--- a/net/http/bidirectional_stream_unittest.cc
+++ b/net/http/bidirectional_stream_unittest.cc
@@ -431,7 +431,8 @@
session_deps_.net_log = net_log_.bound().net_log();
http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, socket_tag);
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, socket_tag);
session_ = CreateSpdySession(http_session_.get(), key, net_log_.bound());
}
@@ -624,7 +625,8 @@
http_session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
std::unique_ptr<BidirectionalStreamRequestInfo> request_info(
new BidirectionalStreamRequestInfo);
request_info->method = "GET";
diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
index d293241..87b3b610 100644
--- a/net/http/http_network_transaction_unittest.cc
+++ b/net/http/http_network_transaction_unittest.cc
@@ -265,6 +265,57 @@
EXPECT_TRUE(load_timing_info.receive_headers_end.is_null());
}
+// ProxyResolver that records URLs passed to it, and that can be told what
+// result to return.
+class CapturingProxyResolver : public ProxyResolver {
+ public:
+ CapturingProxyResolver()
+ : proxy_server_(ProxyServer::SCHEME_HTTP, HostPortPair("myproxy", 80)) {}
+ ~CapturingProxyResolver() override = default;
+
+ int GetProxyForURL(const GURL& url,
+ ProxyInfo* results,
+ CompletionOnceCallback callback,
+ std::unique_ptr<Request>* request,
+ const NetLogWithSource& net_log) override {
+ results->UseProxyServer(proxy_server_);
+ resolved_.push_back(url);
+ return OK;
+ }
+
+ // Sets whether the resolver should use direct connections, instead of a
+ // proxy.
+ void set_proxy_server(ProxyServer proxy_server) {
+ proxy_server_ = proxy_server;
+ }
+
+ const std::vector<GURL>& resolved() const { return resolved_; }
+
+ private:
+ std::vector<GURL> resolved_;
+
+ ProxyServer proxy_server_;
+
+ DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver);
+};
+
+class CapturingProxyResolverFactory : public ProxyResolverFactory {
+ public:
+ explicit CapturingProxyResolverFactory(CapturingProxyResolver* resolver)
+ : ProxyResolverFactory(false), resolver_(resolver) {}
+
+ int CreateProxyResolver(const scoped_refptr<PacFileData>& pac_script,
+ std::unique_ptr<ProxyResolver>* resolver,
+ CompletionOnceCallback callback,
+ std::unique_ptr<Request>* request) override {
+ *resolver = std::make_unique<ForwardingProxyResolver>(resolver_);
+ return OK;
+ }
+
+ private:
+ ProxyResolver* resolver_;
+};
+
std::unique_ptr<HttpNetworkSession> CreateSession(
SpdySessionDependencies* session_deps) {
return SpdySessionDependencies::SpdyCreateSession(session_deps);
@@ -5249,7 +5300,8 @@
// Race a session to the proxy, which completes first.
session_deps_.host_resolver->set_ondemand_mode(false);
SpdySessionKey key(HostPortPair("proxy", 70), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kTrue, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
CreateSpdySession(session.get(), key, log.bound());
@@ -5965,6 +6017,272 @@
EXPECT_EQ(2, callback.GetResult(rv));
}
+// Test that an HTTP/2 CONNECT through an HTTPS Proxy to a HTTP/2 server and a
+// direct (non-proxied) request to the proxy server are not pooled, as that
+// would break socket pool isolation.
+TEST_F(HttpNetworkTransactionTest, SpdyProxyIsolation1) {
+ ProxyConfig proxy_config;
+ proxy_config.set_auto_detect(true);
+ proxy_config.set_pac_url(GURL("http://fooproxyurl"));
+
+ CapturingProxyResolver capturing_proxy_resolver;
+ session_deps_.proxy_resolution_service =
+ std::make_unique<ProxyResolutionService>(
+ std::make_unique<ProxyConfigServiceFixed>(ProxyConfigWithAnnotation(
+ proxy_config, TRAFFIC_ANNOTATION_FOR_TESTS)),
+ std::make_unique<CapturingProxyResolverFactory>(
+ &capturing_proxy_resolver),
+ nullptr);
+
+ std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+
+ SpdyTestUtil spdy_util1;
+ // CONNECT to www.example.org:443 via HTTP/2.
+ spdy::SpdySerializedFrame connect(spdy_util_.ConstructSpdyConnect(
+ NULL, 0, 1, LOWEST, HostPortPair("www.example.org", 443)));
+ // fetch https://www.example.org/ via HTTP/2.
+ const char kMyUrl[] = "https://www.example.org/";
+ spdy::SpdySerializedFrame get(spdy_util1.ConstructSpdyGet(kMyUrl, 1, LOWEST));
+ spdy::SpdySerializedFrame wrapped_get(
+ spdy_util_.ConstructWrappedSpdyFrame(get, 1));
+ spdy::SpdySerializedFrame conn_resp(
+ spdy_util_.ConstructSpdyGetReply(NULL, 0, 1));
+ spdy::SpdySerializedFrame get_resp(
+ spdy_util1.ConstructSpdyGetReply(NULL, 0, 1));
+ spdy::SpdySerializedFrame wrapped_get_resp(
+ spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1));
+ spdy::SpdySerializedFrame body(spdy_util1.ConstructSpdyDataFrame(1, true));
+ spdy::SpdySerializedFrame wrapped_body(
+ spdy_util_.ConstructWrappedSpdyFrame(body, 1));
+ spdy::SpdySerializedFrame window_update_get_resp(
+ spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp.size()));
+ spdy::SpdySerializedFrame window_update_body(
+ spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body.size()));
+
+ MockWrite spdy_writes1[] = {
+ CreateMockWrite(connect, 0),
+ CreateMockWrite(wrapped_get, 2),
+ CreateMockWrite(window_update_get_resp, 6),
+ CreateMockWrite(window_update_body, 7),
+ };
+
+ MockRead spdy_reads1[] = {
+ CreateMockRead(conn_resp, 1, ASYNC),
+ MockRead(ASYNC, ERR_IO_PENDING, 3),
+ CreateMockRead(wrapped_get_resp, 4, ASYNC),
+ CreateMockRead(wrapped_body, 5, ASYNC),
+ MockRead(ASYNC, 0, 8),
+ };
+
+ SequencedSocketData spdy_data1(spdy_reads1, spdy_writes1);
+ session_deps_.socket_factory->AddSocketDataProvider(&spdy_data1);
+
+ // Fetch https://proxy:70/ via HTTP/2. Needs a new SpdyTestUtil, since it uses
+ // a new pipe.
+ SpdyTestUtil spdy_util2;
+ spdy::SpdySerializedFrame req(
+ spdy_util2.ConstructSpdyGet("https://proxy:70/", 1, LOWEST));
+ MockWrite spdy_writes2[] = {CreateMockWrite(req, 0)};
+
+ spdy::SpdySerializedFrame resp(
+ spdy_util2.ConstructSpdyGetReply(nullptr, 0, 1));
+ spdy::SpdySerializedFrame data(spdy_util2.ConstructSpdyDataFrame(1, true));
+ MockRead spdy_reads2[] = {
+ CreateMockRead(resp, 1),
+ CreateMockRead(data, 2),
+ MockRead(ASYNC, 0, 3),
+ };
+ SequencedSocketData spdy_data2(spdy_reads2, spdy_writes2);
+ session_deps_.socket_factory->AddSocketDataProvider(&spdy_data2);
+
+ SSLSocketDataProvider ssl(ASYNC, OK);
+ ssl.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
+ SSLSocketDataProvider ssl2(ASYNC, OK);
+ ssl2.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
+ SSLSocketDataProvider ssl3(ASYNC, OK);
+ ssl3.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3);
+
+ TestCompletionCallback callback;
+ std::string response_data;
+
+ // Make a request using proxy:70 as a HTTP/2 proxy.
+ capturing_proxy_resolver.set_proxy_server(
+ ProxyServer(ProxyServer::SCHEME_HTTPS, HostPortPair("proxy", 70)));
+ HttpRequestInfo request1;
+ request1.method = "GET";
+ request1.url = GURL("https://www.example.org/");
+ request1.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+
+ HttpNetworkTransaction trans1(LOWEST, session.get());
+ int rv = trans1.Start(&request1, callback.callback(), NetLogWithSource());
+ EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+ // Allow the SpdyProxyClientSocket's write callback to complete.
+ base::RunLoop().RunUntilIdle();
+ // Now allow the read of the response to complete.
+ spdy_data1.Resume();
+ rv = callback.WaitForResult();
+ EXPECT_THAT(rv, IsOk());
+
+ const HttpResponseInfo* response = trans1.GetResponseInfo();
+ ASSERT_TRUE(response);
+ ASSERT_TRUE(response->headers);
+ EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
+
+ ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk());
+ EXPECT_EQ(kUploadData, response_data);
+ RunUntilIdle();
+
+ // Make a direct HTTP/2 request to proxy:70.
+ capturing_proxy_resolver.set_proxy_server(ProxyServer::Direct());
+ HttpRequestInfo request2;
+ request2.method = "GET";
+ request2.url = GURL("https://proxy:70/");
+ request2.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+ HttpNetworkTransaction trans2(LOWEST, session.get());
+ EXPECT_THAT(callback.GetResult(trans2.Start(&request2, callback.callback(),
+ NetLogWithSource())),
+ IsOk());
+ ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk());
+}
+
+// Same as above, but reverse request order, since the code to check for an
+// existing session is different for tunnels and direct connections.
+TEST_F(HttpNetworkTransactionTest, SpdyProxyIsolation2) {
+ // Configure against https proxy server "myproxy:80".
+ ProxyConfig proxy_config;
+ proxy_config.set_auto_detect(true);
+ proxy_config.set_pac_url(GURL("http://fooproxyurl"));
+
+ CapturingProxyResolver capturing_proxy_resolver;
+ session_deps_.proxy_resolution_service =
+ std::make_unique<ProxyResolutionService>(
+ std::make_unique<ProxyConfigServiceFixed>(ProxyConfigWithAnnotation(
+ proxy_config, TRAFFIC_ANNOTATION_FOR_TESTS)),
+ std::make_unique<CapturingProxyResolverFactory>(
+ &capturing_proxy_resolver),
+ nullptr);
+
+ std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_));
+ // Fetch https://proxy:70/ via HTTP/2.
+ SpdyTestUtil spdy_util1;
+ spdy::SpdySerializedFrame req(
+ spdy_util1.ConstructSpdyGet("https://proxy:70/", 1, LOWEST));
+ MockWrite spdy_writes1[] = {CreateMockWrite(req, 0)};
+
+ spdy::SpdySerializedFrame resp(
+ spdy_util1.ConstructSpdyGetReply(nullptr, 0, 1));
+ spdy::SpdySerializedFrame data(spdy_util1.ConstructSpdyDataFrame(1, true));
+ MockRead spdy_reads1[] = {
+ CreateMockRead(resp, 1),
+ CreateMockRead(data, 2),
+ MockRead(ASYNC, 0, 3),
+ };
+ SequencedSocketData spdy_data1(spdy_reads1, spdy_writes1);
+ session_deps_.socket_factory->AddSocketDataProvider(&spdy_data1);
+
+ SpdyTestUtil spdy_util2;
+ // CONNECT to www.example.org:443 via HTTP/2.
+ spdy::SpdySerializedFrame connect(spdy_util_.ConstructSpdyConnect(
+ nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443)));
+ // fetch https://www.example.org/ via HTTP/2.
+ const char kMyUrl[] = "https://www.example.org/";
+ spdy::SpdySerializedFrame get(spdy_util2.ConstructSpdyGet(kMyUrl, 1, LOWEST));
+ spdy::SpdySerializedFrame wrapped_get(
+ spdy_util_.ConstructWrappedSpdyFrame(get, 1));
+ spdy::SpdySerializedFrame conn_resp(
+ spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
+ spdy::SpdySerializedFrame get_resp(
+ spdy_util2.ConstructSpdyGetReply(nullptr, 0, 1));
+ spdy::SpdySerializedFrame wrapped_get_resp(
+ spdy_util_.ConstructWrappedSpdyFrame(get_resp, 1));
+ spdy::SpdySerializedFrame body(spdy_util2.ConstructSpdyDataFrame(1, true));
+ spdy::SpdySerializedFrame wrapped_body(
+ spdy_util_.ConstructWrappedSpdyFrame(body, 1));
+ spdy::SpdySerializedFrame window_update_get_resp(
+ spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_get_resp.size()));
+ spdy::SpdySerializedFrame window_update_body(
+ spdy_util_.ConstructSpdyWindowUpdate(1, wrapped_body.size()));
+
+ MockWrite spdy_writes2[] = {
+ CreateMockWrite(connect, 0),
+ CreateMockWrite(wrapped_get, 2),
+ CreateMockWrite(window_update_get_resp, 6),
+ CreateMockWrite(window_update_body, 7),
+ };
+
+ MockRead spdy_reads2[] = {
+ CreateMockRead(conn_resp, 1, ASYNC),
+ MockRead(ASYNC, ERR_IO_PENDING, 3),
+ CreateMockRead(wrapped_get_resp, 4, ASYNC),
+ CreateMockRead(wrapped_body, 5, ASYNC),
+ MockRead(ASYNC, 0, 8),
+ };
+
+ SequencedSocketData spdy_data2(spdy_reads2, spdy_writes2);
+ session_deps_.socket_factory->AddSocketDataProvider(&spdy_data2);
+
+ SSLSocketDataProvider ssl(ASYNC, OK);
+ ssl.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl);
+ SSLSocketDataProvider ssl2(ASYNC, OK);
+ ssl2.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl2);
+ SSLSocketDataProvider ssl3(ASYNC, OK);
+ ssl3.next_proto = kProtoHTTP2;
+ session_deps_.socket_factory->AddSSLSocketDataProvider(&ssl3);
+
+ TestCompletionCallback callback;
+ std::string response_data;
+
+ // Make a direct HTTP/2 request to proxy:70.
+ capturing_proxy_resolver.set_proxy_server(ProxyServer::Direct());
+ HttpRequestInfo request1;
+ request1.method = "GET";
+ request1.url = GURL("https://proxy:70/");
+ request1.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+ HttpNetworkTransaction trans1(LOWEST, session.get());
+ EXPECT_THAT(callback.GetResult(trans1.Start(&request1, callback.callback(),
+ NetLogWithSource())),
+ IsOk());
+ ASSERT_THAT(ReadTransaction(&trans1, &response_data), IsOk());
+ RunUntilIdle();
+
+ // Make a request using proxy:70 as a HTTP/2 proxy.
+ capturing_proxy_resolver.set_proxy_server(
+ ProxyServer(ProxyServer::SCHEME_HTTPS, HostPortPair("proxy", 70)));
+ HttpRequestInfo request2;
+ request2.method = "GET";
+ request2.url = GURL("https://www.example.org/");
+ request2.traffic_annotation =
+ net::MutableNetworkTrafficAnnotationTag(TRAFFIC_ANNOTATION_FOR_TESTS);
+
+ HttpNetworkTransaction trans2(LOWEST, session.get());
+ int rv = trans2.Start(&request2, callback.callback(), NetLogWithSource());
+ EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
+
+ // Allow the SpdyProxyClientSocket's write callback to complete.
+ base::RunLoop().RunUntilIdle();
+ // Now allow the read of the response to complete.
+ spdy_data2.Resume();
+ rv = callback.WaitForResult();
+ EXPECT_THAT(rv, IsOk());
+
+ const HttpResponseInfo* response2 = trans2.GetResponseInfo();
+ ASSERT_TRUE(response2);
+ ASSERT_TRUE(response2->headers);
+ EXPECT_EQ("HTTP/1.1 200", response2->headers->GetStatusLine());
+
+ ASSERT_THAT(ReadTransaction(&trans2, &response_data), IsOk());
+ EXPECT_EQ(kUploadData, response_data);
+}
+
// Test the challenge-response-retry sequence through an HTTPS Proxy
TEST_F(HttpNetworkTransactionTest, HttpsProxyAuthRetry) {
HttpRequestInfo request;
@@ -12280,48 +12598,6 @@
EXPECT_EQ("hello world", response_data);
}
-class CapturingProxyResolver : public ProxyResolver {
- public:
- CapturingProxyResolver() = default;
- ~CapturingProxyResolver() override = default;
-
- int GetProxyForURL(const GURL& url,
- ProxyInfo* results,
- CompletionOnceCallback callback,
- std::unique_ptr<Request>* request,
- const NetLogWithSource& net_log) override {
- ProxyServer proxy_server(ProxyServer::SCHEME_HTTP,
- HostPortPair("myproxy", 80));
- results->UseProxyServer(proxy_server);
- resolved_.push_back(url);
- return OK;
- }
-
- const std::vector<GURL>& resolved() const { return resolved_; }
-
- private:
- std::vector<GURL> resolved_;
-
- DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver);
-};
-
-class CapturingProxyResolverFactory : public ProxyResolverFactory {
- public:
- explicit CapturingProxyResolverFactory(CapturingProxyResolver* resolver)
- : ProxyResolverFactory(false), resolver_(resolver) {}
-
- int CreateProxyResolver(const scoped_refptr<PacFileData>& pac_script,
- std::unique_ptr<ProxyResolver>* resolver,
- CompletionOnceCallback callback,
- std::unique_ptr<Request>* request) override {
- *resolver = std::make_unique<ForwardingProxyResolver>(resolver_);
- return OK;
- }
-
- private:
- ProxyResolver* resolver_;
-};
-
// Test that proxy is resolved using the origin url,
// regardless of the alternative server.
TEST_F(HttpNetworkTransactionTest, UseOriginNotAlternativeForProxy) {
@@ -12589,7 +12865,8 @@
// Set up an initial SpdySession in the pool to reuse.
HostPortPair host_port_pair("www.example.org", 443);
SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
CreateSpdySession(session.get(), key, NetLogWithSource());
@@ -14256,7 +14533,8 @@
// Set up an initial SpdySession in the pool to reuse.
HostPortPair host_port_pair("www.example.org", 443);
SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
CreateSpdySession(session.get(), key, NetLogWithSource());
@@ -15927,8 +16205,9 @@
session_deps_.socket_factory->AddSocketDataProvider(&http_data);
HostPortPair host_port_pair_a("www.a.com", 443);
- SpdySessionKey spdy_session_key_a(host_port_pair_a, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey spdy_session_key_a(
+ host_port_pair_a, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_FALSE(
HasSpdySession(session->spdy_session_pool(), spdy_session_key_a));
@@ -15961,8 +16240,9 @@
HasSpdySession(session->spdy_session_pool(), spdy_session_key_a));
HostPortPair host_port_pair_b("www.b.com", 443);
- SpdySessionKey spdy_session_key_b(host_port_pair_b, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey spdy_session_key_b(
+ host_port_pair_b, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_FALSE(
HasSpdySession(session->spdy_session_pool(), spdy_session_key_b));
HttpRequestInfo request2;
@@ -15992,8 +16272,9 @@
HasSpdySession(session->spdy_session_pool(), spdy_session_key_b));
HostPortPair host_port_pair_a1("www.a.com", 80);
- SpdySessionKey spdy_session_key_a1(host_port_pair_a1, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey spdy_session_key_a1(
+ host_port_pair_a1, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_FALSE(
HasSpdySession(session->spdy_session_pool(), spdy_session_key_a1));
HttpRequestInfo request3;
diff --git a/net/http/http_proxy_client_socket_wrapper.cc b/net/http/http_proxy_client_socket_wrapper.cc
index a93ef33..f200e5f3 100644
--- a/net/http/http_proxy_client_socket_wrapper.cc
+++ b/net/http/http_proxy_client_socket_wrapper.cc
@@ -502,6 +502,7 @@
->destination()
.host_port_pair(),
ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kTrue,
initial_socket_tag_);
if (spdy_session_pool_->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
@@ -613,7 +614,8 @@
DCHECK(ssl_params_);
SpdySessionKey key(
ssl_params_->GetDirectConnectionParams()->destination().host_port_pair(),
- ProxyServer::Direct(), PRIVACY_MODE_DISABLED, initial_socket_tag_);
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kTrue, initial_socket_tag_);
base::WeakPtr<SpdySession> spdy_session =
spdy_session_pool_->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
diff --git a/net/http/http_stream_factory_job.cc b/net/http/http_stream_factory_job.cc
index 722ea80..fbc1be9a 100644
--- a/net/http/http_stream_factory_job.cc
+++ b/net/http/http_stream_factory_job.cc
@@ -413,15 +413,16 @@
const GURL& origin_url,
PrivacyMode privacy_mode,
const SocketTag& socket_tag) {
- // In the case that we're using an HTTPS proxy for an HTTP url,
- // we look for a SPDY session *to* the proxy, instead of to the
- // origin server.
+ // In the case that we're using an HTTPS proxy for an HTTP url, look for a
+ // HTTP/2 proxy session *to* the proxy, instead of to the origin server.
if (!spdy_session_direct) {
return SpdySessionKey(proxy_server.host_port_pair(), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, socket_tag);
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kTrue, socket_tag);
}
return SpdySessionKey(HostPortPair::FromURL(origin_url), proxy_server,
- privacy_mode, socket_tag);
+ privacy_mode, SpdySessionKey::IsProxySession::kFalse,
+ socket_tag);
}
bool HttpStreamFactory::Job::CanUseExistingSpdySession() const {
@@ -432,10 +433,10 @@
return false;
}
- // We need to make sure that if a spdy session was created for
+ // We need to make sure that if a HTTP/2 session was created for
// https://somehost/ then we do not use that session for http://somehost:443/.
// The only time we can use an existing session is if the request URL is
- // https (the normal case) or if we are connecting to a SPDY proxy.
+ // https (the normal case) or if we are connecting to a HTTP/2 proxy.
// https://crbug.com/133176
return origin_url_.SchemeIs(url::kHttpsScheme) || try_websocket_over_http2_ ||
proxy_info_.proxy_server().is_https();
@@ -797,7 +798,7 @@
return OK;
if (using_quic_)
return OK;
- // Ask |delegate_delegate_| to update the spdy session key for the request
+ // Ask |delegate_delegate_| to update the HTTP/2 session key for the request
// that launched this job.
delegate_->SetSpdySessionKey(this, spdy_session_key_);
@@ -968,7 +969,7 @@
net_log_, num_streams_);
}
- // If we can't use a SPDY session, don't bother checking for one after
+ // If we can't use a HTTP/2 session, don't bother checking for one after
// the hostname is resolved.
OnHostResolutionCallback resolution_callback =
CanUseExistingSpdySession()
@@ -1018,7 +1019,7 @@
}
if (result == ERR_SPDY_SESSION_ALREADY_EXISTS) {
- // We found a SPDY connection after resolving the host. This is
+ // We found a HTTP/2 connection after resolving the host. This is
// probably an IP pooled connection.
existing_spdy_session_ =
session_->spdy_session_pool()->FindAvailableSession(
@@ -1028,7 +1029,7 @@
using_spdy_ = true;
next_state_ = STATE_CREATE_STREAM;
} else {
- // It is possible that the spdy session no longer exists.
+ // It is possible that the HTTP/2 session no longer exists.
ReturnToStateInitConnection(true /* close connection */);
}
return OK;
diff --git a/net/http/http_stream_factory_unittest.cc b/net/http/http_stream_factory_unittest.cc
index 33c8218..79e45452 100644
--- a/net/http/http_stream_factory_unittest.cc
+++ b/net/http/http_stream_factory_unittest.cc
@@ -602,7 +602,8 @@
// Put a SpdySession in the pool.
HostPortPair host_port_pair("www.google.com", 443);
SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
ignore_result(CreateFakeSpdySession(session->spdy_session_pool(), key));
CapturePreconnectsTransportSocketPool* transport_conn_pool =
@@ -1418,7 +1419,8 @@
// Set an existing SpdySession in the pool.
HostPortPair host_port_pair("www.google.com", 443);
SpdySessionKey key(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_ENABLED, SocketTag());
+ PRIVACY_MODE_ENABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
HttpRequestInfo request_info;
request_info.method = "GET";
diff --git a/net/socket/ssl_client_socket_pool_unittest.cc b/net/socket/ssl_client_socket_pool_unittest.cc
index b90f54d..c4978e1f 100644
--- a/net/socket/ssl_client_socket_pool_unittest.cc
+++ b/net/socket/ssl_client_socket_pool_unittest.cc
@@ -866,9 +866,10 @@
EXPECT_THAT(rv, IsOk());
// Setup a SpdySessionKey
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
MockRead reads[] = {
@@ -925,9 +926,10 @@
EXPECT_THAT(rv, IsOk());
// Setup a SpdySessionKey
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
MockRead reads[] = {
diff --git a/net/spdy/bidirectional_stream_spdy_impl_unittest.cc b/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
index 7f58165..6ab93ce 100644
--- a/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
+++ b/net/spdy/bidirectional_stream_spdy_impl_unittest.cc
@@ -247,6 +247,7 @@
key_(host_port_pair_,
ProxyServer::Direct(),
PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()),
ssl_data_(SSLSocketDataProvider(ASYNC, OK)) {
ssl_data_.next_proto = kProtoHTTP2;
diff --git a/net/spdy/http2_push_promise_index_test.cc b/net/spdy/http2_push_promise_index_test.cc
index 1cbef57..4f505ed 100644
--- a/net/spdy/http2_push_promise_index_test.cc
+++ b/net/spdy/http2_push_promise_index_test.cc
@@ -60,10 +60,12 @@
key1_(HostPortPair::FromURL(url1_),
ProxyServer::Direct(),
PRIVACY_MODE_ENABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()),
key2_(HostPortPair::FromURL(url2_),
ProxyServer::Direct(),
PRIVACY_MODE_ENABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()) {}
const GURL url1_;
diff --git a/net/spdy/spdy_http_stream_unittest.cc b/net/spdy/spdy_http_stream_unittest.cc
index d701ed1..9e61035 100644
--- a/net/spdy/spdy_http_stream_unittest.cc
+++ b/net/spdy/spdy_http_stream_unittest.cc
@@ -131,6 +131,7 @@
key_(host_port_pair_,
ProxyServer::Direct(),
PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()),
ssl_(SYNCHRONOUS, OK) {
session_deps_.net_log = &net_log_;
diff --git a/net/spdy/spdy_network_transaction_unittest.cc b/net/spdy/spdy_network_transaction_unittest.cc
index fb3f2de..7a6db3e2 100644
--- a/net/spdy/spdy_network_transaction_unittest.cc
+++ b/net/spdy/spdy_network_transaction_unittest.cc
@@ -402,7 +402,7 @@
// all closed and not leaked at this point.
SpdySessionKey key(HostPortPair::FromURL(request_.url),
ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
- SocketTag());
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
HttpNetworkSession* session = helper.session();
base::WeakPtr<SpdySession> spdy_session =
session->spdy_session_pool()->FindAvailableSession(
@@ -743,7 +743,8 @@
// starting the first transaction would call Socket::Write() with the first
// HEADERS frame, so the second transaction could not get ahead of it.
SpdySessionKey key(HostPortPair("www.example.org", 443),
- ProxyServer::Direct(), PRIVACY_MODE_DISABLED, SocketTag());
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
auto spdy_session = CreateSpdySession(helper.session(), key, log_);
EXPECT_TRUE(spdy_session);
@@ -3651,7 +3652,8 @@
SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
spdy_session_pool->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
@@ -3765,7 +3767,8 @@
SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
SpdySessionKey key1(HostPortPair::FromURL(GURL(kUrl1)), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session1 =
spdy_session_pool->FindAvailableSession(
key1, /* enable_ip_based_pooling = */ true,
@@ -3776,7 +3779,8 @@
// a client-initiated request would not pool to this connection,
// because the IP address does not match.
SpdySessionKey key2(HostPortPair::FromURL(GURL(kUrl2)), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_FALSE(spdy_session_pool->FindAvailableSession(
key2, /* enable_ip_based_pooling = */ true,
/* is_websocket = */ false, log_));
@@ -4830,7 +4834,8 @@
// GOAWAY frame has not yet been received, SpdySession should be available.
SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
spdy_session_pool->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
@@ -5195,13 +5200,15 @@
EXPECT_EQ("hello!", out.response_data);
// Check that the SpdySession is still in the SpdySessionPool.
- SpdySessionKey session_pool_key_direct(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey session_pool_key_direct(
+ host_port_pair_, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_TRUE(HasSpdySession(spdy_session_pool, session_pool_key_direct));
SpdySessionKey session_pool_key_proxy(
host_port_pair_,
ProxyServer::FromURI("www.foo.com", ProxyServer::SCHEME_HTTP),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kFalse,
+ SocketTag());
EXPECT_FALSE(HasSpdySession(spdy_session_pool, session_pool_key_proxy));
// New SpdyTestUtil instance for the session that will be used for the
@@ -5908,7 +5915,8 @@
SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
spdy_session_pool->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
@@ -6110,7 +6118,8 @@
SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
HostPortPair host_port_pair0("mail.example.org", 443);
SpdySessionKey key0(host_port_pair0, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session0 =
spdy_session_pool->FindAvailableSession(
key0, /* enable_ip_based_pooling = */ true,
@@ -6120,7 +6129,8 @@
HostPortPair host_port_pair1("docs.example.org", 443);
SpdySessionKey key1(host_port_pair1, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session1 =
spdy_session_pool->FindAvailableSession(
key1, /* enable_ip_based_pooling = */ true,
@@ -7624,7 +7634,8 @@
// Get a SpdySession.
SpdySessionKey key(HostPortPair::FromURL(request_.url), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
HttpNetworkSession* session = helper.session();
base::WeakPtr<SpdySession> spdy_session =
session->spdy_session_pool()->FindAvailableSession(
@@ -7742,7 +7753,8 @@
EXPECT_EQ("hello!", response_data);
SpdySessionKey key(HostPortPair::FromURL(request_.url), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
helper.session()->spdy_session_pool()->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
@@ -7847,7 +7859,8 @@
base::RunLoop().RunUntilIdle();
SpdySessionKey key(HostPortPair::FromURL(request_.url), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> spdy_session =
helper.session()->spdy_session_pool()->FindAvailableSession(
key, /* enable_ip_based_pooling = */ true,
diff --git a/net/spdy/spdy_proxy_client_socket_unittest.cc b/net/spdy/spdy_proxy_client_socket_unittest.cc
index 5354c26..965e586 100644
--- a/net/spdy/spdy_proxy_client_socket_unittest.cc
+++ b/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -170,6 +170,7 @@
endpoint_spdy_session_key_(endpoint_host_port_pair_,
proxy_,
PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()) {
session_deps_.net_log = net_log_.bound().net_log();
}
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc
index 14e433b..c06f2c117 100644
--- a/net/spdy/spdy_session.cc
+++ b/net/spdy/spdy_session.cc
@@ -1554,7 +1554,8 @@
SpdySessionKey new_key(spdy_session_key_.host_port_pair(),
spdy_session_key_.proxy_server(),
- spdy_session_key_.privacy_mode(), new_tag);
+ spdy_session_key_.privacy_mode(),
+ spdy_session_key_.is_proxy_session(), new_tag);
spdy_session_key_ = new_key;
return true;
diff --git a/net/spdy/spdy_session_fuzzer.cc b/net/spdy/spdy_session_fuzzer.cc
index 6660f035..e495905 100644
--- a/net/spdy/spdy_session_fuzzer.cc
+++ b/net/spdy/spdy_session_fuzzer.cc
@@ -121,6 +121,7 @@
net::ProxyServer direct_connect(net::ProxyServer::Direct());
net::SpdySessionKey session_key(net::HostPortPair("127.0.0.1", 80),
direct_connect, net::PRIVACY_MODE_DISABLED,
+ net::SpdySessionKey::IsProxySession::kFalse,
net::SocketTag());
base::WeakPtr<net::SpdySession> spdy_session(net::CreateSpdySession(
http_session.get(), session_key, bound_test_net_log.bound()));
diff --git a/net/spdy/spdy_session_key.cc b/net/spdy/spdy_session_key.cc
index eb3dc335..9593864 100644
--- a/net/spdy/spdy_session_key.cc
+++ b/net/spdy/spdy_session_key.cc
@@ -17,10 +17,15 @@
SpdySessionKey::SpdySessionKey(const HostPortPair& host_port_pair,
const ProxyServer& proxy_server,
PrivacyMode privacy_mode,
+ IsProxySession is_proxy_session,
const SocketTag& socket_tag)
: host_port_proxy_pair_(host_port_pair, proxy_server),
privacy_mode_(privacy_mode),
+ is_proxy_session_(is_proxy_session),
socket_tag_(socket_tag) {
+ // IsProxySession::kTrue should only be used with direct connections, since
+ // using multiple layers of proxies on top of each other isn't supported.
+ DCHECK(is_proxy_session != IsProxySession::kTrue || proxy_server.is_direct());
DVLOG(1) << "SpdySessionKey(host=" << host_port_pair.ToString()
<< ", proxy=" << proxy_server.ToURI()
<< ", privacy=" << privacy_mode;
@@ -32,9 +37,11 @@
bool SpdySessionKey::operator<(const SpdySessionKey& other) const {
return std::tie(privacy_mode_, host_port_proxy_pair_.first,
- host_port_proxy_pair_.second, socket_tag_) <
+ host_port_proxy_pair_.second, is_proxy_session_,
+ socket_tag_) <
std::tie(other.privacy_mode_, other.host_port_proxy_pair_.first,
- other.host_port_proxy_pair_.second, other.socket_tag_);
+ other.host_port_proxy_pair_.second, other.is_proxy_session_,
+ other.socket_tag_);
}
bool SpdySessionKey::operator==(const SpdySessionKey& other) const {
@@ -42,6 +49,7 @@
host_port_proxy_pair_.first.Equals(
other.host_port_proxy_pair_.first) &&
host_port_proxy_pair_.second == other.host_port_proxy_pair_.second &&
+ is_proxy_session_ == other.is_proxy_session_ &&
socket_tag_ == other.socket_tag_;
}
diff --git a/net/spdy/spdy_session_key.h b/net/spdy/spdy_session_key.h
index 3f94280d..cc50639 100644
--- a/net/spdy/spdy_session_key.h
+++ b/net/spdy/spdy_session_key.h
@@ -15,10 +15,21 @@
// SpdySessionKey is used as unique index for SpdySessionPool.
class NET_EXPORT_PRIVATE SpdySessionKey {
public:
+ enum class IsProxySession {
+ kFalse,
+ // This means this is a ProxyServer::Direct() session for an HTTP2 proxy,
+ // with |host_port_pair| being the proxy host and port. This should not be
+ // confused with a tunnel over an HTTP2 proxy session, for which
+ // |proxy_server| will be information about the proxy being used, and
+ // |host_port_pair| will be information not about the proxy, but the host
+ // that we're proxying the connection to.
+ kTrue,
+ };
SpdySessionKey();
SpdySessionKey(const HostPortPair& host_port_pair,
const ProxyServer& proxy_server,
PrivacyMode privacy_mode,
+ IsProxySession is_proxy_session,
const SocketTag& socket_tag);
SpdySessionKey(const SpdySessionKey& other);
@@ -48,6 +59,8 @@
return privacy_mode_;
}
+ IsProxySession is_proxy_session() const { return is_proxy_session_; }
+
const SocketTag& socket_tag() const { return socket_tag_; }
// Returns the estimate of dynamically allocated memory in bytes.
@@ -57,6 +70,7 @@
HostPortProxyPair host_port_proxy_pair_;
// If enabled, then session cannot be tracked by the server.
PrivacyMode privacy_mode_ = PRIVACY_MODE_DISABLED;
+ IsProxySession is_proxy_session_;
SocketTag socket_tag_;
};
diff --git a/net/spdy/spdy_session_pool.cc b/net/spdy/spdy_session_pool.cc
index 1b83355..3672f3a 100644
--- a/net/spdy/spdy_session_pool.cc
+++ b/net/spdy/spdy_session_pool.cc
@@ -202,7 +202,8 @@
// We can reuse this session only if the proxy and privacy
// settings match.
if (!(alias_key.proxy_server() == key.proxy_server()) ||
- !(alias_key.privacy_mode() == key.privacy_mode())) {
+ !(alias_key.privacy_mode() == key.privacy_mode()) ||
+ !(alias_key.is_proxy_session() == key.is_proxy_session())) {
continue;
}
@@ -261,9 +262,9 @@
continue;
}
UnmapKey(*it);
- SpdySessionKey new_pool_alias_key =
- SpdySessionKey(it->host_port_pair(), it->proxy_server(),
- it->privacy_mode(), key.socket_tag());
+ SpdySessionKey new_pool_alias_key = SpdySessionKey(
+ it->host_port_pair(), it->proxy_server(), it->privacy_mode(),
+ it->is_proxy_session(), key.socket_tag());
MapKeyToAvailableSession(new_pool_alias_key, available_session);
auto old_it = it;
++it;
diff --git a/net/spdy/spdy_session_pool_unittest.cc b/net/spdy/spdy_session_pool_unittest.cc
index bcac4d1..354842d 100644
--- a/net/spdy/spdy_session_pool_unittest.cc
+++ b/net/spdy/spdy_session_pool_unittest.cc
@@ -120,9 +120,9 @@
const int kTestPort = 80;
HostPortPair test_host_port_pair(kTestHost, kTestPort);
- SpdySessionKey test_key =
- SpdySessionKey(test_host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey test_key = SpdySessionKey(
+ test_host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
MockConnect connect_data(SYNCHRONOUS, OK);
MockRead reads[] = {
@@ -181,7 +181,8 @@
const GURL url1("https://www.example.org");
HostPortPair test_host_port_pair1(HostPortPair::FromURL(url1));
SpdySessionKey key1(test_host_port_pair1, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session1 =
CreateSpdySession(http_session_.get(), key1, NetLogWithSource());
base::WeakPtr<SpdyStream> spdy_stream1 = CreateStreamSynchronously(
@@ -194,7 +195,8 @@
const GURL url2("https://mail.example.org");
HostPortPair test_host_port_pair2(HostPortPair::FromURL(url2));
SpdySessionKey key2(test_host_port_pair2, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session2 =
CreateSpdySession(http_session_.get(), key2, NetLogWithSource());
base::WeakPtr<SpdyStream> spdy_stream2 = CreateStreamSynchronously(
@@ -208,7 +210,8 @@
const GURL url3("https://mail.example.com");
HostPortPair test_host_port_pair3(HostPortPair::FromURL(url3));
SpdySessionKey key3(test_host_port_pair3, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session3 =
CreateSpdySession(http_session_.get(), key3, NetLogWithSource());
base::WeakPtr<SpdyStream> spdy_stream3 = CreateStreamSynchronously(
@@ -283,9 +286,9 @@
const int kTestPort = 80;
HostPortPair test_host_port_pair(kTestHost, kTestPort);
- SpdySessionKey test_key =
- SpdySessionKey(test_host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey test_key = SpdySessionKey(
+ test_host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
MockConnect connect_data(SYNCHRONOUS, OK);
MockRead reads[] = {
@@ -364,9 +367,10 @@
EXPECT_THAT(rv, IsOk());
// Setup a SpdySessionKey.
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
MockConnect connect_data(SYNCHRONOUS, OK);
@@ -407,7 +411,8 @@
SpdySessionKey proxy_key(
test_hosts[1].key.host_port_pair(),
ProxyServer::FromPacString("HTTP http://proxy.foo.com/"),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED, SpdySessionKey::IsProxySession::kFalse,
+ SocketTag());
EXPECT_FALSE(HasSpdySession(spdy_session_pool_, proxy_key));
// Overlap between 2 and 3 does is not transitive to 1.
@@ -551,9 +556,10 @@
CompletionOnceCallback(), &request, NetLogWithSource());
EXPECT_THAT(rv, IsOk());
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)};
@@ -632,9 +638,10 @@
CompletionOnceCallback(), &request, NetLogWithSource());
EXPECT_THAT(rv, IsOk());
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)};
@@ -712,7 +719,8 @@
const std::string kTestHostA("www.example.org");
HostPortPair test_host_port_pairA(kTestHostA, 80);
SpdySessionKey keyA(test_host_port_pairA, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> sessionA =
CreateSpdySession(http_session_.get(), keyA, NetLogWithSource());
@@ -742,7 +750,8 @@
const std::string kTestHostB("mail.example.org");
HostPortPair test_host_port_pairB(kTestHostB, 80);
SpdySessionKey keyB(test_host_port_pairB, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> sessionB =
CreateSpdySession(http_session_.get(), keyB, NetLogWithSource());
EXPECT_TRUE(sessionB->IsAvailable());
@@ -763,7 +772,8 @@
const std::string kTestHostC("mail.example.com");
HostPortPair test_host_port_pairC(kTestHostC, 80);
SpdySessionKey keyC(test_host_port_pairC, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> sessionC =
CreateSpdySession(http_session_.get(), keyC, NetLogWithSource());
@@ -821,7 +831,8 @@
const GURL url(kDefaultUrl);
SpdySessionKey key(HostPortPair::FromURL(url), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session =
CreateSpdySession(http_session_.get(), key, NetLogWithSource());
@@ -877,7 +888,8 @@
const GURL url(kDefaultUrl);
SpdySessionKey key(HostPortPair::FromURL(url), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session =
CreateSpdySession(http_session_.get(), key, NetLogWithSource());
@@ -924,7 +936,8 @@
TEST_P(SpdySessionMemoryDumpTest, DumpMemoryStats) {
SpdySessionKey key(HostPortPair("www.example.org", 443),
- ProxyServer::Direct(), PRIVACY_MODE_DISABLED, SocketTag());
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
MockRead reads[] = {MockRead(SYNCHRONOUS, ERR_IO_PENDING)};
StaticSocketDataProvider data(reads, base::span<MockWrite>());
@@ -994,9 +1007,10 @@
CompletionOnceCallback(), &request, NetLogWithSource());
EXPECT_THAT(rv, IsOk());
- test_hosts[i].key = SpdySessionKey(
- HostPortPair(test_hosts[i].name, kTestPort), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ test_hosts[i].key =
+ SpdySessionKey(HostPortPair(test_hosts[i].name, kTestPort),
+ ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
}
SpdyTestUtil spdy_util;
diff --git a/net/spdy/spdy_session_unittest.cc b/net/spdy/spdy_session_unittest.cc
index ea6a123..9218631 100644
--- a/net/spdy/spdy_session_unittest.cc
+++ b/net/spdy/spdy_session_unittest.cc
@@ -150,6 +150,7 @@
key_(HostPortPair::FromURL(test_url_),
ProxyServer::Direct(),
PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()),
ssl_(SYNCHRONOUS, OK) {}
@@ -3534,7 +3535,7 @@
// Create an idle SPDY session.
SpdySessionKey key1(HostPortPair("www.example.org", 80),
ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
- SocketTag());
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
base::WeakPtr<SpdySession> session1 =
::net::CreateSpdySession(http_session_.get(), key1, NetLogWithSource());
EXPECT_FALSE(pool->IsStalled());
@@ -3542,7 +3543,7 @@
// Set up an alias for the idle SPDY session, increasing its ref count to 2.
SpdySessionKey key2(HostPortPair("mail.example.org", 80),
ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
- SocketTag());
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
HostResolver::RequestInfo info(key2.host_port_pair());
AddressList addresses;
std::unique_ptr<HostResolver::Request> request;
@@ -3677,10 +3678,12 @@
CreateNetworkSession();
HostPortPair host_port_pair("www.example.org", 443);
- SpdySessionKey key_privacy_enabled(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_ENABLED, SocketTag());
- SpdySessionKey key_privacy_disabled(host_port_pair, ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ SpdySessionKey key_privacy_enabled(
+ host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_ENABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
+ SpdySessionKey key_privacy_disabled(
+ host_port_pair, ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled));
EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled));
diff --git a/net/spdy/spdy_stream_unittest.cc b/net/spdy/spdy_stream_unittest.cc
index 69f2c44..e58cd0b 100644
--- a/net/spdy/spdy_stream_unittest.cc
+++ b/net/spdy/spdy_stream_unittest.cc
@@ -78,7 +78,8 @@
base::WeakPtr<SpdySession> CreateDefaultSpdySession() {
SpdySessionKey key(HostPortPair::FromURL(url_), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
return CreateSpdySession(session_.get(), key, NetLogWithSource());
}
@@ -342,7 +343,8 @@
data.RunUntilPaused();
const SpdySessionKey key(HostPortPair::FromURL(url_), ProxyServer::Direct(),
- PRIVACY_MODE_DISABLED, SocketTag());
+ PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse, SocketTag());
const GURL pushed_url(kPushUrl);
HttpRequestInfo push_request;
push_request.url = pushed_url;
diff --git a/net/websockets/websocket_basic_stream_adapters_test.cc b/net/websockets/websocket_basic_stream_adapters_test.cc
index 31f7892..77165d4 100644
--- a/net/websockets/websocket_basic_stream_adapters_test.cc
+++ b/net/websockets/websocket_basic_stream_adapters_test.cc
@@ -302,6 +302,7 @@
key_(HostPortPair::FromURL(url_),
ProxyServer::Direct(),
PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag()),
session_(SpdySessionDependencies::SpdyCreateSession(&session_deps_)),
ssl_(SYNCHRONOUS, OK) {}
diff --git a/net/websockets/websocket_handshake_stream_create_helper_test.cc b/net/websockets/websocket_handshake_stream_create_helper_test.cc
index 3f985be..28b9469f 100644
--- a/net/websockets/websocket_handshake_stream_create_helper_test.cc
+++ b/net/websockets/websocket_handshake_stream_create_helper_test.cc
@@ -229,6 +229,7 @@
SpdySessionDependencies::SpdyCreateSession(&session_deps);
const SpdySessionKey key(HostPortPair::FromURL(url),
ProxyServer::Direct(), PRIVACY_MODE_DISABLED,
+ SpdySessionKey::IsProxySession::kFalse,
SocketTag());
base::WeakPtr<SpdySession> spdy_session =
CreateSpdySession(http_network_session.get(), key, net_log);