Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chromeos / dbus / nfc_device_client.h
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.
4
5 #ifndef CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_
6 #define CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "base/values.h"
13 #include "chromeos/chromeos_export.h"
14 #include "chromeos/dbus/dbus_client.h"
15 #include "chromeos/dbus/nfc_client_helpers.h"
16 #include "chromeos/dbus/nfc_property_set.h"
17 #include "chromeos/dbus/nfc_record_client.h"
18 #include "dbus/object_path.h"
19 #include "dbus/object_proxy.h"
20 #include "dbus/property.h"
21
22 namespace chromeos {
23
24 class NfcAdapterClient;
25
26 // NfcDeviceClient is used to communicate with objects representing remote NFC
27 // devices that can be communicated with.
28 class CHROMEOS_EXPORT NfcDeviceClient : public DBusClient {
29  public:
30   // Structure of properties associated with an NFC device.
31   struct Properties : public NfcPropertySet {
32     // List of object paths for NDEF records associated with the NFC device.
33     // Read-only.
34     dbus::Property<std::vector<dbus::ObjectPath> > records;
35
36     Properties(dbus::ObjectProxy* object_proxy,
37                const PropertyChangedCallback& callback);
38     virtual ~Properties();
39   };
40
41   // Interface for observing changes from a remote NFC device.
42   class Observer {
43    public:
44     virtual ~Observer() {}
45
46     // Called when a remote NFC device with the object |object_path| is added
47     // to the set of known devices.
48     virtual void DeviceAdded(const dbus::ObjectPath& object_path) {}
49
50     // Called when a remote NFC device with the object path |object_path| is
51     // removed from the set of known devices.
52     virtual void DeviceRemoved(const dbus::ObjectPath& object_path) {}
53
54     // Called when the device property with the name |property_name| on device
55     // with object path |object_path| has acquired a new value.
56     virtual void DevicePropertyChanged(const dbus::ObjectPath& object_path,
57                                        const std::string& property_name) {}
58   };
59
60   virtual ~NfcDeviceClient();
61
62   // Adds and removes observers for events on all remote NFC devices. Check the
63   // |object_path| parameter of observer methods to determine which device is
64   // issuing the event.
65   virtual void AddObserver(Observer* observer) = 0;
66   virtual void RemoveObserver(Observer* observer) = 0;
67
68   // Returns the list of device object paths associated with the given adapter
69   // identified by the D-Bus object path |adapter_path|.
70   virtual std::vector<dbus::ObjectPath> GetDevicesForAdapter(
71       const dbus::ObjectPath& adapter_path) = 0;
72
73   // Obtain the properties for the NFC device with object path |object_path|;
74   // any values should be copied if needed.
75   virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0;
76
77   // Creates an NDEF record for the NFC device with object path |object_path|
78   // using the parameters in |attributes|. |attributes| is a dictionary,
79   // containing the NFC Record properties which will be assigned to the
80   // resulting record object and pushed to the device. The properties are
81   // defined by the NFC Record interface (see namespace "nfc_record" in
82   // third_party/cros_system_api/dbus/service_constants.h and
83   // NfcRecordClient::Properties). |attributes| should at least contain a
84   // "Type" plus any other properties associated with that type. For example:
85   //
86   //    {
87   //      "Type": "Text",
88   //      "Encoding": "UTF-8",
89   //      "Language": "en",
90   //      "Representation": "Chrome OS rulez!"
91   //    },
92   //    {
93   //      "Type": "URI",
94   //      "URI": "http://www.chromium.org"
95   //    },
96   //    etc.
97   virtual void Push(
98       const dbus::ObjectPath& object_path,
99       const base::DictionaryValue& attributes,
100       const base::Closure& callback,
101       const nfc_client_helpers::ErrorCallback& error_callback) = 0;
102
103   // Creates the instance.
104   static NfcDeviceClient* Create(NfcAdapterClient* adapter_client);
105
106  protected:
107   friend class NfcClientTest;
108
109   NfcDeviceClient();
110
111  private:
112   DISALLOW_COPY_AND_ASSIGN(NfcDeviceClient);
113 };
114
115 }  // namespace chromeos
116
117 #endif  // CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_