1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef CHROMEOS_DBUS_FAKE_NFC_RECORD_CLIENT_H_ 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define CHROMEOS_DBUS_FAKE_NFC_RECORD_CLIENT_H_ 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/observer_list.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/values.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/chromeos_export.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chromeos/dbus/nfc_record_client.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "dbus/object_path.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace chromeos { 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// FakeNfcRecordClient simulates the behavior of the NFC record objects and is 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// used both in test cases in place of a mock and on the Linux desktop. 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class CHROMEOS_EXPORT FakeNfcRecordClient : public NfcRecordClient { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Paths of the records exposed. 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const char kDeviceSmartPosterRecordPath[]; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const char kDeviceTextRecordPath[]; 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const char kDeviceUriRecordPath[]; 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static const char kTagRecordPath[]; 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Properties structure that provides fake behavior for D-Bus calls. 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) struct Properties : public NfcRecordClient::Properties { 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit Properties(const PropertyChangedCallback& callback); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~Properties(); 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // dbus::PropertySet overrides. 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Get(dbus::PropertyBase* property, 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus::PropertySet::GetCallback callback) OVERRIDE; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void GetAll() OVERRIDE; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Set(dbus::PropertyBase* property, 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) dbus::PropertySet::SetCallback callback) OVERRIDE; 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) }; 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) FakeNfcRecordClient(); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual ~FakeNfcRecordClient(); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // NfcTagClient overrides. 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Init(dbus::Bus* bus) OVERRIDE; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void AddObserver(Observer* observer) OVERRIDE; 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void RemoveObserver(Observer* observer) OVERRIDE; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual std::vector<dbus::ObjectPath> GetRecordsForDevice( 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const dbus::ObjectPath& device_path) OVERRIDE; 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual std::vector<dbus::ObjectPath> GetRecordsForTag( 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const dbus::ObjectPath& tag_path) OVERRIDE; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual Properties* GetProperties( 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const dbus::ObjectPath& object_path) OVERRIDE; 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Adds or removes the fake record objects and notifies the observers. 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetDeviceRecordsVisible(bool visible); 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void SetTagRecordsVisible(bool visible); 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Modifies the contents of the tag record. |attributes| should be the 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // same as the argument to NfcTagClient::Write. Each field will be directly 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // assigned to the underlying record based on the type property, with 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // no validity checking. Invalid tag content can be passed here to test 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // the case where the remote application returns an incorrectly formatted 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // record. 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool WriteTagRecord(const base::DictionaryValue& attributes); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Property changed callback passed when we create Properties* structures. 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnPropertyChanged(const dbus::ObjectPath& object_path, 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& property_name); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Called by Properties* structures when GetAll is called. 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) void OnPropertiesReceived(const dbus::ObjectPath& object_path); 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // If true, the records are currently visible. 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool device_records_visible_; 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool tag_records_visible_; 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // List of observers interested in event notifications from us. 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ObserverList<Observer> observers_; 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Fake properties that are returned for the fake records. 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Properties> device_smart_poster_record_properties_; 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Properties> device_text_record_properties_; 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Properties> device_uri_record_properties_; 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) scoped_ptr<Properties> tag_record_properties_; 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(FakeNfcRecordClient); 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace chromeos 91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif // CHROMEOS_DBUS_FAKE_NFC_RECORD_CLIENT_H_ 93