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

Unified Diff: net/http/http_stream_factory_impl_unittest.cc

Issue 2648593002: Allow a preconnecting job to a HTTP2 proxy server based on privacy mode (Closed)
Patch Set: ps Created 3 years, 11 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
« no previous file with comments | « net/http/http_stream_factory_impl_job_controller.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_stream_factory_impl_unittest.cc
diff --git a/net/http/http_stream_factory_impl_unittest.cc b/net/http/http_stream_factory_impl_unittest.cc
index 26b305abad77d6925dd0032049ef4ceb9575575e..550c7074ff7b5ae5ded26c0f4959d3744d60d58d 100644
--- a/net/http/http_stream_factory_impl_unittest.cc
+++ b/net/http/http_stream_factory_impl_unittest.cc
@@ -17,6 +17,7 @@
#include "base/run_loop.h"
#include "base/test/histogram_tester.h"
#include "net/base/port_util.h"
+#include "net/base/privacy_mode.h"
#include "net/base/test_completion_callback.h"
#include "net/base/test_proxy_delegate.h"
#include "net/cert/ct_policy_enforcer.h"
@@ -388,6 +389,9 @@ class CapturePreconnectsSocketPool : public ParentPool {
return last_num_streams_;
}
+ // Resets |last_num_streams_| to its default value.
+ void reset_last_num_streams() { last_num_streams_ = -1; }
+
int RequestSocket(const std::string& group_name,
const void* socket_params,
RequestPriority priority,
@@ -1309,6 +1313,87 @@ TEST_F(HttpStreamFactoryTest, OnlyOnePreconnectToProxyServer) {
}
}
+// Verify that preconnect to a HTTP2 proxy server with a privacy mode different
+// than that of the in-flight preconnect job succeeds.
Ryan Hamilton 2017/01/22 16:22:34 Presumably, the existing tests cover the case of t
tbansal1 2017/01/23 01:37:50 Yes, they do. Additionally, in this new test, I cr
+TEST_F(HttpStreamFactoryTest, ProxyServerPreconnectDifferentPrivacyModes) {
+ int num_streams = 1;
+ base::HistogramTester histogram_tester;
+ GURL url = GURL("http://www.google.com");
+ std::unique_ptr<ProxyService> proxy_service =
+ ProxyService::CreateFixedFromPacResult("HTTPS myproxy.org:443");
+
+ // Set up the proxy server as a server that supports request priorities.
+ HttpServerPropertiesImpl http_server_properties;
+
+ url::SchemeHostPort spdy_server("https", "myproxy.org", 443);
+ http_server_properties.SetSupportsSpdy(spdy_server, true);
+
+ SpdySessionDependencies session_deps;
+ HttpNetworkSession::Params params =
+ SpdySessionDependencies::CreateSessionParams(&session_deps);
+ params.enable_quic = true;
+ params.proxy_service = proxy_service.get();
+ params.http_server_properties = &http_server_properties;
+ ASSERT_TRUE(params.restrict_to_one_preconnect_for_proxies);
+
+ std::unique_ptr<HttpNetworkSession> session(new HttpNetworkSession(params));
+
+ HttpNetworkSessionPeer peer(session.get());
+ HostPortPair proxy_host("myproxy.org", 443);
+
+ CapturePreconnectsHttpProxySocketPool* http_proxy_pool =
+ new CapturePreconnectsHttpProxySocketPool(
+ session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
+ session_deps.transport_security_state.get(),
+ session_deps.cert_transparency_verifier.get(),
+ session_deps.ct_policy_enforcer.get());
+ CapturePreconnectsSSLSocketPool* ssl_conn_pool =
+ new CapturePreconnectsSSLSocketPool(
+ session_deps.host_resolver.get(), session_deps.cert_verifier.get(),
+ session_deps.transport_security_state.get(),
+ session_deps.cert_transparency_verifier.get(),
+ session_deps.ct_policy_enforcer.get());
+
+ std::unique_ptr<MockClientSocketPoolManager> mock_pool_manager(
+ new MockClientSocketPoolManager);
+ mock_pool_manager->SetSocketPoolForHTTPProxy(
+ proxy_host, base::WrapUnique(http_proxy_pool));
+ mock_pool_manager->SetSocketPoolForSSLWithProxy(
+ proxy_host, base::WrapUnique(ssl_conn_pool));
+ peer.SetClientSocketPoolManager(std::move(mock_pool_manager));
+
+ HttpRequestInfo request_privacy_mode_disabled;
+ request_privacy_mode_disabled.method = "GET";
+ request_privacy_mode_disabled.url = url;
+ request_privacy_mode_disabled.load_flags = 0;
+
+ // First preconnect job should succeed.
+ session->http_stream_factory()->PreconnectStreams(
+ num_streams, request_privacy_mode_disabled);
+ EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
+ EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams());
+ http_proxy_pool->reset_last_num_streams();
+
+ // Second preconnect job with same privacy mode should not succeed.
+ session->http_stream_factory()->PreconnectStreams(
+ num_streams + 1, request_privacy_mode_disabled);
+ EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
+ EXPECT_EQ(-1, http_proxy_pool->last_num_streams());
+
+ // Next request with a different privacy mode should succeed.
+ HttpRequestInfo request_privacy_mode_enabled;
+ request_privacy_mode_enabled.method = "GET";
+ request_privacy_mode_enabled.url = url;
+ request_privacy_mode_enabled.load_flags = 0;
+ request_privacy_mode_enabled.privacy_mode = PRIVACY_MODE_ENABLED;
+
+ // Request with a different privacy mode should succeed.
+ session->http_stream_factory()->PreconnectStreams(
+ num_streams, request_privacy_mode_enabled);
+ EXPECT_EQ(-1, ssl_conn_pool->last_num_streams());
+ EXPECT_EQ(num_streams, http_proxy_pool->last_num_streams());
+}
+
namespace {
TEST_F(HttpStreamFactoryTest, PrivacyModeDisablesChannelId) {
« no previous file with comments | « net/http/http_stream_factory_impl_job_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698