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