|  | let manualTestPort = null; | 
|  |  | 
|  | navigator.serial.addEventListener('disconnect', (e) => { | 
|  | if (e.target === manualTestPort) { | 
|  | manualTestPort = null; | 
|  | } | 
|  | }) | 
|  |  | 
|  | async function getPortForManualTest() { | 
|  | if (manualTestPort) { | 
|  | return manualTestPort; | 
|  | } | 
|  |  | 
|  | const button = document.createElement('button'); | 
|  | button.textContent = 'Click to select a device'; | 
|  | button.style.display = 'block'; | 
|  | button.style.fontSize = '20px'; | 
|  | button.style.padding = '10px'; | 
|  |  | 
|  | await new Promise((resolve) => { | 
|  | button.onclick = () => { | 
|  | document.body.removeChild(button); | 
|  | resolve(); | 
|  | }; | 
|  | document.body.appendChild(button); | 
|  | }); | 
|  |  | 
|  | manualTestPort = await navigator.serial.requestPort({filters: []}); | 
|  | assert_true(manualTestPort instanceof SerialPort); | 
|  |  | 
|  | return manualTestPort; | 
|  | } | 
|  |  | 
|  | function manual_serial_test(func, name, properties) { | 
|  | promise_test(async (test) => { | 
|  | await func(test, await getPortForManualTest()); | 
|  | }, name, properties); | 
|  | } |