health-thermometer-iframe.html (3360B)
1 <!DOCTYPE html> 2 <script src="/resources/testdriver.js"></script> 3 <script src="/resources/testdriver-vendor.js"></script> 4 <body> 5 <button>Click me!</button> 6 <script> 7 let device, gatt; 8 9 test_driver.set_test_context(parent); 10 11 function requestDeviceWithOptionsAndConnect(options) { 12 return test_driver.click(document.getElementsByTagName("button")[0]) 13 .then(() => navigator.bluetooth.requestDevice(options)) 14 .then(device => device.gatt.connect()); 15 } 16 17 window.addEventListener('message', (messageEvent) => { 18 switch (messageEvent.data.type) { 19 case 'GetAvailability': 20 navigator.bluetooth.getAvailability() 21 .then(availability => parent.postMessage(availability, '*')) 22 .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); 23 break; 24 case 'GetDevices': 25 navigator.bluetooth.getDevices() 26 .then(devices => parent.postMessage('Success', '*')) 27 .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); 28 break; 29 case 'RequestDevice': 30 test_driver.click(document.getElementsByTagName('button')[0]) 31 .then( 32 () => navigator.bluetooth.requestDevice( 33 {filters: [{services: ['generic_access']}]})) 34 .then(device => { 35 if (device.constructor.name === 'BluetoothDevice') { 36 parent.postMessage('Success', '*'); 37 } else { 38 parent.postMessage( 39 `FAIL: requestDevice in iframe returned ${device.name}`, '*'); 40 } 41 }) 42 .catch(err => parent.postMessage(`FAIL: ${err.name}: ${err.message}`, '*')); 43 break; 44 case 'RequestLEScan': 45 test_driver.click(document.getElementsByTagName('button')[0]) 46 .then( 47 () => navigator.bluetooth.requestLEScan( 48 {filters: [{name: 'Health Thermometer'}]})) 49 .then(leScan => { 50 if (leScan.active) { 51 parent.postMessage('Success', '*'); 52 leScan.stop(); 53 } else { 54 parent.postMessage(`FAIL: the LE scan hasn't been initiated.`, '*'); 55 } 56 }) 57 .catch(err => parent.postMessage(`FAIL: ${err.name}: ${err.message}`, '*')); 58 break; 59 case 'RequestAndConnect': 60 requestDeviceWithOptionsAndConnect(messageEvent.data.options) 61 .then(_ => { 62 gatt = _; 63 device = gatt.device; 64 parent.postMessage('Connected', '*'); 65 }) 66 .catch(err => { 67 parent.postMessage(`FAIL: ${err}`, '*'); 68 }); 69 break; 70 case 'DiscoverServices': 71 requestDeviceWithOptionsAndConnect(messageEvent.data.options) 72 .then(gatt => gatt.getPrimaryServices()) 73 .then(() => parent.postMessage('DiscoveryComplete', '*')) 74 .catch(err => { 75 parent.postMessage(`FAIL: ${err}`, '*'); 76 }); 77 break; 78 case 'GetService': 79 if (typeof gatt === 'undefined') { 80 parent.postMessage('FAIL: no GATT server', '*'); 81 break; 82 } 83 gatt.getPrimaryService(messageEvent.data.options) 84 .then(() => parent.postMessage('ServiceReceived', '*')) 85 .catch(err => parent.postMessage(`FAIL: ${err}`, '*')); 86 break; 87 default: 88 parent.postMessage( 89 `FAIL: Bad message type: ${messageEvent.data.type}`, '*'); 90 } 91 }); 92 </script>