Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.h " | 5 #include "extensions/browser/api/bluetooth_low_energy/bluetooth_low_energy_api.h " |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <iterator> | 9 #include <iterator> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1082 DCHECK(advertisements_manager_); | 1082 DCHECK(advertisements_manager_); |
| 1083 return advertisements_manager_->Get(extension_id(), advertisement_id); | 1083 return advertisements_manager_->Get(extension_id(), advertisement_id); |
| 1084 } | 1084 } |
| 1085 | 1085 |
| 1086 void BluetoothLowEnergyAdvertisementFunction::RemoveAdvertisement( | 1086 void BluetoothLowEnergyAdvertisementFunction::RemoveAdvertisement( |
| 1087 int advertisement_id) { | 1087 int advertisement_id) { |
| 1088 DCHECK(advertisements_manager_); | 1088 DCHECK(advertisements_manager_); |
| 1089 advertisements_manager_->Remove(extension_id(), advertisement_id); | 1089 advertisements_manager_->Remove(extension_id(), advertisement_id); |
| 1090 } | 1090 } |
| 1091 | 1091 |
| 1092 const base::hash_set<int>* | |
| 1093 BluetoothLowEnergyAdvertisementFunction::GetAdvertisementIds() { | |
| 1094 return advertisements_manager_->GetResourceIds(extension_id()); | |
| 1095 } | |
| 1096 | |
| 1092 bool BluetoothLowEnergyAdvertisementFunction::RunAsync() { | 1097 bool BluetoothLowEnergyAdvertisementFunction::RunAsync() { |
| 1093 Initialize(); | 1098 Initialize(); |
| 1094 return BluetoothLowEnergyExtensionFunctionDeprecated::RunAsync(); | 1099 return BluetoothLowEnergyExtensionFunctionDeprecated::RunAsync(); |
| 1095 } | 1100 } |
| 1096 | 1101 |
| 1097 void BluetoothLowEnergyAdvertisementFunction::Initialize() { | 1102 void BluetoothLowEnergyAdvertisementFunction::Initialize() { |
| 1098 advertisements_manager_ = | 1103 advertisements_manager_ = |
| 1099 ApiResourceManager<BluetoothApiAdvertisement>::Get(browser_context()); | 1104 ApiResourceManager<BluetoothApiAdvertisement>::Get(browser_context()); |
| 1100 } | 1105 } |
| 1101 | 1106 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1260 case device::BluetoothAdvertisement::ErrorCode:: | 1265 case device::BluetoothAdvertisement::ErrorCode:: |
| 1261 ERROR_ADVERTISEMENT_DOES_NOT_EXIST: | 1266 ERROR_ADVERTISEMENT_DOES_NOT_EXIST: |
| 1262 SetError(kStatusAdvertisementDoesNotExist); | 1267 SetError(kStatusAdvertisementDoesNotExist); |
| 1263 break; | 1268 break; |
| 1264 default: | 1269 default: |
| 1265 SetError(kErrorOperationFailed); | 1270 SetError(kErrorOperationFailed); |
| 1266 } | 1271 } |
| 1267 SendResponse(false); | 1272 SendResponse(false); |
| 1268 } | 1273 } |
| 1269 | 1274 |
| 1275 // ResetAllAdvertisements: | |
| 1276 | |
| 1277 bool BluetoothLowEnergyResetAllAdvertisementsFunction::DoWork() { | |
| 1278 DCHECK_CURRENTLY_ON(BrowserThread::UI); | |
| 1279 | |
| 1280 // Check permission in the manifest. | |
| 1281 if (!BluetoothManifestData::CheckPeripheralPermitted(extension())) { | |
| 1282 error_ = kErrorPermissionDenied; | |
| 1283 SendResponse(false); | |
| 1284 return false; | |
| 1285 } | |
| 1286 | |
| 1287 // For this API to be available the app has to be either auto | |
| 1288 // launched in Kiosk Mode or the enable-ble-advertisement-in-apps | |
| 1289 // should be set. | |
| 1290 if (!(IsAutoLaunchedKioskApp(extension()->id()) || | |
| 1291 IsPeripheralFlagEnabled())) { | |
| 1292 error_ = kErrorPermissionDenied; | |
| 1293 SendResponse(false); | |
| 1294 return false; | |
| 1295 } | |
| 1296 | |
| 1297 BluetoothLowEnergyEventRouter* event_router = | |
| 1298 GetEventRouter(browser_context()); | |
| 1299 | |
| 1300 // If we don't have an initialized adapter, resetting advertisements is a | |
| 1301 // no-op. | |
| 1302 if (!event_router->HasAdapter()) | |
| 1303 return true; | |
| 1304 | |
| 1305 base::hash_set<int> advertisement_ids; | |
| 1306 if (GetAdvertisementIds()) { | |
|
rkc
2017/05/19 23:44:26
This is not what we want to do. The need for this
Sonny Sasaka
2017/06/01 22:28:11
Done.
| |
| 1307 advertisement_ids = *GetAdvertisementIds(); | |
| 1308 } | |
| 1309 | |
| 1310 if (advertisement_ids.size() == 0) { | |
| 1311 SendResponse(true); | |
| 1312 return true; | |
| 1313 } | |
| 1314 | |
| 1315 for (int advertisement_id : advertisement_ids) { | |
| 1316 BluetoothApiAdvertisement* advertisement = | |
| 1317 GetAdvertisement(advertisement_id); | |
| 1318 advertisement->advertisement()->Unregister( | |
| 1319 base::Bind(&BluetoothLowEnergyResetAllAdvertisementsFunction:: | |
| 1320 UnregisterSuccessCallback, | |
| 1321 this, advertisement_id), | |
| 1322 base::Bind(&BluetoothLowEnergyResetAllAdvertisementsFunction:: | |
| 1323 UnregisterErrorCallback, | |
| 1324 this, advertisement_id)); | |
| 1325 } | |
| 1326 | |
| 1327 return true; | |
| 1328 } | |
| 1329 | |
| 1330 void BluetoothLowEnergyResetAllAdvertisementsFunction::OnUnregister( | |
| 1331 int advertisement_id) { | |
| 1332 RemoveAdvertisement(advertisement_id); | |
| 1333 const base::hash_set<int>* advertisement_ids = GetAdvertisementIds(); | |
| 1334 // The last advertisement has been unregistered, we can send response now. | |
| 1335 if (advertisement_ids && advertisement_ids->size() == 0) { | |
| 1336 SendResponse(true); | |
| 1337 } | |
| 1338 } | |
| 1339 | |
| 1340 void BluetoothLowEnergyResetAllAdvertisementsFunction:: | |
| 1341 UnregisterSuccessCallback(int advertisement_id) { | |
| 1342 OnUnregister(advertisement_id); | |
| 1343 } | |
| 1344 | |
| 1345 void BluetoothLowEnergyResetAllAdvertisementsFunction::UnregisterErrorCallback( | |
| 1346 int advertisement_id, | |
| 1347 device::BluetoothAdvertisement::ErrorCode status) { | |
| 1348 OnUnregister(advertisement_id); | |
| 1349 } | |
| 1350 | |
| 1270 // SetAdvertisingInterval: | 1351 // SetAdvertisingInterval: |
| 1271 | 1352 |
| 1272 template class BLEPeripheralExtensionFunction< | 1353 template class BLEPeripheralExtensionFunction< |
| 1273 apibtle::SetAdvertisingInterval::Params>; | 1354 apibtle::SetAdvertisingInterval::Params>; |
| 1274 | 1355 |
| 1275 void BluetoothLowEnergySetAdvertisingIntervalFunction::DoWork() { | 1356 void BluetoothLowEnergySetAdvertisingIntervalFunction::DoWork() { |
| 1276 #if defined(OS_CHROMEOS) || defined(OS_LINUX) | 1357 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 1277 BluetoothLowEnergyEventRouter* event_router = | 1358 BluetoothLowEnergyEventRouter* event_router = |
| 1278 GetEventRouter(browser_context()); | 1359 GetEventRouter(browser_context()); |
| 1279 event_router->adapter()->SetAdvertisingInterval( | 1360 event_router->adapter()->SetAdvertisingInterval( |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1496 params_->response.value->end()); | 1577 params_->response.value->end()); |
| 1497 } | 1578 } |
| 1498 event_router_->HandleRequestResponse( | 1579 event_router_->HandleRequestResponse( |
| 1499 extension(), params_->response.request_id, params_->response.is_error, | 1580 extension(), params_->response.request_id, params_->response.is_error, |
| 1500 uint8_vector); | 1581 uint8_vector); |
| 1501 Respond(NoArguments()); | 1582 Respond(NoArguments()); |
| 1502 } | 1583 } |
| 1503 | 1584 |
| 1504 } // namespace api | 1585 } // namespace api |
| 1505 } // namespace extensions | 1586 } // namespace extensions |
| OLD | NEW |