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 |