diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-07-16 11:45:35 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-07-17 08:59:23 +0000 |
commit | 552906b0f222c5d5dd11b9fd73829d510980461a (patch) | |
tree | 3a11e6ed0538a81dd83b20cf3a4783e297f26d91 /chromium/net/server | |
parent | 1b05827804eaf047779b597718c03e7d38344261 (diff) | |
download | qtwebengine-chromium-552906b0f222c5d5dd11b9fd73829d510980461a.tar.gz |
BASELINE: Update Chromium to 83.0.4103.122
Change-Id: Ie3a82f5bb0076eec2a7c6a6162326b4301ee291e
Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/net/server')
-rw-r--r-- | chromium/net/server/BUILD.gn | 4 | ||||
-rw-r--r-- | chromium/net/server/http_server_request_info.cc | 4 | ||||
-rw-r--r-- | chromium/net/server/http_server_unittest.cc | 61 |
3 files changed, 46 insertions, 23 deletions
diff --git a/chromium/net/server/BUILD.gn b/chromium/net/server/BUILD.gn index 1f3e3cb55cb..8ee35c5270f 100644 --- a/chromium/net/server/BUILD.gn +++ b/chromium/net/server/BUILD.gn @@ -70,9 +70,7 @@ source_set("tests") { if (enable_websockets) { fuzzer_test("net_http_server_fuzzer") { - sources = [ - "http_server_fuzzer.cc", - ] + sources = [ "http_server_fuzzer.cc" ] deps = [ ":http_server", "//base", diff --git a/chromium/net/server/http_server_request_info.cc b/chromium/net/server/http_server_request_info.cc index 58021cf29e5..3274b3928b4 100644 --- a/chromium/net/server/http_server_request_info.cc +++ b/chromium/net/server/http_server_request_info.cc @@ -33,8 +33,8 @@ bool HttpServerRequestInfo::HasHeaderValue( std::string complete_value = base::ToLowerASCII(GetHeaderValue(header_name)); for (const base::StringPiece& cur : - base::SplitString(complete_value, ",", base::KEEP_WHITESPACE, - base::SPLIT_WANT_NONEMPTY)) { + base::SplitStringPiece(complete_value, ",", base::KEEP_WHITESPACE, + base::SPLIT_WANT_NONEMPTY)) { if (base::TrimString(cur, " \t", base::TRIM_ALL) == header_value) return true; } diff --git a/chromium/net/server/http_server_unittest.cc b/chromium/net/server/http_server_unittest.cc index 7f404ad0010..509ece87cc8 100644 --- a/chromium/net/server/http_server_unittest.cc +++ b/chromium/net/server/http_server_unittest.cc @@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "base/auto_reset.h" #include "base/bind.h" #include "base/bind_helpers.h" #include "base/callback_helpers.h" @@ -188,6 +189,9 @@ class HttpServerTest : public TestWithTaskEnvironment, void OnConnect(int connection_id) override { DCHECK(connection_map_.find(connection_id) == connection_map_.end()); connection_map_[connection_id] = true; + // This is set in CreateConnection(), which must be invoked once for every + // expected connection. + quit_on_create_loop_->Quit(); } void OnHttpRequest(int connection_id, @@ -219,9 +223,21 @@ class HttpServerTest : public TestWithTaskEnvironment, return; base::RunLoop run_loop; - run_loop_quit_func_ = run_loop.QuitClosure(); + base::AutoReset<base::RepeatingClosure> run_loop_quit_func( + &run_loop_quit_func_, run_loop.QuitClosure()); run_loop.Run(); - run_loop_quit_func_.Reset(); + + ASSERT_EQ(requests_.size(), count); + } + + // Connections should only be created using this method, which waits until + // both the server and the client have received the connected socket. + void CreateConnection(TestHttpClient* client) { + ASSERT_FALSE(quit_on_create_loop_); + quit_on_create_loop_ = std::make_unique<base::RunLoop>(); + EXPECT_THAT(client->ConnectAndWait(server_address_), IsOk()); + quit_on_create_loop_->Run(); + quit_on_create_loop_.reset(); } void RunUntilConnectionIdClosed(int connection_id) { @@ -233,9 +249,13 @@ class HttpServerTest : public TestWithTaskEnvironment, } base::RunLoop run_loop; - run_loop_quit_func_ = run_loop.QuitClosure(); + base::AutoReset<base::RepeatingClosure> run_loop_quit_func( + &run_loop_quit_func_, run_loop.QuitClosure()); run_loop.Run(); - run_loop_quit_func_.Reset(); + + iter = connection_map_.find(connection_id); + ASSERT_TRUE(iter != connection_map_.end()); + ASSERT_FALSE(iter->second); } HttpServerRequestInfo GetRequest(size_t request_index) { @@ -249,8 +269,12 @@ class HttpServerTest : public TestWithTaskEnvironment, } void HandleAcceptResult(std::unique_ptr<StreamSocket> socket) { + ASSERT_FALSE(quit_on_create_loop_); + quit_on_create_loop_ = std::make_unique<base::RunLoop>(); server_->accepted_socket_ = std::move(socket); server_->HandleAcceptResult(OK); + quit_on_create_loop_->Run(); + quit_on_create_loop_.reset(); } std::unordered_map<int, bool>& connection_map() { return connection_map_; } @@ -265,6 +289,7 @@ class HttpServerTest : public TestWithTaskEnvironment, private: size_t quit_after_request_count_; + std::unique_ptr<base::RunLoop> quit_on_create_loop_; int quit_on_close_connection_; }; @@ -286,7 +311,7 @@ class WebSocketTest : public HttpServerTest { TEST_F(HttpServerTest, Request) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send("GET /test HTTP/1.1\r\n\r\n"); RunUntilRequestsReceived(1); ASSERT_EQ("GET", GetRequest(0).method); @@ -299,7 +324,7 @@ TEST_F(HttpServerTest, Request) { TEST_F(HttpServerTest, RequestBrokenTermination) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send("GET /test HTTP/1.1\r\n\r)"); RunUntilConnectionIdClosed(1); EXPECT_EQ(0u, num_requests()); @@ -308,7 +333,7 @@ TEST_F(HttpServerTest, RequestBrokenTermination) { TEST_F(HttpServerTest, RequestWithHeaders) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); const char* const kHeaders[][3] = { {"Header", ": ", "1"}, {"HeaderWithNoWhitespace", ":", "1"}, @@ -338,7 +363,7 @@ TEST_F(HttpServerTest, RequestWithHeaders) { TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); const char* const kHeaders[][3] = { {"FirstHeader", ": ", "1"}, {"DuplicateHeader", ": ", "2"}, @@ -366,7 +391,7 @@ TEST_F(HttpServerTest, RequestWithDuplicateHeaders) { TEST_F(HttpServerTest, HasHeaderValueTest) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); const char* const kHeaders[] = { "Header: Abcd", "HeaderWithNoWhitespace:E", @@ -403,7 +428,7 @@ TEST_F(HttpServerTest, HasHeaderValueTest) { TEST_F(HttpServerTest, RequestWithBody) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); std::string body = "a" + std::string(1 << 10, 'b') + "c"; client.Send(base::StringPrintf( "GET /test HTTP/1.1\r\n" @@ -420,7 +445,7 @@ TEST_F(HttpServerTest, RequestWithBody) { TEST_F(WebSocketTest, RequestWebSocket) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send( "GET /test HTTP/1.1\r\n" "Upgrade: WebSocket\r\n" @@ -433,7 +458,7 @@ TEST_F(WebSocketTest, RequestWebSocket) { TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send( "GET /test HTTP/1.1\r\n" "Upgrade: WebSocket\r\n" @@ -447,7 +472,7 @@ TEST_F(WebSocketTest, RequestWebSocketTrailingJunk) { TEST_F(HttpServerTest, RequestWithTooLargeBody) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send( "GET /test HTTP/1.1\r\n" "Content-Length: 1073741824\r\n\r\n"); @@ -463,7 +488,7 @@ TEST_F(HttpServerTest, RequestWithTooLargeBody) { TEST_F(HttpServerTest, Send200) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send("GET /test HTTP/1.1\r\n\r\n"); RunUntilRequestsReceived(1); server_->Send200(GetConnectionId(0), "Response!", "text/plain", @@ -479,7 +504,7 @@ TEST_F(HttpServerTest, Send200) { TEST_F(HttpServerTest, SendRaw) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send("GET /test HTTP/1.1\r\n\r\n"); RunUntilRequestsReceived(1); server_->SendRaw(GetConnectionId(0), "Raw Data ", @@ -504,7 +529,7 @@ TEST_F(HttpServerTest, WrongProtocolRequest) { for (size_t i = 0; i < base::size(kBadProtocolRequests); ++i) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send(kBadProtocolRequests[i]); client.ExpectUsedThenDisconnectedWithNoData(); @@ -638,7 +663,7 @@ TEST_F(HttpServerTest, MultipleRequestsOnSameConnection) { // The idea behind this test is that requests with or without bodies should // not break parsing of the next request. TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); std::string body = "body"; client.Send(base::StringPrintf( "GET /test HTTP/1.1\r\n" @@ -698,7 +723,7 @@ class CloseOnConnectHttpServerTest : public HttpServerTest { TEST_F(CloseOnConnectHttpServerTest, ServerImmediatelyClosesConnection) { TestHttpClient client; - ASSERT_THAT(client.ConnectAndWait(server_address_), IsOk()); + CreateConnection(&client); client.Send("GET / HTTP/1.1\r\n\r\n"); // The server should close the socket without responding. |