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/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 1460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1471 0, // Associated stream ID | 1471 0, // Associated stream ID |
1472 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority | 1472 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority |
1473 0, // Credential Slot | 1473 0, // Credential Slot |
1474 CONTROL_FLAG_NONE, // Control Flags | 1474 CONTROL_FLAG_NONE, // Control Flags |
1475 false, // Compressed | 1475 false, // Compressed |
1476 INVALID, // Status | 1476 INVALID, // Status |
1477 NULL, // Data | 1477 NULL, // Data |
1478 0, // Length | 1478 0, // Length |
1479 DATA_FLAG_NONE // Data Flags | 1479 DATA_FLAG_NONE // Data Flags |
1480 }; | 1480 }; |
1481 static const char* const kStandardGetHeaders[] = { | 1481 static const char* const kStandardRespHeaders[] = { |
1482 "status", "200", | 1482 ":status", "200", |
1483 "version", "HTTP/1.1" | 1483 ":version", "HTTP/1.1" |
1484 "content-length", "1234" | 1484 "content-length", "1234" |
1485 }; | 1485 }; |
1486 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, | 1486 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, |
1487 NULL, 0, kStandardGetHeaders, arraysize(kStandardGetHeaders) / 2)); | 1487 NULL, 0, kStandardRespHeaders, arraysize(kStandardRespHeaders) / 2)); |
1488 MockRead reads[] = { | 1488 MockRead reads[] = { |
1489 CreateMockRead(*resp), | 1489 CreateMockRead(*resp), |
1490 CreateMockRead(*body), | 1490 CreateMockRead(*body), |
1491 MockRead(ASYNC, 0, 0) // EOF | 1491 MockRead(ASYNC, 0, 0) // EOF |
1492 }; | 1492 }; |
1493 | 1493 |
1494 scoped_ptr<DelayedSocketData> data( | 1494 scoped_ptr<DelayedSocketData> data( |
1495 new DelayedSocketData(1, reads, arraysize(reads), | 1495 new DelayedSocketData(1, reads, arraysize(reads), |
1496 writes, arraysize(writes))); | 1496 writes, arraysize(writes))); |
1497 NormalSpdyTransactionHelper helper(request, | 1497 NormalSpdyTransactionHelper helper(request, |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1544 0, // Associated stream ID | 1544 0, // Associated stream ID |
1545 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority | 1545 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority |
1546 0, // Credential Slot | 1546 0, // Credential Slot |
1547 CONTROL_FLAG_NONE, // Control Flags | 1547 CONTROL_FLAG_NONE, // Control Flags |
1548 false, // Compressed | 1548 false, // Compressed |
1549 INVALID, // Status | 1549 INVALID, // Status |
1550 NULL, // Data | 1550 NULL, // Data |
1551 0, // Length | 1551 0, // Length |
1552 DATA_FLAG_NONE // Data Flags | 1552 DATA_FLAG_NONE // Data Flags |
1553 }; | 1553 }; |
1554 static const char* const kStandardGetHeaders[] = { | 1554 static const char* const kStandardRespHeaders[] = { |
1555 "status", "200", | 1555 ":status", "200", |
1556 "version", "HTTP/1.1" | 1556 ":version", "HTTP/1.1" |
1557 "content-length", "1234" | 1557 "content-length", "1234" |
1558 }; | 1558 }; |
1559 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, | 1559 scoped_ptr<SpdyFrame> resp(ConstructSpdyPacket(kSynReplyHeader, |
1560 NULL, 0, kStandardGetHeaders, arraysize(kStandardGetHeaders) / 2)); | 1560 NULL, 0, kStandardRespHeaders, arraysize(kStandardRespHeaders) / 2)); |
1561 MockRead reads[] = { | 1561 MockRead reads[] = { |
1562 CreateMockRead(*resp), | 1562 CreateMockRead(*resp), |
1563 CreateMockRead(*body), | 1563 CreateMockRead(*body), |
1564 MockRead(ASYNC, 0, 0) // EOF | 1564 MockRead(ASYNC, 0, 0) // EOF |
1565 }; | 1565 }; |
1566 | 1566 |
1567 scoped_ptr<DelayedSocketData> data( | 1567 scoped_ptr<DelayedSocketData> data( |
1568 new DelayedSocketData(1, reads, arraysize(reads), | 1568 new DelayedSocketData(1, reads, arraysize(reads), |
1569 writes, arraysize(writes))); | 1569 writes, arraysize(writes))); |
1570 NormalSpdyTransactionHelper helper(request, | 1570 NormalSpdyTransactionHelper helper(request, |
(...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2263 TEST_P(SpdyNetworkTransactionSpdy3Test, ResetPushWithTransferEncoding) { | 2263 TEST_P(SpdyNetworkTransactionSpdy3Test, ResetPushWithTransferEncoding) { |
2264 // Construct the request. | 2264 // Construct the request. |
2265 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 2265 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
2266 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); | 2266 scoped_ptr<SpdyFrame> rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); |
2267 MockWrite writes[] = { | 2267 MockWrite writes[] = { |
2268 CreateMockWrite(*req), | 2268 CreateMockWrite(*req), |
2269 CreateMockWrite(*rst), | 2269 CreateMockWrite(*rst), |
2270 }; | 2270 }; |
2271 | 2271 |
2272 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2272 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); |
2273 const char* const headers[] = {"url", "http://www.google.com/1", | 2273 const char* const headers[] = {":scheme", "http", |
2274 ":host", "www.google.com", | |
2275 ":path", "/1", | |
2274 "transfer-encoding", "chunked"}; | 2276 "transfer-encoding", "chunked"}; |
2275 scoped_ptr<SpdyFrame> push(ConstructSpdyPush(headers, arraysize(headers) / 2, | 2277 scoped_ptr<SpdyFrame> push(ConstructSpdyPush(headers, arraysize(headers) / 2, |
2276 2, 1)); | 2278 2, 1)); |
2277 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); | 2279 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); |
2278 MockRead reads[] = { | 2280 MockRead reads[] = { |
2279 CreateMockRead(*resp), | 2281 CreateMockRead(*resp), |
2280 CreateMockRead(*push), | 2282 CreateMockRead(*push), |
2281 CreateMockRead(*body), | 2283 CreateMockRead(*body), |
2282 MockRead(ASYNC, 0, 0) // EOF | 2284 MockRead(ASYNC, 0, 0) // EOF |
2283 }; | 2285 }; |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2571 new SpdyURLRequestContext(); | 2573 new SpdyURLRequestContext(); |
2572 r.set_context(spdy_url_request_context); | 2574 r.set_context(spdy_url_request_context); |
2573 spdy_url_request_context->socket_factory(). | 2575 spdy_url_request_context->socket_factory(). |
2574 AddSocketDataProvider(data.get()); | 2576 AddSocketDataProvider(data.get()); |
2575 spdy_url_request_context->socket_factory(). | 2577 spdy_url_request_context->socket_factory(). |
2576 AddSocketDataProvider(data2.get()); | 2578 AddSocketDataProvider(data2.get()); |
2577 | 2579 |
2578 d.set_quit_on_redirect(true); | 2580 d.set_quit_on_redirect(true); |
2579 r.Start(); | 2581 r.Start(); |
2580 MessageLoop::current()->Run(); | 2582 MessageLoop::current()->Run(); |
2581 | |
2582 EXPECT_EQ(1, d.received_redirect_count()); | 2583 EXPECT_EQ(1, d.received_redirect_count()); |
2583 | 2584 |
2584 r.FollowDeferredRedirect(); | 2585 r.FollowDeferredRedirect(); |
2585 MessageLoop::current()->Run(); | 2586 MessageLoop::current()->Run(); |
2586 EXPECT_EQ(1, d.response_started_count()); | 2587 EXPECT_EQ(1, d.response_started_count()); |
2587 EXPECT_FALSE(d.received_data_before_response()); | 2588 EXPECT_FALSE(d.received_data_before_response()); |
2588 EXPECT_EQ(net::URLRequestStatus::SUCCESS, r.status().status()); | 2589 EXPECT_EQ(net::URLRequestStatus::SUCCESS, r.status().status()); |
2589 std::string contents("hello!"); | 2590 std::string contents("hello!"); |
2590 EXPECT_EQ(contents, d.data_received()); | 2591 EXPECT_EQ(contents, d.data_received()); |
2591 } | 2592 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2634 scoped_ptr<SpdyFrame> | 2635 scoped_ptr<SpdyFrame> |
2635 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 2636 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
2636 scoped_ptr<SpdyFrame> | 2637 scoped_ptr<SpdyFrame> |
2637 rst(ConstructSpdyRstStream(1, PROTOCOL_ERROR)); | 2638 rst(ConstructSpdyRstStream(1, PROTOCOL_ERROR)); |
2638 MockWrite writes[] = { | 2639 MockWrite writes[] = { |
2639 CreateMockWrite(*syn, 0), | 2640 CreateMockWrite(*syn, 0), |
2640 CreateMockWrite(*rst, 2), | 2641 CreateMockWrite(*rst, 2), |
2641 }; | 2642 }; |
2642 | 2643 |
2643 static const char* const kInitialHeaders[] = { | 2644 static const char* const kInitialHeaders[] = { |
2644 "status", "200 OK", | 2645 ":status", "200 OK", |
2645 "version", "HTTP/1.1" | 2646 ":version", "HTTP/1.1" |
2646 }; | 2647 }; |
2647 static const char* const kLateHeaders[] = { | 2648 static const char* const kLateHeaders[] = { |
2648 "X-UpperCase", "yes", | 2649 "X-UpperCase", "yes", |
2649 }; | 2650 }; |
2650 scoped_ptr<SpdyFrame> | 2651 scoped_ptr<SpdyFrame> |
2651 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, | 2652 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, |
2652 arraysize(kInitialHeaders) / 2, | 2653 arraysize(kInitialHeaders) / 2, |
2653 false, | 2654 false, |
2654 1, | 2655 1, |
2655 LOWEST, | 2656 LOWEST, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2693 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 2694 syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
2694 scoped_ptr<SpdyFrame> | 2695 scoped_ptr<SpdyFrame> |
2695 rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); | 2696 rst(ConstructSpdyRstStream(2, PROTOCOL_ERROR)); |
2696 MockWrite writes[] = { | 2697 MockWrite writes[] = { |
2697 CreateMockWrite(*syn, 0), | 2698 CreateMockWrite(*syn, 0), |
2698 CreateMockWrite(*rst, 2), | 2699 CreateMockWrite(*rst, 2), |
2699 }; | 2700 }; |
2700 | 2701 |
2701 scoped_ptr<SpdyFrame> | 2702 scoped_ptr<SpdyFrame> |
2702 reply(ConstructSpdyGetSynReply(NULL, 0, 1)); | 2703 reply(ConstructSpdyGetSynReply(NULL, 0, 1)); |
2703 const char* const extra_headers[] = {"X-UpperCase", "yes"}; | 2704 const char* const extra_headers[] = { |
2705 "X-UpperCase", "yes" | |
2706 }; | |
2704 scoped_ptr<SpdyFrame> | 2707 scoped_ptr<SpdyFrame> |
2705 push(ConstructSpdyPush(extra_headers, 1, 2, 1)); | 2708 push(ConstructSpdyPush(extra_headers, arraysize(extra_headers)/2, 2, 1)); |
ramant (doing other things)
2012/03/30 22:19:58
nit: " arraysize(extra_headers)/2" -> " arraysize(
Ryan Hamilton
2012/03/30 22:46:02
Done.
| |
2706 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); | 2709 scoped_ptr<SpdyFrame> body(ConstructSpdyBodyFrame(1, true)); |
2707 MockRead reads[] = { | 2710 MockRead reads[] = { |
2708 CreateMockRead(*reply, 1), | 2711 CreateMockRead(*reply, 1), |
2709 CreateMockRead(*push, 1), | 2712 CreateMockRead(*push, 1), |
2710 CreateMockRead(*body, 1), | 2713 CreateMockRead(*body, 1), |
2711 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause | 2714 MockRead(ASYNC, ERR_IO_PENDING, 3), // Force a pause |
2712 }; | 2715 }; |
2713 | 2716 |
2714 HttpResponseInfo response; | 2717 HttpResponseInfo response; |
2715 HttpResponseInfo response2; | 2718 HttpResponseInfo response2; |
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3466 int num_headers; | 3469 int num_headers; |
3467 const char* extra_headers[5]; | 3470 const char* extra_headers[5]; |
3468 const char* expected_headers; | 3471 const char* expected_headers; |
3469 } test_cases[] = { | 3472 } test_cases[] = { |
3470 // This uses a multi-valued cookie header. | 3473 // This uses a multi-valued cookie header. |
3471 { 2, | 3474 { 2, |
3472 { "cookie", "val1", | 3475 { "cookie", "val1", |
3473 "cookie", "val2", // will get appended separated by NULL | 3476 "cookie", "val2", // will get appended separated by NULL |
3474 NULL | 3477 NULL |
3475 }, | 3478 }, |
3479 "status: 200\n" | |
3480 "version: HTTP/1.1\n" | |
3476 "cookie: val1\n" | 3481 "cookie: val1\n" |
3477 "cookie: val2\n" | 3482 "cookie: val2\n" |
3478 "hello: bye\n" | 3483 "hello: bye\n" |
3479 "status: 200\n" | |
3480 "version: HTTP/1.1\n" | |
3481 }, | 3484 }, |
3482 // This is the minimalist set of headers. | 3485 // This is the minimalist set of headers. |
3483 { 0, | 3486 { 0, |
3484 { NULL }, | 3487 { NULL }, |
3485 "hello: bye\n" | |
3486 "status: 200\n" | 3488 "status: 200\n" |
3487 "version: HTTP/1.1\n" | 3489 "version: HTTP/1.1\n" |
3490 "hello: bye\n" | |
3488 }, | 3491 }, |
3489 // Headers with a comma separated list. | 3492 // Headers with a comma separated list. |
3490 { 1, | 3493 { 1, |
3491 { "cookie", "val1,val2", | 3494 { "cookie", "val1,val2", |
3492 NULL | 3495 NULL |
3493 }, | 3496 }, |
3497 "status: 200\n" | |
3498 "version: HTTP/1.1\n" | |
3494 "cookie: val1,val2\n" | 3499 "cookie: val1,val2\n" |
3495 "hello: bye\n" | 3500 "hello: bye\n" |
3496 "status: 200\n" | |
3497 "version: HTTP/1.1\n" | |
3498 } | 3501 } |
3499 }; | 3502 }; |
3500 | 3503 |
3501 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 3504 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
3502 scoped_ptr<SpdyFrame> req( | 3505 scoped_ptr<SpdyFrame> req( |
3503 ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 3506 ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
3504 MockWrite writes[] = { CreateMockWrite(*req) }; | 3507 MockWrite writes[] = { CreateMockWrite(*req) }; |
3505 | 3508 |
3506 scoped_ptr<SpdyFrame> resp( | 3509 scoped_ptr<SpdyFrame> resp( |
3507 ConstructSpdyGetSynReply(test_cases[i].extra_headers, | 3510 ConstructSpdyGetSynReply(test_cases[i].extra_headers, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3565 } test_cases[] = { | 3568 } test_cases[] = { |
3566 // Test the case of a multi-valued cookie. When the value is delimited | 3569 // Test the case of a multi-valued cookie. When the value is delimited |
3567 // with NUL characters, it needs to be unfolded into multiple headers. | 3570 // with NUL characters, it needs to be unfolded into multiple headers. |
3568 { | 3571 { |
3569 &syn_reply_info, | 3572 &syn_reply_info, |
3570 true, | 3573 true, |
3571 { 1, 4 }, | 3574 { 1, 4 }, |
3572 { { "cookie", "val1,val2", | 3575 { { "cookie", "val1,val2", |
3573 NULL | 3576 NULL |
3574 }, | 3577 }, |
3575 { "vary", "cookie", | 3578 { ":status", "200", |
3576 "status", "200", | 3579 ":version", "HTTP/1.1", |
3580 "vary", "cookie", | |
3577 "url", "/index.php", | 3581 "url", "/index.php", |
3578 "version", "HTTP/1.1", | |
3579 NULL | 3582 NULL |
3580 } | 3583 } |
3581 } | 3584 } |
3582 }, { // Multiple vary fields. | 3585 }, { // Multiple vary fields. |
3583 &syn_reply_info, | 3586 &syn_reply_info, |
3584 true, | 3587 true, |
3585 { 2, 5 }, | 3588 { 2, 5 }, |
3586 { { "friend", "barney", | 3589 { { "friend", "barney", |
3587 "enemy", "snaggletooth", | 3590 "enemy", "snaggletooth", |
3588 NULL | 3591 NULL |
3589 }, | 3592 }, |
3590 { "vary", "friend", | 3593 { ":status", "200", |
3594 ":version", "HTTP/1.1", | |
3595 "vary", "friend", | |
3591 "vary", "enemy", | 3596 "vary", "enemy", |
3592 "status", "200", | |
3593 "url", "/index.php", | 3597 "url", "/index.php", |
3594 "version", "HTTP/1.1", | |
3595 NULL | 3598 NULL |
3596 } | 3599 } |
3597 } | 3600 } |
3598 }, { // Test a '*' vary field. | 3601 }, { // Test a '*' vary field. |
3599 &syn_reply_info, | 3602 &syn_reply_info, |
3600 false, | 3603 false, |
3601 { 1, 4 }, | 3604 { 1, 4 }, |
3602 { { "cookie", "val1,val2", | 3605 { { "cookie", "val1,val2", |
3603 NULL | 3606 NULL |
3604 }, | 3607 }, |
3605 { "vary", "*", | 3608 { ":status", "200", |
3606 "status", "200", | 3609 ":version", "HTTP/1.1", |
3610 "vary", "*", | |
3607 "url", "/index.php", | 3611 "url", "/index.php", |
3608 "version", "HTTP/1.1", | |
3609 NULL | 3612 NULL |
3610 } | 3613 } |
3611 } | 3614 } |
3612 }, { // Multiple comma-separated vary fields. | 3615 }, { // Multiple comma-separated vary fields. |
3613 &syn_reply_info, | 3616 &syn_reply_info, |
3614 true, | 3617 true, |
3615 { 2, 4 }, | 3618 { 2, 4 }, |
3616 { { "friend", "barney", | 3619 { { "friend", "barney", |
3617 "enemy", "snaggletooth", | 3620 "enemy", "snaggletooth", |
3618 NULL | 3621 NULL |
3619 }, | 3622 }, |
3620 { "vary", "friend,enemy", | 3623 { ":status", "200", |
3621 "status", "200", | 3624 ":version", "HTTP/1.1", |
3625 "vary", "friend,enemy", | |
3622 "url", "/index.php", | 3626 "url", "/index.php", |
3623 "version", "HTTP/1.1", | |
3624 NULL | 3627 NULL |
3625 } | 3628 } |
3626 } | 3629 } |
3627 } | 3630 } |
3628 }; | 3631 }; |
3629 | 3632 |
3630 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 3633 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
3631 // Construct the request. | 3634 // Construct the request. |
3632 scoped_ptr<SpdyFrame> frame_req( | 3635 scoped_ptr<SpdyFrame> frame_req( |
3633 ConstructSpdyGet(test_cases[i].extra_headers[0], | 3636 ConstructSpdyGet(test_cases[i].extra_headers[0], |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3734 { 4, | 3737 { 4, |
3735 { "cookie", "val1", | 3738 { "cookie", "val1", |
3736 "cookie", "val2", | 3739 "cookie", "val2", |
3737 "url", "/index.php", | 3740 "url", "/index.php", |
3738 "version", "HTTP/1.1", | 3741 "version", "HTTP/1.1", |
3739 NULL | 3742 NULL |
3740 }, | 3743 }, |
3741 }, | 3744 }, |
3742 // SYN_REPLY missing version header | 3745 // SYN_REPLY missing version header |
3743 { 2, | 3746 { 2, |
3744 { "status", "200", | 3747 { ":status", "200", |
3745 "url", "/index.php", | 3748 "url", "/index.php", |
3746 NULL | 3749 NULL |
3747 }, | 3750 }, |
3748 }, | 3751 }, |
3749 // SYN_REPLY with no headers | 3752 // SYN_REPLY with no headers |
3750 { 0, { NULL }, }, | 3753 { 0, { NULL }, }, |
3751 }; | 3754 }; |
3752 | 3755 |
3753 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { | 3756 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_cases); ++i) { |
3754 scoped_ptr<SpdyFrame> req( | 3757 scoped_ptr<SpdyFrame> req( |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4440 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority | 4443 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority |
4441 0, // Credential Slot | 4444 0, // Credential Slot |
4442 CONTROL_FLAG_NONE, // Control Flags | 4445 CONTROL_FLAG_NONE, // Control Flags |
4443 false, // Compressed | 4446 false, // Compressed |
4444 INVALID, // Status | 4447 INVALID, // Status |
4445 NULL, // Data | 4448 NULL, // Data |
4446 0, // Data Length | 4449 0, // Data Length |
4447 DATA_FLAG_NONE // Data Flags | 4450 DATA_FLAG_NONE // Data Flags |
4448 }; | 4451 }; |
4449 static const char* const kExtraHeaders[] = { | 4452 static const char* const kExtraHeaders[] = { |
4450 "status", "200", | 4453 ":status", "200", |
4451 "version", "HTTP/1.1" | 4454 ":version", "HTTP/1.1" |
4452 }; | 4455 }; |
4453 | 4456 |
4454 BoundNetLog net_log; | 4457 BoundNetLog net_log; |
4455 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); | 4458 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); |
4456 helper.RunPreTestSetup(); | 4459 helper.RunPreTestSetup(); |
4457 | 4460 |
4458 // Verify that no settings exist initially. | 4461 // Verify that no settings exist initially. |
4459 HostPortPair host_port_pair("www.google.com", helper.port()); | 4462 HostPortPair host_port_pair("www.google.com", helper.port()); |
4460 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); | 4463 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); |
4461 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( | 4464 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4547 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority | 4550 net::ConvertRequestPriorityToSpdyPriority(LOWEST), // Priority |
4548 0, // Credential Slot | 4551 0, // Credential Slot |
4549 CONTROL_FLAG_NONE, // Control Flags | 4552 CONTROL_FLAG_NONE, // Control Flags |
4550 false, // Compressed | 4553 false, // Compressed |
4551 INVALID, // Status | 4554 INVALID, // Status |
4552 NULL, // Data | 4555 NULL, // Data |
4553 0, // Data Length | 4556 0, // Data Length |
4554 DATA_FLAG_NONE // Data Flags | 4557 DATA_FLAG_NONE // Data Flags |
4555 }; | 4558 }; |
4556 static const char* kExtraHeaders[] = { | 4559 static const char* kExtraHeaders[] = { |
4557 "status", "200", | 4560 ":status", "200", |
4558 "version", "HTTP/1.1" | 4561 ":version", "HTTP/1.1" |
4559 }; | 4562 }; |
4560 | 4563 |
4561 BoundNetLog net_log; | 4564 BoundNetLog net_log; |
4562 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); | 4565 NormalSpdyTransactionHelper helper(CreateGetRequest(), net_log, GetParam()); |
4563 helper.RunPreTestSetup(); | 4566 helper.RunPreTestSetup(); |
4564 | 4567 |
4565 // Verify that no settings exist initially. | 4568 // Verify that no settings exist initially. |
4566 HostPortPair host_port_pair("www.google.com", helper.port()); | 4569 HostPortPair host_port_pair("www.google.com", helper.port()); |
4567 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); | 4570 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool(); |
4568 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( | 4571 EXPECT_TRUE(spdy_session_pool->http_server_properties()->GetSpdySettings( |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5231 }; | 5234 }; |
5232 scoped_ptr<SpdyFrame> | 5235 scoped_ptr<SpdyFrame> |
5233 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5236 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5234 scoped_ptr<SpdyFrame> | 5237 scoped_ptr<SpdyFrame> |
5235 stream1_body(ConstructSpdyBodyFrame(1, true)); | 5238 stream1_body(ConstructSpdyBodyFrame(1, true)); |
5236 MockWrite writes[] = { | 5239 MockWrite writes[] = { |
5237 CreateMockWrite(*stream1_syn, 1), | 5240 CreateMockWrite(*stream1_syn, 1), |
5238 }; | 5241 }; |
5239 | 5242 |
5240 static const char* const kInitialHeaders[] = { | 5243 static const char* const kInitialHeaders[] = { |
5241 "url", | 5244 ":scheme", "http", |
5242 "http://www.google.com/foo.dat", | 5245 ":host", "www.google.com", |
5246 ":path", "/foo.dat", | |
5243 }; | 5247 }; |
5244 static const char* const kLateHeaders[] = { | 5248 static const char* const kLateHeaders[] = { |
5245 "hello", | 5249 "hello", |
5246 "bye", | 5250 "bye", |
5247 "status", | 5251 ":status", |
5248 "200", | 5252 "200", |
5249 "version", | 5253 ":version", |
5250 "HTTP/1.1" | 5254 "HTTP/1.1" |
5251 }; | 5255 }; |
5252 scoped_ptr<SpdyFrame> | 5256 scoped_ptr<SpdyFrame> |
5253 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, | 5257 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, |
5254 arraysize(kInitialHeaders) / 2, | 5258 arraysize(kInitialHeaders) / 2, |
5255 false, | 5259 false, |
5256 2, | 5260 2, |
5257 LOWEST, | 5261 LOWEST, |
5258 SYN_STREAM, | 5262 SYN_STREAM, |
5259 CONTROL_FLAG_NONE, | 5263 CONTROL_FLAG_NONE, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5315 }; | 5319 }; |
5316 scoped_ptr<SpdyFrame> | 5320 scoped_ptr<SpdyFrame> |
5317 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5321 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5318 scoped_ptr<SpdyFrame> | 5322 scoped_ptr<SpdyFrame> |
5319 stream1_body(ConstructSpdyBodyFrame(1, true)); | 5323 stream1_body(ConstructSpdyBodyFrame(1, true)); |
5320 MockWrite writes[] = { | 5324 MockWrite writes[] = { |
5321 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), | 5325 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), |
5322 }; | 5326 }; |
5323 | 5327 |
5324 static const char* const kInitialHeaders[] = { | 5328 static const char* const kInitialHeaders[] = { |
5325 "url", | 5329 ":scheme", "http", |
5326 "http://www.google.com/foo.dat", | 5330 ":host", "www.google.com", |
5331 ":path", "/foo.dat" | |
5327 }; | 5332 }; |
5328 static const char* const kLateHeaders[] = { | 5333 static const char* const kLateHeaders[] = { |
5329 "hello", | 5334 "hello", |
5330 "bye", | 5335 "bye", |
5331 "status", | 5336 ":status", |
5332 "200", | 5337 "200", |
5333 "version", | 5338 ":version", |
5334 "HTTP/1.1" | 5339 "HTTP/1.1" |
5335 }; | 5340 }; |
5336 scoped_ptr<SpdyFrame> | 5341 scoped_ptr<SpdyFrame> |
5337 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, | 5342 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, |
5338 arraysize(kInitialHeaders) / 2, | 5343 arraysize(kInitialHeaders) / 2, |
5339 false, | 5344 false, |
5340 2, | 5345 2, |
5341 LOWEST, | 5346 LOWEST, |
5342 SYN_STREAM, | 5347 SYN_STREAM, |
5343 CONTROL_FLAG_NONE, | 5348 CONTROL_FLAG_NONE, |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5452 }; | 5457 }; |
5453 scoped_ptr<SpdyFrame> | 5458 scoped_ptr<SpdyFrame> |
5454 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5459 stream1_syn(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5455 scoped_ptr<SpdyFrame> | 5460 scoped_ptr<SpdyFrame> |
5456 stream1_body(ConstructSpdyBodyFrame(1, true)); | 5461 stream1_body(ConstructSpdyBodyFrame(1, true)); |
5457 MockWrite writes[] = { | 5462 MockWrite writes[] = { |
5458 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), | 5463 CreateMockWrite(*stream1_syn, 0, SYNCHRONOUS), |
5459 }; | 5464 }; |
5460 | 5465 |
5461 static const char* const kInitialHeaders[] = { | 5466 static const char* const kInitialHeaders[] = { |
5462 "url", | 5467 ":scheme", "http", |
5463 "http://www.google.com/foo.dat", | 5468 ":host", "www.google.com", |
5469 ":path", "/foo.dat" | |
5464 }; | 5470 }; |
5465 static const char* const kMiddleHeaders[] = { | 5471 static const char* const kMiddleHeaders[] = { |
5466 "hello", | 5472 "hello", |
5467 "bye", | 5473 "bye", |
5468 }; | 5474 }; |
5469 static const char* const kLateHeaders[] = { | 5475 static const char* const kLateHeaders[] = { |
5470 "status", | 5476 ":status", |
5471 "200", | 5477 "200", |
5472 "version", | 5478 ":version", |
5473 "HTTP/1.1" | 5479 "HTTP/1.1" |
5474 }; | 5480 }; |
5475 scoped_ptr<SpdyFrame> | 5481 scoped_ptr<SpdyFrame> |
5476 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, | 5482 stream2_syn(ConstructSpdyControlFrame(kInitialHeaders, |
5477 arraysize(kInitialHeaders) / 2, | 5483 arraysize(kInitialHeaders) / 2, |
5478 false, | 5484 false, |
5479 2, | 5485 2, |
5480 LOWEST, | 5486 LOWEST, |
5481 SYN_STREAM, | 5487 SYN_STREAM, |
5482 CONTROL_FLAG_NONE, | 5488 CONTROL_FLAG_NONE, |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5588 // Verify the SYN_REPLY. | 5594 // Verify the SYN_REPLY. |
5589 EXPECT_TRUE(response.headers != NULL); | 5595 EXPECT_TRUE(response.headers != NULL); |
5590 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5596 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
5591 | 5597 |
5592 // Verify the pushed stream. | 5598 // Verify the pushed stream. |
5593 EXPECT_TRUE(response2.headers != NULL); | 5599 EXPECT_TRUE(response2.headers != NULL); |
5594 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); | 5600 EXPECT_EQ("HTTP/1.1 200 OK", response2.headers->GetStatusLine()); |
5595 | 5601 |
5596 // Verify we got all the headers | 5602 // Verify we got all the headers |
5597 EXPECT_TRUE(response2.headers->HasHeaderValue( | 5603 EXPECT_TRUE(response2.headers->HasHeaderValue( |
5598 "url", | 5604 "scheme", "http")); |
5599 "http://www.google.com/foo.dat")); | 5605 EXPECT_TRUE(response2.headers->HasHeaderValue( |
5606 "host", "www.google.com")); | |
5607 EXPECT_TRUE(response2.headers->HasHeaderValue( | |
5608 "path", "/foo.dat")); | |
5600 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); | 5609 EXPECT_TRUE(response2.headers->HasHeaderValue("hello", "bye")); |
5601 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); | 5610 EXPECT_TRUE(response2.headers->HasHeaderValue("status", "200")); |
5602 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1")); | 5611 EXPECT_TRUE(response2.headers->HasHeaderValue("version", "HTTP/1.1")); |
5603 } | 5612 } |
5604 | 5613 |
5605 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithHeaders) { | 5614 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithHeaders) { |
5606 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5615 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5607 MockWrite writes[] = { CreateMockWrite(*req) }; | 5616 MockWrite writes[] = { CreateMockWrite(*req) }; |
5608 | 5617 |
5609 static const char* const kInitialHeaders[] = { | 5618 static const char* const kInitialHeaders[] = { |
5610 "status", | 5619 ":status", |
5611 "200 OK", | 5620 "200 OK", |
5612 "version", | 5621 ":version", |
5613 "HTTP/1.1" | 5622 "HTTP/1.1" |
5614 }; | 5623 }; |
5615 static const char* const kLateHeaders[] = { | 5624 static const char* const kLateHeaders[] = { |
5616 "hello", | 5625 "hello", |
5617 "bye", | 5626 "bye", |
5618 }; | 5627 }; |
5619 scoped_ptr<SpdyFrame> | 5628 scoped_ptr<SpdyFrame> |
5620 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, | 5629 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, |
5621 arraysize(kInitialHeaders) / 2, | 5630 arraysize(kInitialHeaders) / 2, |
5622 false, | 5631 false, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5656 EXPECT_EQ(OK, out.rv); | 5665 EXPECT_EQ(OK, out.rv); |
5657 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 5666 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
5658 EXPECT_EQ("hello!", out.response_data); | 5667 EXPECT_EQ("hello!", out.response_data); |
5659 } | 5668 } |
5660 | 5669 |
5661 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithLateHeaders) { | 5670 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithLateHeaders) { |
5662 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5671 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5663 MockWrite writes[] = { CreateMockWrite(*req) }; | 5672 MockWrite writes[] = { CreateMockWrite(*req) }; |
5664 | 5673 |
5665 static const char* const kInitialHeaders[] = { | 5674 static const char* const kInitialHeaders[] = { |
5666 "status", | 5675 ":status", |
5667 "200 OK", | 5676 "200 OK", |
5668 "version", | 5677 ":version", |
5669 "HTTP/1.1" | 5678 "HTTP/1.1" |
5670 }; | 5679 }; |
5671 static const char* const kLateHeaders[] = { | 5680 static const char* const kLateHeaders[] = { |
5672 "hello", | 5681 "hello", |
5673 "bye", | 5682 "bye", |
5674 }; | 5683 }; |
5675 scoped_ptr<SpdyFrame> | 5684 scoped_ptr<SpdyFrame> |
5676 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, | 5685 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, |
5677 arraysize(kInitialHeaders) / 2, | 5686 arraysize(kInitialHeaders) / 2, |
5678 false, | 5687 false, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5714 EXPECT_EQ(OK, out.rv); | 5723 EXPECT_EQ(OK, out.rv); |
5715 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); | 5724 EXPECT_EQ("HTTP/1.1 200 OK", out.status_line); |
5716 EXPECT_EQ("hello!hello!", out.response_data); | 5725 EXPECT_EQ("hello!hello!", out.response_data); |
5717 } | 5726 } |
5718 | 5727 |
5719 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithDuplicateLateHeaders) { | 5728 TEST_P(SpdyNetworkTransactionSpdy3Test, SynReplyWithDuplicateLateHeaders) { |
5720 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); | 5729 scoped_ptr<SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST)); |
5721 MockWrite writes[] = { CreateMockWrite(*req) }; | 5730 MockWrite writes[] = { CreateMockWrite(*req) }; |
5722 | 5731 |
5723 static const char* const kInitialHeaders[] = { | 5732 static const char* const kInitialHeaders[] = { |
5724 "status", | 5733 ":status", |
5725 "200 OK", | 5734 "200 OK", |
5726 "version", | 5735 ":version", |
5727 "HTTP/1.1" | 5736 "HTTP/1.1" |
5728 }; | 5737 }; |
5729 static const char* const kLateHeaders[] = { | 5738 static const char* const kLateHeaders[] = { |
5730 "status", | 5739 ":status", |
5731 "500 Server Error", | 5740 "500 Server Error", |
5732 }; | 5741 }; |
5733 scoped_ptr<SpdyFrame> | 5742 scoped_ptr<SpdyFrame> |
5734 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, | 5743 stream1_reply(ConstructSpdyControlFrame(kInitialHeaders, |
5735 arraysize(kInitialHeaders) / 2, | 5744 arraysize(kInitialHeaders) / 2, |
5736 false, | 5745 false, |
5737 1, | 5746 1, |
5738 LOWEST, | 5747 LOWEST, |
5739 SYN_REPLY, | 5748 SYN_REPLY, |
5740 CONTROL_FLAG_NONE, | 5749 CONTROL_FLAG_NONE, |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5933 << " Write index: " | 5942 << " Write index: " |
5934 << data->write_index(); | 5943 << data->write_index(); |
5935 | 5944 |
5936 // Verify the SYN_REPLY. | 5945 // Verify the SYN_REPLY. |
5937 HttpResponseInfo response = *trans->GetResponseInfo(); | 5946 HttpResponseInfo response = *trans->GetResponseInfo(); |
5938 EXPECT_TRUE(response.headers != NULL); | 5947 EXPECT_TRUE(response.headers != NULL); |
5939 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); | 5948 EXPECT_EQ("HTTP/1.1 200 OK", response.headers->GetStatusLine()); |
5940 } | 5949 } |
5941 | 5950 |
5942 } // namespace net | 5951 } // namespace net |
OLD | NEW |