Chromium Code Reviews| 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 "net/tools/quic/test_tools/quic_test_client.h" | 5 #include "net/tools/quic/test_tools/quic_test_client.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| 11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "net/base/completion_callback.h" | 12 #include "net/base/completion_callback.h" |
| 13 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 14 #include "net/cert/cert_verify_result.h" | 14 #include "net/cert/cert_verify_result.h" |
| 15 #include "net/cert/x509_certificate.h" | 15 #include "net/cert/x509_certificate.h" |
| 16 #include "net/quic/core/crypto/proof_verifier.h" | 16 #include "net/quic/core/crypto/proof_verifier.h" |
| 17 #include "net/quic/core/quic_flags.h" | 17 #include "net/quic/core/quic_flags.h" |
| 18 #include "net/quic/core/quic_server_id.h" | 18 #include "net/quic/core/quic_server_id.h" |
| 19 #include "net/quic/core/quic_utils.h" | 19 #include "net/quic/core/quic_utils.h" |
| 20 #include "net/quic/test_tools/crypto_test_utils.h" | 20 #include "net/quic/test_tools/crypto_test_utils.h" |
| 21 #include "net/quic/test_tools/quic_connection_peer.h" | 21 #include "net/quic/test_tools/quic_connection_peer.h" |
| 22 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 22 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 23 #include "net/quic/test_tools/quic_test_utils.h" | 23 #include "net/quic/test_tools/quic_test_utils.h" |
| 24 #include "net/quic/test_tools/reliable_quic_stream_peer.h" | 24 #include "net/quic/test_tools/reliable_quic_stream_peer.h" |
| 25 #include "net/tools/balsa/balsa_headers.h" | 25 #include "net/tools/balsa/balsa_headers.h" |
|
Zhongyi Shi
2016/09/26 21:12:55
nit: remove the include?
Ryan Hamilton
2016/09/26 21:52:56
Alas, the QuicTestClient is still using BalsaHeade
| |
| 26 #include "net/tools/quic/quic_epoll_connection_helper.h" | 26 #include "net/tools/quic/quic_epoll_connection_helper.h" |
| 27 #include "net/tools/quic/quic_packet_writer_wrapper.h" | 27 #include "net/tools/quic/quic_packet_writer_wrapper.h" |
| 28 #include "net/tools/quic/quic_spdy_client_stream.h" | 28 #include "net/tools/quic/quic_spdy_client_stream.h" |
| 29 #include "net/tools/quic/spdy_balsa_utils.h" | 29 #include "net/tools/quic/spdy_balsa_utils.h" |
| 30 #include "net/tools/quic/test_tools/http_message.h" | 30 #include "net/tools/quic/test_tools/http_message.h" |
| 31 #include "net/tools/quic/test_tools/quic_client_peer.h" | 31 #include "net/tools/quic/test_tools/quic_client_peer.h" |
| 32 #include "url/gurl.h" | 32 #include "url/gurl.h" |
| 33 | 33 |
| 34 using base::StringPiece; | 34 using base::StringPiece; |
| 35 using net::QuicServerId; | 35 using net::QuicServerId; |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 314 bool fin, | 314 bool fin, |
| 315 QuicAckListenerInterface* delegate) { | 315 QuicAckListenerInterface* delegate) { |
| 316 if (headers) { | 316 if (headers) { |
| 317 QuicClientPushPromiseIndex::TryHandle* handle; | 317 QuicClientPushPromiseIndex::TryHandle* handle; |
| 318 QuicAsyncStatus rv = client()->push_promise_index()->Try( | 318 QuicAsyncStatus rv = client()->push_promise_index()->Try( |
| 319 SpdyBalsaUtils::RequestHeadersToSpdyHeaders(*headers), this, &handle); | 319 SpdyBalsaUtils::RequestHeadersToSpdyHeaders(*headers), this, &handle); |
| 320 if (rv == QUIC_SUCCESS) | 320 if (rv == QUIC_SUCCESS) |
| 321 return 1; | 321 return 1; |
| 322 if (rv == QUIC_PENDING) { | 322 if (rv == QUIC_PENDING) { |
| 323 // May need to retry request if asynchronous rendezvous fails. | 323 // May need to retry request if asynchronous rendezvous fails. |
| 324 auto* new_headers = new BalsaHeaders; | 324 std::unique_ptr<SpdyHeaderBlock> new_headers(new SpdyHeaderBlock( |
| 325 new_headers->CopyFrom(*headers); | 325 SpdyBalsaUtils::RequestHeadersToSpdyHeaders(*headers))); |
| 326 push_promise_data_to_resend_.reset( | 326 push_promise_data_to_resend_.reset(new TestClientDataToResend( |
| 327 new TestClientDataToResend(new_headers, body, fin, this, delegate)); | 327 std::move(new_headers), body, fin, this, delegate)); |
| 328 return 1; | 328 return 1; |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 | 331 |
| 332 // Maybe it's better just to overload this. it's just that we need | 332 // Maybe it's better just to overload this. it's just that we need |
| 333 // for the GetOrCreateStream function to call something else...which | 333 // for the GetOrCreateStream function to call something else...which |
| 334 // is icky and complicated, but maybe not worse than this. | 334 // is icky and complicated, but maybe not worse than this. |
| 335 QuicSpdyClientStream* stream = GetOrCreateStream(); | 335 QuicSpdyClientStream* stream = GetOrCreateStream(); |
| 336 if (stream == nullptr) { | 336 if (stream == nullptr) { |
| 337 return 0; | 337 return 0; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 352 // HTTP/2 requests should include the :authority pseudo hader. | 352 // HTTP/2 requests should include the :authority pseudo hader. |
| 353 spdy_headers[":authority"] = client_->server_id().host(); | 353 spdy_headers[":authority"] = client_->server_id().host(); |
| 354 } | 354 } |
| 355 ret = stream->SendRequest(std::move(spdy_headers), body, fin); | 355 ret = stream->SendRequest(std::move(spdy_headers), body, fin); |
| 356 ++num_requests_; | 356 ++num_requests_; |
| 357 } else { | 357 } else { |
| 358 stream->WriteOrBufferBody(body.as_string(), fin, delegate); | 358 stream->WriteOrBufferBody(body.as_string(), fin, delegate); |
| 359 ret = body.length(); | 359 ret = body.length(); |
| 360 } | 360 } |
| 361 if (FLAGS_enable_quic_stateless_reject_support) { | 361 if (FLAGS_enable_quic_stateless_reject_support) { |
| 362 BalsaHeaders* new_headers = nullptr; | 362 std::unique_ptr<SpdyHeaderBlock> new_headers; |
| 363 if (headers) { | 363 if (headers) { |
| 364 new_headers = new BalsaHeaders; | 364 new_headers.reset(new SpdyHeaderBlock( |
| 365 new_headers->CopyFrom(*headers); | 365 SpdyBalsaUtils::RequestHeadersToSpdyHeaders(*headers))); |
| 366 } | 366 } |
| 367 std::unique_ptr<QuicClient::QuicDataToResend> data_to_resend( | 367 std::unique_ptr<QuicClientBase::QuicDataToResend> data_to_resend( |
| 368 new TestClientDataToResend(new_headers, body, fin, this, delegate)); | 368 new TestClientDataToResend(std::move(new_headers), body, fin, this, |
| 369 delegate)); | |
| 369 client()->MaybeAddQuicDataToResend(std::move(data_to_resend)); | 370 client()->MaybeAddQuicDataToResend(std::move(data_to_resend)); |
| 370 } | 371 } |
| 371 return ret; | 372 return ret; |
| 372 } | 373 } |
| 373 | 374 |
| 374 ssize_t QuicTestClient::SendMessage(const HTTPMessage& message) { | 375 ssize_t QuicTestClient::SendMessage(const HTTPMessage& message) { |
| 375 stream_ = nullptr; // Always force creation of a stream for SendMessage. | 376 stream_ = nullptr; // Always force creation of a stream for SendMessage. |
| 376 // Any response we might have received for a previous request would no longer | 377 // Any response we might have received for a previous request would no longer |
| 377 // be valid. TODO(jeffpiazza): There's probably additional client state that | 378 // be valid. TODO(jeffpiazza): There's probably additional client state that |
| 378 // should be reset here, too, if we were being more careful. | 379 // should be reset here, too, if we were being more careful. |
| (...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 729 return 0; | 730 return 0; |
| 730 } | 731 } |
| 731 | 732 |
| 732 void QuicTestClient::WaitForWriteToFlush() { | 733 void QuicTestClient::WaitForWriteToFlush() { |
| 733 while (connected() && client()->session()->HasDataToWrite()) { | 734 while (connected() && client()->session()->HasDataToWrite()) { |
| 734 client_->WaitForEvents(); | 735 client_->WaitForEvents(); |
| 735 } | 736 } |
| 736 } | 737 } |
| 737 | 738 |
| 738 void QuicTestClient::TestClientDataToResend::Resend() { | 739 void QuicTestClient::TestClientDataToResend::Resend() { |
| 739 test_client_->GetOrCreateStreamAndSendRequest(headers_, body_, fin_, | 740 BalsaHeaders balsa_headers; |
| 741 SpdyBalsaUtils::SpdyHeadersToRequestHeaders(*headers_, &balsa_headers); | |
| 742 test_client_->GetOrCreateStreamAndSendRequest(&balsa_headers, body_, fin_, | |
| 740 delegate_); | 743 delegate_); |
| 741 if (headers_ != nullptr) { | 744 headers_.reset(); |
| 742 delete headers_; | |
| 743 headers_ = nullptr; | |
| 744 } | |
| 745 } | 745 } |
| 746 | 746 |
| 747 // static | 747 // static |
| 748 void QuicTestClient::FillInRequest(const string& uri, HTTPMessage* message) { | 748 void QuicTestClient::FillInRequest(const string& uri, HTTPMessage* message) { |
| 749 CHECK(message); | 749 CHECK(message); |
| 750 message->headers()->SetRequestVersion( | 750 message->headers()->SetRequestVersion( |
| 751 HTTPMessage::VersionToString(HttpConstants::HTTP_1_1)); | 751 HTTPMessage::VersionToString(HttpConstants::HTTP_1_1)); |
| 752 message->headers()->SetRequestMethod( | 752 message->headers()->SetRequestMethod( |
| 753 HTTPMessage::MethodToString(HttpConstants::GET)); | 753 HTTPMessage::MethodToString(HttpConstants::GET)); |
| 754 message->headers()->SetRequestUri(uri); | 754 message->headers()->SetRequestUri(uri); |
| 755 } | 755 } |
| 756 | 756 |
| 757 } // namespace test | 757 } // namespace test |
| 758 } // namespace net | 758 } // namespace net |
| OLD | NEW |