Index: chromeos/dbus/fake_bluetooth_le_advertising_manager_client.cc |
diff --git a/chromeos/dbus/fake_bluetooth_le_advertising_manager_client.cc b/chromeos/dbus/fake_bluetooth_le_advertising_manager_client.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..44b4964b9157ed208381f78db96d72967ca977bb |
--- /dev/null |
+++ b/chromeos/dbus/fake_bluetooth_le_advertising_manager_client.cc |
@@ -0,0 +1,97 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/logging.h" |
+#include "base/message_loop/message_loop.h" |
+#include "dbus/bus.h" |
+#include "dbus/message.h" |
+#include "dbus/object_proxy.h" |
+#include "fake_bluetooth_le_advertisement_service_provider.h" |
+#include "fake_bluetooth_le_advertising_manager_client.h" |
+#include "third_party/cros_system_api/dbus/service_constants.h" |
+ |
+namespace chromeos { |
+ |
+const char FakeBluetoothLEAdvertisingManagerClient::kAdvertisingManagerPath[] = |
+ "/fake/hci0"; |
armansito
2015/04/15 23:56:49
You could make these fake smarter in the future an
rkc
2015/04/16 18:13:05
This fake logic is actually good reference to me a
|
+ |
+FakeBluetoothLEAdvertisingManagerClient:: |
+ FakeBluetoothLEAdvertisingManagerClient() { |
+} |
+ |
+FakeBluetoothLEAdvertisingManagerClient:: |
+ ~FakeBluetoothLEAdvertisingManagerClient() { |
+} |
+ |
+void FakeBluetoothLEAdvertisingManagerClient::RegisterAdvertisement( |
+ const dbus::ObjectPath& manager_object_path, |
+ const dbus::ObjectPath& advertisement_object_path, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback) { |
+ VLOG(1) << "RegisterAdvertisment: " << advertisement_object_path.value(); |
+ |
+ if (manager_object_path != dbus::ObjectPath(kAdvertisingManagerPath)) { |
+ error_callback.Run(kNoResponseError, "Invalid Advertising Manager path."); |
+ return; |
+ } |
+ |
+ ServiceProviderMap::iterator iter = |
+ service_provider_map_.find(advertisement_object_path); |
+ if (iter == service_provider_map_.end()) { |
+ error_callback.Run(bluetooth_advertising_manager::kErrorInvalidArguments, |
+ "Advertisement object not registered"); |
+ } else if (!currently_registered_.value().empty()) { |
+ error_callback.Run(bluetooth_advertising_manager::kErrorFailed, |
+ "Maximum advertisements reached"); |
+ } else if (advertisement_object_path != currently_registered_) { |
+ error_callback.Run(bluetooth_advertising_manager::kErrorAlreadyExists, |
+ "Already advertising."); |
+ } else { |
+ currently_registered_ = advertisement_object_path; |
+ base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
+ } |
+} |
+ |
+void FakeBluetoothLEAdvertisingManagerClient::UnregisterAdvertisement( |
+ const dbus::ObjectPath& manager_object_path, |
+ const dbus::ObjectPath& advertisement_object_path, |
+ const base::Closure& callback, |
+ const ErrorCallback& error_callback) { |
+ VLOG(1) << "UnregisterAdvertisment: " << advertisement_object_path.value(); |
+ |
+ if (manager_object_path != dbus::ObjectPath(kAdvertisingManagerPath)) { |
+ error_callback.Run(kNoResponseError, "Invalid Advertising Manager path."); |
+ return; |
+ } |
+ |
+ ServiceProviderMap::iterator iter = |
+ service_provider_map_.find(advertisement_object_path); |
+ if (iter == service_provider_map_.end()) { |
+ error_callback.Run(bluetooth_advertising_manager::kErrorDoesNotExist, |
+ "Advertisement not registered"); |
+ } else if (advertisement_object_path != currently_registered_) { |
+ error_callback.Run(bluetooth_advertising_manager::kErrorDoesNotExist, |
+ "Does not exist"); |
+ } else { |
+ currently_registered_ = dbus::ObjectPath(""); |
+ base::MessageLoop::current()->PostTask(FROM_HERE, callback); |
+ } |
+} |
+ |
+void FakeBluetoothLEAdvertisingManagerClient:: |
+ RegisterAdvertisementServiceProvider( |
+ FakeBluetoothLEAdvertisementServiceProvider* service_provider) { |
+ service_provider_map_[service_provider->object_path_] = service_provider; |
+} |
+ |
+void FakeBluetoothLEAdvertisingManagerClient:: |
+ UnregisterAdvertisementServiceProvider( |
+ FakeBluetoothLEAdvertisementServiceProvider* service_provider) { |
+ ServiceProviderMap::iterator iter = |
+ service_provider_map_.find(service_provider->object_path_); |
+ if (iter != service_provider_map_.end() && iter->second == service_provider) |
+ service_provider_map_.erase(iter); |
+} |
+ |
+} // namespace chromeos |