OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |