11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef CHROMEOS_DBUS_NFC_PROPERTY_SET_H_ 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define CHROMEOS_DBUS_NFC_PROPERTY_SET_H_ 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <string> 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/callback.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "dbus/message.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "dbus/object_proxy.h" 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "dbus/property.h" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace chromeos { 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// neard doesn't use the standard D-Bus interfaces for property access and 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// instead defines property accessor methods in each D-Bus interface. This 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// class customizes dbus::PropertySet to generate the correct method call to 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// get all properties, connect to the correct signal and parse it correctly. 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class NfcPropertySet : public dbus::PropertySet { 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public: 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NfcPropertySet(dbus::ObjectProxy* object_proxy, 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string& interface, 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PropertyChangedCallback& callback); 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Destructor; we don't hold on to any references or memory that needs 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // explicit clean-up, but clang thinks we might. 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual ~NfcPropertySet(); 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Caches |callback| so that it will be invoked after a call to GetAll() 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // has successfully received all existing properties from the remote object. 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SetAllPropertiesReceivedCallback(const base::Closure& callback); 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // dbus::PropertySet overrides 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ConnectSignals() OVERRIDE; 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void Get(dbus::PropertyBase* property, 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetCallback callback) OVERRIDE; 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void GetAll() OVERRIDE; 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnGetAll(dbus::Response* response) OVERRIDE; 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void Set(dbus::PropertyBase* property, 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetCallback callback) OVERRIDE; 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) virtual void ChangedReceived(dbus::Signal* signal) OVERRIDE; 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private: 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Optional callback used to notify clients when all properties were received 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // after a call to GetAll. 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::Closure on_get_all_callback_; 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(NfcPropertySet); 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace chromeos 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif // CHROMEOS_DBUS_NFC_PROPERTY_SET_H_ 56