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