1 // Copyright (c) 2012 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 CONTENT_BROWSER_RENDERER_HOST_SOCKET_STREAM_HOST_H_ 6 #define CONTENT_BROWSER_RENDERER_HOST_SOCKET_STREAM_HOST_H_ 7 8 #include <vector> 9 10 #include "base/memory/ref_counted.h" 11 #include "net/socket_stream/socket_stream.h" 12 13 class GURL; 14 15 namespace net { 16 class SocketStreamJob; 17 class URLRequestContext; 18 class SSLInfo; 19 } // namespace net 20 21 namespace content { 22 23 // Host of SocketStreamHandle. Each SocketStreamHandle will have an unique 24 // socket_id assigned by SocketStreamHost constructor. If socket id is 25 // kNoSocketId, there is no SocketStreamHost. Each SocketStreamHost has 26 // SocketStream to manage bi-directional communication over socket stream. The 27 // lifetime of an instance of this class is completely controlled by the 28 // SocketStreamDispatcherHost. 29 class SocketStreamHost { 30 public: 31 SocketStreamHost(net::SocketStream::Delegate* delegate, 32 int child_id, 33 int render_frame_id, 34 int socket_id); 35 ~SocketStreamHost(); 36 37 // Gets socket_id associated with |socket|. 38 static int SocketIdFromSocketStream(const net::SocketStream* socket); 39 40 int render_frame_id() const { return render_frame_id_; } 41 int socket_id() const { return socket_id_; } 42 43 // Starts to open connection to |url|. 44 void Connect(const GURL& url, net::URLRequestContext* request_context); 45 46 // Sends |data| over the socket stream. 47 // socket stream must be open to send data. 48 // Returns true if the data is put in transmit buffer in socket stream. 49 // Returns false otherwise (transmit buffer exceeds limit, or socket 50 // stream is closed). 51 bool SendData(const std::vector<char>& data); 52 53 // Closes the socket stream. 54 void Close(); 55 56 // Following CancelWithError, CancelWithSSLError, and ContinueDespiteError 57 // will be called by net::SocketStream::Delegate in OnSSLCertificateError. 58 // CancelWithError Cancels the connection because of an error. 59 // |error| is net::Error which represents the error. 60 void CancelWithError(int error); 61 62 // Cancels the connection because of receiving a certificate with an error. 63 void CancelWithSSLError(const net::SSLInfo& ssl_info); 64 65 // Continue to establish the connection in spite of an error. 66 void ContinueDespiteError(); 67 68 private: 69 net::SocketStream::Delegate* delegate_; 70 int child_id_; 71 int render_frame_id_; 72 int socket_id_; 73 74 scoped_refptr<net::SocketStreamJob> job_; 75 76 DISALLOW_COPY_AND_ASSIGN(SocketStreamHost); 77 }; 78 79 } // namespace content 80 81 #endif // CONTENT_BROWSER_RENDERER_HOST_SOCKET_STREAM_HOST_H_ 82