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..78c70370438f44f79daa39ff10e918443b32db2f 100644 |
--- a/extensions/browser/api/bluetooth/bluetooth_event_router.cc |
+++ b/extensions/browser/api/bluetooth/bluetooth_event_router.cc |
@@ -90,11 +90,24 @@ void BluetoothEventRouter::StartDiscoverySession( |
error_callback.Run(); |
return; |
} |
+ |
+ // Check wether user pre set discovery filter by calling SetDiscoveryFilter |
armansito
2015/04/16 21:24:02
A little more concise: "If the user has set a disc
armansito
2015/04/16 21:24:02
nit: s/wether/whether/
jpawlowski1
2015/04/17 04:48:13
Done.
jpawlowski1
2015/04/17 04:48:13
Done.
|
+ // before. If yes, then use this pre set filter when starting session. If no, |
+ // then just start regular session. |
+ 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); |
+ return; |
+ } |
adapter->StartDiscoverySession( |
base::Bind(&BluetoothEventRouter::OnStartDiscoverySession, |
- weak_ptr_factory_.GetWeakPtr(), |
- extension_id, |
- callback), |
+ weak_ptr_factory_.GetWeakPtr(), extension_id, callback), |
error_callback); |
} |
@@ -118,6 +131,33 @@ 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) { |
+ DVLOG(1) << __func__; |
+ 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()) { |
+ DVLOG(1) << "No active discovery session exists for extension, so caching " |
+ "filter for later use."; |
+ 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 +352,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,11 +369,14 @@ void BluetoothEventRouter::CleanUpForExtension( |
} |
void BluetoothEventRouter::CleanUpAllExtensions() { |
- for (DiscoverySessionMap::iterator it = discovery_session_map_.begin(); |
- it != discovery_session_map_.end(); |
- ++it) { |
- delete it->second; |
- } |
+ for (auto& it : pre_set_filter_map_) |
+ delete it.second; |
+ |
+ pre_set_filter_map_.clear(); |
+ |
+ for (auto& it : discovery_session_map_) |
+ delete it.second; |
+ |
discovery_session_map_.clear(); |
PairingDelegateMap::iterator pairing_iter = pairing_delegate_map_.begin(); |
@@ -347,6 +397,12 @@ void BluetoothEventRouter::OnStartDiscoverySession( |
callback.Run(); |
} |
+void BluetoothEventRouter::OnSetDiscoveryFilter(const std::string& extension_id, |
+ const base::Closure& callback) { |
+ DVLOG(1) << "Succesfully set DiscoveryFilter."; |
armansito
2015/04/16 21:24:02
nit: s/Succesfully/Successfully/
jpawlowski1
2015/04/17 04:48:13
Done.
|
+ callback.Run(); |
+} |
+ |
void BluetoothEventRouter::Observe( |
int type, |
const content::NotificationSource& source, |