<script src="/common/get-host-info.sub.js"></script>
<script src="test-helpers.sub.js?pipe=sub"></script>
<script>
var host_info = get_host_info();

function xhr_send(method, data) {
  return new Promise(function(resolve, reject) {
      var xhr = new XMLHttpRequest();
      xhr.onload = function() {
        resolve(xhr);
      };
      xhr.onerror = function() {
        reject('XHR should succeed.');
      };
      xhr.responseType = 'text';
      xhr.open(method, './dummy?test', true);
      xhr.send(data);
    });
}

function coalesce_headers_test() {
  return xhr_send('POST', 'test string')
  .then(function(xhr) {
      window.parent.postMessage({results: xhr.getResponseHeader('foo')},
                                host_info['HTTPS_ORIGIN']);

      return new Promise(function(resolve) {
          window.addEventListener('message', function handle(evt) {
              if (event.data !== 'ACK') {
                return;
              }

              window.removeEventListener('message', handle);
              resolve();
            });
        });
    });
}

window.addEventListener('message', function(evt) {
    var port;

    if (event.data !== 'START') {
      return;
    }

    port = evt.ports[0];

    coalesce_headers_test()
      .then(function() { port.postMessage({results: 'finish'}); })
      .catch(function(e) { port.postMessage({results: 'failure:' + e}); });
  });
</script>
