Home | History | Annotate | Download | only in websockets
      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 <string>
      9 #include <vector>
     10 
     11 #include "base/memory/scoped_ptr.h"
     12 #include "net/base/net_export.h"
     13 #include "net/websockets/websocket_handshake_stream_base.h"
     14 #include "net/websockets/websocket_stream.h"
     15 
     16 namespace net {
     17 
     18 class WebSocketBasicHandshakeStream;
     19 
     20 // Implementation of WebSocketHandshakeStreamBase::CreateHelper. This class is
     21 // used in the implementation of WebSocketStream::CreateAndConnectStream() and
     22 // is not intended to be used by itself.
     23 //
     24 // Holds the information needed to construct a
     25 // WebSocketBasicHandshakeStreamBase.
     26 class NET_EXPORT_PRIVATE WebSocketHandshakeStreamCreateHelper
     27     : public WebSocketHandshakeStreamBase::CreateHelper {
     28  public:
     29   // |connect_delegate| must out-live this object.
     30   explicit WebSocketHandshakeStreamCreateHelper(
     31       WebSocketStream::ConnectDelegate* connect_delegate,
     32       const std::vector<std::string>& requested_subprotocols);
     33 
     34   virtual ~WebSocketHandshakeStreamCreateHelper();
     35 
     36   // WebSocketHandshakeStreamBase::CreateHelper methods
     37 
     38   // Create a WebSocketBasicHandshakeStream.
     39   virtual WebSocketHandshakeStreamBase* CreateBasicStream(
     40       scoped_ptr<ClientSocketHandle> connection,
     41       bool using_proxy) OVERRIDE;
     42 
     43   // Unimplemented as of November 2013.
     44   virtual WebSocketHandshakeStreamBase* CreateSpdyStream(
     45       const base::WeakPtr<SpdySession>& session,
     46       bool use_relative_url) OVERRIDE;
     47 
     48   // Call Upgrade() on the WebSocketHandshakeStream and return the result. This
     49   // must only be called if the handshake succeeded.
     50   scoped_ptr<WebSocketStream> Upgrade();
     51 
     52   // Set a pointer to the std::string into which to write any failure messages
     53   // that are encountered. This method must be called before CreateBasicStream()
     54   // or CreateSpdyStream(). The |failure_message| pointer must remain valid as
     55   // long as this object exists.
     56   void set_failure_message(std::string* failure_message) {
     57     failure_message_ = failure_message;
     58   }
     59 
     60  protected:
     61   // This is used by DeterministicKeyWebSocketHandshakeStreamCreateHelper.
     62   // The default implementation does nothing.
     63   virtual void OnStreamCreated(WebSocketBasicHandshakeStream* stream);
     64 
     65  private:
     66   const std::vector<std::string> requested_subprotocols_;
     67 
     68   // This is owned by the caller of CreateBaseStream() or
     69   // CreateSpdyStream(). Both the stream and this object will be destroyed
     70   // during the destruction of the URLRequest object associated with the
     71   // handshake. This is only guaranteed to be a valid pointer if the handshake
     72   // succeeded.
     73   WebSocketHandshakeStreamBase* stream_;
     74 
     75   WebSocketStream::ConnectDelegate* connect_delegate_;
     76   std::string* failure_message_;
     77 
     78   DISALLOW_COPY_AND_ASSIGN(WebSocketHandshakeStreamCreateHelper);
     79 };
     80 
     81 }  // namespace net
     82 
     83 #endif  // NET_WEBSOCKETS_WEBSOCKET_HANDSHAKE_STREAM_CREATE_HELPER_H_
     84