forked from mirrors/gecko-dev
		
	Differential Revision: https://phabricator.services.mozilla.com/D69257 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* This Source Code Form is subject to the terms of the Mozilla Public
 | 
						|
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 | 
						|
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 | 
						|
 | 
						|
//
 | 
						|
//  HTTP Server-Timing header test
 | 
						|
//
 | 
						|
 | 
						|
"use strict";
 | 
						|
 | 
						|
function make_and_open_channel(url, callback) {
 | 
						|
  let chan = NetUtil.newChannel({ uri: url, loadUsingSystemPrincipal: true });
 | 
						|
  chan.asyncOpen(new ChannelListener(callback, null, CL_ALLOW_UNKNOWN_CL));
 | 
						|
}
 | 
						|
 | 
						|
var responseServerTiming = [
 | 
						|
  { metric: "metric", duration: "123.4", description: "description" },
 | 
						|
  { metric: "metric2", duration: "456.78", description: "description1" },
 | 
						|
];
 | 
						|
var trailerServerTiming = [
 | 
						|
  { metric: "metric3", duration: "789.11", description: "description2" },
 | 
						|
  { metric: "metric4", duration: "1112.13", description: "description3" },
 | 
						|
];
 | 
						|
 | 
						|
function run_test() {
 | 
						|
  do_test_pending();
 | 
						|
 | 
						|
  // Set up to allow the cert presented by the server
 | 
						|
  do_get_profile();
 | 
						|
  let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
 | 
						|
    Ci.nsIX509CertDB
 | 
						|
  );
 | 
						|
  addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u");
 | 
						|
 | 
						|
  Services.prefs.setCharPref("network.dns.localDomains", "foo.example.com");
 | 
						|
  registerCleanupFunction(() => {
 | 
						|
    Services.prefs.clearUserPref("network.dns.localDomains");
 | 
						|
  });
 | 
						|
 | 
						|
  var env = Cc["@mozilla.org/process/environment;1"].getService(
 | 
						|
    Ci.nsIEnvironment
 | 
						|
  );
 | 
						|
  var serverPort = env.get("MOZHTTP2_PORT");
 | 
						|
  make_and_open_channel(
 | 
						|
    "https://foo.example.com:" + serverPort + "/server-timing",
 | 
						|
    readServerContent
 | 
						|
  );
 | 
						|
}
 | 
						|
 | 
						|
function checkServerTimingContent(headers) {
 | 
						|
  var expectedResult = responseServerTiming.concat(trailerServerTiming);
 | 
						|
  Assert.equal(headers.length, expectedResult.length);
 | 
						|
 | 
						|
  for (var i = 0; i < expectedResult.length; i++) {
 | 
						|
    let header = headers.queryElementAt(i, Ci.nsIServerTiming);
 | 
						|
    Assert.equal(header.name, expectedResult[i].metric);
 | 
						|
    Assert.equal(header.description, expectedResult[i].description);
 | 
						|
    Assert.equal(header.duration, parseFloat(expectedResult[i].duration));
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
function readServerContent(request, buffer) {
 | 
						|
  let channel = request.QueryInterface(Ci.nsITimedChannel);
 | 
						|
  let headers = channel.serverTiming.QueryInterface(Ci.nsIArray);
 | 
						|
  checkServerTimingContent(headers);
 | 
						|
  do_test_finished();
 | 
						|
}
 |