OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/renderer_host/socket_stream_host.h" | 5 #include "chrome/browser/renderer_host/socket_stream_host.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "chrome/browser/profiles/profile.h" | 8 #include "chrome/browser/profiles/profile.h" |
9 #include "chrome/common/net/socket_stream.h" | 9 #include "chrome/common/net/socket_stream.h" |
10 #include "chrome/common/net/url_request_context_getter.h" | 10 #include "chrome/common/net/url_request_context_getter.h" |
11 #include "chrome/common/render_messages.h" | |
12 #include "net/socket_stream/socket_stream_job.h" | 11 #include "net/socket_stream/socket_stream_job.h" |
13 | 12 |
14 static const char* kSocketHostKey = "socketHost"; | 13 static const char* kSocketIdKey = "socketId"; |
15 | 14 |
16 class SocketStreamInfo : public net::SocketStream::UserData { | 15 class SocketStreamId : public net::SocketStream::UserData { |
17 public: | 16 public: |
18 explicit SocketStreamInfo(SocketStreamHost* host) : host_(host) {} | 17 explicit SocketStreamId(int socket_id) : socket_id_(socket_id) {} |
19 virtual ~SocketStreamInfo() {} | 18 virtual ~SocketStreamId() {} |
20 SocketStreamHost* host() const { return host_; } | 19 int socket_id() const { return socket_id_; } |
21 | 20 |
22 private: | 21 private: |
23 SocketStreamHost* host_; | 22 int socket_id_; |
24 }; | 23 }; |
25 | 24 |
26 SocketStreamHost::SocketStreamHost( | 25 SocketStreamHost::SocketStreamHost( |
27 net::SocketStream::Delegate* delegate, | 26 net::SocketStream::Delegate* delegate, |
28 ResourceDispatcherHost::Receiver* receiver, | |
29 int socket_id) | 27 int socket_id) |
30 : delegate_(delegate), | 28 : delegate_(delegate), |
31 receiver_(receiver), | |
32 socket_id_(socket_id) { | 29 socket_id_(socket_id) { |
33 DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId); | 30 DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId); |
34 VLOG(1) << "SocketStreamHost: socket_id=" << socket_id_; | 31 VLOG(1) << "SocketStreamHost: socket_id=" << socket_id_; |
35 } | 32 } |
36 | 33 |
37 /* static */ | 34 /* static */ |
38 SocketStreamHost* | 35 int SocketStreamHost::SocketIdFromSocketStream(net::SocketStream* socket) { |
39 SocketStreamHost::GetSocketStreamHost(net::SocketStream* socket) { | 36 net::SocketStream::UserData* d = socket->GetUserData(kSocketIdKey); |
40 net::SocketStream::UserData* d = socket->GetUserData(kSocketHostKey); | |
41 if (d) { | 37 if (d) { |
42 SocketStreamInfo* info = static_cast<SocketStreamInfo*>(d); | 38 SocketStreamId* socket_stream_id = static_cast<SocketStreamId*>(d); |
43 return info->host(); | 39 return socket_stream_id->socket_id(); |
44 } | 40 } |
45 return NULL; | 41 return chrome_common_net::kNoSocketId; |
46 } | 42 } |
47 | 43 |
48 SocketStreamHost::~SocketStreamHost() { | 44 SocketStreamHost::~SocketStreamHost() { |
49 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_; | 45 VLOG(1) << "SocketStreamHost destructed socket_id=" << socket_id_; |
50 if (!receiver_->Send(new ViewMsg_SocketStream_Closed(socket_id_))) | |
51 LOG(ERROR) << "ViewMsg_SocketStream_Closed failed."; | |
52 socket_->DetachDelegate(); | 46 socket_->DetachDelegate(); |
53 } | 47 } |
54 | 48 |
55 void SocketStreamHost::Connect(const GURL& url) { | 49 void SocketStreamHost::Connect(const GURL& url) { |
56 VLOG(1) << "SocketStreamHost::Connect url=" << url; | 50 VLOG(1) << "SocketStreamHost::Connect url=" << url; |
57 socket_ = net::SocketStreamJob::CreateSocketStreamJob(url, delegate_); | 51 socket_ = net::SocketStreamJob::CreateSocketStreamJob(url, delegate_); |
58 URLRequestContextGetter* context_getter = Profile::GetDefaultRequestContext(); | 52 URLRequestContextGetter* context_getter = Profile::GetDefaultRequestContext(); |
59 if (context_getter) | 53 if (context_getter) |
60 socket_->set_context(context_getter->GetURLRequestContext()); | 54 socket_->set_context(context_getter->GetURLRequestContext()); |
61 socket_->SetUserData(kSocketHostKey, new SocketStreamInfo(this)); | 55 socket_->SetUserData(kSocketIdKey, new SocketStreamId(socket_id_)); |
62 socket_->Connect(); | 56 socket_->Connect(); |
63 } | 57 } |
64 | 58 |
65 bool SocketStreamHost::SendData(const std::vector<char>& data) { | 59 bool SocketStreamHost::SendData(const std::vector<char>& data) { |
66 VLOG(1) << "SocketStreamHost::SendData"; | 60 VLOG(1) << "SocketStreamHost::SendData"; |
67 return socket_ && socket_->SendData(&data[0], data.size()); | 61 return socket_ && socket_->SendData(&data[0], data.size()); |
68 } | 62 } |
69 | 63 |
70 void SocketStreamHost::Close() { | 64 void SocketStreamHost::Close() { |
71 VLOG(1) << "SocketStreamHost::Close"; | 65 VLOG(1) << "SocketStreamHost::Close"; |
72 if (!socket_) | 66 if (!socket_) |
73 return; | 67 return; |
74 socket_->Close(); | 68 socket_->Close(); |
75 } | 69 } |
76 | |
77 bool SocketStreamHost::Connected(int max_pending_send_allowed) { | |
78 return receiver_->Send(new ViewMsg_SocketStream_Connected( | |
79 socket_id_, max_pending_send_allowed)); | |
80 } | |
81 | |
82 bool SocketStreamHost::SentData(int amount_sent) { | |
83 return receiver_->Send(new ViewMsg_SocketStream_SentData( | |
84 socket_id_, amount_sent)); | |
85 } | |
86 | |
87 bool SocketStreamHost::ReceivedData(const char* data, int len) { | |
88 return receiver_->Send(new ViewMsg_SocketStream_ReceivedData( | |
89 socket_id_, std::vector<char>(data, data + len))); | |
90 } | |
OLD | NEW |