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

Side by Side Diff: chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.cc

Issue 278663002: Implement chrome.bluetoothSocket.listenUsing*() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 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 "chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.h" 5 #include "chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_api.h"
6 6
7 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_socket.h" 7 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api_socket.h"
8 #include "chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_event_ dispatcher.h" 8 #include "chrome/browser/extensions/api/bluetooth_socket/bluetooth_socket_event_ dispatcher.h"
9 #include "chrome/common/extensions/api/bluetooth/bluetooth_manifest_data.h" 9 #include "chrome/common/extensions/api/bluetooth/bluetooth_manifest_data.h"
10 #include "content/public/browser/browser_context.h" 10 #include "content/public/browser/browser_context.h"
(...skipping 27 matching lines...) Expand all
38 if (!socket->name().empty()) { 38 if (!socket->name().empty()) {
39 socket_info->name.reset(new std::string(socket->name())); 39 socket_info->name.reset(new std::string(socket->name()));
40 } 40 }
41 socket_info->persistent = socket->persistent(); 41 socket_info->persistent = socket->persistent();
42 if (socket->buffer_size() > 0) { 42 if (socket->buffer_size() > 0) {
43 socket_info->buffer_size.reset(new int(socket->buffer_size())); 43 socket_info->buffer_size.reset(new int(socket->buffer_size()));
44 } 44 }
45 socket_info->paused = socket->paused(); 45 socket_info->paused = socket->paused();
46 socket_info->connected = socket->IsConnected(); 46 socket_info->connected = socket->IsConnected();
47 47
48 // TODO(keybuk): These should not be present if socket isn't connected or 48 if (socket->IsConnected())
armansito 2014/05/08 22:00:16 Does IsConnected imply listening?
keybuk 2014/05/08 22:02:46 A BluetoothApiSocket can be: - created - connect
armansito 2014/05/08 22:25:14 OK. I commented on this because your previous comm
49 // listening. 49 socket_info->address.reset(new std::string(socket->device_address()));
50 socket_info->address.reset(new std::string(socket->device_address()));
51 socket_info->uuid.reset(new std::string(socket->uuid().canonical_value())); 50 socket_info->uuid.reset(new std::string(socket->uuid().canonical_value()));
52 51
53 return socket_info; 52 return socket_info;
54 } 53 }
55 54
56 void SetSocketProperties(BluetoothApiSocket* socket, 55 void SetSocketProperties(BluetoothApiSocket* socket,
57 SocketProperties* properties) { 56 SocketProperties* properties) {
58 if (properties->name.get()) { 57 if (properties->name.get()) {
59 socket->set_name(*properties->name.get()); 58 socket->set_name(*properties->name.get());
60 } 59 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 socket->set_paused(params_->paused); 215 socket->set_paused(params_->paused);
217 if (!params_->paused) { 216 if (!params_->paused) {
218 socket_event_dispatcher_->OnSocketResume(extension_id(), 217 socket_event_dispatcher_->OnSocketResume(extension_id(),
219 params_->socket_id); 218 params_->socket_id);
220 } 219 }
221 } 220 }
222 221
223 results_ = bluetooth_socket::SetPaused::Results::Create(); 222 results_ = bluetooth_socket::SetPaused::Results::Create();
224 } 223 }
225 224
226 bool BluetoothSocketListenUsingRfcommFunction::RunAsync() { 225 BluetoothSocketListenFunction::BluetoothSocketListenFunction() {}
227 // TODO(keybuk): Implement. 226
228 SetError("Not yet implemented."); 227 BluetoothSocketListenFunction::~BluetoothSocketListenFunction() {}
229 return false; 228
229 bool BluetoothSocketListenFunction::Prepare() {
230 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
231 if (!CreateParams())
232 return false;
233 socket_event_dispatcher_ = GetSocketEventDispatcher(browser_context());
234 return socket_event_dispatcher_ != NULL;
230 } 235 }
231 236
232 bool BluetoothSocketListenUsingInsecureRfcommFunction::RunAsync() { 237 void BluetoothSocketListenFunction::AsyncWorkStart() {
233 // TODO(keybuk): Implement. 238 DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
234 SetError("Not yet implemented."); 239 device::BluetoothAdapterFactory::GetAdapter(
235 return false; 240 base::Bind(&BluetoothSocketListenFunction::OnGetAdapter, this));
236 } 241 }
237 242
238 bool BluetoothSocketListenUsingL2capFunction::RunAsync() { 243 void BluetoothSocketListenFunction::OnGetAdapter(
239 // TODO(keybuk): Implement. 244 scoped_refptr<device::BluetoothAdapter> adapter) {
240 SetError("Not yet implemented."); 245 DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
241 return false; 246 BluetoothApiSocket* socket = GetSocket(socket_id());
247 if (!socket) {
248 error_ = kSocketNotFoundError;
249 AsyncWorkCompleted();
250 return;
251 }
252
253 device::BluetoothUUID bluetooth_uuid(uuid());
254 if (!bluetooth_uuid.IsValid()) {
255 error_ = kInvalidUuidError;
256 AsyncWorkCompleted();
257 return;
258 }
259
260 BluetoothPermissionRequest param(uuid());
261 if (!BluetoothManifestData::CheckRequest(GetExtension(), param)) {
262 error_ = kPermissionDeniedError;
263 AsyncWorkCompleted();
264 return;
265 }
266
267 CreateService(
268 adapter,
269 bluetooth_uuid,
270 base::Bind(&BluetoothSocketListenFunction::OnCreateService, this),
271 base::Bind(&BluetoothSocketListenFunction::OnCreateServiceError, this));
272 }
273
274
275 void BluetoothSocketListenFunction::OnCreateService(
276 scoped_refptr<device::BluetoothSocket> socket) {
277 DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
278
279 // Fetch the socket again since this is not a reference-counted object, and
280 // it may have gone away in the meantime (we check earlier to avoid making
281 // a connection in the case of an obvious programming error).
282 BluetoothApiSocket* api_socket = GetSocket(socket_id());
283 if (!api_socket) {
284 error_ = kSocketNotFoundError;
285 AsyncWorkCompleted();
286 return;
287 }
288
289 api_socket->AdoptListeningSocket(socket,
290 device::BluetoothUUID(uuid()));
291 socket_event_dispatcher_->OnSocketListen(extension_id(), socket_id());
292
293 CreateResults();
294 AsyncWorkCompleted();
295 }
296
297 void BluetoothSocketListenFunction::OnCreateServiceError(
298 const std::string& message) {
299 DCHECK(BrowserThread::CurrentlyOn(work_thread_id()));
300 error_ = message;
301 AsyncWorkCompleted();
302 }
303
304 BluetoothSocketListenUsingRfcommFunction::
305 BluetoothSocketListenUsingRfcommFunction() {}
306
307 BluetoothSocketListenUsingRfcommFunction::
308 ~BluetoothSocketListenUsingRfcommFunction() {}
309
310 int BluetoothSocketListenUsingRfcommFunction::socket_id() const {
311 return params_->socket_id;
312 }
313
314 const std::string& BluetoothSocketListenUsingRfcommFunction::uuid() const {
315 return params_->uuid;
316 }
317
318 bool BluetoothSocketListenUsingRfcommFunction::CreateParams() {
319 params_ = bluetooth_socket::ListenUsingRfcomm::Params::Create(*args_);
320 EXTENSION_FUNCTION_VALIDATE(params_.get());
321 return true;
322 }
323
324 void BluetoothSocketListenUsingRfcommFunction::CreateService(
325 scoped_refptr<device::BluetoothAdapter> adapter,
326 const device::BluetoothUUID& uuid,
327 const device::BluetoothAdapter::CreateServiceCallback& callback,
328 const device::BluetoothAdapter::CreateServiceErrorCallback&
329 error_callback) {
330 int channel = params_->channel;
331 if (!channel)
332 channel = device::BluetoothAdapter::kChannelAuto;
333
334 adapter->CreateRfcommService(uuid, channel, false, callback, error_callback);
335 }
336
337 void BluetoothSocketListenUsingRfcommFunction::CreateResults() {
338 results_ = bluetooth_socket::ListenUsingRfcomm::Results::Create();
339 }
340
341 BluetoothSocketListenUsingInsecureRfcommFunction::
342 BluetoothSocketListenUsingInsecureRfcommFunction() {}
343
344 BluetoothSocketListenUsingInsecureRfcommFunction::
345 ~BluetoothSocketListenUsingInsecureRfcommFunction() {}
346
347 int BluetoothSocketListenUsingInsecureRfcommFunction::socket_id() const {
348 return params_->socket_id;
349 }
350
351 const std::string&
352 BluetoothSocketListenUsingInsecureRfcommFunction::uuid() const {
353 return params_->uuid;
354 }
355
356 bool BluetoothSocketListenUsingInsecureRfcommFunction::CreateParams() {
357 params_ = bluetooth_socket::ListenUsingInsecureRfcomm::Params::Create(*args_);
358 EXTENSION_FUNCTION_VALIDATE(params_.get());
359 return true;
360 }
361
362 void BluetoothSocketListenUsingInsecureRfcommFunction::CreateService(
363 scoped_refptr<device::BluetoothAdapter> adapter,
364 const device::BluetoothUUID& uuid,
365 const device::BluetoothAdapter::CreateServiceCallback& callback,
366 const device::BluetoothAdapter::CreateServiceErrorCallback&
367 error_callback) {
368 int channel = params_->channel;
369 if (!channel)
370 channel = device::BluetoothAdapter::kChannelAuto;
371
372 adapter->CreateRfcommService(uuid, channel, true, callback, error_callback);
373 }
374
375 void BluetoothSocketListenUsingInsecureRfcommFunction::CreateResults() {
376 results_ = bluetooth_socket::ListenUsingInsecureRfcomm::Results::Create();
377 }
378
379 BluetoothSocketListenUsingL2capFunction::
380 BluetoothSocketListenUsingL2capFunction() {}
381
382 BluetoothSocketListenUsingL2capFunction::
383 ~BluetoothSocketListenUsingL2capFunction() {}
384
385 int BluetoothSocketListenUsingL2capFunction::socket_id() const {
386 return params_->socket_id;
387 }
388
389 const std::string& BluetoothSocketListenUsingL2capFunction::uuid() const {
390 return params_->uuid;
391 }
392
393 bool BluetoothSocketListenUsingL2capFunction::CreateParams() {
394 params_ = bluetooth_socket::ListenUsingL2cap::Params::Create(*args_);
395 EXTENSION_FUNCTION_VALIDATE(params_.get());
396 return true;
397 }
398
399 void BluetoothSocketListenUsingL2capFunction::CreateService(
400 scoped_refptr<device::BluetoothAdapter> adapter,
401 const device::BluetoothUUID& uuid,
402 const device::BluetoothAdapter::CreateServiceCallback& callback,
403 const device::BluetoothAdapter::CreateServiceErrorCallback&
404 error_callback) {
405 int psm = params_->psm;
406 if (!psm)
407 psm = device::BluetoothAdapter::kPsmAuto;
408
409 adapter->CreateL2capService(uuid, psm, callback, error_callback);
410 }
411
412 void BluetoothSocketListenUsingL2capFunction::CreateResults() {
413 results_ = bluetooth_socket::ListenUsingL2cap::Results::Create();
242 } 414 }
243 415
244 BluetoothSocketConnectFunction::BluetoothSocketConnectFunction() {} 416 BluetoothSocketConnectFunction::BluetoothSocketConnectFunction() {}
245 417
246 BluetoothSocketConnectFunction::~BluetoothSocketConnectFunction() {} 418 BluetoothSocketConnectFunction::~BluetoothSocketConnectFunction() {}
247 419
248 bool BluetoothSocketConnectFunction::Prepare() { 420 bool BluetoothSocketConnectFunction::Prepare() {
249 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 421 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
250 params_ = bluetooth_socket::Connect::Params::Create(*args_); 422 params_ = bluetooth_socket::Connect::Params::Create(*args_);
251 EXTENSION_FUNCTION_VALIDATE(params_.get()); 423 EXTENSION_FUNCTION_VALIDATE(params_.get());
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 if (socket) { 634 if (socket) {
463 socket_infos.push_back(CreateSocketInfo(socket_id, socket)); 635 socket_infos.push_back(CreateSocketInfo(socket_id, socket));
464 } 636 }
465 } 637 }
466 } 638 }
467 results_ = bluetooth_socket::GetSockets::Results::Create(socket_infos); 639 results_ = bluetooth_socket::GetSockets::Results::Create(socket_infos);
468 } 640 }
469 641
470 } // namespace api 642 } // namespace api
471 } // namespace extensions 643 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698