blob: 265d83866b991bc24005a19c7512a9624578b01f [file] [log] [blame]
<!doctype html>
<title>RequestLEScan Visiblility Test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/bluetooth/resources/bluetooth-test.js"></script>
<script src="/bluetooth/resources/bluetooth-fake-devices.js"></script>
<script src="/bluetooth/resources/bluetooth-scanning-helpers.js"></script>
<script>
'use strict';
function setMainWindowHidden(hidden) {
return new Promise((resolve, reject) => {
if (!window.testRunner) {
reject("no window.testRunner present");
return;
}
if (document.visibilityState == (hidden ? "hidden" : "visible")) {
reject("setMainWindowHidden(" + hidden + ") called but already " + hidden);
return;
}
document.addEventListener("visibilitychange", resolve, {once:true});
testRunner.setMainWindowHidden(hidden);
});
}
let ble_scan;
bluetooth_test(async (t) => {
navigator.bluetooth.addEventListener('advertisementreceived', () => {
t.unreached_func('Should not receive advertisementreceived if the page was hidden');
});
const fake_central = await navigator.bluetooth.test.simulateCentral({state: 'powered-on'});
await callWithTrustedClick(async () => {
ble_scan = await navigator.bluetooth.requestLEScan(
{acceptAllAdvertisements: true});
});
assert_true(ble_scan.active, "ble_scan.active should be true since we just requested it");
let scan_result = {
deviceAddress: '09:09:09:09:09:09',
rssi: 100,
scanRecord: {
txPower: 20,
},
};
await setMainWindowHidden(true);
assert_false(ble_scan.active, "ble_scan.active should be false after visiblility change");
// We should not receive a bluetooth scan result if the page was put into the background.
fake_central.simulateAdvertisementReceived(scan_result);
await setMainWindowHidden(false);
assert_false(ble_scan.active, "ble_scan.active should still be false after page returns to being visible");
// We should not receive a bluetooth scan result even if the page returns to being visible
fake_central.simulateAdvertisementReceived(scan_result);
// We want to make sure that there is time between the simulation of
// the event and leaving this test so that we don't accidently miss
// the event.
function wait(ms) {
return new Promise(resolve => step_timeout(resolve, ms));
}
return wait(500);
}, 'requestLEScan active=false post page visiblility change.');
</script>