4th attempt to land change to remove NativeViewportService and
[chromium-blink-merge.git] / chromeos / dbus / bluetooth_input_client.cc
blob5f0cb4f4f5bc0f78979ac9da43d18ba78dc34210
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromeos/dbus/bluetooth_input_client.h"
7 #include <map>
9 #include "base/logging.h"
10 #include "base/stl_util.h"
11 #include "dbus/bus.h"
12 #include "dbus/message.h"
13 #include "dbus/object_manager.h"
14 #include "dbus/object_path.h"
15 #include "dbus/object_proxy.h"
16 #include "third_party/cros_system_api/dbus/service_constants.h"
18 namespace chromeos {
20 BluetoothInputClient::Properties::Properties(
21 dbus::ObjectProxy* object_proxy,
22 const std::string& interface_name,
23 const PropertyChangedCallback& callback)
24 : dbus::PropertySet(object_proxy, interface_name, callback) {
25 RegisterProperty(bluetooth_input::kReconnectModeProperty, &reconnect_mode);
28 BluetoothInputClient::Properties::~Properties() {
32 // The BluetoothInputClient implementation used in production.
33 class BluetoothInputClientImpl
34 : public BluetoothInputClient,
35 public dbus::ObjectManager::Interface {
36 public:
37 BluetoothInputClientImpl() : object_manager_(NULL), weak_ptr_factory_(this) {}
39 virtual ~BluetoothInputClientImpl() {
40 object_manager_->UnregisterInterface(
41 bluetooth_input::kBluetoothInputInterface);
44 // BluetoothInputClient override.
45 virtual void AddObserver(BluetoothInputClient::Observer* observer)
46 OVERRIDE {
47 DCHECK(observer);
48 observers_.AddObserver(observer);
51 // BluetoothInputClient override.
52 virtual void RemoveObserver(BluetoothInputClient::Observer* observer)
53 OVERRIDE {
54 DCHECK(observer);
55 observers_.RemoveObserver(observer);
58 // dbus::ObjectManager::Interface override.
59 virtual dbus::PropertySet* CreateProperties(
60 dbus::ObjectProxy* object_proxy,
61 const dbus::ObjectPath& object_path,
62 const std::string& interface_name) OVERRIDE {
63 Properties* properties = new Properties(
64 object_proxy,
65 interface_name,
66 base::Bind(&BluetoothInputClientImpl::OnPropertyChanged,
67 weak_ptr_factory_.GetWeakPtr(),
68 object_path));
69 return static_cast<dbus::PropertySet*>(properties);
72 // BluetoothInputClient override.
73 virtual Properties* GetProperties(const dbus::ObjectPath& object_path)
74 OVERRIDE {
75 return static_cast<Properties*>(
76 object_manager_->GetProperties(
77 object_path,
78 bluetooth_input::kBluetoothInputInterface));
81 protected:
82 virtual void Init(dbus::Bus* bus) OVERRIDE {
83 object_manager_ = bus->GetObjectManager(
84 bluetooth_object_manager::kBluetoothObjectManagerServiceName,
85 dbus::ObjectPath(
86 bluetooth_object_manager::kBluetoothObjectManagerServicePath));
87 object_manager_->RegisterInterface(
88 bluetooth_input::kBluetoothInputInterface, this);
91 private:
92 // Called by dbus::ObjectManager when an object with the input interface
93 // is created. Informs observers.
94 virtual void ObjectAdded(const dbus::ObjectPath& object_path,
95 const std::string& interface_name) OVERRIDE {
96 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_,
97 InputAdded(object_path));
100 // Called by dbus::ObjectManager when an object with the input interface
101 // is removed. Informs observers.
102 virtual void ObjectRemoved(const dbus::ObjectPath& object_path,
103 const std::string& interface_name) OVERRIDE {
104 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_,
105 InputRemoved(object_path));
108 // Called by BluetoothPropertySet when a property value is changed,
109 // either by result of a signal or response to a GetAll() or Get()
110 // call. Informs observers.
111 void OnPropertyChanged(const dbus::ObjectPath& object_path,
112 const std::string& property_name) {
113 FOR_EACH_OBSERVER(BluetoothInputClient::Observer, observers_,
114 InputPropertyChanged(object_path, property_name));
117 dbus::ObjectManager* object_manager_;
119 // List of observers interested in event notifications from us.
120 ObserverList<BluetoothInputClient::Observer> observers_;
122 // Weak pointer factory for generating 'this' pointers that might live longer
123 // than we do.
124 // Note: This should remain the last member so it'll be destroyed and
125 // invalidate its weak pointers before any other members are destroyed.
126 base::WeakPtrFactory<BluetoothInputClientImpl> weak_ptr_factory_;
128 DISALLOW_COPY_AND_ASSIGN(BluetoothInputClientImpl);
131 BluetoothInputClient::BluetoothInputClient() {
134 BluetoothInputClient::~BluetoothInputClient() {
137 BluetoothInputClient* BluetoothInputClient::Create() {
138 return new BluetoothInputClientImpl();
141 } // namespace chromeos