diff options
Diffstat (limited to 'testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html')
-rw-r--r-- | testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html b/testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html new file mode 100644 index 0000000000..f9f7a6f0d7 --- /dev/null +++ b/testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html @@ -0,0 +1,92 @@ +<!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, '*')) + .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); + break; + case 'GetDevices': + navigator.bluetooth.getDevices() + .then(devices => parent.postMessage('Success', '*')) + .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); + 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(`FAIL: ${err.name}: ${err.message}`, '*')); + break; + case 'RequestLEScan': + test_driver.click(document.getElementsByTagName('button')[0]) + .then( + () => navigator.bluetooth.requestLEScan( + {filters: [{name: 'Health Thermometer'}]})) + .then(leScan => { + if (leScan.active) { + parent.postMessage('Success', '*'); + leScan.stop(); + } else { + parent.postMessage(`FAIL: the LE scan hasn't been initiated.`, '*'); + } + }) + .catch(err => parent.postMessage(`FAIL: ${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> |