// Copyright 2017 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(`Tests network panel timing.\n`);
  await TestRunner.loadModule('network_test_runner');
  await TestRunner.loadModule('console_test_runner');
  await TestRunner.showPanel('network');
  await TestRunner.evaluateInPagePromise(`
      function loadScripts()
      {
          // Wait 100 ms, then serve for 200ms file containing 300ms loop.
          var script = document.createElement("script");
          script.setAttribute("src", "resources/resource.php?type=js&wait=100&send=200&jsdelay=300&jscontent=resourceLoaded()");
          document.head.appendChild(script);

          // Wait 100 ms, then serve for 100ms and call console.log in content.
          script = document.createElement("script");
          script.setAttribute("src", "resources/resource.php?type=js&wait=100&send=100&jscontent=resourceLoaded()");
          document.head.appendChild(script);
      }

      var loadedResourceCount = 0;
      function resourceLoaded()
      {
          if (++loadedResourceCount === 2)
              console.log("Done.");
      }
  `);

  ConsoleTestRunner.addConsoleSniffer(step2);
  TestRunner.evaluateInPage('loadScripts()');

  function step2() {
    // inspector-test.js appears in network panel occasionally in Safari on
    // Mac, so checking two last requests.
    var timerThreshold = 15;  // Windows timer accuracy.
    var requests = NetworkTestRunner.networkRequests();
    var requestsCount = requests.length;
    var request1 = requests[requestsCount - 2];
    TestRunner.addResult(request1.url());
    TestRunner.assertGreaterOrEqual(request1.latency * 1000, 100 - timerThreshold, 'Latency of the first resource');
    TestRunner.assertGreaterOrEqual(request1.duration * 1000, 300 - timerThreshold, 'Duration of the first resource');

    var request2 = requests[requestsCount - 1];
    TestRunner.addResult(request2.url());
    TestRunner.assertGreaterOrEqual(request2.latency * 1000, 100 - timerThreshold, 'Latency of the second resource');
    TestRunner.assertGreaterOrEqual(request2.duration * 1000, 100 - timerThreshold, 'Duration of the second resource');
    TestRunner.completeTest();
  }
})();
