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

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

Issue 1357953002: Replace the existing SpdyHeaderBlock typedef with a class. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add NET_EXPORT to fix compile error on win_chromium_compile_dbg_ng. Created 5 years, 2 months 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_http_utils_unittest.cc ('k') | net/spdy/spdy_protocol.h » ('j') | 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) 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 <vector> 6 #include <vector>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 2976 matching lines...) Expand 10 before | Expand all | Expand 10 after
2987 spdy_util_.ConstructSpdyBodyFrame(1, true)); 2987 spdy_util_.ConstructSpdyBodyFrame(1, true));
2988 scoped_ptr<SpdyFrame> stream2_rst( 2988 scoped_ptr<SpdyFrame> stream2_rst(
2989 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); 2989 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR));
2990 MockWrite writes[] = { 2990 MockWrite writes[] = {
2991 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3), 2991 CreateMockWrite(*stream1_syn, 0), CreateMockWrite(*stream2_rst, 3),
2992 }; 2992 };
2993 2993
2994 scoped_ptr<SpdyFrame> 2994 scoped_ptr<SpdyFrame>
2995 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1)); 2995 stream1_reply(spdy_util_.ConstructSpdyGetSynReply(NULL, 0, 1));
2996 scoped_ptr<SpdyHeaderBlock> incomplete_headers(new SpdyHeaderBlock()); 2996 scoped_ptr<SpdyHeaderBlock> incomplete_headers(new SpdyHeaderBlock());
2997 (*incomplete_headers)["hello"] = "bye";
2998 (*incomplete_headers)[spdy_util_.GetStatusKey()] = "200 OK"; 2997 (*incomplete_headers)[spdy_util_.GetStatusKey()] = "200 OK";
2999 (*incomplete_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 2998 (*incomplete_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
2999 (*incomplete_headers)["hello"] = "bye";
3000 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( 3000 scoped_ptr<SpdyFrame> stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame(
3001 incomplete_headers.Pass(), 2, 1)); 3001 incomplete_headers.Pass(), 2, 1));
3002 MockRead reads[] = { 3002 MockRead reads[] = {
3003 CreateMockRead(*stream1_reply, 1), 3003 CreateMockRead(*stream1_reply, 1),
3004 CreateMockRead(*stream2_syn, 2), 3004 CreateMockRead(*stream2_syn, 2),
3005 CreateMockRead(*stream1_body, 4), 3005 CreateMockRead(*stream1_body, 4),
3006 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause 3006 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5) // Force a pause
3007 }; 3007 };
3008 3008
3009 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 3009 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
3053 { NULL }, 3053 { NULL },
3054 }, 3054 },
3055 // Headers with a comma separated list. 3055 // Headers with a comma separated list.
3056 { 1, 3056 { 1,
3057 { "cookie", "val1,val2", 3057 { "cookie", "val1,val2",
3058 NULL 3058 NULL
3059 }, 3059 },
3060 } 3060 }
3061 }; 3061 };
3062 3062
3063 test_cases[0].expected_headers["cookie"] = "val1";
3064 test_cases[0].expected_headers["cookie"] += '\0';
3065 test_cases[0].expected_headers["cookie"] += "val2";
3066 test_cases[0].expected_headers["hello"] = "bye";
3067 test_cases[0].expected_headers["status"] = "200"; 3063 test_cases[0].expected_headers["status"] = "200";
3068
3069 test_cases[1].expected_headers["hello"] = "bye";
3070 test_cases[1].expected_headers["status"] = "200"; 3064 test_cases[1].expected_headers["status"] = "200";
3071
3072 test_cases[2].expected_headers["cookie"] = "val1,val2";
3073 test_cases[2].expected_headers["hello"] = "bye";
3074 test_cases[2].expected_headers["status"] = "200"; 3065 test_cases[2].expected_headers["status"] = "200";
3075 3066
3067 // HTTP/2 eliminates use of the :version header.
3076 if (spdy_util_.spdy_version() < HTTP2) { 3068 if (spdy_util_.spdy_version() < HTTP2) {
3077 // HTTP/2 eliminates use of the :version header.
3078 test_cases[0].expected_headers["version"] = "HTTP/1.1"; 3069 test_cases[0].expected_headers["version"] = "HTTP/1.1";
3079 test_cases[1].expected_headers["version"] = "HTTP/1.1"; 3070 test_cases[1].expected_headers["version"] = "HTTP/1.1";
3080 test_cases[2].expected_headers["version"] = "HTTP/1.1"; 3071 test_cases[2].expected_headers["version"] = "HTTP/1.1";
3081 } 3072 }
3082 3073
3074 test_cases[0].expected_headers["hello"] = "bye";
3075 test_cases[1].expected_headers["hello"] = "bye";
3076 test_cases[2].expected_headers["hello"] = "bye";
3077
3078 test_cases[0].expected_headers["cookie"] = StringPiece("val1\0val2", 9);
3079 test_cases[2].expected_headers["cookie"] = "val1,val2";
3080
3083 for (size_t i = 0; i < arraysize(test_cases); ++i) { 3081 for (size_t i = 0; i < arraysize(test_cases); ++i) {
3084 scoped_ptr<SpdyFrame> req( 3082 scoped_ptr<SpdyFrame> req(
3085 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 3083 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
3086 MockWrite writes[] = {CreateMockWrite(*req, 0)}; 3084 MockWrite writes[] = {CreateMockWrite(*req, 0)};
3087 3085
3088 scoped_ptr<SpdyFrame> resp( 3086 scoped_ptr<SpdyFrame> resp(
3089 spdy_util_.ConstructSpdyGetSynReply(test_cases[i].extra_headers, 3087 spdy_util_.ConstructSpdyGetSynReply(test_cases[i].extra_headers,
3090 test_cases[i].num_headers, 3088 test_cases[i].num_headers,
3091 1)); 3089 1));
3092 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true)); 3090 scoped_ptr<SpdyFrame> body(spdy_util_.ConstructSpdyBodyFrame(1, true));
(...skipping 13 matching lines...) Expand all
3106 EXPECT_EQ(OK, out.rv); 3104 EXPECT_EQ(OK, out.rv);
3107 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); 3105 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line);
3108 EXPECT_EQ("hello!", out.response_data); 3106 EXPECT_EQ("hello!", out.response_data);
3109 3107
3110 scoped_refptr<HttpResponseHeaders> headers = out.response_info.headers; 3108 scoped_refptr<HttpResponseHeaders> headers = out.response_info.headers;
3111 EXPECT_TRUE(headers.get() != NULL); 3109 EXPECT_TRUE(headers.get() != NULL);
3112 void* iter = NULL; 3110 void* iter = NULL;
3113 std::string name, value; 3111 std::string name, value;
3114 SpdyHeaderBlock header_block; 3112 SpdyHeaderBlock header_block;
3115 while (headers->EnumerateHeaderLines(&iter, &name, &value)) { 3113 while (headers->EnumerateHeaderLines(&iter, &name, &value)) {
3116 if (header_block[name].empty()) { 3114 SpdyHeaderBlock::StringPieceProxy mutable_header_block_value =
3117 header_block[name] = value; 3115 header_block[name];
3116 if (static_cast<StringPiece>(mutable_header_block_value).empty()) {
3117 mutable_header_block_value = value;
3118 } else { 3118 } else {
3119 header_block[name] += '\0'; 3119 std::string joint_value = mutable_header_block_value.as_string();
3120 header_block[name] += value; 3120 joint_value.append(1, '\0');
3121 joint_value.append(value);
3122 mutable_header_block_value = joint_value;
3121 } 3123 }
3122 } 3124 }
3123 EXPECT_EQ(test_cases[i].expected_headers, header_block); 3125 EXPECT_EQ(test_cases[i].expected_headers, header_block);
3124 } 3126 }
3125 } 3127 }
3126 3128
3127 // Verify that various SynReply headers parse vary fields correctly 3129 // Verify that various SynReply headers parse vary fields correctly
3128 // through the HTTP layer, and the response matches the request. 3130 // through the HTTP layer, and the response matches the request.
3129 TEST_P(SpdyNetworkTransactionTest, SynReplyHeadersVary) { 3131 TEST_P(SpdyNetworkTransactionTest, SynReplyHeadersVary) {
3130 // Modify the following data to change/add test cases: 3132 // Modify the following data to change/add test cases:
3131 struct SynReplyTests { 3133 struct SynReplyTests {
3132 bool vary_matches; 3134 bool vary_matches;
3133 int num_headers[2]; 3135 int num_headers[2];
3134 const char* extra_headers[2][16]; 3136 const char* extra_headers[2][16];
3135 } test_cases[] = { 3137 } test_cases[] = {
3136 // Test the case of a multi-valued cookie. When the value is delimited 3138 // Test the case of a multi-valued cookie. When the value is delimited
3137 // with NUL characters, it needs to be unfolded into multiple headers. 3139 // with NUL characters, it needs to be unfolded into multiple headers.
3138 { 3140 {true,
3139 true, 3141 {1, 4},
3140 { 1, 4 }, 3142 {{"cookie", "val1,val2", NULL},
3141 { { "cookie", "val1,val2", 3143 {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
3142 NULL 3144 "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "cookie",
3143 }, 3145 NULL}}},
3144 { "vary", "cookie", 3146 {// Multiple vary fields.
3145 spdy_util_.GetStatusKey(), "200", 3147 true,
3146 spdy_util_.GetPathKey(), "/index.php", 3148 {2, 5},
3147 spdy_util_.GetVersionKey(), "HTTP/1.1", 3149 {{"friend", "barney", "enemy", "snaggletooth", NULL},
3148 NULL 3150 {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
3149 } 3151 "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "friend",
3150 } 3152 "vary", "enemy", NULL}}},
3151 }, { // Multiple vary fields. 3153 {// Test a '*' vary field.
3152 true, 3154 false,
3153 { 2, 5 }, 3155 {1, 4},
3154 { { "friend", "barney", 3156 {{"cookie", "val1,val2", NULL},
3155 "enemy", "snaggletooth", 3157 {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
3156 NULL 3158 "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary", "*",
3157 }, 3159 NULL}}},
3158 { "vary", "friend", 3160 {// Multiple comma-separated vary fields.
3159 "vary", "enemy", 3161 true,
3160 spdy_util_.GetStatusKey(), "200", 3162 {2, 4},
3161 spdy_util_.GetPathKey(), "/index.php", 3163 {{"friend", "barney", "enemy", "snaggletooth", NULL},
3162 spdy_util_.GetVersionKey(), "HTTP/1.1", 3164 {spdy_util_.GetStatusKey(), "200", spdy_util_.GetPathKey(),
3163 NULL 3165 "/index.php", spdy_util_.GetVersionKey(), "HTTP/1.1", "vary",
3164 } 3166 "friend,enemy", NULL}}}};
3165 }
3166 }, { // Test a '*' vary field.
3167 false,
3168 { 1, 4 },
3169 { { "cookie", "val1,val2",
3170 NULL
3171 },
3172 { "vary", "*",
3173 spdy_util_.GetStatusKey(), "200",
3174 spdy_util_.GetPathKey(), "/index.php",
3175 spdy_util_.GetVersionKey(), "HTTP/1.1",
3176 NULL
3177 }
3178 }
3179 }, { // Multiple comma-separated vary fields.
3180 true,
3181 { 2, 4 },
3182 { { "friend", "barney",
3183 "enemy", "snaggletooth",
3184 NULL
3185 },
3186 { "vary", "friend,enemy",
3187 spdy_util_.GetStatusKey(), "200",
3188 spdy_util_.GetPathKey(), "/index.php",
3189 spdy_util_.GetVersionKey(), "HTTP/1.1",
3190 NULL
3191 }
3192 }
3193 }
3194 };
3195 3167
3196 for (size_t i = 0; i < arraysize(test_cases); ++i) { 3168 for (size_t i = 0; i < arraysize(test_cases); ++i) {
3197 // Construct the request. 3169 // Construct the request.
3198 scoped_ptr<SpdyFrame> frame_req( 3170 scoped_ptr<SpdyFrame> frame_req(
3199 spdy_util_.ConstructSpdyGet(test_cases[i].extra_headers[0], 3171 spdy_util_.ConstructSpdyGet(test_cases[i].extra_headers[0],
3200 test_cases[i].num_headers[0], 3172 test_cases[i].num_headers[0],
3201 false, 1, LOWEST, true)); 3173 false, 1, LOWEST, true));
3202 3174
3203 MockWrite writes[] = { 3175 MockWrite writes[] = {
3204 CreateMockWrite(*frame_req, 0), 3176 CreateMockWrite(*frame_req, 0),
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
3262 EXPECT_EQ(expected_reply, lines) << i; 3234 EXPECT_EQ(expected_reply, lines) << i;
3263 } 3235 }
3264 } 3236 }
3265 3237
3266 // Verify that we don't crash on invalid SynReply responses. 3238 // Verify that we don't crash on invalid SynReply responses.
3267 TEST_P(SpdyNetworkTransactionTest, InvalidSynReply) { 3239 TEST_P(SpdyNetworkTransactionTest, InvalidSynReply) {
3268 struct InvalidSynReplyTests { 3240 struct InvalidSynReplyTests {
3269 int num_headers; 3241 int num_headers;
3270 const char* headers[10]; 3242 const char* headers[10];
3271 } test_cases[] = { 3243 } test_cases[] = {
3272 // SYN_REPLY missing status header 3244 // SYN_REPLY missing status header
3273 { 4, 3245 {
3274 { "cookie", "val1", 3246 4,
3275 "cookie", "val2", 3247 {spdy_util_.GetPathKey(), "/index.php", spdy_util_.GetVersionKey(),
3276 spdy_util_.GetPathKey(), "/index.php", 3248 "HTTP/1.1", "cookie", "val1", "cookie", "val2", NULL},
3277 spdy_util_.GetVersionKey(), "HTTP/1.1",
3278 NULL
3279 }, 3249 },
3280 }, 3250 // SYN_REPLY missing version header
3281 // SYN_REPLY missing version header 3251 {
3282 { 2, 3252 2, {spdy_util_.GetPathKey(), "/index.php", "status", "200", NULL},
3283 { "status", "200",
3284 spdy_util_.GetPathKey(), "/index.php",
3285 NULL
3286 }, 3253 },
3287 }, 3254 // SYN_REPLY with no headers
3288 // SYN_REPLY with no headers 3255 {
3289 { 0, { NULL }, }, 3256 0, {NULL},
3257 },
3290 }; 3258 };
3291 3259
3292 for (size_t i = 0; i < arraysize(test_cases); ++i) { 3260 for (size_t i = 0; i < arraysize(test_cases); ++i) {
3293 scoped_ptr<SpdyFrame> req( 3261 scoped_ptr<SpdyFrame> req(
3294 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true)); 3262 spdy_util_.ConstructSpdyGet(NULL, 0, false, 1, LOWEST, true));
3295 scoped_ptr<SpdyFrame> rst( 3263 scoped_ptr<SpdyFrame> rst(
3296 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); 3264 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR));
3297 MockWrite writes[] = { 3265 MockWrite writes[] = {
3298 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2), 3266 CreateMockWrite(*req, 0), CreateMockWrite(*rst, 2),
3299 }; 3267 };
(...skipping 1708 matching lines...) Expand 10 before | Expand all | Expand 10 after
5008 CreateMockWrite(*stream1_syn, 0), 4976 CreateMockWrite(*stream1_syn, 0),
5009 }; 4977 };
5010 4978
5011 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 4979 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
5012 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 4980 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
5013 initial_headers.get()); 4981 initial_headers.get());
5014 scoped_ptr<SpdyFrame> stream2_syn( 4982 scoped_ptr<SpdyFrame> stream2_syn(
5015 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 4983 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1));
5016 4984
5017 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 4985 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5018 (*late_headers)["hello"] = "bye";
5019 (*late_headers)[spdy_util_.GetStatusKey()] = "200"; 4986 (*late_headers)[spdy_util_.GetStatusKey()] = "200";
5020 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 4987 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
4988 (*late_headers)["hello"] = "bye";
5021 scoped_ptr<SpdyFrame> stream2_headers( 4989 scoped_ptr<SpdyFrame> stream2_headers(
5022 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 4990 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(),
5023 false, 4991 false,
5024 2, 4992 2,
5025 LOWEST, 4993 LOWEST,
5026 HEADERS, 4994 HEADERS,
5027 CONTROL_FLAG_NONE, 4995 CONTROL_FLAG_NONE,
5028 0)); 4996 0));
5029 4997
5030 scoped_ptr<SpdyFrame> 4998 scoped_ptr<SpdyFrame>
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
5070 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), 5038 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS),
5071 }; 5039 };
5072 5040
5073 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock()); 5041 scoped_ptr<SpdyHeaderBlock> initial_headers(new SpdyHeaderBlock());
5074 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), 5042 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"),
5075 initial_headers.get()); 5043 initial_headers.get());
5076 scoped_ptr<SpdyFrame> stream2_syn( 5044 scoped_ptr<SpdyFrame> stream2_syn(
5077 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1)); 5045 spdy_util_.ConstructInitialSpdyPushFrame(initial_headers.Pass(), 2, 1));
5078 5046
5079 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock()); 5047 scoped_ptr<SpdyHeaderBlock> late_headers(new SpdyHeaderBlock());
5080 (*late_headers)["hello"] = "bye";
5081 (*late_headers)[spdy_util_.GetStatusKey()] = "200"; 5048 (*late_headers)[spdy_util_.GetStatusKey()] = "200";
5082 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1"; 5049 (*late_headers)[spdy_util_.GetVersionKey()] = "HTTP/1.1";
5050 (*late_headers)["hello"] = "bye";
5083 scoped_ptr<SpdyFrame> stream2_headers( 5051 scoped_ptr<SpdyFrame> stream2_headers(
5084 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(), 5052 spdy_util_.ConstructSpdyControlFrame(late_headers.Pass(),
5085 false, 5053 false,
5086 2, 5054 2,
5087 LOWEST, 5055 LOWEST,
5088 HEADERS, 5056 HEADERS,
5089 CONTROL_FLAG_NONE, 5057 CONTROL_FLAG_NONE,
5090 0)); 5058 0));
5091 5059
5092 scoped_ptr<SpdyFrame> 5060 scoped_ptr<SpdyFrame>
(...skipping 1531 matching lines...) Expand 10 before | Expand all | Expand 10 after
6624 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { 6592 TEST_P(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) {
6625 scoped_ptr<SSLSocketDataProvider> ssl_provider( 6593 scoped_ptr<SSLSocketDataProvider> ssl_provider(
6626 new SSLSocketDataProvider(ASYNC, OK)); 6594 new SSLSocketDataProvider(ASYNC, OK));
6627 // Set to TLS_RSA_WITH_NULL_MD5 6595 // Set to TLS_RSA_WITH_NULL_MD5
6628 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6596 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6629 6597
6630 RunTLSUsageCheckTest(ssl_provider.Pass()); 6598 RunTLSUsageCheckTest(ssl_provider.Pass());
6631 } 6599 }
6632 6600
6633 } // namespace net 6601 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_http_utils_unittest.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698