Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stdint.h> | 5 #include <stdint.h> |
| 6 #include <utility> | 6 #include <utility> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 371 RememberCharacteristicForSubsequentAction(characteristic1_); | 371 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 372 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 372 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 373 | 373 |
| 374 std::vector<uint8_t> empty_vector; | 374 std::vector<uint8_t> empty_vector; |
| 375 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, | 375 SimulateGattCharacteristicRead(/* use remembered characteristic */ nullptr, |
| 376 empty_vector); | 376 empty_vector); |
| 377 EXPECT_TRUE("Did not crash!"); | 377 EXPECT_TRUE("Did not crash!"); |
| 378 } | 378 } |
| 379 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 379 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 380 | 380 |
| 381 // TODO(crbug.com/621901): Enable test on all platforms. | |
| 382 #if defined(OS_MACOSX) | |
| 383 TEST_F(BluetoothRemoteGattCharacteristicTest, | |
| 384 ReadRemoteCharacteristic_Disconnected) { | |
| 385 if (!PlatformSupportsLowEnergy()) { | |
| 386 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | |
| 387 return; | |
| 388 } | |
| 389 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | |
| 390 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); | |
| 391 | |
| 392 characteristic1_->ReadRemoteCharacteristic( | |
| 393 GetReadValueCallback(Call::NOT_EXPECTED), | |
| 394 GetGattErrorCallback(Call::EXPECTED)); | |
| 395 | |
| 396 #if !defined(OS_MACOSX) | |
| 397 // On macOS we don't get any events after disconnection so no need to | |
|
scheib
2016/09/16 19:50:12
If there's just 'no need to remember' then we migh
ortuno
2016/09/20 02:41:43
Through experimentation and the bug report for thi
scheib
2016/09/20 03:53:16
Thanks for explanation, please include in code the
ortuno
2016/09/22 03:06:32
Done.
| |
| 398 // remember the characteristic for the read response. | |
| 399 RememberCharacteristicForSubsequentAction(characteristic1_); | |
| 400 #endif | |
| 401 | |
| 402 ASSERT_EQ(1u, adapter_->GetDevices().size()); | |
| 403 SimulateGattDisconnection(adapter_->GetDevices()[0]); | |
| 404 | |
| 405 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | |
| 406 last_gatt_error_code_); | |
| 407 | |
| 408 #if !defined(OS_MACOSX) | |
| 409 // On macOS we don't get any events after disconnection so no need to | |
| 410 // dispatch a read response. | |
| 411 std::vector<uint8_t> empty_vector; | |
| 412 SimulateGattCharacteristicRead(nullptr /* use remembered characteristic */, | |
| 413 empty_vector); | |
| 414 #endif | |
| 415 } | |
| 416 #endif // defined(OS_MACOSX) | |
| 417 | |
| 381 #if defined(OS_ANDROID) || defined(OS_WIN) | 418 #if defined(OS_ANDROID) || defined(OS_WIN) |
| 382 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. | 419 // Tests WriteRemoteCharacteristic completing after Chrome objects are deleted. |
| 383 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set | 420 // macOS: Not applicable: This can never happen if CBPeripheral delegate is set |
| 384 // to nil. | 421 // to nil. |
| 385 TEST_F(BluetoothRemoteGattCharacteristicTest, | 422 TEST_F(BluetoothRemoteGattCharacteristicTest, |
| 386 WriteRemoteCharacteristic_AfterDeleted) { | 423 WriteRemoteCharacteristic_AfterDeleted) { |
| 387 if (!PlatformSupportsLowEnergy()) { | 424 if (!PlatformSupportsLowEnergy()) { |
| 388 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 425 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 389 return; | 426 return; |
| 390 } | 427 } |
| 391 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 428 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 392 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); | 429 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); |
| 393 | 430 |
| 394 std::vector<uint8_t> empty_vector; | 431 std::vector<uint8_t> empty_vector; |
| 395 characteristic1_->WriteRemoteCharacteristic( | 432 characteristic1_->WriteRemoteCharacteristic( |
| 396 empty_vector, GetCallback(Call::NOT_EXPECTED), | 433 empty_vector, GetCallback(Call::NOT_EXPECTED), |
| 397 GetGattErrorCallback(Call::NOT_EXPECTED)); | 434 GetGattErrorCallback(Call::NOT_EXPECTED)); |
| 398 | 435 |
| 399 RememberCharacteristicForSubsequentAction(characteristic1_); | 436 RememberCharacteristicForSubsequentAction(characteristic1_); |
| 400 DeleteDevice(device_); // TODO(576906) delete only the characteristic. | 437 DeleteDevice(device_); // TODO(576906) delete only the characteristic. |
| 401 | 438 |
| 402 SimulateGattCharacteristicWrite(/* use remembered characteristic */ nullptr); | 439 SimulateGattCharacteristicWrite(/* use remembered characteristic */ nullptr); |
| 403 EXPECT_TRUE("Did not crash!"); | 440 EXPECT_TRUE("Did not crash!"); |
| 404 } | 441 } |
| 405 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 442 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 406 | 443 |
| 444 // TODO(crbug.com/621901): Enable test on all platforms. | |
| 445 #if defined(OS_MACOSX) | |
| 446 TEST_F(BluetoothRemoteGattCharacteristicTest, | |
| 447 WriteRemoteCharacteristic_Disconnected) { | |
| 448 if (!PlatformSupportsLowEnergy()) { | |
| 449 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | |
| 450 return; | |
| 451 } | |
| 452 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | |
| 453 BluetoothRemoteGattCharacteristic::PROPERTY_WRITE)); | |
| 454 | |
| 455 std::vector<uint8_t> empty_vector; | |
| 456 characteristic1_->WriteRemoteCharacteristic( | |
| 457 empty_vector, GetCallback(Call::NOT_EXPECTED), | |
| 458 GetGattErrorCallback(Call::EXPECTED)); | |
| 459 | |
| 460 #if !defined(OS_MACOSX) | |
| 461 // On macOS we don't get any events after disconnection so no need to | |
| 462 // remember the characteristic for the write response. | |
| 463 RememberCharacteristicForSubsequentAction(characteristic1_); | |
| 464 #endif // !defined(OS_MACOSX) | |
| 465 | |
| 466 ASSERT_EQ(1u, adapter_->GetDevices().size()); | |
| 467 SimulateGattDisconnection(adapter_->GetDevices()[0]); | |
| 468 | |
| 469 EXPECT_EQ(BluetoothRemoteGattService::GATT_ERROR_FAILED, | |
| 470 last_gatt_error_code_); | |
| 471 | |
| 472 #if !defined(OS_MACOSX) | |
| 473 // On macOS we don't get any events after disconnection so no need | |
| 474 // to dispatch a write response. | |
| 475 SimulateGattCharacteristicWrite(/* use remembered characteristic */ nullptr); | |
| 476 #endif // !defined(OS_MACOSX) | |
| 477 } | |
| 478 #endif // defined(OS_MACOSX) | |
| 479 | |
| 407 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) | 480 #if defined(OS_ANDROID) || defined(OS_MACOSX) || defined(OS_WIN) |
| 408 // Tests ReadRemoteCharacteristic and GetValue with non-empty value buffer. | 481 // Tests ReadRemoteCharacteristic and GetValue with non-empty value buffer. |
| 409 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadRemoteCharacteristic) { | 482 TEST_F(BluetoothRemoteGattCharacteristicTest, ReadRemoteCharacteristic) { |
| 410 if (!PlatformSupportsLowEnergy()) { | 483 if (!PlatformSupportsLowEnergy()) { |
| 411 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; | 484 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; |
| 412 return; | 485 return; |
| 413 } | 486 } |
| 414 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( | 487 ASSERT_NO_FATAL_FAILURE(FakeCharacteristicBoilerplate( |
| 415 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); | 488 BluetoothRemoteGattCharacteristic::PROPERTY_READ)); |
| 416 | 489 |
| (...skipping 1637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2054 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); | 2127 EXPECT_EQ(1u, characteristic1_->GetDescriptorsByUUID(id2).size()); |
| 2055 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); | 2128 EXPECT_EQ(2u, characteristic2_->GetDescriptorsByUUID(id3).size()); |
| 2056 | 2129 |
| 2057 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); | 2130 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id1).size()); |
| 2058 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); | 2131 EXPECT_EQ(0u, characteristic2_->GetDescriptorsByUUID(id2).size()); |
| 2059 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); | 2132 EXPECT_EQ(0u, characteristic1_->GetDescriptorsByUUID(id3).size()); |
| 2060 } | 2133 } |
| 2061 #endif // defined(OS_ANDROID) || defined(OS_WIN) | 2134 #endif // defined(OS_ANDROID) || defined(OS_WIN) |
| 2062 | 2135 |
| 2063 } // namespace device | 2136 } // namespace device |
| OLD | NEW |