Index: chromeos/dbus/fake_bluetooth_media_transport_client.cc |
diff --git a/chromeos/dbus/fake_bluetooth_media_transport_client.cc b/chromeos/dbus/fake_bluetooth_media_transport_client.cc |
deleted file mode 100644 |
index 441a66bca4af4148620ddfe03bb4d02b018829b4..0000000000000000000000000000000000000000 |
--- a/chromeos/dbus/fake_bluetooth_media_transport_client.cc |
+++ /dev/null |
@@ -1,326 +0,0 @@ |
-// Copyright 2014 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 "chromeos/dbus/fake_bluetooth_media_transport_client.h" |
- |
-#include <unistd.h> |
-#include <sys/socket.h> |
- |
-#include <sstream> |
- |
-#include "base/bind.h" |
-#include "base/stl_util.h" |
-#include "chromeos/dbus/bluetooth_media_client.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "chromeos/dbus/fake_bluetooth_adapter_client.h" |
-#include "chromeos/dbus/fake_bluetooth_media_client.h" |
-#include "chromeos/dbus/fake_bluetooth_media_endpoint_service_provider.h" |
-#include "dbus/file_descriptor.h" |
- |
-using dbus::ObjectPath; |
- |
-namespace { |
- |
-// TODO(mcchou): Remove this constants once it is in cros_system_api. |
-const char kBluetoothMediaTransportInterface[] = "org.bluez.MediaTransport1"; |
-const char kNotImplemented[] = "org.bluez.NotImplemented"; |
-const char kNotAuthorized[] = "org.bluez.NotAuthorized"; |
-const char kFailed[] = "org.bluez.Failed"; |
-const char kNotAvailable[] = "org.bluez.NotAvailable"; |
- |
-const int kInvalidFd = -1; |
- |
-ObjectPath GenerateTransportPath() { |
- static unsigned int sequence_number = 0; |
- ++sequence_number; |
- std::stringstream path; |
- path << chromeos::FakeBluetoothAdapterClient::kAdapterPath |
- << chromeos::FakeBluetoothMediaTransportClient::kTransportDevicePath |
- << "/fd" << sequence_number; |
- return ObjectPath(path.str()); |
-} |
- |
-} // namespace |
- |
-namespace chromeos { |
- |
-// static |
-const char FakeBluetoothMediaTransportClient::kTransportDevicePath[] = |
- "/fake_audio_source"; |
-const uint8_t FakeBluetoothMediaTransportClient::kTransportCodec = 0x00; |
-const std::vector<uint8_t> |
- FakeBluetoothMediaTransportClient::kTransportConfiguration = { |
- 0x21, 0x15, 0x33, 0x2C}; |
-const uint16_t FakeBluetoothMediaTransportClient::kTransportDelay = 5; |
-const uint16_t FakeBluetoothMediaTransportClient::kTransportVolume = 50; |
-const uint16_t FakeBluetoothMediaTransportClient::kDefaultReadMtu = 20; |
-const uint16_t FakeBluetoothMediaTransportClient::kDefaultWriteMtu = 25; |
- |
-FakeBluetoothMediaTransportClient::Properties::Properties( |
- const PropertyChangedCallback& callback) |
- : BluetoothMediaTransportClient::Properties( |
- nullptr, |
- kBluetoothMediaTransportInterface, |
- callback) { |
-} |
- |
-FakeBluetoothMediaTransportClient::Properties::~Properties() { |
-} |
- |
-void FakeBluetoothMediaTransportClient::Properties::Get( |
- dbus::PropertyBase* property, |
- dbus::PropertySet::GetCallback callback) { |
- VLOG(1) << "Get " << property->name(); |
- callback.Run(false); |
-} |
- |
-void FakeBluetoothMediaTransportClient::Properties::GetAll() { |
- VLOG(1) << "GetAll called."; |
-} |
- |
-void FakeBluetoothMediaTransportClient::Properties::Set( |
- dbus::PropertyBase* property, |
- dbus::PropertySet::SetCallback callback) { |
- VLOG(1) << "Set " << property->name(); |
- callback.Run(false); |
-} |
- |
-FakeBluetoothMediaTransportClient::Transport::Transport( |
- const ObjectPath& transport_path, |
- Properties* transport_properties) |
- : path(transport_path) { |
- properties.reset(transport_properties); |
-} |
- |
-FakeBluetoothMediaTransportClient::Transport::~Transport() { |
-} |
- |
-FakeBluetoothMediaTransportClient::FakeBluetoothMediaTransportClient() { |
-} |
- |
-FakeBluetoothMediaTransportClient::~FakeBluetoothMediaTransportClient() { |
- STLDeleteValues(&endpoint_to_transport_map_); |
-} |
- |
-// DBusClient override. |
-void FakeBluetoothMediaTransportClient::Init(dbus::Bus* bus) { |
-} |
- |
-void FakeBluetoothMediaTransportClient::AddObserver( |
- BluetoothMediaTransportClient::Observer* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void FakeBluetoothMediaTransportClient::RemoveObserver( |
- BluetoothMediaTransportClient::Observer* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-FakeBluetoothMediaTransportClient::Properties* |
-FakeBluetoothMediaTransportClient::GetProperties( |
- const ObjectPath& object_path) { |
- const ObjectPath& endpoint_path = GetEndpointPath(object_path); |
- Transport* transport = GetTransport(endpoint_path); |
- if (!transport) |
- return nullptr; |
- return transport->properties.get(); |
-} |
- |
-void FakeBluetoothMediaTransportClient::Acquire( |
- const ObjectPath& object_path, |
- const AcquireCallback& callback, |
- const ErrorCallback& error_callback) { |
- VLOG(1) << "Acquire - transport path: " << object_path.value(); |
- AcquireInternal(false, object_path, callback, error_callback); |
-} |
- |
-void FakeBluetoothMediaTransportClient::TryAcquire( |
- const ObjectPath& object_path, |
- const AcquireCallback& callback, |
- const ErrorCallback& error_callback) { |
- VLOG(1) << "TryAcquire - transport path: " << object_path.value(); |
- AcquireInternal(true, object_path, callback, error_callback); |
-} |
- |
-void FakeBluetoothMediaTransportClient::Release( |
- const ObjectPath& object_path, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback) { |
- error_callback.Run(kNotImplemented, ""); |
-} |
- |
-void FakeBluetoothMediaTransportClient::SetValid( |
- FakeBluetoothMediaEndpointServiceProvider* endpoint, |
- bool valid) { |
- FakeBluetoothMediaClient* media = static_cast<FakeBluetoothMediaClient*>( |
- DBusThreadManager::Get()->GetBluetoothMediaClient()); |
- DCHECK(media); |
- |
- ObjectPath endpoint_path(endpoint->object_path()); |
- if (!media->IsRegistered(endpoint_path)) |
- return; |
- |
- if (valid) { |
- ObjectPath transport_path = GenerateTransportPath(); |
- VLOG(1) << "New transport, " << transport_path.value() |
- << " is created for endpoint " << endpoint_path.value(); |
- |
- // Sets the fake property set with default values. |
- scoped_ptr<Properties> properties(new Properties( |
- base::Bind(&FakeBluetoothMediaTransportClient::OnPropertyChanged, |
- base::Unretained(this)))); |
- properties->device.ReplaceValue(ObjectPath(kTransportDevicePath)); |
- properties->uuid.ReplaceValue( |
- BluetoothMediaClient::kBluetoothAudioSinkUUID); |
- properties->codec.ReplaceValue(kTransportCodec); |
- properties->configuration.ReplaceValue(kTransportConfiguration); |
- properties->state.ReplaceValue(BluetoothMediaTransportClient::kStateIdle); |
- properties->delay.ReplaceValue(kTransportDelay); |
- properties->volume.ReplaceValue(kTransportVolume); |
- |
- endpoint_to_transport_map_[endpoint_path] = |
- new Transport(transport_path, properties.release()); |
- transport_to_endpoint_map_[transport_path] = endpoint_path; |
- return; |
- } |
- |
- Transport* transport = GetTransport(endpoint_path); |
- if (!transport) |
- return; |
- ObjectPath transport_path = transport->path; |
- |
- // Notifies observers about the state change of the transport. |
- FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, |
- MediaTransportRemoved(transport_path)); |
- |
- endpoint->ClearConfiguration(transport_path); |
- delete transport; |
- endpoint_to_transport_map_.erase(endpoint_path); |
- transport_to_endpoint_map_.erase(transport_path); |
-} |
- |
-void FakeBluetoothMediaTransportClient::SetState( |
- const ObjectPath& endpoint_path, |
- const std::string& state) { |
- VLOG(1) << "SetState - state: " << state; |
- |
- Transport* transport = GetTransport(endpoint_path); |
- if (!transport) |
- return; |
- |
- transport->properties->state.ReplaceValue(state); |
- FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, |
- MediaTransportPropertyChanged( |
- transport->path, |
- BluetoothMediaTransportClient::kStateProperty)); |
-} |
- |
-void FakeBluetoothMediaTransportClient::SetVolume( |
- const ObjectPath& endpoint_path, |
- const uint16_t& volume) { |
- Transport* transport = GetTransport(endpoint_path); |
- if (!transport) |
- return; |
- |
- transport->properties->volume.ReplaceValue(volume); |
- FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, |
- MediaTransportPropertyChanged( |
- transport->path, |
- BluetoothMediaTransportClient::kVolumeProperty)); |
-} |
- |
-void FakeBluetoothMediaTransportClient::WriteData( |
- const ObjectPath& endpoint_path, const std::vector<char>& bytes) { |
- VLOG(1) << "WriteData - write " << bytes.size() << " bytes"; |
- |
- Transport* transport = GetTransport(endpoint_path); |
- |
- if (!transport || transport->properties->state.value() != "active") { |
- VLOG(1) << "WriteData - write operation rejected, since the state isn't " |
- "active for endpoint: " << endpoint_path.value(); |
- return; |
- } |
- |
- if (!transport->input_fd.get()) { |
- VLOG(1) << "WriteData - invalid input file descriptor"; |
- return; |
- } |
- |
- ssize_t written_len = |
- write(transport->input_fd->GetPlatformFile(), bytes.data(), bytes.size()); |
- if (written_len < 0) { |
- VLOG(1) << "WriteData - failed to write to the socket"; |
- return; |
- } |
- |
- VLOG(1) << "WriteData - wrote " << written_len << " bytes to the socket"; |
-} |
- |
-ObjectPath FakeBluetoothMediaTransportClient::GetTransportPath( |
- const ObjectPath& endpoint_path) { |
- Transport* transport = GetTransport(endpoint_path); |
- return transport ? transport->path : ObjectPath(""); |
-} |
- |
-void FakeBluetoothMediaTransportClient::OnPropertyChanged( |
- const std::string& property_name) { |
- VLOG(1) << "Property " << property_name << " changed"; |
-} |
- |
-ObjectPath FakeBluetoothMediaTransportClient::GetEndpointPath( |
- const ObjectPath& transport_path) { |
- const auto& it = transport_to_endpoint_map_.find(transport_path); |
- return it != transport_to_endpoint_map_.end() ? it->second : ObjectPath(""); |
-} |
- |
-FakeBluetoothMediaTransportClient::Transport* |
-FakeBluetoothMediaTransportClient::GetTransport( |
- const ObjectPath& endpoint_path) { |
- const auto& it = endpoint_to_transport_map_.find(endpoint_path); |
- return (it != endpoint_to_transport_map_.end()) ? it->second : nullptr; |
-} |
- |
-FakeBluetoothMediaTransportClient::Transport* |
-FakeBluetoothMediaTransportClient::GetTransportByPath( |
- const dbus::ObjectPath& transport_path) { |
- return GetTransport(GetEndpointPath(transport_path)); |
-} |
- |
-void FakeBluetoothMediaTransportClient::AcquireInternal( |
- bool try_flag, |
- const ObjectPath& object_path, |
- const AcquireCallback& callback, |
- const ErrorCallback& error_callback) { |
- const ObjectPath& endpoint_path = GetEndpointPath(object_path); |
- Transport* transport = GetTransport(endpoint_path); |
- if (!transport) { |
- error_callback.Run(kFailed, ""); |
- return; |
- } |
- |
- std::string state = transport->properties->state.value(); |
- if (state == "active") { |
- error_callback.Run(kNotAuthorized, ""); |
- return; |
- } |
- if (state != "pending") { |
- error_callback.Run(try_flag ? kNotAvailable : kFailed, ""); |
- return; |
- } |
- |
- int fds[2]; |
- if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) { |
- transport->input_fd.reset(); |
- error_callback.Run(kFailed, ""); |
- return; |
- } |
- DCHECK((fds[0] > kInvalidFd) && (fds[1] > kInvalidFd)); |
- transport->input_fd.reset(new base::File(fds[0])); |
- |
- dbus::FileDescriptor out_fd(fds[1]); |
- callback.Run(&out_fd, kDefaultReadMtu, kDefaultWriteMtu); |
- SetState(endpoint_path, "active"); |
-} |
- |
-} // namespace chromeos |