Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(852)

Unified Diff: chrome/browser/renderer_host/socket_stream_dispatcher_host.cc

Issue 5850001: Make SocketStreamDispatcherHost a BrowserMessageFilter.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
===================================================================
--- chrome/browser/renderer_host/socket_stream_dispatcher_host.cc (revision 69086)
+++ chrome/browser/renderer_host/socket_stream_dispatcher_host.cc (working copy)
@@ -8,126 +8,93 @@
#include "chrome/browser/renderer_host/socket_stream_host.h"
#include "chrome/common/render_messages.h"
#include "chrome/common/net/socket_stream.h"
-#include "ipc/ipc_message.h"
#include "net/websockets/websocket_job.h"
#include "net/websockets/websocket_throttle.h"
-SocketStreamDispatcherHost::SocketStreamDispatcherHost() : receiver_(NULL) {
+SocketStreamDispatcherHost::SocketStreamDispatcherHost() {
net::WebSocketJob::EnsureInit();
}
SocketStreamDispatcherHost::~SocketStreamDispatcherHost() {
// TODO(ukai): Implement IDMap::RemoveAll().
- for (IDMap< IDMap<SocketStreamHost> >::const_iterator iter(&hostmap_);
+ for (IDMap<SocketStreamHost>::const_iterator iter(&hosts_);
!iter.IsAtEnd();
iter.Advance()) {
- int host_id = iter.GetCurrentKey();
- CancelRequestsForProcess(host_id);
+ int socket_id = iter.GetCurrentKey();
+ const SocketStreamHost* socket_stream_host = iter.GetCurrentValue();
+ delete socket_stream_host;
+ hosts_.Remove(socket_id);
}
}
-bool SocketStreamDispatcherHost::OnMessageReceived(
- const IPC::Message& msg,
- ResourceDispatcherHost::Receiver* receiver,
- bool* msg_ok) {
- if (!IsSocketStreamDispatcherHostMessage(msg))
- return false;
-
- *msg_ok = true;
+bool SocketStreamDispatcherHost::OnMessageReceived(const IPC::Message& message,
+ bool* message_was_ok) {
bool handled = true;
- receiver_ = receiver;
- IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, msg, *msg_ok)
+ IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, message, *message_was_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;
}
-void SocketStreamDispatcherHost::CancelRequestsForProcess(int host_id) {
- IDMap<SocketStreamHost>* hosts = hostmap_.Lookup(host_id);
- if (hosts == NULL)
- return;
- for (IDMap<SocketStreamHost>::const_iterator hosts_iter(hosts);
- !hosts_iter.IsAtEnd();
- hosts_iter.Advance()) {
- const SocketStreamHost* socket_stream_host = hosts_iter.GetCurrentValue();
- delete socket_stream_host;
- int socket_id = hosts_iter.GetCurrentKey();
- hosts->Remove(socket_id);
- }
- hostmap_.Remove(host_id);
- delete hosts;
-}
-
// SocketStream::Delegate methods implementations.
void SocketStreamDispatcherHost::OnConnected(net::SocketStream* socket,
int max_pending_send_allowed) {
- SocketStreamHost* socket_stream_host =
- SocketStreamHost::GetSocketStreamHost(socket);
- DCHECK(socket_stream_host);
- int socket_id = socket_stream_host->socket_id();
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
DVLOG(1) << "SocketStreamDispatcherHost::OnConnected socket_id=" << socket_id
<< " max_pending_send_allowed=" << max_pending_send_allowed;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnConnected";
return;
}
- if (!socket_stream_host->Connected(max_pending_send_allowed)) {
+ if (!Send(new ViewMsg_SocketStream_Connected(
+ socket_id, max_pending_send_allowed))) {
LOG(ERROR) << "ViewMsg_SocketStream_Connected failed.";
- DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
+ DeleteSocketStreamHost(socket_id);
}
}
void SocketStreamDispatcherHost::OnSentData(net::SocketStream* socket,
int amount_sent) {
- SocketStreamHost* socket_stream_host =
- SocketStreamHost::GetSocketStreamHost(socket);
- DCHECK(socket_stream_host);
- int socket_id = socket_stream_host->socket_id();
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
DVLOG(1) << "SocketStreamDispatcherHost::OnSentData socket_id=" << socket_id
<< " amount_sent=" << amount_sent;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnReceivedData";
return;
}
- if (!socket_stream_host->SentData(amount_sent)) {
+ if (!Send(new ViewMsg_SocketStream_SentData(socket_id, amount_sent))) {
LOG(ERROR) << "ViewMsg_SocketStream_SentData failed.";
- DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
+ DeleteSocketStreamHost(socket_id);
}
}
void SocketStreamDispatcherHost::OnReceivedData(
net::SocketStream* socket, const char* data, int len) {
- SocketStreamHost* socket_stream_host =
- SocketStreamHost::GetSocketStreamHost(socket);
- DCHECK(socket_stream_host);
- int socket_id = socket_stream_host->socket_id();
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
DVLOG(1) << "SocketStreamDispatcherHost::OnReceiveData socket_id="
<< socket_id;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnReceivedData";
return;
}
- if (!socket_stream_host->ReceivedData(data, len)) {
+ if (!Send(new ViewMsg_SocketStream_ReceivedData(
+ socket_id, std::vector<char>(data, data + len)))) {
LOG(ERROR) << "ViewMsg_SocketStream_ReceivedData failed.";
- DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
+ DeleteSocketStreamHost(socket_id);
}
}
void SocketStreamDispatcherHost::OnClose(net::SocketStream* socket) {
- SocketStreamHost* socket_stream_host =
- SocketStreamHost::GetSocketStreamHost(socket);
- DCHECK(socket_stream_host);
- int socket_id = socket_stream_host->socket_id();
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
DVLOG(1) << "SocketStreamDispatcherHost::OnClosed socket_id=" << socket_id;
if (socket_id == chrome_common_net::kNoSocketId) {
LOG(ERROR) << "NoSocketId in OnClose";
return;
}
- DeleteSocketStreamHost(socket_stream_host->receiver()->id(), socket_id);
+ DeleteSocketStreamHost(socket_id);
}
// Message handlers called by OnMessageReceived.
@@ -135,15 +102,12 @@
DVLOG(1) << "SocketStreamDispatcherHost::OnConnect url=" << url
<< " socket_id=" << socket_id;
DCHECK_NE(chrome_common_net::kNoSocketId, socket_id);
- DCHECK(receiver_);
- if (LookupHostMap(receiver_->id(), socket_id)) {
- LOG(ERROR) << "host_id=" << receiver_->id()
- << " socket_id=" << socket_id << " already registered.";
+ if (hosts_.Lookup(socket_id)) {
+ LOG(ERROR) << "socket_id=" << socket_id << " already registered.";
return;
}
- SocketStreamHost* socket_stream_host =
- new SocketStreamHost(this, receiver_, socket_id);
- AddHostMap(receiver_->id(), socket_id, socket_stream_host);
+ SocketStreamHost* socket_stream_host = new SocketStreamHost(this, socket_id);
+ hosts_.AddWithID(socket_stream_host, socket_id);
socket_stream_host->Connect(url);
DVLOG(1) << "SocketStreamDispatcherHost::OnConnect -> " << socket_id;
}
@@ -151,12 +115,9 @@
void SocketStreamDispatcherHost::OnSendData(
int socket_id, const std::vector<char>& data) {
DVLOG(1) << "SocketStreamDispatcherHost::OnSendData socket_id=" << socket_id;
- DCHECK(receiver_);
- SocketStreamHost* socket_stream_host =
- LookupHostMap(receiver_->id(), socket_id);
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
if (!socket_stream_host) {
- LOG(ERROR) << "host_id=" << receiver_->id()
- << " socket_id=" << socket_id << " already closed.";
+ LOG(ERROR) << "socket_id=" << socket_id << " already closed.";
return;
}
if (!socket_stream_host->SendData(data)) {
@@ -167,57 +128,18 @@
void SocketStreamDispatcherHost::OnCloseReq(int socket_id) {
DVLOG(1) << "SocketStreamDispatcherHost::OnCloseReq socket_id=" << socket_id;
- DCHECK(receiver_);
- SocketStreamHost* socket_stream_host =
- LookupHostMap(receiver_->id(), socket_id);
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
if (!socket_stream_host)
return;
socket_stream_host->Close();
}
-void SocketStreamDispatcherHost::DeleteSocketStreamHost(
- int host_id, int socket_id) {
- SocketStreamHost* socket_stream_host = LookupHostMap(host_id, socket_id);
+void SocketStreamDispatcherHost::DeleteSocketStreamHost(int socket_id) {
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
DCHECK(socket_stream_host);
delete socket_stream_host;
- IDMap<SocketStreamHost>* hosts = hostmap_.Lookup(host_id);
- DCHECK(hosts);
- hosts->Remove(socket_id);
- if (hosts->IsEmpty()) {
- hostmap_.Remove(host_id);
- delete hosts;
+ hosts_.Remove(socket_id);
+ if (!Send(new ViewMsg_SocketStream_Closed(socket_id))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_Closed failed.";
}
}
-
-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;
-}
« no previous file with comments | « chrome/browser/renderer_host/socket_stream_dispatcher_host.h ('k') | chrome/browser/renderer_host/socket_stream_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698