Index: chromeos/dbus/bluetooth_adapter_client.cc |
diff --git a/chromeos/dbus/bluetooth_adapter_client.cc b/chromeos/dbus/bluetooth_adapter_client.cc |
index 4173c625ba459b1cff40f80d14bb215a9b52e637..bfbe2a1982bba0b0836105a4242d4b2d8da14c21 100644 |
--- a/chromeos/dbus/bluetooth_adapter_client.cc |
+++ b/chromeos/dbus/bluetooth_adapter_client.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/logging.h" |
+#include "base/memory/scoped_ptr.h" |
#include "base/stl_util.h" |
#include "chromeos/dbus/bluetooth_device_client.h" |
#include "chromeos/dbus/bluetooth_manager_client.h" |
@@ -26,8 +27,9 @@ const char BluetoothAdapterClient::kNoResponseError[] = |
const char BluetoothAdapterClient::kBadResponseError[] = |
"org.chromium.Error.BadResponse"; |
-BluetoothAdapterClient::Properties::Properties(dbus::ObjectProxy* object_proxy, |
- PropertyChangedCallback callback) |
+BluetoothAdapterClient::Properties::Properties( |
+ dbus::ObjectProxy* object_proxy, |
+ const PropertyChangedCallback& callback) |
: BluetoothPropertySet(object_proxy, |
bluetooth_adapter::kBluetoothAdapterInterface, |
callback) { |
@@ -729,19 +731,69 @@ class BluetoothAdapterClientImpl: public BluetoothAdapterClient, |
// nothing. |
class BluetoothAdapterClientStubImpl : public BluetoothAdapterClient { |
public: |
+ struct Properties : public BluetoothAdapterClient::Properties { |
+ explicit Properties(const PropertyChangedCallback& callback) |
+ : BluetoothAdapterClient::Properties(NULL, callback) { |
+ } |
+ |
+ virtual ~Properties() { |
+ } |
+ |
+ virtual void Get(dbus::PropertyBase* property, |
+ dbus::PropertySet::GetCallback callback) OVERRIDE { |
+ VLOG(1) << "Get " << property->name(); |
+ callback.Run(false); |
+ } |
+ |
+ virtual void GetAll() OVERRIDE { |
+ VLOG(1) << "GetAll"; |
+ } |
+ |
+ virtual void Set(dbus::PropertyBase *property, |
+ dbus::PropertySet::SetCallback callback) OVERRIDE { |
+ VLOG(1) << "Set " << property->name(); |
+ if (property->name() == "Powered") { |
+ property->ReplaceValueWithSetValue(); |
+ NotifyPropertyChanged(property->name()); |
+ callback.Run(true); |
+ } else { |
+ callback.Run(false); |
+ } |
+ } |
+ }; |
+ |
+ BluetoothAdapterClientStubImpl() { |
+ properties_.reset(new Properties(base::Bind( |
+ &BluetoothAdapterClientStubImpl::OnPropertyChanged, |
+ base::Unretained(this)))); |
+ |
+ properties_->address.ReplaceValue("hci0"); |
+ properties_->name.ReplaceValue("Fake Adapter"); |
+ properties_->pairable.ReplaceValue(true); |
+ |
+ std::vector<dbus::ObjectPath> devices; |
+ devices.push_back(dbus::ObjectPath("/fake/hci0/dev0")); |
+ properties_->devices.ReplaceValue(devices); |
+ } |
+ |
// BluetoothAdapterClient override. |
virtual void AddObserver(Observer* observer) OVERRIDE { |
+ observers_.AddObserver(observer); |
} |
// BluetoothAdapterClient override. |
virtual void RemoveObserver(Observer* observer) OVERRIDE { |
+ observers_.RemoveObserver(observer); |
} |
// BluetoothAdapterClient override. |
virtual Properties* GetProperties(const dbus::ObjectPath& object_path) |
OVERRIDE { |
VLOG(1) << "GetProperties: " << object_path.value(); |
- return NULL; |
+ if (object_path.value() == "/fake/hci0") |
+ return properties_.get(); |
+ else |
+ return NULL; |
} |
// BluetoothAdapterClient override. |
@@ -837,6 +889,19 @@ class BluetoothAdapterClientStubImpl : public BluetoothAdapterClient { |
<< " " << agent_path.value(); |
callback.Run(object_path, false); |
} |
+ |
+ private: |
+ void OnPropertyChanged(const std::string& property_name) { |
+ FOR_EACH_OBSERVER(BluetoothAdapterClient::Observer, observers_, |
+ AdapterPropertyChanged(dbus::ObjectPath("/fake/hci0"), |
+ property_name)); |
+ } |
+ |
+ // List of observers interested in event notifications from us. |
+ ObserverList<Observer> observers_; |
+ |
+ // Static properties we return. |
+ scoped_ptr<Properties> properties_; |
}; |
BluetoothAdapterClient::BluetoothAdapterClient() { |