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

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

Issue 1411383005: Initial implementation of RequestPriority-based HTTP/2 dependencies. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final round of comments. Created 5 years, 1 month 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_test_util_common.h ('k') | no next file » | 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/spdy/spdy_test_util_common.h" 5 #include "net/spdy/spdy_test_util_common.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstddef> 9 #include <cstddef>
10 10
(...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 } 727 }
728 728
729 void SpdySessionPoolPeer::SetSessionMaxRecvWindowSize(size_t window) { 729 void SpdySessionPoolPeer::SetSessionMaxRecvWindowSize(size_t window) {
730 pool_->session_max_recv_window_size_ = window; 730 pool_->session_max_recv_window_size_ = window;
731 } 731 }
732 732
733 void SpdySessionPoolPeer::SetStreamInitialRecvWindowSize(size_t window) { 733 void SpdySessionPoolPeer::SetStreamInitialRecvWindowSize(size_t window) {
734 pool_->stream_max_recv_window_size_ = window; 734 pool_->stream_max_recv_window_size_ = window;
735 } 735 }
736 736
737 SpdyTestUtil::SpdyTestUtil(NextProto protocol) 737 SpdyTestUtil::SpdyTestUtil(NextProto protocol, bool dependency_priorities)
738 : protocol_(protocol), 738 : protocol_(protocol),
739 spdy_version_(NextProtoToSpdyMajorVersion(protocol)), 739 spdy_version_(NextProtoToSpdyMajorVersion(protocol)),
740 default_url_(GURL(kDefaultURL)) { 740 default_url_(GURL(kDefaultURL)),
741 dependency_priorities_(dependency_priorities) {
741 DCHECK(next_proto_is_spdy(protocol)) << "Invalid protocol: " << protocol; 742 DCHECK(next_proto_is_spdy(protocol)) << "Invalid protocol: " << protocol;
742 } 743 }
743 744
745 SpdyTestUtil::~SpdyTestUtil() {}
746
744 void SpdyTestUtil::AddUrlToHeaderBlock(base::StringPiece url, 747 void SpdyTestUtil::AddUrlToHeaderBlock(base::StringPiece url,
745 SpdyHeaderBlock* headers) const { 748 SpdyHeaderBlock* headers) const {
746 std::string scheme, host, path; 749 std::string scheme, host, path;
747 ParseUrl(url, &scheme, &host, &path); 750 ParseUrl(url, &scheme, &host, &path);
748 (*headers)[GetHostKey()] = host; 751 (*headers)[GetHostKey()] = host;
749 (*headers)[GetSchemeKey()] = scheme; 752 (*headers)[GetSchemeKey()] = scheme;
750 (*headers)[GetPathKey()] = path; 753 (*headers)[GetPathKey()] = path;
751 } 754 }
752 755
753 scoped_ptr<SpdyHeaderBlock> SpdyTestUtil::ConstructGetHeaderBlock( 756 scoped_ptr<SpdyHeaderBlock> SpdyTestUtil::ConstructGetHeaderBlock(
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 957
955 // TODO(jgraettinger): Eliminate uses of this method in tests (prefer 958 // TODO(jgraettinger): Eliminate uses of this method in tests (prefer
956 // SpdyRstStreamIR). 959 // SpdyRstStreamIR).
957 SpdyFrame* SpdyTestUtil::ConstructSpdyRstStream( 960 SpdyFrame* SpdyTestUtil::ConstructSpdyRstStream(
958 SpdyStreamId stream_id, 961 SpdyStreamId stream_id,
959 SpdyRstStreamStatus status) const { 962 SpdyRstStreamStatus status) const {
960 SpdyRstStreamIR rst_ir(stream_id, status); 963 SpdyRstStreamIR rst_ir(stream_id, status);
961 return CreateFramer(false)->SerializeRstStream(rst_ir); 964 return CreateFramer(false)->SerializeRstStream(rst_ir);
962 } 965 }
963 966
964 SpdyFrame* SpdyTestUtil::ConstructSpdyGet( 967 SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const url,
965 const char* const url, 968 bool compressed,
966 bool compressed, 969 SpdyStreamId stream_id,
967 SpdyStreamId stream_id, 970 RequestPriority request_priority) {
968 RequestPriority request_priority) const {
969 scoped_ptr<SpdyHeaderBlock> block(ConstructGetHeaderBlock(url)); 971 scoped_ptr<SpdyHeaderBlock> block(ConstructGetHeaderBlock(url));
970 return ConstructSpdySyn( 972 return ConstructSpdySyn(
971 stream_id, *block, request_priority, compressed, true); 973 stream_id, *block, request_priority, compressed, true);
972 } 974 }
973 975
974 SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const extra_headers[], 976 SpdyFrame* SpdyTestUtil::ConstructSpdyGet(const char* const extra_headers[],
975 int extra_header_count, 977 int extra_header_count,
976 bool compressed, 978 bool compressed,
977 int stream_id, 979 int stream_id,
978 RequestPriority request_priority, 980 RequestPriority request_priority,
979 bool direct) const { 981 bool direct) {
980 SpdyHeaderBlock block; 982 SpdyHeaderBlock block;
981 MaybeAddVersionHeader(&block); 983 MaybeAddVersionHeader(&block);
982 block[GetMethodKey()] = "GET"; 984 block[GetMethodKey()] = "GET";
983 AddUrlToHeaderBlock(default_url_.spec(), &block); 985 AddUrlToHeaderBlock(default_url_.spec(), &block);
984 AppendToHeaderBlock(extra_headers, extra_header_count, &block); 986 AppendToHeaderBlock(extra_headers, extra_header_count, &block);
985 return ConstructSpdySyn(stream_id, block, request_priority, compressed, true); 987 return ConstructSpdySyn(stream_id, block, request_priority, compressed, true);
986 } 988 }
987 989
988 SpdyFrame* SpdyTestUtil::ConstructSpdyConnect( 990 SpdyFrame* SpdyTestUtil::ConstructSpdyConnect(
989 const char* const extra_headers[], 991 const char* const extra_headers[],
990 int extra_header_count, 992 int extra_header_count,
991 int stream_id, 993 int stream_id,
992 RequestPriority priority, 994 RequestPriority priority,
993 const HostPortPair& host_port_pair) const { 995 const HostPortPair& host_port_pair) {
994 SpdyHeaderBlock block; 996 SpdyHeaderBlock block;
995 MaybeAddVersionHeader(&block); 997 MaybeAddVersionHeader(&block);
996 block[GetMethodKey()] = "CONNECT"; 998 block[GetMethodKey()] = "CONNECT";
997 if (spdy_version() < HTTP2) { 999 if (spdy_version() < HTTP2) {
998 block[GetHostKey()] = (host_port_pair.port() == 443) 1000 block[GetHostKey()] = (host_port_pair.port() == 443)
999 ? host_port_pair.host() 1001 ? host_port_pair.host()
1000 : host_port_pair.ToString(); 1002 : host_port_pair.ToString();
1001 block[GetPathKey()] = host_port_pair.ToString(); 1003 block[GetPathKey()] = host_port_pair.ToString();
1002 } else { 1004 } else {
1003 block[GetHostKey()] = host_port_pair.ToString(); 1005 block[GetHostKey()] = host_port_pair.ToString();
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1127 SpdyHeadersIR spdy_headers(stream_id); 1129 SpdyHeadersIR spdy_headers(stream_id);
1128 AppendToHeaderBlock(headers, header_count, 1130 AppendToHeaderBlock(headers, header_count,
1129 spdy_headers.mutable_header_block()); 1131 spdy_headers.mutable_header_block());
1130 return CreateFramer(false)->SerializeFrame(spdy_headers); 1132 return CreateFramer(false)->SerializeFrame(spdy_headers);
1131 } 1133 }
1132 1134
1133 SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id, 1135 SpdyFrame* SpdyTestUtil::ConstructSpdySyn(int stream_id,
1134 const SpdyHeaderBlock& block, 1136 const SpdyHeaderBlock& block,
1135 RequestPriority priority, 1137 RequestPriority priority,
1136 bool compressed, 1138 bool compressed,
1137 bool fin) const { 1139 bool fin) {
1140 // Get the stream id of the next highest priority request
1141 // (most recent request of the same priority, or last request of
1142 // an earlier priority).
1143 int parent_stream_id = 0;
1144 for (int q = priority; q >= IDLE; --q) {
1145 if (!priority_to_stream_id_list_[q].empty()) {
1146 parent_stream_id = priority_to_stream_id_list_[q].back();
1147 break;
1148 }
1149 }
1150
1151 priority_to_stream_id_list_[priority].push_back(stream_id);
1152
1138 if (protocol_ < kProtoHTTP2) { 1153 if (protocol_ < kProtoHTTP2) {
1139 SpdySynStreamIR syn_stream(stream_id); 1154 SpdySynStreamIR syn_stream(stream_id);
1140 syn_stream.set_header_block(block); 1155 syn_stream.set_header_block(block);
1141 syn_stream.set_priority( 1156 syn_stream.set_priority(
1142 ConvertRequestPriorityToSpdyPriority(priority, spdy_version())); 1157 ConvertRequestPriorityToSpdyPriority(priority, spdy_version()));
1143 syn_stream.set_fin(fin); 1158 syn_stream.set_fin(fin);
1144 return CreateFramer(compressed)->SerializeFrame(syn_stream); 1159 return CreateFramer(compressed)->SerializeFrame(syn_stream);
1145 } else { 1160 } else {
1146 SpdyHeadersIR headers(stream_id); 1161 SpdyHeadersIR headers(stream_id);
1147 headers.set_header_block(block); 1162 headers.set_header_block(block);
1148 headers.set_has_priority(true); 1163 headers.set_has_priority(true);
1149 headers.set_priority( 1164 headers.set_priority(
1150 ConvertRequestPriorityToSpdyPriority(priority, spdy_version())); 1165 ConvertRequestPriorityToSpdyPriority(priority, spdy_version()));
1166 if (dependency_priorities_) {
1167 headers.set_parent_stream_id(parent_stream_id);
1168 headers.set_exclusive(true);
1169 }
1151 headers.set_fin(fin); 1170 headers.set_fin(fin);
1152 return CreateFramer(compressed)->SerializeFrame(headers); 1171 return CreateFramer(compressed)->SerializeFrame(headers);
1153 } 1172 }
1154 } 1173 }
1155 1174
1156 SpdyFrame* SpdyTestUtil::ConstructSpdyReply(int stream_id, 1175 SpdyFrame* SpdyTestUtil::ConstructSpdyReply(int stream_id,
1157 const SpdyHeaderBlock& headers) { 1176 const SpdyHeaderBlock& headers) {
1158 if (protocol_ < kProtoHTTP2) { 1177 if (protocol_ < kProtoHTTP2) {
1159 SpdySynReplyIR syn_reply(stream_id); 1178 SpdySynReplyIR syn_reply(stream_id);
1160 syn_reply.set_header_block(headers); 1179 syn_reply.set_header_block(headers);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 return framer.SerializeData(data_ir); 1284 return framer.SerializeData(data_ir);
1266 } 1285 }
1267 1286
1268 SpdyFrame* SpdyTestUtil::ConstructWrappedSpdyFrame( 1287 SpdyFrame* SpdyTestUtil::ConstructWrappedSpdyFrame(
1269 const scoped_ptr<SpdyFrame>& frame, 1288 const scoped_ptr<SpdyFrame>& frame,
1270 int stream_id) { 1289 int stream_id) {
1271 return ConstructSpdyBodyFrame(stream_id, frame->data(), 1290 return ConstructSpdyBodyFrame(stream_id, frame->data(),
1272 frame->size(), false); 1291 frame->size(), false);
1273 } 1292 }
1274 1293
1294 void SpdyTestUtil::UpdateWithStreamDestruction(int stream_id) {
1295 for (auto priority_it = priority_to_stream_id_list_.begin();
1296 priority_it != priority_to_stream_id_list_.end(); ++priority_it) {
1297 for (auto stream_it = priority_it->second.begin();
1298 stream_it != priority_it->second.end(); ++stream_it) {
1299 if (*stream_it == stream_id) {
1300 priority_it->second.erase(stream_it);
1301 return;
1302 }
1303 }
1304 }
1305 NOTREACHED();
1306 }
1307
1275 const SpdyHeaderInfo SpdyTestUtil::MakeSpdyHeader(SpdyFrameType type) { 1308 const SpdyHeaderInfo SpdyTestUtil::MakeSpdyHeader(SpdyFrameType type) {
1276 const SpdyHeaderInfo kHeader = { 1309 const SpdyHeaderInfo kHeader = {
1277 type, 1310 type,
1278 1, // Stream ID 1311 1, // Stream ID
1279 0, // Associated stream ID 1312 0, // Associated stream ID
1280 ConvertRequestPriorityToSpdyPriority(LOWEST, spdy_version_), 1313 ConvertRequestPriorityToSpdyPriority(LOWEST, spdy_version_),
1281 kSpdyCredentialSlotUnused, 1314 kSpdyCredentialSlotUnused,
1282 CONTROL_FLAG_FIN, // Control Flags 1315 CONTROL_FLAG_FIN, // Control Flags
1283 false, // Compressed 1316 false, // Compressed
1284 RST_STREAM_INVALID, 1317 RST_STREAM_INVALID,
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1356 } 1389 }
1357 } 1390 }
1358 1391
1359 void SpdyTestUtil::SetPriority(RequestPriority priority, 1392 void SpdyTestUtil::SetPriority(RequestPriority priority,
1360 SpdySynStreamIR* ir) const { 1393 SpdySynStreamIR* ir) const {
1361 ir->set_priority(ConvertRequestPriorityToSpdyPriority( 1394 ir->set_priority(ConvertRequestPriorityToSpdyPriority(
1362 priority, spdy_version())); 1395 priority, spdy_version()));
1363 } 1396 }
1364 1397
1365 } // namespace net 1398 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_test_util_common.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698