summaryrefslogtreecommitdiffstats
path: root/device/bluetooth/bluetooth_adapter_unittest.cc
diff options
context:
space:
mode:
authorperja <perja@opera.com>2016-02-08 10:39:12 -0800
committerCommit bot <commit-bot@chromium.org>2016-02-08 18:40:28 +0000
commit28e8a498f4348d26ddcc07a341591b0183c4bdd6 (patch)
treedf5d1bfa184025f7b8a9a48c49ab7d4e5c4bcece /device/bluetooth/bluetooth_adapter_unittest.cc
parente4cefbc13b462c898560b64fb7e575e3b1d6cac3 (diff)
downloadchromium_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.cc85
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