forked from mirrors/gecko-dev
		
	 57077f89fc
			
		
	
	
		57077f89fc
		
	
	
	
	
		
			
			Backed out changeset 289d233f1266 (bug 1783565) Backed out changeset 3523c3cede7d (bug 1783565) Backed out changeset cc2d5eaf69d2 (bug 1783565) Backed out changeset 7e11b0d6e731 (bug 1783565)
		
			
				
	
	
		
			163 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			163 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var prefs;
 | |
| var http2pref;
 | |
| var origin;
 | |
| var rcwnpref;
 | |
| 
 | |
| function run_test() {
 | |
|   var env = Cc["@mozilla.org/process/environment;1"].getService(
 | |
|     Ci.nsIEnvironment
 | |
|   );
 | |
|   var h2Port = env.get("MOZHTTP2_PORT");
 | |
|   Assert.notEqual(h2Port, null);
 | |
|   Assert.notEqual(h2Port, "");
 | |
| 
 | |
|   // Set to allow the cert presented by our H2 server
 | |
|   do_get_profile();
 | |
|   prefs = Services.prefs;
 | |
| 
 | |
|   http2pref = prefs.getBoolPref("network.http.http2.enabled");
 | |
|   rcwnpref = prefs.getBoolPref("network.http.rcwn.enabled");
 | |
| 
 | |
|   prefs.setBoolPref("network.http.http2.enabled", true);
 | |
|   prefs.setCharPref(
 | |
|     "network.dns.localDomains",
 | |
|     "foo.example.com, bar.example.com"
 | |
|   );
 | |
|   // Disable rcwn to make cache behavior deterministic.
 | |
|   prefs.setBoolPref("network.http.rcwn.enabled", false);
 | |
| 
 | |
|   // The moz-http2 cert is for foo.example.com and is signed by http2-ca.pem
 | |
|   // so add that cert to the trust list as a signing cert.  // the foo.example.com domain name.
 | |
|   let certdb = Cc["@mozilla.org/security/x509certdb;1"].getService(
 | |
|     Ci.nsIX509CertDB
 | |
|   );
 | |
|   addCertFromFile(certdb, "http2-ca.pem", "CTu,u,u");
 | |
| 
 | |
|   origin = "https://foo.example.com:" + h2Port;
 | |
|   dump("origin - " + origin + "\n");
 | |
|   doTest1();
 | |
| }
 | |
| 
 | |
| function resetPrefs() {
 | |
|   prefs.setBoolPref("network.http.http2.enabled", http2pref);
 | |
|   prefs.setBoolPref("network.http.rcwn.enabled", rcwnpref);
 | |
|   prefs.clearUserPref("network.dns.localDomains");
 | |
| }
 | |
| 
 | |
| function makeChan(origin, path) {
 | |
|   return NetUtil.newChannel({
 | |
|     uri: origin + path,
 | |
|     loadUsingSystemPrincipal: true,
 | |
|   }).QueryInterface(Ci.nsIHttpChannel);
 | |
| }
 | |
| 
 | |
| var nextTest;
 | |
| var expectPass = true;
 | |
| var expectConditional = false;
 | |
| 
 | |
| var Listener = function() {};
 | |
| Listener.prototype = {
 | |
|   onStartRequest: function testOnStartRequest(request) {
 | |
|     Assert.ok(request instanceof Ci.nsIHttpChannel);
 | |
| 
 | |
|     if (expectPass) {
 | |
|       if (!Components.isSuccessCode(request.status)) {
 | |
|         do_throw(
 | |
|           "Channel should have a success code! (" + request.status + ")"
 | |
|         );
 | |
|       }
 | |
|       Assert.equal(request.responseStatus, 200);
 | |
|     } else {
 | |
|       Assert.equal(Components.isSuccessCode(request.status), false);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   onDataAvailable: function testOnDataAvailable(request, stream, off, cnt) {
 | |
|     read_stream(stream, cnt);
 | |
|   },
 | |
| 
 | |
|   onStopRequest: function testOnStopRequest(request, status) {
 | |
|     if (expectConditional) {
 | |
|       Assert.equal(request.getResponseHeader("x-conditional"), "true");
 | |
|     } else {
 | |
|       try {
 | |
|         Assert.notEqual(request.getResponseHeader("x-conditional"), "true");
 | |
|       } catch (e) {
 | |
|         Assert.ok(true);
 | |
|       }
 | |
|     }
 | |
|     nextTest();
 | |
|     do_test_finished();
 | |
|   },
 | |
| };
 | |
| 
 | |
| function testsDone() {
 | |
|   dump("testDone\n");
 | |
|   resetPrefs();
 | |
| }
 | |
| 
 | |
| function doTest1() {
 | |
|   dump("execute doTest1 - resource without immutable. initial request\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = false;
 | |
|   var chan = makeChan(origin, "/immutable-test-without-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = doTest2;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 | |
| 
 | |
| function doTest2() {
 | |
|   dump("execute doTest2 - resource without immutable. reload\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = true;
 | |
|   var chan = makeChan(origin, "/immutable-test-without-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = doTest3;
 | |
|   chan.loadFlags = Ci.nsIRequest.VALIDATE_ALWAYS;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 | |
| 
 | |
| function doTest3() {
 | |
|   dump("execute doTest3 - resource without immutable. shift reload\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = false;
 | |
|   var chan = makeChan(origin, "/immutable-test-without-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = doTest4;
 | |
|   chan.loadFlags = Ci.nsIRequest.LOAD_BYPASS_CACHE;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 | |
| 
 | |
| function doTest4() {
 | |
|   dump("execute doTest1 - resource with immutable. initial request\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = false;
 | |
|   var chan = makeChan(origin, "/immutable-test-with-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = doTest5;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 | |
| 
 | |
| function doTest5() {
 | |
|   dump("execute doTest5 - resource with immutable. reload\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = false;
 | |
|   var chan = makeChan(origin, "/immutable-test-with-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = doTest6;
 | |
|   chan.loadFlags = Ci.nsIRequest.VALIDATE_ALWAYS;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 | |
| 
 | |
| function doTest6() {
 | |
|   dump("execute doTest3 - resource with immutable. shift reload\n");
 | |
|   do_test_pending();
 | |
|   expectConditional = false;
 | |
|   var chan = makeChan(origin, "/immutable-test-with-attribute");
 | |
|   var listener = new Listener();
 | |
|   nextTest = testsDone;
 | |
|   chan.loadFlags = Ci.nsIRequest.LOAD_BYPASS_CACHE;
 | |
|   chan.asyncOpen(listener);
 | |
| }
 |