xref: /aosp_15_r20/external/cronet/net/websockets/websocket_handshake_stream_create_helper.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 #include "net/websockets/websocket_handshake_stream_create_helper.h"
6 
7 #include <set>
8 #include <utility>
9 
10 #include "base/check.h"
11 #include "base/memory/weak_ptr.h"
12 #include "net/socket/client_socket_handle.h"
13 #include "net/websockets/websocket_basic_handshake_stream.h"
14 #include "net/websockets/websocket_http2_handshake_stream.h"
15 #include "net/websockets/websocket_http3_handshake_stream.h"
16 
17 namespace net {
18 
WebSocketHandshakeStreamCreateHelper(WebSocketStream::ConnectDelegate * connect_delegate,const std::vector<std::string> & requested_subprotocols,WebSocketStreamRequestAPI * request)19 WebSocketHandshakeStreamCreateHelper::WebSocketHandshakeStreamCreateHelper(
20     WebSocketStream::ConnectDelegate* connect_delegate,
21     const std::vector<std::string>& requested_subprotocols,
22     WebSocketStreamRequestAPI* request)
23     : connect_delegate_(connect_delegate),
24       requested_subprotocols_(requested_subprotocols),
25       request_(request) {
26   DCHECK(connect_delegate_);
27   DCHECK(request_);
28 }
29 
30 WebSocketHandshakeStreamCreateHelper::~WebSocketHandshakeStreamCreateHelper() =
31     default;
32 
33 std::unique_ptr<WebSocketHandshakeStreamBase>
CreateBasicStream(std::unique_ptr<ClientSocketHandle> connection,bool using_proxy,WebSocketEndpointLockManager * websocket_endpoint_lock_manager)34 WebSocketHandshakeStreamCreateHelper::CreateBasicStream(
35     std::unique_ptr<ClientSocketHandle> connection,
36     bool using_proxy,
37     WebSocketEndpointLockManager* websocket_endpoint_lock_manager) {
38   // The list of supported extensions and parameters is hard-coded.
39   // TODO(ricea): If more extensions are added, consider a more flexible
40   // method.
41   std::vector<std::string> extensions(
42       1, "permessage-deflate; client_max_window_bits");
43   auto stream = std::make_unique<WebSocketBasicHandshakeStream>(
44       std::move(connection), connect_delegate_, using_proxy,
45       requested_subprotocols_, extensions, request_,
46       websocket_endpoint_lock_manager);
47   request_->OnBasicHandshakeStreamCreated(stream.get());
48   return stream;
49 }
50 
51 std::unique_ptr<WebSocketHandshakeStreamBase>
CreateHttp2Stream(base::WeakPtr<SpdySession> session,std::set<std::string> dns_aliases)52 WebSocketHandshakeStreamCreateHelper::CreateHttp2Stream(
53     base::WeakPtr<SpdySession> session,
54     std::set<std::string> dns_aliases) {
55   std::vector<std::string> extensions(
56       1, "permessage-deflate; client_max_window_bits");
57   auto stream = std::make_unique<WebSocketHttp2HandshakeStream>(
58       session, connect_delegate_, requested_subprotocols_, extensions, request_,
59       std::move(dns_aliases));
60   request_->OnHttp2HandshakeStreamCreated(stream.get());
61   return stream;
62 }
63 
64 std::unique_ptr<WebSocketHandshakeStreamBase>
CreateHttp3Stream(std::unique_ptr<QuicChromiumClientSession::Handle> session,std::set<std::string> dns_aliases)65 WebSocketHandshakeStreamCreateHelper::CreateHttp3Stream(
66     std::unique_ptr<QuicChromiumClientSession::Handle> session,
67     std::set<std::string> dns_aliases) {
68   std::vector<std::string> extensions(
69       1, "permessage-deflate; client_max_window_bits");
70 
71   auto stream = std::make_unique<WebSocketHttp3HandshakeStream>(
72       std::move(session), connect_delegate_, requested_subprotocols_,
73       extensions, request_, std::move(dns_aliases));
74   request_->OnHttp3HandshakeStreamCreated(stream.get());
75   return stream;
76 }
77 
78 }  // namespace net
79