| 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 // ResetAdvertising: |
| 1276 |
| 1277 bool BluetoothLowEnergyResetAdvertisingFunction::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()) { |
| 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 RemoveAdvertisement(advertisement_id); |
| 1317 } |
| 1318 |
| 1319 event_router->adapter()->ResetAdvertising( |
| 1320 base::Bind(&BluetoothLowEnergyResetAdvertisingFunction::SuccessCallback, |
| 1321 this), |
| 1322 base::Bind(&BluetoothLowEnergyResetAdvertisingFunction::ErrorCallback, |
| 1323 this)); |
| 1324 |
| 1325 return true; |
| 1326 } |
| 1327 |
| 1328 void BluetoothLowEnergyResetAdvertisingFunction::SuccessCallback() { |
| 1329 Respond(NoArguments()); |
| 1330 } |
| 1331 |
| 1332 void BluetoothLowEnergyResetAdvertisingFunction::ErrorCallback( |
| 1333 device::BluetoothAdvertisement::ErrorCode status) { |
| 1334 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 1335 Respond(Error(kErrorOperationFailed)); |
| 1336 #endif |
| 1337 } |
| 1338 |
| 1270 // SetAdvertisingInterval: | 1339 // SetAdvertisingInterval: |
| 1271 | 1340 |
| 1272 template class BLEPeripheralExtensionFunction< | 1341 template class BLEPeripheralExtensionFunction< |
| 1273 apibtle::SetAdvertisingInterval::Params>; | 1342 apibtle::SetAdvertisingInterval::Params>; |
| 1274 | 1343 |
| 1275 void BluetoothLowEnergySetAdvertisingIntervalFunction::DoWork() { | 1344 void BluetoothLowEnergySetAdvertisingIntervalFunction::DoWork() { |
| 1276 #if defined(OS_CHROMEOS) || defined(OS_LINUX) | 1345 #if defined(OS_CHROMEOS) || defined(OS_LINUX) |
| 1277 BluetoothLowEnergyEventRouter* event_router = | 1346 BluetoothLowEnergyEventRouter* event_router = |
| 1278 GetEventRouter(browser_context()); | 1347 GetEventRouter(browser_context()); |
| 1279 event_router->adapter()->SetAdvertisingInterval( | 1348 event_router->adapter()->SetAdvertisingInterval( |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1496 params_->response.value->end()); | 1565 params_->response.value->end()); |
| 1497 } | 1566 } |
| 1498 event_router_->HandleRequestResponse( | 1567 event_router_->HandleRequestResponse( |
| 1499 extension(), params_->response.request_id, params_->response.is_error, | 1568 extension(), params_->response.request_id, params_->response.is_error, |
| 1500 uint8_vector); | 1569 uint8_vector); |
| 1501 Respond(NoArguments()); | 1570 Respond(NoArguments()); |
| 1502 } | 1571 } |
| 1503 | 1572 |
| 1504 } // namespace api | 1573 } // namespace api |
| 1505 } // namespace extensions | 1574 } // namespace extensions |
| OLD | NEW |