Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6929)

Unified Diff: chromeos/dbus/fake_bluetooth_media_client.cc

Issue 939753004: device/bluetooth: Implement Unregister() of BlueotoothAudioSinkChromeOS and disconnection-related c… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved kInvalidVolume to BluetoothAudioSink. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chromeos/dbus/fake_bluetooth_media_client.cc
diff --git a/chromeos/dbus/fake_bluetooth_media_client.cc b/chromeos/dbus/fake_bluetooth_media_client.cc
index 58c4fdffca7216a319e3292fc49e4f457677123e..4c8f7fdfd38168246236c8c7bae5d02ea692017d 100644
--- a/chromeos/dbus/fake_bluetooth_media_client.cc
+++ b/chromeos/dbus/fake_bluetooth_media_client.cc
@@ -6,8 +6,10 @@
#include <string>
+#include "base/stl_util.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_bluetooth_adapter_client.h"
+#include "chromeos/dbus/fake_bluetooth_media_endpoint_service_provider.h"
#include "chromeos/dbus/fake_bluetooth_media_transport_client.h"
using dbus::ObjectPath;
@@ -68,9 +70,6 @@ void FakeBluetoothMediaClient::RegisterEndpoint(
return;
}
- // Sets the state of a given endpoint path to true if it is registered.
- SetEndpointRegistered(endpoint_path, true);
-
callback.Run();
}
@@ -80,7 +79,15 @@ void FakeBluetoothMediaClient::UnregisterEndpoint(
const base::Closure& callback,
const ErrorCallback& error_callback) {
// TODO(mcchou): Come up with some corresponding actions.
- error_callback.Run(kFailedError, "");
+ VLOG(1) << "UnregisterEndpoint: " << endpoint_path.value();
+
+ if (!ContainsKey(endpoints_, endpoint_path)) {
+ error_callback.Run(kFailedError, "Unknown media endpoint");
+ return;
+ }
+
+ SetEndpointRegistered(endpoints_[endpoint_path], false);
+ callback.Run();
}
void FakeBluetoothMediaClient::SetVisible(bool visible) {
@@ -89,14 +96,11 @@ void FakeBluetoothMediaClient::SetVisible(bool visible) {
if (visible_)
return;
- // If the media object becomes invisible, an update chain will
- // unregister all endpoints and set the associated transport
- // objects to be invalid.
- for (std::map<ObjectPath, bool>::iterator it = endpoints_.begin();
- it != endpoints_.end(); ++it) {
- SetEndpointRegistered(it->first, false);
- }
- endpoints_.clear();
+ // If the media object becomes invisible, an update chain will unregister all
+ // endpoints and set the associated transport objects to be invalid.
+ // SetEndpointRegistered will remove the endpoint entry from |endpoints_|.
+ while (endpoints_.begin() != endpoints_.end())
+ SetEndpointRegistered(endpoints_.begin()->second, false);
// Notifies observers about the change on |visible_|.
FOR_EACH_OBSERVER(BluetoothMediaClient::Observer, observers_,
@@ -104,18 +108,30 @@ void FakeBluetoothMediaClient::SetVisible(bool visible) {
}
void FakeBluetoothMediaClient::SetEndpointRegistered(
- const ObjectPath& endpoint_path,
+ FakeBluetoothMediaEndpointServiceProvider* endpoint,
bool registered) {
if (registered) {
- endpoints_[endpoint_path] = registered;
- } else {
- // Once a media endpoint object becomes invalid, the associated transport
- // becomes invalid.
- FakeBluetoothMediaTransportClient* transport =
- static_cast<FakeBluetoothMediaTransportClient*>(
- DBusThreadManager::Get()->GetBluetoothMediaTransportClient());
- transport->SetValid(endpoint_path, true);
+ endpoints_[endpoint->object_path()] = endpoint;
+ return;
}
+
+ if (!IsRegistered(endpoint->object_path()))
+ return;
+
+ // Once a media endpoint object becomes invalid, invalidate the associated
+ // transport.
+ FakeBluetoothMediaTransportClient* transport =
+ static_cast<FakeBluetoothMediaTransportClient*>(
+ DBusThreadManager::Get()->GetBluetoothMediaTransportClient());
+ transport->SetValid(endpoint, false);
+
+ endpoints_.erase(endpoint->object_path());
+ endpoint->Released();
+}
+
+bool FakeBluetoothMediaClient::IsRegistered(
+ const dbus::ObjectPath& endpoint_path) {
+ return ContainsKey(endpoints_, endpoint_path);
}
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698