xref: /aosp_15_r20/external/cronet/net/websockets/websocket_handshake_stream_create_helper.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2013 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_HANDSHAKE_STREAM_CREATE_HELPER_H_
6 #define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_
7 
8 #include <memory>
9 #include <set>
10 #include <string>
11 #include <vector>
12 
13 #include "base/memory/raw_ptr.h"
14 #include "base/memory/weak_ptr.h"
15 #include "net/base/net_export.h"
16 #include "net/quic/quic_chromium_client_session.h"
17 #include "net/websockets/websocket_handshake_stream_base.h"
18 #include "net/websockets/websocket_stream.h"
19 
20 namespace net {
21 
22 class WebSocketStreamRequestAPI;
23 class SpdySession;
24 class WebSocketBasicHandshakeStream;
25 class WebSocketEndpointLockManager;
26 class ClientSocketHandle;
27 
28 // Implementation of WebSocketHandshakeStreamBase::CreateHelper. This class is
29 // used in the implementation of WebSocketStream::CreateAndConnectStream() and
30 // is not intended to be used by itself.
31 //
32 // Holds the information needed to construct a
33 // WebSocketBasicHandshakeStreamBase.
34 class NET_EXPORT_PRIVATE WebSocketHandshakeStreamCreateHelper
35     : public WebSocketHandshakeStreamBase::CreateHelper {
36  public:
37   // |*connect_delegate| and |*request| must out-live this object.
38   WebSocketHandshakeStreamCreateHelper(
39       WebSocketStream::ConnectDelegate* connect_delegate,
40       const std::vector<std::string>& requested_subprotocols,
41       WebSocketStreamRequestAPI* request);
42 
43   WebSocketHandshakeStreamCreateHelper(
44       const WebSocketHandshakeStreamCreateHelper&) = delete;
45   WebSocketHandshakeStreamCreateHelper& operator=(
46       const WebSocketHandshakeStreamCreateHelper&) = delete;
47 
48   ~WebSocketHandshakeStreamCreateHelper() override;
49 
50   // WebSocketHandshakeStreamBase::CreateHelper methods
51 
52   // Creates a WebSocketBasicHandshakeStream over a TCP/IP or TLS socket.
53   std::unique_ptr<WebSocketHandshakeStreamBase> CreateBasicStream(
54       std::unique_ptr<ClientSocketHandle> connection,
55       bool using_proxy,
56       WebSocketEndpointLockManager* websocket_endpoint_lock_manager) override;
57 
58   // Creates a WebSocketHttp2HandshakeStream over an HTTP/2 connection.
59   std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp2Stream(
60       base::WeakPtr<SpdySession> session,
61       std::set<std::string> dns_aliases) override;
62 
63   std::unique_ptr<WebSocketHandshakeStreamBase> CreateHttp3Stream(
64       std::unique_ptr<QuicChromiumClientSession::Handle> session,
65       std::set<std::string> dns_aliases) override;
66 
67  private:
68   const raw_ptr<WebSocketStream::ConnectDelegate, DanglingUntriaged>
69       connect_delegate_;
70   const std::vector<std::string> requested_subprotocols_;
71   const raw_ptr<WebSocketStreamRequestAPI, DanglingUntriaged> request_;
72 };
73 
74 }  // namespace net
75 
76 #endif  // NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_
77