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

Unified Diff: device/bluetooth/bluetooth_profile_chromeos.cc

Issue 276573004: Bluetooth: Implement new socket API for Chrome OS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix DCHECK nits Created 6 years, 7 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: device/bluetooth/bluetooth_profile_chromeos.cc
diff --git a/device/bluetooth/bluetooth_profile_chromeos.cc b/device/bluetooth/bluetooth_profile_chromeos.cc
deleted file mode 100644
index 878f51a863b8cb5d9f77cff3c49cc122ea7c299a..0000000000000000000000000000000000000000
--- a/device/bluetooth/bluetooth_profile_chromeos.cc
+++ /dev/null
@@ -1,330 +0,0 @@
-// Copyright 2013 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 "device/bluetooth/bluetooth_profile_chromeos.h"
-
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/logging.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/message_loop/message_loop.h"
-#include "base/strings/string_util.h"
-#include "base/task_runner_util.h"
-#include "base/threading/thread_restrictions.h"
-#include "base/threading/worker_pool.h"
-#include "chromeos/dbus/bluetooth_profile_manager_client.h"
-#include "chromeos/dbus/bluetooth_profile_service_provider.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
-#include "dbus/bus.h"
-#include "dbus/file_descriptor.h"
-#include "dbus/object_path.h"
-#include "device/bluetooth/bluetooth_adapter_chromeos.h"
-#include "device/bluetooth/bluetooth_adapter_factory.h"
-#include "device/bluetooth/bluetooth_device.h"
-#include "device/bluetooth/bluetooth_device_chromeos.h"
-#include "device/bluetooth/bluetooth_profile.h"
-#include "device/bluetooth/bluetooth_socket.h"
-#include "device/bluetooth/bluetooth_socket_chromeos.h"
-#include "device/bluetooth/bluetooth_socket_thread.h"
-#include "third_party/cros_system_api/dbus/service_constants.h"
-
-using device::BluetoothAdapter;
-using device::BluetoothAdapterFactory;
-using device::BluetoothDevice;
-using device::BluetoothProfile;
-using device::BluetoothSocket;
-
-namespace {
-
-// Check the validity of a file descriptor received from D-Bus. Must be run
-// on a thread where i/o is permitted.
-scoped_ptr<dbus::FileDescriptor> CheckValidity(
- scoped_ptr<dbus::FileDescriptor> fd) {
- base::ThreadRestrictions::AssertIOAllowed();
- fd->CheckValidity();
- return fd.Pass();
-}
-
-} // namespace
-
-
-namespace chromeos {
-
-BluetoothProfileChromeOS::BluetoothProfileChromeOS(
- scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
- scoped_refptr<device::BluetoothSocketThread> socket_thread)
- : ui_task_runner_(ui_task_runner),
- socket_thread_(socket_thread),
- weak_ptr_factory_(this) {
-}
-
-BluetoothProfileChromeOS::~BluetoothProfileChromeOS() {
- DCHECK(object_path_.value().empty());
- DCHECK(profile_.get() == NULL);
-
- if (adapter_.get()) {
- adapter_->RemoveObserver(this);
- adapter_ = NULL;
- }
-}
-
-void BluetoothProfileChromeOS::Init(
- const device::BluetoothUUID& uuid,
- const device::BluetoothProfile::Options& options,
- const ProfileCallback& callback) {
- DCHECK(object_path_.value().empty());
- DCHECK(profile_.get() == NULL);
-
- if (!uuid.IsValid()) {
- callback.Run(NULL);
- return;
- }
-
- uuid_ = uuid;
-
- options_.name = options.name;
- options_.service = uuid.canonical_value();
- options_.channel = options.channel;
- options_.psm = options.psm;
- options_.require_authentication = options.require_authentication;
- options_.require_authorization = options.require_authorization;
- options_.auto_connect = options.auto_connect;
- options_.version = options.version;
- options_.features = options.features;
-
- // The object path is relatively meaningless, but has to be unique, so we
- // use the UUID of the profile.
- std::string uuid_path;
- base::ReplaceChars(uuid.canonical_value(), ":-", "_", &uuid_path);
-
- object_path_ = dbus::ObjectPath("/org/chromium/bluetooth_profile/" +
- uuid_path);
-
- dbus::Bus* system_bus = DBusThreadManager::Get()->GetSystemBus();
- profile_.reset(BluetoothProfileServiceProvider::Create(
- system_bus, object_path_, this));
- DCHECK(profile_.get());
-
- // Now the profile object is registered we need an adapter to register it
- // with.
- BluetoothAdapterFactory::GetAdapter(
- base::Bind(&BluetoothProfileChromeOS::OnGetAdapter,
- weak_ptr_factory_.GetWeakPtr(),
- callback));
-}
-
-void BluetoothProfileChromeOS::Unregister() {
- DCHECK(!object_path_.value().empty());
- DCHECK(profile_.get());
-
- profile_.reset();
-
- VLOG(1) << object_path_.value() << ": Unregister profile";
- DBusThreadManager::Get()->GetBluetoothProfileManagerClient()->
- UnregisterProfile(
- object_path_,
- base::Bind(&BluetoothProfileChromeOS::OnUnregisterProfile,
- weak_ptr_factory_.GetWeakPtr()),
- base::Bind(&BluetoothProfileChromeOS::OnUnregisterProfileError,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void BluetoothProfileChromeOS::SetConnectionCallback(
- const ConnectionCallback& callback) {
- connection_callback_ = callback;
-}
-
-void BluetoothProfileChromeOS::AdapterPresentChanged(BluetoothAdapter* adapter,
- bool present) {
- if (!present)
- return;
-
- VLOG(1) << object_path_.value() << ": Register profile";
- DBusThreadManager::Get()->GetBluetoothProfileManagerClient()->
- RegisterProfile(
- object_path_,
- uuid_.canonical_value(),
- options_,
- base::Bind(&BluetoothProfileChromeOS::OnInternalRegisterProfile,
- weak_ptr_factory_.GetWeakPtr()),
- base::Bind(&BluetoothProfileChromeOS::OnInternalRegisterProfileError,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void BluetoothProfileChromeOS::OnGetAdapter(
- const ProfileCallback& callback,
- scoped_refptr<device::BluetoothAdapter> adapter) {
- DCHECK(!adapter_.get());
- adapter_ = adapter;
- adapter_->AddObserver(this);
-
- VLOG(1) << object_path_.value() << ": Register profile";
- DBusThreadManager::Get()->GetBluetoothProfileManagerClient()->
- RegisterProfile(
- object_path_,
- uuid_.canonical_value(),
- options_,
- base::Bind(&BluetoothProfileChromeOS::OnRegisterProfile,
- weak_ptr_factory_.GetWeakPtr(),
- callback),
- base::Bind(&BluetoothProfileChromeOS::OnRegisterProfileError,
- weak_ptr_factory_.GetWeakPtr(),
- callback));
-}
-
-void BluetoothProfileChromeOS::Released() {
- VLOG(1) << object_path_.value() << ": Release";
-}
-
-void BluetoothProfileChromeOS::NewConnection(
- const dbus::ObjectPath& device_path,
- scoped_ptr<dbus::FileDescriptor> fd,
- const BluetoothProfileServiceProvider::Delegate::Options& options,
- const ConfirmationCallback& callback) {
- VLOG(1) << object_path_.value() << ": New connection from device: "
- << device_path.value();
- if (connection_callback_.is_null()) {
- callback.Run(REJECTED);
- return;
- }
-
- // Punt descriptor validity check to a worker thread where i/o is permitted;
- // on return we'll call the connection callback.
- //
- // base::Passed is used to take ownership of the file descriptor during the
- // CheckValidity() call and pass that ownership to callback.
- base::PostTaskAndReplyWithResult(
- base::WorkerPool::GetTaskRunner(false).get(),
- FROM_HERE,
- base::Bind(&CheckValidity, base::Passed(&fd)),
- base::Bind(&BluetoothProfileChromeOS::OnCheckValidity,
- weak_ptr_factory_.GetWeakPtr(),
- device_path,
- options,
- callback));
-}
-
-void BluetoothProfileChromeOS::RequestDisconnection(
- const dbus::ObjectPath& device_path,
- const ConfirmationCallback& callback) {
- VLOG(1) << object_path_.value() << ": Request disconnection";
- callback.Run(SUCCESS);
-}
-
-void BluetoothProfileChromeOS::Cancel() {
- VLOG(1) << object_path_.value() << ": Cancel";
-}
-
-void BluetoothProfileChromeOS::OnInternalRegisterProfile() {
- VLOG(1) << object_path_.value() << ": Profile registered";
-}
-
-void BluetoothProfileChromeOS::OnInternalRegisterProfileError(
- const std::string& error_name,
- const std::string& error_message) {
- // It's okay if the profile already exists, it means we registered it on
- // initialization.
- if (error_name == bluetooth_profile_manager::kErrorAlreadyExists)
- return;
-
- LOG(WARNING) << object_path_.value() << ": Failed to register profile: "
- << error_name << ": " << error_message;
-}
-
-void BluetoothProfileChromeOS::OnRegisterProfile(
- const ProfileCallback& callback) {
- VLOG(1) << object_path_.value() << ": Profile registered";
- callback.Run(this);
-}
-
-void BluetoothProfileChromeOS::OnRegisterProfileError(
- const ProfileCallback& callback,
- const std::string& error_name,
- const std::string& error_message) {
- // It's okay if the profile already exists, it means we registered it when
- // we first saw the adapter.
- if (error_name == bluetooth_profile_manager::kErrorAlreadyExists)
- return;
-
- LOG(WARNING) << object_path_.value() << ": Failed to register profile: "
- << error_name << ": " << error_message;
- callback.Run(NULL);
-}
-
-void BluetoothProfileChromeOS::OnUnregisterProfile() {
- VLOG(1) << object_path_.value() << ": Profile unregistered";
- object_path_ = dbus::ObjectPath("");
- delete this;
-}
-
-void BluetoothProfileChromeOS::OnUnregisterProfileError(
- const std::string& error_name,
- const std::string& error_message) {
- // It's okay if the profile didn't exist, it means we never saw an adapter.
- if (error_name == bluetooth_profile_manager::kErrorDoesNotExist)
- return;
-
- LOG(WARNING) << object_path_.value() << ": Failed to unregister profile: "
- << error_name << ": " << error_message;
- object_path_ = dbus::ObjectPath("");
- delete this;
-}
-
-void BluetoothProfileChromeOS::OnCheckValidity(
- const dbus::ObjectPath& device_path,
- const BluetoothProfileServiceProvider::Delegate::Options& options,
- const ConfirmationCallback& callback,
- scoped_ptr<dbus::FileDescriptor> fd) {
- VLOG(1) << object_path_.value() << ": Validity check complete";
- if (!fd->is_valid()) {
- callback.Run(REJECTED);
- return;
- }
-
- scoped_refptr<BluetoothSocketChromeOS> socket =
- BluetoothSocketChromeOS::CreateBluetoothSocket(
- ui_task_runner_,
- socket_thread_,
- NULL,
- net::NetLog::Source());
- socket->Connect(fd.Pass(),
- base::Bind(&BluetoothProfileChromeOS::OnConnect,
- weak_ptr_factory_.GetWeakPtr(),
- device_path,
- socket,
- callback),
- base::Bind(&BluetoothProfileChromeOS::OnConnectError,
- weak_ptr_factory_.GetWeakPtr(),
- callback));
-}
-
-void BluetoothProfileChromeOS::OnConnect(
- const dbus::ObjectPath& device_path,
- scoped_refptr<BluetoothSocketChromeOS> socket,
- const ConfirmationCallback& callback) {
- VLOG(1) << object_path_.value() << ": Profile connection complete";
-
- BluetoothDeviceChromeOS* device =
- static_cast<BluetoothAdapterChromeOS*>(adapter_.get())->
- GetDeviceWithPath(device_path);
- DCHECK(device);
-
- connection_callback_.Run(device, socket);
- callback.Run(SUCCESS);
-}
-
-void BluetoothProfileChromeOS::OnConnectError(
- const ConfirmationCallback& callback,
- const std::string& error_message) {
- VLOG(1) << object_path_.value() << ": Profile connection failed: "
- << error_message;
-
- callback.Run(REJECTED);
-}
-
-} // namespace chromeos
« no previous file with comments | « device/bluetooth/bluetooth_profile_chromeos.h ('k') | device/bluetooth/bluetooth_profile_chromeos_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698