text: // Copyright 2020 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() {
      'use strict';
      TestRunner.addResult(`Tests that serviceworker timings are displayed correctly.\n`);
      await TestRunner.loadModule('application_test_runner');
      await TestRunner.loadModule('network_test_runner');
      await TestRunner.showPanel('network');
  
      await TestRunner.reloadPagePromise();
      // Reload page
  
      function setRequestValues(request) {
        request.setRequestHeaders([{name: 'Request', value: 'request-value'}]);
        request.setRequestHeadersText('GET http://example.com/inspector-test.js HTTP/1.1\r\nRequest: headers-text');
  
        request.responseHeaders = [{name: 'Response', value: 'response-value'}];
        request.responseHeadersText = 'HTTP/1.1 200 OK\r\nResponse: headers-text';
  
        request.requestMethod = 'GET';
        request.mimeType = 'text/html';
        request.statusCode = 200;
        request.statusText = 'OK';
        request.setPriority('VeryHigh');
  
        // sample timing values used here are copied from a real request
        request.setIssueTime(559396.428899);
        request.endTime = 559396.439805;
        request.fetchedViaServiceWorker = true;
        request.timing = {
          'connectEnd': -1,
          'connectStart': -1,
          'dnsEnd': -1,
          'dnsStart': -1,
          'proxyEnd': -1,
          'proxyStart': -1,
          'pushEnd': 0,
          'pushStart': 0,
          'receiveHeadersEnd': 6.718,
          'requestTime': 559396.428899,
          'sendEnd': 0.003,
          'sendStart': 0.003,
          'sslEnd': -1,
          'sslStart': -1,
          'workerFetchStart': 0.484,
          'workerReady': 0.484,
          'workerRespondWithSettled': 5.959,
          'workerStart': 0.003,
        };
      }
  
      const fakeInitiator = {
        type: 'parser',
        url: 'http://example.com/inspector-test.js',
        lineNumber: 117
      };
      var testRequest = new SDK.NetworkRequest(
          'testRequest', 'http://example.com/inspector-test.js', 'http://example.com/fake-document-url', 1, 1, fakeInitiator);
      setRequestValues(testRequest);
  
      const calculator = UI.panels.network._calculator;
      const tableElement = Network.RequestTimingView.createTimingTable(testRequest, calculator);
  
      for (const element of tableElement.getElementsByTagName('td')) {
        const content = element.textContent;
        // Exclude timings that depend on runtime calculations
        if (!content.includes('Queued at') && !content.includes('Started at')) {
          TestRunner.addResult(element.textContent);
        }
      }
  
      TestRunner.completeTest();
    })();
  