// META: script=websocket.sub.js

async_test(t => {
  function workerCode() {
    close();
    var ws = new WebSocket(self.location.origin.replace('http', 'ws'));
    var data = {
      originalState: ws.readyState,
      afterCloseState: null
     };

    ws.close();

    data.afterCloseState = ws.readyState;
    postMessage(data);
  }

  var workerBlob = new Blob([workerCode.toString() + ";workerCode();"], {
    type: "application/javascript"
  });

  var w = new Worker(URL.createObjectURL(workerBlob));
  w.onmessage = t.step_func(function(e) {
    assert_equals(e.data.originalState, WebSocket.CONNECTING, "WebSocket created on worker shutdown is in connecting state.");
    assert_equals(e.data.afterCloseState, WebSocket.CLOSING, "Closed WebSocket created on worker shutdown is in closing state.");
    t.done();
  });
}, 'WebSocket created after a worker self.close()');
