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

Side by Side Diff: net/http/http_network_transaction_ssl_unittest.cc

Issue 2907463002: Split HttpNetworkSession::Params into two structs. (Closed)
Patch Set: Response to comments Created 3 years, 6 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/http/http_network_transaction.cc ('k') | net/http/http_response_body_drainer_unittest.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 <memory> 5 #include <memory>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/deferred_sequenced_task_runner.h" 9 #include "base/deferred_sequenced_task_runner.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 }; 52 };
53 53
54 } // namespace 54 } // namespace
55 55
56 class HttpNetworkTransactionSSLTest : public testing::Test { 56 class HttpNetworkTransactionSSLTest : public testing::Test {
57 protected: 57 protected:
58 HttpNetworkTransactionSSLTest() = default; 58 HttpNetworkTransactionSSLTest() = default;
59 59
60 void SetUp() override { 60 void SetUp() override {
61 ssl_config_service_ = new TokenBindingSSLConfigService; 61 ssl_config_service_ = new TokenBindingSSLConfigService;
62 session_params_.ssl_config_service = ssl_config_service_.get(); 62 session_context_.ssl_config_service = ssl_config_service_.get();
63 63
64 auth_handler_factory_.reset(new HttpAuthHandlerMock::Factory()); 64 auth_handler_factory_.reset(new HttpAuthHandlerMock::Factory());
65 session_params_.http_auth_handler_factory = auth_handler_factory_.get(); 65 session_context_.http_auth_handler_factory = auth_handler_factory_.get();
66 66
67 proxy_service_ = ProxyService::CreateDirect(); 67 proxy_service_ = ProxyService::CreateDirect();
68 session_params_.proxy_service = proxy_service_.get(); 68 session_context_.proxy_service = proxy_service_.get();
69 69
70 session_params_.client_socket_factory = &mock_socket_factory_; 70 session_context_.client_socket_factory = &mock_socket_factory_;
71 session_params_.host_resolver = &mock_resolver_; 71 session_context_.host_resolver = &mock_resolver_;
72 session_params_.http_server_properties = &http_server_properties_; 72 session_context_.http_server_properties = &http_server_properties_;
73 session_params_.cert_verifier = &cert_verifier_; 73 session_context_.cert_verifier = &cert_verifier_;
74 session_params_.transport_security_state = &transport_security_state_; 74 session_context_.transport_security_state = &transport_security_state_;
75 session_params_.cert_transparency_verifier = &ct_verifier_; 75 session_context_.cert_transparency_verifier = &ct_verifier_;
76 session_params_.ct_policy_enforcer = &ct_policy_enforcer_; 76 session_context_.ct_policy_enforcer = &ct_policy_enforcer_;
77 } 77 }
78 78
79 HttpRequestInfo* GetRequestInfo(const std::string& url) { 79 HttpRequestInfo* GetRequestInfo(const std::string& url) {
80 HttpRequestInfo* request_info = new HttpRequestInfo; 80 HttpRequestInfo* request_info = new HttpRequestInfo;
81 request_info->url = GURL(url); 81 request_info->url = GURL(url);
82 request_info->method = "GET"; 82 request_info->method = "GET";
83 request_info_vector_.push_back(base::WrapUnique(request_info)); 83 request_info_vector_.push_back(base::WrapUnique(request_info));
84 return request_info; 84 return request_info;
85 } 85 }
86 86
87 scoped_refptr<SSLConfigService> ssl_config_service_; 87 scoped_refptr<SSLConfigService> ssl_config_service_;
88 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory_; 88 std::unique_ptr<HttpAuthHandlerMock::Factory> auth_handler_factory_;
89 std::unique_ptr<ProxyService> proxy_service_; 89 std::unique_ptr<ProxyService> proxy_service_;
90 90
91 MockClientSocketFactory mock_socket_factory_; 91 MockClientSocketFactory mock_socket_factory_;
92 MockHostResolver mock_resolver_; 92 MockHostResolver mock_resolver_;
93 HttpServerPropertiesImpl http_server_properties_; 93 HttpServerPropertiesImpl http_server_properties_;
94 MockCertVerifier cert_verifier_; 94 MockCertVerifier cert_verifier_;
95 TransportSecurityState transport_security_state_; 95 TransportSecurityState transport_security_state_;
96 MultiLogCTVerifier ct_verifier_; 96 MultiLogCTVerifier ct_verifier_;
97 CTPolicyEnforcer ct_policy_enforcer_; 97 CTPolicyEnforcer ct_policy_enforcer_;
98 HttpNetworkSession::Params session_params_; 98 HttpNetworkSession::Context session_context_;
99 std::vector<std::unique_ptr<HttpRequestInfo>> request_info_vector_; 99 std::vector<std::unique_ptr<HttpRequestInfo>> request_info_vector_;
100 }; 100 };
101 101
102 #if !defined(OS_IOS) 102 #if !defined(OS_IOS)
103 TEST_F(HttpNetworkTransactionSSLTest, TokenBinding) { 103 TEST_F(HttpNetworkTransactionSSLTest, TokenBinding) {
104 ChannelIDService channel_id_service(new DefaultChannelIDStore(NULL)); 104 ChannelIDService channel_id_service(new DefaultChannelIDStore(NULL));
105 session_params_.channel_id_service = &channel_id_service; 105 session_context_.channel_id_service = &channel_id_service;
106 106
107 SSLSocketDataProvider ssl_data(ASYNC, OK); 107 SSLSocketDataProvider ssl_data(ASYNC, OK);
108 ssl_data.token_binding_negotiated = true; 108 ssl_data.token_binding_negotiated = true;
109 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256; 109 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256;
110 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data); 110 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data);
111 MockRead mock_reads[] = {MockRead("HTTP/1.1 200 OK\r\n\r\n"), 111 MockRead mock_reads[] = {MockRead("HTTP/1.1 200 OK\r\n\r\n"),
112 MockRead(SYNCHRONOUS, OK)}; 112 MockRead(SYNCHRONOUS, OK)};
113 StaticSocketDataProvider data(mock_reads, arraysize(mock_reads), NULL, 0); 113 StaticSocketDataProvider data(mock_reads, arraysize(mock_reads), NULL, 0);
114 mock_socket_factory_.AddSocketDataProvider(&data); 114 mock_socket_factory_.AddSocketDataProvider(&data);
115 115
116 HttpNetworkSession session(session_params_); 116 HttpNetworkSession session(HttpNetworkSession::Params(), session_context_);
117 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, &session); 117 HttpNetworkTransaction trans1(DEFAULT_PRIORITY, &session);
118 118
119 TestCompletionCallback callback; 119 TestCompletionCallback callback;
120 int rv = callback.GetResult( 120 int rv = callback.GetResult(
121 trans1.Start(GetRequestInfo("https://www.example.com/"), 121 trans1.Start(GetRequestInfo("https://www.example.com/"),
122 callback.callback(), NetLogWithSource())); 122 callback.callback(), NetLogWithSource()));
123 EXPECT_THAT(rv, IsOk()); 123 EXPECT_THAT(rv, IsOk());
124 124
125 HttpRequestHeaders headers1; 125 HttpRequestHeaders headers1;
126 ASSERT_TRUE(trans1.GetFullRequestHeaders(&headers1)); 126 ASSERT_TRUE(trans1.GetFullRequestHeaders(&headers1));
(...skipping 17 matching lines...) Expand all
144 ASSERT_TRUE(trans2.GetFullRequestHeaders(&headers2)); 144 ASSERT_TRUE(trans2.GetFullRequestHeaders(&headers2));
145 std::string token_binding_header2; 145 std::string token_binding_header2;
146 EXPECT_TRUE(headers2.GetHeader(HttpRequestHeaders::kTokenBinding, 146 EXPECT_TRUE(headers2.GetHeader(HttpRequestHeaders::kTokenBinding,
147 &token_binding_header2)); 147 &token_binding_header2));
148 148
149 EXPECT_EQ(token_binding_header1, token_binding_header2); 149 EXPECT_EQ(token_binding_header1, token_binding_header2);
150 } 150 }
151 151
152 TEST_F(HttpNetworkTransactionSSLTest, NoTokenBindingOverHttp) { 152 TEST_F(HttpNetworkTransactionSSLTest, NoTokenBindingOverHttp) {
153 ChannelIDService channel_id_service(new DefaultChannelIDStore(NULL)); 153 ChannelIDService channel_id_service(new DefaultChannelIDStore(NULL));
154 session_params_.channel_id_service = &channel_id_service; 154 session_context_.channel_id_service = &channel_id_service;
155 155
156 SSLSocketDataProvider ssl_data(ASYNC, OK); 156 SSLSocketDataProvider ssl_data(ASYNC, OK);
157 ssl_data.token_binding_negotiated = true; 157 ssl_data.token_binding_negotiated = true;
158 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256; 158 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256;
159 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data); 159 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data);
160 MockRead mock_reads[] = {MockRead("HTTP/1.1 200 OK\r\n\r\n"), 160 MockRead mock_reads[] = {MockRead("HTTP/1.1 200 OK\r\n\r\n"),
161 MockRead(SYNCHRONOUS, OK)}; 161 MockRead(SYNCHRONOUS, OK)};
162 StaticSocketDataProvider data(mock_reads, arraysize(mock_reads), NULL, 0); 162 StaticSocketDataProvider data(mock_reads, arraysize(mock_reads), NULL, 0);
163 mock_socket_factory_.AddSocketDataProvider(&data); 163 mock_socket_factory_.AddSocketDataProvider(&data);
164 164
165 HttpNetworkSession session(session_params_); 165 HttpNetworkSession session(HttpNetworkSession::Params(), session_context_);
166 HttpNetworkTransaction trans(DEFAULT_PRIORITY, &session); 166 HttpNetworkTransaction trans(DEFAULT_PRIORITY, &session);
167 167
168 TestCompletionCallback callback; 168 TestCompletionCallback callback;
169 int rv = 169 int rv =
170 callback.GetResult(trans.Start(GetRequestInfo("http://www.example.com/"), 170 callback.GetResult(trans.Start(GetRequestInfo("http://www.example.com/"),
171 callback.callback(), NetLogWithSource())); 171 callback.callback(), NetLogWithSource()));
172 EXPECT_THAT(rv, IsOk()); 172 EXPECT_THAT(rv, IsOk());
173 173
174 HttpRequestHeaders headers; 174 HttpRequestHeaders headers;
175 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); 175 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers));
176 std::string token_binding_header; 176 std::string token_binding_header;
177 EXPECT_FALSE(headers.GetHeader(HttpRequestHeaders::kTokenBinding, 177 EXPECT_FALSE(headers.GetHeader(HttpRequestHeaders::kTokenBinding,
178 &token_binding_header)); 178 &token_binding_header));
179 } 179 }
180 180
181 // Regression test for https://crbug.com/667683. 181 // Regression test for https://crbug.com/667683.
182 TEST_F(HttpNetworkTransactionSSLTest, TokenBindingAsync) { 182 TEST_F(HttpNetworkTransactionSSLTest, TokenBindingAsync) {
183 // Create a separate thread for ChannelIDService 183 // Create a separate thread for ChannelIDService
184 // so that asynchronous Channel ID creation can be delayed. 184 // so that asynchronous Channel ID creation can be delayed.
185 base::Thread channel_id_thread("ThreadForChannelIDService"); 185 base::Thread channel_id_thread("ThreadForChannelIDService");
186 channel_id_thread.Start(); 186 channel_id_thread.Start();
187 scoped_refptr<base::DeferredSequencedTaskRunner> channel_id_runner = 187 scoped_refptr<base::DeferredSequencedTaskRunner> channel_id_runner =
188 new base::DeferredSequencedTaskRunner(channel_id_thread.task_runner()); 188 new base::DeferredSequencedTaskRunner(channel_id_thread.task_runner());
189 ChannelIDService channel_id_service(new DefaultChannelIDStore(nullptr)); 189 ChannelIDService channel_id_service(new DefaultChannelIDStore(nullptr));
190 channel_id_service.set_task_runner_for_testing(channel_id_runner); 190 channel_id_service.set_task_runner_for_testing(channel_id_runner);
191 session_params_.channel_id_service = &channel_id_service; 191 session_context_.channel_id_service = &channel_id_service;
192 192
193 SSLSocketDataProvider ssl_data(ASYNC, OK); 193 SSLSocketDataProvider ssl_data(ASYNC, OK);
194 ssl_data.token_binding_negotiated = true; 194 ssl_data.token_binding_negotiated = true;
195 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256; 195 ssl_data.token_binding_key_param = TB_PARAM_ECDSAP256;
196 ssl_data.next_proto = kProtoHTTP2; 196 ssl_data.next_proto = kProtoHTTP2;
197 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data); 197 mock_socket_factory_.AddSSLSocketDataProvider(&ssl_data);
198 198
199 MockRead reads[] = {MockRead(ASYNC, OK, 0)}; 199 MockRead reads[] = {MockRead(ASYNC, OK, 0)};
200 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); 200 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0);
201 mock_socket_factory_.AddSocketDataProvider(&data); 201 mock_socket_factory_.AddSocketDataProvider(&data);
202 202
203 HttpRequestInfo request_info; 203 HttpRequestInfo request_info;
204 request_info.url = GURL("https://www.example.com/"); 204 request_info.url = GURL("https://www.example.com/");
205 request_info.method = "GET"; 205 request_info.method = "GET";
206 request_info.token_binding_referrer = "encrypted.example.com"; 206 request_info.token_binding_referrer = "encrypted.example.com";
207 207
208 HttpNetworkSession session(session_params_); 208 HttpNetworkSession session(HttpNetworkSession::Params(), session_context_);
209 HttpNetworkTransaction trans(DEFAULT_PRIORITY, &session); 209 HttpNetworkTransaction trans(DEFAULT_PRIORITY, &session);
210 210
211 TestCompletionCallback callback; 211 TestCompletionCallback callback;
212 int rv = trans.Start(&request_info, callback.callback(), NetLogWithSource()); 212 int rv = trans.Start(&request_info, callback.callback(), NetLogWithSource());
213 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); 213 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
214 214
215 base::RunLoop().RunUntilIdle(); 215 base::RunLoop().RunUntilIdle();
216 216
217 // When ChannelIdService calls back to HttpNetworkSession, 217 // When ChannelIdService calls back to HttpNetworkSession,
218 // SpdyHttpStream should not crash. 218 // SpdyHttpStream should not crash.
219 channel_id_runner->Start(); 219 channel_id_runner->Start();
220 220
221 rv = callback.WaitForResult(); 221 rv = callback.WaitForResult();
222 EXPECT_THAT(rv, IsError(ERR_CONNECTION_CLOSED)); 222 EXPECT_THAT(rv, IsError(ERR_CONNECTION_CLOSED));
223 } 223 }
224 #endif // !defined(OS_IOS) 224 #endif // !defined(OS_IOS)
225 225
226 } // namespace net 226 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction.cc ('k') | net/http/http_response_body_drainer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698