OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_disp
atcher.h" | 5 #include "extensions/browser/api/sockets_tcp_server/tcp_server_socket_event_disp
atcher.h" |
6 | 6 |
7 #include "extensions/browser/api/socket/tcp_socket.h" | 7 #include "extensions/browser/api/socket/tcp_socket.h" |
8 #include "extensions/browser/event_router.h" | 8 #include "extensions/browser/event_router.h" |
9 #include "extensions/browser/extension_system.h" | 9 #include "extensions/browser/extension_system.h" |
10 #include "extensions/browser/extensions_browser_client.h" | 10 #include "extensions/browser/extensions_browser_client.h" |
(...skipping 10 matching lines...) Expand all Loading... |
21 | 21 |
22 // static | 22 // static |
23 BrowserContextKeyedAPIFactory<TCPServerSocketEventDispatcher>* | 23 BrowserContextKeyedAPIFactory<TCPServerSocketEventDispatcher>* |
24 TCPServerSocketEventDispatcher::GetFactoryInstance() { | 24 TCPServerSocketEventDispatcher::GetFactoryInstance() { |
25 return g_factory.Pointer(); | 25 return g_factory.Pointer(); |
26 } | 26 } |
27 | 27 |
28 // static | 28 // static |
29 TCPServerSocketEventDispatcher* TCPServerSocketEventDispatcher::Get( | 29 TCPServerSocketEventDispatcher* TCPServerSocketEventDispatcher::Get( |
30 content::BrowserContext* context) { | 30 content::BrowserContext* context) { |
31 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 31 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
32 | 32 |
33 return BrowserContextKeyedAPIFactory<TCPServerSocketEventDispatcher>::Get( | 33 return BrowserContextKeyedAPIFactory<TCPServerSocketEventDispatcher>::Get( |
34 context); | 34 context); |
35 } | 35 } |
36 | 36 |
37 TCPServerSocketEventDispatcher::TCPServerSocketEventDispatcher( | 37 TCPServerSocketEventDispatcher::TCPServerSocketEventDispatcher( |
38 content::BrowserContext* context) | 38 content::BrowserContext* context) |
39 : thread_id_(Socket::kThreadId), browser_context_(context) { | 39 : thread_id_(Socket::kThreadId), browser_context_(context) { |
40 ApiResourceManager<ResumableTCPServerSocket>* server_manager = | 40 ApiResourceManager<ResumableTCPServerSocket>* server_manager = |
41 ApiResourceManager<ResumableTCPServerSocket>::Get(browser_context_); | 41 ApiResourceManager<ResumableTCPServerSocket>::Get(browser_context_); |
(...skipping 16 matching lines...) Expand all Loading... |
58 | 58 |
59 TCPServerSocketEventDispatcher::~TCPServerSocketEventDispatcher() {} | 59 TCPServerSocketEventDispatcher::~TCPServerSocketEventDispatcher() {} |
60 | 60 |
61 TCPServerSocketEventDispatcher::AcceptParams::AcceptParams() {} | 61 TCPServerSocketEventDispatcher::AcceptParams::AcceptParams() {} |
62 | 62 |
63 TCPServerSocketEventDispatcher::AcceptParams::~AcceptParams() {} | 63 TCPServerSocketEventDispatcher::AcceptParams::~AcceptParams() {} |
64 | 64 |
65 void TCPServerSocketEventDispatcher::OnServerSocketListen( | 65 void TCPServerSocketEventDispatcher::OnServerSocketListen( |
66 const std::string& extension_id, | 66 const std::string& extension_id, |
67 int socket_id) { | 67 int socket_id) { |
68 DCHECK(BrowserThread::CurrentlyOn(thread_id_)); | 68 DCHECK_CURRENTLY_ON(thread_id_); |
69 | 69 |
70 StartSocketAccept(extension_id, socket_id); | 70 StartSocketAccept(extension_id, socket_id); |
71 } | 71 } |
72 | 72 |
73 void TCPServerSocketEventDispatcher::OnServerSocketResume( | 73 void TCPServerSocketEventDispatcher::OnServerSocketResume( |
74 const std::string& extension_id, | 74 const std::string& extension_id, |
75 int socket_id) { | 75 int socket_id) { |
76 DCHECK(BrowserThread::CurrentlyOn(thread_id_)); | 76 DCHECK_CURRENTLY_ON(thread_id_); |
77 | 77 |
78 StartSocketAccept(extension_id, socket_id); | 78 StartSocketAccept(extension_id, socket_id); |
79 } | 79 } |
80 | 80 |
81 void TCPServerSocketEventDispatcher::StartSocketAccept( | 81 void TCPServerSocketEventDispatcher::StartSocketAccept( |
82 const std::string& extension_id, | 82 const std::string& extension_id, |
83 int socket_id) { | 83 int socket_id) { |
84 DCHECK(BrowserThread::CurrentlyOn(thread_id_)); | 84 DCHECK_CURRENTLY_ON(thread_id_); |
85 | 85 |
86 AcceptParams params; | 86 AcceptParams params; |
87 params.thread_id = thread_id_; | 87 params.thread_id = thread_id_; |
88 params.browser_context_id = browser_context_; | 88 params.browser_context_id = browser_context_; |
89 params.extension_id = extension_id; | 89 params.extension_id = extension_id; |
90 params.server_sockets = server_sockets_; | 90 params.server_sockets = server_sockets_; |
91 params.client_sockets = client_sockets_; | 91 params.client_sockets = client_sockets_; |
92 params.socket_id = socket_id; | 92 params.socket_id = socket_id; |
93 | 93 |
94 StartAccept(params); | 94 StartAccept(params); |
95 } | 95 } |
96 | 96 |
97 // static | 97 // static |
98 void TCPServerSocketEventDispatcher::StartAccept(const AcceptParams& params) { | 98 void TCPServerSocketEventDispatcher::StartAccept(const AcceptParams& params) { |
99 DCHECK(BrowserThread::CurrentlyOn(params.thread_id)); | 99 DCHECK_CURRENTLY_ON(params.thread_id); |
100 | 100 |
101 ResumableTCPServerSocket* socket = | 101 ResumableTCPServerSocket* socket = |
102 params.server_sockets->Get(params.extension_id, params.socket_id); | 102 params.server_sockets->Get(params.extension_id, params.socket_id); |
103 if (!socket) { | 103 if (!socket) { |
104 // This can happen if the socket is closed while our callback is active. | 104 // This can happen if the socket is closed while our callback is active. |
105 return; | 105 return; |
106 } | 106 } |
107 DCHECK(params.extension_id == socket->owner_extension_id()) | 107 DCHECK(params.extension_id == socket->owner_extension_id()) |
108 << "Socket has wrong owner."; | 108 << "Socket has wrong owner."; |
109 | 109 |
110 // Don't start another accept if the socket has been paused. | 110 // Don't start another accept if the socket has been paused. |
111 if (socket->paused()) | 111 if (socket->paused()) |
112 return; | 112 return; |
113 | 113 |
114 socket->Accept( | 114 socket->Accept( |
115 base::Bind(&TCPServerSocketEventDispatcher::AcceptCallback, params)); | 115 base::Bind(&TCPServerSocketEventDispatcher::AcceptCallback, params)); |
116 } | 116 } |
117 | 117 |
118 // static | 118 // static |
119 void TCPServerSocketEventDispatcher::AcceptCallback( | 119 void TCPServerSocketEventDispatcher::AcceptCallback( |
120 const AcceptParams& params, | 120 const AcceptParams& params, |
121 int result_code, | 121 int result_code, |
122 net::TCPClientSocket* socket) { | 122 net::TCPClientSocket* socket) { |
123 DCHECK(BrowserThread::CurrentlyOn(params.thread_id)); | 123 DCHECK_CURRENTLY_ON(params.thread_id); |
124 | 124 |
125 if (result_code >= 0) { | 125 if (result_code >= 0) { |
126 ResumableTCPSocket* client_socket = | 126 ResumableTCPSocket* client_socket = |
127 new ResumableTCPSocket(socket, params.extension_id, true); | 127 new ResumableTCPSocket(socket, params.extension_id, true); |
128 client_socket->set_paused(true); | 128 client_socket->set_paused(true); |
129 int client_socket_id = params.client_sockets->Add(client_socket); | 129 int client_socket_id = params.client_sockets->Add(client_socket); |
130 | 130 |
131 // Dispatch "onAccept" event. | 131 // Dispatch "onAccept" event. |
132 sockets_tcp_server::AcceptInfo accept_info; | 132 sockets_tcp_server::AcceptInfo accept_info; |
133 accept_info.socket_id = params.socket_id; | 133 accept_info.socket_id = params.socket_id; |
(...skipping 28 matching lines...) Expand all Loading... |
162 params.server_sockets->Get(params.extension_id, params.socket_id); | 162 params.server_sockets->Get(params.extension_id, params.socket_id); |
163 if (socket) { | 163 if (socket) { |
164 socket->set_paused(true); | 164 socket->set_paused(true); |
165 } | 165 } |
166 } | 166 } |
167 } | 167 } |
168 | 168 |
169 // static | 169 // static |
170 void TCPServerSocketEventDispatcher::PostEvent(const AcceptParams& params, | 170 void TCPServerSocketEventDispatcher::PostEvent(const AcceptParams& params, |
171 scoped_ptr<Event> event) { | 171 scoped_ptr<Event> event) { |
172 DCHECK(BrowserThread::CurrentlyOn(params.thread_id)); | 172 DCHECK_CURRENTLY_ON(params.thread_id); |
173 | 173 |
174 BrowserThread::PostTask(BrowserThread::UI, | 174 BrowserThread::PostTask(BrowserThread::UI, |
175 FROM_HERE, | 175 FROM_HERE, |
176 base::Bind(&DispatchEvent, | 176 base::Bind(&DispatchEvent, |
177 params.browser_context_id, | 177 params.browser_context_id, |
178 params.extension_id, | 178 params.extension_id, |
179 base::Passed(event.Pass()))); | 179 base::Passed(event.Pass()))); |
180 } | 180 } |
181 | 181 |
182 // static | 182 // static |
183 void TCPServerSocketEventDispatcher::DispatchEvent( | 183 void TCPServerSocketEventDispatcher::DispatchEvent( |
184 void* browser_context_id, | 184 void* browser_context_id, |
185 const std::string& extension_id, | 185 const std::string& extension_id, |
186 scoped_ptr<Event> event) { | 186 scoped_ptr<Event> event) { |
187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 187 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
188 | 188 |
189 content::BrowserContext* context = | 189 content::BrowserContext* context = |
190 reinterpret_cast<content::BrowserContext*>(browser_context_id); | 190 reinterpret_cast<content::BrowserContext*>(browser_context_id); |
191 if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context)) | 191 if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context)) |
192 return; | 192 return; |
193 EventRouter* router = ExtensionSystem::Get(context)->event_router(); | 193 EventRouter* router = ExtensionSystem::Get(context)->event_router(); |
194 if (router) | 194 if (router) |
195 router->DispatchEventToExtension(extension_id, event.Pass()); | 195 router->DispatchEventToExtension(extension_id, event.Pass()); |
196 } | 196 } |
197 | 197 |
198 } // namespace core_api | 198 } // namespace core_api |
199 } // namespace extensions | 199 } // namespace extensions |
OLD | NEW |