// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef DEVICE_NFC_NFC_PEER_CHROMEOS_H_ #define DEVICE_NFC_NFC_PEER_CHROMEOS_H_ #include #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/observer_list.h" #include "chromeos/dbus/nfc_record_client.h" #include "dbus/object_path.h" #include "device/nfc/nfc_ndef_record.h" #include "device/nfc/nfc_peer.h" namespace chromeos { // The NfcPeerChromeOS class implements NfcPeer for the Chrome OS platform. class NfcPeerChromeOS : public device::NfcPeer, public NfcRecordClient::Observer { public: // NfcPeer overrides. void AddObserver(device::NfcPeer::Observer* observer) override; void RemoveObserver(device::NfcPeer::Observer* observer) override; std::string GetIdentifier() const override; const device::NfcNdefMessage& GetNdefMessage() const override; void PushNdef(const device::NfcNdefMessage& message, const base::Closure& callback, const ErrorCallback& error_callback) override; void StartHandover(HandoverType handover_type, const base::Closure& callback, const ErrorCallback& error_callback) override; private: friend class NfcAdapterChromeOS; // Mapping from D-Bus object paths to NfcNdefRecord objects. typedef std::map NdefRecordMap; explicit NfcPeerChromeOS(const dbus::ObjectPath& object_path); ~NfcPeerChromeOS() override; // NfcRecordClient::Observer overrides. void RecordAdded(const dbus::ObjectPath& object_path) override; void RecordRemoved(const dbus::ObjectPath& object_path) override; void RecordPropertiesReceived(const dbus::ObjectPath& object_path) override; // Called by dbus:: on completion of the D-Bus method call to push an NDEF. void OnPushNdef(const base::Closure& callback); void OnPushNdefError(const ErrorCallback& error_callback, const std::string& error_name, const std::string& error_message); // Creates a record object for the record with object path |object_path| and // notifies the observers, if a record object did not already exist for it. void AddRecord(const dbus::ObjectPath& object_path); // Object path of the peer that we are currently tracking. dbus::ObjectPath object_path_; // A map containing the NDEF records that were received from the peer. NdefRecordMap records_; // Message instance that contains pointers to all created records. device::NfcNdefMessage message_; // List of observers interested in event notifications from us. base::ObserverList observers_; // Note: This should remain the last member so it'll be destroyed and // invalidate its weak pointers before any other members are destroyed. base::WeakPtrFactory weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(NfcPeerChromeOS); }; } // namespace chromeos #endif // DEVICE_NFC_NFC_PEER_CHROMEOS_H_