blob: 78774b4d158f6ad69c3161207bc4549d01b3dda5 [file] [log] [blame]
<!DOCTYPE html>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<body>
<button>Click me!</button>
<script>
let device, gatt;
test_driver.set_test_context(parent);
function requestDeviceWithOptionsAndConnect(options) {
return test_driver.click(document.getElementsByTagName("button")[0])
.then(() => navigator.bluetooth.requestDevice(options))
.then(device => device.gatt.connect());
}
window.addEventListener('message', (messageEvent) => {
switch (messageEvent.data.type) {
case 'GetAvailability':
navigator.bluetooth.getAvailability().then(
availability => parent.postMessage(availability, '*'));
break;
case 'RequestDevice':
test_driver.click(document.getElementsByTagName("button")[0])
.then(() => navigator.bluetooth
.requestDevice({filters: [{services: ['generic_access']}]}))
.then(device => {
if (device.constructor.name === 'BluetoothDevice') {
parent.postMessage('Success', '*');
} else {
parent.postMessage(
`FAIL: requestDevice in iframe returned ${device.name}`, '*');
}
})
.catch(err => parent.postMessage(`${err.name}: ${err.message}`, '*'));
break;
case 'RequestAndConnect':
requestDeviceWithOptionsAndConnect(messageEvent.data.options)
.then(_ => {
gatt = _;
device = gatt.device;
parent.postMessage('Connected', '*');
})
.catch(err => {
parent.postMessage(`FAIL: ${err}`, '*');
});
break;
case 'DiscoverServices':
requestDeviceWithOptionsAndConnect(messageEvent.data.options)
.then(gatt => gatt.getPrimaryServices())
.then(() => parent.postMessage('DiscoveryComplete', '*'))
.catch(err => {
parent.postMessage(`FAIL: ${err}`, '*');
});
break;
case 'GetService':
if (typeof gatt === 'undefined') {
parent.postMessage('FAIL: no GATT server', '*');
break;
}
gatt.getPrimaryService(messageEvent.data.options)
.then(() => parent.postMessage('ServiceReceived', '*'))
.catch(err => parent.postMessage(`FAIL: ${err}`, '*'));
break;
default:
parent.postMessage(
`FAIL: Bad message type: ${messageEvent.data.type}`, '*');
}
});
</script>