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