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

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: Merge/antony/fix build. 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
37 void SocketExtensionFunction::Work() { 36 SocketAsyncApiFunction::SocketAsyncApiFunction()
37 : manager_(NULL) {
38 } 38 }
39 39
40 bool SocketExtensionFunction::Respond() { 40 SocketAsyncApiFunction::~SocketAsyncApiFunction() {
41 }
42
43 bool SocketAsyncApiFunction::PrePrepare() {
44 manager_ = ExtensionSystem::Get(profile())->socket_manager();
45 return manager_ != NULL;
46 }
47
48 bool SocketAsyncApiFunction::Respond() {
41 return error_.empty(); 49 return error_.empty();
42 } 50 }
43 51
44 SocketExtensionWithDnsLookupFunction::SocketExtensionWithDnsLookupFunction() 52 SocketExtensionWithDnsLookupFunction::SocketExtensionWithDnsLookupFunction()
45 : io_thread_(g_browser_process->io_thread()), 53 : io_thread_(g_browser_process->io_thread()),
46 request_handle_(new net::HostResolver::RequestHandle), 54 request_handle_(new net::HostResolver::RequestHandle),
47 addresses_(new net::AddressList) { 55 addresses_(new net::AddressList) {
48 } 56 }
49 57
50 SocketExtensionWithDnsLookupFunction::~SocketExtensionWithDnsLookupFunction() { 58 SocketExtensionWithDnsLookupFunction::~SocketExtensionWithDnsLookupFunction() {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 void SocketCreateFunction::Work() { 123 void SocketCreateFunction::Work() {
116 Socket* socket = NULL; 124 Socket* socket = NULL;
117 if (socket_type_ == kSocketTypeTCP) { 125 if (socket_type_ == kSocketTypeTCP) {
118 socket = new TCPSocket(event_notifier_); 126 socket = new TCPSocket(event_notifier_);
119 } else if (socket_type_== kSocketTypeUDP) { 127 } else if (socket_type_== kSocketTypeUDP) {
120 socket = new UDPSocket(event_notifier_); 128 socket = new UDPSocket(event_notifier_);
121 } 129 }
122 DCHECK(socket); 130 DCHECK(socket);
123 131
124 DictionaryValue* result = new DictionaryValue(); 132 DictionaryValue* result = new DictionaryValue();
125 result->SetInteger(kSocketIdKey, controller()->AddAPIResource(socket)); 133 result->SetInteger(kSocketIdKey, manager_->Add(socket));
126 SetResult(result); 134 SetResult(result);
127 } 135 }
128 136
129 bool SocketDestroyFunction::Prepare() { 137 bool SocketDestroyFunction::Prepare() {
130 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 138 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
131 return true; 139 return true;
132 } 140 }
133 141
134 void SocketDestroyFunction::Work() { 142 void SocketDestroyFunction::Work() {
135 if (!controller()->RemoveSocket(socket_id_)) 143 manager_->Remove(socket_id_);
136 error_ = kSocketNotFoundError;
137 } 144 }
138 145
139 SocketConnectFunction::SocketConnectFunction() { 146 SocketConnectFunction::SocketConnectFunction() {
140 } 147 }
141 148
142 SocketConnectFunction::~SocketConnectFunction() { 149 SocketConnectFunction::~SocketConnectFunction() {
143 } 150 }
144 151
145 bool SocketConnectFunction::Prepare() { 152 bool SocketConnectFunction::Prepare() {
146 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 153 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
147 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &hostname_)); 154 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &hostname_));
148 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_)); 155 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_));
149 return true; 156 return true;
150 } 157 }
151 158
152 void SocketConnectFunction::AsyncWorkStart() { 159 void SocketConnectFunction::AsyncWorkStart() {
153 StartDnsLookup(hostname_); 160 StartDnsLookup(hostname_);
154 } 161 }
155 162
156 void SocketConnectFunction::AfterDnsLookup(int lookup_result) { 163 void SocketConnectFunction::AfterDnsLookup(int lookup_result) {
157 if (lookup_result == net::OK) { 164 if (lookup_result == net::OK) {
158 StartConnect(); 165 StartConnect();
159 } else { 166 } else {
160 SetResult(Value::CreateIntegerValue(lookup_result)); 167 SetResult(Value::CreateIntegerValue(lookup_result));
161 AsyncWorkCompleted(); 168 AsyncWorkCompleted();
162 } 169 }
163 } 170 }
164 171
165 void SocketConnectFunction::StartConnect() { 172 void SocketConnectFunction::StartConnect() {
166 Socket* socket = controller()->GetSocket(socket_id_); 173 Socket* socket = manager_->Get(socket_id_);
167 if (!socket) { 174 if (!socket) {
168 error_ = kSocketNotFoundError; 175 error_ = kSocketNotFoundError;
169 OnConnect(-1); 176 OnConnect(-1);
170 return; 177 return;
171 } 178 }
172 179
173 socket->Connect(resolved_address_, port_, 180 socket->Connect(resolved_address_, port_,
174 base::Bind(&SocketConnectFunction::OnConnect, this)); 181 base::Bind(&SocketConnectFunction::OnConnect, this));
175 } 182 }
176 183
177 void SocketConnectFunction::OnConnect(int result) { 184 void SocketConnectFunction::OnConnect(int result) {
178 SetResult(Value::CreateIntegerValue(result)); 185 SetResult(Value::CreateIntegerValue(result));
179 AsyncWorkCompleted(); 186 AsyncWorkCompleted();
180 } 187 }
181 188
182 bool SocketDisconnectFunction::Prepare() { 189 bool SocketDisconnectFunction::Prepare() {
183 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 190 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
184 return true; 191 return true;
185 } 192 }
186 193
187 void SocketDisconnectFunction::Work() { 194 void SocketDisconnectFunction::Work() {
188 Socket* socket = controller()->GetSocket(socket_id_); 195 Socket* socket = manager_->Get(socket_id_);
189 if (socket) 196 if (socket)
190 socket->Disconnect(); 197 socket->Disconnect();
191 else 198 else
192 error_ = kSocketNotFoundError; 199 error_ = kSocketNotFoundError;
193 SetResult(Value::CreateNullValue()); 200 SetResult(Value::CreateNullValue());
194 } 201 }
195 202
196 bool SocketBindFunction::Prepare() { 203 bool SocketBindFunction::Prepare() {
197 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 204 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
198 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_)); 205 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &address_));
199 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_)); 206 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(2, &port_));
200 return true; 207 return true;
201 } 208 }
202 209
203 void SocketBindFunction::Work() { 210 void SocketBindFunction::Work() {
204 int result = -1; 211 int result = -1;
205 Socket* socket = controller()->GetSocket(socket_id_); 212 Socket* socket = manager_->Get(socket_id_);
206 if (socket) 213 if (socket)
207 result = socket->Bind(address_, port_); 214 result = socket->Bind(address_, port_);
208 else 215 else
209 error_ = kSocketNotFoundError; 216 error_ = kSocketNotFoundError;
210 217
211 SetResult(Value::CreateIntegerValue(result)); 218 SetResult(Value::CreateIntegerValue(result));
212 } 219 }
213 220
214 SocketReadFunction::SocketReadFunction() 221 SocketReadFunction::SocketReadFunction()
215 : params_(NULL) { 222 : params_(NULL) {
216 } 223 }
217 224
218 SocketReadFunction::~SocketReadFunction() {} 225 SocketReadFunction::~SocketReadFunction() {}
219 226
220 bool SocketReadFunction::Prepare() { 227 bool SocketReadFunction::Prepare() {
221 params_ = api::experimental_socket::Read::Params::Create(*args_); 228 params_ = api::experimental_socket::Read::Params::Create(*args_);
222 EXTENSION_FUNCTION_VALIDATE(params_.get()); 229 EXTENSION_FUNCTION_VALIDATE(params_.get());
223 return true; 230 return true;
224 } 231 }
225 232
226 void SocketReadFunction::AsyncWorkStart() { 233 void SocketReadFunction::AsyncWorkStart() {
227 Socket* socket = controller()->GetSocket(params_->socket_id); 234 Socket* socket = manager_->Get(params_->socket_id);
228 if (!socket) { 235 if (!socket) {
229 error_ = kSocketNotFoundError; 236 error_ = kSocketNotFoundError;
230 OnCompleted(-1, NULL); 237 OnCompleted(-1, NULL);
231 return; 238 return;
232 } 239 }
233 240
234 socket->Read(params_->buffer_size.get() ? *params_->buffer_size.get() : 4096, 241 socket->Read(params_->buffer_size.get() ? *params_->buffer_size.get() : 4096,
235 base::Bind(&SocketReadFunction::OnCompleted, this)); 242 base::Bind(&SocketReadFunction::OnCompleted, this));
236 } 243 }
237 244
(...skipping 27 matching lines...) Expand all
265 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_)); 272 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &socket_id_));
266 base::BinaryValue *data = NULL; 273 base::BinaryValue *data = NULL;
267 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(1, &data)); 274 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(1, &data));
268 275
269 io_buffer_size_ = data->GetSize(); 276 io_buffer_size_ = data->GetSize();
270 io_buffer_ = new net::WrappedIOBuffer(data->GetBuffer()); 277 io_buffer_ = new net::WrappedIOBuffer(data->GetBuffer());
271 return true; 278 return true;
272 } 279 }
273 280
274 void SocketWriteFunction::AsyncWorkStart() { 281 void SocketWriteFunction::AsyncWorkStart() {
275 Socket* socket = controller()->GetSocket(socket_id_); 282 Socket* socket = manager_->Get(socket_id_);
276 283
277 if (!socket) { 284 if (!socket) {
278 error_ = kSocketNotFoundError; 285 error_ = kSocketNotFoundError;
279 OnCompleted(-1); 286 OnCompleted(-1);
280 return; 287 return;
281 } 288 }
282 289
283 socket->Write(io_buffer_, io_buffer_size_, 290 socket->Write(io_buffer_, io_buffer_size_,
284 base::Bind(&SocketWriteFunction::OnCompleted, this)); 291 base::Bind(&SocketWriteFunction::OnCompleted, this));
285 } 292 }
(...skipping 12 matching lines...) Expand all
298 305
299 SocketRecvFromFunction::~SocketRecvFromFunction() {} 306 SocketRecvFromFunction::~SocketRecvFromFunction() {}
300 307
301 bool SocketRecvFromFunction::Prepare() { 308 bool SocketRecvFromFunction::Prepare() {
302 params_ = api::experimental_socket::RecvFrom::Params::Create(*args_); 309 params_ = api::experimental_socket::RecvFrom::Params::Create(*args_);
303 EXTENSION_FUNCTION_VALIDATE(params_.get()); 310 EXTENSION_FUNCTION_VALIDATE(params_.get());
304 return true; 311 return true;
305 } 312 }
306 313
307 void SocketRecvFromFunction::AsyncWorkStart() { 314 void SocketRecvFromFunction::AsyncWorkStart() {
308 Socket* socket = controller()->GetSocket(params_->socket_id); 315 Socket* socket = manager_->Get(params_->socket_id);
309 if (!socket) { 316 if (!socket) {
310 error_ = kSocketNotFoundError; 317 error_ = kSocketNotFoundError;
311 OnCompleted(-1, NULL, std::string(), 0); 318 OnCompleted(-1, NULL, std::string(), 0);
312 return; 319 return;
313 } 320 }
314 321
315 socket->RecvFrom(params_->buffer_size.get() ? *params_->buffer_size : 4096, 322 socket->RecvFrom(params_->buffer_size.get() ? *params_->buffer_size : 4096,
316 base::Bind(&SocketRecvFromFunction::OnCompleted, this)); 323 base::Bind(&SocketRecvFromFunction::OnCompleted, this));
317 } 324 }
318 325
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 void SocketSendToFunction::AfterDnsLookup(int lookup_result) { 372 void SocketSendToFunction::AfterDnsLookup(int lookup_result) {
366 if (lookup_result == net::OK) { 373 if (lookup_result == net::OK) {
367 StartSendTo(); 374 StartSendTo();
368 } else { 375 } else {
369 SetResult(Value::CreateIntegerValue(lookup_result)); 376 SetResult(Value::CreateIntegerValue(lookup_result));
370 AsyncWorkCompleted(); 377 AsyncWorkCompleted();
371 } 378 }
372 } 379 }
373 380
374 void SocketSendToFunction::StartSendTo() { 381 void SocketSendToFunction::StartSendTo() {
375 Socket* socket = controller()->GetSocket(socket_id_); 382 Socket* socket = manager_->Get(socket_id_);
376 if (!socket) { 383 if (!socket) {
377 error_ = kSocketNotFoundError; 384 error_ = kSocketNotFoundError;
378 OnCompleted(-1); 385 OnCompleted(-1);
379 return; 386 return;
380 } 387 }
381 388
382 socket->SendTo(io_buffer_, io_buffer_size_, resolved_address_, port_, 389 socket->SendTo(io_buffer_, io_buffer_size_, resolved_address_, port_,
383 base::Bind(&SocketSendToFunction::OnCompleted, this)); 390 base::Bind(&SocketSendToFunction::OnCompleted, this));
384 } 391 }
385 392
(...skipping 12 matching lines...) Expand all
398 SocketSetKeepAliveFunction::~SocketSetKeepAliveFunction() {} 405 SocketSetKeepAliveFunction::~SocketSetKeepAliveFunction() {}
399 406
400 bool SocketSetKeepAliveFunction::Prepare() { 407 bool SocketSetKeepAliveFunction::Prepare() {
401 params_ = api::experimental_socket::SetKeepAlive::Params::Create(*args_); 408 params_ = api::experimental_socket::SetKeepAlive::Params::Create(*args_);
402 EXTENSION_FUNCTION_VALIDATE(params_.get()); 409 EXTENSION_FUNCTION_VALIDATE(params_.get());
403 return true; 410 return true;
404 } 411 }
405 412
406 void SocketSetKeepAliveFunction::Work() { 413 void SocketSetKeepAliveFunction::Work() {
407 bool result = false; 414 bool result = false;
408 Socket* socket = controller()->GetSocket(params_->socket_id); 415 Socket* socket = manager_->Get(params_->socket_id);
409 if (socket) { 416 if (socket) {
410 int delay = 0; 417 int delay = 0;
411 if (params_->delay.get()) 418 if (params_->delay.get())
412 delay = *params_->delay; 419 delay = *params_->delay;
413 result = socket->SetKeepAlive(params_->enable, delay); 420 result = socket->SetKeepAlive(params_->enable, delay);
414 } else { 421 } else {
415 error_ = kSocketNotFoundError; 422 error_ = kSocketNotFoundError;
416 } 423 }
417 SetResult(Value::CreateBooleanValue(result)); 424 SetResult(Value::CreateBooleanValue(result));
418 } 425 }
419 426
420 SocketSetNoDelayFunction::SocketSetNoDelayFunction() 427 SocketSetNoDelayFunction::SocketSetNoDelayFunction()
421 : params_(NULL) { 428 : params_(NULL) {
422 } 429 }
423 430
424 SocketSetNoDelayFunction::~SocketSetNoDelayFunction() {} 431 SocketSetNoDelayFunction::~SocketSetNoDelayFunction() {}
425 432
426 bool SocketSetNoDelayFunction::Prepare() { 433 bool SocketSetNoDelayFunction::Prepare() {
427 params_ = api::experimental_socket::SetNoDelay::Params::Create(*args_); 434 params_ = api::experimental_socket::SetNoDelay::Params::Create(*args_);
428 EXTENSION_FUNCTION_VALIDATE(params_.get()); 435 EXTENSION_FUNCTION_VALIDATE(params_.get());
429 return true; 436 return true;
430 } 437 }
431 438
432 void SocketSetNoDelayFunction::Work() { 439 void SocketSetNoDelayFunction::Work() {
433 bool result = false; 440 bool result = false;
434 Socket* socket = controller()->GetSocket(params_->socket_id); 441 Socket* socket = manager_->Get(params_->socket_id);
435 if (socket) 442 if (socket)
436 result = socket->SetNoDelay(params_->no_delay); 443 result = socket->SetNoDelay(params_->no_delay);
437 else 444 else
438 error_ = kSocketNotFoundError; 445 error_ = kSocketNotFoundError;
439 SetResult(Value::CreateBooleanValue(result)); 446 SetResult(Value::CreateBooleanValue(result));
440 } 447 }
441 448
442 } // namespace extensions 449 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/socket/socket_api.h ('k') | chrome/browser/extensions/api/socket/tcp_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698