| OLD | NEW | 
|---|
| 1 // Copyright (c) 2009 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/common/socket_stream_dispatcher.h" | 5 #include "chrome/common/socket_stream_dispatcher.h" | 
| 6 | 6 | 
| 7 #include <vector> | 7 #include <vector> | 
| 8 | 8 | 
| 9 #include "base/id_map.h" | 9 #include "base/id_map.h" | 
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" | 
| 11 #include "base/ref_counted.h" | 11 #include "base/ref_counted.h" | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 62 IDMap<IPCWebSocketStreamHandleBridge> | 62 IDMap<IPCWebSocketStreamHandleBridge> | 
| 63 IPCWebSocketStreamHandleBridge::all_bridges; | 63 IPCWebSocketStreamHandleBridge::all_bridges; | 
| 64 | 64 | 
| 65 /* static */ | 65 /* static */ | 
| 66 IPCWebSocketStreamHandleBridge* IPCWebSocketStreamHandleBridge::FromSocketId( | 66 IPCWebSocketStreamHandleBridge* IPCWebSocketStreamHandleBridge::FromSocketId( | 
| 67     int id) { | 67     int id) { | 
| 68   return all_bridges.Lookup(id); | 68   return all_bridges.Lookup(id); | 
| 69 } | 69 } | 
| 70 | 70 | 
| 71 IPCWebSocketStreamHandleBridge::~IPCWebSocketStreamHandleBridge() { | 71 IPCWebSocketStreamHandleBridge::~IPCWebSocketStreamHandleBridge() { | 
| 72   DLOG(INFO) << "IPCWebSocketStreamHandleBridge destructor socket_id=" | 72   DVLOG(1) << "IPCWebSocketStreamHandleBridge destructor socket_id=" | 
| 73              << socket_id_; | 73            << socket_id_; | 
| 74   if (socket_id_ != chrome_common_net::kNoSocketId) { | 74   if (socket_id_ != chrome_common_net::kNoSocketId) { | 
| 75     child_thread_->Send(new ViewHostMsg_Close(socket_id_)); | 75     child_thread_->Send(new ViewHostMsg_Close(socket_id_)); | 
| 76     socket_id_ = chrome_common_net::kNoSocketId; | 76     socket_id_ = chrome_common_net::kNoSocketId; | 
| 77   } | 77   } | 
| 78 } | 78 } | 
| 79 | 79 | 
| 80 void IPCWebSocketStreamHandleBridge::Connect(const GURL& url) { | 80 void IPCWebSocketStreamHandleBridge::Connect(const GURL& url) { | 
| 81   DCHECK(child_thread_); | 81   DCHECK(child_thread_); | 
| 82   DLOG(INFO) << "Connect url=" << url; | 82   DVLOG(1) << "Connect url=" << url; | 
| 83   child_thread_->message_loop()->PostTask( | 83   child_thread_->message_loop()->PostTask( | 
| 84       FROM_HERE, | 84       FROM_HERE, | 
| 85       NewRunnableMethod(this, &IPCWebSocketStreamHandleBridge::DoConnect, | 85       NewRunnableMethod(this, &IPCWebSocketStreamHandleBridge::DoConnect, | 
| 86                         url)); | 86                         url)); | 
| 87 } | 87 } | 
| 88 | 88 | 
| 89 bool IPCWebSocketStreamHandleBridge::Send( | 89 bool IPCWebSocketStreamHandleBridge::Send( | 
| 90     const std::vector<char>& data) { | 90     const std::vector<char>& data) { | 
| 91   DLOG(INFO) << "Send data.size=" << data.size(); | 91   DVLOG(1) << "Send data.size=" << data.size(); | 
| 92   if (child_thread_->Send( | 92   if (child_thread_->Send( | 
| 93           new ViewHostMsg_SocketStream_SendData(socket_id_, data))) { | 93       new ViewHostMsg_SocketStream_SendData(socket_id_, data))) { | 
| 94     if (delegate_) | 94     if (delegate_) | 
| 95       delegate_->WillSendData(handle_, &data[0], data.size()); | 95       delegate_->WillSendData(handle_, &data[0], data.size()); | 
| 96     return true; | 96     return true; | 
| 97   } | 97   } | 
| 98   return false; | 98   return false; | 
| 99 } | 99 } | 
| 100 | 100 | 
| 101 void IPCWebSocketStreamHandleBridge::Close() { | 101 void IPCWebSocketStreamHandleBridge::Close() { | 
| 102   DLOG(INFO) << "Close socket_id" << socket_id_; | 102   DVLOG(1) << "Close socket_id" << socket_id_; | 
| 103   child_thread_->Send(new ViewHostMsg_SocketStream_Close(socket_id_)); | 103   child_thread_->Send(new ViewHostMsg_SocketStream_Close(socket_id_)); | 
| 104 } | 104 } | 
| 105 | 105 | 
| 106 void IPCWebSocketStreamHandleBridge::OnConnected(int max_pending_send_allowed) { | 106 void IPCWebSocketStreamHandleBridge::OnConnected(int max_pending_send_allowed) { | 
| 107   DLOG(INFO) << "IPCWebSocketStreamHandleBridge::OnConnected socket_id=" | 107   DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnConnected socket_id=" | 
| 108              << socket_id_; | 108            << socket_id_; | 
| 109   if (delegate_) | 109   if (delegate_) | 
| 110     delegate_->DidOpenStream(handle_, max_pending_send_allowed); | 110     delegate_->DidOpenStream(handle_, max_pending_send_allowed); | 
| 111 } | 111 } | 
| 112 | 112 | 
| 113 void IPCWebSocketStreamHandleBridge::OnSentData(int amount_sent) { | 113 void IPCWebSocketStreamHandleBridge::OnSentData(int amount_sent) { | 
| 114   if (delegate_) | 114   if (delegate_) | 
| 115     delegate_->DidSendData(handle_, amount_sent); | 115     delegate_->DidSendData(handle_, amount_sent); | 
| 116 } | 116 } | 
| 117 | 117 | 
| 118 void IPCWebSocketStreamHandleBridge::OnReceivedData( | 118 void IPCWebSocketStreamHandleBridge::OnReceivedData( | 
| 119     const std::vector<char>& data) { | 119     const std::vector<char>& data) { | 
| 120   if (delegate_) | 120   if (delegate_) | 
| 121     delegate_->DidReceiveData(handle_, &data[0], data.size()); | 121     delegate_->DidReceiveData(handle_, &data[0], data.size()); | 
| 122 } | 122 } | 
| 123 | 123 | 
| 124 void IPCWebSocketStreamHandleBridge::OnClosed() { | 124 void IPCWebSocketStreamHandleBridge::OnClosed() { | 
| 125   DLOG(INFO) << "IPCWebSocketStreamHandleBridge::OnClosed"; | 125   DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnClosed"; | 
| 126   if (socket_id_ != chrome_common_net::kNoSocketId) { | 126   if (socket_id_ != chrome_common_net::kNoSocketId) { | 
| 127     all_bridges.Remove(socket_id_); | 127     all_bridges.Remove(socket_id_); | 
| 128     socket_id_ = chrome_common_net::kNoSocketId; | 128     socket_id_ = chrome_common_net::kNoSocketId; | 
| 129   } | 129   } | 
| 130   if (delegate_) { | 130   if (delegate_) | 
| 131     delegate_->DidClose(handle_); | 131     delegate_->DidClose(handle_); | 
| 132   } |  | 
| 133   delegate_ = NULL; | 132   delegate_ = NULL; | 
| 134   Release(); | 133   Release(); | 
| 135 } | 134 } | 
| 136 | 135 | 
| 137 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { | 136 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { | 
| 138   DCHECK(child_thread_); | 137   DCHECK(child_thread_); | 
| 139   DCHECK_EQ(socket_id_, chrome_common_net::kNoSocketId); | 138   DCHECK_EQ(socket_id_, chrome_common_net::kNoSocketId); | 
| 140   if (delegate_) | 139   if (delegate_) | 
| 141     delegate_->WillOpenStream(handle_, url); | 140     delegate_->WillOpenStream(handle_, url); | 
| 142 | 141 | 
| 143   socket_id_ = all_bridges.Add(this); | 142   socket_id_ = all_bridges.Add(this); | 
| 144   DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId); | 143   DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId); | 
| 145   if (child_thread_->Send( | 144   if (child_thread_->Send( | 
| 146           new ViewHostMsg_SocketStream_Connect(url, socket_id_))) { | 145       new ViewHostMsg_SocketStream_Connect(url, socket_id_))) { | 
| 147     DLOG(INFO) << "Connect socket_id=" << socket_id_; | 146     DVLOG(1) << "Connect socket_id=" << socket_id_; | 
| 148     AddRef();  // Released in OnClosed(). | 147     AddRef();  // Released in OnClosed(). | 
| 149     // TODO(ukai): timeout to OnConnected. | 148     // TODO(ukai): timeout to OnConnected. | 
| 150   } else { | 149   } else { | 
| 151     LOG(ERROR) << "IPC SocketStream_Connect failed."; | 150     LOG(ERROR) << "IPC SocketStream_Connect failed."; | 
| 152     OnClosed(); | 151     OnClosed(); | 
| 153   } | 152   } | 
| 154 } | 153 } | 
| 155 | 154 | 
| 156 SocketStreamDispatcher::SocketStreamDispatcher() { | 155 SocketStreamDispatcher::SocketStreamDispatcher() { | 
| 157 } | 156 } | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 172     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_SentData, OnSentData) | 171     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_SentData, OnSentData) | 
| 173     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_ReceivedData, OnReceivedData) | 172     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_ReceivedData, OnReceivedData) | 
| 174     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_Closed, OnClosed) | 173     IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_Closed, OnClosed) | 
| 175     IPC_MESSAGE_UNHANDLED(handled = false) | 174     IPC_MESSAGE_UNHANDLED(handled = false) | 
| 176   IPC_END_MESSAGE_MAP() | 175   IPC_END_MESSAGE_MAP() | 
| 177   return handled; | 176   return handled; | 
| 178 } | 177 } | 
| 179 | 178 | 
| 180 void SocketStreamDispatcher::OnConnected(int socket_id, | 179 void SocketStreamDispatcher::OnConnected(int socket_id, | 
| 181                                          int max_pending_send_allowed) { | 180                                          int max_pending_send_allowed) { | 
| 182   DLOG(INFO) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id | 181   DVLOG(1) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id | 
| 183              << " max_pending_send_allowed=" << max_pending_send_allowed; | 182            << " max_pending_send_allowed=" << max_pending_send_allowed; | 
| 184   IPCWebSocketStreamHandleBridge* bridge = | 183   IPCWebSocketStreamHandleBridge* bridge = | 
| 185       IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); | 184       IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); | 
| 186   if (bridge) | 185   if (bridge) | 
| 187     bridge->OnConnected(max_pending_send_allowed); | 186     bridge->OnConnected(max_pending_send_allowed); | 
| 188   else | 187   else | 
| 189     DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; | 188     DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; | 
| 190 } | 189 } | 
| 191 | 190 | 
| 192 void SocketStreamDispatcher::OnSentData(int socket_id, int amount_sent) { | 191 void SocketStreamDispatcher::OnSentData(int socket_id, int amount_sent) { | 
| 193   IPCWebSocketStreamHandleBridge* bridge = | 192   IPCWebSocketStreamHandleBridge* bridge = | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 209 } | 208 } | 
| 210 | 209 | 
| 211 void SocketStreamDispatcher::OnClosed(int socket_id) { | 210 void SocketStreamDispatcher::OnClosed(int socket_id) { | 
| 212   IPCWebSocketStreamHandleBridge* bridge = | 211   IPCWebSocketStreamHandleBridge* bridge = | 
| 213       IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); | 212       IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); | 
| 214   if (bridge) | 213   if (bridge) | 
| 215     bridge->OnClosed(); | 214     bridge->OnClosed(); | 
| 216   else | 215   else | 
| 217     DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; | 216     DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; | 
| 218 } | 217 } | 
| OLD | NEW | 
|---|