1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROMEOS_DBUS_FAKE_BLUETOOTH_ADAPTER_CLIENT_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROMEOS_DBUS_FAKE_BLUETOOTH_ADAPTER_CLIENT_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/observer_list.h" 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_export.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_adapter_client.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/object_path.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/property.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos { 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// FakeBluetoothAdapterClient simulates the behavior of the Bluetooth Daemon 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// adapter objects and is used both in test cases in place of a mock and on 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// the Linux desktop. 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CHROMEOS_EXPORT FakeBluetoothAdapterClient 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : public BluetoothAdapterClient { 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) struct Properties : public BluetoothAdapterClient::Properties { 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) explicit Properties(const PropertyChangedCallback & callback); 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~Properties(); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // dbus::PropertySet override 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Get(dbus::PropertyBase* property, 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::PropertySet::GetCallback callback) OVERRIDE; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void GetAll() OVERRIDE; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Set(dbus::PropertyBase* property, 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) dbus::PropertySet::SetCallback callback) OVERRIDE; 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FakeBluetoothAdapterClient(); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~FakeBluetoothAdapterClient(); 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // BluetoothAdapterClient overrides 42424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void Init(dbus::Bus* bus) OVERRIDE; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddObserver(Observer* observer) OVERRIDE; 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveObserver(Observer* observer) OVERRIDE; 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual std::vector<dbus::ObjectPath> GetAdapters() OVERRIDE; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual Properties* GetProperties(const dbus::ObjectPath& object_path) 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OVERRIDE; 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void StartDiscovery(const dbus::ObjectPath& object_path, 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) OVERRIDE; 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void StopDiscovery(const dbus::ObjectPath& object_path, 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) OVERRIDE; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void RemoveDevice(const dbus::ObjectPath& object_path, 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const dbus::ObjectPath& device_path, 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Closure& callback, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ErrorCallback& error_callback) OVERRIDE; 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Sets the current simulation timeout interval. 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void SetSimulationIntervalMs(int interval_ms); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Mark the adapter and second adapter as visible or invisible. 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetVisible(bool visible); 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetSecondVisible(bool visible); 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Object path, name and addresses of the adapters we emulate. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kAdapterPath[]; 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kAdapterName[]; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kAdapterAddress[]; 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kSecondAdapterPath[]; 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kSecondAdapterName[]; 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static const char kSecondAdapterAddress[]; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Property callback passed when we create Properties* structures. 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void OnPropertyChanged(const std::string& property_name); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Posts the delayed task represented by |callback| onto the current 80a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // message loop to be executed after |simulation_interval_ms_| milliseconds. 81a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void PostDelayedTask(const base::Closure& callback); 82a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // List of observers interested in event notifications from us. 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ObserverList<Observer> observers_; 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Static properties we return. 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<Properties> properties_; 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<Properties> second_properties_; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether the adapter and second adapter should be visible or not. 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool visible_; 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool second_visible_; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Number of times we've been asked to discover. 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int discovering_count_; 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Current timeout interval used when posting delayed tasks. 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) int simulation_interval_ms_; 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace chromeos 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROMEOS_DBUS_FAKE_BLUETOOTH_ADAPTER_CLIENT_H_ 104