<!DOCTYPE html>
<script src="/js-test-resources/testharness.js"></script>
<script src="/js-test-resources/testharnessreport.js"></script>
<script>
'use strict';

// These tests test WebSocket handshake throttling, which is a feature of
// Blink's implementation, not part of the web platform. The special throttle
// content::TestWebSocketHandshakeThrottle is used when content_shell is run
// with the --run-web-tests option. It detects the
// content-shell-websocket-delay-ms query parameter in the URL and applies a
// delay of the specified number of milliseconds.
//
// These tests will not function correctly without the --run-web-tests
// option. To debug them interactively you can follow the instructions for a
// "legacy test" in
// https://chromium.googlesource.com/chromium/src/+/master/docs/testing/layout_tests.md#Debugging-DevTools-Tests.

async_test(t => {
  const startTime = Date.now();
  const ws = new WebSocket(
      'ws://localhost:8880/echo?content-shell-websocket-delay-ms=250');
  ws.onopen = t.step_func(() => {
    const endTime = Date.now();
    assert_greater_than_equal(endTime - startTime, 250,
                              'elapsed time should be greater than 250ms');
    ws.close();
  });
  ws.onclose = t.step_func(e => {
    assert_true(e.wasClean, 'close handshake should complete successfully');
    t.done();
  });
}, 'throttle should delay connection success');

async_test(t => {
  const startTime = Date.now();
  // The test doesn't have to wait for this delay, so it is extra-long to reduce
  // flakiness on slow bots.
  const ws = new WebSocket(
      'ws://localhost:8880/handshake-error?content-shell-websocket-delay-ms=2000');
  ws.onopen = t.unreached_func('onopen should not be called');
  ws.onclose = t.step_func(e => {
    const endTime = Date.now();
    assert_false(e.wasClean, 'WebSocket should not be cleanly closed');
    assert_less_than(endTime - startTime, 2000,
                     'elapsed time should be less than 2000ms');
    t.done();
  });
}, 'throttle should not delay connection failure');

// Regression test for crbug.com/786776.
async_test(t => {
  // The "echo-request-headers" handler sends a message immediately on connect,
  // then closes.
  const ws = new WebSocket(
      'ws://localhost:8880/echo-request-headers?content-shell-websocket-delay-ms=250');
  let onOpenCalled = false;
  let onMessageCalled = false;
  ws.onopen = () => {
    onOpenCalled = true;
  };
  ws.onmessage = t.step_func(() => {
    assert_true(onOpenCalled, 'onopen should happen before onmessage');
    onMessageCalled = true;
  });
  ws.onclose = t.step_func(e => {
    assert_true(e.wasClean, 'close handshake should complete successfully');
    assert_true(onMessageCalled, 'onmessage should be called');
    t.done();
  });
}, 'throttle should not prevent onmessage events');

</script>
