chromium/net/data/websocket/close_observer.html

<!doctype html>
<title>Observe the connection from a closed tab "Going Away"</title>
<script>
'use strict';

let protocol = location.protocol.replace('http', 'ws');
let url = protocol + '//' + location.host + '/close-observer?role=observer';

// Do connection test.
let ws = new WebSocket(url);

const id = setTimeout(() => {
  console.log('close_observer.html had timeout');
  document.title = 'FAIL';
}, 3000);

ws.onmessage = e => {
  clearTimeout(id);
  console.log('close_observer.html got message: ' + e.data);
  document.title = (e.data === 'OK' ? 'PASS' : 'FAIL');
  ws.onclose = null;
}

ws.onclose = () => {
  clearTimeout(id);
  console.log('close_observer.html saw close with no message');
  document.title = 'FAIL';
}

</script>