OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "chromeos/dbus/fake_bluetooth_device_client.h" | 5 #include "chromeos/dbus/fake_bluetooth_device_client.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 VLOG(1) << "GetAll"; | 126 VLOG(1) << "GetAll"; |
127 } | 127 } |
128 | 128 |
129 void FakeBluetoothDeviceClient::Properties::Set( | 129 void FakeBluetoothDeviceClient::Properties::Set( |
130 dbus::PropertyBase *property, | 130 dbus::PropertyBase *property, |
131 dbus::PropertySet::SetCallback callback) { | 131 dbus::PropertySet::SetCallback callback) { |
132 VLOG(1) << "Set " << property->name(); | 132 VLOG(1) << "Set " << property->name(); |
133 if (property->name() == trusted.name()) { | 133 if (property->name() == trusted.name()) { |
134 callback.Run(true); | 134 callback.Run(true); |
135 property->ReplaceValueWithSetValue(); | 135 property->ReplaceValueWithSetValue(); |
136 NotifyPropertyChanged(property->name()); | |
137 } else { | 136 } else { |
138 callback.Run(false); | 137 callback.Run(false); |
139 } | 138 } |
140 } | 139 } |
141 | 140 |
142 | 141 |
143 FakeBluetoothDeviceClient::FakeBluetoothDeviceClient() | 142 FakeBluetoothDeviceClient::FakeBluetoothDeviceClient() |
144 : simulation_interval_ms_(kSimulationIntervalMs), | 143 : simulation_interval_ms_(kSimulationIntervalMs), |
145 discovery_simulation_step_(0), | 144 discovery_simulation_step_(0), |
146 pairing_cancelled_(false) { | 145 pairing_cancelled_(false) { |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 } else if (properties->paired.value() == true && | 216 } else if (properties->paired.value() == true && |
218 object_path == dbus::ObjectPath(kMicrosoftMousePath)) { | 217 object_path == dbus::ObjectPath(kMicrosoftMousePath)) { |
219 // Must not be paired | 218 // Must not be paired |
220 error_callback.Run(bluetooth_adapter::kErrorFailed, | 219 error_callback.Run(bluetooth_adapter::kErrorFailed, |
221 "Connection fails while paired"); | 220 "Connection fails while paired"); |
222 return; | 221 return; |
223 } | 222 } |
224 | 223 |
225 // The device can be connected. | 224 // The device can be connected. |
226 properties->connected.ReplaceValue(true); | 225 properties->connected.ReplaceValue(true); |
| 226 callback.Run(); |
227 | 227 |
228 AddInputDeviceIfNeeded(object_path, properties); | 228 AddInputDeviceIfNeeded(object_path, properties); |
229 | |
230 callback.Run(); | |
231 properties->NotifyPropertyChanged(properties->connected.name()); | |
232 } | 229 } |
233 | 230 |
234 void FakeBluetoothDeviceClient::Disconnect( | 231 void FakeBluetoothDeviceClient::Disconnect( |
235 const dbus::ObjectPath& object_path, | 232 const dbus::ObjectPath& object_path, |
236 const base::Closure& callback, | 233 const base::Closure& callback, |
237 const ErrorCallback& error_callback) { | 234 const ErrorCallback& error_callback) { |
238 VLOG(1) << "Disconnect: " << object_path.value(); | 235 VLOG(1) << "Disconnect: " << object_path.value(); |
239 Properties* properties = GetProperties(object_path); | 236 Properties* properties = GetProperties(object_path); |
240 | 237 |
241 if (properties->connected.value() == true) { | 238 if (properties->connected.value() == true) { |
| 239 callback.Run(); |
242 properties->connected.ReplaceValue(false); | 240 properties->connected.ReplaceValue(false); |
243 | |
244 callback.Run(); | |
245 properties->NotifyPropertyChanged(properties->connected.name()); | |
246 } else { | 241 } else { |
247 error_callback.Run("org.bluez.Error.NotConnected", "Not Connected"); | 242 error_callback.Run("org.bluez.Error.NotConnected", "Not Connected"); |
248 } | 243 } |
249 } | 244 } |
250 | 245 |
251 void FakeBluetoothDeviceClient::ConnectProfile( | 246 void FakeBluetoothDeviceClient::ConnectProfile( |
252 const dbus::ObjectPath& object_path, | 247 const dbus::ObjectPath& object_path, |
253 const std::string& uuid, | 248 const std::string& uuid, |
254 const base::Closure& callback, | 249 const base::Closure& callback, |
255 const ErrorCallback& error_callback) { | 250 const ErrorCallback& error_callback) { |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 &FakeBluetoothDeviceClient::OnPropertyChanged, | 448 &FakeBluetoothDeviceClient::OnPropertyChanged, |
454 base::Unretained(this), | 449 base::Unretained(this), |
455 dbus::ObjectPath(kAppleMousePath))); | 450 dbus::ObjectPath(kAppleMousePath))); |
456 properties->address.ReplaceValue(kAppleMouseAddress); | 451 properties->address.ReplaceValue(kAppleMouseAddress); |
457 properties->bluetooth_class.ReplaceValue(kAppleMouseClass); | 452 properties->bluetooth_class.ReplaceValue(kAppleMouseClass); |
458 properties->name.ReplaceValue("Fake Apple Magic Mouse"); | 453 properties->name.ReplaceValue("Fake Apple Magic Mouse"); |
459 properties->alias.ReplaceValue(kAppleMouseName); | 454 properties->alias.ReplaceValue(kAppleMouseName); |
460 properties->adapter.ReplaceValue( | 455 properties->adapter.ReplaceValue( |
461 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); | 456 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); |
462 | 457 |
| 458 std::vector<std::string> uuids; |
| 459 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); |
| 460 properties->uuids.ReplaceValue(uuids); |
| 461 |
463 properties_map_[dbus::ObjectPath(kAppleMousePath)] = properties; | 462 properties_map_[dbus::ObjectPath(kAppleMousePath)] = properties; |
464 device_list_.push_back(dbus::ObjectPath(kAppleMousePath)); | 463 device_list_.push_back(dbus::ObjectPath(kAppleMousePath)); |
465 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 464 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
466 DeviceAdded(dbus::ObjectPath(kAppleMousePath))); | 465 DeviceAdded(dbus::ObjectPath(kAppleMousePath))); |
467 } | 466 } |
468 | 467 |
469 } else if (discovery_simulation_step_ == 4) { | 468 } else if (discovery_simulation_step_ == 4) { |
470 if (std::find(device_list_.begin(), device_list_.end(), | 469 if (std::find(device_list_.begin(), device_list_.end(), |
471 dbus::ObjectPath(kAppleKeyboardPath)) == device_list_.end()) { | 470 dbus::ObjectPath(kAppleKeyboardPath)) == device_list_.end()) { |
472 Properties *properties = new Properties(base::Bind( | 471 Properties *properties = new Properties(base::Bind( |
473 &FakeBluetoothDeviceClient::OnPropertyChanged, | 472 &FakeBluetoothDeviceClient::OnPropertyChanged, |
474 base::Unretained(this), | 473 base::Unretained(this), |
475 dbus::ObjectPath(kAppleKeyboardPath))); | 474 dbus::ObjectPath(kAppleKeyboardPath))); |
476 properties->address.ReplaceValue(kAppleKeyboardAddress); | 475 properties->address.ReplaceValue(kAppleKeyboardAddress); |
477 properties->bluetooth_class.ReplaceValue(kAppleKeyboardClass); | 476 properties->bluetooth_class.ReplaceValue(kAppleKeyboardClass); |
478 properties->name.ReplaceValue("Fake Apple Wireless Keyboard"); | 477 properties->name.ReplaceValue("Fake Apple Wireless Keyboard"); |
479 properties->alias.ReplaceValue(kAppleKeyboardName); | 478 properties->alias.ReplaceValue(kAppleKeyboardName); |
480 properties->adapter.ReplaceValue( | 479 properties->adapter.ReplaceValue( |
481 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); | 480 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); |
482 | 481 |
| 482 std::vector<std::string> uuids; |
| 483 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); |
| 484 properties->uuids.ReplaceValue(uuids); |
| 485 |
483 properties_map_[dbus::ObjectPath(kAppleKeyboardPath)] = properties; | 486 properties_map_[dbus::ObjectPath(kAppleKeyboardPath)] = properties; |
484 device_list_.push_back(dbus::ObjectPath(kAppleKeyboardPath)); | 487 device_list_.push_back(dbus::ObjectPath(kAppleKeyboardPath)); |
485 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 488 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
486 DeviceAdded(dbus::ObjectPath(kAppleKeyboardPath))); | 489 DeviceAdded(dbus::ObjectPath(kAppleKeyboardPath))); |
487 } | 490 } |
488 | 491 |
489 if (std::find(device_list_.begin(), device_list_.end(), | 492 if (std::find(device_list_.begin(), device_list_.end(), |
490 dbus::ObjectPath(kVanishingDevicePath)) == | 493 dbus::ObjectPath(kVanishingDevicePath)) == |
491 device_list_.end()) { | 494 device_list_.end()) { |
492 Properties* properties = new Properties(base::Bind( | 495 Properties* properties = new Properties(base::Bind( |
(...skipping 21 matching lines...) Expand all Loading... |
514 &FakeBluetoothDeviceClient::OnPropertyChanged, | 517 &FakeBluetoothDeviceClient::OnPropertyChanged, |
515 base::Unretained(this), | 518 base::Unretained(this), |
516 dbus::ObjectPath(kMicrosoftMousePath))); | 519 dbus::ObjectPath(kMicrosoftMousePath))); |
517 properties->address.ReplaceValue(kMicrosoftMouseAddress); | 520 properties->address.ReplaceValue(kMicrosoftMouseAddress); |
518 properties->bluetooth_class.ReplaceValue(kMicrosoftMouseClass); | 521 properties->bluetooth_class.ReplaceValue(kMicrosoftMouseClass); |
519 properties->name.ReplaceValue("Fake Microsoft Mouse"); | 522 properties->name.ReplaceValue("Fake Microsoft Mouse"); |
520 properties->alias.ReplaceValue(kMicrosoftMouseName); | 523 properties->alias.ReplaceValue(kMicrosoftMouseName); |
521 properties->adapter.ReplaceValue( | 524 properties->adapter.ReplaceValue( |
522 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); | 525 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); |
523 | 526 |
| 527 std::vector<std::string> uuids; |
| 528 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); |
| 529 properties->uuids.ReplaceValue(uuids); |
| 530 |
524 properties_map_[dbus::ObjectPath(kMicrosoftMousePath)] = properties; | 531 properties_map_[dbus::ObjectPath(kMicrosoftMousePath)] = properties; |
525 device_list_.push_back(dbus::ObjectPath(kMicrosoftMousePath)); | 532 device_list_.push_back(dbus::ObjectPath(kMicrosoftMousePath)); |
526 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 533 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
527 DeviceAdded(dbus::ObjectPath(kMicrosoftMousePath))); | 534 DeviceAdded(dbus::ObjectPath(kMicrosoftMousePath))); |
528 } | 535 } |
529 | 536 |
530 } else if (discovery_simulation_step_ == 8) { | 537 } else if (discovery_simulation_step_ == 8) { |
531 if (std::find(device_list_.begin(), device_list_.end(), | 538 if (std::find(device_list_.begin(), device_list_.end(), |
532 dbus::ObjectPath(kMotorolaKeyboardPath)) == | 539 dbus::ObjectPath(kMotorolaKeyboardPath)) == |
533 device_list_.end()) { | 540 device_list_.end()) { |
534 Properties* properties = new Properties(base::Bind( | 541 Properties* properties = new Properties(base::Bind( |
535 &FakeBluetoothDeviceClient::OnPropertyChanged, | 542 &FakeBluetoothDeviceClient::OnPropertyChanged, |
536 base::Unretained(this), | 543 base::Unretained(this), |
537 dbus::ObjectPath(kMotorolaKeyboardPath))); | 544 dbus::ObjectPath(kMotorolaKeyboardPath))); |
538 properties->address.ReplaceValue(kMotorolaKeyboardAddress); | 545 properties->address.ReplaceValue(kMotorolaKeyboardAddress); |
539 properties->bluetooth_class.ReplaceValue(kMotorolaKeyboardClass); | 546 properties->bluetooth_class.ReplaceValue(kMotorolaKeyboardClass); |
540 properties->name.ReplaceValue("Fake Motorola Keyboard"); | 547 properties->name.ReplaceValue("Fake Motorola Keyboard"); |
541 properties->alias.ReplaceValue(kMotorolaKeyboardName); | 548 properties->alias.ReplaceValue(kMotorolaKeyboardName); |
542 properties->adapter.ReplaceValue( | 549 properties->adapter.ReplaceValue( |
543 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); | 550 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); |
544 | 551 |
| 552 std::vector<std::string> uuids; |
| 553 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); |
| 554 properties->uuids.ReplaceValue(uuids); |
| 555 |
545 properties_map_[dbus::ObjectPath(kMotorolaKeyboardPath)] = properties; | 556 properties_map_[dbus::ObjectPath(kMotorolaKeyboardPath)] = properties; |
546 device_list_.push_back(dbus::ObjectPath(kMotorolaKeyboardPath)); | 557 device_list_.push_back(dbus::ObjectPath(kMotorolaKeyboardPath)); |
547 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 558 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
548 DeviceAdded(dbus::ObjectPath(kMotorolaKeyboardPath))); | 559 DeviceAdded(dbus::ObjectPath(kMotorolaKeyboardPath))); |
549 } | 560 } |
550 | 561 |
551 if (std::find(device_list_.begin(), device_list_.end(), | 562 if (std::find(device_list_.begin(), device_list_.end(), |
552 dbus::ObjectPath(kSonyHeadphonesPath)) == | 563 dbus::ObjectPath(kSonyHeadphonesPath)) == |
553 device_list_.end()) { | 564 device_list_.end()) { |
554 Properties* properties = new Properties(base::Bind( | 565 Properties* properties = new Properties(base::Bind( |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
632 VLOG(1) << "CompleteSimulatedPairing: " << object_path.value(); | 643 VLOG(1) << "CompleteSimulatedPairing: " << object_path.value(); |
633 if (pairing_cancelled_) { | 644 if (pairing_cancelled_) { |
634 pairing_cancelled_ = false; | 645 pairing_cancelled_ = false; |
635 | 646 |
636 error_callback.Run(bluetooth_adapter::kErrorAuthenticationCanceled, | 647 error_callback.Run(bluetooth_adapter::kErrorAuthenticationCanceled, |
637 "Cancaled"); | 648 "Cancaled"); |
638 } else { | 649 } else { |
639 Properties* properties = GetProperties(object_path); | 650 Properties* properties = GetProperties(object_path); |
640 | 651 |
641 properties->paired.ReplaceValue(true); | 652 properties->paired.ReplaceValue(true); |
| 653 callback.Run(); |
642 | 654 |
643 AddInputDeviceIfNeeded(object_path, properties); | 655 AddInputDeviceIfNeeded(object_path, properties); |
644 | |
645 callback.Run(); | |
646 properties->NotifyPropertyChanged(properties->paired.name()); | |
647 } | 656 } |
648 } | 657 } |
649 | 658 |
650 void FakeBluetoothDeviceClient::TimeoutSimulatedPairing( | 659 void FakeBluetoothDeviceClient::TimeoutSimulatedPairing( |
651 const dbus::ObjectPath& object_path, | 660 const dbus::ObjectPath& object_path, |
652 const ErrorCallback& error_callback) { | 661 const ErrorCallback& error_callback) { |
653 VLOG(1) << "TimeoutSimulatedPairing: " << object_path.value(); | 662 VLOG(1) << "TimeoutSimulatedPairing: " << object_path.value(); |
654 | 663 |
655 error_callback.Run(bluetooth_adapter::kErrorAuthenticationTimeout, | 664 error_callback.Run(bluetooth_adapter::kErrorAuthenticationTimeout, |
656 "Timed out"); | 665 "Timed out"); |
(...skipping 19 matching lines...) Expand all Loading... |
676 | 685 |
677 void FakeBluetoothDeviceClient::AddInputDeviceIfNeeded( | 686 void FakeBluetoothDeviceClient::AddInputDeviceIfNeeded( |
678 const dbus::ObjectPath& object_path, | 687 const dbus::ObjectPath& object_path, |
679 Properties* properties) { | 688 Properties* properties) { |
680 // If the paired device is a HID device based on it's bluetooth class, | 689 // If the paired device is a HID device based on it's bluetooth class, |
681 // simulate the Input interface. | 690 // simulate the Input interface. |
682 FakeBluetoothInputClient* fake_bluetooth_input_client = | 691 FakeBluetoothInputClient* fake_bluetooth_input_client = |
683 static_cast<FakeBluetoothInputClient*>( | 692 static_cast<FakeBluetoothInputClient*>( |
684 DBusThreadManager::Get()->GetExperimentalBluetoothInputClient()); | 693 DBusThreadManager::Get()->GetExperimentalBluetoothInputClient()); |
685 | 694 |
686 if ((properties->bluetooth_class.value() & 0x001f03) == 0x000500) { | 695 if ((properties->bluetooth_class.value() & 0x001f03) == 0x000500) |
687 std::vector<std::string> uuids = properties->uuids.value(); | 696 fake_bluetooth_input_client->AddInputDevice(object_path); |
688 if (std::find(uuids.begin(), uuids.end(), | |
689 "00001124-0000-1000-8000-00805f9b34fb") == uuids.end()) { | |
690 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); | |
691 properties->uuids.ReplaceValue(uuids); | |
692 fake_bluetooth_input_client->AddInputDevice(object_path); | |
693 } | |
694 } | |
695 } | 697 } |
696 | 698 |
697 void FakeBluetoothDeviceClient::PinCodeCallback( | 699 void FakeBluetoothDeviceClient::PinCodeCallback( |
698 const dbus::ObjectPath& object_path, | 700 const dbus::ObjectPath& object_path, |
699 const base::Closure& callback, | 701 const base::Closure& callback, |
700 const ErrorCallback& error_callback, | 702 const ErrorCallback& error_callback, |
701 ExperimentalBluetoothAgentServiceProvider::Delegate::Status status, | 703 ExperimentalBluetoothAgentServiceProvider::Delegate::Status status, |
702 const std::string& pincode) { | 704 const std::string& pincode) { |
703 VLOG(1) << "PinCodeCallback: " << object_path.value(); | 705 VLOG(1) << "PinCodeCallback: " << object_path.value(); |
704 | 706 |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 FROM_HERE, | 834 FROM_HERE, |
833 base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing, | 835 base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing, |
834 base::Unretained(this), | 836 base::Unretained(this), |
835 object_path, callback, error_callback), | 837 object_path, callback, error_callback), |
836 base::TimeDelta::FromMilliseconds(simulation_interval_ms_)); | 838 base::TimeDelta::FromMilliseconds(simulation_interval_ms_)); |
837 | 839 |
838 } | 840 } |
839 } | 841 } |
840 | 842 |
841 } // namespace chromeos | 843 } // namespace chromeos |
OLD | NEW |