Index: net/quic/test_tools/quic_test_packet_maker.cc |
diff --git a/net/quic/test_tools/quic_test_packet_maker.cc b/net/quic/test_tools/quic_test_packet_maker.cc |
index 9ddd05d66e43a3f0095e1342567d67518bcf9686..21ceb0fe9309a88a6e510b243f0233abdc195848 100644 |
--- a/net/quic/test_tools/quic_test_packet_maker.cc |
+++ b/net/quic/test_tools/quic_test_packet_maker.cc |
@@ -5,7 +5,9 @@ |
#include "net/quic/test_tools/quic_test_packet_maker.h" |
#include <list> |
+#include <memory> |
+#include "base/memory/ptr_util.h" |
#include "net/quic/quic_framer.h" |
#include "net/quic/quic_http_utils.h" |
#include "net/quic/quic_utils.h" |
@@ -291,6 +293,33 @@ std::unique_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeDataPacket( |
return MakePacket(header_, QuicFrame(&frame)); |
} |
+std::unique_ptr<QuicReceivedPacket> |
+QuicTestPacketMaker::MakeMultipleDataFramesPacket( |
+ QuicPacketNumber packet_number, |
+ QuicStreamId stream_id, |
+ bool should_include_version, |
+ bool fin, |
+ QuicStreamOffset offset, |
+ const std::vector<std::string>& data_writes) { |
+ InitializeHeader(packet_number, should_include_version); |
+ QuicFrames data_frames; |
+ // QuicFrame takes a raw pointer. Use a std::vector here so we keep |
+ // StreamFrames alive until MakeMultipleFramesPacket is done. |
+ std::vector<std::unique_ptr<QuicStreamFrame>> stream_frames; |
+ for (size_t i = 0; i < data_writes.size(); ++i) { |
+ bool is_fin = fin && (i == data_writes.size() - 1); |
+ stream_frames.push_back(base::WrapUnique(new QuicStreamFrame( |
+ stream_id, is_fin, offset, base::StringPiece(data_writes[i])))); |
+ offset += data_writes[i].length(); |
+ } |
+ for (const auto& stream_frame : stream_frames) { |
+ QuicFrame quic_frame(stream_frame.get()); |
+ DVLOG(1) << "Adding frame: " << quic_frame; |
+ data_frames.push_back(quic_frame); |
+ } |
+ return MakeMultipleFramesPacket(header_, data_frames); |
+} |
+ |
std::unique_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckAndDataPacket( |
QuicPacketNumber packet_number, |
bool include_version, |
@@ -321,6 +350,60 @@ std::unique_ptr<QuicReceivedPacket> QuicTestPacketMaker::MakeAckAndDataPacket( |
} |
std::unique_ptr<QuicReceivedPacket> |
+QuicTestPacketMaker::MakeRequestHeadersAndMultipleDataFramesPacket( |
+ QuicPacketNumber packet_number, |
+ QuicStreamId stream_id, |
+ bool should_include_version, |
+ bool fin, |
+ SpdyPriority priority, |
+ const SpdyHeaderBlock& headers, |
+ size_t* spdy_headers_frame_length, |
+ const std::vector<std::string>& data_writes) { |
+ InitializeHeader(packet_number, should_include_version); |
+ SpdySerializedFrame spdy_frame; |
+ if (spdy_request_framer_.protocol_version() == SPDY3) { |
+ SpdySynStreamIR syn_stream(stream_id); |
+ syn_stream.set_header_block(headers); |
+ syn_stream.set_fin(fin); |
+ syn_stream.set_priority(priority); |
+ spdy_frame = spdy_request_framer_.SerializeSynStream(syn_stream); |
+ } else { |
+ SpdyHeadersIR headers_frame(stream_id); |
+ headers_frame.set_header_block(headers); |
+ headers_frame.set_fin(fin); |
+ headers_frame.set_priority(priority); |
+ headers_frame.set_has_priority(true); |
+ spdy_frame = spdy_request_framer_.SerializeFrame(headers_frame); |
+ } |
+ if (spdy_headers_frame_length) { |
+ *spdy_headers_frame_length = spdy_frame.size(); |
+ } |
+ QuicStreamFrame frame( |
+ kHeadersStreamId, false, 0, |
+ base::StringPiece(spdy_frame.data(), spdy_frame.size())); |
+ |
+ QuicFrames frames; |
+ frames.push_back(QuicFrame(&frame)); |
+ |
+ QuicStreamOffset offset = 0; |
+ // QuicFrame takes a raw pointer. Use a std::vector here so we keep |
+ // StreamFrames alive until MakeMultipleFramesPacket is done. |
+ std::vector<std::unique_ptr<QuicStreamFrame>> stream_frames; |
+ for (size_t i = 0; i < data_writes.size(); ++i) { |
+ bool is_fin = fin && (i == data_writes.size() - 1); |
+ stream_frames.push_back(base::WrapUnique(new QuicStreamFrame( |
+ stream_id, is_fin, offset, base::StringPiece(data_writes[i])))); |
+ offset += data_writes[i].length(); |
+ } |
+ for (const auto& stream_frame : stream_frames) { |
+ QuicFrame quic_frame(stream_frame.get()); |
+ DVLOG(1) << "Adding frame: " << quic_frame; |
+ frames.push_back(quic_frame); |
+ } |
+ return MakeMultipleFramesPacket(header_, frames); |
+} |
+ |
+std::unique_ptr<QuicReceivedPacket> |
QuicTestPacketMaker::MakeRequestHeadersPacket( |
QuicPacketNumber packet_number, |
QuicStreamId stream_id, |