| 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 "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "extensions/browser/api/socket/tcp_socket.h" | 8 #include "extensions/browser/api/socket/tcp_socket.h" |
| 9 #include "extensions/browser/event_router.h" | 9 #include "extensions/browser/event_router.h" |
| 10 #include "extensions/browser/extensions_browser_client.h" | 10 #include "extensions/browser/extensions_browser_client.h" |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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; |
| 134 accept_info.client_socket_id = client_socket_id; | 134 accept_info.client_socket_id = client_socket_id; |
| 135 scoped_ptr<base::ListValue> args = | 135 scoped_ptr<base::ListValue> args = |
| 136 sockets_tcp_server::OnAccept::Create(accept_info); | 136 sockets_tcp_server::OnAccept::Create(accept_info); |
| 137 scoped_ptr<Event> event( | 137 scoped_ptr<Event> event(new Event(events::UNKNOWN, |
| 138 new Event(sockets_tcp_server::OnAccept::kEventName, args.Pass())); | 138 sockets_tcp_server::OnAccept::kEventName, |
| 139 args.Pass())); |
| 139 PostEvent(params, event.Pass()); | 140 PostEvent(params, event.Pass()); |
| 140 | 141 |
| 141 // Post a task to delay the "accept" until the socket is available, as | 142 // Post a task to delay the "accept" until the socket is available, as |
| 142 // calling StartAccept at this point would error with ERR_IO_PENDING. | 143 // calling StartAccept at this point would error with ERR_IO_PENDING. |
| 143 BrowserThread::PostTask( | 144 BrowserThread::PostTask( |
| 144 params.thread_id, | 145 params.thread_id, |
| 145 FROM_HERE, | 146 FROM_HERE, |
| 146 base::Bind(&TCPServerSocketEventDispatcher::StartAccept, params)); | 147 base::Bind(&TCPServerSocketEventDispatcher::StartAccept, params)); |
| 147 } else { | 148 } else { |
| 148 // Dispatch "onAcceptError" event but don't start another accept to avoid | 149 // Dispatch "onAcceptError" event but don't start another accept to avoid |
| 149 // potential infinite "accepts" if we have a persistent network error. | 150 // potential infinite "accepts" if we have a persistent network error. |
| 150 sockets_tcp_server::AcceptErrorInfo accept_error_info; | 151 sockets_tcp_server::AcceptErrorInfo accept_error_info; |
| 151 accept_error_info.socket_id = params.socket_id; | 152 accept_error_info.socket_id = params.socket_id; |
| 152 accept_error_info.result_code = result_code; | 153 accept_error_info.result_code = result_code; |
| 153 scoped_ptr<base::ListValue> args = | 154 scoped_ptr<base::ListValue> args = |
| 154 sockets_tcp_server::OnAcceptError::Create(accept_error_info); | 155 sockets_tcp_server::OnAcceptError::Create(accept_error_info); |
| 155 scoped_ptr<Event> event( | 156 scoped_ptr<Event> event( |
| 156 new Event(sockets_tcp_server::OnAcceptError::kEventName, args.Pass())); | 157 new Event(events::UNKNOWN, |
| 158 sockets_tcp_server::OnAcceptError::kEventName, args.Pass())); |
| 157 PostEvent(params, event.Pass()); | 159 PostEvent(params, event.Pass()); |
| 158 | 160 |
| 159 // Since we got an error, the socket is now "paused" until the application | 161 // Since we got an error, the socket is now "paused" until the application |
| 160 // "resumes" it. | 162 // "resumes" it. |
| 161 ResumableTCPServerSocket* socket = | 163 ResumableTCPServerSocket* socket = |
| 162 params.server_sockets->Get(params.extension_id, params.socket_id); | 164 params.server_sockets->Get(params.extension_id, params.socket_id); |
| 163 if (socket) { | 165 if (socket) { |
| 164 socket->set_paused(true); | 166 socket->set_paused(true); |
| 165 } | 167 } |
| 166 } | 168 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 190 reinterpret_cast<content::BrowserContext*>(browser_context_id); | 192 reinterpret_cast<content::BrowserContext*>(browser_context_id); |
| 191 if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context)) | 193 if (!extensions::ExtensionsBrowserClient::Get()->IsValidContext(context)) |
| 192 return; | 194 return; |
| 193 EventRouter* router = EventRouter::Get(context); | 195 EventRouter* router = EventRouter::Get(context); |
| 194 if (router) | 196 if (router) |
| 195 router->DispatchEventToExtension(extension_id, event.Pass()); | 197 router->DispatchEventToExtension(extension_id, event.Pass()); |
| 196 } | 198 } |
| 197 | 199 |
| 198 } // namespace core_api | 200 } // namespace core_api |
| 199 } // namespace extensions | 201 } // namespace extensions |
| OLD | NEW |