• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "chromeos/dbus/fake_bluetooth_profile_manager_client.h"
6 
7 #include <map>
8 #include <string>
9 
10 #include "base/bind.h"
11 #include "base/logging.h"
12 #include "chromeos/dbus/fake_bluetooth_profile_service_provider.h"
13 #include "dbus/bus.h"
14 #include "dbus/message.h"
15 #include "dbus/object_path.h"
16 #include "dbus/object_proxy.h"
17 #include "third_party/cros_system_api/dbus/service_constants.h"
18 
19 namespace chromeos {
20 
21 const char FakeBluetoothProfileManagerClient::kL2capUuid[] =
22     "4d995052-33cc-4fdf-b446-75f32942a076";
23 const char FakeBluetoothProfileManagerClient::kRfcommUuid[] =
24     "3f6d6dbf-a6ad-45fc-9653-47dc912ef70e";
25 
FakeBluetoothProfileManagerClient()26 FakeBluetoothProfileManagerClient::FakeBluetoothProfileManagerClient() {
27 }
28 
~FakeBluetoothProfileManagerClient()29 FakeBluetoothProfileManagerClient::~FakeBluetoothProfileManagerClient() {
30 }
31 
Init(dbus::Bus * bus)32 void FakeBluetoothProfileManagerClient::Init(dbus::Bus* bus) {
33 }
34 
RegisterProfile(const dbus::ObjectPath & profile_path,const std::string & uuid,const Options & options,const base::Closure & callback,const ErrorCallback & error_callback)35 void FakeBluetoothProfileManagerClient::RegisterProfile(
36     const dbus::ObjectPath& profile_path,
37     const std::string& uuid,
38     const Options& options,
39     const base::Closure& callback,
40     const ErrorCallback& error_callback) {
41   VLOG(1) << "RegisterProfile: " << profile_path.value() << ": " << uuid;
42 
43   // check options for channel & psm
44 
45   ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path);
46   if (iter == service_provider_map_.end()) {
47     error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments,
48                        "No profile created");
49   } else {
50     ProfileMap::iterator piter = profile_map_.find(uuid);
51     if (piter != profile_map_.end()) {
52       error_callback.Run(bluetooth_profile_manager::kErrorAlreadyExists,
53                          "Profile already registered");
54     } else {
55       profile_map_[uuid] = profile_path;
56       callback.Run();
57     }
58   }
59 }
60 
UnregisterProfile(const dbus::ObjectPath & profile_path,const base::Closure & callback,const ErrorCallback & error_callback)61 void FakeBluetoothProfileManagerClient::UnregisterProfile(
62     const dbus::ObjectPath& profile_path,
63     const base::Closure& callback,
64     const ErrorCallback& error_callback) {
65   VLOG(1) << "UnregisterProfile: " << profile_path.value();
66 
67   ServiceProviderMap::iterator iter = service_provider_map_.find(profile_path);
68   if (iter != service_provider_map_.end()) {
69     error_callback.Run(bluetooth_profile_manager::kErrorInvalidArguments,
70                        "Profile still registered");
71   } else {
72     for (ProfileMap::iterator piter = profile_map_.begin();
73          piter != profile_map_.end(); ++piter) {
74       if (piter->second == profile_path) {
75         profile_map_.erase(piter);
76         break;
77       }
78     }
79 
80     callback.Run();
81   }
82 }
83 
RegisterProfileServiceProvider(FakeBluetoothProfileServiceProvider * service_provider)84 void FakeBluetoothProfileManagerClient::RegisterProfileServiceProvider(
85     FakeBluetoothProfileServiceProvider* service_provider) {
86   service_provider_map_[service_provider->object_path_] = service_provider;
87 }
88 
UnregisterProfileServiceProvider(FakeBluetoothProfileServiceProvider * service_provider)89 void FakeBluetoothProfileManagerClient::UnregisterProfileServiceProvider(
90     FakeBluetoothProfileServiceProvider* service_provider) {
91   ServiceProviderMap::iterator iter =
92       service_provider_map_.find(service_provider->object_path_);
93   if (iter != service_provider_map_.end() && iter->second == service_provider)
94     service_provider_map_.erase(iter);
95 }
96 
97 FakeBluetoothProfileServiceProvider*
GetProfileServiceProvider(const std::string & uuid)98 FakeBluetoothProfileManagerClient::GetProfileServiceProvider(
99     const std::string& uuid) {
100   ProfileMap::iterator iter = profile_map_.find(uuid);
101   if (iter == profile_map_.end())
102     return NULL;
103   return service_provider_map_[iter->second];
104 }
105 
106 }  // namespace chromeos
107