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

Side by Side Diff: content/child/websocket_dispatcher.cc

Issue 22815034: Introduce webkit_glue bridges for the new WebSocket Implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 3 months 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/child/websocket_dispatcher.h"
6
7 #include <map>
8 #include <string>
9 #include <vector>
10
11 #include "base/logging.h"
12 #include "content/child/websocket_bridge.h"
13 #include "content/common/websocket_messages.h"
14 #include "ipc/ipc_message.h"
15 #include "ipc/ipc_message_macros.h"
16 #include "url/gurl.h"
17 #include "third_party/WebKit/public/platform/WebSocketHandle.h"
18 #include "third_party/WebKit/public/platform/WebSocketHandleClient.h"
19
20 using WebKit::WebSocketHandle;
21 using WebKit::WebSocketHandleClient;
22 using WebKit::WebString;
23 using WebKit::WebURL;
24 using WebKit::WebVector;
25
26 namespace content {
27
28 WebSocketDispatcher::WebSocketDispatcher() : channel_id_max_(0) {}
29
30 WebSocketDispatcher::~WebSocketDispatcher() {}
31
32 int WebSocketDispatcher::AddBridge(WebSocketBridge* bridge) {
33 ++channel_id_max_;
34 bridges_.insert(std::make_pair(channel_id_max_, bridge));
35 return channel_id_max_;
36 }
37
38 void WebSocketDispatcher::RemoveBridge(int channel_id) {
39 std::map<int, WebSocketBridge*>::iterator i = bridges_.find(channel_id);
40 if (i == bridges_.end()) {
41 DVLOG(1) << "Remove a non-existent bridge(" << channel_id << ")";
42 return;
43 }
44 bridges_.erase(i);
45 }
46
47 bool WebSocketDispatcher::OnMessageReceived(const IPC::Message& msg) {
48 bool handled = true;
49 IPC_BEGIN_MESSAGE_MAP(WebSocketDispatcher, msg)
50 IPC_MESSAGE_HANDLER(WebSocketMsg_AddChannelResponse, OnConnected)
51 IPC_MESSAGE_HANDLER(WebSocketMsg_SendFrame, OnReceivedData)
52 IPC_MESSAGE_HANDLER(WebSocketMsg_FlowControl, OnReceivedFlowControl)
53 IPC_MESSAGE_HANDLER(WebSocketMsg_DropChannel, OnClosed)
54 IPC_MESSAGE_UNHANDLED(handled = false)
55 IPC_END_MESSAGE_MAP()
piman 2013/09/20 03:39:06 I still think this should be using routed messages
yhirano 2013/09/20 08:42:28 I got it! Then, we can remove functions without ch
piman 2013/09/20 16:30:13 Right, all the message logic is now in WebSocketBr
56 return handled;
57 }
58
59 void WebSocketDispatcher::OnConnected(int channel_id,
60 bool fail,
61 const std::string& selected_protocol,
62 const std::string& extensions) {
63 DVLOG(1) << "WebSocketDispatcher::OnConnected("
64 << channel_id << ", "
65 << fail << ", "
66 << selected_protocol << ", "
67 << extensions << ")";
68 WebSocketBridge* bridge = GetBridge(channel_id);
69 if (!bridge) return;
piman 2013/09/20 03:39:06 nit: statement on next line.
yhirano 2013/09/20 08:42:28 I deleted the code.
70 WebString protocol_to_pass = WebString::fromUTF8(selected_protocol);
71 WebString extensions_to_pass = WebString::fromUTF8(extensions);
72 bridge->DidConnect(fail, protocol_to_pass, extensions_to_pass);
73 }
74
75 void WebSocketDispatcher::OnReceivedData(int channel_id,
76 bool fin,
77 WebSocketMessageType type,
78 const std::vector<char>& data) {
79 DVLOG(1) << "WebSocketDispatcher::OnReceivedData("
80 << channel_id << ", "
81 << fin << ", "
82 << type << ", "
83 << "(data size = " << data.size() << "))";
84 WebSocketBridge* bridge = GetBridge(channel_id);
85 if (!bridge) return;
piman 2013/09/20 03:39:06 nit: statement on next line.
yhirano 2013/09/20 08:42:28 I deleted the code.
86 WebSocketHandle::MessageType type_to_pass =
87 WebSocketHandle::MessageTypeContinuation;
88 switch (type) {
89 case WEB_SOCKET_MESSAGE_TYPE_CONTINUATION:
90 type_to_pass = WebSocketHandle::MessageTypeContinuation;
91 break;
92 case WEB_SOCKET_MESSAGE_TYPE_TEXT:
93 type_to_pass = WebSocketHandle::MessageTypeText;
94 break;
95 case WEB_SOCKET_MESSAGE_TYPE_BINARY:
96 type_to_pass = WebSocketHandle::MessageTypeBinary;
97 break;
98 }
99 bridge->DidReceiveData(fin, type_to_pass, data.data(), data.size());
100 }
101
102 void WebSocketDispatcher::OnReceivedFlowControl(int channel_id, int64 quota) {
103 DVLOG(1) << "WebSocketDispatcher::OnReceivedFlowControl("
104 << channel_id << ", "
105 << quota << ")";
106 WebSocketBridge* bridge = GetBridge(channel_id);
107 if (!bridge) return;
piman 2013/09/20 03:39:06 nit: statement on next line.
yhirano 2013/09/20 08:42:28 I deleted the code.
108 bridge->DidReceiveFlowControl(quota);
109 }
110
111 void WebSocketDispatcher::OnClosed(int channel_id,
112 unsigned short code,
113 const std::string& reason) {
114 DVLOG(1) << "WebSocketDispatcher::OnClosed("
115 << channel_id << ", "
116 << code << ", "
117 << reason << ")";
118 WebSocketBridge* bridge = GetBridge(channel_id);
119 if (!bridge) return;
piman 2013/09/20 03:39:06 nit: statement on next line.
yhirano 2013/09/20 08:42:28 I deleted the code.
120 WebString reason_to_pass = WebString::fromUTF8(reason);
121 bridge->DidClose(code, reason_to_pass);
122 }
123
124 WebSocketBridge* WebSocketDispatcher::GetBridge(int channel_id) {
125 std::map<int, WebSocketBridge*>::iterator i = bridges_.find(channel_id);
126 if (i == bridges_.end()) {
127 DVLOG(1) << "No bridge for channel_id=" << channel_id;
128 return NULL;
129 }
130 return i->second;
131 }
132
133 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698