socket_stream_host.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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#include "content/browser/renderer_host/socket_stream_host.h" 6 7#include "base/logging.h" 8#include "content/common/socket_stream.h" 9#include "net/socket_stream/socket_stream_job.h" 10#include "net/url_request/url_request_context.h" 11 12namespace content { 13namespace { 14 15const char* kSocketIdKey = "socketId"; 16 17class SocketStreamId : public net::SocketStream::UserData { 18 public: 19 explicit SocketStreamId(int socket_id) : socket_id_(socket_id) {} 20 virtual ~SocketStreamId() {} 21 int socket_id() const { return socket_id_; } 22 23 private: 24 int socket_id_; 25}; 26 27} // namespace 28 29SocketStreamHost::SocketStreamHost( 30 net::SocketStream::Delegate* delegate, 31 int render_view_id, 32 int socket_id) 33 : delegate_(delegate), 34 render_view_id_(render_view_id), 35 socket_id_(socket_id) { 36 DCHECK_NE(socket_id_, kNoSocketId); 37 VLOG(1) << "SocketStreamHost: render_view_id=" << render_view_id 38 << " socket_id=" << socket_id_; 39} 40 41/* static */ 42int SocketStreamHost::SocketIdFromSocketStream( 43 const net::SocketStream* socket) { 44 net::SocketStream::UserData* d = socket->GetUserData(kSocketIdKey); 45 if (d) { 46 SocketStreamId* socket_stream_id = static_cast<SocketStreamId*>(d); 47 return socket_stream_id->socket_id(); 48 } 49 return kNoSocketId; 50} 51 52SocketStreamHost::~SocketStreamHost() { 53 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_; 54 socket_->DetachDelegate(); 55} 56 57void SocketStreamHost::Connect(const GURL& url, 58 net::URLRequestContext* request_context) { 59 VLOG(1) << "SocketStreamHost::Connect url=" << url; 60 socket_ = net::SocketStreamJob::CreateSocketStreamJob( 61 url, delegate_, request_context->transport_security_state(), 62 request_context->ssl_config_service()); 63 socket_->set_context(request_context); 64 socket_->SetUserData(kSocketIdKey, new SocketStreamId(socket_id_)); 65 socket_->Connect(); 66} 67 68bool SocketStreamHost::SendData(const std::vector<char>& data) { 69 VLOG(1) << "SocketStreamHost::SendData"; 70 return socket_ && socket_->SendData(&data[0], data.size()); 71} 72 73void SocketStreamHost::Close() { 74 VLOG(1) << "SocketStreamHost::Close"; 75 if (!socket_) 76 return; 77 socket_->Close(); 78} 79 80void SocketStreamHost::CancelWithError(int error) { 81 VLOG(1) << "SocketStreamHost::CancelWithError: error=" << error; 82 if (!socket_) 83 return; 84 socket_->CancelWithError(error); 85} 86 87void SocketStreamHost::CancelWithSSLError(const net::SSLInfo& ssl_info) { 88 VLOG(1) << "SocketStreamHost::CancelWithSSLError"; 89 if (!socket_) 90 return; 91 socket_->CancelWithSSLError(ssl_info); 92} 93 94void SocketStreamHost::ContinueDespiteError() { 95 VLOG(1) << "SocketStreamHost::ContinueDespiteError"; 96 if (!socket_) 97 return; 98 socket_->ContinueDespiteError(); 99} 100 101} // namespace content 102