Chromium Code Reviews| Index: extensions/browser/api/bluetooth/bluetooth_event_router.cc |
| diff --git a/extensions/browser/api/bluetooth/bluetooth_event_router.cc b/extensions/browser/api/bluetooth/bluetooth_event_router.cc |
| index 1064d0bdad177dc91b4e3dac3d5cd8f34e6a9b1b..4c962781d96a70c65b99da14ee52270a3a65590e 100644 |
| --- a/extensions/browser/api/bluetooth/bluetooth_event_router.cc |
| +++ b/extensions/browser/api/bluetooth/bluetooth_event_router.cc |
| @@ -90,12 +90,22 @@ void BluetoothEventRouter::StartDiscoverySession( |
| error_callback.Run(); |
| return; |
| } |
| - adapter->StartDiscoverySession( |
| - base::Bind(&BluetoothEventRouter::OnStartDiscoverySession, |
| - weak_ptr_factory_.GetWeakPtr(), |
| - extension_id, |
| - callback), |
| - error_callback); |
| + |
|
armansito
2015/04/16 19:13:54
Add comments explaining what's going on here.
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + PreSetFilterMap::iterator pre_set_iter = |
| + pre_set_filter_map_.find(extension_id); |
| + if (pre_set_iter != pre_set_filter_map_.end()) { |
| + adapter->StartDiscoverySessionWithFilter( |
| + scoped_ptr<device::BluetoothDiscoveryFilter>(pre_set_iter->second), |
| + base::Bind(&BluetoothEventRouter::OnStartDiscoverySession, |
| + weak_ptr_factory_.GetWeakPtr(), extension_id, callback), |
| + error_callback); |
| + pre_set_filter_map_.erase(pre_set_iter); |
|
armansito
2015/04/16 19:13:55
Do an early return and drop 'else'.
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + } else { |
| + adapter->StartDiscoverySession( |
| + base::Bind(&BluetoothEventRouter::OnStartDiscoverySession, |
| + weak_ptr_factory_.GetWeakPtr(), extension_id, callback), |
| + error_callback); |
| + } |
| } |
| void BluetoothEventRouter::StopDiscoverySession( |
| @@ -118,6 +128,32 @@ void BluetoothEventRouter::StopDiscoverySession( |
| session->Stop(callback, error_callback); |
| } |
| +void BluetoothEventRouter::SetDiscoveryFilter( |
| + scoped_ptr<device::BluetoothDiscoveryFilter> discovery_filter, |
| + device::BluetoothAdapter* adapter, |
| + const std::string& extension_id, |
| + const base::Closure& callback, |
| + const base::Closure& error_callback) { |
| + VLOG(1) << __func__; |
|
armansito
2015/04/16 19:13:54
Prefer DVLOG
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + if (adapter != adapter_.get()) { |
| + error_callback.Run(); |
| + return; |
| + } |
| + |
| + DiscoverySessionMap::iterator iter = |
| + discovery_session_map_.find(extension_id); |
| + if (iter == discovery_session_map_.end() || !iter->second->IsActive()) { |
| + VLOG(1) << "No active discovery session exists for extension."; |
|
armansito
2015/04/16 19:13:55
This may be interpreted incorrectly as an error ca
armansito
2015/04/16 19:13:55
DVLOG
jpawlowski1
2015/04/16 19:36:27
Done.
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + pre_set_filter_map_[extension_id] = discovery_filter.release(); |
| + callback.Run(); |
| + return; |
| + } |
| + |
| + // extension is already running discovery, update it's discovery filter |
| + iter->second->SetDiscoveryFilter(discovery_filter.Pass(), callback, |
| + error_callback); |
| +} |
| + |
| BluetoothApiPairingDelegate* BluetoothEventRouter::GetPairingDelegate( |
| const std::string& extension_id) { |
| return ContainsKey(pairing_delegate_map_, extension_id) |
| @@ -312,6 +348,13 @@ void BluetoothEventRouter::CleanUpForExtension( |
| DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| RemovePairingDelegate(extension_id); |
| + PreSetFilterMap::iterator pre_set_iter = |
| + pre_set_filter_map_.find(extension_id); |
| + if (pre_set_iter != pre_set_filter_map_.end()) { |
| + delete pre_set_iter->second; |
| + pre_set_filter_map_.erase(pre_set_iter); |
| + } |
| + |
| // Remove any discovery session initiated by the extension. |
| DiscoverySessionMap::iterator session_iter = |
| discovery_session_map_.find(extension_id); |
| @@ -322,6 +365,12 @@ void BluetoothEventRouter::CleanUpForExtension( |
| } |
| void BluetoothEventRouter::CleanUpAllExtensions() { |
| + for (PreSetFilterMap::iterator it = pre_set_filter_map_.begin(); |
| + it != pre_set_filter_map_.end(); it++) { |
|
armansito
2015/04/16 19:13:54
for (auto& it : pre_set_filter_map_)
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + delete it->second; |
| + } |
| + pre_set_filter_map_.clear(); |
| + |
| for (DiscoverySessionMap::iterator it = discovery_session_map_.begin(); |
| it != discovery_session_map_.end(); |
| ++it) { |
| @@ -347,6 +396,11 @@ void BluetoothEventRouter::OnStartDiscoverySession( |
| callback.Run(); |
| } |
| +void BluetoothEventRouter::OnSetDiscoveryFilter(const std::string& extension_id, |
| + const base::Closure& callback) { |
|
armansito
2015/04/16 19:13:55
DVLOG success?
jpawlowski1
2015/04/16 19:36:27
Done.
|
| + callback.Run(); |
| +} |
| + |
| void BluetoothEventRouter::Observe( |
| int type, |
| const content::NotificationSource& source, |