forked from mirrors/gecko-dev
		
	 b30ac6aacd
			
		
	
	
		b30ac6aacd
		
	
	
	
	
		
			
			Depends on D1643 MozReview-Commit-ID: 84M50HDg0wl Differential Revision: https://phabricator.services.mozilla.com/D1644
		
			
				
	
	
		
			139 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML>
 | |
| <html>
 | |
| <head>
 | |
|   <title>Bug 1233914 - ping doesn't honor the TP list here.</title>
 | |
|   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
 | |
|   <script type="text/javascript" src="classifierHelper.js"></script>
 | |
|   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 | |
| </head>
 | |
| 
 | |
| <body>
 | |
| <p id="display"></p>
 | |
| <div id="content" style="display: none">
 | |
| </div>
 | |
| <pre id="test">
 | |
| 
 | |
| <script class="testbody" type="text/javascript">
 | |
|   SimpleTest.requestFlakyTimeout("Delay to make sure ping is made prior than XHR");
 | |
| 
 | |
|   const timeout = 200;
 | |
|   const host_nottrack = "http://not-tracking.example.com/";
 | |
|   const host_track = "http://trackertest.org/";
 | |
|   const path_ping = "tests/toolkit/components/url-classifier/tests/mochitest/ping.sjs";
 | |
|   const TP_ENABLE_PREF = "privacy.trackingprotection.enabled";
 | |
|   const RETRY_TIMEOUT_MS = 200;
 | |
| 
 | |
|   var testData = [
 | |
|     { url: "trackertest.org/",
 | |
|       db: "test-track-simple"
 | |
|     }
 | |
|   ];
 | |
| 
 | |
|   function testPingNonBlacklist() {
 | |
|     SpecialPowers.setBoolPref(TP_ENABLE_PREF, true);
 | |
| 
 | |
|     var msg = "ping should reach page not in blacklist";
 | |
|     var expectPing = true;
 | |
|     var id = "1111";
 | |
|     ping(id, host_nottrack);
 | |
| 
 | |
|     return new Promise(function(resolve, reject) {
 | |
|       // Retry at most 30 seconds.
 | |
|       isPingedWithRetry(id, expectPing, msg, resolve, 30 * 1000 / RETRY_TIMEOUT_MS);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function testPingBlacklistSafebrowsingOff() {
 | |
|     SpecialPowers.setBoolPref(TP_ENABLE_PREF, false);
 | |
| 
 | |
|     var msg = "ping should reach page in blacklist when tracking protection is off";
 | |
|     var expectPing = true;
 | |
|     var id = "2222";
 | |
|     ping(id, host_track);
 | |
| 
 | |
|     return new Promise(function(resolve, reject) {
 | |
|       // Retry at most 30 seconds.
 | |
|       isPingedWithRetry(id, expectPing, msg, resolve, 30 * 1000 / RETRY_TIMEOUT_MS);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function testPingBlacklistSafebrowsingOn() {
 | |
|     SpecialPowers.setBoolPref(TP_ENABLE_PREF, true);
 | |
| 
 | |
|     var msg = "ping should not reach page in blacklist when tracking protection is on";
 | |
|     var expectPing = false;
 | |
|     var id = "3333";
 | |
|     ping(id, host_track);
 | |
| 
 | |
|     return new Promise(function(resolve, reject) {
 | |
|       setTimeout(function() {
 | |
|         isPinged(id, expectPing, msg, resolve);
 | |
|       }, timeout);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function ping(id, host) {
 | |
|     var elm = document.createElement("a");
 | |
|     elm.setAttribute("ping", host + path_ping + "?id=" + id);
 | |
|     elm.setAttribute("href", "#");
 | |
|     document.body.appendChild(elm);
 | |
| 
 | |
|     // Trigger ping.
 | |
|     elm.click();
 | |
| 
 | |
|     document.body.removeChild(elm);
 | |
|   }
 | |
| 
 | |
|   function isPingedWithRetry(id, expected, msg, callback, retryCnt) {
 | |
|     var url = "http://mochi.test:8888/" + path_ping;
 | |
|     var xhr = new XMLHttpRequest();
 | |
|     xhr.open("GET", url + "?id=" + id);
 | |
|     xhr.onload = function() {
 | |
|       let pinged = xhr.response === "ping";
 | |
|       let success = pinged === expected;
 | |
|       if (success || 0 === retryCnt) {
 | |
|         is(expected, pinged, msg);
 | |
|         callback();
 | |
|         return;
 | |
|       }
 | |
|       // Retry on failure.
 | |
|       setTimeout(() => {
 | |
|         isPingedWithRetry(id, expected, msg, callback, retryCnt - 1);
 | |
|       }, RETRY_TIMEOUT_MS);
 | |
|     };
 | |
|     xhr.send();
 | |
|   }
 | |
| 
 | |
|   function isPinged(id, expected, msg, callback) {
 | |
|     isPingedWithRetry(id, expected, msg, callback, 0);
 | |
|   }
 | |
| 
 | |
|   function cleanup() {
 | |
|     SpecialPowers.clearUserPref(TP_ENABLE_PREF);
 | |
|   }
 | |
| 
 | |
|   function runTest() {
 | |
|     classifierHelper.waitForInit()
 | |
|       .then(() => classifierHelper.addUrlToDB(testData))
 | |
|       .then(testPingNonBlacklist)
 | |
|       .then(testPingBlacklistSafebrowsingOff)
 | |
|       .then(testPingBlacklistSafebrowsingOn)
 | |
|       .then(function() {
 | |
|         SimpleTest.finish();
 | |
|       }).catch(function(e) {
 | |
|         ok(false, "Some test failed with error " + e);
 | |
|         SimpleTest.finish();
 | |
|       });
 | |
|   }
 | |
| 
 | |
|   SimpleTest.waitForExplicitFinish();
 | |
|   SimpleTest.registerCleanupFunction(cleanup);
 | |
|   SpecialPowers.pushPrefEnv({"set": [
 | |
|     ["browser.send_pings", true],
 | |
|     ["urlclassifier.trackingTable", "test-track-simple"],
 | |
|   ]}, runTest);
 | |
| 
 | |
| </script>
 | |
| </pre>
 | |
| </body>
 | |
| </html>
 |