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