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_PROFILE_MANAGER_CLIENT_H_
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROMEOS_DBUS_FAKE_BLUETOOTH_PROFILE_MANAGER_CLIENT_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include <map>
9b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include <string>
10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/observer_list.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_export.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chromeos/dbus/bluetooth_profile_manager_client.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/object_path.h"
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "dbus/property.h"
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace chromeos {
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class FakeBluetoothProfileServiceProvider;
22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// FakeBluetoothProfileManagerClient simulates the behavior of the Bluetooth
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Daemon's profile manager object and is used both in test cases in place of a
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// mock and on the Linux desktop.
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class CHROMEOS_EXPORT FakeBluetoothProfileManagerClient
277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : public BluetoothProfileManagerClient {
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FakeBluetoothProfileManagerClient();
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual ~FakeBluetoothProfileManagerClient();
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  // BluetoothProfileManagerClient overrides
33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void Init(dbus::Bus* bus) OVERRIDE;
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void RegisterProfile(const dbus::ObjectPath& profile_path,
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const std::string& uuid,
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const Options& options,
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const base::Closure& callback,
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               const ErrorCallback& error_callback) OVERRIDE;
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void UnregisterProfile(const dbus::ObjectPath& profile_path,
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                 const base::Closure& callback,
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                 const ErrorCallback& error_callback) OVERRIDE;
42b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
43b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Register, unregister and retrieve pointers to profile server providers.
44b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void RegisterProfileServiceProvider(
45b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      FakeBluetoothProfileServiceProvider* service_provider);
46b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  void UnregisterProfileServiceProvider(
47b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      FakeBluetoothProfileServiceProvider* service_provider);
48b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  FakeBluetoothProfileServiceProvider* GetProfileServiceProvider(
49b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const std::string& uuid);
50b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // UUIDs recognised for testing.
52b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  static const char kL2capUuid[];
53b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  static const char kRfcommUuid[];
54b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
55b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) private:
56b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Map of a D-Bus object path to the FakeBluetoothProfileServiceProvider
57b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // registered for it; maintained by RegisterProfileServiceProvider() and
58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // UnregisterProfileServiceProvicer() called by the constructor and
59b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // destructor of FakeBluetoothProfileServiceProvider.
60b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  typedef std::map<dbus::ObjectPath, FakeBluetoothProfileServiceProvider*>
61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      ServiceProviderMap;
62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  ServiceProviderMap service_provider_map_;
63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)
64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // Map of Profile UUID to the D-Bus object path of the service provider
65b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // in |service_provider_map_|. Maintained by RegisterProfile() and
66b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // UnregisterProfile() in response to BluetoothProfile methods.
67b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  typedef std::map<std::string, dbus::ObjectPath> ProfileMap;
68b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  ProfileMap profile_map_;
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace chromeos
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif  // CHROMEOS_DBUS_FAKE_BLUETOOTH_PROFILE_MANAGER_CLIENT_H_
74