<!DOCTYPE html>
<html>
  <head>
    <title>Allow lists starting with a comma should be parsed correctly</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/get-host-info.sub.js"></script>
  </head>
  <body>
  <script type="text/javascript">
    async_test(function(test) {
      const client = new XMLHttpRequest();
      let url = "xhr/resources/access-control-allow-lists.py?headers=,y-lol,x-print,%20,,,y-print&origin=" +
          get_host_info().HTTP_ORIGIN;
      client.open("GET", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false);
      client.setRequestHeader('x-print', 'unicorn')
      client.setRequestHeader('y-print', 'narwhal')
      // Sending GET request with custom headers
      assert_equals(client.send(null), undefined);
      const response = JSON.parse(client.response);
      assert_equals(response['x-print'], "unicorn");
      assert_equals(response['y-print'], "narwhal");

      url = "xhr/resources/access-control-allow-lists.py?methods=,,PUT,GET&origin=" +
          get_host_info().HTTP_ORIGIN;
      client.open("PUT", get_host_info().HTTP_REMOTE_ORIGIN + '/' + url, false);
      // Sending PUT request
      assert_equals(client.send(null), undefined);
      test.done();
    }, "Allow lists starting with a comma should be parsed correctly");
  </script>
  </body>
  </html>
