forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var EXPORTED_SYMBOLS = ["UrlClassifierTestUtils"];
 | 
						|
 | 
						|
const TRACKING_TABLE_NAME = "mochitest-track-simple";
 | 
						|
const TRACKING_TABLE_PREF = "urlclassifier.trackingTable";
 | 
						|
const WHITELIST_TABLE_NAME = "mochitest-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 trackingURL1 = "tracking.example.com/";
 | 
						|
    let trackingURL2 = "itisatracker.org/";
 | 
						|
    let trackingURL3 = "trackertest.org/";
 | 
						|
    let whitelistedURL = "itisatrap.org/?resource=itisatracker.org";
 | 
						|
 | 
						|
    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: 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(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);
 | 
						|
      }
 | 
						|
    });
 | 
						|
  },
 | 
						|
};
 |