11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file.
41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/fake_nfc_manager_client.h"
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/bind.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/logging.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "dbus/object_path.h"
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h"
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace chromeos {
131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)const char FakeNfcManagerClient::kDefaultAdapterPath[] = "/fake/nfc0";
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)FakeNfcManagerClient::Properties::Properties(
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const PropertyChangedCallback& callback)
181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    : NfcManagerClient::Properties(NULL, callback) {
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)FakeNfcManagerClient::Properties::~Properties() {
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::Properties::Get(
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    dbus::PropertyBase* property,
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    dbus::PropertySet::GetCallback callback) {
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "Get " << property->name();
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  callback.Run(false);
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::Properties::GetAll() {
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "GetAll";
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::Properties::Set(
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    dbus::PropertyBase* property,
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    dbus::PropertySet::SetCallback callback) {
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "Set " << property->name();
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  callback.Run(false);
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)FakeNfcManagerClient::FakeNfcManagerClient() {
431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  properties_.reset(new Properties(base::Bind(
441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      &FakeNfcManagerClient::OnPropertyChanged, base::Unretained(this))));
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  AddAdapter(kDefaultAdapterPath);
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)FakeNfcManagerClient::~FakeNfcManagerClient() {
491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::Init(dbus::Bus* bus) {
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::AddObserver(Observer* observer) {
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  observers_.AddObserver(observer);
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::RemoveObserver(Observer* observer) {
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  observers_.RemoveObserver(observer);
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)FakeNfcManagerClient::Properties* FakeNfcManagerClient::GetProperties() {
631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return properties_.get();
641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::AddAdapter(const std::string& adapter_path) {
671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "Adding NFC adapter: " << adapter_path;
681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  dbus::ObjectPath new_adapter(adapter_path);
691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::pair<std::set<dbus::ObjectPath>::iterator, bool> result =
701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      adapters_.insert(new_adapter);
711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (!result.second) {
721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    VLOG(1) << "Adapter \"" << adapter_path << "\" already exists.";
731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return;
741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Create a vector containing all object paths in the set |adapters_|. This
761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // will copy all members of |adapters_| to |adapters|.
771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::vector<dbus::ObjectPath> adapters(adapters_.begin(), adapters_.end());
781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  properties_->adapters.ReplaceValue(adapters);
791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observers_, AdapterAdded(new_adapter));
801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::RemoveAdapter(const std::string& adapter_path) {
831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "Removing NFC adapter: " << adapter_path;
841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  dbus::ObjectPath to_remove(adapter_path);
851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (adapters_.erase(to_remove) == 0) {
861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    VLOG(1) << "No such adapter: \"" << adapter_path << "\"";
871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return;
881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  }
891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::vector<dbus::ObjectPath> adapters(adapters_.begin(), adapters_.end());
901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  properties_->adapters.ReplaceValue(adapters);
911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observers_, AdapterRemoved(to_remove));
921e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
931e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
941e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void FakeNfcManagerClient::OnPropertyChanged(
951e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    const std::string& property_name) {
961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  FOR_EACH_OBSERVER(Observer, observers_,
971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                    ManagerPropertyChanged(property_name));
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace chromeos
101