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