1 // Copyright 2015 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ 6 #define NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ 7 8 #include <memory> 9 #include <string> 10 #include <utility> 11 #include <vector> 12 13 #include "base/memory/raw_ptr.h" 14 #include "base/run_loop.h" 15 #include "base/timer/timer.h" 16 #include "net/socket/socket_test_util.h" 17 #include "net/ssl/ssl_info.h" 18 #include "net/test/test_with_task_environment.h" 19 #include "net/websockets/websocket_event_interface.h" 20 #include "net/websockets/websocket_test_util.h" 21 #include "third_party/abseil-cpp/absl/types/optional.h" 22 23 class GURL; 24 25 namespace net { 26 27 class HttpRequestHeaders; 28 class HttpResponseHeaders; 29 class IsolationInfo; 30 class URLRequest; 31 class WebSocketStream; 32 class WebSocketStreamRequest; 33 struct WebSocketHandshakeRequestInfo; 34 struct WebSocketHandshakeResponseInfo; 35 36 class WebSocketStreamCreateTestBase : public WithTaskEnvironment { 37 public: 38 using HeaderKeyValuePair = std::pair<std::string, std::string>; 39 40 WebSocketStreamCreateTestBase(); 41 42 WebSocketStreamCreateTestBase(const WebSocketStreamCreateTestBase&) = delete; 43 WebSocketStreamCreateTestBase& operator=( 44 const WebSocketStreamCreateTestBase&) = delete; 45 46 virtual ~WebSocketStreamCreateTestBase(); 47 48 // A wrapper for CreateAndConnectStreamForTesting that knows about our default 49 // parameters. 50 void CreateAndConnectStream(const GURL& socket_url, 51 const std::vector<std::string>& sub_protocols, 52 const url::Origin& origin, 53 const SiteForCookies& site_for_cookies, 54 const IsolationInfo& isolation_info, 55 const HttpRequestHeaders& additional_headers, 56 std::unique_ptr<base::OneShotTimer> timer); 57 58 static std::vector<HeaderKeyValuePair> RequestHeadersToVector( 59 const HttpRequestHeaders& headers); 60 static std::vector<HeaderKeyValuePair> ResponseHeadersToVector( 61 const HttpResponseHeaders& headers); 62 failure_message()63 const std::string& failure_message() const { return failure_message_; } failure_response_code()64 int failure_response_code() const { return failure_response_code_; } has_failed()65 bool has_failed() const { return has_failed_; } 66 67 // Runs |connect_run_loop_|. It will stop when the connection establishes or 68 // fails. 69 void WaitUntilConnectDone(); 70 71 // Runs |run_loop_waiting_for_on_auth_required_| until OnAuthRequired() is 72 // called. 73 void WaitUntilOnAuthRequired(); 74 75 // A simple function to make the tests more readable. 76 std::vector<std::string> NoSubProtocols(); 77 78 protected: 79 WebSocketTestURLRequestContextHost url_request_context_host_; 80 std::unique_ptr<WebSocketStreamRequest> stream_request_; 81 // Only set if the connection succeeded. 82 std::unique_ptr<WebSocketStream> stream_; 83 // Only set if the connection failed. 84 std::string failure_message_; 85 int failure_response_code_ = -1; 86 bool has_failed_ = false; 87 std::unique_ptr<WebSocketHandshakeRequestInfo> request_info_; 88 std::unique_ptr<WebSocketHandshakeResponseInfo> response_info_; 89 std::unique_ptr<WebSocketEventInterface::SSLErrorCallbacks> 90 ssl_error_callbacks_; 91 SSLInfo ssl_info_; 92 bool ssl_fatal_ = false; 93 raw_ptr<URLRequest> url_request_ = nullptr; 94 AuthChallengeInfo auth_challenge_info_; 95 base::OnceCallback<void(const AuthCredentials*)> on_auth_required_callback_; 96 97 // This value will be copied to |*credentials| on OnAuthRequired. 98 absl::optional<AuthCredentials> auth_credentials_; 99 // OnAuthRequired returns this value. 100 int on_auth_required_rv_ = OK; 101 102 base::RunLoop connect_run_loop_; 103 104 base::RunLoop run_loop_waiting_for_on_auth_required_; 105 106 private: 107 class TestConnectDelegate; 108 }; 109 110 } // namespace net 111 112 #endif // NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ 113