websocket_handshake_stream_create_helper.cc 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. #include "net/websockets/websocket_handshake_stream_create_helper.h"
  5. #include <set>
  6. #include <utility>
  7. #include "base/check.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "net/socket/client_socket_handle.h"
  10. #include "net/websockets/websocket_basic_handshake_stream.h"
  11. #include "net/websockets/websocket_http2_handshake_stream.h"
  12. namespace net {
  13. WebSocketHandshakeStreamCreateHelper::WebSocketHandshakeStreamCreateHelper(
  14. WebSocketStream::ConnectDelegate* connect_delegate,
  15. const std::vector<std::string>& requested_subprotocols,
  16. WebSocketStreamRequestAPI* request)
  17. : connect_delegate_(connect_delegate),
  18. requested_subprotocols_(requested_subprotocols),
  19. request_(request) {
  20. DCHECK(connect_delegate_);
  21. DCHECK(request_);
  22. }
  23. WebSocketHandshakeStreamCreateHelper::~WebSocketHandshakeStreamCreateHelper() =
  24. default;
  25. std::unique_ptr<WebSocketHandshakeStreamBase>
  26. WebSocketHandshakeStreamCreateHelper::CreateBasicStream(
  27. std::unique_ptr<ClientSocketHandle> connection,
  28. bool using_proxy,
  29. WebSocketEndpointLockManager* websocket_endpoint_lock_manager) {
  30. // The list of supported extensions and parameters is hard-coded.
  31. // TODO(ricea): If more extensions are added, consider a more flexible
  32. // method.
  33. std::vector<std::string> extensions(
  34. 1, "permessage-deflate; client_max_window_bits");
  35. auto stream = std::make_unique<WebSocketBasicHandshakeStream>(
  36. std::move(connection), connect_delegate_, using_proxy,
  37. requested_subprotocols_, extensions, request_,
  38. websocket_endpoint_lock_manager);
  39. request_->OnBasicHandshakeStreamCreated(stream.get());
  40. return stream;
  41. }
  42. std::unique_ptr<WebSocketHandshakeStreamBase>
  43. WebSocketHandshakeStreamCreateHelper::CreateHttp2Stream(
  44. base::WeakPtr<SpdySession> session,
  45. std::set<std::string> dns_aliases) {
  46. std::vector<std::string> extensions(
  47. 1, "permessage-deflate; client_max_window_bits");
  48. auto stream = std::make_unique<WebSocketHttp2HandshakeStream>(
  49. session, connect_delegate_, requested_subprotocols_, extensions, request_,
  50. std::move(dns_aliases));
  51. request_->OnHttp2HandshakeStreamCreated(stream.get());
  52. return stream;
  53. }
  54. } // namespace net