tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

serialPort_disconnect-manual.https.html (2664B)


      1 <!DOCTYPE html>
      2 <html>
      3  <head>
      4    <meta charset="utf-8">
      5    <title></title>
      6    <script src="/resources/testharness.js"></script>
      7    <script src="/resources/testharnessreport.js"></script>
      8    <script src="resources/common.js"></script>
      9    <script src="resources/manual.js"></script>
     10  </head>
     11  <body>
     12    <p>
     13      These tests require a serial device to be connected and disconnected.
     14    </p>
     15    <script>
     16      manual_serial_test(async (t, port) => {
     17        const watcher = new EventWatcher(t, navigator.serial, ['disconnect']);
     18 
     19        await port.open({baudRate: 115200, bufferSize: 1024});
     20 
     21        const disconnectPromise = watcher.wait_for(['disconnect'])
     22        const reader = port.readable.getReader();
     23 
     24        const disconnectMessage = document.createElement('div');
     25        disconnectMessage.textContent = 'Disconnect the device now.';
     26        document.body.appendChild(disconnectMessage);
     27 
     28        try {
     29          while (true) {
     30            const {value, done} = await reader.read();
     31            // Ignore |value| in case the device happens to produce data. It is
     32            // not important for this test.
     33            assert_false(done);
     34          }
     35        } catch (e) {
     36          assert_equals(e.constructor, DOMException);
     37          assert_equals(e.name, 'NetworkError');
     38        }
     39        reader.releaseLock();
     40        assert_equals(port.readable, null);
     41 
     42        let event = await disconnectPromise;
     43        assert_equals(event.target, port);
     44 
     45        disconnectMessage.remove();
     46 
     47        await port.close();
     48      }, 'Disconnect during read is detected.');
     49 
     50      manual_serial_test(async (t, port) => {
     51        const watcher = new EventWatcher(t, navigator.serial, ['disconnect']);
     52 
     53        await port.open({baudRate: 115200, bufferSize: 1024});
     54 
     55        const disconnectPromise = watcher.wait_for(['disconnect'])
     56        const writer = port.writable.getWriter();
     57 
     58        const disconnectMessage = document.createElement('div');
     59        disconnectMessage.textContent = 'Disconnect the device now.';
     60        document.body.appendChild(disconnectMessage);
     61 
     62        const data = new Uint8Array(4096);
     63        try {
     64          while (true) {
     65            await writer.write(data);
     66          }
     67        } catch (e) {
     68          assert_equals(e.constructor, DOMException);
     69          assert_equals(e.name, 'NetworkError');
     70        }
     71        writer.releaseLock();
     72        assert_equals(port.writable, null);
     73 
     74        let event = await disconnectPromise;
     75        assert_equals(event.target, port);
     76 
     77        disconnectMessage.remove();
     78 
     79        await port.close();
     80      }, 'Disconnect during write is detected.');
     81    </script>
     82  </body>
     83 </html>