// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

(async function() {
  TestRunner.addResult(
      'Verifies that Network.*ExtraInfo events get assigned to the correct SDK.NetworkRequest instance in the case of cross origin redirects.');
  await TestRunner.loadModule('network_test_runner');

  await TestRunner.evaluateInPageAsync(`
new Promise(resolve => {
  xhr = new XMLHttpRequest();
  xhr.open('GET', 'http://redirect-one.test:8000/devtools/network/resources/redirect-1.php');
  xhr.send();
  xhr.onreadystatechange = () => {
    if (xhr.readyState === XMLHttpRequest.DONE)
      resolve();
  };
});
`);

  const reqs = NetworkTestRunner.networkRequests()
                   .map(request => {
                     return {
                       url: request.url(),
                       hasExtraRequestInfo: request.hasExtraRequestInfo(),
                       hasExtraResponseInfo: request.hasExtraResponseInfo(),
                       requestHostHeader: request.requestHeaderValue('host'),
                       responseXDevToolsRedirectHeader:
                           request.responseHeaderValue('x-devtools-redirect')
                     };
                   });
  TestRunner.addResult(JSON.stringify(reqs, null, 2));
  TestRunner.completeTest();
})();
