socket_stream_host.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
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 render_view_id, 33 int socket_id); 34 ~SocketStreamHost(); 35 36 // Gets socket_id associated with |socket|. 37 static int SocketIdFromSocketStream(const net::SocketStream* socket); 38 39 int render_view_id() const { return render_view_id_; } 40 int socket_id() const { return socket_id_; } 41 42 // Starts to open connection to |url|. 43 void Connect(const GURL& url, net::URLRequestContext* request_context); 44 45 // Sends |data| over the socket stream. 46 // socket stream must be open to send data. 47 // Returns true if the data is put in transmit buffer in socket stream. 48 // Returns false otherwise (transmit buffer exceeds limit, or socket 49 // stream is closed). 50 bool SendData(const std::vector<char>& data); 51 52 // Closes the socket stream. 53 void Close(); 54 55 // Following CancelWithError, CancelWithSSLError, and ContinueDespiteError 56 // will be called by net::SocketStream::Delegate in OnSSLCertificateError. 57 // CancelWithError Cancels the connection because of an error. 58 // |error| is net::Error which represents the error. 59 void CancelWithError(int error); 60 61 // Cancels the connection because of receiving a certificate with an error. 62 void CancelWithSSLError(const net::SSLInfo& ssl_info); 63 64 // Continue to establish the connection in spite of an error. 65 void ContinueDespiteError(); 66 67 private: 68 net::SocketStream::Delegate* delegate_; 69 int render_view_id_; 70 int socket_id_; 71 72 scoped_refptr<net::SocketStreamJob> job_; 73 74 DISALLOW_COPY_AND_ASSIGN(SocketStreamHost); 75}; 76 77} // namespace content 78 79#endif // CONTENT_BROWSER_RENDERER_HOST_SOCKET_STREAM_HOST_H_ 80