• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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