1 // Copyright 2015 The Chromium Authors. All rights reserved. 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/macros.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 22 class GURL; 23 24 namespace net { 25 26 class HttpRequestHeaders; 27 class HttpResponseHeaders; 28 class IsolationInfo; 29 class URLRequest; 30 class WebSocketStream; 31 class WebSocketStreamRequest; 32 struct WebSocketHandshakeRequestInfo; 33 struct WebSocketHandshakeResponseInfo; 34 35 class WebSocketStreamCreateTestBase : public WithTaskEnvironment { 36 public: 37 using HeaderKeyValuePair = std::pair<std::string, std::string>; 38 39 WebSocketStreamCreateTestBase(); 40 virtual ~WebSocketStreamCreateTestBase(); 41 42 // A wrapper for CreateAndConnectStreamForTesting that knows about our default 43 // parameters. 44 void CreateAndConnectStream(const GURL& socket_url, 45 const std::vector<std::string>& sub_protocols, 46 const url::Origin& origin, 47 const SiteForCookies& site_for_cookies, 48 const IsolationInfo& isolation_info, 49 const HttpRequestHeaders& additional_headers, 50 std::unique_ptr<base::OneShotTimer> timer); 51 52 static std::vector<HeaderKeyValuePair> RequestHeadersToVector( 53 const HttpRequestHeaders& headers); 54 static std::vector<HeaderKeyValuePair> ResponseHeadersToVector( 55 const HttpResponseHeaders& headers); 56 failure_message()57 const std::string& failure_message() const { return failure_message_; } failure_response_code()58 int failure_response_code() const { return failure_response_code_; } has_failed()59 bool has_failed() const { return has_failed_; } 60 61 // Runs |connect_run_loop_|. It will stop when the connection establishes or 62 // fails. 63 void WaitUntilConnectDone(); 64 65 // Runs |run_loop_waiting_for_on_auth_required_| until OnAuthRequired() is 66 // called. 67 void WaitUntilOnAuthRequired(); 68 69 // A simple function to make the tests more readable. 70 std::vector<std::string> NoSubProtocols(); 71 72 protected: 73 WebSocketTestURLRequestContextHost url_request_context_host_; 74 std::unique_ptr<WebSocketStreamRequest> stream_request_; 75 // Only set if the connection succeeded. 76 std::unique_ptr<WebSocketStream> stream_; 77 // Only set if the connection failed. 78 std::string failure_message_; 79 int failure_response_code_ = -1; 80 bool has_failed_; 81 std::unique_ptr<WebSocketHandshakeRequestInfo> request_info_; 82 std::unique_ptr<WebSocketHandshakeResponseInfo> response_info_; 83 std::unique_ptr<WebSocketEventInterface::SSLErrorCallbacks> 84 ssl_error_callbacks_; 85 SSLInfo ssl_info_; 86 bool ssl_fatal_; 87 URLRequest* url_request_; 88 AuthChallengeInfo auth_challenge_info_; 89 base::OnceCallback<void(const AuthCredentials*)> on_auth_required_callback_; 90 91 // This value will be copied to |*credentials| on OnAuthRequired. 92 base::Optional<AuthCredentials> auth_credentials_; 93 // OnAuthRequired returns this value. 94 int on_auth_required_rv_ = OK; 95 96 base::RunLoop connect_run_loop_; 97 98 base::RunLoop run_loop_waiting_for_on_auth_required_; 99 100 private: 101 class TestConnectDelegate; 102 DISALLOW_COPY_AND_ASSIGN(WebSocketStreamCreateTestBase); 103 }; 104 105 } // namespace net 106 107 #endif // NET_WEBSOCKETS_WEBSOCKET_STREAM_CREATE_TEST_BASE_H_ 108