forked from mirrors/gecko-dev
		
	 0a8ff0ad85
			
		
	
	
		0a8ff0ad85
		
	
	
	
	
		
			
			# ignore-this-changeset Differential Revision: https://phabricator.services.mozilla.com/D35951 --HG-- extra : source : 62f3501af4bc1c0bd1ee1977a28aee04706a6663
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // This helper expects these globals to be defined.
 | |
| /* global PARAMS, SJS, testCases */
 | |
| 
 | |
| /*
 | |
|  * common functionality for iframe, anchor, and area referrer attribute tests
 | |
|  */
 | |
| const GET_RESULT = SJS + "ACTION=get-test-results";
 | |
| const RESET_STATE = SJS + "ACTION=resetState";
 | |
| 
 | |
| SimpleTest.waitForExplicitFinish();
 | |
| var advance = function() {
 | |
|   tests.next();
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Listen for notifications from the child.
 | |
|  * These are sent in case of error, or when the loads we await have completed.
 | |
|  */
 | |
| window.addEventListener("message", function(event) {
 | |
|   if (event.data == "childLoadComplete") {
 | |
|     // all loads happen, continue the test.
 | |
|     advance();
 | |
|   }
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * helper to perform an XHR
 | |
|  * to do checkIndividualResults and resetState
 | |
|  */
 | |
| function doXHR(aUrl, onSuccess, onFail) {
 | |
|   // The server is at http[s]://example.com so we need cross-origin XHR.
 | |
|   var xhr = new XMLHttpRequest({ mozSystem: true });
 | |
|   xhr.responseType = "json";
 | |
|   xhr.onload = function() {
 | |
|     onSuccess(xhr);
 | |
|   };
 | |
|   xhr.onerror = function() {
 | |
|     onFail(xhr);
 | |
|   };
 | |
|   xhr.open("GET", "http" + aUrl, true);
 | |
|   xhr.send(null);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Grabs the results via XHR and passes to checker.
 | |
|  */
 | |
| function checkIndividualResults(aTestname, aExpectedReferrer, aName) {
 | |
|   var onload = xhr => {
 | |
|     var results = xhr.response;
 | |
|     info(JSON.stringify(xhr.response));
 | |
|     ok(aName in results, aName + " tests have to be performed.");
 | |
|     is(
 | |
|       results[aName].policy,
 | |
|       aExpectedReferrer,
 | |
|       aTestname +
 | |
|         " --- " +
 | |
|         results[aName].policy +
 | |
|         " (" +
 | |
|         results[aName].referrer +
 | |
|         ")"
 | |
|     );
 | |
|     advance();
 | |
|   };
 | |
|   var onerror = xhr => {
 | |
|     ok(false, "Can't get results from the counter server.");
 | |
|     SimpleTest.finish();
 | |
|   };
 | |
|   doXHR(GET_RESULT, onload, onerror);
 | |
| }
 | |
| 
 | |
| function resetState() {
 | |
|   doXHR(RESET_STATE, advance, function(xhr) {
 | |
|     ok(false, "error in reset state");
 | |
|     SimpleTest.finish();
 | |
|   });
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * testing if referrer header is sent correctly
 | |
|  */
 | |
| var tests = (function*() {
 | |
|   yield SpecialPowers.pushPrefEnv(
 | |
|     { set: [["network.preload", true]] },
 | |
|     advance
 | |
|   );
 | |
|   yield SpecialPowers.pushPrefEnv(
 | |
|     { set: [["security.mixed_content.block_active_content", false]] },
 | |
|     advance
 | |
|   );
 | |
|   yield SpecialPowers.pushPermissions(
 | |
|     [{ type: "systemXHR", allow: true, context: document }],
 | |
|     advance
 | |
|   );
 | |
| 
 | |
|   var iframe = document.getElementById("testframe");
 | |
| 
 | |
|   for (var j = 0; j < testCases.length; j++) {
 | |
|     if (testCases[j].PREFS) {
 | |
|       yield SpecialPowers.pushPrefEnv({ set: testCases[j].PREFS }, advance);
 | |
|     }
 | |
| 
 | |
|     var actions = testCases[j].ACTION;
 | |
|     var subTests = testCases[j].TESTS;
 | |
|     for (var k = 0; k < actions.length; k++) {
 | |
|       var actionString = actions[k];
 | |
|       for (var i = 0; i < subTests.length; i++) {
 | |
|         yield resetState();
 | |
|         var searchParams = new URLSearchParams();
 | |
|         searchParams.append("ACTION", actionString);
 | |
|         searchParams.append("NAME", subTests[i].NAME);
 | |
|         for (var l of PARAMS) {
 | |
|           if (subTests[i][l]) {
 | |
|             searchParams.append(l, subTests[i][l]);
 | |
|           }
 | |
|         }
 | |
|         var schemeFrom = subTests[i].SCHEME_FROM || "http";
 | |
|         yield (iframe.src = schemeFrom + SJS + searchParams.toString());
 | |
|         yield checkIndividualResults(
 | |
|           subTests[i].DESC,
 | |
|           subTests[i].RESULT,
 | |
|           subTests[i].NAME
 | |
|         );
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // complete.
 | |
|   SimpleTest.finish();
 | |
| })();
 |