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.
5 #include "content/browser/renderer_host/socket_stream_host.h"
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"
15 const char* kSocketIdKey
= "socketId";
17 class SocketStreamId
: public net::SocketStream::UserData
{
19 explicit SocketStreamId(int socket_id
) : socket_id_(socket_id
) {}
20 virtual ~SocketStreamId() {}
21 int socket_id() const { return socket_id_
; }
29 SocketStreamHost::SocketStreamHost(
30 net::SocketStream::Delegate
* delegate
,
33 : delegate_(delegate
),
34 render_frame_id_(render_frame_id
),
35 socket_id_(socket_id
) {
36 DCHECK_NE(socket_id_
, kNoSocketId
);
37 VLOG(1) << "SocketStreamHost: render_frame_id=" << render_frame_id
38 << " socket_id=" << socket_id_
;
42 int SocketStreamHost::SocketIdFromSocketStream(
43 const net::SocketStream
* socket
) {
44 net::SocketStream::UserData
* d
= socket
->GetUserData(kSocketIdKey
);
46 SocketStreamId
* socket_stream_id
= static_cast<SocketStreamId
*>(d
);
47 return socket_stream_id
->socket_id();
52 SocketStreamHost::~SocketStreamHost() {
53 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_
;
54 job_
->set_context(NULL
);
55 job_
->DetachDelegate();
58 void SocketStreamHost::Connect(const GURL
& url
,
59 net::URLRequestContext
* request_context
) {
60 VLOG(1) << "SocketStreamHost::Connect url=" << url
;
61 job_
= net::SocketStreamJob::CreateSocketStreamJob(
62 url
, delegate_
, request_context
->transport_security_state(),
63 request_context
->ssl_config_service());
64 job_
->set_context(request_context
);
65 job_
->SetUserData(kSocketIdKey
, new SocketStreamId(socket_id_
));
69 bool SocketStreamHost::SendData(const std::vector
<char>& data
) {
70 VLOG(1) << "SocketStreamHost::SendData";
71 return job_
.get() && job_
->SendData(&data
[0], data
.size());
74 void SocketStreamHost::Close() {
75 VLOG(1) << "SocketStreamHost::Close";
81 void SocketStreamHost::CancelWithError(int error
) {
82 VLOG(1) << "SocketStreamHost::CancelWithError: error=" << error
;
85 job_
->CancelWithError(error
);
88 void SocketStreamHost::CancelWithSSLError(const net::SSLInfo
& ssl_info
) {
89 VLOG(1) << "SocketStreamHost::CancelWithSSLError";
92 job_
->CancelWithSSLError(ssl_info
);
95 void SocketStreamHost::ContinueDespiteError() {
96 VLOG(1) << "SocketStreamHost::ContinueDespiteError";
99 job_
->ContinueDespiteError();
102 } // namespace content