Commit 7ae744cf authored by Tiansong Cui's avatar Tiansong Cui Committed by Commit Bot

[Chromecast][BLE] Add APIs to pause/restart BLE scan

Bug: internal b/135576340
Test: Build and run
Change-Id: Iae347132d9302488a832902f38b6be8a4168783e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1762286Reviewed-by: default avatarYuchen Liu <yucliu@chromium.org>
Commit-Queue: Tiansong Cui <tiansong@google.com>
Cr-Commit-Position: refs/heads/master@{#689669}
parent 6e10a460
......@@ -114,6 +114,28 @@ void LeScanManagerImpl::ClearScanResults() {
addr_to_scan_results_.clear();
}
void LeScanManagerImpl::PauseScan() {
MAKE_SURE_IO_THREAD(PauseScan);
if (scan_handle_ids_.empty()) {
return;
}
if (!le_scanner_->StopScan()) {
LOG(ERROR) << "Failed to pause scanning";
}
}
void LeScanManagerImpl::RestartScan() {
MAKE_SURE_IO_THREAD(RestartScan);
if (scan_handle_ids_.empty()) {
return;
}
if (!le_scanner_->StartScan()) {
LOG(ERROR) << "Failed to restart scanning";
}
}
void LeScanManagerImpl::OnScanResult(
const bluetooth_v2_shlib::LeScanner::ScanResult& scan_result_shlib) {
LeScanResult scan_result;
......
......@@ -43,6 +43,9 @@ class LeScanManagerImpl : public LeScanManager,
base::Optional<ScanFilter> service_uuid = base::nullopt) override;
void ClearScanResults() override;
void PauseScan();
void RestartScan();
private:
class ScanHandleImpl;
......
......@@ -97,6 +97,43 @@ TEST_F(LeScanManagerTest, TestEnableDisableScan) {
task_environment_.RunUntilIdle();
}
TEST_F(LeScanManagerTest, TestPauseRestartScan) {
std::unique_ptr<LeScanManager::ScanHandle> scan_handle;
// Don't call StartScan or StopScan if there is no handle.
EXPECT_CALL(le_scanner_, StopScan()).Times(0);
le_scan_manager_.PauseScan();
EXPECT_CALL(le_scanner_, StartScan()).Times(0);
le_scan_manager_.RestartScan();
task_environment_.RunUntilIdle();
// Create a handle.
EXPECT_CALL(le_scanner_, StartScan()).WillOnce(Return(true));
EXPECT_CALL(mock_observer_, OnScanEnableChanged(true));
le_scan_manager_.RequestScan(base::BindOnce(
&CopyResult<std::unique_ptr<LeScanManager::ScanHandle>>, &scan_handle));
task_environment_.RunUntilIdle();
ASSERT_TRUE(scan_handle);
// Pause scan, we shouldn't declare scan is disabled.
EXPECT_CALL(mock_observer_, OnScanEnableChanged(_)).Times(0);
EXPECT_CALL(le_scanner_, StopScan()).WillOnce(Return(true));
le_scan_manager_.PauseScan();
task_environment_.RunUntilIdle();
// Restart scan.
EXPECT_CALL(mock_observer_, OnScanEnableChanged(_)).Times(0);
EXPECT_CALL(le_scanner_, StartScan()).WillOnce(Return(true));
le_scan_manager_.RestartScan();
task_environment_.RunUntilIdle();
// Delete the handle.
EXPECT_CALL(le_scanner_, StopScan()).WillOnce(Return(true));
EXPECT_CALL(mock_observer_, OnScanEnableChanged(false));
scan_handle.reset();
task_environment_.RunUntilIdle();
}
TEST_F(LeScanManagerTest, TestMultipleHandles) {
static constexpr int kNumHandles = 20;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment