| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/bluetooth/bluetooth_manager.h" | 5 #include "chrome/browser/chromeos/bluetooth/bluetooth_manager.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/observer_list.h" | 9 #include "base/observer_list.h" |
| 10 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" | 10 #include "chrome/browser/chromeos/bluetooth/bluetooth_adapter.h" |
| 11 #include "chrome/browser/chromeos/dbus/bluetooth_manager_client.h" | 11 #include "chrome/browser/chromeos/dbus/bluetooth_manager_client.h" |
| 12 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" | 12 #include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" |
| 13 #include "dbus/object_path.h" | |
| 14 | 13 |
| 15 namespace chromeos { | 14 namespace chromeos { |
| 16 | 15 |
| 17 static BluetoothManager* g_bluetooth_manager = NULL; | 16 static BluetoothManager* g_bluetooth_manager = NULL; |
| 18 | 17 |
| 19 class BluetoothManagerImpl : public BluetoothManager, | 18 class BluetoothManagerImpl : public BluetoothManager, |
| 20 public BluetoothManagerClient::Observer { | 19 public BluetoothManagerClient::Observer { |
| 21 public: | 20 public: |
| 22 BluetoothManagerImpl() : weak_ptr_factory_(this) { | 21 BluetoothManagerImpl() : weak_ptr_factory_(this) { |
| 23 DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get(); | 22 DBusThreadManager* dbus_thread_manager = DBusThreadManager::Get(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 44 DCHECK(observer); | 43 DCHECK(observer); |
| 45 observers_.RemoveObserver(observer); | 44 observers_.RemoveObserver(observer); |
| 46 } | 45 } |
| 47 | 46 |
| 48 virtual BluetoothAdapter* DefaultAdapter() { | 47 virtual BluetoothAdapter* DefaultAdapter() { |
| 49 VLOG(1) << "BluetoothManager::DefaultAdapter"; | 48 VLOG(1) << "BluetoothManager::DefaultAdapter"; |
| 50 return default_adapter_.get(); | 49 return default_adapter_.get(); |
| 51 } | 50 } |
| 52 | 51 |
| 53 // BluetoothManagerClient::Observer override. | 52 // BluetoothManagerClient::Observer override. |
| 54 virtual void AdapterRemoved(const dbus::ObjectPath& adapter) { | 53 virtual void AdapterRemoved(const std::string& adapter) { |
| 55 VLOG(1) << "AdapterRemoved: " << adapter.value(); | 54 VLOG(1) << "AdapterRemoved: " << adapter; |
| 56 if (default_adapter_.get() == NULL | 55 if (default_adapter_.get() == NULL || default_adapter_->Id() != adapter) { |
| 57 || default_adapter_->Id() != adapter.value()) { | |
| 58 return; | 56 return; |
| 59 } | 57 } |
| 60 // The default adapter was removed. | 58 // The default adapter was removed. |
| 61 default_adapter_.reset(); | 59 default_adapter_.reset(); |
| 62 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_, | 60 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_, |
| 63 DefaultAdapterChanged(default_adapter_.get())); | 61 DefaultAdapterChanged(default_adapter_.get())); |
| 64 } | 62 } |
| 65 | 63 |
| 66 // BluetoothManagerClient::Observer override. | 64 // BluetoothManagerClient::Observer override. |
| 67 virtual void DefaultAdapterChanged(const dbus::ObjectPath& adapter) { | 65 virtual void DefaultAdapterChanged(const std::string& adapter) { |
| 68 VLOG(1) << "DefaultAdapterChanged: " << adapter.value(); | 66 VLOG(1) << "DefaultAdapterChanged: " << adapter; |
| 69 OnNewDefaultAdapter(adapter); | 67 OnNewDefaultAdapter(adapter); |
| 70 } | 68 } |
| 71 | 69 |
| 72 private: | 70 private: |
| 73 virtual ~BluetoothManagerImpl() { | 71 virtual ~BluetoothManagerImpl() { |
| 74 bluetooth_manager_client_->RemoveObserver(this); | 72 bluetooth_manager_client_->RemoveObserver(this); |
| 75 } | 73 } |
| 76 | 74 |
| 77 // We have updated info about the default adapter. | 75 // We have updated info about the default adapter. |
| 78 void OnNewDefaultAdapter(const dbus::ObjectPath& adapter) { | 76 void OnNewDefaultAdapter(const std::string& adapter) { |
| 79 VLOG(1) << "OnNewDefaultAdapter: " << adapter.value(); | 77 VLOG(1) << "OnNewDefaultAdapter: " << adapter; |
| 80 if (default_adapter_.get() != NULL | 78 if (default_adapter_.get() != NULL && default_adapter_->Id() == adapter) { |
| 81 && default_adapter_->Id() == adapter.value()) { | |
| 82 return; | 79 return; |
| 83 } | 80 } |
| 84 default_adapter_.reset(BluetoothAdapter::Create(adapter.value())); | 81 default_adapter_.reset(BluetoothAdapter::Create(adapter)); |
| 85 DCHECK(default_adapter_.get()); | 82 DCHECK(default_adapter_.get()); |
| 86 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_, | 83 FOR_EACH_OBSERVER(BluetoothManager::Observer, observers_, |
| 87 DefaultAdapterChanged(default_adapter_.get())); | 84 DefaultAdapterChanged(default_adapter_.get())); |
| 88 } | 85 } |
| 89 | 86 |
| 90 // Called by bluetooth_manager_client when our DefaultAdapter request is | 87 // Called by bluetooth_manager_client when our DefaultAdapter request is |
| 91 // complete | 88 // complete |
| 92 void OnDefaultAdapter(const dbus::ObjectPath& adapter, bool success) { | 89 void OnDefaultAdapter(const std::string& adapter, bool success) { |
| 93 if (!success) { | 90 if (!success) { |
| 94 LOG(ERROR) << "OnDefaultAdapter: failed."; | 91 LOG(ERROR) << "OnDefaultAdapter: failed."; |
| 95 return; | 92 return; |
| 96 } | 93 } |
| 97 VLOG(1) << "OnDefaultAdapter: " << adapter.value(); | 94 VLOG(1) << "OnDefaultAdapter: " << adapter; |
| 98 OnNewDefaultAdapter(adapter); | 95 OnNewDefaultAdapter(adapter); |
| 99 } | 96 } |
| 100 | 97 |
| 101 base::WeakPtrFactory<BluetoothManagerImpl> weak_ptr_factory_; | 98 base::WeakPtrFactory<BluetoothManagerImpl> weak_ptr_factory_; |
| 102 | 99 |
| 103 // Owned by the dbus thread manager. Storing this is ok only because our | 100 // Owned by the dbus thread manager. Storing this is ok only because our |
| 104 // lifetime is a subset of the thread manager's lifetime. | 101 // lifetime is a subset of the thread manager's lifetime. |
| 105 BluetoothManagerClient* bluetooth_manager_client_; | 102 BluetoothManagerClient* bluetooth_manager_client_; |
| 106 | 103 |
| 107 ObserverList<BluetoothManager::Observer> observers_; | 104 ObserverList<BluetoothManager::Observer> observers_; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 134 g_bluetooth_manager = NULL; | 131 g_bluetooth_manager = NULL; |
| 135 } | 132 } |
| 136 } | 133 } |
| 137 | 134 |
| 138 // static | 135 // static |
| 139 BluetoothManager* BluetoothManager::GetInstance() { | 136 BluetoothManager* BluetoothManager::GetInstance() { |
| 140 return g_bluetooth_manager; | 137 return g_bluetooth_manager; |
| 141 } | 138 } |
| 142 | 139 |
| 143 } // namespace chromeos | 140 } // namespace chromeos |
| OLD | NEW |