• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace chromeos {
17 
18 class NfcNdefTagTechnologyChromeOS;
19 
20 // The NfcTagChromeOS class implements device::NfcTag for the Chrome OS
21 // platform.
22 class 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.
object_path()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