diff options
author | perja <perja@opera.com> | 2016-02-08 10:39:12 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-08 18:40:28 +0000 |
commit | 28e8a498f4348d26ddcc07a341591b0183c4bdd6 (patch) | |
tree | df5d1bfa184025f7b8a9a48c49ab7d4e5c4bcece /device/bluetooth/bluetooth_adapter_unittest.cc | |
parent | e4cefbc13b462c898560b64fb7e575e3b1d6cac3 (diff) | |
download | chromium_src-28e8a498f4348d26ddcc07a341591b0183c4bdd6.zip chromium_src-28e8a498f4348d26ddcc07a341591b0183c4bdd6.tar.gz chromium_src-28e8a498f4348d26ddcc07a341591b0183c4bdd6.tar.bz2 |
bluetooth: android: Fix a couple of crashes when adapter is turned on/off.
These changes fixes the crashes found when toggling the adapter on/off
when device chooser dialog is used in web-bluetooth.
BUG=570610
Review URL: https://codereview.chromium.org/1610053005
Cr-Commit-Position: refs/heads/master@{#374145}
Diffstat (limited to 'device/bluetooth/bluetooth_adapter_unittest.cc')
-rw-r--r-- | device/bluetooth/bluetooth_adapter_unittest.cc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/device/bluetooth/bluetooth_adapter_unittest.cc b/device/bluetooth/bluetooth_adapter_unittest.cc index 12351c9..45a5271 100644 --- a/device/bluetooth/bluetooth_adapter_unittest.cc +++ b/device/bluetooth/bluetooth_adapter_unittest.cc @@ -479,6 +479,43 @@ TEST_F(BluetoothTest, DiscoverySession) { } #endif // defined(OS_ANDROID) +// Android only: this test is specific for Android and should not be +// enabled for other platforms. +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, AdapterIllegalStateBeforeStartScan) { + if (!PlatformSupportsLowEnergy()) { + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; + return; + } + InitWithFakeAdapter(); + ForceIllegalStateException(); + StartLowEnergyDiscoverySessionExpectedToFail(); + EXPECT_EQ(0, callback_count_); + EXPECT_EQ(1, error_callback_count_); + EXPECT_FALSE(adapter_->IsDiscovering()); +} +#endif // defined(OS_ANDROID) + +// Android only: this test is specific for Android and should not be +// enabled for other platforms. +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, AdapterIllegalStateBeforeStopScan) { + if (!PlatformSupportsLowEnergy()) { + LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; + return; + } + InitWithFakeAdapter(); + StartLowEnergyDiscoverySession(); + EXPECT_EQ(1, callback_count_); + EXPECT_EQ(0, error_callback_count_); + EXPECT_TRUE(adapter_->IsDiscovering()); + ForceIllegalStateException(); + discovery_sessions_[0]->Stop(GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_FALSE(adapter_->IsDiscovering()); +} +#endif // defined(OS_ANDROID) + #if defined(OS_ANDROID) || defined(OS_MACOSX) // Checks that discovery fails (instead of hanging) when permissions are denied. TEST_F(BluetoothTest, NoPermissions) { @@ -616,4 +653,52 @@ TEST_F(BluetoothTest, DiscoverMultipleLowEnergyDevices) { } #endif // defined(OS_ANDROID) || defined(OS_MACOSX) +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, TogglePowerFakeAdapter) { + InitWithFakeAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + ASSERT_TRUE(adapter_->IsPowered()); + + // Check if power can be turned off. + adapter_->SetPowered(false, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_FALSE(adapter_->IsPowered()); + + // Check if power can be turned on again. + adapter_->SetPowered(true, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + EXPECT_TRUE(adapter_->IsPowered()); +} +#endif // defined(OS_ANDROID) + +#if defined(OS_ANDROID) +TEST_F(BluetoothTest, TogglePowerBeforeScan) { + InitWithFakeAdapter(); + ASSERT_TRUE(adapter_->IsPresent()); + ASSERT_TRUE(adapter_->IsPowered()); + + // Turn off adapter. + adapter_->SetPowered(false, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + ASSERT_FALSE(adapter_->IsPowered()); + + // Try to perform a scan. + StartLowEnergyDiscoverySessionExpectedToFail(); + + // Turn on adapter. + adapter_->SetPowered(true, GetCallback(Call::EXPECTED), + GetErrorCallback(Call::NOT_EXPECTED)); + ASSERT_TRUE(adapter_->IsPowered()); + + // Try to perform a scan again. + ResetEventCounts(); + StartLowEnergyDiscoverySession(); + EXPECT_EQ(1, callback_count_); + EXPECT_EQ(0, error_callback_count_); + EXPECT_TRUE(adapter_->IsDiscovering()); + ASSERT_EQ((size_t)1, discovery_sessions_.size()); + EXPECT_TRUE(discovery_sessions_[0]->IsActive()); +} +#endif // defined(OS_ANDROID) + } // namespace device |