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

Side by Side Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 1545233002: Convert Pass()→std::move() in //net (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 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/spdy/spdy_http_stream.cc ('k') | net/spdy/spdy_proxy_client_socket.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 <string> 5 #include <string>
6 #include <utility>
6 #include <vector> 7 #include <vector>
7 8
8 #include "base/bind.h" 9 #include "base/bind.h"
9 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
10 #include "base/files/file_util.h" 11 #include "base/files/file_util.h"
11 #include "base/files/scoped_temp_dir.h" 12 #include "base/files/scoped_temp_dir.h"
12 #include "base/memory/scoped_ptr.h" 13 #include "base/memory/scoped_ptr.h"
13 #include "base/run_loop.h" 14 #include "base/run_loop.h"
14 #include "base/strings/string_piece.h" 15 #include "base/strings/string_piece.h"
15 #include "base/test/test_file_util.h" 16 #include "base/test/test_file_util.h"
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 SpdyNetworkTransactionTestParams test_params) { 117 SpdyNetworkTransactionTestParams test_params) {
117 scoped_ptr<SpdySessionDependencies> session_deps( 118 scoped_ptr<SpdySessionDependencies> session_deps(
118 new SpdySessionDependencies(test_params.protocol)); 119 new SpdySessionDependencies(test_params.protocol));
119 UpdateSpdySessionDependencies(test_params, session_deps.get()); 120 UpdateSpdySessionDependencies(test_params, session_deps.get());
120 return session_deps; 121 return session_deps;
121 } 122 }
122 123
123 scoped_ptr<SpdySessionDependencies> CreateSpdySessionDependencies( 124 scoped_ptr<SpdySessionDependencies> CreateSpdySessionDependencies(
124 SpdyNetworkTransactionTestParams test_params, 125 SpdyNetworkTransactionTestParams test_params,
125 scoped_ptr<ProxyService> proxy_service) { 126 scoped_ptr<ProxyService> proxy_service) {
126 scoped_ptr<SpdySessionDependencies> session_deps( 127 scoped_ptr<SpdySessionDependencies> session_deps(new SpdySessionDependencies(
127 new SpdySessionDependencies(test_params.protocol, proxy_service.Pass())); 128 test_params.protocol, std::move(proxy_service)));
128 UpdateSpdySessionDependencies(test_params, session_deps.get()); 129 UpdateSpdySessionDependencies(test_params, session_deps.get());
129 return session_deps; 130 return session_deps;
130 } 131 }
131 132
132 } // namespace 133 } // namespace
133 134
134 class SpdyNetworkTransactionTest 135 class SpdyNetworkTransactionTest
135 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> { 136 : public ::testing::TestWithParam<SpdyNetworkTransactionTestParams> {
136 protected: 137 protected:
137 SpdyNetworkTransactionTest() 138 SpdyNetworkTransactionTest()
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 NormalSpdyTransactionHelper( 170 NormalSpdyTransactionHelper(
170 const HttpRequestInfo& request, 171 const HttpRequestInfo& request,
171 RequestPriority priority, 172 RequestPriority priority,
172 const BoundNetLog& log, 173 const BoundNetLog& log,
173 SpdyNetworkTransactionTestParams test_params, 174 SpdyNetworkTransactionTestParams test_params,
174 scoped_ptr<SpdySessionDependencies> session_deps) 175 scoped_ptr<SpdySessionDependencies> session_deps)
175 : request_(request), 176 : request_(request),
176 priority_(priority), 177 priority_(priority),
177 session_deps_(session_deps.get() == NULL 178 session_deps_(session_deps.get() == NULL
178 ? CreateSpdySessionDependencies(test_params) 179 ? CreateSpdySessionDependencies(test_params)
179 : session_deps.Pass()), 180 : std::move(session_deps)),
180 session_( 181 session_(
181 SpdySessionDependencies::SpdyCreateSession(session_deps_.get())), 182 SpdySessionDependencies::SpdyCreateSession(session_deps_.get())),
182 log_(log), 183 log_(log),
183 test_params_(test_params), 184 test_params_(test_params),
184 port_(443), 185 port_(443),
185 spdy_enabled_(true) {} 186 spdy_enabled_(true) {}
186 187
187 ~NormalSpdyTransactionHelper() { 188 ~NormalSpdyTransactionHelper() {
188 // Any test which doesn't close the socket by sending it an EOF will 189 // Any test which doesn't close the socket by sending it an EOF will
189 // have a valid session left open, which leaks the entire session pool. 190 // have a valid session left open, which leaks the entire session pool.
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 RunPreTestSetup(); 300 RunPreTestSetup();
300 AddData(data); 301 AddData(data);
301 RunDefaultTest(); 302 RunDefaultTest();
302 VerifyDataConsumed(); 303 VerifyDataConsumed();
303 } 304 }
304 305
305 void RunToCompletionWithSSLData( 306 void RunToCompletionWithSSLData(
306 SocketDataProvider* data, 307 SocketDataProvider* data,
307 scoped_ptr<SSLSocketDataProvider> ssl_provider) { 308 scoped_ptr<SSLSocketDataProvider> ssl_provider) {
308 RunPreTestSetup(); 309 RunPreTestSetup();
309 AddDataWithSSLSocketDataProvider(data, ssl_provider.Pass()); 310 AddDataWithSSLSocketDataProvider(data, std::move(ssl_provider));
310 RunDefaultTest(); 311 RunDefaultTest();
311 VerifyDataConsumed(); 312 VerifyDataConsumed();
312 } 313 }
313 314
314 void AddData(SocketDataProvider* data) { 315 void AddData(SocketDataProvider* data) {
315 scoped_ptr<SSLSocketDataProvider> ssl_provider( 316 scoped_ptr<SSLSocketDataProvider> ssl_provider(
316 new SSLSocketDataProvider(ASYNC, OK)); 317 new SSLSocketDataProvider(ASYNC, OK));
317 ssl_provider->cert = 318 ssl_provider->cert =
318 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem"); 319 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem");
319 AddDataWithSSLSocketDataProvider(data, ssl_provider.Pass()); 320 AddDataWithSSLSocketDataProvider(data, std::move(ssl_provider));
320 } 321 }
321 322
322 void AddDataWithSSLSocketDataProvider( 323 void AddDataWithSSLSocketDataProvider(
323 SocketDataProvider* data, 324 SocketDataProvider* data,
324 scoped_ptr<SSLSocketDataProvider> ssl_provider) { 325 scoped_ptr<SSLSocketDataProvider> ssl_provider) {
325 data_vector_.push_back(data); 326 data_vector_.push_back(data);
326 if (ssl_provider->next_proto_status == 327 if (ssl_provider->next_proto_status ==
327 SSLClientSocket::kNextProtoUnsupported) { 328 SSLClientSocket::kNextProtoUnsupported) {
328 ssl_provider->SetNextProto(test_params_.protocol); 329 ssl_provider->SetNextProto(test_params_.protocol);
329 } 330 }
330 331
331 session_deps_->socket_factory->AddSSLSocketDataProvider( 332 session_deps_->socket_factory->AddSSLSocketDataProvider(
332 ssl_provider.get()); 333 ssl_provider.get());
333 ssl_vector_.push_back(std::move(ssl_provider)); 334 ssl_vector_.push_back(std::move(ssl_provider));
334 335
335 session_deps_->socket_factory->AddSocketDataProvider(data); 336 session_deps_->socket_factory->AddSocketDataProvider(data);
336 if (test_params_.ssl_type == HTTP_SPDY_VIA_ALT_SVC) { 337 if (test_params_.ssl_type == HTTP_SPDY_VIA_ALT_SVC) {
337 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING); 338 MockConnect hanging_connect(SYNCHRONOUS, ERR_IO_PENDING);
338 scoped_ptr<StaticSocketDataProvider> hanging_non_alt_svc_socket( 339 scoped_ptr<StaticSocketDataProvider> hanging_non_alt_svc_socket(
339 make_scoped_ptr(new StaticSocketDataProvider(NULL, 0, NULL, 0))); 340 make_scoped_ptr(new StaticSocketDataProvider(NULL, 0, NULL, 0)));
340 hanging_non_alt_svc_socket->set_connect_data(hanging_connect); 341 hanging_non_alt_svc_socket->set_connect_data(hanging_connect);
341 session_deps_->socket_factory->AddSocketDataProvider( 342 session_deps_->socket_factory->AddSocketDataProvider(
342 hanging_non_alt_svc_socket.get()); 343 hanging_non_alt_svc_socket.get());
343 alternate_vector_.push_back(std::move(hanging_non_alt_svc_socket)); 344 alternate_vector_.push_back(std::move(hanging_non_alt_svc_socket));
344 } 345 }
345 } 346 }
346 347
347 void SetSession(scoped_ptr<HttpNetworkSession> session) { 348 void SetSession(scoped_ptr<HttpNetworkSession> session) {
348 session_ = session.Pass(); 349 session_ = std::move(session);
349 } 350 }
350 HttpNetworkTransaction* trans() { return trans_.get(); } 351 HttpNetworkTransaction* trans() { return trans_.get(); }
351 void ResetTrans() { trans_.reset(); } 352 void ResetTrans() { trans_.reset(); }
352 TransactionHelperResult& output() { return output_; } 353 TransactionHelperResult& output() { return output_; }
353 const HttpRequestInfo& request() const { return request_; } 354 const HttpRequestInfo& request() const { return request_; }
354 HttpNetworkSession* session() const { return session_.get(); } 355 HttpNetworkSession* session() const { return session_.get(); }
355 scoped_ptr<SpdySessionDependencies>& session_deps() { 356 scoped_ptr<SpdySessionDependencies>& session_deps() {
356 return session_deps_; 357 return session_deps_;
357 } 358 }
358 int port() const { return port_; } 359 int port() const { return port_; }
(...skipping 2610 matching lines...) Expand 10 before | Expand all | Expand 10 after
2969 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3), 2970 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3),
2970 }; 2971 };
2971 2972
2972 scoped_ptr<SpdyFrame> 2973 scoped_ptr<SpdyFrame>
2973 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 2974 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
2974 scoped_ptr<SpdyHeaderBlock> incomplete_headers(new SpdyHeaderBlock()); 2975 scoped_ptr<SpdyHeaderBlock> incomplete_headers(new SpdyHeaderBlock());
2975 (*incomplete_headers)[spdy_util_.GetStatusKey()] = "200 OK"; 2976 (*incomplete_headers)[spdy_util_.GetStatusKey()] = "200 OK";
2976 (*incomplete_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 2977 (*incomplete_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
2977 (*incomplete_headers)["hello"] = "bye"; 2978 (*incomplete_headers)["hello"] = "bye";
2978 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( 2979 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
2979 incomplete_headers.Pass(), 2, 1)); 2980 std::move(incomplete_headers), 2, 1));
2980 MockRead reads[] = { 2981 MockRead reads[] = {
2981 CreateMockRead(*stream1_reply, 1), 2982 CreateMockRead(*stream1_reply, 1),
2982 CreateMockRead(*stream2_syn, 2), 2983 CreateMockRead(*stream2_syn, 2),
2983 CreateMockRead(*stream1_body, 4), 2984 CreateMockRead(*stream1_body, 4),
2984 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause 2985 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause
2985 }; 2986 };
2986 2987
2987 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 2988 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
2988 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, 2989 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
2989 BoundNetLog(), GetParam(), NULL); 2990 BoundNetLog(), GetParam(), NULL);
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
3480 MockRead reads[] = { 3481 MockRead reads[] = {
3481 CreateMockRead(*resp, 1), 3482 CreateMockRead(*resp, 1),
3482 }; 3483 };
3483 3484
3484 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3485 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
3485 scoped_ptr<SpdySessionDependencies> session_deps = 3486 scoped_ptr<SpdySessionDependencies> session_deps =
3486 CreateSpdySessionDependencies(GetParam()); 3487 CreateSpdySessionDependencies(GetParam());
3487 session_deps->enable_compression = true; 3488 session_deps->enable_compression = true;
3488 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, 3489 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
3489 BoundNetLog(), GetParam(), 3490 BoundNetLog(), GetParam(),
3490 session_deps.Pass()); 3491 std::move(session_deps));
3491 helper.RunToCompletion(&data); 3492 helper.RunToCompletion(&data);
3492 TransactionHelperResult out = helper.output(); 3493 TransactionHelperResult out = helper.output();
3493 EXPECT_EQ(ERR_SPDY_COMPRESSION_ERROR, out.rv); 3494 EXPECT_EQ(ERR_SPDY_COMPRESSION_ERROR, out.rv);
3494 } 3495 }
3495 3496
3496 // Test that the NetLog contains good data for a simple GET request. 3497 // Test that the NetLog contains good data for a simple GET request.
3497 TEST_P(SpdyNetworkTransactionTest, NetLog) { 3498 TEST_P(SpdyNetworkTransactionTest, NetLog) {
3498 static const char* const kExtraHeaders[] = { 3499 static const char* const kExtraHeaders[] = {
3499 "user-agent", "Chrome", 3500 "user-agent", "Chrome",
3500 }; 3501 };
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after
4049 // Construct the request. 4050 // Construct the request.
4050 scoped_ptr<SpdyFrame> req( 4051 scoped_ptr<SpdyFrame> req(
4051 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 4052 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
4052 MockWrite writes[] = {CreateMockWrite(*req, 0)}; 4053 MockWrite writes[] = {CreateMockWrite(*req, 0)};
4053 4054
4054 // Construct the reply. 4055 // Construct the reply.
4055 scoped_ptr<SpdyHeaderBlock> reply_headers(new SpdyHeaderBlock()); 4056 scoped_ptr<SpdyHeaderBlock> reply_headers(new SpdyHeaderBlock());
4056 (*reply_headers)[spdy_util_.GetStatusKey()] = "200"; 4057 (*reply_headers)[spdy_util_.GetStatusKey()] = "200";
4057 (*reply_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 4058 (*reply_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
4058 scoped_ptr<SpdyFrame> reply( 4059 scoped_ptr<SpdyFrame> reply(
4059 spdy_util_.ConstructSpdyFrame(kSynReplyInfo, reply_headers.Pass())); 4060 spdy_util_.ConstructSpdyFrame(kSynReplyInfo, std::move(reply_headers)));
4060 4061
4061 const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH; 4062 const SpdySettingsIds kSampleId1 = SETTINGS_UPLOAD_BANDWIDTH;
4062 unsigned int kSampleValue1 = 0x0a0a0a0a; 4063 unsigned int kSampleValue1 = 0x0a0a0a0a;
4063 const SpdySettingsIds kSampleId2 = SETTINGS_DOWNLOAD_BANDWIDTH; 4064 const SpdySettingsIds kSampleId2 = SETTINGS_DOWNLOAD_BANDWIDTH;
4064 unsigned int kSampleValue2 = 0x0b0b0b0b; 4065 unsigned int kSampleValue2 = 0x0b0b0b0b;
4065 const SpdySettingsIds kSampleId3 = SETTINGS_ROUND_TRIP_TIME; 4066 const SpdySettingsIds kSampleId3 = SETTINGS_ROUND_TRIP_TIME;
4066 unsigned int kSampleValue3 = 0x0c0c0c0c; 4067 unsigned int kSampleValue3 = 0x0c0c0c0c;
4067 scoped_ptr<SpdyFrame> settings_frame; 4068 scoped_ptr<SpdyFrame> settings_frame;
4068 { 4069 {
4069 // Construct the SETTINGS frame. 4070 // Construct the SETTINGS frame.
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
4200 CreateMockWrite(*initial_settings_frame, 0), 4201 CreateMockWrite(*initial_settings_frame, 0),
4201 CreateMockWrite(*settings_frame, 1), 4202 CreateMockWrite(*settings_frame, 1),
4202 CreateMockWrite(*req, 2), 4203 CreateMockWrite(*req, 2),
4203 }; 4204 };
4204 4205
4205 // Construct the reply. 4206 // Construct the reply.
4206 scoped_ptr<SpdyHeaderBlock> reply_headers(new SpdyHeaderBlock()); 4207 scoped_ptr<SpdyHeaderBlock> reply_headers(new SpdyHeaderBlock());
4207 (*reply_headers)[spdy_util_.GetStatusKey()] = "200"; 4208 (*reply_headers)[spdy_util_.GetStatusKey()] = "200";
4208 (*reply_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 4209 (*reply_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
4209 scoped_ptr<SpdyFrame> reply( 4210 scoped_ptr<SpdyFrame> reply(
4210 spdy_util_.ConstructSpdyFrame(kSynReplyInfo, reply_headers.Pass())); 4211 spdy_util_.ConstructSpdyFrame(kSynReplyInfo, std::move(reply_headers)));
4211 4212
4212 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 4213 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
4213 MockRead reads[] = { 4214 MockRead reads[] = {
4214 CreateMockRead(*reply, 3), 4215 CreateMockRead(*reply, 3),
4215 CreateMockRead(*body, 4), 4216 CreateMockRead(*body, 4),
4216 MockRead(ASYNC, 0, 5) // EOF 4217 MockRead(ASYNC, 0, 5) // EOF
4217 }; 4218 };
4218 4219
4219 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4220 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4220 helper.AddData(&data); 4221 helper.AddData(&data);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
4337 return; 4338 return;
4338 4339
4339 HttpRequestInfo request; 4340 HttpRequestInfo request;
4340 request.method = "GET"; 4341 request.method = "GET";
4341 request.url = GURL("https://www.example.org/"); 4342 request.url = GURL("https://www.example.org/");
4342 scoped_ptr<SpdySessionDependencies> session_deps( 4343 scoped_ptr<SpdySessionDependencies> session_deps(
4343 CreateSpdySessionDependencies(GetParam())); 4344 CreateSpdySessionDependencies(GetParam()));
4344 // Do not force SPDY so that second socket can negotiate HTTP/1.1. 4345 // Do not force SPDY so that second socket can negotiate HTTP/1.1.
4345 session_deps->next_protos = SpdyNextProtos(); 4346 session_deps->next_protos = SpdyNextProtos();
4346 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), 4347 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(),
4347 GetParam(), session_deps.Pass()); 4348 GetParam(), std::move(session_deps));
4348 4349
4349 // First socket: HTTP/2 request rejected with HTTP_1_1_REQUIRED. 4350 // First socket: HTTP/2 request rejected with HTTP_1_1_REQUIRED.
4350 const char* url = request.url.spec().c_str(); 4351 const char* url = request.url.spec().c_str();
4351 scoped_ptr<SpdyHeaderBlock> headers(spdy_util_.ConstructGetHeaderBlock(url)); 4352 scoped_ptr<SpdyHeaderBlock> headers(spdy_util_.ConstructGetHeaderBlock(url));
4352 scoped_ptr<SpdyFrame> req( 4353 scoped_ptr<SpdyFrame> req(
4353 spdy_util_.ConstructSpdySyn(1, *headers, LOWEST, false, true)); 4354 spdy_util_.ConstructSpdySyn(1, *headers, LOWEST, false, true));
4354 MockWrite writes0[] = {CreateMockWrite(*req, 0)}; 4355 MockWrite writes0[] = {CreateMockWrite(*req, 0)};
4355 scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway( 4356 scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway(
4356 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); 4357 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please."));
4357 MockRead reads0[] = {CreateMockRead(*go_away, 1)}; 4358 MockRead reads0[] = {CreateMockRead(*go_away, 1)};
4358 SequencedSocketData data0(reads0, arraysize(reads0), writes0, 4359 SequencedSocketData data0(reads0, arraysize(reads0), writes0,
4359 arraysize(writes0)); 4360 arraysize(writes0));
4360 4361
4361 scoped_ptr<SSLSocketDataProvider> ssl_provider0( 4362 scoped_ptr<SSLSocketDataProvider> ssl_provider0(
4362 new SSLSocketDataProvider(ASYNC, OK)); 4363 new SSLSocketDataProvider(ASYNC, OK));
4363 // Expect HTTP/2 protocols too in SSLConfig. 4364 // Expect HTTP/2 protocols too in SSLConfig.
4364 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); 4365 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11);
4365 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); 4366 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31);
4366 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); 4367 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2);
4367 // Force SPDY. 4368 // Force SPDY.
4368 ssl_provider0->SetNextProto(GetParam().protocol); 4369 ssl_provider0->SetNextProto(GetParam().protocol);
4369 helper.AddDataWithSSLSocketDataProvider(&data0, ssl_provider0.Pass()); 4370 helper.AddDataWithSSLSocketDataProvider(&data0, std::move(ssl_provider0));
4370 4371
4371 // Second socket: falling back to HTTP/1.1. 4372 // Second socket: falling back to HTTP/1.1.
4372 MockWrite writes1[] = {MockWrite(ASYNC, 0, 4373 MockWrite writes1[] = {MockWrite(ASYNC, 0,
4373 "GET / HTTP/1.1\r\n" 4374 "GET / HTTP/1.1\r\n"
4374 "Host: www.example.org\r\n" 4375 "Host: www.example.org\r\n"
4375 "Connection: keep-alive\r\n\r\n")}; 4376 "Connection: keep-alive\r\n\r\n")};
4376 MockRead reads1[] = {MockRead(ASYNC, 1, 4377 MockRead reads1[] = {MockRead(ASYNC, 1,
4377 "HTTP/1.1 200 OK\r\n" 4378 "HTTP/1.1 200 OK\r\n"
4378 "Content-Length: 5\r\n\r\n" 4379 "Content-Length: 5\r\n\r\n"
4379 "hello")}; 4380 "hello")};
4380 SequencedSocketData data1(reads1, arraysize(reads1), writes1, 4381 SequencedSocketData data1(reads1, arraysize(reads1), writes1,
4381 arraysize(writes1)); 4382 arraysize(writes1));
4382 4383
4383 scoped_ptr<SSLSocketDataProvider> ssl_provider1( 4384 scoped_ptr<SSLSocketDataProvider> ssl_provider1(
4384 new SSLSocketDataProvider(ASYNC, OK)); 4385 new SSLSocketDataProvider(ASYNC, OK));
4385 // Expect only HTTP/1.1 protocol in SSLConfig. 4386 // Expect only HTTP/1.1 protocol in SSLConfig.
4386 ssl_provider1->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); 4387 ssl_provider1->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11);
4387 // Force HTTP/1.1. 4388 // Force HTTP/1.1.
4388 ssl_provider1->SetNextProto(kProtoHTTP11); 4389 ssl_provider1->SetNextProto(kProtoHTTP11);
4389 helper.AddDataWithSSLSocketDataProvider(&data1, ssl_provider1.Pass()); 4390 helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1));
4390 4391
4391 base::WeakPtr<HttpServerProperties> http_server_properties = 4392 base::WeakPtr<HttpServerProperties> http_server_properties =
4392 helper.session()->spdy_session_pool()->http_server_properties(); 4393 helper.session()->spdy_session_pool()->http_server_properties();
4393 const HostPortPair host_port_pair = HostPortPair::FromURL(GURL(url)); 4394 const HostPortPair host_port_pair = HostPortPair::FromURL(GURL(url));
4394 EXPECT_FALSE(http_server_properties->RequiresHTTP11(host_port_pair)); 4395 EXPECT_FALSE(http_server_properties->RequiresHTTP11(host_port_pair));
4395 4396
4396 helper.RunPreTestSetup(); 4397 helper.RunPreTestSetup();
4397 helper.StartDefaultTest(); 4398 helper.StartDefaultTest();
4398 helper.FinishDefaultTestWithoutVerification(); 4399 helper.FinishDefaultTestWithoutVerification();
4399 helper.VerifyDataConsumed(); 4400 helper.VerifyDataConsumed();
(...skipping 29 matching lines...) Expand all
4429 HttpRequestInfo request; 4430 HttpRequestInfo request;
4430 request.method = "GET"; 4431 request.method = "GET";
4431 request.url = GURL("https://www.example.org/"); 4432 request.url = GURL("https://www.example.org/");
4432 scoped_ptr<SpdySessionDependencies> session_deps( 4433 scoped_ptr<SpdySessionDependencies> session_deps(
4433 CreateSpdySessionDependencies( 4434 CreateSpdySessionDependencies(
4434 GetParam(), 4435 GetParam(),
4435 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70"))); 4436 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")));
4436 // Do not force SPDY so that second socket can negotiate HTTP/1.1. 4437 // Do not force SPDY so that second socket can negotiate HTTP/1.1.
4437 session_deps->next_protos = SpdyNextProtos(); 4438 session_deps->next_protos = SpdyNextProtos();
4438 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), 4439 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(),
4439 GetParam(), session_deps.Pass()); 4440 GetParam(), std::move(session_deps));
4440 4441
4441 // First socket: HTTP/2 CONNECT rejected with HTTP_1_1_REQUIRED. 4442 // First socket: HTTP/2 CONNECT rejected with HTTP_1_1_REQUIRED.
4442 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyConnect( 4443 scoped_ptr<SpdyFrame> req(spdy_util_.ConstructSpdyConnect(
4443 nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); 4444 nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443)));
4444 MockWrite writes0[] = {CreateMockWrite(*req, 0)}; 4445 MockWrite writes0[] = {CreateMockWrite(*req, 0)};
4445 scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway( 4446 scoped_ptr<SpdyFrame> go_away(spdy_util_.ConstructSpdyGoAway(
4446 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); 4447 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please."));
4447 MockRead reads0[] = {CreateMockRead(*go_away, 1)}; 4448 MockRead reads0[] = {CreateMockRead(*go_away, 1)};
4448 SequencedSocketData data0(reads0, arraysize(reads0), writes0, 4449 SequencedSocketData data0(reads0, arraysize(reads0), writes0,
4449 arraysize(writes0)); 4450 arraysize(writes0));
4450 4451
4451 scoped_ptr<SSLSocketDataProvider> ssl_provider0( 4452 scoped_ptr<SSLSocketDataProvider> ssl_provider0(
4452 new SSLSocketDataProvider(ASYNC, OK)); 4453 new SSLSocketDataProvider(ASYNC, OK));
4453 // Expect HTTP/2 protocols too in SSLConfig. 4454 // Expect HTTP/2 protocols too in SSLConfig.
4454 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); 4455 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11);
4455 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31); 4456 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoSPDY31);
4456 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); 4457 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2);
4457 // Force SPDY. 4458 // Force SPDY.
4458 ssl_provider0->SetNextProto(GetParam().protocol); 4459 ssl_provider0->SetNextProto(GetParam().protocol);
4459 helper.AddDataWithSSLSocketDataProvider(&data0, ssl_provider0.Pass()); 4460 helper.AddDataWithSSLSocketDataProvider(&data0, std::move(ssl_provider0));
4460 4461
4461 // Second socket: retry using HTTP/1.1. 4462 // Second socket: retry using HTTP/1.1.
4462 MockWrite writes1[] = { 4463 MockWrite writes1[] = {
4463 MockWrite(ASYNC, 0, 4464 MockWrite(ASYNC, 0,
4464 "CONNECT www.example.org:443 HTTP/1.1\r\n" 4465 "CONNECT www.example.org:443 HTTP/1.1\r\n"
4465 "Host: www.example.org:443\r\n" 4466 "Host: www.example.org:443\r\n"
4466 "Proxy-Connection: keep-alive\r\n\r\n"), 4467 "Proxy-Connection: keep-alive\r\n\r\n"),
4467 MockWrite(ASYNC, 2, 4468 MockWrite(ASYNC, 2,
4468 "GET / HTTP/1.1\r\n" 4469 "GET / HTTP/1.1\r\n"
4469 "Host: www.example.org\r\n" 4470 "Host: www.example.org\r\n"
4470 "Connection: keep-alive\r\n\r\n"), 4471 "Connection: keep-alive\r\n\r\n"),
4471 }; 4472 };
4472 4473
4473 MockRead reads1[] = { 4474 MockRead reads1[] = {
4474 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n\r\n"), 4475 MockRead(ASYNC, 1, "HTTP/1.1 200 OK\r\n\r\n"),
4475 MockRead(ASYNC, 3, 4476 MockRead(ASYNC, 3,
4476 "HTTP/1.1 200 OK\r\n" 4477 "HTTP/1.1 200 OK\r\n"
4477 "Content-Length: 5\r\n\r\n" 4478 "Content-Length: 5\r\n\r\n"
4478 "hello"), 4479 "hello"),
4479 }; 4480 };
4480 SequencedSocketData data1(reads1, arraysize(reads1), writes1, 4481 SequencedSocketData data1(reads1, arraysize(reads1), writes1,
4481 arraysize(writes1)); 4482 arraysize(writes1));
4482 4483
4483 scoped_ptr<SSLSocketDataProvider> ssl_provider1( 4484 scoped_ptr<SSLSocketDataProvider> ssl_provider1(
4484 new SSLSocketDataProvider(ASYNC, OK)); 4485 new SSLSocketDataProvider(ASYNC, OK));
4485 // Expect only HTTP/1.1 protocol in SSLConfig. 4486 // Expect only HTTP/1.1 protocol in SSLConfig.
4486 ssl_provider1->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); 4487 ssl_provider1->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11);
4487 // Force HTTP/1.1. 4488 // Force HTTP/1.1.
4488 ssl_provider1->SetNextProto(kProtoHTTP11); 4489 ssl_provider1->SetNextProto(kProtoHTTP11);
4489 helper.AddDataWithSSLSocketDataProvider(&data1, ssl_provider1.Pass()); 4490 helper.AddDataWithSSLSocketDataProvider(&data1, std::move(ssl_provider1));
4490 4491
4491 // A third socket is needed for the tunnelled connection. 4492 // A third socket is needed for the tunnelled connection.
4492 scoped_ptr<SSLSocketDataProvider> ssl_provider2( 4493 scoped_ptr<SSLSocketDataProvider> ssl_provider2(
4493 new SSLSocketDataProvider(ASYNC, OK)); 4494 new SSLSocketDataProvider(ASYNC, OK));
4494 helper.session_deps()->socket_factory->AddSSLSocketDataProvider( 4495 helper.session_deps()->socket_factory->AddSSLSocketDataProvider(
4495 ssl_provider2.get()); 4496 ssl_provider2.get());
4496 4497
4497 base::WeakPtr<HttpServerProperties> http_server_properties = 4498 base::WeakPtr<HttpServerProperties> http_server_properties =
4498 helper.session()->spdy_session_pool()->http_server_properties(); 4499 helper.session()->spdy_session_pool()->http_server_properties();
4499 const HostPortPair proxy_host_port_pair = HostPortPair("myproxy", 70); 4500 const HostPortPair proxy_host_port_pair = HostPortPair("myproxy", 70);
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
4684 // Ensure that this transaction uses the same SpdySessionPool. 4685 // Ensure that this transaction uses the same SpdySessionPool.
4685 scoped_ptr<HttpNetworkSession> session_proxy( 4686 scoped_ptr<HttpNetworkSession> session_proxy(
4686 SpdySessionDependencies::SpdyCreateSession(ssd_proxy.get())); 4687 SpdySessionDependencies::SpdyCreateSession(ssd_proxy.get()));
4687 NormalSpdyTransactionHelper helper_proxy(request_proxy, DEFAULT_PRIORITY, 4688 NormalSpdyTransactionHelper helper_proxy(request_proxy, DEFAULT_PRIORITY,
4688 BoundNetLog(), GetParam(), NULL); 4689 BoundNetLog(), GetParam(), NULL);
4689 HttpNetworkSessionPeer session_peer(session_proxy.get()); 4690 HttpNetworkSessionPeer session_peer(session_proxy.get());
4690 scoped_ptr<ProxyService> proxy_service( 4691 scoped_ptr<ProxyService> proxy_service(
4691 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70")); 4692 ProxyService::CreateFixedFromPacResult("PROXY myproxy:70"));
4692 session_peer.SetProxyService(proxy_service.get()); 4693 session_peer.SetProxyService(proxy_service.get());
4693 helper_proxy.session_deps().swap(ssd_proxy); 4694 helper_proxy.session_deps().swap(ssd_proxy);
4694 helper_proxy.SetSession(session_proxy.Pass()); 4695 helper_proxy.SetSession(std::move(session_proxy));
4695 helper_proxy.RunPreTestSetup(); 4696 helper_proxy.RunPreTestSetup();
4696 helper_proxy.AddData(data_proxy.get()); 4697 helper_proxy.AddData(data_proxy.get());
4697 4698
4698 HttpNetworkTransaction* trans_proxy = helper_proxy.trans(); 4699 HttpNetworkTransaction* trans_proxy = helper_proxy.trans();
4699 TestCompletionCallback callback_proxy; 4700 TestCompletionCallback callback_proxy;
4700 int rv = trans_proxy->Start( 4701 int rv = trans_proxy->Start(
4701 &request_proxy, callback_proxy.callback(), BoundNetLog()); 4702 &request_proxy, callback_proxy.callback(), BoundNetLog());
4702 EXPECT_EQ(ERR_IO_PENDING, rv); 4703 EXPECT_EQ(ERR_IO_PENDING, rv);
4703 rv = callback_proxy.WaitForResult(); 4704 rv = callback_proxy.WaitForResult();
4704 EXPECT_EQ(0, rv); 4705 EXPECT_EQ(0, rv);
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
4956 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 4957 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
4957 scoped_ptr<SpdyFrame> stream1_body( 4958 scoped_ptr<SpdyFrame> stream1_body(
4958 spdy_util_.ConstructSpdyBodyFrame(1, true)); 4959 spdy_util_.ConstructSpdyBodyFrame(1, true));
4959 MockWrite writes[] = { 4960 MockWrite writes[] = {
4960 CreateMockWrite(*stream1_syn, 0), 4961 CreateMockWrite(*stream1_syn, 0),
4961 }; 4962 };
4962 4963
4963 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 4964 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
4964 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 4965 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
4965 initial_headers.get()); 4966 initial_headers.get());
4966 scoped_ptr<SpdyFrame> stream2_syn( 4967 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
4967 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 4968 std::move(initial_headers), 2, 1));
4968 4969
4969 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 4970 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
4970 (*late_headers)[spdy_util_.GetStatusKey()] = "200"; 4971 (*late_headers)[spdy_util_.GetStatusKey()] = "200";
4971 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 4972 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
4972 (*late_headers)["hello"] = "bye"; 4973 (*late_headers)["hello"] = "bye";
4973 scoped_ptr<SpdyFrame> stream2_headers( 4974 scoped_ptr<SpdyFrame> stream2_headers(spdy_util_.ConstructSpdyControlFrame(
4974 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 4975 std::move(late_headers), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE,
4975 false, 4976 0));
4976 2,
4977 LOWEST,
4978 HEADERS,
4979 CONTROL_FLAG_NONE,
4980 0));
4981 4977
4982 scoped_ptr<SpdyFrame> 4978 scoped_ptr<SpdyFrame>
4983 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 4979 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
4984 const char kPushedData[] = "pushed"; 4980 const char kPushedData[] = "pushed";
4985 scoped_ptr<SpdyFrame> stream2_body( 4981 scoped_ptr<SpdyFrame> stream2_body(
4986 spdy_util_.ConstructSpdyBodyFrame( 4982 spdy_util_.ConstructSpdyBodyFrame(
4987 2, kPushedData, strlen(kPushedData), true)); 4983 2, kPushedData, strlen(kPushedData), true));
4988 MockRead reads[] = { 4984 MockRead reads[] = {
4989 CreateMockRead(*stream1_reply, 1), 4985 CreateMockRead(*stream1_reply, 1),
4990 CreateMockRead(*stream2_syn, 2), 4986 CreateMockRead(*stream2_syn, 2),
(...skipping 27 matching lines...) Expand all
5018 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 5014 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
5019 scoped_ptr<SpdyFrame> stream1_body( 5015 scoped_ptr<SpdyFrame> stream1_body(
5020 spdy_util_.ConstructSpdyBodyFrame(1, true)); 5016 spdy_util_.ConstructSpdyBodyFrame(1, true));
5021 MockWrite writes[] = { 5017 MockWrite writes[] = {
5022 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5018 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5023 }; 5019 };
5024 5020
5025 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 5021 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
5026 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 5022 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
5027 initial_headers.get()); 5023 initial_headers.get());
5028 scoped_ptr<SpdyFrame> stream2_syn( 5024 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
5029 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 5025 std::move(initial_headers), 2, 1));
5030 5026
5031 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 5027 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5032 (*late_headers)[spdy_util_.GetStatusKey()] = "200"; 5028 (*late_headers)[spdy_util_.GetStatusKey()] = "200";
5033 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 5029 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
5034 (*late_headers)["hello"] = "bye"; 5030 (*late_headers)["hello"] = "bye";
5035 scoped_ptr<SpdyFrame> stream2_headers( 5031 scoped_ptr<SpdyFrame> stream2_headers(spdy_util_.ConstructSpdyControlFrame(
5036 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 5032 std::move(late_headers), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5037 false, 5033 0));
5038 2,
5039 LOWEST,
5040 HEADERS,
5041 CONTROL_FLAG_NONE,
5042 0));
5043 5034
5044 scoped_ptr<SpdyFrame> 5035 scoped_ptr<SpdyFrame>
5045 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5036 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5046 const char kPushedData[] = "pushed"; 5037 const char kPushedData[] = "pushed";
5047 scoped_ptr<SpdyFrame> stream2_body( 5038 scoped_ptr<SpdyFrame> stream2_body(
5048 spdy_util_.ConstructSpdyBodyFrame( 5039 spdy_util_.ConstructSpdyBodyFrame(
5049 2, kPushedData, strlen(kPushedData), true)); 5040 2, kPushedData, strlen(kPushedData), true));
5050 MockRead reads[] = { 5041 MockRead reads[] = {
5051 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2), 5042 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2),
5052 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), 5043 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4),
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
5137 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5128 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5138 }; 5129 };
5139 5130
5140 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 5131 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
5141 if (spdy_util_.spdy_version() < HTTP2) { 5132 if (spdy_util_.spdy_version() < HTTP2) {
5142 // In HTTP/2 PUSH_PROMISE headers won't show up in the response headers. 5133 // In HTTP/2 PUSH_PROMISE headers won't show up in the response headers.
5143 (*initial_headers)["alpha"] = "beta"; 5134 (*initial_headers)["alpha"] = "beta";
5144 } 5135 }
5145 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 5136 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
5146 initial_headers.get()); 5137 initial_headers.get());
5147 scoped_ptr<SpdyFrame> stream2_syn( 5138 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
5148 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 5139 std::move(initial_headers), 2, 1));
5149 5140
5150 scoped_ptr<SpdyHeaderBlock> middle_headers(new SpdyHeaderBlock()); 5141 scoped_ptr<SpdyHeaderBlock> middle_headers(new SpdyHeaderBlock());
5151 (*middle_headers)["hello"] = "bye"; 5142 (*middle_headers)["hello"] = "bye";
5152 scoped_ptr<SpdyFrame> stream2_headers1( 5143 scoped_ptr<SpdyFrame> stream2_headers1(spdy_util_.ConstructSpdyControlFrame(
5153 spdy_util_.ConstructSpdyControlFrame(middle_headers.Pass(), 5144 std::move(middle_headers), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5154 false, 5145 0));
5155 2,
5156 LOWEST,
5157 HEADERS,
5158 CONTROL_FLAG_NONE,
5159 0));
5160 5146
5161 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 5147 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5162 (*late_headers)[spdy_util_.GetStatusKey()] = "200"; 5148 (*late_headers)[spdy_util_.GetStatusKey()] = "200";
5163 if (spdy_util_.spdy_version() < HTTP2) { 5149 if (spdy_util_.spdy_version() < HTTP2) {
5164 // HTTP/2 eliminates use of the :version header. 5150 // HTTP/2 eliminates use of the :version header.
5165 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 5151 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
5166 } 5152 }
5167 scoped_ptr<SpdyFrame> stream2_headers2( 5153 scoped_ptr<SpdyFrame> stream2_headers2(spdy_util_.ConstructSpdyControlFrame(
5168 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 5154 std::move(late_headers), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5169 false, 5155 0));
5170 2,
5171 LOWEST,
5172 HEADERS,
5173 CONTROL_FLAG_NONE,
5174 0));
5175 5156
5176 scoped_ptr<SpdyFrame> 5157 scoped_ptr<SpdyFrame>
5177 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5158 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5178 const char kPushedData[] = "pushed"; 5159 const char kPushedData[] = "pushed";
5179 scoped_ptr<SpdyFrame> stream2_body( 5160 scoped_ptr<SpdyFrame> stream2_body(
5180 spdy_util_.ConstructSpdyBodyFrame( 5161 spdy_util_.ConstructSpdyBodyFrame(
5181 2, kPushedData, strlen(kPushedData), true)); 5162 2, kPushedData, strlen(kPushedData), true));
5182 MockRead reads[] = { 5163 MockRead reads[] = {
5183 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2), 5164 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2),
5184 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), 5165 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4),
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
5273 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 5254 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
5274 scoped_ptr<SpdyFrame> stream1_body( 5255 scoped_ptr<SpdyFrame> stream1_body(
5275 spdy_util_.ConstructSpdyBodyFrame(1, true)); 5256 spdy_util_.ConstructSpdyBodyFrame(1, true));
5276 MockWrite writes[] = { 5257 MockWrite writes[] = {
5277 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5258 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5278 }; 5259 };
5279 5260
5280 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 5261 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
5281 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 5262 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
5282 initial_headers.get()); 5263 initial_headers.get());
5283 scoped_ptr<SpdyFrame> stream2_syn( 5264 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
5284 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 5265 std::move(initial_headers), 2, 1));
5285 5266
5286 scoped_ptr<SpdyHeaderBlock> middle_headers(new SpdyHeaderBlock()); 5267 scoped_ptr<SpdyHeaderBlock> middle_headers(new SpdyHeaderBlock());
5287 (*middle_headers)["hello"] = "bye"; 5268 (*middle_headers)["hello"] = "bye";
5288 scoped_ptr<SpdyFrame> stream2_headers1( 5269 scoped_ptr<SpdyFrame> stream2_headers1(spdy_util_.ConstructSpdyControlFrame(
5289 spdy_util_.ConstructSpdyControlFrame(middle_headers.Pass(), 5270 std::move(middle_headers), false, 2, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5290 false, 5271 0));
5291 2,
5292 LOWEST,
5293 HEADERS,
5294 CONTROL_FLAG_NONE,
5295 0));
5296 5272
5297 scoped_ptr<SpdyFrame> 5273 scoped_ptr<SpdyFrame>
5298 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5274 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5299 const char kPushedData[] = "pushed"; 5275 const char kPushedData[] = "pushed";
5300 scoped_ptr<SpdyFrame> stream2_body( 5276 scoped_ptr<SpdyFrame> stream2_body(
5301 spdy_util_.ConstructSpdyBodyFrame( 5277 spdy_util_.ConstructSpdyBodyFrame(
5302 2, kPushedData, strlen(kPushedData), true)); 5278 2, kPushedData, strlen(kPushedData), true));
5303 MockRead reads[] = { 5279 MockRead reads[] = {
5304 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2), 5280 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream2_syn, 2),
5305 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), 5281 CreateMockRead(*stream1_body, 3), MockRead(ASYNC, ERR_IO_PENDING, 4),
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
5375 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 5351 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
5376 MockWrite writes[] = { 5352 MockWrite writes[] = {
5377 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4), 5353 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 4),
5378 }; 5354 };
5379 5355
5380 scoped_ptr<SpdyFrame> stream1_reply( 5356 scoped_ptr<SpdyFrame> stream1_reply(
5381 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5357 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5382 5358
5383 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 5359 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5384 (*late_headers)["hello"] = "bye"; 5360 (*late_headers)["hello"] = "bye";
5385 scoped_ptr<SpdyFrame> stream1_headers( 5361 scoped_ptr<SpdyFrame> stream1_headers(spdy_util_.ConstructSpdyControlFrame(
5386 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 5362 std::move(late_headers), false, 1, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5387 false, 5363 0));
5388 1,
5389 LOWEST,
5390 HEADERS,
5391 CONTROL_FLAG_NONE,
5392 0));
5393 scoped_ptr<SpdyFrame> stream1_body( 5364 scoped_ptr<SpdyFrame> stream1_body(
5394 spdy_util_.ConstructSpdyBodyFrame(1, true)); 5365 spdy_util_.ConstructSpdyBodyFrame(1, true));
5395 MockRead reads[] = { 5366 MockRead reads[] = {
5396 CreateMockRead(*stream1_reply, 1), 5367 CreateMockRead(*stream1_reply, 1),
5397 CreateMockRead(*stream1_headers, 2), 5368 CreateMockRead(*stream1_headers, 2),
5398 CreateMockRead(*stream1_body, 3), 5369 CreateMockRead(*stream1_body, 3),
5399 MockRead(ASYNC, 0, 5) // EOF 5370 MockRead(ASYNC, 0, 5) // EOF
5400 }; 5371 };
5401 5372
5402 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 5373 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
(...skipping 14 matching lines...) Expand all
5417 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 5388 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
5418 MockWrite writes[] = { 5389 MockWrite writes[] = {
5419 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5), 5390 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 5),
5420 }; 5391 };
5421 5392
5422 scoped_ptr<SpdyFrame> stream1_reply( 5393 scoped_ptr<SpdyFrame> stream1_reply(
5423 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 5394 spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
5424 5395
5425 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 5396 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5426 (*late_headers)["hello"] = "bye"; 5397 (*late_headers)["hello"] = "bye";
5427 scoped_ptr<SpdyFrame> stream1_headers( 5398 scoped_ptr<SpdyFrame> stream1_headers(spdy_util_.ConstructSpdyControlFrame(
5428 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 5399 std::move(late_headers), false, 1, LOWEST, HEADERS, CONTROL_FLAG_NONE,
5429 false, 5400 0));
5430 1,
5431 LOWEST,
5432 HEADERS,
5433 CONTROL_FLAG_NONE,
5434 0));
5435 scoped_ptr<SpdyFrame> stream1_body( 5401 scoped_ptr<SpdyFrame> stream1_body(
5436 spdy_util_.ConstructSpdyBodyFrame(1, false)); 5402 spdy_util_.ConstructSpdyBodyFrame(1, false));
5437 scoped_ptr<SpdyFrame> stream1_body2( 5403 scoped_ptr<SpdyFrame> stream1_body2(
5438 spdy_util_.ConstructSpdyBodyFrame(1, true)); 5404 spdy_util_.ConstructSpdyBodyFrame(1, true));
5439 MockRead reads[] = { 5405 MockRead reads[] = {
5440 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream1_body, 2), 5406 CreateMockRead(*stream1_reply, 1), CreateMockRead(*stream1_body, 2),
5441 CreateMockRead(*stream1_headers, 3), CreateMockRead(*stream1_body2, 4), 5407 CreateMockRead(*stream1_headers, 3), CreateMockRead(*stream1_body2, 4),
5442 MockRead(ASYNC, 0, 6) // EOF 5408 MockRead(ASYNC, 0, 6) // EOF
5443 }; 5409 };
5444 5410
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
5525 request.method = "GET"; 5491 request.method = "GET";
5526 request.url = GURL(url_to_fetch); 5492 request.url = GURL(url_to_fetch);
5527 request.load_flags = 0; 5493 request.load_flags = 0;
5528 5494
5529 // Enable cross-origin push. Since we are not using a proxy, this should 5495 // Enable cross-origin push. Since we are not using a proxy, this should
5530 // not actually enable cross-origin SPDY push. 5496 // not actually enable cross-origin SPDY push.
5531 scoped_ptr<SpdySessionDependencies> session_deps( 5497 scoped_ptr<SpdySessionDependencies> session_deps(
5532 CreateSpdySessionDependencies(GetParam())); 5498 CreateSpdySessionDependencies(GetParam()));
5533 session_deps->trusted_spdy_proxy = "123.45.67.89:8080"; 5499 session_deps->trusted_spdy_proxy = "123.45.67.89:8080";
5534 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(), 5500 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, BoundNetLog(),
5535 GetParam(), session_deps.Pass()); 5501 GetParam(), std::move(session_deps));
5536 helper.RunPreTestSetup(); 5502 helper.RunPreTestSetup();
5537 helper.AddData(&data); 5503 helper.AddData(&data);
5538 5504
5539 HttpNetworkTransaction* trans = helper.trans(); 5505 HttpNetworkTransaction* trans = helper.trans();
5540 5506
5541 // Start the transaction with basic parameters. 5507 // Start the transaction with basic parameters.
5542 TestCompletionCallback callback; 5508 TestCompletionCallback callback;
5543 5509
5544 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); 5510 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
5545 EXPECT_EQ(ERR_IO_PENDING, rv); 5511 EXPECT_EQ(ERR_IO_PENDING, rv);
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
6383 } 6349 }
6384 6350
6385 TEST_P(SpdyNetworkTransactionTest, GoAwayOnOddPushStreamId) { 6351 TEST_P(SpdyNetworkTransactionTest, GoAwayOnOddPushStreamId) {
6386 if (spdy_util_.spdy_version() < SPDY3) 6352 if (spdy_util_.spdy_version() < SPDY3)
6387 return; 6353 return;
6388 6354
6389 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock); 6355 scoped_ptr<SpdyHeaderBlock> push_headers(new SpdyHeaderBlock);
6390 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/a.dat", 6356 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/a.dat",
6391 push_headers.get()); 6357 push_headers.get());
6392 scoped_ptr<SpdyFrame> push( 6358 scoped_ptr<SpdyFrame> push(
6393 spdy_util_.ConstructInitialSpdyPushFrame(push_headers.Pass(), 3, 1)); 6359 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 3, 1));
6394 MockRead reads[] = {CreateMockRead(*push, 1)}; 6360 MockRead reads[] = {CreateMockRead(*push, 1)};
6395 6361
6396 scoped_ptr<SpdyFrame> req( 6362 scoped_ptr<SpdyFrame> req(
6397 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 6363 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
6398 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway( 6364 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
6399 0, GOAWAY_PROTOCOL_ERROR, "Odd push stream id.")); 6365 0, GOAWAY_PROTOCOL_ERROR, "Odd push stream id."));
6400 MockWrite writes[] = { 6366 MockWrite writes[] = {
6401 CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2), 6367 CreateMockWrite(*req, 0), CreateMockWrite(*goaway, 2),
6402 }; 6368 };
6403 6369
6404 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 6370 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
6405 NormalSpdyTransactionHelper helper( 6371 NormalSpdyTransactionHelper helper(
6406 CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL); 6372 CreateGetRequest(), DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
6407 helper.RunToCompletion(&data); 6373 helper.RunToCompletion(&data);
6408 TransactionHelperResult out = helper.output(); 6374 TransactionHelperResult out = helper.output();
6409 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv); 6375 EXPECT_EQ(ERR_SPDY_PROTOCOL_ERROR, out.rv);
6410 } 6376 }
6411 6377
6412 TEST_P(SpdyNetworkTransactionTest, 6378 TEST_P(SpdyNetworkTransactionTest,
6413 GoAwayOnPushStreamIdLesserOrEqualThanLastAccepted) { 6379 GoAwayOnPushStreamIdLesserOrEqualThanLastAccepted) {
6414 if (spdy_util_.spdy_version() < SPDY3) 6380 if (spdy_util_.spdy_version() < SPDY3)
6415 return; 6381 return;
6416 6382
6417 scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush( 6383 scoped_ptr<SpdyFrame> push_a(spdy_util_.ConstructSpdyPush(
6418 NULL, 0, 4, 1, GetDefaultUrlWithPath("/a.dat").c_str())); 6384 NULL, 0, 4, 1, GetDefaultUrlWithPath("/a.dat").c_str()));
6419 scoped_ptr<SpdyHeaderBlock> push_b_headers(new SpdyHeaderBlock); 6385 scoped_ptr<SpdyHeaderBlock> push_b_headers(new SpdyHeaderBlock);
6420 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/b.dat"), 6386 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/b.dat"),
6421 push_b_headers.get()); 6387 push_b_headers.get());
6422 scoped_ptr<SpdyFrame> push_b( 6388 scoped_ptr<SpdyFrame> push_b(spdy_util_.ConstructInitialSpdyPushFrame(
6423 spdy_util_.ConstructInitialSpdyPushFrame(push_b_headers.Pass(), 2, 1)); 6389 std::move(push_b_headers), 2, 1));
6424 MockRead reads[] = { 6390 MockRead reads[] = {
6425 CreateMockRead(*push_a, 1), CreateMockRead(*push_b, 2), 6391 CreateMockRead(*push_a, 1), CreateMockRead(*push_b, 2),
6426 }; 6392 };
6427 6393
6428 scoped_ptr<SpdyFrame> req( 6394 scoped_ptr<SpdyFrame> req(
6429 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 6395 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
6430 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway( 6396 scoped_ptr<SpdyFrame> goaway(spdy_util_.ConstructSpdyGoAway(
6431 4, 6397 4,
6432 GOAWAY_PROTOCOL_ERROR, 6398 GOAWAY_PROTOCOL_ERROR,
6433 "New push stream id must be greater than the last accepted.")); 6399 "New push stream id must be greater than the last accepted."));
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
6500 MockRead(ASYNC, 0, 3) // EOF 6466 MockRead(ASYNC, 0, 3) // EOF
6501 }; 6467 };
6502 6468
6503 SequencedSocketData data(reads, arraysize(reads), writes, 6469 SequencedSocketData data(reads, arraysize(reads), writes,
6504 arraysize(writes)); 6470 arraysize(writes));
6505 HttpRequestInfo request; 6471 HttpRequestInfo request;
6506 request.method = "GET"; 6472 request.method = "GET";
6507 request.url = GURL("https://www.example.org/"); 6473 request.url = GURL("https://www.example.org/");
6508 NormalSpdyTransactionHelper helper( 6474 NormalSpdyTransactionHelper helper(
6509 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL); 6475 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
6510 helper.RunToCompletionWithSSLData(&data, ssl_provider.Pass()); 6476 helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider));
6511 TransactionHelperResult out = helper.output(); 6477 TransactionHelperResult out = helper.output();
6512 EXPECT_EQ(OK, out.rv); 6478 EXPECT_EQ(OK, out.rv);
6513 EXPECT_EQ("HTTP/1.1 200", out.status_line); 6479 EXPECT_EQ("HTTP/1.1 200", out.status_line);
6514 EXPECT_EQ("hello!", out.response_data); 6480 EXPECT_EQ("hello!", out.response_data);
6515 } 6481 }
6516 }; 6482 };
6517 6483
6518 //----------------------------------------------------------------------------- 6484 //-----------------------------------------------------------------------------
6519 // All tests are run with three different connection types: SPDY after NPN 6485 // All tests are run with three different connection types: SPDY after NPN
6520 // negotiation, SPDY without SSL, and SPDY with SSL. 6486 // negotiation, SPDY without SSL, and SPDY with SSL.
6521 // 6487 //
6522 // TODO(akalin): Use ::testing::Combine() when we are able to use 6488 // TODO(akalin): Use ::testing::Combine() when we are able to use
6523 // <tr1/tuple>. 6489 // <tr1/tuple>.
6524 INSTANTIATE_TEST_CASE_P( 6490 INSTANTIATE_TEST_CASE_P(
6525 Spdy, 6491 Spdy,
6526 SpdyNetworkTransactionNoTLSUsageCheckTest, 6492 SpdyNetworkTransactionNoTLSUsageCheckTest,
6527 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoSPDY31, 6493 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoSPDY31,
6528 HTTPS_SPDY_VIA_NPN, 6494 HTTPS_SPDY_VIA_NPN,
6529 false))); 6495 false)));
6530 6496
6531 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSVersionTooOld) { 6497 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSVersionTooOld) {
6532 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6498 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6533 new SSLSocketDataProvider(ASYNC, OK)); 6499 new SSLSocketDataProvider(ASYNC, OK));
6534 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3, 6500 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3,
6535 &ssl_provider->connection_status); 6501 &ssl_provider->connection_status);
6536 6502
6537 RunNoTLSUsageCheckTest(ssl_provider.Pass()); 6503 RunNoTLSUsageCheckTest(std::move(ssl_provider));
6538 } 6504 }
6539 6505
6540 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSCipherSuiteSucky) { 6506 TEST_P(SpdyNetworkTransactionNoTLSUsageCheckTest, TLSCipherSuiteSucky) {
6541 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6507 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6542 new SSLSocketDataProvider(ASYNC, OK)); 6508 new SSLSocketDataProvider(ASYNC, OK));
6543 // Set to TLS_RSA_WITH_NULL_MD5 6509 // Set to TLS_RSA_WITH_NULL_MD5
6544 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6510 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6545 6511
6546 RunNoTLSUsageCheckTest(ssl_provider.Pass()); 6512 RunNoTLSUsageCheckTest(std::move(ssl_provider));
6547 } 6513 }
6548 6514
6549 class SpdyNetworkTransactionTLSUsageCheckTest 6515 class SpdyNetworkTransactionTLSUsageCheckTest
6550 : public SpdyNetworkTransactionTest { 6516 : public SpdyNetworkTransactionTest {
6551 protected: 6517 protected:
6552 void RunTLSUsageCheckTest(scoped_ptr<SSLSocketDataProvider> ssl_provider) { 6518 void RunTLSUsageCheckTest(scoped_ptr<SSLSocketDataProvider> ssl_provider) {
6553 scoped_ptr<SpdyFrame> goaway( 6519 scoped_ptr<SpdyFrame> goaway(
6554 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_INADEQUATE_SECURITY, "")); 6520 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_INADEQUATE_SECURITY, ""));
6555 MockWrite writes[] = {CreateMockWrite(*goaway)}; 6521 MockWrite writes[] = {CreateMockWrite(*goaway)};
6556 6522
6557 StaticSocketDataProvider data(NULL, 0, writes, arraysize(writes)); 6523 StaticSocketDataProvider data(NULL, 0, writes, arraysize(writes));
6558 HttpRequestInfo request; 6524 HttpRequestInfo request;
6559 request.method = "GET"; 6525 request.method = "GET";
6560 request.url = GURL("https://www.example.org/"); 6526 request.url = GURL("https://www.example.org/");
6561 NormalSpdyTransactionHelper helper( 6527 NormalSpdyTransactionHelper helper(
6562 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL); 6528 request, DEFAULT_PRIORITY, BoundNetLog(), GetParam(), NULL);
6563 helper.RunToCompletionWithSSLData(&data, ssl_provider.Pass()); 6529 helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider));
6564 TransactionHelperResult out = helper.output(); 6530 TransactionHelperResult out = helper.output();
6565 EXPECT_EQ(ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY, out.rv); 6531 EXPECT_EQ(ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY, out.rv);
6566 } 6532 }
6567 }; 6533 };
6568 6534
6569 INSTANTIATE_TEST_CASE_P( 6535 INSTANTIATE_TEST_CASE_P(
6570 Spdy, 6536 Spdy,
6571 SpdyNetworkTransactionTLSUsageCheckTest, 6537 SpdyNetworkTransactionTLSUsageCheckTest,
6572 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoHTTP2, 6538 ::testing::Values(SpdyNetworkTransactionTestParams(kProtoHTTP2,
6573 HTTPS_SPDY_VIA_NPN, 6539 HTTPS_SPDY_VIA_NPN,
6574 false), 6540 false),
6575 SpdyNetworkTransactionTestParams(kProtoHTTP2, 6541 SpdyNetworkTransactionTestParams(kProtoHTTP2,
6576 HTTPS_SPDY_VIA_NPN, 6542 HTTPS_SPDY_VIA_NPN,
6577 true))); 6543 true)));
6578 6544
6579 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSVersionTooOld) { 6545 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSVersionTooOld) {
6580 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6546 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6581 new SSLSocketDataProvider(ASYNC, OK)); 6547 new SSLSocketDataProvider(ASYNC, OK));
6582 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3, 6548 SSLConnectionStatusSetVersion(SSL_CONNECTION_VERSION_SSL3,
6583 &ssl_provider->connection_status); 6549 &ssl_provider->connection_status);
6584 6550
6585 RunTLSUsageCheckTest(ssl_provider.Pass()); 6551 RunTLSUsageCheckTest(std::move(ssl_provider));
6586 } 6552 }
6587 6553
6588 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { 6554 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) {
6589 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6555 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6590 new SSLSocketDataProvider(ASYNC, OK)); 6556 new SSLSocketDataProvider(ASYNC, OK));
6591 // Set to TLS_RSA_WITH_NULL_MD5 6557 // Set to TLS_RSA_WITH_NULL_MD5
6592 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6558 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6593 6559
6594 RunTLSUsageCheckTest(ssl_provider.Pass()); 6560 RunTLSUsageCheckTest(std::move(ssl_provider));
6595 } 6561 }
6596 6562
6597 } // namespace net 6563 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_http_stream.cc ('k') | net/spdy/spdy_proxy_client_socket.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698