| Index: content/browser/renderer_host/websocket_dispatcher_host.cc
|
| diff --git a/content/browser/renderer_host/websocket_dispatcher_host.cc b/content/browser/renderer_host/websocket_dispatcher_host.cc
|
| index 81afd61313a88c53433d67633c536caab6434848..7164f207a0f11e5dfeb65e06e82c0e3e86c252e2 100644
|
| --- a/content/browser/renderer_host/websocket_dispatcher_host.cc
|
| +++ b/content/browser/renderer_host/websocket_dispatcher_host.cc
|
| @@ -14,6 +14,12 @@
|
|
|
| namespace content {
|
|
|
| +namespace {
|
| +
|
| +typedef WebSocketDispatcherHost::WebSocketHostState WebSocketHostState;
|
| +
|
| +} // namespace
|
| +
|
| WebSocketDispatcherHost::WebSocketDispatcherHost(
|
| const GetRequestContextCallback& get_context_callback)
|
| : get_context_callback_(get_context_callback) {}
|
| @@ -60,45 +66,59 @@ WebSocketHost* WebSocketDispatcherHost::GetHost(int routing_id) const {
|
| return it == hosts_.end() ? NULL : it->second;
|
| }
|
|
|
| -void WebSocketDispatcherHost::SendOrDrop(IPC::Message* message) {
|
| +WebSocketHostState WebSocketDispatcherHost::SendOrDrop(IPC::Message* message) {
|
| if (!Send(message)) {
|
| DVLOG(1) << "Sending of message type " << message->type()
|
| << " failed. Dropping channel.";
|
| DeleteWebSocketHost(message->routing_id());
|
| + return WEBSOCKET_HOST_DELETED;
|
| }
|
| + return WEBSOCKET_HOST_ALIVE;
|
| }
|
|
|
| -void WebSocketDispatcherHost::SendAddChannelResponse(
|
| +WebSocketHostState WebSocketDispatcherHost::SendAddChannelResponse(
|
| int routing_id,
|
| bool fail,
|
| const std::string& selected_protocol,
|
| const std::string& extensions) {
|
| - SendOrDrop(new WebSocketMsg_AddChannelResponse(
|
| - routing_id, fail, selected_protocol, extensions));
|
| - if (fail)
|
| + if (SendOrDrop(new WebSocketMsg_AddChannelResponse(
|
| + routing_id, fail, selected_protocol, extensions)) ==
|
| + WEBSOCKET_HOST_DELETED)
|
| + return WEBSOCKET_HOST_DELETED;
|
| + if (fail) {
|
| DeleteWebSocketHost(routing_id);
|
| + return WEBSOCKET_HOST_DELETED;
|
| + }
|
| + return WEBSOCKET_HOST_ALIVE;
|
| }
|
|
|
| -void WebSocketDispatcherHost::SendFrame(int routing_id,
|
| - bool fin,
|
| - WebSocketMessageType type,
|
| - const std::vector<char>& data) {
|
| - SendOrDrop(new WebSocketMsg_SendFrame(routing_id, fin, type, data));
|
| +WebSocketHostState WebSocketDispatcherHost::SendFrame(
|
| + int routing_id,
|
| + bool fin,
|
| + WebSocketMessageType type,
|
| + const std::vector<char>& data) {
|
| + return SendOrDrop(new WebSocketMsg_SendFrame(routing_id, fin, type, data));
|
| }
|
|
|
| -void WebSocketDispatcherHost::SendFlowControl(int routing_id, int64 quota) {
|
| - SendOrDrop(new WebSocketMsg_FlowControl(routing_id, quota));
|
| +WebSocketHostState WebSocketDispatcherHost::SendFlowControl(int routing_id,
|
| + int64 quota) {
|
| + return SendOrDrop(new WebSocketMsg_FlowControl(routing_id, quota));
|
| }
|
|
|
| -void WebSocketDispatcherHost::SendClosing(int routing_id) {
|
| +WebSocketHostState WebSocketDispatcherHost::SendClosing(int routing_id) {
|
| // TODO(ricea): Implement the SendClosing IPC.
|
| + return WEBSOCKET_HOST_ALIVE;
|
| }
|
|
|
| -void WebSocketDispatcherHost::DoDropChannel(int routing_id,
|
| - uint16 code,
|
| - const std::string& reason) {
|
| - SendOrDrop(new WebSocketMsg_DropChannel(routing_id, code, reason));
|
| +WebSocketHostState WebSocketDispatcherHost::DoDropChannel(
|
| + int routing_id,
|
| + uint16 code,
|
| + const std::string& reason) {
|
| + if (SendOrDrop(new WebSocketMsg_DropChannel(routing_id, code, reason)) ==
|
| + WEBSOCKET_HOST_DELETED)
|
| + return WEBSOCKET_HOST_DELETED;
|
| DeleteWebSocketHost(routing_id);
|
| + return WEBSOCKET_HOST_DELETED;
|
| }
|
|
|
| WebSocketDispatcherHost::~WebSocketDispatcherHost() {
|
| @@ -107,10 +127,9 @@ WebSocketDispatcherHost::~WebSocketDispatcherHost() {
|
|
|
| void WebSocketDispatcherHost::DeleteWebSocketHost(int routing_id) {
|
| WebSocketHostTable::iterator it = hosts_.find(routing_id);
|
| - if (it != hosts_.end()) {
|
| - delete it->second;
|
| - hosts_.erase(it);
|
| - }
|
| + DCHECK(it != hosts_.end());
|
| + delete it->second;
|
| + hosts_.erase(it);
|
| }
|
|
|
| } // namespace content
|
|
|