1// Copyright 2014 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 DEVICE_NFC_NFC_TAG_CHROMEOS_H_
6#define DEVICE_NFC_NFC_TAG_CHROMEOS_H_
7
8#include <string>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/observer_list.h"
12#include "chromeos/dbus/nfc_tag_client.h"
13#include "dbus/object_path.h"
14#include "device/nfc/nfc_tag.h"
15
16namespace chromeos {
17
18class NfcNdefTagTechnologyChromeOS;
19
20// The NfcTagChromeOS class implements device::NfcTag for the Chrome OS
21// platform.
22class NfcTagChromeOS : public device::NfcTag,
23                       public NfcTagClient::Observer {
24 public:
25  // device::NfcTag overrides.
26  virtual void AddObserver(device::NfcTag::Observer* observer) OVERRIDE;
27  virtual void RemoveObserver(device::NfcTag::Observer* observer) OVERRIDE;
28  virtual std::string GetIdentifier() const OVERRIDE;
29  virtual TagType GetType() const OVERRIDE;
30  virtual bool IsReadOnly() const OVERRIDE;
31  virtual device::NfcTag::Protocol GetSupportedProtocol() const OVERRIDE;
32  virtual device::NfcTagTechnology::TechnologyTypeMask
33      GetSupportedTechnologies() const OVERRIDE;
34  virtual bool IsReady() const OVERRIDE;
35  virtual device::NfcNdefTagTechnology* GetNdefTagTechnology() OVERRIDE;
36
37  // NfcTagClient::Observer overrides.
38  virtual void TagPropertyChanged(const dbus::ObjectPath& object_path,
39                                  const std::string& property_name) OVERRIDE;
40  virtual void TagPropertiesReceived(
41      const dbus::ObjectPath& object_path) OVERRIDE;
42
43  // Object path representing the remote tag object.
44  const dbus::ObjectPath& object_path() const { return object_path_; }
45
46 private:
47  friend class NfcAdapterChromeOS;
48
49  explicit NfcTagChromeOS(const dbus::ObjectPath& object_path);
50  virtual ~NfcTagChromeOS();
51
52  // Object path of the tag that we are currently tracking.
53  dbus::ObjectPath object_path_;
54
55  // Stores whether or not the initial set of properties have been received.
56  bool is_ready_;
57
58  // The NfcNdefTagTechnology instance that allows users to perform NDEF
59  // read and write on this tag.
60  scoped_ptr<NfcNdefTagTechnologyChromeOS> ndef_technology_;
61
62  // List of observers interested in event notifications from us.
63  ObserverList<device::NfcTag::Observer> observers_;
64
65  DISALLOW_COPY_AND_ASSIGN(NfcTagChromeOS);
66};
67
68}  // namespace chromeos
69
70#endif  // DEVICE_NFC_NFC_TAG_CHROMEOS_H_
71