| 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 <memory> | 5 #include <memory> |
| 6 #include <ostream> | 6 #include <ostream> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 } | 326 } |
| 327 | 327 |
| 328 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket( | 328 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket( |
| 329 QuicPacketNumber largest_received, | 329 QuicPacketNumber largest_received, |
| 330 QuicPacketNumber least_unacked, | 330 QuicPacketNumber least_unacked, |
| 331 QuicTestPacketMaker* maker) { | 331 QuicTestPacketMaker* maker) { |
| 332 return client_maker_.MakeAckPacket(2, largest_received, least_unacked, | 332 return client_maker_.MakeAckPacket(2, largest_received, least_unacked, |
| 333 least_unacked, true); | 333 least_unacked, true); |
| 334 } | 334 } |
| 335 | 335 |
| 336 std::unique_ptr<QuicEncryptedPacket> ConstructClientAckPacket( |
| 337 QuicPacketNumber packet_number, |
| 338 QuicPacketNumber largest_received, |
| 339 QuicPacketNumber ack_least_unacked, |
| 340 QuicPacketNumber stop_least_unacked) { |
| 341 return client_maker_.MakeAckPacket(packet_number, largest_received, |
| 342 ack_least_unacked, stop_least_unacked, |
| 343 true); |
| 344 } |
| 345 |
| 336 std::unique_ptr<QuicEncryptedPacket> | 346 std::unique_ptr<QuicEncryptedPacket> |
| 337 ConstructClientAckAndConnectionClosePacket( | 347 ConstructClientAckAndConnectionClosePacket( |
| 338 QuicPacketNumber packet_number, | 348 QuicPacketNumber packet_number, |
| 339 QuicPacketNumber largest_received, | 349 QuicPacketNumber largest_received, |
| 340 QuicPacketNumber ack_least_unacked, | 350 QuicPacketNumber ack_least_unacked, |
| 341 QuicPacketNumber stop_least_unacked) { | 351 QuicPacketNumber stop_least_unacked) { |
| 342 return client_maker_.MakeAckPacket(packet_number, largest_received, | 352 return client_maker_.MakeAckPacket(packet_number, largest_received, |
| 343 ack_least_unacked, stop_least_unacked, | 353 ack_least_unacked, stop_least_unacked, |
| 344 true); | 354 true); |
| 345 } | 355 } |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 QuicStreamId stream_id, | 456 QuicStreamId stream_id, |
| 447 bool should_include_version, | 457 bool should_include_version, |
| 448 bool fin, | 458 bool fin, |
| 449 SpdyHeaderBlock headers, | 459 SpdyHeaderBlock headers, |
| 450 QuicTestPacketMaker* maker) { | 460 QuicTestPacketMaker* maker) { |
| 451 return ConstructClientRequestHeadersPacket( | 461 return ConstructClientRequestHeadersPacket( |
| 452 packet_number, stream_id, should_include_version, fin, | 462 packet_number, stream_id, should_include_version, fin, |
| 453 std::move(headers), nullptr, maker); | 463 std::move(headers), nullptr, maker); |
| 454 } | 464 } |
| 455 | 465 |
| 466 std::unique_ptr<QuicEncryptedPacket> ConstructServerPushPromisePacket( |
| 467 QuicPacketNumber packet_number, |
| 468 QuicStreamId stream_id, |
| 469 QuicStreamId promised_stream_id, |
| 470 bool should_include_version, |
| 471 SpdyHeaderBlock headers, |
| 472 QuicStreamOffset* offset, |
| 473 QuicTestPacketMaker* maker) { |
| 474 return maker->MakePushPromisePacket( |
| 475 packet_number, stream_id, promised_stream_id, should_include_version, |
| 476 false, std::move(headers), nullptr, offset); |
| 477 } |
| 478 |
| 456 std::unique_ptr<QuicEncryptedPacket> ConstructServerResponseHeadersPacket( | 479 std::unique_ptr<QuicEncryptedPacket> ConstructServerResponseHeadersPacket( |
| 457 QuicPacketNumber packet_number, | 480 QuicPacketNumber packet_number, |
| 458 QuicStreamId stream_id, | 481 QuicStreamId stream_id, |
| 459 bool should_include_version, | 482 bool should_include_version, |
| 460 bool fin, | 483 bool fin, |
| 461 SpdyHeaderBlock headers) { | 484 SpdyHeaderBlock headers) { |
| 462 return ConstructServerResponseHeadersPacket( | 485 return ConstructServerResponseHeadersPacket( |
| 463 packet_number, stream_id, should_include_version, fin, | 486 packet_number, stream_id, should_include_version, fin, |
| 464 std::move(headers), nullptr, &server_maker_); | 487 std::move(headers), nullptr, &server_maker_); |
| 465 } | 488 } |
| (...skipping 1773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2239 request_.upload_data_stream = &upload_data; | 2262 request_.upload_data_stream = &upload_data; |
| 2240 | 2263 |
| 2241 std::unique_ptr<HttpNetworkTransaction> trans( | 2264 std::unique_ptr<HttpNetworkTransaction> trans( |
| 2242 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 2265 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
| 2243 TestCompletionCallback callback; | 2266 TestCompletionCallback callback; |
| 2244 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 2267 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
| 2245 EXPECT_EQ(ERR_IO_PENDING, rv); | 2268 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 2246 EXPECT_NE(OK, callback.WaitForResult()); | 2269 EXPECT_NE(OK, callback.WaitForResult()); |
| 2247 } | 2270 } |
| 2248 | 2271 |
| 2272 // Adds coverage to catch regression such as https://crbug.com/622043 |
| 2273 TEST_P(QuicNetworkTransactionTest, QuicServerPush) { |
| 2274 params_.origins_to_force_quic_on.insert( |
| 2275 HostPortPair::FromString("mail.example.org:443")); |
| 2276 |
| 2277 MockQuicData mock_quic_data; |
| 2278 mock_quic_data.AddWrite(ConstructClientRequestHeadersPacket( |
| 2279 1, kClientDataStreamId1, true, true, |
| 2280 GetRequestHeaders("GET", "https", "/"))); |
| 2281 QuicStreamOffset server_header_offset = 0; |
| 2282 mock_quic_data.AddRead(ConstructServerPushPromisePacket( |
| 2283 1, kClientDataStreamId1, kServerDataStreamId1, false, |
| 2284 GetRequestHeaders("GET", "https", "/pushed.jpg"), &server_header_offset, |
| 2285 &server_maker_)); |
| 2286 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2287 2, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"), |
| 2288 &server_header_offset)); |
| 2289 mock_quic_data.AddWrite(ConstructClientAckPacket(2, 2, 1, 1)); |
| 2290 mock_quic_data.AddRead(ConstructServerResponseHeadersPacket( |
| 2291 3, kServerDataStreamId1, false, false, GetResponseHeaders("200 OK"), |
| 2292 &server_header_offset)); |
| 2293 mock_quic_data.AddRead(ConstructServerDataPacket(4, kClientDataStreamId1, |
| 2294 false, true, 0, "hello!")); |
| 2295 mock_quic_data.AddWrite(ConstructClientAckPacket(3, 4, 3, 1)); |
| 2296 mock_quic_data.AddRead(ConstructServerDataPacket( |
| 2297 5, kServerDataStreamId1, false, true, 0, "and hello!")); |
| 2298 mock_quic_data.AddWrite( |
| 2299 ConstructClientAckAndRstPacket(4, 4, QUIC_RST_ACKNOWLEDGEMENT, 5, 5, 1)); |
| 2300 mock_quic_data.AddRead(ASYNC, ERR_IO_PENDING); // No more data to read |
| 2301 mock_quic_data.AddRead(ASYNC, 0); // EOF |
| 2302 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
| 2303 |
| 2304 // The non-alternate protocol job needs to hang in order to guarantee that |
| 2305 // the alternate-protocol job will "win". |
| 2306 AddHangingNonAlternateProtocolSocketData(); |
| 2307 |
| 2308 CreateSession(); |
| 2309 |
| 2310 // PUSH_PROMISE handling in the http layer gets exercised here. |
| 2311 SendRequestAndExpectQuicResponse("hello!"); |
| 2312 |
| 2313 request_.url = GURL("https://mail.example.org/pushed.jpg"); |
| 2314 SendRequestAndExpectQuicResponse("and hello!"); |
| 2315 |
| 2316 // Check that the NetLog was filled reasonably. |
| 2317 TestNetLogEntry::List entries; |
| 2318 net_log_.GetEntries(&entries); |
| 2319 EXPECT_LT(0u, entries.size()); |
| 2320 |
| 2321 // Check that we logged a QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM |
| 2322 int pos = ExpectLogContainsSomewhere( |
| 2323 entries, 0, NetLog::TYPE_QUIC_HTTP_STREAM_ADOPTED_PUSH_STREAM, |
| 2324 NetLog::PHASE_NONE); |
| 2325 EXPECT_LT(0, pos); |
| 2326 } |
| 2327 |
| 2249 class QuicNetworkTransactionWithDestinationTest | 2328 class QuicNetworkTransactionWithDestinationTest |
| 2250 : public PlatformTest, | 2329 : public PlatformTest, |
| 2251 public ::testing::WithParamInterface<PoolingTestParams> { | 2330 public ::testing::WithParamInterface<PoolingTestParams> { |
| 2252 protected: | 2331 protected: |
| 2253 QuicNetworkTransactionWithDestinationTest() | 2332 QuicNetworkTransactionWithDestinationTest() |
| 2254 : clock_(new MockClock), | 2333 : clock_(new MockClock), |
| 2255 version_(GetParam().version), | 2334 version_(GetParam().version), |
| 2256 destination_type_(GetParam().destination_type), | 2335 destination_type_(GetParam().destination_type), |
| 2257 cert_transparency_verifier_(new MultiLogCTVerifier()), | 2336 cert_transparency_verifier_(new MultiLogCTVerifier()), |
| 2258 ssl_config_service_(new SSLConfigServiceDefaults), | 2337 ssl_config_service_(new SSLConfigServiceDefaults), |
| (...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2661 AddHangingSocketData(); | 2740 AddHangingSocketData(); |
| 2662 | 2741 |
| 2663 SendRequestAndExpectQuicResponse(origin1_); | 2742 SendRequestAndExpectQuicResponse(origin1_); |
| 2664 SendRequestAndExpectQuicResponse(origin2_); | 2743 SendRequestAndExpectQuicResponse(origin2_); |
| 2665 | 2744 |
| 2666 EXPECT_TRUE(AllDataConsumed()); | 2745 EXPECT_TRUE(AllDataConsumed()); |
| 2667 } | 2746 } |
| 2668 | 2747 |
| 2669 } // namespace test | 2748 } // namespace test |
| 2670 } // namespace net | 2749 } // namespace net |
| OLD | NEW |