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 |