Bug 1370881 - Replace calls to asyncHistory.isURIVisited and promiseIsURIVisited with PlacesUtils.history.hasVisits r?Standard8 draft
authorhemant <hemantsingh1612@gmail.com>
Wed, 24 Jan 2018 20:58:57 +0530
changeset 724139 5b87eafdf24ba4d47180f4e76daec522dec65583
parent 722493 d4d53f4069f43eab1aae8bcf4def08bdb5a84d8d
child 747067 44eb95dafb78b68d19238709f9c3631cb522bf07
push id96660
push userbmo:hemantsingh1612@gmail.com
push dateWed, 24 Jan 2018 15:32:37 +0000
reviewersStandard8
bugs1370881
milestone59.0a1
Bug 1370881 - Replace calls to asyncHistory.isURIVisited and promiseIsURIVisited with PlacesUtils.history.hasVisits r?Standard8 MozReview-Commit-ID: BHWkJpdYA0g
browser/base/content/test/general/browser_sanitize-timespans.js
browser/base/content/test/general/head.js
browser/components/places/tests/browser/browser_library_commands.js
browser/components/places/tests/browser/head.js
services/sync/tests/unit/test_corrupt_keys.js
toolkit/components/jsdownloads/test/unit/common_test_Download.js
toolkit/components/jsdownloads/test/unit/head.js
toolkit/components/places/nsLivemarkService.js
toolkit/components/places/tests/browser/browser_bug680727.js
toolkit/components/places/tests/browser/browser_history_post.js
toolkit/components/places/tests/browser/head.js
toolkit/components/places/tests/head_common.js
toolkit/components/places/tests/history/test_async_history_api.js
toolkit/components/places/tests/history/test_removeVisits.js
toolkit/components/places/tests/unit/test_425563.js
toolkit/components/places/tests/unit/test_isvisited.js
toolkit/components/places/tests/unit/test_preventive_maintenance.js
toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
--- a/browser/base/content/test/general/browser_sanitize-timespans.js
+++ b/browser/base/content/test/general/browser_sanitize-timespans.js
@@ -100,35 +100,35 @@ async function onHistoryReady() {
   // Clear 10 minutes ago
   s.range = [now_uSec - 10 * 60 * 1000000, now_uSec];
   await s.sanitize();
   s.range = null;
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://10minutes.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://10minutes.com")),
      "Pretend visit to 10minutes.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://1hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://1hour.com")),
      "Pretend visit to 1hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://1hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://1hour10minutes.com")),
      "Pretend visit to 1hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://2hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour.com")),
      "Pretend visit to 2hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://2hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour10minutes.com")),
      "Pretend visit to 2hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (minutesSinceMidnight > 10) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   let checkZero = function(num, message) { is(num, 0, message); };
   let checkOne = function(num, message) { is(num, 1, message); };
 
   await countEntries("10minutes", "10minutes form entry should be deleted", checkZero);
   await countEntries("1hour", "1hour form entry should still exist", checkOne);
   await countEntries("1hour10minutes", "1hour10minutes form entry should still exist", checkOne);
@@ -157,33 +157,33 @@ async function onHistoryReady() {
 
   // Clear 1 hour
   Sanitizer.prefs.setIntPref("timeSpan", 1);
   await s.sanitize();
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://1hour.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://1hour.com")),
      "Pretend visit to 1hour.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://1hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://1hour10minutes.com")),
      "Pretend visit to 1hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://2hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour.com")),
      "Pretend visit to 2hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://2hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour10minutes.com")),
      "Pretend visit to 2hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (hoursSinceMidnight > 1) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("1hour", "1hour form entry should be deleted", checkZero);
   await countEntries("1hour10minutes", "1hour10minutes form entry should still exist", checkOne);
   await countEntries("2hour", "2hour form entry should still exist", checkOne);
   await countEntries("2hour10minutes", "2hour10minutes form entry should still exist", checkOne);
   await countEntries("4hour", "4hour form entry should still exist", checkOne);
   await countEntries("4hour10minutes", "4hour10minutes form entry should still exist", checkOne);
@@ -208,31 +208,31 @@ async function onHistoryReady() {
   // Clear 1 hour 10 minutes
   s.range = [now_uSec - 70 * 60 * 1000000, now_uSec];
   await s.sanitize();
   s.range = null;
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://1hour10minutes.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://1hour10minutes.com")),
      "Pretend visit to 1hour10minutes.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://2hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour.com")),
      "Pretend visit to 2hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://2hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour10minutes.com")),
      "Pretend visit to 2hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (minutesSinceMidnight > 70) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("1hour10minutes", "1hour10minutes form entry should be deleted", checkZero);
   await countEntries("2hour", "2hour form entry should still exist", checkOne);
   await countEntries("2hour10minutes", "2hour10minutes form entry should still exist", checkOne);
   await countEntries("4hour", "4hour form entry should still exist", checkOne);
   await countEntries("4hour10minutes", "4hour10minutes form entry should still exist", checkOne);
   if (minutesSinceMidnight > 70)
@@ -253,29 +253,29 @@ async function onHistoryReady() {
 
   // Clear 2 hours
   Sanitizer.prefs.setIntPref("timeSpan", 2);
   await s.sanitize();
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://2hour.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://2hour.com")),
      "Pretend visit to 2hour.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://2hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://2hour10minutes.com")),
      "Pretend visit to 2hour10minutes.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (hoursSinceMidnight > 2) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("2hour", "2hour form entry should be deleted", checkZero);
   await countEntries("2hour10minutes", "2hour10minutes form entry should still exist", checkOne);
   await countEntries("4hour", "4hour form entry should still exist", checkOne);
   await countEntries("4hour10minutes", "4hour10minutes form entry should still exist", checkOne);
   if (hoursSinceMidnight > 2)
     await countEntries("today", "today form entry should still exist", checkOne);
@@ -295,27 +295,27 @@ async function onHistoryReady() {
   // Clear 2 hours 10 minutes
   s.range = [now_uSec - 130 * 60 * 1000000, now_uSec];
   await s.sanitize();
   s.range = null;
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://2hour10minutes.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://2hour10minutes.com")),
      "Pretend visit to 2hour10minutes.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should should still exist");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (minutesSinceMidnight > 130) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("2hour10minutes", "2hour10minutes form entry should be deleted", checkZero);
   await countEntries("4hour", "4hour form entry should still exist", checkOne);
   await countEntries("4hour10minutes", "4hour10minutes form entry should still exist", checkOne);
   if (minutesSinceMidnight > 130)
     await countEntries("today", "today form entry should still exist", checkOne);
   await countEntries("b4today", "b4today form entry should still exist", checkOne);
@@ -332,25 +332,25 @@ async function onHistoryReady() {
 
   // Clear 4 hours
   Sanitizer.prefs.setIntPref("timeSpan", 3);
   await s.sanitize();
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://4hour.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://4hour.com")),
      "Pretend visit to 4hour.com should now be deleted");
-  ok((await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should should still exist");
   if (hoursSinceMidnight > 4) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("4hour", "4hour form entry should be deleted", checkZero);
   await countEntries("4hour10minutes", "4hour10minutes form entry should still exist", checkOne);
   if (hoursSinceMidnight > 4)
     await countEntries("today", "today form entry should still exist", checkOne);
   await countEntries("b4today", "b4today form entry should still exist", checkOne);
 
@@ -366,23 +366,23 @@ async function onHistoryReady() {
   // Clear 4 hours 10 minutes
   s.range = [now_uSec - 250 * 60 * 1000000, now_uSec];
   await s.sanitize();
   s.range = null;
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://4hour10minutes.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://4hour10minutes.com")),
      "Pretend visit to 4hour10minutes.com should now be deleted");
   if (minutesSinceMidnight > 250) {
-    ok((await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok((await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should still exist");
   }
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
     "Pretend visit to before-today.com should still exist");
 
   await countEntries("4hour10minutes", "4hour10minutes form entry should be deleted", checkZero);
   if (minutesSinceMidnight > 250)
     await countEntries("today", "today form entry should still exist", checkOne);
   await countEntries("b4today", "b4today form entry should still exist", checkOne);
 
   ok(!(await downloadExists(publicList, "fakefile-4-hour-10-minutes")), "4 hour 10 minute download should now be deleted");
@@ -408,39 +408,39 @@ async function onHistoryReady() {
 
   // Be careful.  If we add our objectss just before midnight, and sanitize
   // runs immediately after, they won't be expired.  This is expected, but
   // we should not test in that case.  We cannot just test for opposite
   // condition because we could cross midnight just one moment after we
   // cache our time, then we would have an even worse random failure.
   var today = isToday(new Date(now_mSec));
   if (today) {
-    ok(!(await promiseIsURIVisited(makeURI("http://today.com"))),
+    ok(!(await PlacesUtils.history.hasVisits("http://today.com")),
        "Pretend visit to today.com should now be deleted");
 
     await countEntries("today", "today form entry should be deleted", checkZero);
     ok(!(await downloadExists(publicList, "fakefile-today")), "'Today' download should now be deleted");
   }
 
-  ok((await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok((await PlacesUtils.history.hasVisits("http://before-today.com")),
      "Pretend visit to before-today.com should still exist");
   await countEntries("b4today", "b4today form entry should still exist", checkOne);
   ok((await downloadExists(publicList, "fakefile-old")), "Year old download should still be present");
 
   downloadPromise = promiseDownloadRemoved(publicList);
   formHistoryPromise = promiseFormHistoryRemoved();
 
   // Choose everything
   Sanitizer.prefs.setIntPref("timeSpan", 0);
   await s.sanitize();
 
   await formHistoryPromise;
   await downloadPromise;
 
-  ok(!(await promiseIsURIVisited(makeURI("http://before-today.com"))),
+  ok(!(await PlacesUtils.history.hasVisits("http://before-today.com")),
      "Pretend visit to before-today.com should now be deleted");
 
   await countEntries("b4today", "b4today form entry should be deleted", checkZero);
 
   ok(!(await downloadExists(publicList, "fakefile-old")), "Year old download should now be deleted");
 }
 
 function setupHistory() {
--- a/browser/base/content/test/general/head.js
+++ b/browser/base/content/test/general/head.js
@@ -268,34 +268,16 @@ function waitForAsyncUpdates(aCallback, 
     handleError() {},
     handleCompletion(aReason) {
       aCallback.apply(scope, args);
     }
   });
   commit.finalize();
 }
 
-/**
- * Asynchronously check a url is visited.
-
- * @param aURI The URI.
- * @param aExpectedValue The expected value.
- * @return {Promise}
- * @resolves When the check has been added successfully.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(aURI, aExpectedValue) {
-  return new Promise(resolve => {
-    PlacesUtils.asyncHistory.isURIVisited(aURI, function(unused, aIsVisited) {
-      resolve(aIsVisited);
-    });
-
-  });
-}
-
 function whenNewTabLoaded(aWindow, aCallback) {
   aWindow.BrowserOpenTab();
 
   let browser = aWindow.gBrowser.selectedBrowser;
   let doc = browser.contentDocumentAsCPOW;
   if (doc && doc.readyState === "complete") {
     aCallback();
     return;
@@ -332,17 +314,16 @@ function promiseHistoryClearedState(aURI
     }
     aURIs.forEach(function(aURI) {
       PlacesUtils.asyncHistory.isURIVisited(aURI, function(uri, isVisited) {
         is(isVisited, !aShouldBeCleared,
            "history visit " + uri.spec + " should " + niceStr + " exist");
         callbackDone();
       });
     });
-
   });
 }
 
 var FullZoomHelper = {
 
   selectTabAndWaitForLocationChange: function selectTabAndWaitForLocationChange(tab) {
     if (!tab)
       throw new Error("tab must be given.");
--- a/browser/components/places/tests/browser/browser_library_commands.js
+++ b/browser/components/places/tests/browser/browser_library_commands.js
@@ -64,17 +64,17 @@ add_task(async function test_date_contai
   PO._places.controller.doCommand("cmd_delete");
   await promiseURIRemoved;
 
   // Test live update of "History" query.
   is(historyNode.childCount, 0, "History node has no more children");
 
   historyNode.containerOpen = false;
 
-  ok(!(await promiseIsURIVisited(TEST_URI)), "Visit has been removed");
+  ok(!(await PlacesUtils.history.hasVisits(TEST_URI)), "Visit has been removed");
 
   library.close();
 });
 
 add_task(async function test_query_on_toolbar() {
   let library = await promiseLibrary();
   info("Ensure queries can be cut or deleted");
 
--- a/browser/components/places/tests/browser/head.js
+++ b/browser/components/places/tests/browser/head.js
@@ -145,25 +145,19 @@ function synthesizeClickOnSelectedTreeCe
 /**
  * Asynchronously check a url is visited.
  *
  * @param aURI The URI.
  * @return {Promise}
  * @resolves When the check has been added successfully.
  * @rejects JavaScript exception.
  */
-function promiseIsURIVisited(aURI) {
-  return new Promise(resolve => {
-
-    PlacesUtils.asyncHistory.isURIVisited(aURI, function(unused, aIsVisited) {
-      resolve(aIsVisited);
-    });
-
-  });
-}
+ function promiseIsURIVisited(aURI) {
+   return PlacesUtils.history.hasVisits(aURI);
+ }
 
 /**
  * Makes the specified toolbar visible or invisible and returns a Promise object
  * that is resolved when the toolbar has completed any animations associated
  * with hiding or showing the toolbar.
  *
  * Note that this code assumes that changes to a toolbar's visibility trigger
  * a transition on the max-height property of the toolbar element.
--- a/services/sync/tests/unit/test_corrupt_keys.js
+++ b/services/sync/tests/unit/test_corrupt_keys.js
@@ -126,21 +126,21 @@ add_task(async function test_locally_cha
     // Now syncing should succeed, after one HMAC error.
     let ping = await wait_for_ping(() => Service.sync(), true);
     equal(ping.engines.find(e => e.name == "history").incoming.applied, 5);
 
     Assert.equal(hmacErrorCount, 1);
     _("Keys now: " + Service.collectionKeys.keyForCollection("history").keyPair);
 
     // And look! We downloaded history!
-    Assert.ok(await promiseIsURIVisited("http://foo/bar?record-no--0"));
-    Assert.ok(await promiseIsURIVisited("http://foo/bar?record-no--1"));
-    Assert.ok(await promiseIsURIVisited("http://foo/bar?record-no--2"));
-    Assert.ok(await promiseIsURIVisited("http://foo/bar?record-no--3"));
-    Assert.ok(await promiseIsURIVisited("http://foo/bar?record-no--4"));
+    Assert.ok(await PlacesUtils.history.hasVisits("http://foo/bar?record-no--0"));
+    Assert.ok(await PlacesUtils.history.hasVisits("http://foo/bar?record-no--1"));
+    Assert.ok(await PlacesUtils.history.hasVisits("http://foo/bar?record-no--2"));
+    Assert.ok(await PlacesUtils.history.hasVisits("http://foo/bar?record-no--3"));
+    Assert.ok(await PlacesUtils.history.hasVisits("http://foo/bar?record-no--4"));
     Assert.equal(hmacErrorCount, 1);
 
     _("Busting some new server values.");
     // Now what happens if we corrupt the HMAC on the server?
     for (let i = 5; i < 10; i++) {
       let id = "record-no--" + i;
       let modified = 1 + (Date.now() / 1000);
 
@@ -171,40 +171,25 @@ add_task(async function test_locally_cha
     _("Syncing...");
     ping = await sync_and_validate_telem(true);
 
     Assert.equal(ping.engines.find(e => e.name == "history").incoming.failed, 5);
     _("Keys now: " + Service.collectionKeys.keyForCollection("history").keyPair);
     _("Server keys have been updated, and we skipped over 5 more HMAC errors without adjusting history.");
     Assert.ok(johndoe.modified("crypto") > old_key_time);
     Assert.equal(hmacErrorCount, 6);
-    Assert.equal(false, await promiseIsURIVisited("http://foo/bar?record-no--5"));
-    Assert.equal(false, await promiseIsURIVisited("http://foo/bar?record-no--6"));
-    Assert.equal(false, await promiseIsURIVisited("http://foo/bar?record-no--7"));
-    Assert.equal(false, await promiseIsURIVisited("http://foo/bar?record-no--8"));
-    Assert.equal(false, await promiseIsURIVisited("http://foo/bar?record-no--9"));
+    Assert.equal(false, await PlacesUtils.history.hasVisits("http://foo/bar?record-no--5"));
+    Assert.equal(false, await PlacesUtils.history.hasVisits("http://foo/bar?record-no--6"));
+    Assert.equal(false, await PlacesUtils.history.hasVisits("http://foo/bar?record-no--7"));
+    Assert.equal(false, await PlacesUtils.history.hasVisits("http://foo/bar?record-no--8"));
+    Assert.equal(false, await PlacesUtils.history.hasVisits("http://foo/bar?record-no--9"));
   } finally {
     Svc.Prefs.resetBranch("");
     await promiseStopServer(server);
   }
 });
 
 function run_test() {
   Log.repository.rootLogger.addAppender(new Log.DumpAppender());
   validate_all_future_pings();
 
   run_next_test();
 }
-
-/**
- * Asynchronously check a url is visited.
- * @param url the url
- * @return {Promise}
- * @resolves When the check has been added successfully.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(url) {
-  return new Promise(resolve => {
-    PlacesUtils.asyncHistory.isURIVisited(CommonUtils.makeURI(url), function(aURI, aIsVisited) {
-      resolve(aIsVisited);
-    });
-  });
-}
--- a/toolkit/components/jsdownloads/test/unit/common_test_Download.js
+++ b/toolkit/components/jsdownloads/test/unit/common_test_Download.js
@@ -2405,17 +2405,17 @@ add_task(async function test_history() {
 
   // Restart and complete the download after clearing history.
   await PlacesUtils.history.clear();
   download.cancel();
   continueResponses();
   await download.start();
 
   // The restart should not have added a new history visit.
-  Assert.equal(false, await promiseIsURIVisited(httpUrl("interruptible.txt")));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(httpUrl("interruptible.txt")));
 });
 
 /**
  * Checks that downloads started by nsIHelperAppService are added to the
  * browsing history when they start.
  */
 add_task(async function test_history_tryToKeepPartialData() {
   // We will wait for the visit to be notified during the download.
--- a/toolkit/components/jsdownloads/test/unit/head.js
+++ b/toolkit/components/jsdownloads/test/unit/head.js
@@ -176,37 +176,16 @@ function promiseWaitForVisit(aUrl) {
       onPageChanged() {},
       onDeleteVisits() {},
     });
 
   });
 }
 
 /**
- * Check browsing history to see whether the given URI has been visited.
- *
- * @param aUrl
- *        String containing the URI that will be visited.
- *
- * @return {Promise}
- * @resolves Boolean indicating whether the URI has been visited.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(aUrl) {
-  return new Promise(resolve => {
-
-    PlacesUtils.asyncHistory.isURIVisited(NetUtil.newURI(aUrl),
-      function(aURI, aIsVisited) {
-        resolve(aIsVisited);
-      });
-
-  });
-}
-
-/**
  * Creates a new Download object, setting a temporary file as the target.
  *
  * @param aSourceUrl
  *        String containing the URI for the download source, or null to use
  *        httpUrl("source.txt").
  *
  * @return {Promise}
  * @resolves The newly created Download object.
--- a/toolkit/components/places/nsLivemarkService.js
+++ b/toolkit/components/places/nsLivemarkService.js
@@ -8,20 +8,20 @@ const { classes: Cc, interfaces: Ci, res
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
                                   "resource://gre/modules/PlacesUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
                                   "resource://gre/modules/NetUtil.jsm");
 
-XPCOMUtils.defineLazyGetter(this, "asyncHistory", function() {
+XPCOMUtils.defineLazyGetter(this, "history", function() {
   // Lazily add an history observer when it's actually needed.
   PlacesUtils.history.addObserver(PlacesUtils.livemarks, true);
-  return PlacesUtils.asyncHistory;
+  return PlacesUtils.history;
 });
 
 // Constants
 
 // Delay between reloads of consecute livemarks.
 const RELOAD_DELAY_MS = 500;
 // Expire livemarks after this time.
 const EXPIRE_TIME_MS = 3600000; // 1 hour.
@@ -596,18 +596,18 @@ Livemark.prototype = {
 
     // Discard the previous cached nodes, new ones should be generated.
     for (let container of this._resultObservers.keys()) {
       this._nodes.delete(container);
     }
 
     // Update visited status for each entry.
     for (let child of this._children) {
-      asyncHistory.isURIVisited(child.uri, (aURI, aIsVisited) => {
-        this.updateURIVisitedStatus(aURI, aIsVisited);
+      history.hasVisits(child.uri, isVisited => {
+        this.updateURIVisitedStatus(child.uri, isVisited);
       });
     }
 
     return this._children;
   },
 
   _isURIVisited(aURI) {
     return this.children.some(child => child.uri.equals(aURI) && child.visited);
--- a/toolkit/components/places/tests/browser/browser_bug680727.js
+++ b/toolkit/components/places/tests/browser/browser_bug680727.js
@@ -2,19 +2,16 @@
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /* Ensure that clicking the button in the Offline mode neterror page updates
    global history. See bug 680727. */
 /* TEST_PATH=toolkit/components/places/tests/browser/browser_bug680727.js make -C $(OBJDIR) mochitest-browser-chrome */
 
 
 const kUniqueURI = Services.io.newURI("http://mochi.test:8888/#bug_680727");
-var gAsyncHistory =
-  Cc["@mozilla.org/browser/history;1"].getService(Ci.mozIAsyncHistory);
-
 var proxyPrefValue;
 var ourTab;
 
 function test() {
   waitForExplicitFinish();
 
   // Tests always connect to localhost, and per bug 87717, localhost is now
   // reachable in offline mode.  To avoid this, disable any proxy.
@@ -44,18 +41,20 @@ function errorListener() {
   ContentTask.spawn(ourTab.linkedBrowser, kUniqueURI.spec, function(uri) {
     Assert.equal(content.document.documentURI.substring(0, 27),
       "about:neterror?e=netOffline", "Document URI is the error page.");
 
     // But location bar should show the original request.
     Assert.equal(content.location.href, uri, "Docshell URI is the original URI.");
   }).then(() => {
     // Global history does not record URI of a failed request.
-    return PlacesTestUtils.promiseAsyncUpdates().then(() => {
-      gAsyncHistory.isURIVisited(kUniqueURI, errorAsyncListener);
+    PlacesTestUtils.promiseAsyncUpdates().then(() => {
+      PlacesUtils.history.hasVisits(kUniqueURI).then(isVisited => {
+        errorAsyncListener(kUniqueURI, isVisited);
+      });
     });
   });
 }
 
 function errorAsyncListener(aURI, aIsVisited) {
   ok(kUniqueURI.equals(aURI) && !aIsVisited,
      "The neterror page is not listed in global history.");
 
@@ -84,17 +83,19 @@ function reloadListener() {
 
   ContentTask.spawn(ourTab.linkedBrowser, kUniqueURI.spec, function(uri) {
     // This is not an error page.
     Assert.equal(content.document.documentURI, uri,
       "Document URI is not the offline-error page, but the original URI.");
   }).then(() => {
     // Check if global history remembers the successfully-requested URI.
     PlacesTestUtils.promiseAsyncUpdates().then(() => {
-      gAsyncHistory.isURIVisited(kUniqueURI, reloadAsyncListener);
+      PlacesUtils.history.hasVisits(kUniqueURI).then(isVisited => {
+          reloadAsyncListener(kUniqueURI, isVisited);
+      });
     });
   });
 }
 
 function reloadAsyncListener(aURI, aIsVisited) {
   ok(kUniqueURI.equals(aURI) && aIsVisited, "We have visited the URI.");
   PlacesTestUtils.clearHistory().then(finish);
 }
--- a/toolkit/components/places/tests/browser/browser_history_post.js
+++ b/toolkit/components/places/tests/browser/browser_history_post.js
@@ -10,13 +10,13 @@ add_task(async function() {
       let p = new Promise((resolve, reject) => {
         iframe.addEventListener("load", function() {
           resolve();
         }, {once: true});
       });
       submit.click();
       await p;
     });
-    let visited = await promiseIsURIVisited(SJS_URI);
+    let visited = await PlacesUtils.history.hasVisits(SJS_URI);
     ok(!visited, "The POST page should not be added to history");
     ok(!(await PlacesTestUtils.isPageInDB(SJS_URI.spec)), "The page should not be in the database");
   });
 });
--- a/toolkit/components/places/tests/browser/head.js
+++ b/toolkit/components/places/tests/browser/head.js
@@ -290,33 +290,16 @@ function DBConn(aForceNewConnection) {
   return gDBConn.connectionReady ? gDBConn : null;
 }
 
 function whenNewWindowLoaded(aOptions, aCallback) {
   BrowserTestUtils.waitForNewWindow().then(aCallback);
   OpenBrowserWindow(aOptions);
 }
 
-/**
- * Asynchronously check a url is visited.
- *
- * @param aURI The URI.
- * @param aExpectedValue The expected value.
- * @return {Promise}
- * @resolves When the check has been added successfully.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(aURI, aExpectedValue) {
-  return new Promise(resolve => {
-    PlacesUtils.asyncHistory.isURIVisited(aURI, function(unused, aIsVisited) {
-      resolve(aIsVisited);
-    });
-  });
-}
-
 function waitForCondition(condition, nextTest, errorMsg) {
   let tries = 0;
   let interval = setInterval(function() {
     if (tries >= 30) {
       ok(false, errorMsg);
       moveOn();
     }
     let conditionPassed;
--- a/toolkit/components/places/tests/head_common.js
+++ b/toolkit/components/places/tests/head_common.js
@@ -787,34 +787,16 @@ NavHistoryResultObserver.prototype = {
   nodeTitleChanged() {},
   nodeURIChanged() {},
   sortingChanged() {},
   QueryInterface: XPCOMUtils.generateQI([
     Ci.nsINavHistoryResultObserver,
   ])
 };
 
-/**
- * Asynchronously check a url is visited.
- *
- * @param aURI The URI.
- * @return {Promise}
- * @resolves When the check has been added successfully.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(aURI) {
-  return new Promise(resolve => {
-
-    PlacesUtils.asyncHistory.isURIVisited(aURI, function(unused, aIsVisited) {
-      resolve(aIsVisited);
-    });
-
-  });
-}
-
 function checkBookmarkObject(info) {
   do_check_valid_places_guid(info.guid);
   do_check_valid_places_guid(info.parentGuid);
   Assert.ok(typeof info.index == "number", "index should be a number");
   Assert.ok(info.dateAdded.constructor.name == "Date", "dateAdded should be a Date");
   Assert.ok(info.lastModified.constructor.name == "Date", "lastModified should be a Date");
   Assert.ok(info.lastModified >= info.dateAdded, "lastModified should never be smaller than dateAdded");
   Assert.ok(typeof info.type == "number", "type should be a number");
--- a/toolkit/components/places/tests/history/test_async_history_api.js
+++ b/toolkit/components/places/tests/history/test_async_history_api.js
@@ -372,80 +372,80 @@ add_task(async function test_non_addable
 
   let placesResult = await promiseUpdatePlaces(places);
   if (placesResult.results.length > 0) {
     do_throw("Unexpected success.");
   }
   for (let place of placesResult.errors) {
     info("Checking '" + place.info.uri.spec + "'");
     Assert.equal(place.resultCode, Cr.NS_ERROR_INVALID_ARG);
-    Assert.equal(false, await promiseIsURIVisited(place.info.uri));
+    Assert.equal(false, await PlacesUtils.history.hasVisits(place.info.uri));
   }
   await PlacesTestUtils.promiseAsyncUpdates();
 });
 
 add_task(async function test_duplicate_guid_errors() {
   // This test ensures that trying to add a visit, with a guid already found in
   // another visit, fails.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_first"),
     visits: [
       new VisitInfo(),
     ],
   };
 
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(placeInfo.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(placeInfo.uri));
 
   let badPlace = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_second"),
     visits: [
       new VisitInfo(),
     ],
     guid: placeInfo.guid,
   };
 
-  Assert.equal(false, await promiseIsURIVisited(badPlace.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(badPlace.uri));
   placesResult = await promiseUpdatePlaces(badPlace);
   if (placesResult.results.length > 0) {
     do_throw("Unexpected success.");
   }
   let badPlaceInfo = placesResult.errors[0];
   Assert.equal(badPlaceInfo.resultCode, Cr.NS_ERROR_STORAGE_CONSTRAINT);
-  Assert.equal(false, await promiseIsURIVisited(badPlaceInfo.info.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(badPlaceInfo.info.uri));
 
   await PlacesTestUtils.promiseAsyncUpdates();
 });
 
 add_task(async function test_invalid_referrerURI_ignored() {
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN +
                         "test_invalid_referrerURI_ignored"),
     visits: [
       new VisitInfo(),
     ],
   };
   place.visits[0].referrerURI = NetUtil.newURI(place.uri.spec + "_unvisistedURI");
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
-  Assert.equal(false, await promiseIsURIVisited(place.visits[0].referrerURI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.visits[0].referrerURI));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(placeInfo.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(placeInfo.uri));
 
   // Check to make sure we do not visit the invalid referrer.
-  Assert.equal(false, await promiseIsURIVisited(place.visits[0].referrerURI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.visits[0].referrerURI));
 
   // Check to make sure from_visit is zero in database.
   let stmt = DBConn().createStatement(
     `SELECT from_visit
      FROM moz_historyvisits
      WHERE id = :visit_id`
   );
   stmt.params.visit_id = placeInfo.visits[0].visitId;
@@ -460,24 +460,24 @@ add_task(async function test_nonnsIURI_r
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN +
                         "test_nonnsIURI_referrerURI_ignored"),
     visits: [
       new VisitInfo(),
     ],
   };
   place.visits[0].referrerURI = place.uri.spec + "_nonnsIURI";
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(placeInfo.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(placeInfo.uri));
 
   // Check to make sure from_visit is zero in database.
   let stmt = DBConn().createStatement(
     `SELECT from_visit
      FROM moz_historyvisits
      WHERE id = :visit_id`
   );
   stmt.params.visit_id = placeInfo.visits[0].visitId;
@@ -497,43 +497,43 @@ add_task(async function test_old_referre
     uri: NetUtil.newURI(TEST_DOMAIN + "test_old_referrer_ignored_referrer"),
     visits: [
       new VisitInfo(TRANSITION_LINK, oldTime),
     ],
   };
 
   // First we must add our referrer to the history so that it is not ignored
   // as being invalid.
-  Assert.equal(false, await promiseIsURIVisited(referrerPlace.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(referrerPlace.uri));
   let placesResult = await promiseUpdatePlaces(referrerPlace);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
 
   // Now that the referrer is added, we can add a page with a valid
   // referrer to determine if the recency of the referrer is taken into
   // account.
-  Assert.ok(await promiseIsURIVisited(referrerPlace.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(referrerPlace.uri));
 
   let visitInfo = new VisitInfo();
   visitInfo.referrerURI = referrerPlace.uri;
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_old_referrer_ignored_page"),
     visits: [
       visitInfo,
     ],
   };
 
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
   placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(place.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(place.uri));
 
   // Though the visit will not contain the referrer, we must examine the
   // database to be sure.
   Assert.equal(placeInfo.visits[0].referrerURI, null);
   let stmt = DBConn().createStatement(
     `SELECT COUNT(1) AS count
      FROM moz_historyvisits
      JOIN moz_places h ON h.id = place_id
@@ -551,44 +551,44 @@ add_task(async function test_old_referre
 add_task(async function test_place_id_ignored() {
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_place_id_ignored_first"),
     visits: [
       new VisitInfo(),
     ],
   };
 
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(place.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(place.uri));
 
   let placeId = placeInfo.placeId;
   Assert.notEqual(placeId, 0);
 
   let badPlace = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_place_id_ignored_second"),
     visits: [
       new VisitInfo(),
     ],
     placeId,
   };
 
-  Assert.equal(false, await promiseIsURIVisited(badPlace.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(badPlace.uri));
   placesResult = await promiseUpdatePlaces(badPlace);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   placeInfo = placesResult.results[0];
 
   Assert.notEqual(placeInfo.placeId, placeId);
-  Assert.ok(await promiseIsURIVisited(badPlace.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(badPlace.uri));
 
   await PlacesTestUtils.promiseAsyncUpdates();
 });
 
 add_task(async function test_handleCompletion_called_when_complete() {
   // We test a normal visit, and embeded visit, and a uri that would fail
   // the canAddURI test to make sure that the notification happens after *all*
   // of them have had a callback.
@@ -601,18 +601,18 @@ add_task(async function test_handleCompl
       ],
     },
     { uri: NetUtil.newURI("data:,Hello%2C%20World!"),
       visits: [
         new VisitInfo(),
       ],
     },
   ];
-  Assert.equal(false, await promiseIsURIVisited(places[0].uri));
-  Assert.equal(false, await promiseIsURIVisited(places[1].uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(places[0].uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(places[1].uri));
 
   const EXPECTED_COUNT_SUCCESS = 2;
   const EXPECTED_COUNT_FAILURE = 1;
 
   let {results, errors} = await promiseUpdatePlaces(places);
 
   Assert.equal(results.length, EXPECTED_COUNT_SUCCESS);
   Assert.equal(errors.length, EXPECTED_COUNT_FAILURE);
@@ -626,25 +626,25 @@ add_task(async function test_add_visit()
     uri: NetUtil.newURI(TEST_DOMAIN + "test_add_visit"),
     title: "test_add_visit title",
     visits: [],
   };
   for (let t in PlacesUtils.history.TRANSITIONS) {
     let transitionType = PlacesUtils.history.TRANSITIONS[t];
     place.visits.push(new VisitInfo(transitionType, VISIT_TIME));
   }
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let callbackCount = 0;
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   for (let placeInfo of placesResult.results) {
-    Assert.ok(await promiseIsURIVisited(place.uri));
+    Assert.ok(await PlacesUtils.history.hasVisits(place.uri));
 
     // Check mozIPlaceInfo properties.
     Assert.ok(place.uri.equals(placeInfo.uri));
     Assert.equal(placeInfo.frecency, -1); // We don't pass frecency here!
     Assert.equal(placeInfo.title, place.title);
 
     // Check mozIVisitInfo properties.
     let visits = placeInfo.visits;
@@ -688,28 +688,28 @@ add_task(async function test_properties_
     let place = {
       uri: NetUtil.newURI(TEST_DOMAIN + "test_properties_saved/" +
                           transitionType),
       title: "test_properties_saved test",
       visits: [
         new VisitInfo(transitionType),
       ],
     };
-    Assert.equal(false, await promiseIsURIVisited(place.uri));
+    Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
     places.push(place);
   }
 
   let callbackCount = 0;
   let placesResult = await promiseUpdatePlaces(places);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   for (let placeInfo of placesResult.results) {
     let uri = placeInfo.uri;
-    Assert.ok(await promiseIsURIVisited(uri));
+    Assert.ok(await PlacesUtils.history.hasVisits(uri));
     let visit = placeInfo.visits[0];
     print("TEST-INFO | test_properties_saved | updatePlaces callback for " +
           "transition type " + visit.transitionType);
 
     // Note that TRANSITION_EMBED should not be in the database.
     const EXPECTED_COUNT = visit.transitionType == TRANSITION_EMBED ? 0 : 1;
 
     // mozIVisitInfo::date
@@ -766,25 +766,25 @@ add_task(async function test_guid_saved(
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_guid_saved"),
     guid: "__TESTGUID__",
     visits: [
       new VisitInfo(),
     ],
   };
   do_check_valid_places_guid(place.guid);
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
   let uri = placeInfo.uri;
-  Assert.ok(await promiseIsURIVisited(uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(uri));
   Assert.equal(placeInfo.guid, place.guid);
   do_check_guid_for_uri(uri, place.guid);
   await PlacesTestUtils.promiseAsyncUpdates();
 });
 
 add_task(async function test_referrer_saved() {
   let places = [
     { uri: NetUtil.newURI(TEST_DOMAIN + "test_referrer_saved/referrer"),
@@ -794,27 +794,27 @@ add_task(async function test_referrer_sa
     },
     { uri: NetUtil.newURI(TEST_DOMAIN + "test_referrer_saved/test"),
       visits: [
         new VisitInfo(),
       ],
     },
   ];
   places[1].visits[0].referrerURI = places[0].uri;
-  Assert.equal(false, await promiseIsURIVisited(places[0].uri));
-  Assert.equal(false, await promiseIsURIVisited(places[1].uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(places[0].uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(places[1].uri));
 
   let resultCount = 0;
   let placesResult = await promiseUpdatePlaces(places);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   for (let placeInfo of placesResult.results) {
     let uri = placeInfo.uri;
-    Assert.ok(await promiseIsURIVisited(uri));
+    Assert.ok(await PlacesUtils.history.hasVisits(uri));
     let visit = placeInfo.visits[0];
 
     // We need to insert all of our visits before we can test conditions.
     if (++resultCount == places.length) {
       Assert.ok(places[0].uri.equals(visit.referrerURI));
 
       let stmt = DBConn().createStatement(
         `SELECT COUNT(1) AS count
@@ -842,17 +842,17 @@ add_task(async function test_referrer_sa
 add_task(async function test_guid_change_saved() {
   // First, add a visit for it.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_guid_change_saved"),
     visits: [
       new VisitInfo(),
     ],
   };
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   // Then, change the guid with visits.
   place.guid = "_GUIDCHANGE_";
   place.visits = [new VisitInfo()];
@@ -869,17 +869,17 @@ add_task(async function test_title_chang
   // First, add a visit for it.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_title_change_saved"),
     title: "original title",
     visits: [
       new VisitInfo(),
     ],
   };
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
 
   // Now, make sure the empty string clears the title.
   place.title = "";
@@ -916,17 +916,17 @@ add_task(async function test_no_title_do
   // First, add a visit for it.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_no_title_does_not_clear_title"),
     title: TITLE,
     visits: [
       new VisitInfo(),
     ],
   };
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   // Now, make sure that not specifying a title does not clear it.
   delete place.title;
   place.visits = [new VisitInfo()];
@@ -943,17 +943,17 @@ add_task(async function test_title_chang
   // There are three cases to test.  The first case is to make sure we do not
   // get notified if we do not specify a title.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_title_change_notifies"),
     visits: [
       new VisitInfo(),
     ],
   };
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   let silentObserver =
     new TitleChangedObserver(place.uri, "DO NOT WANT", function() {
       do_throw("unexpected callback!");
     });
 
   PlacesUtils.history.addObserver(silentObserver);
   let placesResult = await promiseUpdatePlaces(place);
@@ -1010,17 +1010,17 @@ add_task(async function test_visit_notif
   // nsINavHistoryObserver and the other is the uri-visit-saved observer topic.
   let place = {
     guid: "abcdefghijkl",
     uri: NetUtil.newURI(TEST_DOMAIN + "test_visit_notifies"),
     visits: [
       new VisitInfo(),
     ],
   };
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
 
   function promiseVisitObserver(aPlace) {
     return new Promise((resolve, reject) => {
       let callbackCount = 0;
       let finisher = function() {
         if (++callbackCount == 2) {
           resolve();
         }
@@ -1155,33 +1155,33 @@ add_task(async function test_ignore_erro
   // another visit, fails - but doesn't report if we told it not to.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_first"),
     visits: [
       new VisitInfo(),
     ],
   };
 
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(placeInfo.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(placeInfo.uri));
 
   let badPlace = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_second"),
     visits: [
       new VisitInfo(),
     ],
     guid: placeInfo.guid,
   };
 
-  Assert.equal(false, await promiseIsURIVisited(badPlace.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(badPlace.uri));
   placesResult = await promiseUpdatePlaces(badPlace, {ignoreErrors: true});
   if (placesResult.results.length > 0) {
     do_throw("Unexpected success.");
   }
   Assert.equal(placesResult.errors.length, 0,
                "Should have seen 0 errors because we disabled reporting.");
   Assert.equal(placesResult.results.length, 0,
                "Should have seen 0 results because there were none.");
@@ -1215,23 +1215,23 @@ add_task(async function test_ignore_resu
   // another visit, fails - but doesn't report if we told it not to.
   let place = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_first"),
     visits: [
       new VisitInfo(),
     ],
   };
 
-  Assert.equal(false, await promiseIsURIVisited(place.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(place.uri));
   let placesResult = await promiseUpdatePlaces(place);
   if (placesResult.errors.length > 0) {
     do_throw("Unexpected error.");
   }
   let placeInfo = placesResult.results[0];
-  Assert.ok(await promiseIsURIVisited(placeInfo.uri));
+  Assert.ok(await PlacesUtils.history.hasVisits(placeInfo.uri));
 
   let badPlace = {
     uri: NetUtil.newURI(TEST_DOMAIN + "test_duplicate_guid_fails_second"),
     visits: [
       new VisitInfo(),
     ],
     guid: placeInfo.guid,
   };
@@ -1240,17 +1240,17 @@ add_task(async function test_ignore_resu
       uri: NetUtil.newURI(TEST_DOMAIN + "test_other_successful_item"),
       visits: [
         new VisitInfo(),
       ],
     },
     badPlace,
   ];
 
-  Assert.equal(false, await promiseIsURIVisited(badPlace.uri));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(badPlace.uri));
   placesResult = await promiseUpdatePlaces(allPlaces, {ignoreErrors: true, ignoreResults: true});
   Assert.equal(placesResult.errors.length, 0,
                "Should have seen 0 errors because we disabled reporting.");
   Assert.equal(placesResult.results.length, 0,
                "Should have seen 0 results because we disabled reporting.");
   Assert.equal(placesResult.resultCount, 1,
                "Should know that we updated 1 item from the completion callback.");
   await PlacesTestUtils.promiseAsyncUpdates();
--- a/toolkit/components/places/tests/history/test_removeVisits.js
+++ b/toolkit/components/places/tests/history/test_removeVisits.js
@@ -39,18 +39,18 @@ add_task(async function remove_visits_ou
   root.containerOpen = true;
   Assert.equal(root.childCount, 10);
   for (let i = 0; i < root.childCount; i++) {
     let visitTime = root.getChild(i).time;
     Assert.equal(visitTime, DB_NOW - 100000 - (i * 1000));
   }
   root.containerOpen = false;
 
-  info("asyncHistory.isURIVisited should return true.");
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  info("PlacesUtils.history.hasVisits should return true.");
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
 
   await PlacesTestUtils.promiseAsyncUpdates();
   info("Frecency should be positive.");
   Assert.ok(frecencyForUrl(TEST_URI) > 0);
 
   await cleanup();
 });
 
@@ -91,17 +91,17 @@ add_task(async function remove_visits_ou
   Assert.equal(root.childCount, 10);
   for (let i = 0; i < root.childCount; i++) {
     let visitTime = root.getChild(i).time;
     Assert.equal(visitTime, DB_NOW - 100000 - (i * 1000));
   }
   root.containerOpen = false;
 
   info("asyncHistory.isURIVisited should return true.");
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.promiseAsyncUpdates();
 
   info("Frecency should be positive.");
   Assert.ok(frecencyForUrl(TEST_URI) > 0);
 
   await cleanup();
 });
 
@@ -136,17 +136,17 @@ add_task(async function remove_visits_un
   Assert.equal(root.childCount, 5);
   for (let i = 0; i < root.childCount; i++) {
     let visitTime = root.getChild(i).time;
     Assert.equal(visitTime, DB_NOW - (i * 1000) - 5000);
   }
   root.containerOpen = false;
 
   info("asyncHistory.isURIVisited should return true.");
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.promiseAsyncUpdates();
 
   info("Frecency should be positive.");
   Assert.ok(frecencyForUrl(TEST_URI) > 0);
 
   await cleanup();
 });
 
@@ -187,17 +187,17 @@ add_task(async function remove_visits_bo
   Assert.equal(root.childCount, 5);
   for (let i = 0; i < root.childCount; i++) {
     let visitTime = root.getChild(i).time;
     Assert.equal(visitTime, DB_NOW - (i * 1000) - 5000);
   }
   root.containerOpen = false;
 
   info("asyncHistory.isURIVisited should return true.");
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.promiseAsyncUpdates();
 
   info("Frecency should be positive.");
   Assert.ok(frecencyForUrl(TEST_URI) > 0);
 
   await cleanup();
 });
 
@@ -228,17 +228,17 @@ add_task(async function remove_all_visit
   opts.resultType = opts.RESULTS_AS_VISIT;
   opts.sortingMode = opts.SORT_BY_DATE_DESCENDING;
   let root = PlacesUtils.history.executeQuery(query, opts).root;
   root.containerOpen = true;
   Assert.equal(root.childCount, 0);
   root.containerOpen = false;
 
   info("asyncHistory.isURIVisited should return false.");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
 
   await cleanup();
 });
 
 add_task(async function remove_all_visits_bookmarked_uri() {
   info("*** TEST: Remove all visits from a bookmarked URI");
 
   info("Add some visits for the URI.");
@@ -272,17 +272,17 @@ add_task(async function remove_all_visit
   opts.resultType = opts.RESULTS_AS_VISIT;
   opts.sortingMode = opts.SORT_BY_DATE_DESCENDING;
   let root = PlacesUtils.history.executeQuery(query, opts).root;
   root.containerOpen = true;
   Assert.equal(root.childCount, 0);
   root.containerOpen = false;
 
   info("asyncHistory.isURIVisited should return false.");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
 
   info("URI should be bookmarked");
   Assert.ok(await PlacesUtils.bookmarks.fetch({url: TEST_URI}));
   await PlacesTestUtils.promiseAsyncUpdates();
 
   info("Frecency should be smaller.");
   Assert.ok(frecencyForUrl(TEST_URI) < initialFrecency);
 
--- a/toolkit/components/places/tests/unit/test_425563.js
+++ b/toolkit/components/places/tests/unit/test_425563.js
@@ -35,20 +35,20 @@ add_task(async function test_execute() {
     { uri: uri("http://www.test-download.com/"),
       transition: TRANSITION_DOWNLOAD },
     { uri: uri("http://www.test-reload.com/"),
       transition: TRANSITION_RELOAD },
   ]);
 
   // check that all links are marked as visited
   for (let visited_uri of count_visited_URIs) {
-    Assert.ok(await promiseIsURIVisited(uri(visited_uri)));
+    Assert.ok(await PlacesUtils.history.hasVisits(uri(visited_uri)));
   }
   for (let visited_uri of notcount_visited_URIs) {
-    Assert.ok(await promiseIsURIVisited(uri(visited_uri)));
+    Assert.ok(await PlacesUtils.history.hasVisits(uri(visited_uri)));
   }
 
   // check that visit_count does not take in count embed and downloads
   // maxVisits query are directly binded to visit_count
   let options = PlacesUtils.history.getNewQueryOptions();
   options.sortingMode = options.SORT_BY_VISITCOUNT_DESCENDING;
   options.resultType = options.RESULTS_AS_VISIT;
   options.includeHidden = true;
--- a/toolkit/components/places/tests/unit/test_isvisited.js
+++ b/toolkit/components/places/tests/unit/test_isvisited.js
@@ -6,33 +6,33 @@
 
 add_task(async function test_execute() {
   var referrer = uri("about:blank");
 
   // add a http:// uri
   var uri1 = uri("http://mozilla.com");
   await PlacesTestUtils.addVisits({uri: uri1, referrer});
   do_check_guid_for_uri(uri1);
-  Assert.ok(await promiseIsURIVisited(uri1));
+  Assert.ok(await PlacesUtils.history.hasVisits(uri1));
 
   // add a https:// uri
   var uri2 = uri("https://etrade.com");
   await PlacesTestUtils.addVisits({uri: uri2, referrer});
   do_check_guid_for_uri(uri2);
-  Assert.ok(await promiseIsURIVisited(uri2));
+  Assert.ok(await PlacesUtils.history.hasVisits(uri2));
 
   // add a ftp:// uri
   var uri3 = uri("ftp://ftp.mozilla.org");
   await PlacesTestUtils.addVisits({uri: uri3, referrer});
   do_check_guid_for_uri(uri3);
-  Assert.ok(await promiseIsURIVisited(uri3));
+  Assert.ok(await PlacesUtils.history.hasVisits(uri3));
 
   // check if a nonexistent uri is visited
   var uri4 = uri("http://foobarcheese.com");
-  Assert.equal(false, await promiseIsURIVisited(uri4));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(uri4));
 
   // check that certain schemes never show up as visited
   // even if we attempt to add them to history
   // see CanAddURI() in nsNavHistory.cpp
   const URLS = [
     "about:config",
     "imap://cyrus.andrew.cmu.edu/archive.imap",
     "news://new.mozilla.org/mozilla.dev.apps.firefox",
@@ -56,12 +56,12 @@ add_task(async function test_execute() {
       info("Could not construct URI for '" + currentURL + "'; ignoring");
     }
     if (cantAddUri) {
       PlacesTestUtils.addVisits({uri: cantAddUri, referrer}).then(() => {
         do_throw("Should not have added history for invalid URI.");
       }, error => {
         Assert.ok(error.message.includes("No items were added to history"));
       });
-      Assert.equal(false, await promiseIsURIVisited(cantAddUri));
+      Assert.equal(false, await PlacesUtils.history.hasVisits(cantAddUri));
     }
   }
 });
--- a/toolkit/components/places/tests/unit/test_preventive_maintenance.js
+++ b/toolkit/components/places/tests/unit/test_preventive_maintenance.js
@@ -1662,19 +1662,19 @@ tests.push({
                                  Services.scriptSecurityManager.getSystemPrincipal());
     await PlacesUtils.keywords.insert({ url: this._uri1.spec, keyword: "testkeyword" });
     as.setPageAnnotation(this._uri2, "anno", "anno", 0, as.EXPIRE_NEVER);
     as.setItemAnnotation(this._bookmarkId, "anno", "anno", 0, as.EXPIRE_NEVER);
   },
 
   async check() {
     // Check that all items are correct
-    let isVisited = await promiseIsURIVisited(this._uri1);
+    let isVisited = await PlacesUtils.history.hasVisits(this._uri1);
     Assert.ok(isVisited);
-    isVisited = await promiseIsURIVisited(this._uri2);
+    isVisited = await PlacesUtils.history.hasVisits(this._uri2);
     Assert.ok(isVisited);
 
     Assert.equal((await bs.fetch(this._bookmark.guid)).url, this._uri1.spec);
     let folder = await bs.fetch(this._folder.guid);
     Assert.equal(folder.index, 0);
     Assert.equal(folder.type, bs.TYPE_FOLDER);
     Assert.equal((await bs.fetch(this._separator.guid)).type, bs.TYPE_SEPARATOR);
 
--- a/toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
+++ b/toolkit/forgetaboutsite/test/unit/test_removeDataFromDomain.js
@@ -31,35 +31,16 @@ const LOGIN_PASSWORD_FIELD = "password_f
 const PERMISSION_TYPE = "test-perm";
 const PERMISSION_VALUE = Ci.nsIPermissionManager.ALLOW_ACTION;
 
 const PREFERENCE_NAME = "test-pref";
 
 // Utility Functions
 
 /**
- * Asynchronously check a url is visited.
- *
- * @param aURI
- *        The URI.
- *
- * @return {Promise}
- * @resolves When the check has been added successfully.
- * @rejects JavaScript exception.
- */
-function promiseIsURIVisited(aURI) {
-  return new Promise(resolve => {
-    PlacesUtils.asyncHistory.isURIVisited(aURI, function(unused, aIsVisited) {
-      resolve(aIsVisited);
-    });
-
-  });
-}
-
-/**
  * Add a cookie to the cookie service.
  *
  * @param aDomain
  */
 function add_cookie(aDomain) {
   check_cookie_exists(aDomain, false);
   Services.cookies.add(aDomain, COOKIE_PATH, COOKIE_NAME, "", false, false, false,
                        COOKIE_EXPIRY, {});
@@ -201,39 +182,39 @@ function preference_exists(aURI) {
   });
 }
 
 // Test Functions
 
 // History
 async function test_history_cleared_with_direct_match() {
   const TEST_URI = Services.io.newURI("http://mozilla.org/foo");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.addVisits(TEST_URI);
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await ForgetAboutSite.removeDataFromDomain("mozilla.org");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
 }
 
 async function test_history_cleared_with_subdomain() {
   const TEST_URI = Services.io.newURI("http://www.mozilla.org/foo");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.addVisits(TEST_URI);
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await ForgetAboutSite.removeDataFromDomain("mozilla.org");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
 }
 
 async function test_history_not_cleared_with_uri_contains_domain() {
   const TEST_URI = Services.io.newURI("http://ilovemozilla.org/foo");
-  Assert.equal(false, await promiseIsURIVisited(TEST_URI));
+  Assert.equal(false, await PlacesUtils.history.hasVisits(TEST_URI));
   await PlacesTestUtils.addVisits(TEST_URI);
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
   await ForgetAboutSite.removeDataFromDomain("mozilla.org");
-  Assert.ok(await promiseIsURIVisited(TEST_URI));
+  Assert.ok(await PlacesUtils.history.hasVisits(TEST_URI));
 
   // Clear history since we left something there from this test.
   await PlacesTestUtils.clearHistory();
 }
 
 // Cookie Service
 async function test_cookie_cleared_with_direct_match() {
   const TEST_DOMAIN = "mozilla.org";