(async function(testRunner) {
  var {page, session, dp} = await testRunner.startBlank(
      `Tests that redirect from navigator.sendBeacon() is recorded.`);

  function parseURL(url) {
    var result = {};
    var match = url.match(/^([^:]+):\/\/([^\/:]*)(?::([\d]+))?(?:(\/[^#]*)(?:#(.*))?)?$/i);
    if (!match)
      return result;
    result.scheme = match[1].toLowerCase();
    result.host = match[2];
    result.port = match[3];
    result.path = match[4] || "/";
    result.fragment = match[5];
    return result;
  }

  await dp.Network.enable();
  session.evaluate(`
    navigator.sendBeacon('${testRunner.url('resources/ping-redirect.php')}', 'foo');
  `);

  var requestSent = 0;
  dp.Network.onRequestWillBeSent(event => {
    requestSent++;
    var params = event.params;
    testRunner.log('Request Sent: ' + parseURL(params.request.url).path);
    if (requestSent == 2) {
      var redirectSource = '';
      if (params.redirectResponse)
        redirectSource = parseURL(params.redirectResponse.url).path;
      testRunner.log('Redirect Source: ' + redirectSource);
      testRunner.completeTest();
    }
  });
})
