summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/bluetooth/resources/health-thermometer-iframe.html
diff options
context:
space:
mode:
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.html92
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>