summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/renderer_host/resource_dispatcher_host.cc8
-rw-r--r--chrome/browser/renderer_host/resource_dispatcher_host.h3
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.cc7
-rw-r--r--chrome/browser/renderer_host/resource_message_filter.h4
-rw-r--r--chrome/browser/renderer_host/socket_stream_dispatcher_host.cc147
-rw-r--r--chrome/browser/renderer_host/socket_stream_dispatcher_host.h28
-rw-r--r--chrome/browser/renderer_host/socket_stream_host.cc50
-rw-r--r--chrome/browser/renderer_host/socket_stream_host.h17
8 files changed, 181 insertions, 83 deletions
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.cc b/chrome/browser/renderer_host/resource_dispatcher_host.cc
index a4bd156..4bce18a 100644
--- a/chrome/browser/renderer_host/resource_dispatcher_host.cc
+++ b/chrome/browser/renderer_host/resource_dispatcher_host.cc
@@ -40,6 +40,7 @@
#include "chrome/browser/renderer_host/resource_request_details.h"
#include "chrome/browser/renderer_host/safe_browsing_resource_handler.h"
#include "chrome/browser/renderer_host/save_file_resource_handler.h"
+#include "chrome/browser/renderer_host/socket_stream_dispatcher_host.h"
#include "chrome/browser/renderer_host/sync_resource_handler.h"
#include "chrome/browser/safe_browsing/safe_browsing_service.h"
#include "chrome/browser/ssl/ssl_client_auth_handler.h"
@@ -249,6 +250,7 @@ ResourceDispatcherHost::ResourceDispatcherHost()
ALLOW_THIS_IN_INITIALIZER_LIST(user_script_listener_(
new UserScriptListener(this))),
safe_browsing_(new SafeBrowsingService),
+ socket_stream_dispatcher_host_(new SocketStreamDispatcherHost),
webkit_thread_(new WebKitThread),
request_id_(-1),
ALLOW_THIS_IN_INITIALIZER_LIST(method_runner_(this)),
@@ -336,8 +338,10 @@ bool ResourceDispatcherHost::HandleExternalProtocol(int request_id,
bool ResourceDispatcherHost::OnMessageReceived(const IPC::Message& message,
Receiver* receiver,
bool* message_was_ok) {
- if (!IsResourceDispatcherHostMessage(message))
- return false;
+ if (!IsResourceDispatcherHostMessage(message)) {
+ return socket_stream_dispatcher_host_->OnMessageReceived(
+ message, receiver, message_was_ok);
+ }
*message_was_ok = true;
receiver_ = receiver;
diff --git a/chrome/browser/renderer_host/resource_dispatcher_host.h b/chrome/browser/renderer_host/resource_dispatcher_host.h
index efdd741..a48cebe 100644
--- a/chrome/browser/renderer_host/resource_dispatcher_host.h
+++ b/chrome/browser/renderer_host/resource_dispatcher_host.h
@@ -36,6 +36,7 @@ class ResourceDispatcherHostRequestInfo;
class ResourceHandler;
class SafeBrowsingService;
class SaveFileManager;
+class SocketStreamDispatcherHost;
class SSLClientAuthHandler;
class UserScriptListener;
class URLRequestContext;
@@ -426,6 +427,8 @@ class ResourceDispatcherHost : public URLRequest::Delegate {
scoped_refptr<SafeBrowsingService> safe_browsing_;
+ scoped_ptr<SocketStreamDispatcherHost> socket_stream_dispatcher_host_;
+
// We own the WebKit thread and see to its destruction.
scoped_ptr<WebKitThread> webkit_thread_;
diff --git a/chrome/browser/renderer_host/resource_message_filter.cc b/chrome/browser/renderer_host/resource_message_filter.cc
index 81aefa6..1f623a3 100644
--- a/chrome/browser/renderer_host/resource_message_filter.cc
+++ b/chrome/browser/renderer_host/resource_message_filter.cc
@@ -31,7 +31,6 @@
#include "chrome/browser/renderer_host/browser_render_process_host.h"
#include "chrome/browser/renderer_host/database_dispatcher_host.h"
#include "chrome/browser/renderer_host/render_widget_helper.h"
-#include "chrome/browser/renderer_host/socket_stream_dispatcher_host.h"
#include "chrome/browser/spellchecker_platform_engine.h"
#include "chrome/browser/task_manager.h"
#include "chrome/browser/worker_host/message_port_dispatcher.h"
@@ -173,7 +172,6 @@ ResourceMessageFilter::ResourceMessageFilter(
new DatabaseDispatcherHost(profile->GetDatabaseTracker(), this))),
notification_prefs_(
profile->GetDesktopNotificationService()->prefs_cache()),
- socket_stream_dispatcher_host_(new SocketStreamDispatcherHost),
host_zoom_map_(profile->GetHostZoomMap()),
off_the_record_(profile->IsOffTheRecord()),
next_route_id_callback_(NewCallbackWithReturnValue(
@@ -183,7 +181,6 @@ ResourceMessageFilter::ResourceMessageFilter(
DCHECK(audio_renderer_host_.get());
DCHECK(appcache_dispatcher_host_.get());
DCHECK(dom_storage_dispatcher_host_.get());
- DCHECK(socket_stream_dispatcher_host_.get());
render_widget_helper_->Init(id(), resource_dispatcher_host_);
}
@@ -234,7 +231,6 @@ void ResourceMessageFilter::OnChannelConnected(int32 peer_pid) {
WorkerService::GetInstance()->Initialize(resource_dispatcher_host_);
appcache_dispatcher_host_->Initialize(this, id(), handle());
- socket_stream_dispatcher_host_->Initialize(this, id());
dom_storage_dispatcher_host_->Init(handle());
db_dispatcher_host_->Init(handle());
}
@@ -269,8 +265,7 @@ bool ResourceMessageFilter::OnMessageReceived(const IPC::Message& msg) {
audio_renderer_host_->OnMessageReceived(msg, &msg_is_ok) ||
db_dispatcher_host_->OnMessageReceived(msg, &msg_is_ok) ||
mp_dispatcher->OnMessageReceived(
- msg, this, next_route_id_callback(), &msg_is_ok) ||
- socket_stream_dispatcher_host_->OnMessageReceived(msg, &msg_is_ok);
+ msg, this, next_route_id_callback(), &msg_is_ok);
if (!handled) {
DCHECK(msg_is_ok); // It should have been marked handled if it wasn't OK.
diff --git a/chrome/browser/renderer_host/resource_message_filter.h b/chrome/browser/renderer_host/resource_message_filter.h
index 7d5d137..b40dcb3 100644
--- a/chrome/browser/renderer_host/resource_message_filter.h
+++ b/chrome/browser/renderer_host/resource_message_filter.h
@@ -40,7 +40,6 @@ class HostZoomMap;
class NotificationsPrefsCache;
class Profile;
class RenderWidgetHelper;
-class SocketStreamDispatcherHost;
class URLRequestContextGetter;
struct ViewHostMsg_Audio_CreateStream;
struct WebPluginInfo;
@@ -373,9 +372,6 @@ class ResourceMessageFilter : public IPC::ChannelProxy::MessageFilter,
// Desktop Notifications permission messages.
scoped_refptr<NotificationsPrefsCache> notification_prefs_;
- // Handles Socket Stream related messages.
- scoped_ptr<SocketStreamDispatcherHost> socket_stream_dispatcher_host_;
-
// Handles zoom-related messages.
scoped_refptr<HostZoomMap> host_zoom_map_;
diff --git a/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc b/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
index 68f7d4f..a993683 100644
--- a/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
+++ b/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
@@ -11,50 +11,58 @@
#include "ipc/ipc_message.h"
#include "net/websockets/websocket_throttle.h"
-SocketStreamDispatcherHost::SocketStreamDispatcherHost()
- : sender_(NULL) {
+SocketStreamDispatcherHost::SocketStreamDispatcherHost() : receiver_(NULL) {
net::WebSocketThrottle::Init();
}
SocketStreamDispatcherHost::~SocketStreamDispatcherHost() {
// TODO(ukai): Implement IDMap::RemoveAll().
- for (IDMap<SocketStreamHost>::const_iterator iter(&hosts_);
+ for (IDMap< IDMap<SocketStreamHost> >::const_iterator iter(&hostmap_);
!iter.IsAtEnd();
iter.Advance()) {
- int socket_id = iter.GetCurrentKey();
- const SocketStreamHost* socket_stream_host = iter.GetCurrentValue();
- delete socket_stream_host;
- hosts_.Remove(socket_id);
+ int host_id = iter.GetCurrentKey();
+ IDMap<SocketStreamHost>* hosts =
+ const_cast<IDMap<SocketStreamHost> *>(iter.GetCurrentValue());
+ for (IDMap<SocketStreamHost>::const_iterator hosts_iter(hosts);
+ !hosts_iter.IsAtEnd();
+ hosts_iter.Advance()) {
+ int socket_id = iter.GetCurrentKey();
+ const SocketStreamHost* socket_stream_host = hosts_iter.GetCurrentValue();
+ delete socket_stream_host;
+ hosts->Remove(socket_id);
+ }
+ hostmap_.Remove(host_id);
+ delete hosts;
}
}
-void SocketStreamDispatcherHost::Initialize(
- IPC::Message::Sender* sender, int process_id) {
- DLOG(INFO) << "Initialize: SocketStreamDispatcherHost process_id="
- << process_id;
- DCHECK(sender);
- sender_ = sender;
- process_id_ = process_id;
-}
+bool SocketStreamDispatcherHost::OnMessageReceived(
+ const IPC::Message& msg,
+ ResourceDispatcherHost::Receiver* receiver,
+ bool* msg_ok) {
+ if (!IsSocketStreamDispatcherHostMessage(msg))
+ return false;
-bool SocketStreamDispatcherHost::OnMessageReceived(const IPC::Message& msg,
- bool* msg_ok) {
- DCHECK(sender_);
*msg_ok = true;
bool handled = true;
+ receiver_ = receiver;
IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, msg, *msg_ok)
IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Connect, OnConnect)
IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_SendData, OnSendData)
IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Close, OnCloseReq)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP_EX()
+ receiver_ = NULL;
return handled;
}
// SocketStream::Delegate methods implementations.
void SocketStreamDispatcherHost::OnConnected(net::SocketStream* socket,
int max_pending_send_allowed) {
- int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ SocketStreamHost* socket_stream_host =
+ SocketStreamHost::GetSocketStreamHost(socket);
+ DCHECK(socket_stream_host);
+ int socket_id = socket_stream_host->socket_id();
DLOG(INFO) << "SocketStreamDispatcherHost::OnConnected socket_id="
<< socket_id
<< " max_pending_send_allowed=" << max_pending_send_allowed;
@@ -62,16 +70,18 @@ void SocketStreamDispatcherHost::OnConnected(net::SocketStream* socket,
LOG(ERROR) << "NoSocketId in OnConnected";
return;
}
- if (!sender_->Send(new ViewMsg_SocketStream_Connected(
- socket_id, max_pending_send_allowed))) {
+ if (!socket_stream_host->Connected(max_pending_send_allowed)) {
LOG(ERROR) << "ViewMsg_SocketStream_Connected failed.";
- DeleteSocketStreamHost(socket_id);
+ DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
}
}
void SocketStreamDispatcherHost::OnSentData(net::SocketStream* socket,
int amount_sent) {
- int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ SocketStreamHost* socket_stream_host =
+ SocketStreamHost::GetSocketStreamHost(socket);
+ DCHECK(socket_stream_host);
+ int socket_id = socket_stream_host->socket_id();
DLOG(INFO) << "SocketStreamDispatcherHost::OnSentData socket_id="
<< socket_id
<< " amount_sent=" << amount_sent;
@@ -79,38 +89,42 @@ void SocketStreamDispatcherHost::OnSentData(net::SocketStream* socket,
LOG(ERROR) << "NoSocketId in OnReceivedData";
return;
}
- if (!sender_->Send(
- new ViewMsg_SocketStream_SentData(socket_id, amount_sent))) {
+ if (!socket_stream_host->SentData(amount_sent)) {
LOG(ERROR) << "ViewMsg_SocketStream_SentData failed.";
- DeleteSocketStreamHost(socket_id);
+ DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
}
}
void SocketStreamDispatcherHost::OnReceivedData(
net::SocketStream* socket, const char* data, int len) {
- int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ SocketStreamHost* socket_stream_host =
+ SocketStreamHost::GetSocketStreamHost(socket);
+ DCHECK(socket_stream_host);
+ int socket_id = socket_stream_host->socket_id();
DLOG(INFO) << "SocketStreamDispatcherHost::OnReceiveData socket_id="
<< socket_id;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnReceivedData";
return;
}
- if (!sender_->Send(new ViewMsg_SocketStream_ReceivedData(
- socket_id, std::vector<char>(data, data + len)))) {
+ if (!socket_stream_host->ReceivedData(data, len)) {
LOG(ERROR) << "ViewMsg_SocketStream_ReceivedData failed.";
- DeleteSocketStreamHost(socket_id);
+ DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
}
}
void SocketStreamDispatcherHost::OnClose(net::SocketStream* socket) {
- int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ SocketStreamHost* socket_stream_host =
+ SocketStreamHost::GetSocketStreamHost(socket);
+ DCHECK(socket_stream_host);
+ int socket_id = socket_stream_host->socket_id();
DLOG(INFO) << "SocketStreamDispatcherHost::OnClosed socket_id="
<< socket_id;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnClose";
return;
}
- DeleteSocketStreamHost(socket_id);
+ DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
}
// Message handlers called by OnMessageReceived.
@@ -118,12 +132,15 @@ void SocketStreamDispatcherHost::OnConnect(const GURL& url, int socket_id) {
DLOG(INFO) << "SocketStreamDispatcherHost::OnConnect url=" << url
<< " socket_id=" << socket_id;
DCHECK_NE(chrome_common_net::kNoSocketId, socket_id);
- if (hosts_.Lookup(socket_id)) {
- LOG(ERROR) << "socket_id=" << socket_id << " already registered.";
+ DCHECK(receiver_);
+ if (LookupHostMap(receiver_->id(), socket_id)) {
+ LOG(ERROR) << "host_id=" << receiver_->id()
+ << " socket_id=" << socket_id << " already registered.";
return;
}
- SocketStreamHost* socket_stream_host = new SocketStreamHost(this, socket_id);
- hosts_.AddWithID(socket_stream_host, socket_id);
+ SocketStreamHost* socket_stream_host =
+ new SocketStreamHost(this, receiver_, socket_id);
+ AddHostMap(receiver_->id(), socket_id, socket_stream_host);
socket_stream_host->Connect(url);
DLOG(INFO) << "SocketStreamDispatcherHost::OnConnect -> " << socket_id;
}
@@ -132,9 +149,12 @@ void SocketStreamDispatcherHost::OnSendData(
int socket_id, const std::vector<char>& data) {
DLOG(INFO) << "SocketStreamDispatcherHost::OnSendData socket_id="
<< socket_id;
- SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ DCHECK(receiver_);
+ SocketStreamHost* socket_stream_host =
+ LookupHostMap(receiver_->id(), socket_id);
if (!socket_stream_host) {
- LOG(ERROR) << "socket_id=" << socket_id << " already closed.";
+ LOG(ERROR) << "host_id=" << receiver_->id()
+ << " socket_id=" << socket_id << " already closed.";
return;
}
if (!socket_stream_host->SendData(data)) {
@@ -146,18 +166,57 @@ void SocketStreamDispatcherHost::OnSendData(
void SocketStreamDispatcherHost::OnCloseReq(int socket_id) {
DLOG(INFO) << "SocketStreamDispatcherHost::OnCloseReq socket_id="
<< socket_id;
- SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ DCHECK(receiver_);
+ SocketStreamHost* socket_stream_host =
+ LookupHostMap(receiver_->id(), socket_id);
if (!socket_stream_host)
return;
socket_stream_host->Close();
}
-void SocketStreamDispatcherHost::DeleteSocketStreamHost(int socket_id) {
- SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+void SocketStreamDispatcherHost::DeleteSocketStreamHost(
+ int host_id, int socket_id) {
+ SocketStreamHost* socket_stream_host = LookupHostMap(host_id, socket_id);
DCHECK(socket_stream_host);
delete socket_stream_host;
- hosts_.Remove(socket_id);
- if (!sender_->Send(new ViewMsg_SocketStream_Closed(socket_id))) {
- LOG(ERROR) << "ViewMsg_SocketStream_Closed failed.";
+ IDMap<SocketStreamHost>* hosts = hostmap_.Lookup(host_id);
+ DCHECK(hosts);
+ hosts->Remove(socket_id);
+ if (hosts->IsEmpty()) {
+ hostmap_.Remove(host_id);
+ delete hosts;
+ }
+}
+
+void SocketStreamDispatcherHost::AddHostMap(
+ int host_id, int socket_id, SocketStreamHost* socket_stream_host) {
+ IDMap<SocketStreamHost>* hosts = hostmap_.Lookup(host_id);
+ if (!hosts) {
+ hosts = new IDMap<SocketStreamHost>;
+ hostmap_.AddWithID(hosts, host_id);
+ }
+ hosts->AddWithID(socket_stream_host, socket_id);
+}
+
+SocketStreamHost* SocketStreamDispatcherHost::LookupHostMap(
+ int host_id, int socket_id) {
+ IDMap<SocketStreamHost>* hosts = hostmap_.Lookup(host_id);
+ if (!hosts)
+ return NULL;
+ return hosts->Lookup(socket_id);
+}
+
+/* static */
+bool SocketStreamDispatcherHost::IsSocketStreamDispatcherHostMessage(
+ const IPC::Message& message) {
+ switch (message.type()) {
+ case ViewHostMsg_SocketStream_Connect::ID:
+ case ViewHostMsg_SocketStream_SendData::ID:
+ case ViewHostMsg_SocketStream_Close::ID:
+ return true;
+
+ default:
+ break;
}
+ return false;
}
diff --git a/chrome/browser/renderer_host/socket_stream_dispatcher_host.h b/chrome/browser/renderer_host/socket_stream_dispatcher_host.h
index 58bfaaa..01297ff 100644
--- a/chrome/browser/renderer_host/socket_stream_dispatcher_host.h
+++ b/chrome/browser/renderer_host/socket_stream_dispatcher_host.h
@@ -8,6 +8,7 @@
#include <vector>
#include "base/id_map.h"
+#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "ipc/ipc_message.h"
#include "net/socket_stream/socket_stream.h"
@@ -22,8 +23,9 @@ class SocketStreamDispatcherHost : public net::SocketStream::Delegate {
SocketStreamDispatcherHost();
virtual ~SocketStreamDispatcherHost();
- void Initialize(IPC::Message::Sender* sender, int process_id);
- bool OnMessageReceived(const IPC::Message& msg, bool* msg_ok);
+ bool OnMessageReceived(const IPC::Message& msg,
+ ResourceDispatcherHost::Receiver* receiver,
+ bool* msg_ok);
// SocketStream::Delegate methods.
virtual void OnConnected(net::SocketStream* socket,
@@ -33,22 +35,26 @@ class SocketStreamDispatcherHost : public net::SocketStream::Delegate {
const char* data, int len);
virtual void OnClose(net::SocketStream* socket);
- // For sync message.
- bool Send(IPC::Message* message) {
- return sender_->Send(message);
- }
-
private:
// Message handlers called by OnMessageReceived.
void OnConnect(const GURL& url, int socket_id);
void OnSendData(int socket_id, const std::vector<char>& data);
void OnCloseReq(int socket_id);
- void DeleteSocketStreamHost(int socket_id);
+ void DeleteSocketStreamHost(int host_id, int socket_id);
+
+ void AddHostMap(int host_id, int socket_id,
+ SocketStreamHost* socket_stream_host);
+ SocketStreamHost* LookupHostMap(int host_id, int socket_id);
+
+ // Returns true if the message passed in is a SocketStream related message.
+ static bool IsSocketStreamDispatcherHostMessage(const IPC::Message& message);
+
+ // key: host_id -> { key: socket_id -> value: SocketStreamHost }
+ IDMap< IDMap<SocketStreamHost> > hostmap_;
- IPC::Message::Sender* sender_;
- int process_id_;
- IDMap<SocketStreamHost> hosts_;
+ // valid while OnMessageReceived processing.
+ ResourceDispatcherHost::Receiver* receiver_;
DISALLOW_COPY_AND_ASSIGN(SocketStreamDispatcherHost);
};
diff --git a/chrome/browser/renderer_host/socket_stream_host.cc b/chrome/browser/renderer_host/socket_stream_host.cc
index 864cbf2..6fc49b4 100644
--- a/chrome/browser/renderer_host/socket_stream_host.cc
+++ b/chrome/browser/renderer_host/socket_stream_host.cc
@@ -8,39 +8,48 @@
#include "chrome/browser/profile.h"
#include "chrome/browser/net/url_request_context_getter.h"
#include "chrome/common/net/socket_stream.h"
+#include "chrome/common/render_messages.h"
#include "net/socket_stream/socket_stream.h"
-static const char* kSocketIdKey = "socketId";
+static const char* kSocketHostKey = "socketHost";
-class SocketStreamId : public net::SocketStream::UserData {
+class SocketStreamInfo : public net::SocketStream::UserData {
public:
- explicit SocketStreamId(int socket_id) : socket_id_(socket_id) {}
- virtual ~SocketStreamId() {}
- int socket_id() const { return socket_id_; }
+ explicit SocketStreamInfo(SocketStreamHost* host) : host_(host) {}
+ virtual ~SocketStreamInfo() {}
+ SocketStreamHost* host() const { return host_; }
+
private:
- int socket_id_;
+ SocketStreamHost* host_;
};
SocketStreamHost::SocketStreamHost(
- net::SocketStream::Delegate* delegate, int socket_id)
+ net::SocketStream::Delegate* delegate,
+ ResourceDispatcherHost::Receiver* receiver,
+ int socket_id)
: delegate_(delegate),
+ receiver_(receiver),
socket_id_(socket_id) {
DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId);
LOG(INFO) << "SocketStreamHost: socket_id=" << socket_id_;
}
/* static */
-int SocketStreamHost::SocketIdFromSocketStream(net::SocketStream* socket) {
- net::SocketStream::UserData* d = socket->GetUserData(kSocketIdKey);
+SocketStreamHost*
+SocketStreamHost::GetSocketStreamHost(net::SocketStream* socket) {
+ net::SocketStream::UserData* d = socket->GetUserData(kSocketHostKey);
if (d) {
- SocketStreamId* socket_stream_id = static_cast<SocketStreamId*>(d);
- return socket_stream_id->socket_id();
+ SocketStreamInfo* info = static_cast<SocketStreamInfo*>(d);
+ return info->host();
}
- return chrome_common_net::kNoSocketId;
+ return NULL;
}
SocketStreamHost::~SocketStreamHost() {
LOG(INFO) << "SocketStreamHost destructed socket_id=" << socket_id_;
+ if (!receiver_->Send(new ViewMsg_SocketStream_Closed(socket_id_))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_Closed failed.";
+ }
socket_->DetachDelegate();
}
@@ -50,7 +59,7 @@ void SocketStreamHost::Connect(const GURL& url) {
URLRequestContextGetter* context_getter = Profile::GetDefaultRequestContext();
if (context_getter)
socket_->set_context(context_getter->GetURLRequestContext());
- socket_->SetUserData(kSocketIdKey, new SocketStreamId(socket_id_));
+ socket_->SetUserData(kSocketHostKey, new SocketStreamInfo(this));
socket_->Connect();
}
@@ -67,3 +76,18 @@ void SocketStreamHost::Close() {
return;
return socket_->Close();
}
+
+bool SocketStreamHost::Connected(int max_pending_send_allowed) {
+ return receiver_->Send(new ViewMsg_SocketStream_Connected(
+ socket_id_, max_pending_send_allowed));
+}
+
+bool SocketStreamHost::SentData(int amount_sent) {
+ return receiver_->Send(new ViewMsg_SocketStream_SentData(
+ socket_id_, amount_sent));
+}
+
+bool SocketStreamHost::ReceivedData(const char* data, int len) {
+ return receiver_->Send(new ViewMsg_SocketStream_ReceivedData(
+ socket_id_, std::vector<char>(data, data + len)));
+}
diff --git a/chrome/browser/renderer_host/socket_stream_host.h b/chrome/browser/renderer_host/socket_stream_host.h
index d7c1b46..180f818 100644
--- a/chrome/browser/renderer_host/socket_stream_host.h
+++ b/chrome/browser/renderer_host/socket_stream_host.h
@@ -8,6 +8,7 @@
#include <vector>
#include "base/ref_counted.h"
+#include "chrome/browser/renderer_host/resource_dispatcher_host.h"
#include "net/socket_stream/socket_stream.h"
class GURL;
@@ -22,12 +23,15 @@ class GURL;
// SocketStreamDispatcherHost.
class SocketStreamHost {
public:
- SocketStreamHost(net::SocketStream::Delegate* delegate, int socket_id);
+ SocketStreamHost(net::SocketStream::Delegate* delegate,
+ ResourceDispatcherHost::Receiver* receiver,
+ int socket_id);
~SocketStreamHost();
- // Gets socket_id associated with |socket|.
- static int SocketIdFromSocketStream(net::SocketStream* socket);
+ // Gets SocketStreamHost associated with |socket|.
+ static SocketStreamHost* GetSocketStreamHost(net::SocketStream* socket);
+ ResourceDispatcherHost::Receiver* receiver() const { return receiver_; }
int socket_id() const { return socket_id_; }
// Starts to open connection to |url|.
@@ -43,8 +47,15 @@ class SocketStreamHost {
// Closes the socket stream.
void Close();
+ bool Connected(int max_pending_send_allowed);
+
+ bool SentData(int amount_sent);
+
+ bool ReceivedData(const char* data, int len);
+
private:
net::SocketStream::Delegate* delegate_;
+ ResourceDispatcherHost::Receiver* receiver_;
int socket_id_;
scoped_refptr<net::SocketStream> socket_;