OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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/nfc_record_client.h" | 5 #include "chromeos/dbus/nfc_record_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
9 #include "base/observer_list.h" | 9 #include "base/observer_list.h" |
10 #include "chromeos/dbus/nfc_device_client.h" | 10 #include "chromeos/dbus/nfc_device_client.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 } | 53 } |
54 | 54 |
55 virtual ~NfcRecordClientImpl() { | 55 virtual ~NfcRecordClientImpl() { |
56 DCHECK(device_client_); | 56 DCHECK(device_client_); |
57 DCHECK(tag_client_); | 57 DCHECK(tag_client_); |
58 device_client_->RemoveObserver(this); | 58 device_client_->RemoveObserver(this); |
59 tag_client_->RemoveObserver(this); | 59 tag_client_->RemoveObserver(this); |
60 } | 60 } |
61 | 61 |
62 // NfcRecordClient override. | 62 // NfcRecordClient override. |
63 virtual void AddObserver(NfcRecordClient::Observer* observer) OVERRIDE { | 63 virtual void AddObserver(NfcRecordClient::Observer* observer) override { |
64 DCHECK(observer); | 64 DCHECK(observer); |
65 observers_.AddObserver(observer); | 65 observers_.AddObserver(observer); |
66 } | 66 } |
67 | 67 |
68 // NfcRecordClient override. | 68 // NfcRecordClient override. |
69 virtual void RemoveObserver(NfcRecordClient::Observer* observer) OVERRIDE { | 69 virtual void RemoveObserver(NfcRecordClient::Observer* observer) override { |
70 DCHECK(observer); | 70 DCHECK(observer); |
71 observers_.RemoveObserver(observer); | 71 observers_.RemoveObserver(observer); |
72 } | 72 } |
73 | 73 |
74 virtual std::vector<dbus::ObjectPath> GetRecordsForDevice( | 74 virtual std::vector<dbus::ObjectPath> GetRecordsForDevice( |
75 const dbus::ObjectPath& device_path) OVERRIDE { | 75 const dbus::ObjectPath& device_path) override { |
76 DBusObjectMap* object_map = | 76 DBusObjectMap* object_map = |
77 devices_and_tags_to_object_maps_.GetObjectMap(device_path); | 77 devices_and_tags_to_object_maps_.GetObjectMap(device_path); |
78 if (!object_map) | 78 if (!object_map) |
79 return std::vector<dbus::ObjectPath>(); | 79 return std::vector<dbus::ObjectPath>(); |
80 return object_map->GetObjectPaths(); | 80 return object_map->GetObjectPaths(); |
81 } | 81 } |
82 | 82 |
83 virtual std::vector<dbus::ObjectPath> GetRecordsForTag( | 83 virtual std::vector<dbus::ObjectPath> GetRecordsForTag( |
84 const dbus::ObjectPath& tag_path) OVERRIDE { | 84 const dbus::ObjectPath& tag_path) override { |
85 return GetRecordsForDevice(tag_path); | 85 return GetRecordsForDevice(tag_path); |
86 } | 86 } |
87 | 87 |
88 // NfcRecordClient override. | 88 // NfcRecordClient override. |
89 virtual Properties* GetProperties( | 89 virtual Properties* GetProperties( |
90 const dbus::ObjectPath& object_path) OVERRIDE { | 90 const dbus::ObjectPath& object_path) override { |
91 return static_cast<Properties*>( | 91 return static_cast<Properties*>( |
92 devices_and_tags_to_object_maps_.FindObjectProperties(object_path)); | 92 devices_and_tags_to_object_maps_.FindObjectProperties(object_path)); |
93 } | 93 } |
94 | 94 |
95 protected: | 95 protected: |
96 // DBusClient override. | 96 // DBusClient override. |
97 virtual void Init(dbus::Bus* bus) OVERRIDE { | 97 virtual void Init(dbus::Bus* bus) override { |
98 VLOG(1) << "Creating NfcRecordClient impl"; | 98 VLOG(1) << "Creating NfcRecordClient impl"; |
99 DCHECK(bus); | 99 DCHECK(bus); |
100 bus_ = bus; | 100 bus_ = bus; |
101 DCHECK(device_client_); | 101 DCHECK(device_client_); |
102 DCHECK(tag_client_); | 102 DCHECK(tag_client_); |
103 device_client_->AddObserver(this); | 103 device_client_->AddObserver(this); |
104 tag_client_->AddObserver(this); | 104 tag_client_->AddObserver(this); |
105 } | 105 } |
106 | 106 |
107 private: | 107 private: |
108 // NfcDeviceClient::Observer override. | 108 // NfcDeviceClient::Observer override. |
109 virtual void DeviceAdded(const dbus::ObjectPath& object_path) OVERRIDE { | 109 virtual void DeviceAdded(const dbus::ObjectPath& object_path) override { |
110 VLOG(1) << "Device added. Creating map for record proxies belonging to " | 110 VLOG(1) << "Device added. Creating map for record proxies belonging to " |
111 << "device: " << object_path.value(); | 111 << "device: " << object_path.value(); |
112 devices_and_tags_to_object_maps_.CreateObjectMap( | 112 devices_and_tags_to_object_maps_.CreateObjectMap( |
113 object_path, nfc_record::kNfcRecordServiceName, this, bus_); | 113 object_path, nfc_record::kNfcRecordServiceName, this, bus_); |
114 } | 114 } |
115 | 115 |
116 // NfcDeviceClient::Observer override. | 116 // NfcDeviceClient::Observer override. |
117 virtual void DeviceRemoved(const dbus::ObjectPath& object_path) OVERRIDE { | 117 virtual void DeviceRemoved(const dbus::ObjectPath& object_path) override { |
118 // Neard doesn't send out property changed signals for the records that | 118 // Neard doesn't send out property changed signals for the records that |
119 // are removed when the device they belong to is removed. Clean up the | 119 // are removed when the device they belong to is removed. Clean up the |
120 // object proxies for records that belong to the removed device. | 120 // object proxies for records that belong to the removed device. |
121 // Note: DBusObjectMap guarantees that the Properties structure for the | 121 // Note: DBusObjectMap guarantees that the Properties structure for the |
122 // removed adapter will be valid before this method returns. | 122 // removed adapter will be valid before this method returns. |
123 VLOG(1) << "Device removed. Cleaning up record proxies belonging to " | 123 VLOG(1) << "Device removed. Cleaning up record proxies belonging to " |
124 << "device: " << object_path.value(); | 124 << "device: " << object_path.value(); |
125 devices_and_tags_to_object_maps_.RemoveObjectMap(object_path); | 125 devices_and_tags_to_object_maps_.RemoveObjectMap(object_path); |
126 } | 126 } |
127 | 127 |
128 // NfcDeviceClient::Observer override. | 128 // NfcDeviceClient::Observer override. |
129 virtual void DevicePropertyChanged( | 129 virtual void DevicePropertyChanged( |
130 const dbus::ObjectPath& object_path, | 130 const dbus::ObjectPath& object_path, |
131 const std::string& property_name) OVERRIDE { | 131 const std::string& property_name) override { |
132 // Update the record proxies using records from the device. | 132 // Update the record proxies using records from the device. |
133 DCHECK(device_client_); | 133 DCHECK(device_client_); |
134 NfcDeviceClient::Properties* device_properties = | 134 NfcDeviceClient::Properties* device_properties = |
135 device_client_->GetProperties(object_path); | 135 device_client_->GetProperties(object_path); |
136 | 136 |
137 // Ignore changes to properties other than "Records". | 137 // Ignore changes to properties other than "Records". |
138 if (property_name != device_properties->records.name()) | 138 if (property_name != device_properties->records.name()) |
139 return; | 139 return; |
140 | 140 |
141 // Update known records. | 141 // Update known records. |
142 VLOG(1) << "NFC records changed."; | 142 VLOG(1) << "NFC records changed."; |
143 const std::vector<dbus::ObjectPath>& received_records = | 143 const std::vector<dbus::ObjectPath>& received_records = |
144 device_properties->records.value(); | 144 device_properties->records.value(); |
145 DBusObjectMap* object_map = | 145 DBusObjectMap* object_map = |
146 devices_and_tags_to_object_maps_.GetObjectMap(object_path); | 146 devices_and_tags_to_object_maps_.GetObjectMap(object_path); |
147 DCHECK(object_map); | 147 DCHECK(object_map); |
148 object_map->UpdateObjects(received_records); | 148 object_map->UpdateObjects(received_records); |
149 } | 149 } |
150 | 150 |
151 // NfcTagClient::Observer override. | 151 // NfcTagClient::Observer override. |
152 virtual void TagAdded(const dbus::ObjectPath& object_path) OVERRIDE { | 152 virtual void TagAdded(const dbus::ObjectPath& object_path) override { |
153 VLOG(1) << "Tag added. Creating map for record proxies belonging to " | 153 VLOG(1) << "Tag added. Creating map for record proxies belonging to " |
154 << "tag: " << object_path.value(); | 154 << "tag: " << object_path.value(); |
155 devices_and_tags_to_object_maps_.CreateObjectMap( | 155 devices_and_tags_to_object_maps_.CreateObjectMap( |
156 object_path, nfc_record::kNfcRecordServiceName, this, bus_); | 156 object_path, nfc_record::kNfcRecordServiceName, this, bus_); |
157 } | 157 } |
158 | 158 |
159 // NfcTagClient::Observer override. | 159 // NfcTagClient::Observer override. |
160 virtual void TagRemoved(const dbus::ObjectPath& object_path) OVERRIDE { | 160 virtual void TagRemoved(const dbus::ObjectPath& object_path) override { |
161 // Neard doesn't send out property changed signals for the records that | 161 // Neard doesn't send out property changed signals for the records that |
162 // are removed when the tag they belong to is removed. Clean up the | 162 // are removed when the tag they belong to is removed. Clean up the |
163 // object proxies for records that belong to the removed tag. | 163 // object proxies for records that belong to the removed tag. |
164 // Note: DBusObjectMap guarantees that the Properties structure for the | 164 // Note: DBusObjectMap guarantees that the Properties structure for the |
165 // removed adapter will be valid before this method returns. | 165 // removed adapter will be valid before this method returns. |
166 VLOG(1) << "Tag removed. Cleaning up record proxies belonging to " | 166 VLOG(1) << "Tag removed. Cleaning up record proxies belonging to " |
167 << "tag: " << object_path.value(); | 167 << "tag: " << object_path.value(); |
168 devices_and_tags_to_object_maps_.RemoveObjectMap(object_path); | 168 devices_and_tags_to_object_maps_.RemoveObjectMap(object_path); |
169 } | 169 } |
170 | 170 |
171 // NfcTagClient::Observer override. | 171 // NfcTagClient::Observer override. |
172 virtual void TagPropertyChanged(const dbus::ObjectPath& object_path, | 172 virtual void TagPropertyChanged(const dbus::ObjectPath& object_path, |
173 const std::string& property_name) OVERRIDE { | 173 const std::string& property_name) override { |
174 // Update the record proxies using records from the tag. | 174 // Update the record proxies using records from the tag. |
175 DCHECK(device_client_); | 175 DCHECK(device_client_); |
176 NfcTagClient::Properties* tag_properties = | 176 NfcTagClient::Properties* tag_properties = |
177 tag_client_->GetProperties(object_path); | 177 tag_client_->GetProperties(object_path); |
178 | 178 |
179 // Ignore changes to properties other than "Records". | 179 // Ignore changes to properties other than "Records". |
180 if (property_name != tag_properties->records.name()) | 180 if (property_name != tag_properties->records.name()) |
181 return; | 181 return; |
182 | 182 |
183 // Update known records. | 183 // Update known records. |
184 VLOG(1) << "NFC records changed."; | 184 VLOG(1) << "NFC records changed."; |
185 const std::vector<dbus::ObjectPath>& received_records = | 185 const std::vector<dbus::ObjectPath>& received_records = |
186 tag_properties->records.value(); | 186 tag_properties->records.value(); |
187 DBusObjectMap* object_map = | 187 DBusObjectMap* object_map = |
188 devices_and_tags_to_object_maps_.GetObjectMap(object_path); | 188 devices_and_tags_to_object_maps_.GetObjectMap(object_path); |
189 DCHECK(object_map); | 189 DCHECK(object_map); |
190 object_map->UpdateObjects(received_records); | 190 object_map->UpdateObjects(received_records); |
191 | 191 |
192 // When rewriting the record to a tag, neard fires a property changed | 192 // When rewriting the record to a tag, neard fires a property changed |
193 // signal for the tags "Records" property, without creating a new object | 193 // signal for the tags "Records" property, without creating a new object |
194 // path. Sync the properties of all records here, in case Update objects | 194 // path. Sync the properties of all records here, in case Update objects |
195 // doesn't do it. | 195 // doesn't do it. |
196 VLOG(1) << "Fetch properties for all records."; | 196 VLOG(1) << "Fetch properties for all records."; |
197 object_map->RefreshAllProperties(); | 197 object_map->RefreshAllProperties(); |
198 } | 198 } |
199 | 199 |
200 // nfc_client_helpers::DBusObjectMap::Delegate override. | 200 // nfc_client_helpers::DBusObjectMap::Delegate override. |
201 virtual NfcPropertySet* CreateProperties( | 201 virtual NfcPropertySet* CreateProperties( |
202 dbus::ObjectProxy* object_proxy) OVERRIDE { | 202 dbus::ObjectProxy* object_proxy) override { |
203 Properties* properties = new Properties( | 203 Properties* properties = new Properties( |
204 object_proxy, | 204 object_proxy, |
205 base::Bind(&NfcRecordClientImpl::OnPropertyChanged, | 205 base::Bind(&NfcRecordClientImpl::OnPropertyChanged, |
206 weak_ptr_factory_.GetWeakPtr(), | 206 weak_ptr_factory_.GetWeakPtr(), |
207 object_proxy->object_path())); | 207 object_proxy->object_path())); |
208 properties->SetAllPropertiesReceivedCallback( | 208 properties->SetAllPropertiesReceivedCallback( |
209 base::Bind(&NfcRecordClientImpl::OnPropertiesReceived, | 209 base::Bind(&NfcRecordClientImpl::OnPropertiesReceived, |
210 weak_ptr_factory_.GetWeakPtr(), | 210 weak_ptr_factory_.GetWeakPtr(), |
211 object_proxy->object_path())); | 211 object_proxy->object_path())); |
212 return properties; | 212 return properties; |
213 } | 213 } |
214 | 214 |
215 // nfc_client_helpers::DBusObjectMap::Delegate override. | 215 // nfc_client_helpers::DBusObjectMap::Delegate override. |
216 virtual void ObjectAdded(const dbus::ObjectPath& object_path) OVERRIDE { | 216 virtual void ObjectAdded(const dbus::ObjectPath& object_path) override { |
217 FOR_EACH_OBSERVER(NfcRecordClient::Observer, observers_, | 217 FOR_EACH_OBSERVER(NfcRecordClient::Observer, observers_, |
218 RecordAdded(object_path)); | 218 RecordAdded(object_path)); |
219 } | 219 } |
220 | 220 |
221 // nfc_client_helpers::DBusObjectMap::Delegate override. | 221 // nfc_client_helpers::DBusObjectMap::Delegate override. |
222 virtual void ObjectRemoved(const dbus::ObjectPath& object_path) OVERRIDE { | 222 virtual void ObjectRemoved(const dbus::ObjectPath& object_path) override { |
223 FOR_EACH_OBSERVER(NfcRecordClient::Observer, observers_, | 223 FOR_EACH_OBSERVER(NfcRecordClient::Observer, observers_, |
224 RecordRemoved(object_path)); | 224 RecordRemoved(object_path)); |
225 } | 225 } |
226 | 226 |
227 // Called by NfcPropertySet when a property value is changed, either by | 227 // Called by NfcPropertySet when a property value is changed, either by |
228 // result of a signal or response to a GetAll() or Get() call. | 228 // result of a signal or response to a GetAll() or Get() call. |
229 void OnPropertyChanged(const dbus::ObjectPath& object_path, | 229 void OnPropertyChanged(const dbus::ObjectPath& object_path, |
230 const std::string& property_name) { | 230 const std::string& property_name) { |
231 VLOG(1) << "Record property changed; Path: " << object_path.value() | 231 VLOG(1) << "Record property changed; Path: " << object_path.value() |
232 << " Property: " << property_name; | 232 << " Property: " << property_name; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
272 | 272 |
273 NfcRecordClient::~NfcRecordClient() { | 273 NfcRecordClient::~NfcRecordClient() { |
274 } | 274 } |
275 | 275 |
276 NfcRecordClient* NfcRecordClient::Create(NfcDeviceClient* device_client, | 276 NfcRecordClient* NfcRecordClient::Create(NfcDeviceClient* device_client, |
277 NfcTagClient* tag_client) { | 277 NfcTagClient* tag_client) { |
278 return new NfcRecordClientImpl(device_client, tag_client); | 278 return new NfcRecordClientImpl(device_client, tag_client); |
279 } | 279 } |
280 | 280 |
281 } // namespace chromeos | 281 } // namespace chromeos |
OLD | NEW |