// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_ #define NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_ #include #include #include #include "base/macros.h" #include "net/base/net_export.h" #include "net/websockets/websocket_handshake_stream_base.h" #include "net/websockets/websocket_stream.h" namespace net { class WebSocketStreamRequest; class WebSocketBasicHandshakeStream; // Implementation of WebSocketHandshakeStreamBase::CreateHelper. This class is // used in the implementation of WebSocketStream::CreateAndConnectStream() and // is not intended to be used by itself. // // Holds the information needed to construct a // WebSocketBasicHandshakeStreamBase. class NET_EXPORT_PRIVATE WebSocketHandshakeStreamCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper { public: // |connect_delegate| must out-live this object. explicit WebSocketHandshakeStreamCreateHelper( WebSocketStream::ConnectDelegate* connect_delegate, const std::vector& requested_subprotocols); ~WebSocketHandshakeStreamCreateHelper() override; // WebSocketHandshakeStreamBase::CreateHelper methods // Creates a WebSocketBasicHandshakeStream. std::unique_ptr CreateBasicStream( std::unique_ptr connection, bool using_proxy) override; // WebSocketHandshakeStreamCreateHelper methods // This method must be called before CreateBasicStream(). // The |request| pointer must remain valid as long as this object exists. void set_stream_request(WebSocketStreamRequest* request) { request_ = request; } protected: // This is used by DeterministicKeyWebSocketHandshakeStreamCreateHelper. // The default implementation does nothing. virtual void OnBasicStreamCreated(WebSocketBasicHandshakeStream* stream); private: const std::vector requested_subprotocols_; WebSocketStream::ConnectDelegate* connect_delegate_; WebSocketStreamRequest* request_; DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeStreamCreateHelper); }; } // namespace net #endif // NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_