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 13class GURL; 14 15namespace net { 16class SocketStreamJob; 17class URLRequestContext; 18class SSLInfo; 19} // namespace net 20 21namespace 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. 29class 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