• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
set_failure_message(std::string * failure_message)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