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 <cmath> | 5 #include <cmath> |
6 #include <memory> | 6 #include <memory> |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 2221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2232 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 2232 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
2233 MockWrite writes[] = { | 2233 MockWrite writes[] = { |
2234 CreateMockWrite(req, 0), CreateMockWrite(priority, 2), | 2234 CreateMockWrite(req, 0), CreateMockWrite(priority, 2), |
2235 }; | 2235 }; |
2236 | 2236 |
2237 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2237 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
2238 SpdySerializedFrame response_body_frame( | 2238 SpdySerializedFrame response_body_frame( |
2239 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true)); | 2239 spdy_util_.ConstructSpdyDataFrame(1, "should not include", 18, true)); |
2240 | 2240 |
2241 SpdyHeaderBlock push_headers; | 2241 SpdyHeaderBlock push_headers; |
| 2242 push_headers[":method"] = "GET"; |
2242 spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat", | 2243 spdy_util_.AddUrlToHeaderBlock(SpdyString(kDefaultUrl) + "b.dat", |
2243 &push_headers); | 2244 &push_headers); |
2244 | 2245 |
2245 SpdySerializedFrame push_init_frame( | 2246 SpdySerializedFrame push_init_frame( |
2246 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); | 2247 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 2, 1)); |
2247 | 2248 |
2248 SpdySerializedFrame push_headers_frame( | 2249 SpdySerializedFrame push_headers_frame( |
2249 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); | 2250 spdy_util_.ConstructSpdyPushHeaders(2, nullptr, 0)); |
2250 | 2251 |
2251 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame( | 2252 SpdySerializedFrame push_body_frame(spdy_util_.ConstructSpdyDataFrame( |
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3140 ReadResult(&trans2, &result); | 3141 ReadResult(&trans2, &result); |
3141 EXPECT_EQ(kPushedData, result); | 3142 EXPECT_EQ(kPushedData, result); |
3142 | 3143 |
3143 data.Resume(); | 3144 data.Resume(); |
3144 base::RunLoop().RunUntilIdle(); | 3145 base::RunLoop().RunUntilIdle(); |
3145 | 3146 |
3146 EXPECT_TRUE(data.AllReadDataConsumed()); | 3147 EXPECT_TRUE(data.AllReadDataConsumed()); |
3147 EXPECT_TRUE(data.AllWriteDataConsumed()); | 3148 EXPECT_TRUE(data.AllWriteDataConsumed()); |
3148 } | 3149 } |
3149 | 3150 |
| 3151 // Regression test for https://crbug.com/727653. |
| 3152 TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithNoMethod) { |
| 3153 SpdySerializedFrame req( |
| 3154 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3155 SpdySerializedFrame rst( |
| 3156 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM)); |
| 3157 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)}; |
| 3158 |
| 3159 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3160 |
| 3161 SpdyHeaderBlock push_promise_header_block; |
| 3162 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(), |
| 3163 &push_promise_header_block); |
| 3164 SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block)); |
| 3165 SpdySerializedFrame push_promise_frame( |
| 3166 spdy_util_.SerializeFrame(push_promise)); |
| 3167 |
| 3168 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 3169 MockRead reads[] = { |
| 3170 CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2), |
| 3171 CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; |
| 3172 |
| 3173 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3174 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3175 NetLogWithSource(), nullptr); |
| 3176 helper.RunToCompletion(&data); |
| 3177 } |
| 3178 |
| 3179 // Regression test for https://crbug.com/727653. |
| 3180 TEST_F(SpdyNetworkTransactionTest, RejectServerPushWithInvalidMethod) { |
| 3181 SpdySerializedFrame req( |
| 3182 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3183 SpdySerializedFrame rst( |
| 3184 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM)); |
| 3185 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 3)}; |
| 3186 |
| 3187 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3188 |
| 3189 SpdyHeaderBlock push_promise_header_block; |
| 3190 push_promise_header_block[":method"] = "POST"; |
| 3191 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat").c_str(), |
| 3192 &push_promise_header_block); |
| 3193 SpdyPushPromiseIR push_promise(1, 2, std::move(push_promise_header_block)); |
| 3194 SpdySerializedFrame push_promise_frame( |
| 3195 spdy_util_.SerializeFrame(push_promise)); |
| 3196 |
| 3197 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 3198 MockRead reads[] = { |
| 3199 CreateMockRead(reply, 1), CreateMockRead(push_promise_frame, 2), |
| 3200 CreateMockRead(body, 4), MockRead(SYNCHRONOUS, ERR_IO_PENDING, 5)}; |
| 3201 |
| 3202 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3203 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3204 NetLogWithSource(), nullptr); |
| 3205 helper.RunToCompletion(&data); |
| 3206 } |
| 3207 |
3150 // Verify that various response headers parse correctly through the HTTP layer. | 3208 // Verify that various response headers parse correctly through the HTTP layer. |
3151 TEST_F(SpdyNetworkTransactionTest, ResponseHeaders) { | 3209 TEST_F(SpdyNetworkTransactionTest, ResponseHeaders) { |
3152 struct ResponseHeadersTests { | 3210 struct ResponseHeadersTests { |
3153 int num_headers; | 3211 int num_headers; |
3154 const char* extra_headers[5]; | 3212 const char* extra_headers[5]; |
3155 SpdyHeaderBlock expected_headers; | 3213 SpdyHeaderBlock expected_headers; |
3156 } test_cases[] = {// This uses a multi-valued cookie header. | 3214 } test_cases[] = {// This uses a multi-valued cookie header. |
3157 { | 3215 { |
3158 2, | 3216 2, |
3159 {"cookie", "val1", "cookie", | 3217 {"cookie", "val1", "cookie", |
(...skipping 1522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4682 SpdySerializedFrame stream2_priority( | 4740 SpdySerializedFrame stream2_priority( |
4683 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 4741 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
4684 MockWrite writes[] = { | 4742 MockWrite writes[] = { |
4685 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), | 4743 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
4686 }; | 4744 }; |
4687 | 4745 |
4688 SpdySerializedFrame stream1_reply( | 4746 SpdySerializedFrame stream1_reply( |
4689 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4747 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4690 | 4748 |
4691 SpdyHeaderBlock initial_headers; | 4749 SpdyHeaderBlock initial_headers; |
| 4750 initial_headers[":method"] = "GET"; |
4692 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), | 4751 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), |
4693 &initial_headers); | 4752 &initial_headers); |
4694 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( | 4753 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( |
4695 std::move(initial_headers), 2, 1)); | 4754 std::move(initial_headers), 2, 1)); |
4696 | 4755 |
4697 SpdyHeaderBlock late_headers; | 4756 SpdyHeaderBlock late_headers; |
4698 late_headers[spdy_util_.GetStatusKey()] = "200"; | 4757 late_headers[spdy_util_.GetStatusKey()] = "200"; |
4699 late_headers["hello"] = "bye"; | 4758 late_headers["hello"] = "bye"; |
4700 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( | 4759 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( |
4701 2, std::move(late_headers), false)); | 4760 2, std::move(late_headers), false)); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4740 SpdySerializedFrame stream2_priority( | 4799 SpdySerializedFrame stream2_priority( |
4741 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 4800 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
4742 MockWrite writes[] = { | 4801 MockWrite writes[] = { |
4743 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), | 4802 CreateMockWrite(stream1_syn, 0, SYNCHRONOUS), |
4744 CreateMockWrite(stream2_priority, 3), | 4803 CreateMockWrite(stream2_priority, 3), |
4745 }; | 4804 }; |
4746 | 4805 |
4747 SpdySerializedFrame stream1_reply( | 4806 SpdySerializedFrame stream1_reply( |
4748 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4807 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4749 SpdyHeaderBlock initial_headers; | 4808 SpdyHeaderBlock initial_headers; |
| 4809 initial_headers[":method"] = "GET"; |
4750 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), | 4810 spdy_util_.AddUrlToHeaderBlock(GetDefaultUrlWithPath("/foo.dat"), |
4751 &initial_headers); | 4811 &initial_headers); |
4752 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( | 4812 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( |
4753 std::move(initial_headers), 2, 1)); | 4813 std::move(initial_headers), 2, 1)); |
4754 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 4814 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
4755 SpdyHeaderBlock late_headers; | 4815 SpdyHeaderBlock late_headers; |
4756 late_headers[spdy_util_.GetStatusKey()] = "200"; | 4816 late_headers[spdy_util_.GetStatusKey()] = "200"; |
4757 late_headers["hello"] = "bye"; | 4817 late_headers["hello"] = "bye"; |
4758 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( | 4818 SpdySerializedFrame stream2_headers(spdy_util_.ConstructSpdyResponseHeaders( |
4759 2, std::move(late_headers), false)); | 4819 2, std::move(late_headers), false)); |
(...skipping 1859 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6619 | 6679 |
6620 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { | 6680 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { |
6621 auto ssl_provider = base::MakeUnique<SSLSocketDataProvider>(ASYNC, OK); | 6681 auto ssl_provider = base::MakeUnique<SSLSocketDataProvider>(ASYNC, OK); |
6622 // Set to TLS_RSA_WITH_NULL_MD5 | 6682 // Set to TLS_RSA_WITH_NULL_MD5 |
6623 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); | 6683 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); |
6624 | 6684 |
6625 RunTLSUsageCheckTest(std::move(ssl_provider)); | 6685 RunTLSUsageCheckTest(std::move(ssl_provider)); |
6626 } | 6686 } |
6627 | 6687 |
6628 } // namespace net | 6688 } // namespace net |
OLD | NEW |