forked from mirrors/gecko-dev
		
	 9f161ab08f
			
		
	
	
		9f161ab08f
		
	
	
	
	
		
			
			This makes it possible to use different lists for tracking protection and for the features that rely on tracking annotations. Differential Revision: https://phabricator.services.mozilla.com/D2484 --HG-- extra : moz-landing-system : lando
		
			
				
	
	
		
			149 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var EXPORTED_SYMBOLS = ["UrlClassifierTestUtils"];
 | |
| 
 | |
| const ANNOTATION_TABLE_NAME = "mochitest1-track-simple";
 | |
| const ANNOTATION_TABLE_PREF = "urlclassifier.trackingAnnotationTable";
 | |
| const ANNOTATION_WHITELIST_TABLE_NAME = "mochitest1-trackwhite-simple";
 | |
| const ANNOTATION_WHITELIST_TABLE_PREF = "urlclassifier.trackingAnnotationWhitelistTable";
 | |
| 
 | |
| const TRACKING_TABLE_NAME = "mochitest2-track-simple";
 | |
| const TRACKING_TABLE_PREF = "urlclassifier.trackingTable";
 | |
| const WHITELIST_TABLE_NAME = "mochitest2-trackwhite-simple";
 | |
| const WHITELIST_TABLE_PREF = "urlclassifier.trackingWhitelistTable";
 | |
| 
 | |
| ChromeUtils.import("resource://gre/modules/Services.jsm");
 | |
| 
 | |
| let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
 | |
| 
 | |
| var UrlClassifierTestUtils = {
 | |
| 
 | |
|   addTestTrackers() {
 | |
|     // Add some URLs to the tracking databases
 | |
|     let annotationURL1 = "tracking.example.org/"; // only for annotations
 | |
|     let annotationURL2 = "itisatracker.org/";
 | |
|     let annotationURL3 = "trackertest.org/";
 | |
|     let annotationWhitelistedURL = "itisatrap.org/?resource=example.org";
 | |
|     let trackingURL1 = "tracking.example.com/"; // only for TP
 | |
|     let trackingURL2 = "itisatracker.org/";
 | |
|     let trackingURL3 = "trackertest.org/";
 | |
|     let whitelistedURL = "itisatrap.org/?resource=itisatracker.org";
 | |
| 
 | |
|     let annotationUpdate =
 | |
|           "n:1000\ni:" + ANNOTATION_TABLE_NAME + "\nad:3\n" +
 | |
|           "a:1:32:" + annotationURL1.length + "\n" +
 | |
|           annotationURL1 + "\n" +
 | |
|           "a:2:32:" + annotationURL2.length + "\n" +
 | |
|           annotationURL2 + "\n" +
 | |
|           "a:3:32:" + annotationURL3.length + "\n" +
 | |
|           annotationURL3 + "\n";
 | |
|     let annotationWhitelistUpdate =
 | |
|           "n:1000\ni:" + ANNOTATION_WHITELIST_TABLE_NAME + "\nad:1\n" +
 | |
|           "a:1:32:" + annotationWhitelistedURL.length + "\n" +
 | |
|           annotationWhitelistedURL + "\n";
 | |
|     let trackingUpdate =
 | |
|           "n:1000\ni:" + TRACKING_TABLE_NAME + "\nad:3\n" +
 | |
|           "a:1:32:" + trackingURL1.length + "\n" +
 | |
|           trackingURL1 + "\n" +
 | |
|           "a:2:32:" + trackingURL2.length + "\n" +
 | |
|           trackingURL2 + "\n" +
 | |
|           "a:3:32:" + trackingURL3.length + "\n" +
 | |
|           trackingURL3 + "\n";
 | |
|     let whitelistUpdate =
 | |
|           "n:1000\ni:" + WHITELIST_TABLE_NAME + "\nad:1\n" +
 | |
|           "a:1:32:" + whitelistedURL.length + "\n" +
 | |
|           whitelistedURL + "\n";
 | |
| 
 | |
|     var tables = [
 | |
|       {
 | |
|         pref: ANNOTATION_TABLE_PREF,
 | |
|         name: ANNOTATION_TABLE_NAME,
 | |
|         update: annotationUpdate
 | |
|       },
 | |
|       {
 | |
|         pref: ANNOTATION_WHITELIST_TABLE_PREF,
 | |
|         name: ANNOTATION_WHITELIST_TABLE_NAME,
 | |
|         update: annotationWhitelistUpdate
 | |
|       },
 | |
|       {
 | |
|         pref: TRACKING_TABLE_PREF,
 | |
|         name: TRACKING_TABLE_NAME,
 | |
|         update: trackingUpdate
 | |
|       },
 | |
|       {
 | |
|         pref: WHITELIST_TABLE_PREF,
 | |
|         name: WHITELIST_TABLE_NAME,
 | |
|         update: whitelistUpdate
 | |
|       }
 | |
|     ];
 | |
| 
 | |
|     let tableIndex = 0;
 | |
|     let doOneUpdate = () => {
 | |
|       if (tableIndex == tables.length) {
 | |
|         return Promise.resolve();
 | |
|       }
 | |
|       return this.useTestDatabase(tables[tableIndex])
 | |
|         .then(() => {
 | |
|           tableIndex++;
 | |
|           return doOneUpdate();
 | |
|         }, aErrMsg => {
 | |
|           dump("Rejected: " + aErrMsg + ". Retry later.\n");
 | |
|           return new Promise(resolve => {
 | |
|             timer.initWithCallback(resolve, 100, Ci.nsITimer.TYPE_ONE_SHOT);
 | |
|           })
 | |
|           .then(doOneUpdate);
 | |
|         });
 | |
|     };
 | |
| 
 | |
|     return doOneUpdate();
 | |
|   },
 | |
| 
 | |
|   cleanupTestTrackers() {
 | |
|     Services.prefs.clearUserPref(ANNOTATION_TABLE_PREF);
 | |
|     Services.prefs.clearUserPref(ANNOTATION_WHITELIST_TABLE_PREF);
 | |
|     Services.prefs.clearUserPref(TRACKING_TABLE_PREF);
 | |
|     Services.prefs.clearUserPref(WHITELIST_TABLE_PREF);
 | |
|   },
 | |
| 
 | |
|   /**
 | |
|    * Add some entries to a test tracking protection database, and resets
 | |
|    * back to the default database after the test ends.
 | |
|    *
 | |
|    * @return {Promise}
 | |
|    */
 | |
|   useTestDatabase(table) {
 | |
|     Services.prefs.setCharPref(table.pref, table.name);
 | |
| 
 | |
|     return new Promise((resolve, reject) => {
 | |
|       let dbService = Cc["@mozilla.org/url-classifier/dbservice;1"].
 | |
|                       getService(Ci.nsIUrlClassifierDBService);
 | |
|       let listener = {
 | |
|         QueryInterface: iid => {
 | |
|           if (iid.equals(Ci.nsISupports) ||
 | |
|               iid.equals(Ci.nsIUrlClassifierUpdateObserver))
 | |
|             return listener;
 | |
| 
 | |
|           throw Cr.NS_ERROR_NO_INTERFACE;
 | |
|         },
 | |
|         updateUrlRequested: url => { },
 | |
|         streamFinished: status => { },
 | |
|         updateError: errorCode => {
 | |
|           reject("Got updateError when updating " + table.name);
 | |
|         },
 | |
|         updateSuccess: requestedTimeout => {
 | |
|           resolve();
 | |
|         }
 | |
|       };
 | |
| 
 | |
|       try {
 | |
|         dbService.beginUpdate(listener, table.name, "");
 | |
|         dbService.beginStream("", "");
 | |
|         dbService.updateStream(table.update);
 | |
|         dbService.finishStream();
 | |
|         dbService.finishUpdate();
 | |
|       } catch (e) {
 | |
|         reject("Failed to update with dbService: " + table.name);
 | |
|       }
 | |
|     });
 | |
|   },
 | |
| };
 |