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