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

Side by Side Diff: chrome/browser/extensions/api/socket/socket_api.cc

Issue 10777003: Refactor APIResourceController to ProfileKeyedService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/extensions/api/socket/socket_api.h" 5 #include "chrome/browser/extensions/api/socket/socket_api.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "chrome/browser/browser_process.h" 8 #include "chrome/browser/browser_process.h"
9 #include "chrome/browser/extensions/api/api_resource_controller.h"
10 #include "chrome/browser/extensions/api/dns/host_resolver_wrapper.h" 9 #include "chrome/browser/extensions/api/dns/host_resolver_wrapper.h"
11 #include "chrome/browser/extensions/api/socket/socket.h" 10 #include "chrome/browser/extensions/api/socket/socket.h"
12 #include "chrome/browser/extensions/api/socket/tcp_socket.h" 11 #include "chrome/browser/extensions/api/socket/tcp_socket.h"
13 #include "chrome/browser/extensions/api/socket/udp_socket.h" 12 #include "chrome/browser/extensions/api/socket/udp_socket.h"
14 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_system.h"
15 #include "chrome/browser/io_thread.h" 14 #include "chrome/browser/io_thread.h"
16 #include "net/base/host_port_pair.h" 15 #include "net/base/host_port_pair.h"
17 #include "net/base/io_buffer.h" 16 #include "net/base/io_buffer.h"
18 #include "net/base/ip_endpoint.h" 17 #include "net/base/ip_endpoint.h"
19 #include "net/base/net_errors.h" 18 #include "net/base/net_errors.h"
20 #include "net/base/net_log.h" 19 #include "net/base/net_log.h"
21 20
22 namespace extensions { 21 namespace extensions {
23 22
24 const char kAddressKey[] = "address"; 23 const char kAddressKey[] = "address";
25 const char kPortKey[] = "port"; 24 const char kPortKey[] = "port";
26 const char kBytesWrittenKey[] = "bytesWritten"; 25 const char kBytesWrittenKey[] = "bytesWritten";
27 const char kDataKey[] = "data"; 26 const char kDataKey[] = "data";
28 const char kResultCodeKey[] = "resultCode"; 27 const char kResultCodeKey[] = "resultCode";
29 const char kSocketIdKey[] = "socketId"; 28 const char kSocketIdKey[] = "socketId";
30 const char kTCPOption[] = "tcp"; 29 const char kTCPOption[] = "tcp";
31 const char kUDPOption[] = "udp"; 30 const char kUDPOption[] = "udp";
32 31
33 const char kSocketNotFoundError[] = "Socket not found"; 32 const char kSocketNotFoundError[] = "Socket not found";
34 const char kSocketTypeInvalidError[] = "Socket type is not supported"; 33 const char kSocketTypeInvalidError[] = "Socket type is not supported";
35 const char kDnsLookupFailedError[] = "DNS resolution failed"; 34 const char kDnsLookupFailedError[] = "DNS resolution failed";
36 35
36 SocketExtensionFunction::SocketExtensionFunction()
37 : manager_(NULL) {
38 }
39
40 SocketExtensionFunction::~SocketExtensionFunction() {
41 }
42
43 bool SocketExtensionFunction::PrePrepare() {
44 manager_ = ExtensionSystem::Get(profile())->socket_manager();
45 return manager_ != NULL;
46 }
47
37 void SocketExtensionFunction::Work() { 48 void SocketExtensionFunction::Work() {
asargent_no_longer_on_chrome 2012/07/16 18:08:25 nit: why do we bother overriding the default Async
miket_OOO 2012/07/16 19:46:02 Originally I believe it did do work, but we've sin
38 } 49 }
39 50
40 bool SocketExtensionFunction::Respond() { 51 bool SocketExtensionFunction::Respond() {
41 return error_.empty(); 52 return error_.empty();
42 } 53 }
43 54
44 SocketExtensionWithDnsLookupFunction::SocketExtensionWithDnsLookupFunction() 55 SocketExtensionWithDnsLookupFunction::SocketExtensionWithDnsLookupFunction()
45 : io_thread_(g_browser_process->io_thread()), 56 : io_thread_(g_browser_process->io_thread()),
46 request_handle_(new net::HostResolver::RequestHandle), 57 request_handle_(new net::HostResolver::RequestHandle),
47 addresses_(new net::AddressList) { 58 addresses_(new net::AddressList) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 void SocketCreateFunction::Work() { 126 void SocketCreateFunction::Work() {
116 Socket* socket = NULL; 127 Socket* socket = NULL;
117 if (socket_type_ == kSocketTypeTCP) { 128 if (socket_type_ == kSocketTypeTCP) {
118 socket = new TCPSocket(event_notifier_); 129 socket = new TCPSocket(event_notifier_);
119 } else if (socket_type_== kSocketTypeUDP) { 130 } else if (socket_type_== kSocketTypeUDP) {
120 socket = new UDPSocket(event_notifier_); 131 socket = new UDPSocket(event_notifier_);
121 } 132 }
122 DCHECK(socket); 133 DCHECK(socket);
123 134
124 DictionaryValue* result = new DictionaryValue(); 135 DictionaryValue* result = new DictionaryValue();
125 result->SetInteger(kSocketIdKey, controller()->AddAPIResource(socket)); 136 result->SetInteger(kSocketIdKey, manager_->Add(socket));
126 SetResult(result); 137 SetResult(result);
127 } 138 }
128 139
129 bool SocketDestroyFunction::Prepare() { 140 bool SocketDestroyFunction::Prepare() {
130 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 141 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
131 return true; 142 return true;
132 } 143 }
133 144
134 void SocketDestroyFunction::Work() { 145 void SocketDestroyFunction::Work() {
135 if (!controller()->RemoveSocket(socket_id_)) 146 manager_->Remove(socket_id_);
136 error_ = kSocketNotFoundError;
137 } 147 }
138 148
139 SocketConnectFunction::SocketConnectFunction() { 149 SocketConnectFunction::SocketConnectFunction() {
140 } 150 }
141 151
142 SocketConnectFunction::~SocketConnectFunction() { 152 SocketConnectFunction::~SocketConnectFunction() {
143 } 153 }
144 154
145 bool SocketConnectFunction::Prepare() { 155 bool SocketConnectFunction::Prepare() {
146 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 156 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
147 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &hostname_)); 157 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &hostname_));
148 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_)); 158 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_));
149 return true; 159 return true;
150 } 160 }
151 161
152 void SocketConnectFunction::AsyncWorkStart() { 162 void SocketConnectFunction::AsyncWorkStart() {
153 StartDnsLookup(hostname_); 163 StartDnsLookup(hostname_);
154 } 164 }
155 165
156 void SocketConnectFunction::AfterDnsLookup(int lookup_result) { 166 void SocketConnectFunction::AfterDnsLookup(int lookup_result) {
157 if (lookup_result == net::OK) { 167 if (lookup_result == net::OK) {
158 StartConnect(); 168 StartConnect();
159 } else { 169 } else {
160 SetResult(Value::CreateIntegerValue(lookup_result)); 170 SetResult(Value::CreateIntegerValue(lookup_result));
161 AsyncWorkCompleted(); 171 AsyncWorkCompleted();
162 } 172 }
163 } 173 }
164 174
165 void SocketConnectFunction::StartConnect() { 175 void SocketConnectFunction::StartConnect() {
166 Socket* socket = controller()->GetSocket(socket_id_); 176 Socket* socket = manager_->Get(socket_id_);
167 if (!socket) { 177 if (!socket) {
168 error_ = kSocketNotFoundError; 178 error_ = kSocketNotFoundError;
169 OnConnect(-1); 179 OnConnect(-1);
170 return; 180 return;
171 } 181 }
172 182
173 socket->Connect(resolved_address_, port_, 183 socket->Connect(resolved_address_, port_,
174 base::Bind(&SocketConnectFunction::OnConnect, this)); 184 base::Bind(&SocketConnectFunction::OnConnect, this));
175 } 185 }
176 186
177 void SocketConnectFunction::OnConnect(int result) { 187 void SocketConnectFunction::OnConnect(int result) {
178 SetResult(Value::CreateIntegerValue(result)); 188 SetResult(Value::CreateIntegerValue(result));
179 AsyncWorkCompleted(); 189 AsyncWorkCompleted();
180 } 190 }
181 191
182 bool SocketDisconnectFunction::Prepare() { 192 bool SocketDisconnectFunction::Prepare() {
183 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 193 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
184 return true; 194 return true;
185 } 195 }
186 196
187 void SocketDisconnectFunction::Work() { 197 void SocketDisconnectFunction::Work() {
188 Socket* socket = controller()->GetSocket(socket_id_); 198 Socket* socket = manager_->Get(socket_id_);
189 if (socket) 199 if (socket)
190 socket->Disconnect(); 200 socket->Disconnect();
191 else 201 else
192 error_ = kSocketNotFoundError; 202 error_ = kSocketNotFoundError;
193 SetResult(Value::CreateNullValue()); 203 SetResult(Value::CreateNullValue());
194 } 204 }
195 205
196 bool SocketBindFunction::Prepare() { 206 bool SocketBindFunction::Prepare() {
197 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 207 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
198 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_)); 208 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_));
199 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_)); 209 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_));
200 return true; 210 return true;
201 } 211 }
202 212
203 void SocketBindFunction::Work() { 213 void SocketBindFunction::Work() {
204 int result = -1; 214 int result = -1;
205 Socket* socket = controller()->GetSocket(socket_id_); 215 Socket* socket = manager_->Get(socket_id_);
206 if (socket) 216 if (socket)
207 result = socket->Bind(address_, port_); 217 result = socket->Bind(address_, port_);
208 else 218 else
209 error_ = kSocketNotFoundError; 219 error_ = kSocketNotFoundError;
210 220
211 SetResult(Value::CreateIntegerValue(result)); 221 SetResult(Value::CreateIntegerValue(result));
212 } 222 }
213 223
214 SocketReadFunction::SocketReadFunction() 224 SocketReadFunction::SocketReadFunction()
215 : params_(NULL) { 225 : params_(NULL) {
216 } 226 }
217 227
218 SocketReadFunction::~SocketReadFunction() {} 228 SocketReadFunction::~SocketReadFunction() {}
219 229
220 bool SocketReadFunction::Prepare() { 230 bool SocketReadFunction::Prepare() {
221 params_ = api::experimental_socket::Read::Params::Create(*args_); 231 params_ = api::experimental_socket::Read::Params::Create(*args_);
222 EXTENSION_FUNCTION_VALIDATE(params_.get()); 232 EXTENSION_FUNCTION_VALIDATE(params_.get());
223 return true; 233 return true;
224 } 234 }
225 235
226 void SocketReadFunction::AsyncWorkStart() { 236 void SocketReadFunction::AsyncWorkStart() {
227 Socket* socket = controller()->GetSocket(params_->socket_id); 237 Socket* socket = manager_->Get(params_->socket_id);
228 if (!socket) { 238 if (!socket) {
229 error_ = kSocketNotFoundError; 239 error_ = kSocketNotFoundError;
230 OnCompleted(-1, NULL); 240 OnCompleted(-1, NULL);
231 return; 241 return;
232 } 242 }
233 243
234 socket->Read(params_->buffer_size.get() ? *params_->buffer_size.get() : 4096, 244 socket->Read(params_->buffer_size.get() ? *params_->buffer_size.get() : 4096,
235 base::Bind(&SocketReadFunction::OnCompleted, this)); 245 base::Bind(&SocketReadFunction::OnCompleted, this));
236 } 246 }
237 247
(...skipping 27 matching lines...) Expand all
265 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 275 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
266 base::BinaryValue *data = NULL; 276 base::BinaryValue *data = NULL;
267 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(1, &data)); 277 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(1, &data));
268 278
269 io_buffer_size_ = data->GetSize(); 279 io_buffer_size_ = data->GetSize();
270 io_buffer_ = new net::WrappedIOBuffer(data->GetBuffer()); 280 io_buffer_ = new net::WrappedIOBuffer(data->GetBuffer());
271 return true; 281 return true;
272 } 282 }
273 283
274 void SocketWriteFunction::AsyncWorkStart() { 284 void SocketWriteFunction::AsyncWorkStart() {
275 Socket* socket = controller()->GetSocket(socket_id_); 285 Socket* socket = manager_->Get(socket_id_);
276 286
277 if (!socket) { 287 if (!socket) {
278 error_ = kSocketNotFoundError; 288 error_ = kSocketNotFoundError;
279 OnCompleted(-1); 289 OnCompleted(-1);
280 return; 290 return;
281 } 291 }
282 292
283 socket->Write(io_buffer_, io_buffer_size_, 293 socket->Write(io_buffer_, io_buffer_size_,
284 base::Bind(&SocketWriteFunction::OnCompleted, this)); 294 base::Bind(&SocketWriteFunction::OnCompleted, this));
285 } 295 }
(...skipping 12 matching lines...) Expand all
298 308
299 SocketRecvFromFunction::~SocketRecvFromFunction() {} 309 SocketRecvFromFunction::~SocketRecvFromFunction() {}
300 310
301 bool SocketRecvFromFunction::Prepare() { 311 bool SocketRecvFromFunction::Prepare() {
302 params_ = api::experimental_socket::RecvFrom::Params::Create(*args_); 312 params_ = api::experimental_socket::RecvFrom::Params::Create(*args_);
303 EXTENSION_FUNCTION_VALIDATE(params_.get()); 313 EXTENSION_FUNCTION_VALIDATE(params_.get());
304 return true; 314 return true;
305 } 315 }
306 316
307 void SocketRecvFromFunction::AsyncWorkStart() { 317 void SocketRecvFromFunction::AsyncWorkStart() {
308 Socket* socket = controller()->GetSocket(params_->socket_id); 318 Socket* socket = manager_->Get(params_->socket_id);
309 if (!socket) { 319 if (!socket) {
310 error_ = kSocketNotFoundError; 320 error_ = kSocketNotFoundError;
311 OnCompleted(-1, NULL, std::string(), 0); 321 OnCompleted(-1, NULL, std::string(), 0);
312 return; 322 return;
313 } 323 }
314 324
315 socket->RecvFrom(params_->buffer_size.get() ? *params_->buffer_size : 4096, 325 socket->RecvFrom(params_->buffer_size.get() ? *params_->buffer_size : 4096,
316 base::Bind(&SocketRecvFromFunction::OnCompleted, this)); 326 base::Bind(&SocketRecvFromFunction::OnCompleted, this));
317 } 327 }
318 328
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 void SocketSendToFunction::AfterDnsLookup(int lookup_result) { 375 void SocketSendToFunction::AfterDnsLookup(int lookup_result) {
366 if (lookup_result == net::OK) { 376 if (lookup_result == net::OK) {
367 StartSendTo(); 377 StartSendTo();
368 } else { 378 } else {
369 SetResult(Value::CreateIntegerValue(lookup_result)); 379 SetResult(Value::CreateIntegerValue(lookup_result));
370 AsyncWorkCompleted(); 380 AsyncWorkCompleted();
371 } 381 }
372 } 382 }
373 383
374 void SocketSendToFunction::StartSendTo() { 384 void SocketSendToFunction::StartSendTo() {
375 Socket* socket = controller()->GetSocket(socket_id_); 385 Socket* socket = manager_->Get(socket_id_);
376 if (!socket) { 386 if (!socket) {
377 error_ = kSocketNotFoundError; 387 error_ = kSocketNotFoundError;
378 OnCompleted(-1); 388 OnCompleted(-1);
379 return; 389 return;
380 } 390 }
381 391
382 socket->SendTo(io_buffer_, io_buffer_size_, resolved_address_, port_, 392 socket->SendTo(io_buffer_, io_buffer_size_, resolved_address_, port_,
383 base::Bind(&SocketSendToFunction::OnCompleted, this)); 393 base::Bind(&SocketSendToFunction::OnCompleted, this));
384 } 394 }
385 395
(...skipping 12 matching lines...) Expand all
398 SocketSetKeepAliveFunction::~SocketSetKeepAliveFunction() {} 408 SocketSetKeepAliveFunction::~SocketSetKeepAliveFunction() {}
399 409
400 bool SocketSetKeepAliveFunction::Prepare() { 410 bool SocketSetKeepAliveFunction::Prepare() {
401 params_ = api::experimental_socket::SetKeepAlive::Params::Create(*args_); 411 params_ = api::experimental_socket::SetKeepAlive::Params::Create(*args_);
402 EXTENSION_FUNCTION_VALIDATE(params_.get()); 412 EXTENSION_FUNCTION_VALIDATE(params_.get());
403 return true; 413 return true;
404 } 414 }
405 415
406 void SocketSetKeepAliveFunction::Work() { 416 void SocketSetKeepAliveFunction::Work() {
407 bool result = false; 417 bool result = false;
408 Socket* socket = controller()->GetSocket(params_->socket_id); 418 Socket* socket = manager_->Get(params_->socket_id);
409 if (socket) { 419 if (socket) {
410 int delay = 0; 420 int delay = 0;
411 if (params_->delay.get()) 421 if (params_->delay.get())
412 delay = *params_->delay; 422 delay = *params_->delay;
413 result = socket->SetKeepAlive(params_->enable, delay); 423 result = socket->SetKeepAlive(params_->enable, delay);
414 } else { 424 } else {
415 error_ = kSocketNotFoundError; 425 error_ = kSocketNotFoundError;
416 } 426 }
417 SetResult(Value::CreateBooleanValue(result)); 427 SetResult(Value::CreateBooleanValue(result));
418 } 428 }
419 429
420 SocketSetNoDelayFunction::SocketSetNoDelayFunction() 430 SocketSetNoDelayFunction::SocketSetNoDelayFunction()
421 : params_(NULL) { 431 : params_(NULL) {
422 } 432 }
423 433
424 SocketSetNoDelayFunction::~SocketSetNoDelayFunction() {} 434 SocketSetNoDelayFunction::~SocketSetNoDelayFunction() {}
425 435
426 bool SocketSetNoDelayFunction::Prepare() { 436 bool SocketSetNoDelayFunction::Prepare() {
427 params_ = api::experimental_socket::SetNoDelay::Params::Create(*args_); 437 params_ = api::experimental_socket::SetNoDelay::Params::Create(*args_);
428 EXTENSION_FUNCTION_VALIDATE(params_.get()); 438 EXTENSION_FUNCTION_VALIDATE(params_.get());
429 return true; 439 return true;
430 } 440 }
431 441
432 void SocketSetNoDelayFunction::Work() { 442 void SocketSetNoDelayFunction::Work() {
433 bool result = false; 443 bool result = false;
434 Socket* socket = controller()->GetSocket(params_->socket_id); 444 Socket* socket = manager_->Get(params_->socket_id);
435 if (socket) 445 if (socket)
436 result = socket->SetNoDelay(params_->no_delay); 446 result = socket->SetNoDelay(params_->no_delay);
437 else 447 else
438 error_ = kSocketNotFoundError; 448 error_ = kSocketNotFoundError;
439 SetResult(Value::CreateBooleanValue(result)); 449 SetResult(Value::CreateBooleanValue(result));
440 } 450 }
441 451
442 } // namespace extensions 452 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698