Bug 1386684 - Enable ESLint for toolkit/components/url-classifier (manual fixes). r?hchang draft
authorDan Banner <dbugs@thebanners.uk>
Wed, 02 Aug 2017 20:09:14 +0100
changeset 642805 953cb37fceef34313fdedaf6b38de305d5d7807e
parent 642803 1fb61f1c0b746d6bb617a8bde45b2c7341a0ad54
child 725101 0896c098095159ca0c9015b6f05ecf2b1236a9cf
push id72867
push userbmo:dbugs@thebanners.uk
push dateTue, 08 Aug 2017 18:54:18 +0000
reviewershchang
bugs1386684
milestone57.0a1
Bug 1386684 - Enable ESLint for toolkit/components/url-classifier (manual fixes). r?hchang MozReview-Commit-ID: JH1XDFMVd43
toolkit/components/url-classifier/nsUrlClassifierHashCompleter.js
toolkit/components/url-classifier/nsUrlClassifierListManager.js
toolkit/components/url-classifier/tests/UrlClassifierTestUtils.jsm
toolkit/components/url-classifier/tests/browser/.eslintrc.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_always_activate.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_ask_to_activate.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_never_activate.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_always_activate.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_ask_to_activate.js
toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_never_activate.js
toolkit/components/url-classifier/tests/mochitest/classifiedAnnotatedFrame.html
toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
toolkit/components/url-classifier/tests/mochitest/classifierFrame.html
toolkit/components/url-classifier/tests/mochitest/classifierHelper.js
toolkit/components/url-classifier/tests/mochitest/cleanWorker.js
toolkit/components/url-classifier/tests/mochitest/evil.js
toolkit/components/url-classifier/tests/mochitest/evilWorker.js
toolkit/components/url-classifier/tests/mochitest/gethashFrame.html
toolkit/components/url-classifier/tests/mochitest/good.js
toolkit/components/url-classifier/tests/mochitest/head.js
toolkit/components/url-classifier/tests/mochitest/test_advisory_link.html
toolkit/components/url-classifier/tests/mochitest/test_bug1254766.html
toolkit/components/url-classifier/tests/mochitest/test_cachemiss.html
toolkit/components/url-classifier/tests/mochitest/test_classifier.html
toolkit/components/url-classifier/tests/mochitest/test_classifier_match.html
toolkit/components/url-classifier/tests/mochitest/test_classifier_worker.html
toolkit/components/url-classifier/tests/mochitest/test_classify_ping.html
toolkit/components/url-classifier/tests/mochitest/test_classify_track.html
toolkit/components/url-classifier/tests/mochitest/test_donottrack.html
toolkit/components/url-classifier/tests/mochitest/test_gethash.html
toolkit/components/url-classifier/tests/mochitest/test_privatebrowsing_trackingprotection.html
toolkit/components/url-classifier/tests/mochitest/test_reporturl.html
toolkit/components/url-classifier/tests/mochitest/test_safebrowsing_bug1272239.html
toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1157081.html
toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1312515.html
toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_whitelist.html
toolkit/components/url-classifier/tests/mochitest/unwantedWorker.js
toolkit/components/url-classifier/tests/unit/test_addsub.js
toolkit/components/url-classifier/tests/unit/test_dbservice.js
toolkit/components/url-classifier/tests/unit/test_digest256.js
toolkit/components/url-classifier/tests/unit/test_hashcompleter.js
toolkit/components/url-classifier/tests/unit/test_partial.js
--- a/toolkit/components/url-classifier/nsUrlClassifierHashCompleter.js
+++ b/toolkit/components/url-classifier/nsUrlClassifierHashCompleter.js
@@ -39,16 +39,17 @@ function log(...stuff) {
 
   var d = new Date();
   let msg = "hashcompleter: " + d.toTimeString() + ": " + stuff.join(" ");
   dump(Services.urlFormatter.trimSensitiveURLs(msg) + "\n");
 }
 
 // Map the HTTP response code to a Telemetry bucket
 // https://developers.google.com/safe-browsing/developers_guide_v2?hl=en
+// eslint-disable-next-line complexity
 function httpStatusToBucket(httpStatus) {
   var statusBucket;
   switch (httpStatus) {
   case 100:
   case 101:
     // Unexpected 1xx return code
     statusBucket = 0;
     break;
@@ -542,17 +543,18 @@ HashCompleterRequest.prototype = {
   // Parses the response body and eventually adds items to the |response.matches| array
   // for elements of |this._requests|.
   handleResponse: function HCR_handleResponse() {
     if (this._response == "") {
       return;
     }
 
     if (this.isV4) {
-      return this.handleResponseV4();
+      this.handleResponseV4();
+      return;
     }
 
     let start = 0;
 
     let length = this._response.length;
     while (start != length) {
       start = this.handleTable(start);
     }
@@ -792,17 +794,17 @@ HashCompleterRequest.prototype = {
     }
   },
 
   observe: function HCR_observe(aSubject, aTopic, aData) {
     if (aTopic == "quit-application") {
       this._shuttingDown = true;
       if (this._channel) {
         this._channel.cancel(Cr.NS_ERROR_ABORT);
-        telemetryClockStart = 0;
+        this.telemetryClockStart = 0;
       }
 
       Services.obs.removeObserver(this, "quit-application");
     }
   },
 };
 
 // Converts a URL safe base64 string to a normal base64 string. Will not change
--- a/toolkit/components/url-classifier/nsUrlClassifierListManager.js
+++ b/toolkit/components/url-classifier/nsUrlClassifierListManager.js
@@ -96,17 +96,17 @@ PROT_ListManager.prototype.registerTable
 
   // Keep track of all of our update URLs.
   if (!this.needsUpdate_[updateUrl]) {
     this.needsUpdate_[updateUrl] = {};
 
     // Using the V4 backoff algorithm for both V2 and V4. See bug 1273398.
     this.requestBackoffs_[updateUrl] = new RequestBackoffV4(
                                             4 /* num requests */,
-                                   60*60*1000 /* request time, 60 min */);
+                               60 * 60 * 1000 /* request time, 60 min */);
   }
   this.needsUpdate_[updateUrl][tableName] = false;
 
   return true;
 }
 
 /**
  * Delete all of our data tables which seem to leak otherwise.
@@ -255,21 +255,17 @@ PROT_ListManager.prototype.kickoffUpdate
       log("Initializing update checker for " + updateUrl
           + " provided by " + provider);
 
       // Use the initialUpdateDelay + fuzz unless we had previous updates
       // and the server told us when to try again.
       let updateDelay = initialUpdateDelay;
       let nextUpdatePref = "browser.safebrowsing.provider." + provider +
                            ".nextupdatetime";
-      let nextUpdate;
-      try {
-        nextUpdate = Services.prefs.getCharPref(nextUpdatePref);
-      } catch (ex) {
-      }
+      let nextUpdate = Services.prefs.getCharPref(nextUpdatePref, "");
 
       if (nextUpdate) {
         updateDelay = Math.min(maxDelayMs, Math.max(0, nextUpdate - Date.now()));
         log("Next update at " + nextUpdate);
       }
       log("Next update " + updateDelay / 60000 + "min from now");
 
       this.setUpdateCheckTimer(updateUrl, updateDelay);
@@ -634,16 +630,17 @@ PROT_ListManager.prototype.QueryInterfac
   throw Components.results.NS_ERROR_NO_INTERFACE;
 }
 
 var modScope = this;
 function Init() {
   // Pull the library in.
   var jslib = Cc["@mozilla.org/url-classifier/jslib;1"]
               .getService().wrappedJSObject;
+  /* global BindToObject, RequestBackoffV4 */
   modScope.BindToObject = jslib.BindToObject;
   modScope.RequestBackoffV4 = jslib.RequestBackoffV4;
 
   // We only need to call Init once.
   modScope.Init = function() {};
 }
 
 function RegistrationData() {
--- a/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.jsm
+++ b/toolkit/components/url-classifier/tests/UrlClassifierTestUtils.jsm
@@ -46,17 +46,17 @@ this.UrlClassifierTestUtils = {
         name: WHITELIST_TABLE_NAME,
         update: whitelistUpdate
       }
     ];
 
     let tableIndex = 0
     let doOneUpdate = () => {
       if (tableIndex == tables.length) {
-        return;
+        return Promise.resolve();
       }
       return this.useTestDatabase(tables[tableIndex])
         .then(() => {
           tableIndex++;
           return doOneUpdate();
         }, aErrMsg => {
           dump("Rejected: " + aErrMsg + ". Retry later.\n");
           return new Promise(resolve => {
new file mode 100644
--- /dev/null
+++ b/toolkit/components/url-classifier/tests/browser/.eslintrc.js
@@ -0,0 +1,7 @@
+"use strict";
+
+module.exports = {
+  "extends": [
+    "plugin:mozilla/browser-test"
+  ]
+};
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_always_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_always_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: false,
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_ask_to_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_ask_to_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: false,
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_never_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_off_with_never_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: false,
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_always_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_always_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: true,
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_ask_to_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_ask_to_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: true,
--- a/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_never_activate.js
+++ b/toolkit/components/url-classifier/tests/browser/browser_flashblock_on_with_never_activate.js
@@ -3,19 +3,21 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 "use strict";
 requestLongerTimeout(3);
 
 var {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
 
 const scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
                      getService(Ci.mozIJSSubScriptLoader);
+/* import-globals-from classifierHelper.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierHelper.js",
   this);
+  /* import-globals-from classifierTester.js */
 scriptLoader.loadSubScript(
   "chrome://mochitests/content/browser/toolkit/components/url-classifier/tests/browser/classifierTester.js",
   this);
 
 add_task(async function checkFlashBlockLists() {
   classifierTester.setPrefs({
     setDBs: true,
     flashBlockEnable: true,
--- a/toolkit/components/url-classifier/tests/mochitest/classifiedAnnotatedFrame.html
+++ b/toolkit/components/url-classifier/tests/mochitest/classifiedAnnotatedFrame.html
@@ -58,35 +58,35 @@ function checkLoads() {
     "Should identify all tracking elements");
 
   var blockedTrackingNodes = window.document.blockedTrackingNodes;
 
   // Make sure that every node in blockedTrackingNodes exists in the tree
   // (that may not always be the case but do not expect any nodes to disappear
   // from the tree here)
   var allNodeMatch = true;
-  for (var i = 0; i < blockedTrackingNodes.length; i++) {
-    var nodeMatch = false;
-    for (var j = 0; j < badids.length && !nodeMatch; j++) {
+  for (let i = 0; i < blockedTrackingNodes.length; i++) {
+    let nodeMatch = false;
+    for (let j = 0; j < badids.length && !nodeMatch; j++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == document.getElementById(badids[j]));
     }
 
     allNodeMatch = allNodeMatch && nodeMatch;
   }
   window.parent.ok(allNodeMatch,
     "All annotated nodes are expected in the tree");
 
   // Make sure that every node with a badid (see badids) is found in the
   // blockedTrackingNodes. This tells us if we are neglecting to annotate
   // some nodes
   allNodeMatch = true;
-  for (var j = 0; j < badids.length; j++) {
-    var nodeMatch = false;
-    for (var i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
+  for (let j = 0; j < badids.length; j++) {
+    let nodeMatch = false;
+    for (let i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == document.getElementById(badids[j]));
     }
 
     if (!nodeMatch) {
       console.log(badids[j] + " was not found in blockedTrackingNodes");
     }
     allNodeMatch = allNodeMatch && nodeMatch;
--- a/toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
+++ b/toolkit/components/url-classifier/tests/mochitest/classifierCommon.js
@@ -1,11 +1,13 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
+/* eslint-env mozilla/frame-script */
+
 const { classes: Cc, interfaces: Ci, results: Cr } = Components;
 
 var dbService = Cc["@mozilla.org/url-classifier/dbservice;1"]
                 .getService(Ci.nsIUrlClassifierDBService);
 
 var timer;
 function setTimeout(callback, delay) {
   timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
@@ -28,19 +30,16 @@ function doUpdate(update) {
     updateError(errorCode) {
       sendAsyncMessage("updateError", errorCode);
     },
     updateSuccess(requestedTimeout) {
       sendAsyncMessage("updateSuccess");
     }
   };
 
-  let dbService = Cc["@mozilla.org/url-classifier/dbservice;1"]
-                  .getService(Ci.nsIUrlClassifierDBService);
-
   try {
     dbService.beginUpdate(listener, "test-malware-simple,test-unwanted-simple", "");
     dbService.beginStream("", "");
     dbService.updateStream(update);
     dbService.finishStream();
     dbService.finishUpdate();
   } catch (e) {
     // beginUpdate may fail if there's an existing update in progress
--- a/toolkit/components/url-classifier/tests/mochitest/classifierFrame.html
+++ b/toolkit/components/url-classifier/tests/mochitest/classifierFrame.html
@@ -31,16 +31,17 @@ function checkLoads() {
     window.parent.loadTestFrame();
     return;
   }
 
   let dwu = window.parent.SpecialPowers.getDOMWindowUtils(window);
   let timer1 = window.setTimeout(function() {}, 0);
   window.parent.ok(!dwu.isTimeoutTracking(timer1),
                    "Timeout set from main script should not be considered as tracking");
+  /* global getTrackerTimeout */
   let timer2 = getTrackerTimeout();
   window.parent.ok(dwu.isTimeoutTracking(timer2),
                    "Timeout set from included script should be considered as tracking");
   window.clearTimeout(timer1);
   window.clearTimeout(timer2);
 
   // End (parent) test.
   window.parent.SimpleTest.finish();
--- a/toolkit/components/url-classifier/tests/mochitest/classifierHelper.js
+++ b/toolkit/components/url-classifier/tests/mochitest/classifierHelper.js
@@ -1,17 +1,15 @@
 if (typeof(classifierHelper) == "undefined") {
   var classifierHelper = {};
 }
 
 const CLASSIFIER_COMMON_URL = SimpleTest.getTestFileURL("classifierCommon.js");
 var gScript = SpecialPowers.loadChromeScript(CLASSIFIER_COMMON_URL);
 
-const HASHLEN = 32;
-
 const PREFS = {
   PROVIDER_LISTS: "browser.safebrowsing.provider.mozilla.lists",
   DISALLOW_COMPLETIONS: "urlclassifier.disallow_completions",
   PROVIDER_GETHASHURL: "browser.safebrowsing.provider.mozilla.gethashURL"
 };
 
 classifierHelper._curAddChunkNum = 1;
 
--- a/toolkit/components/url-classifier/tests/mochitest/cleanWorker.js
+++ b/toolkit/components/url-classifier/tests/mochitest/cleanWorker.js
@@ -1,8 +1,10 @@
+/* eslint-env worker */
+
 onmessage = function() {
   try {
     importScripts("evilWorker.js");
   } catch (ex) {
     postMessage("success");
     return;
   }
 
--- a/toolkit/components/url-classifier/tests/mochitest/evil.js
+++ b/toolkit/components/url-classifier/tests/mochitest/evil.js
@@ -1,1 +1,3 @@
+/* global scriptItem:true */
+
 scriptItem = "loaded malware javascript!";
--- a/toolkit/components/url-classifier/tests/mochitest/evilWorker.js
+++ b/toolkit/components/url-classifier/tests/mochitest/evilWorker.js
@@ -1,3 +1,5 @@
+/* eslint-env worker */
+
 onmessage = function() {
   postMessage("loaded bad file");
 }
--- a/toolkit/components/url-classifier/tests/mochitest/gethashFrame.html
+++ b/toolkit/components/url-classifier/tests/mochitest/gethashFrame.html
@@ -4,19 +4,19 @@
 
 <script type="text/javascript">
 
 var scriptItem = "untouched";
 
 function checkLoads() {
 
   var title = document.getElementById("title");
-  title.innerHTML = window.parent.shouldLoad ?
-                    "The following should be hidden:" :
-                    "The following should not be hidden:"
+  title.textContent = window.parent.shouldLoad ?
+                      "The following should be hidden:" :
+                      "The following should not be hidden:"
 
   if (window.parent.shouldLoad) {
     window.parent.is(scriptItem, "loaded malware javascript!", "Should load bad javascript");
   } else {
     window.parent.is(scriptItem, "untouched", "Should not load bad javascript");
   }
 
   var elt = document.getElementById("styleImport");
--- a/toolkit/components/url-classifier/tests/mochitest/good.js
+++ b/toolkit/components/url-classifier/tests/mochitest/good.js
@@ -1,1 +1,3 @@
+/* global scriptItem:true */
+
 scriptItem = "loaded whitelisted javascript!";
--- a/toolkit/components/url-classifier/tests/mochitest/head.js
+++ b/toolkit/components/url-classifier/tests/mochitest/head.js
@@ -12,22 +12,22 @@ function addCompletionToServer(list, url
         resolve();
       }
     };
     xhr.send();
   });
 }
 
 function hash(str) {
-  function bytesFromString(str) {
+  function bytesFromString(str1) {
     var converter =
       SpecialPowers.Cc["@mozilla.org/intl/scriptableunicodeconverter"]
                        .createInstance(SpecialPowers.Ci.nsIScriptableUnicodeConverter);
     converter.charset = "UTF-8";
-    return converter.convertToByteArray(str);
+    return converter.convertToByteArray(str1);
   }
 
   var hasher = SpecialPowers.Cc["@mozilla.org/security/hash;1"]
                                .createInstance(SpecialPowers.Ci.nsICryptoHash);
 
   var data = bytesFromString(str);
   hasher.init(hasher.SHA256);
   hasher.update(data, data.length);
--- a/toolkit/components/url-classifier/tests/mochitest/test_advisory_link.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_advisory_link.html
@@ -14,17 +14,19 @@
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://testing-common/TestUtils.jsm");
 Cu.import("resource://testing-common/BrowserTestUtils.jsm");
+/* import-globals-from classifierHelper.js */
 
 var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIWebNavigation)
                     .QueryInterface(Ci.nsIDocShellTreeItem)
                     .rootTreeItem
                     .QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIDOMWindow);
 
@@ -42,25 +44,16 @@ var testDatas = [
   { url: "phishing.example.com/test.html",
     list: "mochi2-phish-simple",
     provider: "google4",
   },
 ];
 
 let pushPrefs = (...p) => SpecialPowers.pushPrefEnv({set: p});
 
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
-
 function addUrlToDB(list, url) {
   let testData = [{ db: list, url}];
 
   return classifierHelper.addUrlToDB(testData)
     .catch(function(err) {
       ok(false, "Couldn't update classifier. Error code: " + err);
       // Abort test.
       SimpleTest.finish();
@@ -81,17 +74,18 @@ function setupTestData(data) {
   return Promise.all(promises);
 }
 
 function testOnWindow(aTestData) {
   return new Promise(resolve => {
     let win = mainWindow.OpenBrowserWindow();
 
     (async function() {
-      await new Promise(resolve => whenDelayedStartupFinished(win, resolve));
+      await TestUtils.topicObserved("browser-delayed-startup-finished",
+                                    subject => subject == win);
 
       let browser = win.gBrowser.selectedBrowser;
       await BrowserTestUtils.loadURI(browser, aTestData.url);
       await BrowserTestUtils.waitForContentEvent(browser, "DOMContentLoaded")
 
       let doc = win.gBrowser.contentDocument;
       let advisoryEl = doc.getElementById("advisory_provider");
       if (aTestData.provider != "google" && aTestData.provider != "google4") {
--- a/toolkit/components/url-classifier/tests/mochitest/test_bug1254766.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_bug1254766.html
@@ -10,16 +10,17 @@
 <body>
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script src="head.js"></script>
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 const MALWARE_LIST = "test-malware-simple";
 const MALWARE_HOST1 = "malware.example.com/";
 const MALWARE_HOST2 = "test1.example.com/";
 
 const UNWANTED_LIST = "test-unwanted-simple";
 const UNWANTED_HOST1 = "unwanted.example.com/";
 const UNWANTED_HOST2 = "test2.example.com/";
@@ -77,17 +78,17 @@ function setup() {
     addCompletionToServer(UNWANTED_LIST, UNWANTED_HOST2, GETHASH_URL),
   ]);
 }
 
 // Reset function in helper try to simulate the behavior we restart firefox
 function reset() {
   return classifierHelper.resetDatabase()
     .catch(err => {
-      ok(false, "Couldn't update classifier. Error code: " + errorCode);
+      ok(false, "Couldn't update classifier. Error code: " + err);
       // Abort test.
       SimpleTest.finish();
     });
 }
 
 function updateUnusedUrl() {
   var testData  = [
     { url: UNUSED_MALWARE_HOST,  db: MALWARE_LIST },
@@ -116,17 +117,17 @@ function update(prefix = false) {
     { url: MALWARE_HOST1,  db: MALWARE_LIST,  len: length },
     { url: MALWARE_HOST2,  db: MALWARE_LIST,  len: length },
     { url: UNWANTED_HOST1, db: UNWANTED_LIST, len: length },
     { url: UNWANTED_HOST2, db: UNWANTED_LIST, len: length }
   ];
 
   return classifierHelper.addUrlToDB(testData)
     .catch(err => {
-      ok(false, "Couldn't update classifier. Error code: " + errorCode);
+      ok(false, "Couldn't update classifier. Error code: " + err);
       // Abort test.
       SimpleTest.finish();
     });
 }
 
 // This testcase is to make sure gethash works:
 // 1. Add prefixes to DB.
 // 2. Load test frame contains malware & unwanted url, those urls should be blocked.
--- a/toolkit/components/url-classifier/tests/mochitest/test_cachemiss.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_cachemiss.html
@@ -10,16 +10,17 @@
 <body>
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script src="head.js"></script>
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 const MALWARE_LIST = "test-malware-simple";
 const MALWARE_HOST = "malware.example.com/";
 
 const UNWANTED_LIST = "test-unwanted-simple";
 const UNWANTED_HOST = "unwanted.example.com/";
 
 const GETHASH_URL = "http://mochi.test:8888/tests/toolkit/components/url-classifier/tests/mochitest/cache.sjs";
--- a/toolkit/components/url-classifier/tests/mochitest/test_classifier.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_classifier.html
@@ -8,16 +8,17 @@
 </head>
 
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 var firstLoad = true;
 
 // Add some URLs to the malware database.
 // Note that we intentionally don't touch test-phish-simple, and will
 // use the URL registered by addMozEntries().  Otherwise, classifierHelper.resetDatabase()
 // will reset this table, and waitForInit() can't find the known phishing
 // URL in test-phish-simple, breaking the tests following this one.
@@ -148,23 +149,23 @@ function testService() {
         return;
       }
       let test = testURLs.shift();
       let tables = "test-malware-simple,test-unwanted-simple,test-phish-simple,test-track-simple,test-block-simple,test-harmful-simple";
       let uri = ios.newURI(test.url);
       let prin = ssm.createCodebasePrincipal(uri, {});
       is(service.classifyLocal(uri, tables), test.table,
          `Successful synchronous classification of ${test.url} with TP=${test.trackingProtection}`);
-      let result = SpecialPowers.doUrlClassify(prin, null, test.trackingProtection, function(errorCode) {
+      SpecialPowers.doUrlClassify(prin, null, test.trackingProtection, function(errorCode) {
         is(errorCode, test.result,
            `Successful asynchronous classification of ${test.url} with TP=${test.trackingProtection}`);
 
         // Same as classifyLocal except for the 'async' call.
-        SpecialPowers.doUrlClassifyLocal(uri, tables, function(errorCode, tables) {
-          is(tables, test.table,
+        SpecialPowers.doUrlClassifyLocal(uri, tables, function(errorCode1, tables1) {
+          is(tables1, test.table,
              `Successful asynchronous local classification of ${test.url} with TP=${test.trackingProtection}`);
           runNextTest();
         });
 
       });
     }
     runNextTest(resolve);
   });
--- a/toolkit/components/url-classifier/tests/mochitest/test_classifier_match.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_classifier_match.html
@@ -9,16 +9,17 @@
 
 <body>
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script class="testbody" type="application/javascript">
+/* import-globals-from classifierHelper.js */
 var Cc = SpecialPowers.Cc;
 var Ci = SpecialPowers.Ci;
 var Cr = SpecialPowers.Cr;
 
 var inputDatas = [
   { url: "malware.example.com/",
     db: "mochi-block-simple",
   },
@@ -43,22 +44,22 @@ var inputDatas = [
   },
   { url: "malware3.example.com/",
     db: "mochim3-malware-simple",
     provider: "mozilla"
   },
 ];
 
 function hashPrefix(str) {
-  function bytesFromString(str) {
+  function bytesFromString(str1) {
     let converter =
       Cc["@mozilla.org/intl/scriptableunicodeconverter"]
                        .createInstance(Ci.nsIScriptableUnicodeConverter);
     converter.charset = "UTF-8";
-    return converter.convertToByteArray(str);
+    return converter.convertToByteArray(str1);
   }
 
   let hasher = Cc["@mozilla.org/security/hash;1"]
                                .createInstance(Ci.nsICryptoHash);
 
   let data = bytesFromString(str);
   hasher.init(hasher.SHA256);
   hasher.update(data, data.length);
--- a/toolkit/components/url-classifier/tests/mochitest/test_classifier_worker.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_classifier_worker.html
@@ -8,16 +8,17 @@
 </head>
 
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 // Add some URLs to the malware database.
 var testData = [
   { url: "example.com/tests/toolkit/components/url-classifier/tests/mochitest/evilWorker.js",
     db: "test-malware-simple"
   },
   { url: "example.com/tests/toolkit/components/url-classifier/tests/mochitest/unwantedWorker.js",
     db: "test-unwanted-simple"
--- a/toolkit/components/url-classifier/tests/mochitest/test_classify_ping.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_classify_ping.html
@@ -10,16 +10,17 @@
 <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");
+  /* import-globals-from classifierHelper.js */
 
   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;
 
@@ -84,20 +85,20 @@
     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() {
-      var isPinged = xhr.response === "ping";
-      let success = isPinged === expected;
+      let pinged = xhr.response === "ping";
+      let success = pinged === expected;
       if (success || 0 === retryCnt) {
-        is(expected, isPinged, msg);
+        is(expected, pinged, msg);
         callback();
         return;
       }
       // Retry on failure.
       setTimeout(() => {
         isPingedWithRetry(id, expected, msg, callback, retryCnt - 1);
       }, RETRY_TIMEOUT_MS);
     };
--- a/toolkit/components/url-classifier/tests/mochitest/test_classify_track.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_classify_track.html
@@ -13,16 +13,17 @@
 </div>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
   const PREF = "browser.safebrowsing.malware.enabled";
   const track_path = "tests/toolkit/components/url-classifier/tests/mochitest/basic.vtt";
   const malware_url = "http://malware.example.com/" + track_path;
   const validtrack_url = "http://mochi.test:8888/" + track_path;
+  /* import-globals-from classifierHelper.js */
 
   var video = document.createElement("video");
   video.src = "seek.webm";
   video.crossOrigin = "anonymous";
 
   document.body.appendChild(video);
 
   function testValidTrack() {
--- a/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_donottrack.html
@@ -69,38 +69,31 @@ const tests = [
 const DNT_PREF = "privacy.donottrackheader.enabled";
 const TP_PREF = "privacy.trackingprotection.enabled";
 const TP_PB_PREF = "privacy.trackingprotection.pbmode.enabled";
 
 const contentPage =
   "http://mochi.test:8888/tests/toolkit/components/url-classifier/tests/mochitest/dnt.html";
 
 Components.utils.import("resource://gre/modules/Services.jsm");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
+Components.utils.import("resource://testing-common/TestUtils.jsm");
 
 function executeTest(test) {
   SpecialPowers.pushPrefEnv({"set": [
    [DNT_PREF, test.setting.dntPref],
    [TP_PREF, test.setting.tpPref],
    [TP_PB_PREF, test.setting.tppbPref]
   ]});
 
   var win = mainWindow.OpenBrowserWindow({private: test.setting.pbMode});
 
   return new Promise(function(resolve, reject) {
     win.addEventListener("load", function() {
-      whenDelayedStartupFinished(win, function() {
+      TestUtils.topicObserved("browser-delayed-startup-finished",
+                              subject => subject == win).then(() => {
         win.addEventListener("DOMContentLoaded", function onInnerLoad() {
           if (win.content.location.href != contentPage) {
             win.gBrowser.loadURI(contentPage);
             return;
           }
 
           win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
 
--- a/toolkit/components/url-classifier/tests/mochitest/test_gethash.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_gethash.html
@@ -12,16 +12,17 @@
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 <iframe id="testFrame1" onload=""></iframe>
 <iframe id="testFrame2" onload=""></iframe>
 
 <script src="head.js"></script>
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 const MALWARE_LIST = "test-malware-simple";
 const MALWARE_HOST = "malware.example.com/";
 
 const UNWANTED_LIST = "test-unwanted-simple";
 const UNWANTED_HOST = "unwanted.example.com/";
 
 const GETHASH_URL = "http://mochi.test:8888/tests/toolkit/components/url-classifier/tests/mochitest/gethash.sjs";
--- a/toolkit/components/url-classifier/tests/mochitest/test_privatebrowsing_trackingprotection.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_privatebrowsing_trackingprotection.html
@@ -24,30 +24,23 @@ var mainWindow = window.QueryInterface(C
                     .QueryInterface(Ci.nsIDocShellTreeItem)
                     .rootTreeItem
                     .QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIDOMWindow);
 var contentPage = "http://www.itisatrap.org/tests/toolkit/components/url-classifier/tests/mochitest/classifiedAnnotatedPBFrame.html";
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 Components.utils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
+Components.utils.import("resource://testing-common/TestUtils.jsm");
 
 function testOnWindow(aPrivate, aCallback) {
   var win = mainWindow.OpenBrowserWindow({private: aPrivate});
   win.addEventListener("load", function() {
-    whenDelayedStartupFinished(win, function() {
+    TestUtils.topicObserved("browser-delayed-startup-finished",
+                                  subject => subject == win).then(() => {
       win.addEventListener("DOMContentLoaded", function onInnerLoad() {
         if (win.content.location.href != contentPage) {
           win.gBrowser.loadURI(contentPage);
           return;
         }
         win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
 
         win.content.addEventListener("load", function innerLoad2() {
@@ -79,34 +72,34 @@ function checkLoads(aWindow, aBlocked) {
   is(win.document.blockedTrackingNodeCount, aBlocked ? badids.length : 0, "Should identify all tracking elements");
 
   var blockedTrackingNodes = win.document.blockedTrackingNodes;
 
   // Make sure that every node in blockedTrackingNodes exists in the tree
   // (that may not always be the case but do not expect any nodes to disappear
   // from the tree here)
   var allNodeMatch = true;
-  for (var i = 0; i < blockedTrackingNodes.length; i++) {
-    var nodeMatch = false;
-    for (var j = 0; j < badids.length && !nodeMatch; j++) {
+  for (let i = 0; i < blockedTrackingNodes.length; i++) {
+    let nodeMatch = false;
+    for (let j = 0; j < badids.length && !nodeMatch; j++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == win.document.getElementById(badids[j]));
     }
 
     allNodeMatch = allNodeMatch && nodeMatch;
   }
   is(allNodeMatch, true, "All annotated nodes are expected in the tree");
 
   // Make sure that every node with a badid (see badids) is found in the
   // blockedTrackingNodes. This tells us if we are neglecting to annotate
   // some nodes
   allNodeMatch = true;
-  for (var j = 0; j < badids.length; j++) {
-    var nodeMatch = false;
-    for (var i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
+  for (let j = 0; j < badids.length; j++) {
+    let nodeMatch = false;
+    for (let i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == win.document.getElementById(badids[j]));
     }
 
     allNodeMatch = allNodeMatch && nodeMatch;
   }
   is(allNodeMatch, aBlocked, "All tracking nodes are expected to be annotated as such");
 }
@@ -122,25 +115,25 @@ function test() {
   SimpleTest.registerCleanupFunction(UrlClassifierTestUtils.cleanupTestTrackers);
   UrlClassifierTestUtils.addTestTrackers().then(() => {
     // Normal mode, with the pref (trackers should be loaded)
     testOnWindow(false, function(aWindow) {
       checkLoads(aWindow, false);
       aWindow.close();
 
       // Private Browsing, with the pref (trackers should be blocked)
-      testOnWindow(true, function(aWindow) {
-        checkLoads(aWindow, true);
-        aWindow.close();
+      testOnWindow(true, function(aWindow1) {
+        checkLoads(aWindow1, true);
+        aWindow1.close();
 
         // Private Browsing, without the pref (trackers should be loaded)
         SpecialPowers.setBoolPref("privacy.trackingprotection.pbmode.enabled", false);
-        testOnWindow(true, function(aWindow) {
-          checkLoads(aWindow, false);
-          aWindow.close();
+        testOnWindow(true, function(aWindow2) {
+          checkLoads(aWindow2, false);
+          aWindow2.close();
           SimpleTest.finish();
         });
       });
     });
   });
 }
 
 SimpleTest.waitForExplicitFinish();
--- a/toolkit/components/url-classifier/tests/mochitest/test_reporturl.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_reporturl.html
@@ -11,22 +11,24 @@
 
 <body>
 <p id="display"></p>
 <div id="content" style="display: none">
 </div>
 <pre id="test">
 
 <script class="testbody" type="text/javascript">
+/* import-globals-from classifierHelper.js */
 
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://testing-common/BrowserTestUtils.jsm");
 Cu.import("resource://testing-common/ContentTask.jsm");
+Cu.import("resource://testing-common/TestUtils.jsm");
 
 var mainWindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIWebNavigation)
                     .QueryInterface(Ci.nsIDocShellTreeItem)
                     .rootTreeItem
                     .QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIDOMWindow);
 const SJS = "mochi.test:8888/chrome/toolkit/components/url-classifier/tests/mochitest/report.sjs";
@@ -60,31 +62,23 @@ function setupTestData(data) {
   let activeTable = SpecialPowers.getCharPref(activeTablePref);
       activeTable += "," + data.list;
   promises.push(pushPrefs([activeTablePref, activeTable]));
 
   promises.push(addUrlToDB(data.list, data.testUrl));
   return Promise.all(promises);
 }
 
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
-
 function testOnWindow(aTestData, aCallback, aTestCreater) {
   return new Promise(resolve => {
     let win = mainWindow.OpenBrowserWindow();
 
     (async function() {
-      await new Promise(resolve => whenDelayedStartupFinished(win, resolve));
+      await TestUtils.topicObserved("browser-delayed-startup-finished",
+                                    subject => subject == win);
 
       let browser = win.gBrowser.selectedBrowser;
       aTestCreater(win, browser, aTestData.topUrl, aTestData.testUrl);
 
       let notification = await BrowserTestUtils.waitForNotificationBar(win.gBrowser, browser, "blocked-badware-page");
       ok(notification, "Notification box should be displayed");
 
       let buttons = notification.getElementsByTagName("button");
@@ -108,25 +102,25 @@ function testOnWindow(aTestData, aCallba
   });
 }
 
 var createBlockedIframe = function(aWindow, aBrowser, aTopUrl, aUrl) {
   (async function() {
     await BrowserTestUtils.loadURI(aBrowser, aTopUrl);
     await BrowserTestUtils.browserLoaded(aBrowser);
 
-    await ContentTask.spawn(aBrowser, aUrl, async function(aUrl) {
+    await ContentTask.spawn(aBrowser, aUrl, async function(url) {
       return new Promise(resolve => {
         let listener = e => {
           removeEventListener("AboutBlockedLoaded", listener, false, true);
           resolve();
         };
         addEventListener("AboutBlockedLoaded", listener, false, true);
         let frame = content.document.getElementById("phishingFrame");
-        frame.setAttribute("src", "http://" + aUrl);
+        frame.setAttribute("src", "http://" + url);
       });
     });
 
     let doc = aWindow.gBrowser.contentDocument.getElementsByTagName("iframe")[0].contentDocument;
     let ignoreButton = doc.getElementById("ignoreWarningButton");
     ok(ignoreButton, "ignoreWarningButton should exist");
     ignoreButton.click();
   })();
--- a/toolkit/components/url-classifier/tests/mochitest/test_safebrowsing_bug1272239.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_safebrowsing_bug1272239.html
@@ -41,47 +41,47 @@ for (var child of children) {
   var prefComponents =  child.split(".");
   var providerName = prefComponents[0];
   providers[providerName] = {};
 }
 
 // Get lists from |browser.safebrowsing.provider.PROVIDER_NAME.lists| preference.
 var listsWithProvider = [];
 var listsToProvider = [];
-for (var provider in providers) {
-  var pref = "browser.safebrowsing.provider." + provider + ".lists";
-  var list = SpecialPowers.getCharPref(pref).split(",");
+for (let provider in providers) {
+  let pref = "browser.safebrowsing.provider." + provider + ".lists";
+  let list = SpecialPowers.getCharPref(pref).split(",");
 
   listsToProvider = listsToProvider.concat(list.map( () => { return provider; }));
   listsWithProvider = listsWithProvider.concat(list);
 }
 
 // Get all the lists
 var lists = [];
-for (var pref of prefs) {
+for (let pref of prefs) {
   lists = lists.concat(SpecialPowers.getCharPref(pref).split(","));
 }
 
 var listmanager = Cc["@mozilla.org/url-classifier/listmanager;1"].
                   getService(Ci.nsIUrlListManager);
 
 let googleKey = SpecialPowers.Services.urlFormatter.formatURL("%GOOGLE_API_KEY%").trim();
 
-for (var list of lists) {
+for (let list of lists) {
   if (!list)
     continue;
 
   // For lists having a provider, it should have a correct gethash url
   // For lists without a provider, for example, test-malware-simple, it should not
   // have a gethash url.
   var url = listmanager.getGethashUrl(list);
   var index = listsWithProvider.indexOf(list);
   if (index >= 0) {
-    var provider = listsToProvider[index];
-    var pref = "browser.safebrowsing.provider." + provider + ".gethashURL";
+    let provider = listsToProvider[index];
+    let pref = "browser.safebrowsing.provider." + provider + ".gethashURL";
     if ((provider == "google" || provider == "google4") &&
         (!googleKey || googleKey == "no-google-api-key")) {
       is(url, "", "getHash url of " + list + " should be empty");
     } else {
       is(url, SpecialPowers.getCharPref(pref), list + " matches its gethash url");
     }
   } else {
     is(url, "", list + " should not have a gethash url");
--- a/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1157081.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1157081.html
@@ -24,30 +24,23 @@ var mainWindow = window.QueryInterface(C
                     .QueryInterface(Ci.nsIDocShellTreeItem)
                     .rootTreeItem
                     .QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIDOMWindow);
 var contentPage = "chrome://mochitests/content/chrome/toolkit/components/url-classifier/tests/mochitest/classifiedAnnotatedPBFrame.html"
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 Components.utils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
+Components.utils.import("resource://testing-common/TestUtils.jsm");
 
 function testOnWindow(aCallback) {
   var win = mainWindow.OpenBrowserWindow();
   win.addEventListener("load", function() {
-    whenDelayedStartupFinished(win, function() {
+    TestUtils.topicObserved("browser-delayed-startup-finished",
+                            subject => subject == win).then(() => {
       win.addEventListener("DOMContentLoaded", function onInnerLoad() {
         if (win.content.location.href != contentPage) {
           win.gBrowser.loadURI(contentPage);
           return;
         }
         win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
 
         win.content.addEventListener("load", function innerLoad2() {
@@ -82,19 +75,19 @@ function test() {
   UrlClassifierTestUtils.addTestTrackers().then(() => {
     // Safe Browsing turned OFF, tracking protection should work nevertheless
     testOnWindow(function(aWindow) {
       checkLoads(aWindow, true);
       aWindow.close();
 
       // Safe Browsing turned ON, tracking protection should still work
       SpecialPowers.setBoolPref("browser.safebrowsing.phishing.enabled", true);
-      testOnWindow(function(aWindow) {
-        checkLoads(aWindow, true);
-        aWindow.close();
+      testOnWindow(function(aWindow1) {
+        checkLoads(aWindow1, true);
+        aWindow1.close();
         SimpleTest.finish();
       });
     });
   });
 }
 
 SimpleTest.waitForExplicitFinish();
 
--- a/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1312515.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_bug1312515.html
@@ -24,30 +24,23 @@ var mainWindow = window.QueryInterface(C
                        .QueryInterface(Ci.nsIDocShellTreeItem)
                        .rootTreeItem
                        .QueryInterface(Ci.nsIInterfaceRequestor)
                        .getInterface(Ci.nsIDOMWindow);
 var contentPage = "http://www.itisatrap.org/tests/toolkit/components/url-classifier/tests/mochitest/trackingRequest.html";
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 Components.utils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
+Components.utils.import("resource://testing-common/TestUtils.jsm");
 
 function testOnWindow(aPrivate, aCallback) {
   var win = mainWindow.OpenBrowserWindow({private: aPrivate});
   win.addEventListener("load", function() {
-    whenDelayedStartupFinished(win, function() {
+    TestUtils.topicObserved("browser-delayed-startup-finished",
+                            subject => subject == win).then(() => {
       win.addEventListener("DOMContentLoaded", function onInnerLoad() {
         if (win.content.location.href != contentPage) {
           win.gBrowser.loadURI(contentPage);
           return;
         }
         win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
 
         win.content.addEventListener("load", function innerLoad2() {
--- a/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_whitelist.html
+++ b/toolkit/components/url-classifier/tests/mochitest/test_trackingprotection_whitelist.html
@@ -25,30 +25,23 @@ var mainWindow = window.QueryInterface(C
                     .rootTreeItem
                     .QueryInterface(Ci.nsIInterfaceRequestor)
                     .getInterface(Ci.nsIDOMWindow);
 var contentPage1 = "http://www.itisatrap.org/tests/toolkit/components/url-classifier/tests/mochitest/whitelistFrame.html";
 var contentPage2 = "http://example.com/tests/toolkit/components/url-classifier/tests/mochitest/whitelistFrame.html";
 
 Components.utils.import("resource://gre/modules/Services.jsm");
 Components.utils.import("resource://testing-common/UrlClassifierTestUtils.jsm");
-
-function whenDelayedStartupFinished(aWindow, aCallback) {
-  Services.obs.addObserver(function observer(aSubject, aTopic) {
-    if (aWindow == aSubject) {
-      Services.obs.removeObserver(observer, aTopic);
-      setTimeout(aCallback, 0);
-    }
-  }, "browser-delayed-startup-finished");
-}
+Components.utils.import("resource://testing-common/TestUtils.jsm");
 
 function testOnWindow(contentPage, aCallback) {
   var win = mainWindow.OpenBrowserWindow();
   win.addEventListener("load", function() {
-    whenDelayedStartupFinished(win, function() {
+    TestUtils.topicObserved("browser-delayed-startup-finished",
+                            subject => subject == win).then(() => {
       win.addEventListener("DOMContentLoaded", function onInnerLoad() {
         if (win.content.location.href != contentPage) {
           win.gBrowser.loadURI(contentPage);
           return;
         }
         win.removeEventListener("DOMContentLoaded", onInnerLoad, true);
 
         win.content.addEventListener("load", function innerLoad2() {
@@ -77,34 +70,34 @@ function checkLoads(aWindow, aWhiteliste
   is(win.document.blockedTrackingNodeCount, badids.length, "Should identify all tracking elements");
 
   var blockedTrackingNodes = win.document.blockedTrackingNodes;
 
   // Make sure that every node in blockedTrackingNodes exists in the tree
   // (that may not always be the case but do not expect any nodes to disappear
   // from the tree here)
   var allNodeMatch = true;
-  for (var i = 0; i < blockedTrackingNodes.length; i++) {
-    var nodeMatch = false;
-    for (var j = 0; j < badids.length && !nodeMatch; j++) {
+  for (let i = 0; i < blockedTrackingNodes.length; i++) {
+    let nodeMatch = false;
+    for (let j = 0; j < badids.length && !nodeMatch; j++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == win.document.getElementById(badids[j]));
     }
 
     allNodeMatch = allNodeMatch && nodeMatch;
   }
   is(allNodeMatch, true, "All annotated nodes are expected in the tree");
 
   // Make sure that every node with a badid (see badids) is found in the
   // blockedTrackingNodes. This tells us if we are neglecting to annotate
   // some nodes
   allNodeMatch = true;
-  for (var j = 0; j < badids.length; j++) {
-    var nodeMatch = false;
-    for (var i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
+  for (let j = 0; j < badids.length; j++) {
+    let nodeMatch = false;
+    for (let i = 0; i < blockedTrackingNodes.length && !nodeMatch; i++) {
       nodeMatch = nodeMatch ||
         (blockedTrackingNodes[i] == win.document.getElementById(badids[j]));
     }
 
     allNodeMatch = allNodeMatch && nodeMatch;
   }
   is(allNodeMatch, true, "All tracking nodes are expected to be annotated as such");
 }
@@ -118,26 +111,26 @@ function test() {
   SimpleTest.registerCleanupFunction(UrlClassifierTestUtils.cleanupTestTrackers);
   UrlClassifierTestUtils.addTestTrackers().then(() => {
     // Load the test from a URL on the whitelist
     testOnWindow(contentPage1, function(aWindow) {
       checkLoads(aWindow, true);
       aWindow.close();
 
       // Load the test from a URL that's NOT on the whitelist
-      testOnWindow(contentPage2, function(aWindow) {
-        checkLoads(aWindow, false);
-        aWindow.close();
+      testOnWindow(contentPage2, function(aWindow1) {
+        checkLoads(aWindow1, false);
+        aWindow1.close();
 
         // Load the test from a URL on the whitelist but without the whitelist
         SpecialPowers.pushPrefEnv({"set": [["urlclassifier.trackingWhitelistTable", ""]]},
           function() {
-            testOnWindow(contentPage1, function(aWindow) {
-              checkLoads(aWindow, false);
-              aWindow.close();
+            testOnWindow(contentPage1, function(aWindow2) {
+              checkLoads(aWindow2, false);
+              aWindow2.close();
               SimpleTest.finish();
             });
           });
 
       });
     });
   });
 }
--- a/toolkit/components/url-classifier/tests/mochitest/unwantedWorker.js
+++ b/toolkit/components/url-classifier/tests/mochitest/unwantedWorker.js
@@ -1,3 +1,5 @@
+/* eslint-env worker */
+
 onmessage = function() {
   postMessage("loaded bad file");
 }
--- a/toolkit/components/url-classifier/tests/unit/test_addsub.js
+++ b/toolkit/components/url-classifier/tests/unit/test_addsub.js
@@ -192,17 +192,16 @@ function testDuplicateAdds() {
     "subsDontExist": [ "foo.com/a"]
   }
 
   doTest([addUpdate1, addUpdate2, subUpdate], assertions);
 }
 
 // Tests a sub which matches some existing adds but leaves others.
 function testSubPartiallyMatches() {
-  var subUrls = ["foo.com/a"];
   var addUrls = ["1:foo.com/a", "2:foo.com/b"];
 
   var addUpdate = buildPhishingUpdate(
     [{ "chunkNum": 1,
        "urls": addUrls }]);
 
   var subUpdate = buildPhishingUpdate(
     [{ "chunkNum": 1,
--- a/toolkit/components/url-classifier/tests/unit/test_dbservice.js
+++ b/toolkit/components/url-classifier/tests/unit/test_dbservice.js
@@ -58,42 +58,42 @@ var chunk7 = chunk7Urls.join("\n");
 // and chunk 7 to block-simple.
 // Then we'll remove the urls in chunk3 from phish-simple, then
 // expire chunk 1 and chunks 4-7 from phish-simple.
 var phishExpected = {};
 var phishUnexpected = {};
 var malwareExpected = {};
 var unwantedExpected = {};
 var blockedExpected = {};
-for (var i = 0; i < chunk2Urls.length; i++) {
+for (let i = 0; i < chunk2Urls.length; i++) {
   phishExpected[chunk2Urls[i]] = true;
   malwareExpected[chunk2Urls[i]] = true;
 }
-for (var i = 0; i < chunk3Urls.length; i++) {
+for (let i = 0; i < chunk3Urls.length; i++) {
   unwantedExpected[chunk3Urls[i]] = true;
   delete phishExpected[chunk3Urls[i]];
   phishUnexpected[chunk3Urls[i]] = true;
 }
-for (var i = 0; i < chunk1Urls.length; i++) {
+for (let i = 0; i < chunk1Urls.length; i++) {
   // chunk1 urls are expired
   phishUnexpected[chunk1Urls[i]] = true;
 }
-for (var i = 0; i < chunk4Urls.length; i++) {
+for (let i = 0; i < chunk4Urls.length; i++) {
   // chunk4 urls are expired
   phishUnexpected[chunk4Urls[i]] = true;
 }
-for (var i = 0; i < chunk5Urls.length; i++) {
+for (let i = 0; i < chunk5Urls.length; i++) {
   // chunk5 urls are expired
   phishUnexpected[chunk5Urls[i]] = true;
 }
-for (var i = 0; i < chunk6Urls.length; i++) {
+for (let i = 0; i < chunk6Urls.length; i++) {
   // chunk6 urls are expired
   phishUnexpected[chunk6Urls[i]] = true;
 }
-for (var i = 0; i < chunk7Urls.length; i++) {
+for (let i = 0; i < chunk7Urls.length; i++) {
   blockedExpected[chunk7Urls[i]] = true;
   // chunk7 urls are expired
   phishUnexpected[chunk7Urls[i]] = true;
 }
 
 // Check that the entries hit based on sub-parts
 phishExpected["baz.com/foo/bar"] = true;
 phishExpected["foo.bar.baz.com/foo"] = true;
@@ -104,17 +104,17 @@ var numExpecting;
 function testFailure(arg) {
   do_throw(arg);
 }
 
 function checkNoHost() {
   // Looking up a no-host uri such as a data: uri should throw an exception.
   var exception;
   try {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("data:text/html,<b>test</b>"), {});
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("data:text/html,<b>test</b>"), {});
     dbservice.lookup(principal, allTables);
 
     exception = false;
   } catch (e) {
     exception = true;
   }
   do_check_true(exception);
 
@@ -212,42 +212,42 @@ function blockedExists(result) {
     checkDone();
   }
 }
 
 function checkState() {
   numExpecting = 0;
 
 
-  for (var key in phishExpected) {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
+  for (let key in phishExpected) {
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
     dbservice.lookup(principal, allTables, phishExists, true);
     numExpecting++;
   }
 
-  for (var key in phishUnexpected) {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
+  for (let key in phishUnexpected) {
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
     dbservice.lookup(principal, allTables, phishDoesntExist, true);
     numExpecting++;
   }
 
-  for (var key in malwareExpected) {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
+  for (let key in malwareExpected) {
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
     dbservice.lookup(principal, allTables, malwareExists, true);
     numExpecting++;
   }
 
-  for (var key in unwantedExpected) {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
+  for (let key in unwantedExpected) {
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
     dbservice.lookup(principal, allTables, unwantedExists, true);
     numExpecting++;
   }
 
-  for (var key in blockedExpected) {
-    var principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
+  for (let key in blockedExpected) {
+    let principal = secMan.createCodebasePrincipal(iosvc.newURI("http://" + key), {});
     dbservice.lookup(principal, allTables, blockedExists, true);
     numExpecting++;
   }
 }
 
 function testSubSuccess(result) {
   do_check_eq(result, "1000");
   checkState();
--- a/toolkit/components/url-classifier/tests/unit/test_digest256.js
+++ b/toolkit/components/url-classifier/tests/unit/test_digest256.js
@@ -68,18 +68,16 @@ function processUpdateRequest() {
 }
 
 // Set up our test server to handle update requests.
 function run_test() {
   gHttpServ = new HttpServer();
   gHttpServ.registerDirectory("/", do_get_cwd());
 
   gHttpServ.registerPathHandler("/downloads", function(request, response) {
-    let buf = NetUtil.readInputStreamToString(request.bodyInputStream,
-      request.bodyInputStream.available());
     let blob = processUpdateRequest();
     response.setHeader("Content-Type",
                        "application/vnd.google.safebrowsing-update", false);
     response.setStatusLine(request.httpVersion, 200, "OK");
     response.bodyOutputStream.write(blob, blob.length);
   });
 
   gHttpServ.start(4444);
--- a/toolkit/components/url-classifier/tests/unit/test_hashcompleter.js
+++ b/toolkit/components/url-classifier/tests/unit/test_hashcompleter.js
@@ -135,17 +135,16 @@ function parseCompletionRequest(aRequest
 
   let tokens = /(\d):(\d+)/.exec(aRequest);
   if (tokens.length < 3) {
     dump("Request format error.");
     return null;
   }
 
   let partialLength = parseInt(tokens[1]);
-  let payloadLength = parseInt(tokens[2]);
 
   let payloadStart = tokens[1].length + // partial length
                      1 +                // ':'
                      tokens[2].length + // payload length
                      1;                 // '\n'
 
   let prefixSet = [];
   for (let i = payloadStart; i < aRequest.length; i += partialLength) {
@@ -187,17 +186,17 @@ function getRandomCompletionSet(forceSer
 
     // Generate a random 256 bit hash. First we get a random number and then
     // convert it to a string.
     let hash;
     let prefix;
     do {
       hash = "";
       let length = 1 + rand.nextNum(5);
-      for (let i = 0; i < length; i++)
+      for (let j = 0; j < length; j++)
         hash += String.fromCharCode(rand.nextNum(8));
       prefix = hash.substring(0, 4);
     } while (hashPrefixes.indexOf(prefix) != -1);
 
     hashPrefixes.push(prefix);
     completion.hash = hash;
 
     if (!forceServerError) {
@@ -218,17 +217,16 @@ function getRandomCompletionSet(forceSer
   return completionSet;
 }
 
 var completionSets = [basicCompletionSet, falseCompletionSet,
                       dupedCompletionSet, multipleResponsesCompletionSet];
 var currentCompletionSet = -1;
 var finishedCompletions = 0;
 
-const SERVER_PORT = 8080;
 const SERVER_PATH = "/hash-completer";
 var server;
 
 // Completion hashes are automatically right-padded with null chars to have a
 // length of COMPLETE_LENGTH.
 // Taken from nsUrlClassifierDBService.h
 const COMPLETE_LENGTH = 32;
 
@@ -349,17 +347,17 @@ function hashCompleterServer(aRequest, a
 }
 
 
 function callback(completion) {
   this._completion = completion;
 }
 
 callback.prototype = {
-  completionV2: function completion(hash, table, chunkId, trusted) {
+  completionV2: function completionV2(hash, table, chunkId, trusted) {
     do_check_true(this._completion.expectCompletion);
     if (this._completion.multipleCompletions) {
       for (let completion of this._completion.completions) {
         if (completion.hash == hash) {
           do_check_eq(JSON.stringify(hash), JSON.stringify(completion.hash));
           do_check_eq(table, completion.table);
           do_check_eq(chunkId, completion.chunkId);
 
--- a/toolkit/components/url-classifier/tests/unit/test_partial.js
+++ b/toolkit/components/url-classifier/tests/unit/test_partial.js
@@ -23,27 +23,26 @@ complete(partialHash, gethashUrl, tableN
   this.queries.push(partialHash);
   var fragments = this.fragments;
   var self = this;
   var doCallback = function() {
       if (self.alwaysFail) {
         cb.completionFinished(Cr.NS_ERROR_FAILURE);
         return;
       }
-      var results;
       if (fragments[partialHash]) {
         for (var i = 0; i < fragments[partialHash].length; i++) {
           var chunkId = fragments[partialHash][i][0];
           var hash = fragments[partialHash][i][1];
           cb.completionV2(hash, self.tableName, chunkId);
         }
       }
     cb.completionFinished(0);
   }
-  var timer = new Timer(0, doCallback);
+  do_execute_soon(doCallback);
 },
 
 getHash(fragment) {
   var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].
   createInstance(Ci.nsIScriptableUnicodeConverter);
   converter.charset = "UTF-8";
   var data = converter.convertToByteArray(fragment);
   var ch = Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
@@ -71,42 +70,42 @@ addHash(chunkId, hash) {
     this.fragments[partial].push([chunkId, hash]);
   } else {
     this.fragments[partial] = [[chunkId, hash]];
   }
 },
 
 compareQueries(fragments) {
   var expectedQueries = [];
-  for (var i = 0; i < fragments.length; i++) {
+  for (let i = 0; i < fragments.length; i++) {
     expectedQueries.push(this.getHash(fragments[i]).slice(0, 4));
   }
   do_check_eq(this.queries.length, expectedQueries.length);
   expectedQueries.sort();
   this.queries.sort();
-  for (var i = 0; i < this.queries.length; i++) {
+  for (let i = 0; i < this.queries.length; i++) {
     do_check_eq(this.queries[i], expectedQueries[i]);
   }
 }
 };
 
 function setupCompleter(table, hits, conflicts) {
   var completer = new DummyCompleter();
   completer.tableName = table;
-  for (var i = 0; i < hits.length; i++) {
-    var chunkId = hits[i][0];
-    var fragments = hits[i][1];
-    for (var j = 0; j < fragments.length; j++) {
+  for (let i = 0; i < hits.length; i++) {
+    let chunkId = hits[i][0];
+    let fragments = hits[i][1];
+    for (let j = 0; j < fragments.length; j++) {
       completer.addFragment(chunkId, fragments[j]);
     }
   }
-  for (var i = 0; i < conflicts.length; i++) {
-    var chunkId = conflicts[i][0];
-    var fragments = conflicts[i][1];
-    for (var j = 0; j < fragments.length; j++) {
+  for (let i = 0; i < conflicts.length; i++) {
+    let chunkId = conflicts[i][0];
+    let fragments = conflicts[i][1];
+    for (let j = 0; j < fragments.length; j++) {
       completer.addConflict(chunkId, fragments[j]);
     }
   }
 
   dbservice.setHashCompleter(table, completer);
 
   return completer;
 }
@@ -404,17 +403,17 @@ function testInvalidHashSize() {
   var addUrls2 = [ "zaz.com/a", "xyz.com/b" ];
   var update2 = buildPhishingUpdate(
         [
           { "chunkNum": 2,
             "urls": addUrls2
           }],
         4);
 
-  var completer = installCompleter("test-phish-simple", [[1, addUrls]], []);
+  installCompleter("test-phish-simple", [[1, addUrls]], []);
 
   var assertions = {
     "tableData": "test-phish-simple;a:2",
     "urlsDontExist": addUrls
   };
 
   // A successful update will trigger an error
   doUpdateTest([update2, update], assertions, updateError, runNextTest);
@@ -444,27 +443,27 @@ function testWrongTable() {
     "urlsDontExist": addUrls,
     // Make sure the completer was actually queried.
     "completerQueried": [completer, addUrls]
   };
 
   doUpdateTest([update], assertions,
                function() {
                  // Give the dbservice a chance to (not) cache the result.
-                 var timer = new Timer(3000, function() {
+                 do_timeout(3000, function() {
                      // The miss earlier will have caused a miss to be cached.
                      // Resetting the completer does not count as an update,
                      // so we will not be probed again.
                      var newCompleter = installCompleter("test-malware-simple", [[1, addUrls]], []); dbservice.setHashCompleter("test-phish-simple",
                                                 newCompleter);
 
-                     var assertions = {
+                     var assertions1 = {
                        "urlsDontExist": addUrls
                      };
-                     checkAssertions(assertions, runNextTest);
+                     checkAssertions(assertions1, runNextTest);
                    });
                }, updateError);
 }
 
 function setupCachedResults(addUrls, part2) {
   var update = buildPhishingUpdate(
         [
           { "chunkNum": 1,
@@ -480,17 +479,17 @@ function setupCachedResults(addUrls, par
     "urlsExist": addUrls,
     // Make sure the completer was actually queried.
     "completerQueried": [completer, addUrls]
   };
 
   doUpdateTest([update], assertions,
                function() {
                  // Give the dbservice a chance to cache the result.
-                 var timer = new Timer(3000, part2);
+                 do_timeout(3000, part2);
                }, updateError);
 }
 
 function testCachedResults() {
   setupCachedResults(["foo.com/a"], function(add) {
       // This is called after setupCachedResults().  Verify that
       // checking the url again does not cause a completer request.
 
@@ -552,25 +551,16 @@ function testCachedResultsFailure() {
     // install a new completer, this one should never be queried.
     var newCompleter = installCompleter("test-phish-simple", [[1, []]], []);
 
     var assertions = {
       "urlsExist": existUrls,
       "completerQueried": [newCompleter, []]
     };
 
-    var addUrls = ["foobar.org/a"];
-
-    var update2 = buildPhishingUpdate(
-        [
-          { "chunkNum": 2,
-            "urls": addUrls
-          }],
-        4);
-
     checkAssertions(assertions, function() {
       // Apply the update. The cached completes should be gone.
       doErrorUpdate("test-phish-simple,test-malware-simple", function() {
         // Now the completer gets queried again.
         var newCompleter2 = installCompleter("test-phish-simple", [[1, existUrls]], []);
         var assertions2 = {
           "tableData": "test-phish-simple;a:1",
           "urlsExist": existUrls,