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

Unified Diff: chromeos/dbus/fake_bluetooth_device_client.cc

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/fake_bluetooth_device_client.cc
diff --git a/chromeos/dbus/fake_bluetooth_device_client.cc b/chromeos/dbus/fake_bluetooth_device_client.cc
deleted file mode 100644
index 8e086562a55366479c78b9449c4ed07372494d5f..0000000000000000000000000000000000000000
--- a/chromeos/dbus/fake_bluetooth_device_client.cc
+++ /dev/null
@@ -1,1652 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chromeos/dbus/fake_bluetooth_device_client.h"
-
-#include <fcntl.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <algorithm>
-#include <string>
-#include <utility>
-
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/rand_util.h"
-#include "base/single_thread_task_runner.h"
-#include "base/stl_util.h"
-#include "base/thread_task_runner_handle.h"
-#include "base/threading/worker_pool.h"
-#include "base/time/time.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "chromeos/dbus/fake_bluetooth_adapter_client.h"
-#include "chromeos/dbus/fake_bluetooth_agent_manager_client.h"
-#include "chromeos/dbus/fake_bluetooth_agent_service_provider.h"
-#include "chromeos/dbus/fake_bluetooth_gatt_service_client.h"
-#include "chromeos/dbus/fake_bluetooth_input_client.h"
-#include "chromeos/dbus/fake_bluetooth_profile_manager_client.h"
-#include "chromeos/dbus/fake_bluetooth_profile_service_provider.h"
-#include "dbus/file_descriptor.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-
-namespace {
-
-// Default interval between simulated events.
-const int kSimulationIntervalMs = 750;
-
-// Minimum and maximum bounds for randomly generated RSSI values.
-const int kMinRSSI = -90;
-const int kMaxRSSI = -30;
-
-// The default value of connection info properties from GetConnInfo().
-const int kUnkownPower = 127;
-
-// This is meant to delay the removal of a pre defined device until the
-// developer has time to see it.
-const int kVanishingDevicePairTimeMultiplier = 4;
-
-// Meant to delay a pair request for an observable amount of time.
-const int kIncomingSimulationPairTimeMultiplier = 45;
-
-// Meant to delay a request that asks for pair requests for an observable
-// amount of time.
-const int kIncomingSimulationStartPairTimeMultiplier = 30;
-
-// This allows the PIN code dialog to be shown for a long enough time to see
-// the PIN code UI in detail.
-const int kPinCodeDevicePairTimeMultiplier = 7;
-
-// This allows the pairing dialog to be shown for a long enough time to see
-// its UI in detail.
-const int kSimulateNormalPairTimeMultiplier = 3;
-
-void SimulatedProfileSocket(int fd) {
- // Simulate a server-side socket of a profile; read data from the socket,
- // write it back, and then close.
- char buf[1024];
- ssize_t len;
- ssize_t count;
-
- len = read(fd, buf, sizeof buf);
- if (len < 0) {
- close(fd);
- return;
- }
-
- count = len;
- len = write(fd, buf, count);
- if (len < 0) {
- close(fd);
- return;
- }
-
- close(fd);
-}
-
-void SimpleErrorCallback(const std::string& error_name,
- const std::string& error_message) {
- VLOG(1) << "Bluetooth Error: " << error_name << ": " << error_message;
-}
-
-} // namespace
-
-namespace chromeos {
-
-const char FakeBluetoothDeviceClient::kTestPinCode[] = "123456";
-const int FakeBluetoothDeviceClient::kTestPassKey = 123456;
-
-const char FakeBluetoothDeviceClient::kPairingMethodNone[] = "None";
-const char FakeBluetoothDeviceClient::kPairingMethodPinCode[] = "PIN Code";
-const char FakeBluetoothDeviceClient::kPairingMethodPassKey[] = "PassKey";
-
-const char FakeBluetoothDeviceClient::kPairingActionConfirmation[] =
- "Confirmation";
-const char FakeBluetoothDeviceClient::kPairingActionDisplay[] = "Display";
-const char FakeBluetoothDeviceClient::kPairingActionFail[] = "Fail";
-const char FakeBluetoothDeviceClient::kPairingActionRequest[] = "Request";
-
-const char FakeBluetoothDeviceClient::kPairedDevicePath[] =
- "/fake/hci0/dev0";
-const char FakeBluetoothDeviceClient::kPairedDeviceAddress[] =
- "00:11:22:33:44:55";
-const char FakeBluetoothDeviceClient::kPairedDeviceName[] =
- "Fake Device";
-const uint32 FakeBluetoothDeviceClient::kPairedDeviceClass = 0x000104;
-
-const char FakeBluetoothDeviceClient::kLegacyAutopairPath[] =
- "/fake/hci0/dev1";
-const char FakeBluetoothDeviceClient::kLegacyAutopairAddress[] =
- "28:CF:DA:00:00:00";
-const char FakeBluetoothDeviceClient::kLegacyAutopairName[] =
- "Bluetooth 2.0 Mouse";
-const uint32 FakeBluetoothDeviceClient::kLegacyAutopairClass = 0x002580;
-
-const char FakeBluetoothDeviceClient::kDisplayPinCodePath[] =
- "/fake/hci0/dev2";
-const char FakeBluetoothDeviceClient::kDisplayPinCodeAddress[] =
- "28:37:37:00:00:00";
-const char FakeBluetoothDeviceClient::kDisplayPinCodeName[] =
- "Bluetooth 2.0 Keyboard";
-const uint32 FakeBluetoothDeviceClient::kDisplayPinCodeClass = 0x002540;
-
-const char FakeBluetoothDeviceClient::kVanishingDevicePath[] =
- "/fake/hci0/dev3";
-const char FakeBluetoothDeviceClient::kVanishingDeviceAddress[] =
- "01:02:03:04:05:06";
-const char FakeBluetoothDeviceClient::kVanishingDeviceName[] =
- "Vanishing Device";
-const uint32 FakeBluetoothDeviceClient::kVanishingDeviceClass = 0x000104;
-
-const char FakeBluetoothDeviceClient::kConnectUnpairablePath[] =
- "/fake/hci0/dev4";
-const char FakeBluetoothDeviceClient::kConnectUnpairableAddress[] =
- "7C:ED:8D:00:00:00";
-const char FakeBluetoothDeviceClient::kConnectUnpairableName[] =
- "Unpairable Device";
-const uint32 FakeBluetoothDeviceClient::kConnectUnpairableClass = 0x002580;
-
-const char FakeBluetoothDeviceClient::kDisplayPasskeyPath[] =
- "/fake/hci0/dev5";
-const char FakeBluetoothDeviceClient::kDisplayPasskeyAddress[] =
- "00:0F:F6:00:00:00";
-const char FakeBluetoothDeviceClient::kDisplayPasskeyName[] =
- "Bluetooth 2.1+ Keyboard";
-const uint32 FakeBluetoothDeviceClient::kDisplayPasskeyClass = 0x002540;
-
-const char FakeBluetoothDeviceClient::kRequestPinCodePath[] =
- "/fake/hci0/dev6";
-const char FakeBluetoothDeviceClient::kRequestPinCodeAddress[] =
- "00:24:BE:00:00:00";
-const char FakeBluetoothDeviceClient::kRequestPinCodeName[] =
- "PIN Device";
-const uint32 FakeBluetoothDeviceClient::kRequestPinCodeClass = 0x240408;
-
-const char FakeBluetoothDeviceClient::kConfirmPasskeyPath[] =
- "/fake/hci0/dev7";
-const char FakeBluetoothDeviceClient::kConfirmPasskeyAddress[] =
- "20:7D:74:00:00:00";
-const char FakeBluetoothDeviceClient::kConfirmPasskeyName[] =
- "Phone";
-const uint32 FakeBluetoothDeviceClient::kConfirmPasskeyClass = 0x7a020c;
-
-const char FakeBluetoothDeviceClient::kRequestPasskeyPath[] =
- "/fake/hci0/dev8";
-const char FakeBluetoothDeviceClient::kRequestPasskeyAddress[] =
- "20:7D:74:00:00:01";
-const char FakeBluetoothDeviceClient::kRequestPasskeyName[] =
- "Passkey Device";
-const uint32 FakeBluetoothDeviceClient::kRequestPasskeyClass = 0x7a020c;
-
-const char FakeBluetoothDeviceClient::kUnconnectableDevicePath[] =
- "/fake/hci0/dev9";
-const char FakeBluetoothDeviceClient::kUnconnectableDeviceAddress[] =
- "20:7D:74:00:00:02";
-const char FakeBluetoothDeviceClient::kUnconnectableDeviceName[] =
- "Unconnectable Device";
-const uint32 FakeBluetoothDeviceClient::kUnconnectableDeviceClass = 0x7a020c;
-
-const char FakeBluetoothDeviceClient::kUnpairableDevicePath[] =
- "/fake/hci0/devA";
-const char FakeBluetoothDeviceClient::kUnpairableDeviceAddress[] =
- "20:7D:74:00:00:03";
-const char FakeBluetoothDeviceClient::kUnpairableDeviceName[] =
- "Unpairable Device";
-const uint32 FakeBluetoothDeviceClient::kUnpairableDeviceClass = 0x002540;
-
-const char FakeBluetoothDeviceClient::kJustWorksPath[] =
- "/fake/hci0/devB";
-const char FakeBluetoothDeviceClient::kJustWorksAddress[] =
- "00:0C:8A:00:00:00";
-const char FakeBluetoothDeviceClient::kJustWorksName[] =
- "Just-Works Device";
-const uint32 FakeBluetoothDeviceClient::kJustWorksClass = 0x240428;
-
-const char FakeBluetoothDeviceClient::kLowEnergyPath[] =
- "/fake/hci0/devC";
-const char FakeBluetoothDeviceClient::kLowEnergyAddress[] =
- "00:1A:11:00:15:30";
-const char FakeBluetoothDeviceClient::kLowEnergyName[] =
- "Bluetooth 4.0 Heart Rate Monitor";
-const uint32 FakeBluetoothDeviceClient::kLowEnergyClass =
- 0x000918; // Major class "Health", Minor class "Heart/Pulse Rate Monitor."
-
-const char FakeBluetoothDeviceClient::kPairedUnconnectableDevicePath[] =
- "/fake/hci0/devD";
-const char FakeBluetoothDeviceClient::kPairedUnconnectableDeviceAddress[] =
- "20:7D:74:00:00:04";
-const char FakeBluetoothDeviceClient::kPairedUnconnectableDeviceName[] =
- "Paired Unconnectable Device";
-const uint32 FakeBluetoothDeviceClient::kPairedUnconnectableDeviceClass =
- 0x000104;
-
-FakeBluetoothDeviceClient::Properties::Properties(
- const PropertyChangedCallback& callback)
- : BluetoothDeviceClient::Properties(
- NULL,
- bluetooth_device::kBluetoothDeviceInterface,
- callback) {
-}
-
-FakeBluetoothDeviceClient::Properties::~Properties() {
-}
-
-void FakeBluetoothDeviceClient::Properties::Get(
- dbus::PropertyBase* property,
- dbus::PropertySet::GetCallback callback) {
- VLOG(1) << "Get " << property->name();
- callback.Run(false);
-}
-
-void FakeBluetoothDeviceClient::Properties::GetAll() {
- VLOG(1) << "GetAll";
-}
-
-void FakeBluetoothDeviceClient::Properties::Set(
- dbus::PropertyBase *property,
- dbus::PropertySet::SetCallback callback) {
- VLOG(1) << "Set " << property->name();
- if (property->name() == trusted.name()) {
- callback.Run(true);
- property->ReplaceValueWithSetValue();
- } else {
- callback.Run(false);
- }
-}
-
-FakeBluetoothDeviceClient::SimulatedPairingOptions::SimulatedPairingOptions() {}
-
-FakeBluetoothDeviceClient::SimulatedPairingOptions::~SimulatedPairingOptions() {
-}
-
-FakeBluetoothDeviceClient::IncomingDeviceProperties::
- IncomingDeviceProperties() {}
-
-FakeBluetoothDeviceClient::IncomingDeviceProperties::
- ~IncomingDeviceProperties() {}
-
-FakeBluetoothDeviceClient::FakeBluetoothDeviceClient()
- : simulation_interval_ms_(kSimulationIntervalMs),
- discovery_simulation_step_(0),
- incoming_pairing_simulation_step_(0),
- pairing_cancelled_(false),
- connection_rssi_(kUnkownPower),
- transmit_power_(kUnkownPower),
- max_transmit_power_(kUnkownPower) {
- scoped_ptr<Properties> properties(new Properties(
- base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged,
- base::Unretained(this), dbus::ObjectPath(kPairedDevicePath))));
- properties->address.ReplaceValue(kPairedDeviceAddress);
- properties->bluetooth_class.ReplaceValue(kPairedDeviceClass);
- properties->name.ReplaceValue("Fake Device (Name)");
- properties->alias.ReplaceValue(kPairedDeviceName);
- properties->paired.ReplaceValue(true);
- properties->trusted.ReplaceValue(true);
- properties->adapter.ReplaceValue(
- dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
-
- std::vector<std::string> uuids;
- uuids.push_back("00001800-0000-1000-8000-00805f9b34fb");
- uuids.push_back("00001801-0000-1000-8000-00805f9b34fb");
- properties->uuids.ReplaceValue(uuids);
-
- properties->modalias.ReplaceValue("usb:v05ACp030Dd0306");
-
- properties_map_.insert(dbus::ObjectPath(kPairedDevicePath),
- properties.Pass());
- device_list_.push_back(dbus::ObjectPath(kPairedDevicePath));
-
- properties.reset(new Properties(base::Bind(
- &FakeBluetoothDeviceClient::OnPropertyChanged, base::Unretained(this),
- dbus::ObjectPath(kPairedUnconnectableDevicePath))));
- properties->address.ReplaceValue(kPairedUnconnectableDeviceAddress);
- properties->bluetooth_class.ReplaceValue(kPairedUnconnectableDeviceClass);
- properties->name.ReplaceValue("Fake Device 2 (Unconnectable)");
- properties->alias.ReplaceValue(kPairedUnconnectableDeviceName);
- properties->paired.ReplaceValue(true);
- properties->trusted.ReplaceValue(true);
- properties->adapter.ReplaceValue(
- dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
-
- properties->uuids.ReplaceValue(uuids);
-
- properties->modalias.ReplaceValue("usb:v05ACp030Dd0306");
-
- properties_map_.insert(dbus::ObjectPath(kPairedUnconnectableDevicePath),
- properties.Pass());
- device_list_.push_back(dbus::ObjectPath(kPairedUnconnectableDevicePath));
-}
-
-FakeBluetoothDeviceClient::~FakeBluetoothDeviceClient() {
-}
-
-void FakeBluetoothDeviceClient::Init(dbus::Bus* bus) {
-}
-
-void FakeBluetoothDeviceClient::AddObserver(Observer* observer) {
- observers_.AddObserver(observer);
-}
-
-void FakeBluetoothDeviceClient::RemoveObserver(Observer* observer) {
- observers_.RemoveObserver(observer);
-}
-
-std::vector<dbus::ObjectPath> FakeBluetoothDeviceClient::GetDevicesForAdapter(
- const dbus::ObjectPath& adapter_path) {
- if (adapter_path ==
- dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath))
- return device_list_;
- else
- return std::vector<dbus::ObjectPath>();
-}
-
-FakeBluetoothDeviceClient::Properties*
-FakeBluetoothDeviceClient::GetProperties(const dbus::ObjectPath& object_path) {
- PropertiesMap::const_iterator iter = properties_map_.find(object_path);
- if (iter != properties_map_.end())
- return iter->second;
- return NULL;
-}
-
-FakeBluetoothDeviceClient::SimulatedPairingOptions*
-FakeBluetoothDeviceClient::GetPairingOptions(
- const dbus::ObjectPath& object_path) {
- PairingOptionsMap::const_iterator iter =
- pairing_options_map_.find(object_path);
- if (iter != pairing_options_map_.end())
- return iter->second;
- return iter != pairing_options_map_.end() ? iter->second : nullptr;
-}
-
-void FakeBluetoothDeviceClient::Connect(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "Connect: " << object_path.value();
- Properties* properties = GetProperties(object_path);
-
- if (properties->connected.value() == true) {
- // Already connected.
- callback.Run();
- return;
- }
-
- if (properties->paired.value() != true &&
- object_path != dbus::ObjectPath(kConnectUnpairablePath) &&
- object_path != dbus::ObjectPath(kLowEnergyPath)) {
- // Must be paired.
- error_callback.Run(bluetooth_device::kErrorFailed, "Not paired");
- return;
- } else if (properties->paired.value() == true &&
- (object_path == dbus::ObjectPath(kUnconnectableDevicePath) ||
- object_path ==
- dbus::ObjectPath(kPairedUnconnectableDevicePath))) {
- // Must not be paired
- error_callback.Run(bluetooth_device::kErrorFailed,
- "Connection fails while paired");
- return;
- }
-
- // The device can be connected.
- properties->connected.ReplaceValue(true);
- callback.Run();
-
- // Expose GATT services if connected to LE device.
- if (object_path == dbus::ObjectPath(kLowEnergyPath)) {
- FakeBluetoothGattServiceClient* gatt_service_client =
- static_cast<FakeBluetoothGattServiceClient*>(
- DBusThreadManager::Get()->GetBluetoothGattServiceClient());
- gatt_service_client->ExposeHeartRateService(
- dbus::ObjectPath(kLowEnergyPath));
- }
-
- AddInputDeviceIfNeeded(object_path, properties);
-}
-
-void FakeBluetoothDeviceClient::Disconnect(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "Disconnect: " << object_path.value();
- Properties* properties = GetProperties(object_path);
-
- if (!properties->connected.value()) {
- error_callback.Run("org.bluez.Error.NotConnected", "Not Connected");
- return;
- }
-
- // Hide the Heart Rate Service if disconnected from LE device.
- if (object_path == dbus::ObjectPath(kLowEnergyPath)) {
- FakeBluetoothGattServiceClient* gatt_service_client =
- static_cast<FakeBluetoothGattServiceClient*>(
- DBusThreadManager::Get()->GetBluetoothGattServiceClient());
- gatt_service_client->HideHeartRateService();
- }
-
- callback.Run();
- properties->connected.ReplaceValue(false);
-}
-
-void FakeBluetoothDeviceClient::ConnectProfile(
- const dbus::ObjectPath& object_path,
- const std::string& uuid,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "ConnectProfile: " << object_path.value() << " " << uuid;
-
- FakeBluetoothProfileManagerClient* fake_bluetooth_profile_manager_client =
- static_cast<FakeBluetoothProfileManagerClient*>(
- DBusThreadManager::Get()->GetBluetoothProfileManagerClient());
- FakeBluetoothProfileServiceProvider* profile_service_provider =
- fake_bluetooth_profile_manager_client->GetProfileServiceProvider(uuid);
- if (profile_service_provider == NULL) {
- error_callback.Run(kNoResponseError, "Missing profile");
- return;
- }
-
- if (object_path == dbus::ObjectPath(kPairedUnconnectableDevicePath)) {
- error_callback.Run(bluetooth_device::kErrorFailed, "unconnectable");
- return;
- }
-
- // Make a socket pair of a compatible type with the type used by Bluetooth;
- // spin up a thread to simulate the server side and wrap the client side in
- // a D-Bus file descriptor object.
- int socket_type = SOCK_STREAM;
- if (uuid == FakeBluetoothProfileManagerClient::kL2capUuid)
- socket_type = SOCK_SEQPACKET;
-
- int fds[2];
- if (socketpair(AF_UNIX, socket_type, 0, fds) < 0) {
- error_callback.Run(kNoResponseError, "socketpair call failed");
- return;
- }
-
- int args;
- args = fcntl(fds[1], F_GETFL, NULL);
- if (args < 0) {
- error_callback.Run(kNoResponseError, "failed to get socket flags");
- return;
- }
-
- args |= O_NONBLOCK;
- if (fcntl(fds[1], F_SETFL, args) < 0) {
- error_callback.Run(kNoResponseError, "failed to set socket non-blocking");
- return;
- }
-
- base::WorkerPool::GetTaskRunner(false)->PostTask(
- FROM_HERE,
- base::Bind(&SimulatedProfileSocket,
- fds[0]));
-
- scoped_ptr<dbus::FileDescriptor> fd(new dbus::FileDescriptor(fds[1]));
-
- // Post the new connection to the service provider.
- BluetoothProfileServiceProvider::Delegate::Options options;
-
- profile_service_provider->NewConnection(
- object_path,
- fd.Pass(),
- options,
- base::Bind(&FakeBluetoothDeviceClient::ConnectionCallback,
- base::Unretained(this),
- object_path,
- callback,
- error_callback));
-}
-
-void FakeBluetoothDeviceClient::DisconnectProfile(
- const dbus::ObjectPath& object_path,
- const std::string& uuid,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "DisconnectProfile: " << object_path.value() << " " << uuid;
-
- FakeBluetoothProfileManagerClient* fake_bluetooth_profile_manager_client =
- static_cast<FakeBluetoothProfileManagerClient*>(
- DBusThreadManager::Get()->GetBluetoothProfileManagerClient());
- FakeBluetoothProfileServiceProvider* profile_service_provider =
- fake_bluetooth_profile_manager_client->GetProfileServiceProvider(uuid);
- if (profile_service_provider == NULL) {
- error_callback.Run(kNoResponseError, "Missing profile");
- return;
- }
-
- profile_service_provider->RequestDisconnection(
- object_path,
- base::Bind(&FakeBluetoothDeviceClient::DisconnectionCallback,
- base::Unretained(this),
- object_path,
- callback,
- error_callback));
-}
-
-void FakeBluetoothDeviceClient::Pair(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "Pair: " << object_path.value();
- Properties* properties = GetProperties(object_path);
-
- if (properties->paired.value() == true) {
- // Already paired.
- callback.Run();
- return;
- }
-
- SimulatePairing(object_path, false, callback, error_callback);
-}
-
-void FakeBluetoothDeviceClient::CancelPairing(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "CancelPairing: " << object_path.value();
- pairing_cancelled_ = true;
- callback.Run();
-}
-
-void FakeBluetoothDeviceClient::GetConnInfo(
- const dbus::ObjectPath& object_path,
- const ConnInfoCallback& callback,
- const ErrorCallback& error_callback) {
- Properties* properties = GetProperties(object_path);
- if (!properties->connected.value()) {
- error_callback.Run("org.bluez.Error.NotConnected", "Not Connected");
- return;
- }
-
- callback.Run(connection_rssi_, transmit_power_, max_transmit_power_);
-}
-
-void FakeBluetoothDeviceClient::BeginDiscoverySimulation(
- const dbus::ObjectPath& adapter_path) {
- VLOG(1) << "starting discovery simulation";
-
- discovery_simulation_step_ = 1;
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::DiscoverySimulationTimer,
- base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-}
-
-void FakeBluetoothDeviceClient::EndDiscoverySimulation(
- const dbus::ObjectPath& adapter_path) {
- VLOG(1) << "stopping discovery simulation";
- discovery_simulation_step_ = 0;
-}
-
-void FakeBluetoothDeviceClient::BeginIncomingPairingSimulation(
- const dbus::ObjectPath& adapter_path) {
- VLOG(1) << "starting incoming pairing simulation";
-
- incoming_pairing_simulation_step_ = 1;
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::IncomingPairingSimulationTimer,
- base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(
- kIncomingSimulationStartPairTimeMultiplier *
- simulation_interval_ms_));
-}
-
-void FakeBluetoothDeviceClient::EndIncomingPairingSimulation(
- const dbus::ObjectPath& adapter_path) {
- VLOG(1) << "stopping incoming pairing simulation";
- incoming_pairing_simulation_step_ = 0;
-}
-
-void FakeBluetoothDeviceClient::SetSimulationIntervalMs(int interval_ms) {
- simulation_interval_ms_ = interval_ms;
-}
-
-void FakeBluetoothDeviceClient::CreateDevice(
- const dbus::ObjectPath& adapter_path,
- const dbus::ObjectPath& device_path) {
- if (std::find(device_list_.begin(),
- device_list_.end(), device_path) != device_list_.end())
- return;
-
- scoped_ptr<Properties> properties(
- new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged,
- base::Unretained(this), device_path)));
- properties->adapter.ReplaceValue(adapter_path);
-
- if (device_path == dbus::ObjectPath(kLegacyAutopairPath)) {
- properties->address.ReplaceValue(kLegacyAutopairAddress);
- properties->bluetooth_class.ReplaceValue(kLegacyAutopairClass);
- properties->name.ReplaceValue("LegacyAutopair");
- properties->alias.ReplaceValue(kLegacyAutopairName);
-
- std::vector<std::string> uuids;
- uuids.push_back("00001124-0000-1000-8000-00805f9b34fb");
- properties->uuids.ReplaceValue(uuids);
-
- } else if (device_path == dbus::ObjectPath(kDisplayPinCodePath)) {
- properties->address.ReplaceValue(kDisplayPinCodeAddress);
- properties->bluetooth_class.ReplaceValue(kDisplayPinCodeClass);
- properties->name.ReplaceValue("DisplayPinCode");
- properties->alias.ReplaceValue(kDisplayPinCodeName);
-
- std::vector<std::string> uuids;
- uuids.push_back("00001124-0000-1000-8000-00805f9b34fb");
- properties->uuids.ReplaceValue(uuids);
-
- } else if (device_path == dbus::ObjectPath(kVanishingDevicePath)) {
- properties->address.ReplaceValue(kVanishingDeviceAddress);
- properties->bluetooth_class.ReplaceValue(kVanishingDeviceClass);
- properties->name.ReplaceValue("VanishingDevice");
- properties->alias.ReplaceValue(kVanishingDeviceName);
-
- } else if (device_path == dbus::ObjectPath(kConnectUnpairablePath)) {
- properties->address.ReplaceValue(kConnectUnpairableAddress);
- properties->bluetooth_class.ReplaceValue(kConnectUnpairableClass);
- properties->name.ReplaceValue("ConnectUnpairable");
- properties->alias.ReplaceValue(kConnectUnpairableName);
-
- std::vector<std::string> uuids;
- uuids.push_back("00001124-0000-1000-8000-00805f9b34fb");
- properties->uuids.ReplaceValue(uuids);
-
- } else if (device_path == dbus::ObjectPath(kDisplayPasskeyPath)) {
- properties->address.ReplaceValue(kDisplayPasskeyAddress);
- properties->bluetooth_class.ReplaceValue(kDisplayPasskeyClass);
- properties->name.ReplaceValue("DisplayPasskey");
- properties->alias.ReplaceValue(kDisplayPasskeyName);
-
- std::vector<std::string> uuids;
- uuids.push_back("00001124-0000-1000-8000-00805f9b34fb");
- properties->uuids.ReplaceValue(uuids);
-
- } else if (device_path == dbus::ObjectPath(kRequestPinCodePath)) {
- properties->address.ReplaceValue(kRequestPinCodeAddress);
- properties->bluetooth_class.ReplaceValue(kRequestPinCodeClass);
- properties->name.ReplaceValue("RequestPinCode");
- properties->alias.ReplaceValue(kRequestPinCodeName);
-
- } else if (device_path == dbus::ObjectPath(kConfirmPasskeyPath)) {
- properties->address.ReplaceValue(kConfirmPasskeyAddress);
- properties->bluetooth_class.ReplaceValue(kConfirmPasskeyClass);
- properties->name.ReplaceValue("ConfirmPasskey");
- properties->alias.ReplaceValue(kConfirmPasskeyName);
-
- } else if (device_path == dbus::ObjectPath(kRequestPasskeyPath)) {
- properties->address.ReplaceValue(kRequestPasskeyAddress);
- properties->bluetooth_class.ReplaceValue(kRequestPasskeyClass);
- properties->name.ReplaceValue("RequestPasskey");
- properties->alias.ReplaceValue(kRequestPasskeyName);
-
- } else if (device_path == dbus::ObjectPath(kUnconnectableDevicePath)) {
- properties->address.ReplaceValue(kUnconnectableDeviceAddress);
- properties->bluetooth_class.ReplaceValue(kUnconnectableDeviceClass);
- properties->name.ReplaceValue("UnconnectableDevice");
- properties->alias.ReplaceValue(kUnconnectableDeviceName);
-
- } else if (device_path == dbus::ObjectPath(kUnpairableDevicePath)) {
- properties->address.ReplaceValue(kUnpairableDeviceAddress);
- properties->bluetooth_class.ReplaceValue(kUnpairableDeviceClass);
- properties->name.ReplaceValue("Fake Unpairable Device");
- properties->alias.ReplaceValue(kUnpairableDeviceName);
-
- } else if (device_path == dbus::ObjectPath(kJustWorksPath)) {
- properties->address.ReplaceValue(kJustWorksAddress);
- properties->bluetooth_class.ReplaceValue(kJustWorksClass);
- properties->name.ReplaceValue("JustWorks");
- properties->alias.ReplaceValue(kJustWorksName);
-
- } else if (device_path == dbus::ObjectPath(kLowEnergyPath)) {
- properties->address.ReplaceValue(kLowEnergyAddress);
- properties->bluetooth_class.ReplaceValue(kLowEnergyClass);
- properties->name.ReplaceValue("Heart Rate Monitor");
- properties->alias.ReplaceValue(kLowEnergyName);
-
- std::vector<std::string> uuids;
- uuids.push_back(FakeBluetoothGattServiceClient::kHeartRateServiceUUID);
- properties->uuids.ReplaceValue(uuids);
-
- } else {
- NOTREACHED();
-
- }
-
- properties_map_.insert(device_path, properties.Pass());
- device_list_.push_back(device_path);
- FOR_EACH_OBSERVER(BluetoothDeviceClient::Observer, observers_,
- DeviceAdded(device_path));
-}
-
-void FakeBluetoothDeviceClient::CreateDeviceWithProperties(
- const dbus::ObjectPath& adapter_path,
- const IncomingDeviceProperties& props) {
- dbus::ObjectPath device_path(props.device_path);
- if (std::find(device_list_.begin(), device_list_.end(), device_path) !=
- device_list_.end())
- return;
-
- scoped_ptr<Properties> properties(
- new Properties(base::Bind(&FakeBluetoothDeviceClient::OnPropertyChanged,
- base::Unretained(this), device_path)));
- properties->adapter.ReplaceValue(adapter_path);
- properties->name.ReplaceValue(props.device_name);
- properties->alias.ReplaceValue(props.device_alias);
- properties->address.ReplaceValue(props.device_address);
- properties->bluetooth_class.ReplaceValue(props.device_class);
- properties->trusted.ReplaceValue(props.is_trusted);
-
- if (props.is_trusted)
- properties->paired.ReplaceValue(true);
-
- scoped_ptr<SimulatedPairingOptions> options(new SimulatedPairingOptions);
- options->pairing_method = props.pairing_method;
- options->pairing_auth_token = props.pairing_auth_token;
- options->pairing_action = props.pairing_action;
- options->incoming = props.incoming;
-
- properties_map_.insert(device_path, properties.Pass());
- device_list_.push_back(device_path);
- pairing_options_map_.insert(device_path, options.Pass());
- FOR_EACH_OBSERVER(BluetoothDeviceClient::Observer, observers_,
- DeviceAdded(device_path));
-}
-
-scoped_ptr<base::ListValue>
-FakeBluetoothDeviceClient::GetBluetoothDevicesAsDictionaries() const {
- scoped_ptr<base::ListValue> predefined_devices(new base::ListValue);
- scoped_ptr<base::DictionaryValue> pairedDevice(new base::DictionaryValue);
- pairedDevice->SetString("path", kPairedDevicePath);
- pairedDevice->SetString("address", kPairedDeviceAddress);
- pairedDevice->SetString("name", kPairedDeviceName);
- pairedDevice->SetString("alias", kPairedDeviceName);
- pairedDevice->SetString("pairingMethod", "");
- pairedDevice->SetString("pairingAuthToken", "");
- pairedDevice->SetString("pairingAction", "");
- pairedDevice->SetInteger("classValue", kPairedDeviceClass);
- pairedDevice->SetBoolean("discoverable", true);
- pairedDevice->SetBoolean("isTrusted", true);
- pairedDevice->SetBoolean("paired", true);
- pairedDevice->SetBoolean("incoming", false);
- predefined_devices->Append(pairedDevice.Pass());
-
- scoped_ptr<base::DictionaryValue> legacyDevice(new base::DictionaryValue);
- legacyDevice->SetString("path", kLegacyAutopairPath);
- legacyDevice->SetString("address", kLegacyAutopairAddress);
- legacyDevice->SetString("name", kLegacyAutopairName);
- legacyDevice->SetString("alias", kLegacyAutopairName);
- legacyDevice->SetString("pairingMethod", "");
- legacyDevice->SetString("pairingAuthToken", "");
- legacyDevice->SetString("pairingAction", "");
- legacyDevice->SetInteger("classValue", kLegacyAutopairClass);
- legacyDevice->SetBoolean("isTrusted", true);
- legacyDevice->SetBoolean("discoverable", false);
- legacyDevice->SetBoolean("paired", false);
- legacyDevice->SetBoolean("incoming", false);
- predefined_devices->Append(legacyDevice.Pass());
-
- scoped_ptr<base::DictionaryValue> pin(new base::DictionaryValue);
- pin->SetString("path", kDisplayPinCodePath);
- pin->SetString("address", kDisplayPinCodeAddress);
- pin->SetString("name", kDisplayPinCodeName);
- pin->SetString("alias", kDisplayPinCodeName);
- pin->SetString("pairingMethod", kPairingMethodPinCode);
- pin->SetString("pairingAuthToken", kTestPinCode);
- pin->SetString("pairingAction", kPairingActionDisplay);
- pin->SetInteger("classValue", kDisplayPinCodeClass);
- pin->SetBoolean("isTrusted", false);
- pin->SetBoolean("discoverable", false);
- pin->SetBoolean("paired", false);
- pin->SetBoolean("incoming", false);
- predefined_devices->Append(pin.Pass());
-
- scoped_ptr<base::DictionaryValue> vanishing(new base::DictionaryValue);
- vanishing->SetString("path", kVanishingDevicePath);
- vanishing->SetString("address", kVanishingDeviceAddress);
- vanishing->SetString("name", kVanishingDeviceName);
- vanishing->SetString("alias", kVanishingDeviceName);
- vanishing->SetString("pairingMethod", "");
- vanishing->SetString("pairingAuthToken", "");
- vanishing->SetString("pairingAction", "");
- vanishing->SetInteger("classValue", kVanishingDeviceClass);
- vanishing->SetBoolean("isTrusted", false);
- vanishing->SetBoolean("discoverable", false);
- vanishing->SetBoolean("paired", false);
- vanishing->SetBoolean("incoming", false);
- predefined_devices->Append(vanishing.Pass());
-
- scoped_ptr<base::DictionaryValue> connect_unpairable(
- new base::DictionaryValue);
- connect_unpairable->SetString("path", kConnectUnpairablePath);
- connect_unpairable->SetString("address", kConnectUnpairableAddress);
- connect_unpairable->SetString("name", kConnectUnpairableName);
- connect_unpairable->SetString("pairingMethod", "");
- connect_unpairable->SetString("pairingAuthToken", "");
- connect_unpairable->SetString("pairingAction", "");
- connect_unpairable->SetString("alias", kConnectUnpairableName);
- connect_unpairable->SetInteger("classValue", kConnectUnpairableClass);
- connect_unpairable->SetBoolean("isTrusted", false);
- connect_unpairable->SetBoolean("discoverable", false);
- connect_unpairable->SetBoolean("paired", false);
- connect_unpairable->SetBoolean("incoming", false);
- predefined_devices->Append(connect_unpairable.Pass());
-
- scoped_ptr<base::DictionaryValue> passkey(new base::DictionaryValue);
- passkey->SetString("path", kDisplayPasskeyPath);
- passkey->SetString("address", kDisplayPasskeyAddress);
- passkey->SetString("name", kDisplayPasskeyName);
- passkey->SetString("alias", kDisplayPasskeyName);
- passkey->SetString("pairingMethod", kPairingMethodPassKey);
- passkey->SetInteger("pairingAuthToken", kTestPassKey);
- passkey->SetString("pairingAction", kPairingActionDisplay);
- passkey->SetInteger("classValue", kDisplayPasskeyClass);
- passkey->SetBoolean("isTrusted", false);
- passkey->SetBoolean("discoverable", false);
- passkey->SetBoolean("paired", false);
- passkey->SetBoolean("incoming", false);
- predefined_devices->Append(passkey.Pass());
-
- scoped_ptr<base::DictionaryValue> request_pin(new base::DictionaryValue);
- request_pin->SetString("path", kRequestPinCodePath);
- request_pin->SetString("address", kRequestPinCodeAddress);
- request_pin->SetString("name", kRequestPinCodeName);
- request_pin->SetString("alias", kRequestPinCodeName);
- request_pin->SetString("pairingMethod", "");
- request_pin->SetString("pairingAuthToken", "");
- request_pin->SetString("pairingAction", kPairingActionRequest);
- request_pin->SetInteger("classValue", kRequestPinCodeClass);
- request_pin->SetBoolean("isTrusted", false);
- request_pin->SetBoolean("discoverable", false);
- request_pin->SetBoolean("paired", false);
- request_pin->SetBoolean("incoming", false);
- predefined_devices->Append(request_pin.Pass());
-
- scoped_ptr<base::DictionaryValue> confirm(new base::DictionaryValue);
- confirm->SetString("path", kConfirmPasskeyPath);
- confirm->SetString("address", kConfirmPasskeyAddress);
- confirm->SetString("name", kConfirmPasskeyName);
- confirm->SetString("alias", kConfirmPasskeyName);
- confirm->SetString("pairingMethod", "");
- confirm->SetInteger("pairingAuthToken", kTestPassKey);
- confirm->SetString("pairingAction", kPairingActionConfirmation);
- confirm->SetInteger("classValue", kConfirmPasskeyClass);
- confirm->SetBoolean("isTrusted", false);
- confirm->SetBoolean("discoverable", false);
- confirm->SetBoolean("paired", false);
- confirm->SetBoolean("incoming", false);
- predefined_devices->Append(confirm.Pass());
-
- scoped_ptr<base::DictionaryValue> request_passkey(new base::DictionaryValue);
- request_passkey->SetString("path", kRequestPasskeyPath);
- request_passkey->SetString("address", kRequestPasskeyAddress);
- request_passkey->SetString("name", kRequestPasskeyName);
- request_passkey->SetString("alias", kRequestPasskeyName);
- request_passkey->SetString("pairingMethod", kPairingMethodPassKey);
- request_passkey->SetString("pairingAction", kPairingActionRequest);
- request_passkey->SetInteger("pairingAuthToken", kTestPassKey);
- request_passkey->SetInteger("classValue", kRequestPasskeyClass);
- request_passkey->SetBoolean("isTrusted", false);
- request_passkey->SetBoolean("discoverable", false);
- request_passkey->SetBoolean("paired", false);
- request_passkey->SetBoolean("incoming", false);
- predefined_devices->Append(request_passkey.Pass());
-
- scoped_ptr<base::DictionaryValue> unconnectable(new base::DictionaryValue);
- unconnectable->SetString("path", kUnconnectableDevicePath);
- unconnectable->SetString("address", kUnconnectableDeviceAddress);
- unconnectable->SetString("name", kUnconnectableDeviceName);
- unconnectable->SetString("alias", kUnconnectableDeviceName);
- unconnectable->SetString("pairingMethod", "");
- unconnectable->SetString("pairingAuthToken", "");
- unconnectable->SetString("pairingAction", "");
- unconnectable->SetInteger("classValue", kUnconnectableDeviceClass);
- unconnectable->SetBoolean("isTrusted", true);
- unconnectable->SetBoolean("discoverable", false);
- unconnectable->SetBoolean("paired", false);
- unconnectable->SetBoolean("incoming", false);
- predefined_devices->Append(unconnectable.Pass());
-
- scoped_ptr<base::DictionaryValue> unpairable(new base::DictionaryValue);
- unpairable->SetString("path", kUnpairableDevicePath);
- unpairable->SetString("address", kUnpairableDeviceAddress);
- unpairable->SetString("name", kUnpairableDeviceName);
- unpairable->SetString("alias", kUnpairableDeviceName);
- unpairable->SetString("pairingMethod", "");
- unpairable->SetString("pairingAuthToken", "");
- unpairable->SetString("pairingAction", kPairingActionFail);
- unpairable->SetInteger("classValue", kUnpairableDeviceClass);
- unpairable->SetBoolean("isTrusted", false);
- unpairable->SetBoolean("discoverable", false);
- unpairable->SetBoolean("paired", false);
- unpairable->SetBoolean("incoming", false);
- predefined_devices->Append(unpairable.Pass());
-
- scoped_ptr<base::DictionaryValue> just_works(new base::DictionaryValue);
- just_works->SetString("path", kJustWorksPath);
- just_works->SetString("address", kJustWorksAddress);
- just_works->SetString("name", kJustWorksName);
- just_works->SetString("alias", kJustWorksName);
- just_works->SetString("pairingMethod", "");
- just_works->SetString("pairingAuthToken", "");
- just_works->SetString("pairingAction", "");
- just_works->SetInteger("classValue", kJustWorksClass);
- just_works->SetBoolean("isTrusted", false);
- just_works->SetBoolean("discoverable", false);
- just_works->SetBoolean("paired", false);
- just_works->SetBoolean("incoming", false);
- predefined_devices->Append(just_works.Pass());
-
- scoped_ptr<base::DictionaryValue> low_energy(new base::DictionaryValue);
- low_energy->SetString("path", kLowEnergyPath);
- low_energy->SetString("address", kLowEnergyAddress);
- low_energy->SetString("name", kLowEnergyName);
- low_energy->SetString("alias", kLowEnergyName);
- low_energy->SetString("pairingMethod", "");
- low_energy->SetString("pairingAuthToken", "");
- low_energy->SetString("pairingAction", "");
- low_energy->SetInteger("classValue", kLowEnergyClass);
- low_energy->SetBoolean("isTrusted", false);
- low_energy->SetBoolean("discoverable", false);
- low_energy->SetBoolean("paireed", false);
- low_energy->SetBoolean("incoming", false);
- predefined_devices->Append(low_energy.Pass());
-
- scoped_ptr<base::DictionaryValue> paired_unconnectable(
- new base::DictionaryValue);
- paired_unconnectable->SetString("path", kPairedUnconnectableDevicePath);
- paired_unconnectable->SetString("address", kPairedUnconnectableDeviceAddress);
- paired_unconnectable->SetString("name", kPairedUnconnectableDeviceName);
- paired_unconnectable->SetString("pairingMethod", "");
- paired_unconnectable->SetString("pairingAuthToken", "");
- paired_unconnectable->SetString("pairingAction", "");
- paired_unconnectable->SetString("alias", kPairedUnconnectableDeviceName);
- paired_unconnectable->SetInteger("classValue",
- kPairedUnconnectableDeviceClass);
- paired_unconnectable->SetBoolean("isTrusted", false);
- paired_unconnectable->SetBoolean("discoverable", true);
- paired_unconnectable->SetBoolean("paired", true);
- paired_unconnectable->SetBoolean("incoming", false);
- predefined_devices->Append(paired_unconnectable.Pass());
-
- return predefined_devices.Pass();
-}
-
-void FakeBluetoothDeviceClient::RemoveDevice(
- const dbus::ObjectPath& adapter_path,
- const dbus::ObjectPath& device_path) {
- std::vector<dbus::ObjectPath>::iterator listiter =
- std::find(device_list_.begin(), device_list_.end(), device_path);
- if (listiter == device_list_.end())
- return;
-
- PropertiesMap::const_iterator iter = properties_map_.find(device_path);
- Properties* properties = iter->second;
-
- VLOG(1) << "removing device: " << properties->alias.value();
- device_list_.erase(listiter);
-
- // Remove the Input interface if it exists. This should be called before the
- // BluetoothDeviceClient::Observer::DeviceRemoved because it deletes the
- // BluetoothDeviceChromeOS object, including the device_path referenced here.
- FakeBluetoothInputClient* fake_bluetooth_input_client =
- static_cast<FakeBluetoothInputClient*>(
- DBusThreadManager::Get()->GetBluetoothInputClient());
- fake_bluetooth_input_client->RemoveInputDevice(device_path);
-
- if (device_path == dbus::ObjectPath(kLowEnergyPath)) {
- FakeBluetoothGattServiceClient* gatt_service_client =
- static_cast<FakeBluetoothGattServiceClient*>(
- DBusThreadManager::Get()->GetBluetoothGattServiceClient());
- gatt_service_client->HideHeartRateService();
- }
-
- FOR_EACH_OBSERVER(BluetoothDeviceClient::Observer, observers_,
- DeviceRemoved(device_path));
-
- properties_map_.erase(iter);
- PairingOptionsMap::const_iterator options_iter =
- pairing_options_map_.find(device_path);
-
- if (options_iter != pairing_options_map_.end()) {
- pairing_options_map_.erase(options_iter);
- }
-}
-
-void FakeBluetoothDeviceClient::OnPropertyChanged(
- const dbus::ObjectPath& object_path,
- const std::string& property_name) {
- VLOG(2) << "Fake Bluetooth device property changed: " << object_path.value()
- << ": " << property_name;
- FOR_EACH_OBSERVER(BluetoothDeviceClient::Observer, observers_,
- DevicePropertyChanged(object_path, property_name));
-}
-
-void FakeBluetoothDeviceClient::DiscoverySimulationTimer() {
- if (!discovery_simulation_step_)
- return;
-
- // Timer fires every .75s, the numbers below are arbitrary to give a feel
- // for a discovery process.
- VLOG(1) << "discovery simulation, step " << discovery_simulation_step_;
- if (discovery_simulation_step_ == 2) {
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kLegacyAutopairPath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kLowEnergyPath));
-
- } else if (discovery_simulation_step_ == 4) {
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kDisplayPinCodePath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kVanishingDevicePath));
-
- } else if (discovery_simulation_step_ == 7) {
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kConnectUnpairablePath));
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
-
- } else if (discovery_simulation_step_ == 8) {
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kDisplayPasskeyPath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kRequestPinCodePath));
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
-
- } else if (discovery_simulation_step_ == 10) {
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kConfirmPasskeyPath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kRequestPasskeyPath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kUnconnectableDevicePath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kUnpairableDevicePath));
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kJustWorksPath));
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
-
- } else if (discovery_simulation_step_ == 13) {
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
- RemoveDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kVanishingDevicePath));
- } else if (discovery_simulation_step_ == 14) {
- UpdateDeviceRSSI(dbus::ObjectPath(kLowEnergyPath),
- base::RandInt(kMinRSSI, kMaxRSSI));
- return;
-
- }
-
- ++discovery_simulation_step_;
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::DiscoverySimulationTimer,
- base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-}
-
-void FakeBluetoothDeviceClient::IncomingPairingSimulationTimer() {
- if (!incoming_pairing_simulation_step_)
- return;
-
- VLOG(1) << "incoming pairing simulation, step "
- << incoming_pairing_simulation_step_;
- switch (incoming_pairing_simulation_step_) {
- case 1:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kConfirmPasskeyPath));
- SimulatePairing(dbus::ObjectPath(kConfirmPasskeyPath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- case 2:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kJustWorksPath));
- SimulatePairing(dbus::ObjectPath(kJustWorksPath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- case 3:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kDisplayPinCodePath));
- SimulatePairing(dbus::ObjectPath(kDisplayPinCodePath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- case 4:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kDisplayPasskeyPath));
- SimulatePairing(dbus::ObjectPath(kDisplayPasskeyPath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- case 5:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kRequestPinCodePath));
- SimulatePairing(dbus::ObjectPath(kRequestPinCodePath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- case 6:
- CreateDevice(dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
- dbus::ObjectPath(kRequestPasskeyPath));
- SimulatePairing(dbus::ObjectPath(kRequestPasskeyPath), true,
- base::Bind(&base::DoNothing),
- base::Bind(&SimpleErrorCallback));
- break;
- default:
- return;
- }
-
- ++incoming_pairing_simulation_step_;
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::IncomingPairingSimulationTimer,
- base::Unretained(this)),
- base::TimeDelta::FromMilliseconds(kIncomingSimulationPairTimeMultiplier *
- simulation_interval_ms_));
-}
-
-void FakeBluetoothDeviceClient::SimulatePairing(
- const dbus::ObjectPath& object_path,
- bool incoming_request,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- pairing_cancelled_ = false;
-
- FakeBluetoothAgentManagerClient* fake_bluetooth_agent_manager_client =
- static_cast<FakeBluetoothAgentManagerClient*>(
- DBusThreadManager::Get()->GetBluetoothAgentManagerClient());
- FakeBluetoothAgentServiceProvider* agent_service_provider =
- fake_bluetooth_agent_manager_client->GetAgentServiceProvider();
- CHECK(agent_service_provider != NULL);
-
- // Grab the device's pairing properties.
- PairingOptionsMap::const_iterator iter =
- pairing_options_map_.find(object_path);
-
- // If the device with path |object_path| has simulated pairing properties
- // defined, then pair it based on its |pairing_method|.
- if (iter != pairing_options_map_.end()) {
- if (iter->second->pairing_action == kPairingActionFail) {
- // Fails the pairing with an org.bluez.Error.Failed error.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::FailSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- } else if (iter->second->pairing_method == kPairingMethodNone ||
- iter->second->pairing_method.empty()) {
- if (!iter->second->incoming) {
- // Simply pair and connect the device.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(
- kSimulateNormalPairTimeMultiplier * simulation_interval_ms_));
- } else {
- agent_service_provider->RequestAuthorization(
- object_path,
- base::Bind(&FakeBluetoothDeviceClient::ConfirmationCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
- }
- } else if (iter->second->pairing_method == kPairingMethodPinCode) {
- if (iter->second->pairing_action == kPairingActionDisplay) {
- // Display a Pincode, and wait before acting as if the other end
- // accepted it.
- agent_service_provider->DisplayPinCode(
- object_path, iter->second->pairing_auth_token);
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kPinCodeDevicePairTimeMultiplier *
- simulation_interval_ms_));
- } else if (iter->second->pairing_action == kPairingActionRequest) {
- // Request a pin code.
- agent_service_provider->RequestPinCode(
- object_path, base::Bind(&FakeBluetoothDeviceClient::PinCodeCallback,
- base::Unretained(this), object_path,
- callback, error_callback));
- } else if (iter->second->pairing_action == kPairingActionConfirmation) {
- error_callback.Run(kNoResponseError, "No confirm for pincode pairing.");
- }
- } else if (iter->second->pairing_method == kPairingMethodPassKey) {
- // Display a passkey, and each interval act as if another key was entered
- // for it.
- if (iter->second->pairing_action == kPairingActionDisplay) {
- agent_service_provider->DisplayPasskey(
- object_path, std::stoi(iter->second->pairing_auth_token), 0);
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE, base::Bind(&FakeBluetoothDeviceClient::SimulateKeypress,
- base::Unretained(this), 1, object_path,
- callback, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- } else if (iter->second->pairing_action == kPairingActionRequest) {
- agent_service_provider->RequestPasskey(
- object_path, base::Bind(&FakeBluetoothDeviceClient::PasskeyCallback,
- base::Unretained(this), object_path,
- callback, error_callback));
- } else if (iter->second->pairing_action == kPairingActionConfirmation) {
- agent_service_provider->RequestConfirmation(
- object_path, std::stoi(iter->second->pairing_auth_token),
- base::Bind(&FakeBluetoothDeviceClient::ConfirmationCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
- }
- }
- } else {
- if (object_path == dbus::ObjectPath(kLegacyAutopairPath) ||
- object_path == dbus::ObjectPath(kConnectUnpairablePath) ||
- object_path == dbus::ObjectPath(kUnconnectableDevicePath) ||
- object_path == dbus::ObjectPath(kLowEnergyPath)) {
- // No need to call anything on the pairing delegate, just wait 3 times
- // the interval before acting as if the other end accepted it.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kSimulateNormalPairTimeMultiplier *
- simulation_interval_ms_));
-
- } else if (object_path == dbus::ObjectPath(kDisplayPinCodePath)) {
- // Display a Pincode, and wait before acting as if the other end accepted
- // it.
- agent_service_provider->DisplayPinCode(object_path, kTestPinCode);
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kPinCodeDevicePairTimeMultiplier *
- simulation_interval_ms_));
-
- } else if (object_path == dbus::ObjectPath(kVanishingDevicePath)) {
- // The vanishing device simulates being too far away, and thus times out.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::TimeoutSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(kVanishingDevicePairTimeMultiplier *
- simulation_interval_ms_));
-
- } else if (object_path == dbus::ObjectPath(kDisplayPasskeyPath)) {
- // Display a passkey, and each interval act as if another key was entered
- // for it.
- agent_service_provider->DisplayPasskey(object_path, kTestPassKey, 0);
-
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE, base::Bind(&FakeBluetoothDeviceClient::SimulateKeypress,
- base::Unretained(this), 1, object_path,
- callback, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else if (object_path == dbus::ObjectPath(kRequestPinCodePath)) {
- // Request a Pincode.
- agent_service_provider->RequestPinCode(
- object_path, base::Bind(&FakeBluetoothDeviceClient::PinCodeCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
-
- } else if (object_path == dbus::ObjectPath(kConfirmPasskeyPath)) {
- // Request confirmation of a Passkey.
- agent_service_provider->RequestConfirmation(
- object_path, kTestPassKey,
- base::Bind(&FakeBluetoothDeviceClient::ConfirmationCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
-
- } else if (object_path == dbus::ObjectPath(kRequestPasskeyPath)) {
- // Request a Passkey from the user.
- agent_service_provider->RequestPasskey(
- object_path, base::Bind(&FakeBluetoothDeviceClient::PasskeyCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
-
- } else if (object_path == dbus::ObjectPath(kUnpairableDevicePath)) {
- // Fails the pairing with an org.bluez.Error.Failed error.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::FailSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else if (object_path == dbus::ObjectPath(kJustWorksPath)) {
- if (incoming_request) {
- agent_service_provider->RequestAuthorization(
- object_path,
- base::Bind(&FakeBluetoothDeviceClient::ConfirmationCallback,
- base::Unretained(this), object_path, callback,
- error_callback));
-
- } else {
- // No need to call anything on the pairing delegate, just wait before
- // acting as if the other end accepted it.
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(
- kSimulateNormalPairTimeMultiplier * simulation_interval_ms_));
- }
-
- } else {
- error_callback.Run(kNoResponseError, "No pairing fake");
- }
- }
-}
-
-void FakeBluetoothDeviceClient::CompleteSimulatedPairing(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "CompleteSimulatedPairing: " << object_path.value();
- if (pairing_cancelled_) {
- pairing_cancelled_ = false;
-
- error_callback.Run(bluetooth_device::kErrorAuthenticationCanceled,
- "Cancelled");
- } else {
- Properties* properties = GetProperties(object_path);
-
- properties->paired.ReplaceValue(true);
- callback.Run();
-
- AddInputDeviceIfNeeded(object_path, properties);
- }
-}
-
-void FakeBluetoothDeviceClient::TimeoutSimulatedPairing(
- const dbus::ObjectPath& object_path,
- const ErrorCallback& error_callback) {
- VLOG(1) << "TimeoutSimulatedPairing: " << object_path.value();
-
- error_callback.Run(bluetooth_device::kErrorAuthenticationTimeout,
- "Timed out");
-}
-
-void FakeBluetoothDeviceClient::CancelSimulatedPairing(
- const dbus::ObjectPath& object_path,
- const ErrorCallback& error_callback) {
- VLOG(1) << "CancelSimulatedPairing: " << object_path.value();
-
- error_callback.Run(bluetooth_device::kErrorAuthenticationCanceled,
- "Canceled");
-}
-
-void FakeBluetoothDeviceClient::RejectSimulatedPairing(
- const dbus::ObjectPath& object_path,
- const ErrorCallback& error_callback) {
- VLOG(1) << "RejectSimulatedPairing: " << object_path.value();
-
- error_callback.Run(bluetooth_device::kErrorAuthenticationRejected,
- "Rejected");
-}
-
-void FakeBluetoothDeviceClient::FailSimulatedPairing(
- const dbus::ObjectPath& object_path,
- const ErrorCallback& error_callback) {
- VLOG(1) << "FailSimulatedPairing: " << object_path.value();
-
- error_callback.Run(bluetooth_device::kErrorFailed, "Failed");
-}
-
-void FakeBluetoothDeviceClient::AddInputDeviceIfNeeded(
- const dbus::ObjectPath& object_path,
- Properties* properties) {
- // If the paired device is a HID device based on it's bluetooth class,
- // simulate the Input interface.
- FakeBluetoothInputClient* fake_bluetooth_input_client =
- static_cast<FakeBluetoothInputClient*>(
- DBusThreadManager::Get()->GetBluetoothInputClient());
-
- if ((properties->bluetooth_class.value() & 0x001f03) == 0x000500)
- fake_bluetooth_input_client->AddInputDevice(object_path);
-}
-
-void FakeBluetoothDeviceClient::UpdateDeviceRSSI(
- const dbus::ObjectPath& object_path,
- int16 rssi) {
- PropertiesMap::const_iterator iter = properties_map_.find(object_path);
- if (iter == properties_map_.end()) {
- VLOG(2) << "Fake device does not exist: " << object_path.value();
- return;
- }
- Properties* properties = iter->second;
- DCHECK(properties);
- properties->rssi.ReplaceValue(rssi);
-}
-
-void FakeBluetoothDeviceClient::UpdateConnectionInfo(
- uint16 connection_rssi,
- uint16 transmit_power,
- uint16 max_transmit_power) {
- connection_rssi_ = connection_rssi;
- transmit_power_ = transmit_power;
- max_transmit_power_ = max_transmit_power;
-}
-
-void FakeBluetoothDeviceClient::PinCodeCallback(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback,
- BluetoothAgentServiceProvider::Delegate::Status status,
- const std::string& pincode) {
- VLOG(1) << "PinCodeCallback: " << object_path.value();
-
- if (status == BluetoothAgentServiceProvider::Delegate::SUCCESS) {
- PairingOptionsMap::const_iterator iter =
- pairing_options_map_.find(object_path);
-
- bool success = true;
-
- // If the device has pairing options defined
- if (iter != pairing_options_map_.end()) {
- success = iter->second->pairing_auth_token == pincode;
- }
-
- if (success) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kSimulateNormalPairTimeMultiplier *
- simulation_interval_ms_));
- } else {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::RejectSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::CANCELLED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CancelSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::REJECTED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::RejectSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-}
-
-void FakeBluetoothDeviceClient::PasskeyCallback(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback,
- BluetoothAgentServiceProvider::Delegate::Status status,
- uint32 passkey) {
- VLOG(1) << "PasskeyCallback: " << object_path.value();
-
- if (status == BluetoothAgentServiceProvider::Delegate::SUCCESS) {
- PairingOptionsMap::const_iterator iter =
- pairing_options_map_.find(object_path);
- bool success = true;
-
- if (iter != pairing_options_map_.end()) {
- success = static_cast<uint32>(
- std::stoi(iter->second->pairing_auth_token)) == passkey;
- }
-
- if (success) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kSimulateNormalPairTimeMultiplier *
- simulation_interval_ms_));
- } else {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::RejectSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::CANCELLED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CancelSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::REJECTED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::RejectSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-}
-
-void FakeBluetoothDeviceClient::ConfirmationCallback(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback,
- BluetoothAgentServiceProvider::Delegate::Status status) {
- VLOG(1) << "ConfirmationCallback: " << object_path.value();
-
- if (status == BluetoothAgentServiceProvider::Delegate::SUCCESS) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(kSimulateNormalPairTimeMultiplier *
- simulation_interval_ms_));
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::CANCELLED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CancelSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else if (status == BluetoothAgentServiceProvider::Delegate::REJECTED) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::RejectSimulatedPairing,
- base::Unretained(this), object_path, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-}
-
-void FakeBluetoothDeviceClient::SimulateKeypress(
- uint16 entered,
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback) {
- VLOG(1) << "SimulateKeypress " << entered << ": " << object_path.value();
-
- FakeBluetoothAgentManagerClient* fake_bluetooth_agent_manager_client =
- static_cast<FakeBluetoothAgentManagerClient*>(
- DBusThreadManager::Get()->GetBluetoothAgentManagerClient());
- FakeBluetoothAgentServiceProvider* agent_service_provider =
- fake_bluetooth_agent_manager_client->GetAgentServiceProvider();
-
- // The agent service provider object could have been destroyed after the
- // pairing is canceled.
- if (!agent_service_provider)
- return;
-
- agent_service_provider->DisplayPasskey(object_path, kTestPassKey, entered);
-
- if (entered < 7) {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE, base::Bind(&FakeBluetoothDeviceClient::SimulateKeypress,
- base::Unretained(this), entered + 1, object_path,
- callback, error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
-
- } else {
- base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
- FROM_HERE,
- base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing,
- base::Unretained(this), object_path, callback,
- error_callback),
- base::TimeDelta::FromMilliseconds(simulation_interval_ms_));
- }
-}
-
-void FakeBluetoothDeviceClient::ConnectionCallback(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback,
- BluetoothProfileServiceProvider::Delegate::Status status) {
- VLOG(1) << "ConnectionCallback: " << object_path.value();
-
- if (status == BluetoothProfileServiceProvider::Delegate::SUCCESS) {
- callback.Run();
- } else if (status == BluetoothProfileServiceProvider::Delegate::CANCELLED) {
- // TODO(keybuk): tear down this side of the connection
- error_callback.Run(bluetooth_device::kErrorFailed, "Canceled");
- } else if (status == BluetoothProfileServiceProvider::Delegate::REJECTED) {
- // TODO(keybuk): tear down this side of the connection
- error_callback.Run(bluetooth_device::kErrorFailed, "Rejected");
- }
-}
-
-void FakeBluetoothDeviceClient::DisconnectionCallback(
- const dbus::ObjectPath& object_path,
- const base::Closure& callback,
- const ErrorCallback& error_callback,
- BluetoothProfileServiceProvider::Delegate::Status status) {
- VLOG(1) << "DisconnectionCallback: " << object_path.value();
-
- if (status == BluetoothProfileServiceProvider::Delegate::SUCCESS) {
- // TODO(keybuk): tear down this side of the connection
- callback.Run();
- } else if (status == BluetoothProfileServiceProvider::Delegate::CANCELLED) {
- error_callback.Run(bluetooth_device::kErrorFailed, "Canceled");
- } else if (status == BluetoothProfileServiceProvider::Delegate::REJECTED) {
- error_callback.Run(bluetooth_device::kErrorFailed, "Rejected");
- }
-}
-
-} // namespace chromeos
« no previous file with comments | « chromeos/dbus/fake_bluetooth_device_client.h ('k') | chromeos/dbus/fake_bluetooth_gatt_characteristic_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698