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_tag_client.h" | 5 #include "chromeos/dbus/nfc_tag_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 "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 weak_ptr_factory_(this) { | 45 weak_ptr_factory_(this) { |
46 DCHECK(adapter_client); | 46 DCHECK(adapter_client); |
47 } | 47 } |
48 | 48 |
49 virtual ~NfcTagClientImpl() { | 49 virtual ~NfcTagClientImpl() { |
50 DCHECK(adapter_client_); | 50 DCHECK(adapter_client_); |
51 adapter_client_->RemoveObserver(this); | 51 adapter_client_->RemoveObserver(this); |
52 } | 52 } |
53 | 53 |
54 // NfcTagClient override. | 54 // NfcTagClient override. |
55 virtual void AddObserver(NfcTagClient::Observer* observer) OVERRIDE { | 55 virtual void AddObserver(NfcTagClient::Observer* observer) override { |
56 DCHECK(observer); | 56 DCHECK(observer); |
57 observers_.AddObserver(observer); | 57 observers_.AddObserver(observer); |
58 } | 58 } |
59 | 59 |
60 // NfcTagClient override. | 60 // NfcTagClient override. |
61 virtual void RemoveObserver(NfcTagClient::Observer* observer) OVERRIDE { | 61 virtual void RemoveObserver(NfcTagClient::Observer* observer) override { |
62 DCHECK(observer); | 62 DCHECK(observer); |
63 observers_.RemoveObserver(observer); | 63 observers_.RemoveObserver(observer); |
64 } | 64 } |
65 | 65 |
66 // NfcTagClient override. | 66 // NfcTagClient override. |
67 virtual std::vector<dbus::ObjectPath> GetTagsForAdapter( | 67 virtual std::vector<dbus::ObjectPath> GetTagsForAdapter( |
68 const dbus::ObjectPath& adapter_path) OVERRIDE { | 68 const dbus::ObjectPath& adapter_path) override { |
69 DBusObjectMap* object_map = | 69 DBusObjectMap* object_map = |
70 adapters_to_object_maps_.GetObjectMap(adapter_path); | 70 adapters_to_object_maps_.GetObjectMap(adapter_path); |
71 if (!object_map) | 71 if (!object_map) |
72 return std::vector<dbus::ObjectPath>(); | 72 return std::vector<dbus::ObjectPath>(); |
73 return object_map->GetObjectPaths(); | 73 return object_map->GetObjectPaths(); |
74 } | 74 } |
75 | 75 |
76 // NfcTagClient override. | 76 // NfcTagClient override. |
77 virtual Properties* GetProperties( | 77 virtual Properties* GetProperties( |
78 const dbus::ObjectPath& object_path) OVERRIDE { | 78 const dbus::ObjectPath& object_path) override { |
79 return static_cast<Properties*>( | 79 return static_cast<Properties*>( |
80 adapters_to_object_maps_.FindObjectProperties(object_path)); | 80 adapters_to_object_maps_.FindObjectProperties(object_path)); |
81 } | 81 } |
82 | 82 |
83 // NfcTagClient override. | 83 // NfcTagClient override. |
84 virtual void Write( | 84 virtual void Write( |
85 const dbus::ObjectPath& object_path, | 85 const dbus::ObjectPath& object_path, |
86 const base::DictionaryValue& attributes, | 86 const base::DictionaryValue& attributes, |
87 const base::Closure& callback, | 87 const base::Closure& callback, |
88 const nfc_client_helpers::ErrorCallback& error_callback) OVERRIDE { | 88 const nfc_client_helpers::ErrorCallback& error_callback) override { |
89 dbus::ObjectProxy* object_proxy = | 89 dbus::ObjectProxy* object_proxy = |
90 adapters_to_object_maps_.FindObjectProxy(object_path); | 90 adapters_to_object_maps_.FindObjectProxy(object_path); |
91 if (!object_proxy) { | 91 if (!object_proxy) { |
92 std::string error_message = | 92 std::string error_message = |
93 base::StringPrintf("NFC tag with object path \"%s\" does not exist.", | 93 base::StringPrintf("NFC tag with object path \"%s\" does not exist.", |
94 object_path.value().c_str()); | 94 object_path.value().c_str()); |
95 LOG(ERROR) << error_message; | 95 LOG(ERROR) << error_message; |
96 error_callback.Run(nfc_client_helpers::kUnknownObjectError, | 96 error_callback.Run(nfc_client_helpers::kUnknownObjectError, |
97 error_message); | 97 error_message); |
98 return; | 98 return; |
(...skipping 15 matching lines...) Expand all Loading... |
114 | 114 |
115 object_proxy->CallMethodWithErrorCallback( | 115 object_proxy->CallMethodWithErrorCallback( |
116 &method_call, | 116 &method_call, |
117 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, | 117 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, |
118 base::Bind(&nfc_client_helpers::OnSuccess, callback), | 118 base::Bind(&nfc_client_helpers::OnSuccess, callback), |
119 base::Bind(&nfc_client_helpers::OnError, error_callback)); | 119 base::Bind(&nfc_client_helpers::OnError, error_callback)); |
120 } | 120 } |
121 | 121 |
122 protected: | 122 protected: |
123 // DBusClient override. | 123 // DBusClient override. |
124 virtual void Init(dbus::Bus* bus) OVERRIDE { | 124 virtual void Init(dbus::Bus* bus) override { |
125 VLOG(1) << "Creating NfcTagClientImpl"; | 125 VLOG(1) << "Creating NfcTagClientImpl"; |
126 DCHECK(bus); | 126 DCHECK(bus); |
127 bus_ = bus; | 127 bus_ = bus; |
128 DCHECK(adapter_client_); | 128 DCHECK(adapter_client_); |
129 adapter_client_->AddObserver(this); | 129 adapter_client_->AddObserver(this); |
130 } | 130 } |
131 | 131 |
132 private: | 132 private: |
133 // NfcAdapterClient::Observer override. | 133 // NfcAdapterClient::Observer override. |
134 virtual void AdapterAdded(const dbus::ObjectPath& object_path) OVERRIDE { | 134 virtual void AdapterAdded(const dbus::ObjectPath& object_path) override { |
135 VLOG(1) << "Adapter added. Creating map for tag proxies belonging to " | 135 VLOG(1) << "Adapter added. Creating map for tag proxies belonging to " |
136 << "adapter: " << object_path.value(); | 136 << "adapter: " << object_path.value(); |
137 adapters_to_object_maps_.CreateObjectMap( | 137 adapters_to_object_maps_.CreateObjectMap( |
138 object_path, nfc_tag::kNfcTagServiceName, this, bus_); | 138 object_path, nfc_tag::kNfcTagServiceName, this, bus_); |
139 } | 139 } |
140 | 140 |
141 // NfcAdapterClient::Observer override. | 141 // NfcAdapterClient::Observer override. |
142 virtual void AdapterRemoved(const dbus::ObjectPath& object_path) OVERRIDE { | 142 virtual void AdapterRemoved(const dbus::ObjectPath& object_path) override { |
143 // Neard doesn't send out property changed signals for the tags that | 143 // Neard doesn't send out property changed signals for the tags that |
144 // are removed when the adapter they belong to is removed. Clean up the | 144 // are removed when the adapter they belong to is removed. Clean up the |
145 // object proxies for devices that are managed by the removed adapter. | 145 // object proxies for devices that are managed by the removed adapter. |
146 // Note: DBusObjectMap guarantees that the Properties structure for the | 146 // Note: DBusObjectMap guarantees that the Properties structure for the |
147 // removed adapter will be valid before this method returns. | 147 // removed adapter will be valid before this method returns. |
148 VLOG(1) << "Adapter removed. Cleaning up tag proxies belonging to " | 148 VLOG(1) << "Adapter removed. Cleaning up tag proxies belonging to " |
149 << "adapter: " << object_path.value(); | 149 << "adapter: " << object_path.value(); |
150 adapters_to_object_maps_.RemoveObjectMap(object_path); | 150 adapters_to_object_maps_.RemoveObjectMap(object_path); |
151 } | 151 } |
152 | 152 |
153 // NfcAdapterClient::Observer override. | 153 // NfcAdapterClient::Observer override. |
154 virtual void AdapterPropertyChanged( | 154 virtual void AdapterPropertyChanged( |
155 const dbus::ObjectPath& object_path, | 155 const dbus::ObjectPath& object_path, |
156 const std::string& property_name) OVERRIDE { | 156 const std::string& property_name) override { |
157 // Update the tag proxies. | 157 // Update the tag proxies. |
158 DCHECK(adapter_client_); | 158 DCHECK(adapter_client_); |
159 NfcAdapterClient::Properties *adapter_properties = | 159 NfcAdapterClient::Properties *adapter_properties = |
160 adapter_client_->GetProperties(object_path); | 160 adapter_client_->GetProperties(object_path); |
161 DCHECK(adapter_properties); | 161 DCHECK(adapter_properties); |
162 if (!adapter_properties) { | 162 if (!adapter_properties) { |
163 LOG(ERROR) << "No property structure found for adapter: " | 163 LOG(ERROR) << "No property structure found for adapter: " |
164 << object_path.value(); | 164 << object_path.value(); |
165 return; | 165 return; |
166 } | 166 } |
167 | 167 |
168 // Ignore changes to properties other than "Tags". | 168 // Ignore changes to properties other than "Tags". |
169 if (property_name != adapter_properties->tags.name()) | 169 if (property_name != adapter_properties->tags.name()) |
170 return; | 170 return; |
171 | 171 |
172 // Update the known tags. | 172 // Update the known tags. |
173 VLOG(1) << "NFC tags changed."; | 173 VLOG(1) << "NFC tags changed."; |
174 const std::vector<dbus::ObjectPath>& received_tags = | 174 const std::vector<dbus::ObjectPath>& received_tags = |
175 adapter_properties->tags.value(); | 175 adapter_properties->tags.value(); |
176 DBusObjectMap* object_map = | 176 DBusObjectMap* object_map = |
177 adapters_to_object_maps_.GetObjectMap(object_path); | 177 adapters_to_object_maps_.GetObjectMap(object_path); |
178 DCHECK(object_map); | 178 DCHECK(object_map); |
179 object_map->UpdateObjects(received_tags); | 179 object_map->UpdateObjects(received_tags); |
180 } | 180 } |
181 | 181 |
182 // nfc_client_helpers::DBusObjectMap::Delegate override. | 182 // nfc_client_helpers::DBusObjectMap::Delegate override. |
183 virtual NfcPropertySet* CreateProperties( | 183 virtual NfcPropertySet* CreateProperties( |
184 dbus::ObjectProxy* object_proxy) OVERRIDE { | 184 dbus::ObjectProxy* object_proxy) override { |
185 Properties* properties = new Properties( | 185 Properties* properties = new Properties( |
186 object_proxy, | 186 object_proxy, |
187 base::Bind(&NfcTagClientImpl::OnPropertyChanged, | 187 base::Bind(&NfcTagClientImpl::OnPropertyChanged, |
188 weak_ptr_factory_.GetWeakPtr(), | 188 weak_ptr_factory_.GetWeakPtr(), |
189 object_proxy->object_path())); | 189 object_proxy->object_path())); |
190 properties->SetAllPropertiesReceivedCallback( | 190 properties->SetAllPropertiesReceivedCallback( |
191 base::Bind(&NfcTagClientImpl::OnPropertiesReceived, | 191 base::Bind(&NfcTagClientImpl::OnPropertiesReceived, |
192 weak_ptr_factory_.GetWeakPtr(), | 192 weak_ptr_factory_.GetWeakPtr(), |
193 object_proxy->object_path())); | 193 object_proxy->object_path())); |
194 return properties; | 194 return properties; |
195 } | 195 } |
196 | 196 |
197 // nfc_client_helpers::DBusObjectMap::Delegate override. | 197 // nfc_client_helpers::DBusObjectMap::Delegate override. |
198 virtual void ObjectAdded(const dbus::ObjectPath& object_path) OVERRIDE { | 198 virtual void ObjectAdded(const dbus::ObjectPath& object_path) override { |
199 FOR_EACH_OBSERVER(NfcTagClient::Observer, observers_, | 199 FOR_EACH_OBSERVER(NfcTagClient::Observer, observers_, |
200 TagAdded(object_path)); | 200 TagAdded(object_path)); |
201 } | 201 } |
202 | 202 |
203 virtual void ObjectRemoved(const dbus::ObjectPath& object_path) OVERRIDE { | 203 virtual void ObjectRemoved(const dbus::ObjectPath& object_path) override { |
204 FOR_EACH_OBSERVER(NfcTagClient::Observer, observers_, | 204 FOR_EACH_OBSERVER(NfcTagClient::Observer, observers_, |
205 TagRemoved(object_path)); | 205 TagRemoved(object_path)); |
206 } | 206 } |
207 | 207 |
208 // Called by NfcPropertySet when a property value is changed, either by | 208 // Called by NfcPropertySet when a property value is changed, either by |
209 // result of a signal or response to a GetAll() or Get() call. | 209 // result of a signal or response to a GetAll() or Get() call. |
210 void OnPropertyChanged(const dbus::ObjectPath& object_path, | 210 void OnPropertyChanged(const dbus::ObjectPath& object_path, |
211 const std::string& property_name) { | 211 const std::string& property_name) { |
212 VLOG(1) << "Tag property changed; Path: " << object_path.value() | 212 VLOG(1) << "Tag property changed; Path: " << object_path.value() |
213 << " Property: " << property_name; | 213 << " Property: " << property_name; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 } | 251 } |
252 | 252 |
253 NfcTagClient::~NfcTagClient() { | 253 NfcTagClient::~NfcTagClient() { |
254 } | 254 } |
255 | 255 |
256 NfcTagClient* NfcTagClient::Create(NfcAdapterClient* adapter_client) { | 256 NfcTagClient* NfcTagClient::Create(NfcAdapterClient* adapter_client) { |
257 return new NfcTagClientImpl(adapter_client); | 257 return new NfcTagClientImpl(adapter_client); |
258 } | 258 } |
259 | 259 |
260 } // namespace chromeos | 260 } // namespace chromeos |
OLD | NEW |