Chromium Code Reviews| 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 "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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |