Chromium Code Reviews| Index: extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.cc |
| diff --git a/extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.cc b/extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.cc |
| index 515838fcc5b58ea8564c49baf6508f8f6ab43e29..99121ed12a9fb7d2f87a74f5a5a9c6bba7b2b87a 100644 |
| --- a/extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.cc |
| +++ b/extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.cc |
| @@ -1089,8 +1089,29 @@ void BluetoothLowEnergyAdvertisementFunction::RemoveAdvertisement( |
| advertisements_manager_->Remove(extension_id(), advertisement_id); |
| } |
| +const base::hash_set<int>* |
| +BluetoothLowEnergyAdvertisementFunction::GetAdvertisementIds() { |
| + return advertisements_manager_->GetResourceIds(extension_id()); |
| +} |
| + |
| bool BluetoothLowEnergyAdvertisementFunction::RunAsync() { |
| Initialize(); |
| + |
| + // Check permission in the manifest. |
| + if (!BluetoothManifestData::CheckPeripheralPermitted(extension())) { |
| + SetError(kErrorPermissionDenied); |
| + return false; |
| + } |
| + |
| + // For advertisement API to be available the app has to be either auto |
| + // launched in Kiosk Mode or the enable-ble-advertisement-in-apps |
| + // should be set. |
| + if (!(IsAutoLaunchedKioskApp(extension()->id()) || |
| + IsPeripheralFlagEnabled())) { |
| + SetError(kErrorPermissionDenied); |
| + return false; |
| + } |
| + |
| return BluetoothLowEnergyExtensionFunctionDeprecated::RunAsync(); |
| } |
| @@ -1104,23 +1125,6 @@ void BluetoothLowEnergyAdvertisementFunction::Initialize() { |
| bool BluetoothLowEnergyRegisterAdvertisementFunction::DoWork() { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| - // Check permissions in manifest. |
| - if (!BluetoothManifestData::CheckPeripheralPermitted(extension())) { |
| - error_ = kErrorPermissionDenied; |
| - SendResponse(false); |
| - return false; |
| - } |
| - |
| - // For this API to be available the app has to be either auto |
| - // launched in Kiosk Mode or the enable-ble-advertisement-in-apps |
| - // should be set. |
| - if (!(IsAutoLaunchedKioskApp(extension()->id()) || |
| - IsPeripheralFlagEnabled())) { |
| - error_ = kErrorPermissionDenied; |
| - SendResponse(false); |
| - return false; |
| - } |
| - |
| BluetoothLowEnergyEventRouter* event_router = |
| GetEventRouter(browser_context()); |
| @@ -1199,23 +1203,6 @@ void BluetoothLowEnergyRegisterAdvertisementFunction::ErrorCallback( |
| bool BluetoothLowEnergyUnregisterAdvertisementFunction::DoWork() { |
| DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| - // Check permission in the manifest. |
| - if (!BluetoothManifestData::CheckPeripheralPermitted(extension())) { |
| - error_ = kErrorPermissionDenied; |
| - SendResponse(false); |
| - return false; |
| - } |
| - |
| - // For this API to be available the app has to be either auto |
| - // launched in Kiosk Mode or the enable-ble-advertisement-in-apps |
| - // should be set. |
| - if (!(IsAutoLaunchedKioskApp(extension()->id()) || |
| - IsPeripheralFlagEnabled())) { |
| - error_ = kErrorPermissionDenied; |
| - SendResponse(false); |
| - return false; |
| - } |
| - |
| BluetoothLowEnergyEventRouter* event_router = |
| GetEventRouter(browser_context()); |
| @@ -1267,6 +1254,54 @@ void BluetoothLowEnergyUnregisterAdvertisementFunction::ErrorCallback( |
| SendResponse(false); |
| } |
| +// ResetAdvertising: |
| + |
| +bool BluetoothLowEnergyResetAdvertisingFunction::DoWork() { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + |
| + BluetoothLowEnergyEventRouter* event_router = |
| + GetEventRouter(browser_context()); |
| + |
| + // If the adapter is not initialized, there is nothing to reset. |
| + if (!event_router->HasAdapter()) { |
| + SendResponse(true); |
| + return true; |
| + } |
| + |
| + const base::hash_set<int>* advertisement_ids = GetAdvertisementIds(); |
| + if (!advertisement_ids || advertisement_ids->empty()) { |
| + SendResponse(true); |
| + return true; |
| + } |
| + |
| + // Copy the hash set, as RemoveAdvertisement can change advertisement_ids |
| + // while we are iterating on it. |
|
tbarzic
2017/06/27 22:49:12
nit: s/iterating on/iterating over/
Sonny Sasaka
2017/06/27 23:14:01
Done.
|
| + base::hash_set<int> advertisement_ids_tmp = *advertisement_ids; |
| + for (int advertisement_id : advertisement_ids_tmp) { |
| + RemoveAdvertisement(advertisement_id); |
| + } |
| + |
| + event_router->adapter()->ResetAdvertising( |
| + base::Bind(&BluetoothLowEnergyResetAdvertisingFunction::SuccessCallback, |
| + this), |
| + base::Bind(&BluetoothLowEnergyResetAdvertisingFunction::ErrorCallback, |
| + this)); |
| + |
| + return true; |
| +} |
| + |
| +void BluetoothLowEnergyResetAdvertisingFunction::SuccessCallback() { |
| + SendResponse(true); |
| +} |
| + |
| +void BluetoothLowEnergyResetAdvertisingFunction::ErrorCallback( |
| + device::BluetoothAdvertisement::ErrorCode status) { |
| +#if defined(OS_CHROMEOS) || defined(OS_LINUX) |
|
tbarzic
2017/06/27 22:49:12
no ifdefs?
Sonny Sasaka
2017/06/27 23:14:01
Done.
|
| + error_ = kErrorOperationFailed; |
| + SendResponse(false); |
| +#endif |
| +} |
| + |
| // SetAdvertisingInterval: |
| template class BLEPeripheralExtensionFunction< |