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

Side by Side Diff: chromeos/dbus/fake_bluetooth_media_client.cc

Issue 910023002: device/bluetooth:Implement BluetoothMediaEndpointServiceProvider delegate and media-related overrid… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/fake_bluetooth_media_client.h" 5 #include "chromeos/dbus/fake_bluetooth_media_client.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "chromeos/dbus/dbus_thread_manager.h"
9 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" 10 #include "chromeos/dbus/fake_bluetooth_adapter_client.h"
11 #include "chromeos/dbus/fake_bluetooth_media_transport_client.h"
10 12
11 using dbus::ObjectPath; 13 using dbus::ObjectPath;
12 14
13 namespace { 15 namespace {
14 16
15 // Except for |kFailedError|, the other error is defined in BlueZ D-Bus Media 17 // Except for |kFailedError|, the other error is defined in BlueZ D-Bus Media
16 // API. 18 // API.
17 const char kFailedError[] = "org.chromium.Error.Failed"; 19 const char kFailedError[] = "org.chromium.Error.Failed";
18 const char kInvalidArgumentsError[] = "org.chromium.Error.InvalidArguments"; 20 const char kInvalidArgumentsError[] = "org.chromium.Error.InvalidArguments";
19 21
20 } // namespace 22 } // namespace
21 23
22 namespace chromeos { 24 namespace chromeos {
23 25
24 // static 26 // static
25 const uint8_t FakeBluetoothMediaClient::kDefaultCodec = 0x00; 27 const uint8_t FakeBluetoothMediaClient::kDefaultCodec = 0x00;
26 28
27 FakeBluetoothMediaClient::FakeBluetoothMediaClient() { 29 FakeBluetoothMediaClient::FakeBluetoothMediaClient()
30 : visible_(true),
31 object_path_(ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)) {
28 } 32 }
29 33
30 FakeBluetoothMediaClient::~FakeBluetoothMediaClient() { 34 FakeBluetoothMediaClient::~FakeBluetoothMediaClient() {
31 } 35 }
32 36
33 void FakeBluetoothMediaClient::Init(dbus::Bus* bus) { 37 void FakeBluetoothMediaClient::Init(dbus::Bus* bus) {
34 } 38 }
35 39
36 void FakeBluetoothMediaClient::AddObserver( 40 void FakeBluetoothMediaClient::AddObserver(
37 BluetoothMediaClient::Observer* observer) { 41 BluetoothMediaClient::Observer* observer) {
38 DCHECK(observer); 42 DCHECK(observer);
39 observers_.AddObserver(observer); 43 observers_.AddObserver(observer);
40 } 44 }
41 45
42 void FakeBluetoothMediaClient::RemoveObserver( 46 void FakeBluetoothMediaClient::RemoveObserver(
43 BluetoothMediaClient::Observer* observer) { 47 BluetoothMediaClient::Observer* observer) {
44 DCHECK(observer); 48 DCHECK(observer);
45 observers_.RemoveObserver(observer); 49 observers_.RemoveObserver(observer);
46 } 50 }
47 51
48 void FakeBluetoothMediaClient::RegisterEndpoint( 52 void FakeBluetoothMediaClient::RegisterEndpoint(
49 const ObjectPath& object_path, 53 const ObjectPath& object_path,
50 const ObjectPath& endpoint_path, 54 const ObjectPath& endpoint_path,
51 const EndpointProperties& properties, 55 const EndpointProperties& properties,
52 const base::Closure& callback, 56 const base::Closure& callback,
53 const ErrorCallback& error_callback) { 57 const ErrorCallback& error_callback) {
54 VLOG(1) << "RegisterEndpoint: " << endpoint_path.value(); 58 if (visible_) {
59 VLOG(1) << "RegisterEndpoint: " << endpoint_path.value();
55 60
56 // The object paths of the media client and adapter client should be the same. 61 // The media client and adapter client should have the same object path.
57 if (object_path != ObjectPath(FakeBluetoothAdapterClient::kAdapterPath) || 62 if (object_path != object_path_ ||
58 properties.uuid != BluetoothMediaClient::kBluetoothAudioSinkUUID || 63 properties.uuid != BluetoothMediaClient::kBluetoothAudioSinkUUID ||
59 properties.codec != kDefaultCodec || 64 properties.codec != kDefaultCodec || properties.capabilities.empty()) {
60 properties.capabilities.empty()) { 65 error_callback.Run(kInvalidArgumentsError, "");
61 error_callback.Run(kInvalidArgumentsError, ""); 66 return;
62 return; 67 }
68
69 // Sets visible of a given endpoint path to true if it is registered.
70 SetEndpointVisible(endpoint_path, true);
71
72 callback.Run();
63 } 73 }
64 callback.Run();
65 } 74 }
66 75
67 void FakeBluetoothMediaClient::UnregisterEndpoint( 76 void FakeBluetoothMediaClient::UnregisterEndpoint(
68 const ObjectPath& object_path, 77 const ObjectPath& object_path,
69 const ObjectPath& endpoint_path, 78 const ObjectPath& endpoint_path,
70 const base::Closure& callback, 79 const base::Closure& callback,
71 const ErrorCallback& error_callback) { 80 const ErrorCallback& error_callback) {
72 // TODO(mcchou): Come up with some corresponding actions. 81 // TODO(mcchou): Come up with some corresponding actions.
73 error_callback.Run(kFailedError, ""); 82 error_callback.Run(kFailedError, "");
74 } 83 }
75 84
85 void FakeBluetoothMediaClient::SetVisible(bool visible) {
86 visible_ = visible;
87
88 // If the media object becomes invisible, a update chain will remove all pairs
armansito 2015/02/10 00:17:01 nit: s/a update/an update/
Miao 2015/02/10 22:15:21 Done.
89 // in |endpoints_| and update endpoints' visibility to the transport object.
armansito 2015/02/10 00:17:01 Maybe rephrase the second part of the sentence her
Miao 2015/02/10 22:15:21 Done.
90 // Since all endpoint objects and the associated transport object will be
91 // invalid if the media object is no longer visible.
92 if (!visible_) {
93 for (std::map<ObjectPath, bool>::iterator it = endpoints_.begin();
94 it != endpoints_.end(); ++it) {
95 SetEndpointVisible(it->first, visible_);
96 }
97 endpoints_.clear();
98
99 // Notifies observers about the change on |visible_|.
100 FOR_EACH_OBSERVER(BluetoothMediaClient::Observer, observers_,
101 MediaRemoved(object_path_));
102 }
103 }
104
105 void FakeBluetoothMediaClient::SetEndpointVisible(
106 const ObjectPath& endpoint_path,
107 bool visible) {
108 if (visible) {
109 endpoints_[endpoint_path] = visible;
110 } else {
111 // Once a media endpoint object becomes invisible, its visibility to the
112 // transport object should be false.
113 FakeBluetoothMediaTransportClient* transport =
114 static_cast<FakeBluetoothMediaTransportClient*>(
115 DBusThreadManager::Get()->GetBluetoothMediaTransportClient());
116 transport->SetVisible(endpoint_path, visible);
117 }
118 }
119
76 } // namespace chromeos 120 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698