OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 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/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 }; | 701 }; |
702 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 702 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
703 arraysize(data_reads)); | 703 arraysize(data_reads)); |
704 EXPECT_THAT(out.rv, IsOk()); | 704 EXPECT_THAT(out.rv, IsOk()); |
705 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); | 705 EXPECT_EQ("HTTP/0.9 200 OK", out.status_line); |
706 EXPECT_EQ("hello world", out.response_data); | 706 EXPECT_EQ("hello world", out.response_data); |
707 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); | 707 int64_t reads_size = CountReadBytes(data_reads, arraysize(data_reads)); |
708 EXPECT_EQ(reads_size, out.total_received_bytes); | 708 EXPECT_EQ(reads_size, out.total_received_bytes); |
709 } | 709 } |
710 | 710 |
711 // Response with no status line, and a weird port. Should fail by default. | |
712 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPort) { | |
713 MockRead data_reads[] = { | |
714 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | |
715 }; | |
716 | |
717 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | |
718 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
719 | |
720 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | |
721 | |
722 std::unique_ptr<HttpTransaction> trans( | |
723 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | |
724 | |
725 HttpRequestInfo request; | |
726 request.method = "GET"; | |
727 request.url = GURL("http://www.example.com:2000/"); | |
728 TestCompletionCallback callback; | |
729 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | |
730 EXPECT_THAT(callback.GetResult(rv), IsError(ERR_INVALID_HTTP_RESPONSE)); | |
731 } | |
732 | |
733 // Response with no status line, and a weird port. Option to allow weird ports | |
734 // enabled. | |
735 TEST_F(HttpNetworkTransactionTest, SimpleGETNoHeadersWeirdPortAllowed) { | |
736 MockRead data_reads[] = { | |
737 MockRead("hello world"), MockRead(SYNCHRONOUS, OK), | |
738 }; | |
739 | |
740 StaticSocketDataProvider data(data_reads, arraysize(data_reads), nullptr, 0); | |
741 session_deps_.socket_factory->AddSocketDataProvider(&data); | |
742 session_deps_.http_09_on_non_default_ports_enabled = true; | |
743 std::unique_ptr<HttpNetworkSession> session(CreateSession(&session_deps_)); | |
744 | |
745 std::unique_ptr<HttpTransaction> trans( | |
746 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get())); | |
747 | |
748 HttpRequestInfo request; | |
749 request.method = "GET"; | |
750 request.url = GURL("http://www.example.com:2000/"); | |
751 TestCompletionCallback callback; | |
752 int rv = trans->Start(&request, callback.callback(), BoundNetLog()); | |
753 EXPECT_THAT(callback.GetResult(rv), IsOk()); | |
754 | |
755 const HttpResponseInfo* info = trans->GetResponseInfo(); | |
756 ASSERT_TRUE(info->headers); | |
757 EXPECT_EQ("HTTP/0.9 200 OK", info->headers->GetStatusLine()); | |
758 | |
759 // Don't bother to read the body - that's verified elsewhere, important thing | |
760 // is that the option to allow HTTP/0.9 on non-default ports is respected. | |
761 } | |
762 | |
763 // Allow up to 4 bytes of junk to precede status line. | 711 // Allow up to 4 bytes of junk to precede status line. |
764 TEST_F(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { | 712 TEST_F(HttpNetworkTransactionTest, StatusLineJunk3Bytes) { |
765 MockRead data_reads[] = { | 713 MockRead data_reads[] = { |
766 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), | 714 MockRead("xxxHTTP/1.0 404 Not Found\nServer: blah\n\nDATA"), |
767 MockRead(SYNCHRONOUS, OK), | 715 MockRead(SYNCHRONOUS, OK), |
768 }; | 716 }; |
769 SimpleGetHelperResult out = SimpleGetHelper(data_reads, | 717 SimpleGetHelperResult out = SimpleGetHelper(data_reads, |
770 arraysize(data_reads)); | 718 arraysize(data_reads)); |
771 EXPECT_THAT(out.rv, IsOk()); | 719 EXPECT_THAT(out.rv, IsOk()); |
772 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); | 720 EXPECT_EQ("HTTP/1.0 404 Not Found", out.status_line); |
(...skipping 13568 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14341 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); | 14289 DISALLOW_COPY_AND_ASSIGN(FakeStreamFactory); |
14342 }; | 14290 }; |
14343 | 14291 |
14344 // TODO(ricea): Maybe unify this with the one in | 14292 // TODO(ricea): Maybe unify this with the one in |
14345 // url_request_http_job_unittest.cc ? | 14293 // url_request_http_job_unittest.cc ? |
14346 class FakeWebSocketBasicHandshakeStream : public WebSocketHandshakeStreamBase { | 14294 class FakeWebSocketBasicHandshakeStream : public WebSocketHandshakeStreamBase { |
14347 public: | 14295 public: |
14348 FakeWebSocketBasicHandshakeStream( | 14296 FakeWebSocketBasicHandshakeStream( |
14349 std::unique_ptr<ClientSocketHandle> connection, | 14297 std::unique_ptr<ClientSocketHandle> connection, |
14350 bool using_proxy) | 14298 bool using_proxy) |
14351 : state_(std::move(connection), using_proxy, false) {} | 14299 : state_(std::move(connection), using_proxy) {} |
14352 | 14300 |
14353 // Fake implementation of HttpStreamBase methods. | 14301 // Fake implementation of HttpStreamBase methods. |
14354 // This ends up being quite "real" because this object has to really send data | 14302 // This ends up being quite "real" because this object has to really send data |
14355 // on the mock socket. It might be easier to use the real implementation, but | 14303 // on the mock socket. It might be easier to use the real implementation, but |
14356 // the fact that the WebSocket code is not compiled on iOS makes that | 14304 // the fact that the WebSocket code is not compiled on iOS makes that |
14357 // difficult. | 14305 // difficult. |
14358 int InitializeStream(const HttpRequestInfo* request_info, | 14306 int InitializeStream(const HttpRequestInfo* request_info, |
14359 RequestPriority priority, | 14307 RequestPriority priority, |
14360 const BoundNetLog& net_log, | 14308 const BoundNetLog& net_log, |
14361 const CompletionCallback& callback) override { | 14309 const CompletionCallback& callback) override { |
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
15573 base::RunLoop().RunUntilIdle(); | 15521 base::RunLoop().RunUntilIdle(); |
15574 | 15522 |
15575 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); | 15523 EXPECT_TRUE(trans.GetResponseInfo()->was_fetched_via_spdy); |
15576 HttpRequestHeaders headers; | 15524 HttpRequestHeaders headers; |
15577 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); | 15525 ASSERT_TRUE(trans.GetFullRequestHeaders(&headers)); |
15578 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); | 15526 EXPECT_TRUE(headers.HasHeader(HttpRequestHeaders::kTokenBinding)); |
15579 } | 15527 } |
15580 #endif // !defined(OS_IOS) | 15528 #endif // !defined(OS_IOS) |
15581 | 15529 |
15582 } // namespace net | 15530 } // namespace net |
OLD | NEW |