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