diff --git a/browser/base/content/test/urlbar/browser_action_keyword_override.js b/browser/base/content/test/urlbar/browser_action_keyword_override.js
index 8e57fc88a9fa..45842276879b 100644
--- a/browser/base/content/test/urlbar/browser_action_keyword_override.js
+++ b/browser/base/content/test/urlbar/browser_action_keyword_override.js
@@ -10,7 +10,7 @@ add_task(async function() {
});
await promiseAutocompleteResultPopup("keyword search");
- let result = await waitForAutocompleteResultAt(0);
+ let result = gURLBar.popup.richlistbox.children[0];
info("Before override");
let titleHbox = result._titleText.parentNode.parentNode;
diff --git a/browser/base/content/test/urlbar/browser_action_searchengine.js b/browser/base/content/test/urlbar/browser_action_searchengine.js
index 4c3b4dff57dd..bb23bd4b2806 100644
--- a/browser/base/content/test/urlbar/browser_action_searchengine.js
+++ b/browser/base/content/test/urlbar/browser_action_searchengine.js
@@ -1,6 +1,3 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
add_task(async function() {
Services.search.addEngineWithDetails("MozSearch", "", "", "", "GET",
"http://example.com/?q={searchTerms}");
@@ -10,17 +7,20 @@ add_task(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
- registerCleanupFunction(async function() {
+ registerCleanupFunction(() => {
Services.search.currentEngine = originalEngine;
Services.search.removeEngine(engine);
+
try {
- await BrowserTestUtils.removeTab(tab);
+ gBrowser.removeTab(tab);
} catch (ex) { /* tab may have already been closed in case of failure */ }
- await PlacesUtils.history.clear();
+
+ return PlacesTestUtils.clearHistory();
});
await promiseAutocompleteResultPopup("open a search");
- let result = await waitForAutocompleteResultAt(0);
+ let result = gURLBar.popup.richlistbox.firstChild;
+
isnot(result, null, "Should have a result");
is(result.getAttribute("url"),
`moz-action:searchengine,{"engineName":"MozSearch","input":"open%20a%20search","searchQuery":"open%20a%20search"}`,
@@ -32,7 +32,4 @@ add_task(async function() {
await tabPromise;
is(gBrowser.selectedBrowser.currentURI.spec, "http://example.com/?q=open+a+search", "Correct URL should be loaded");
-
- gURLBar.popup.hidePopup();
- await promisePopupHidden(gURLBar.popup);
});
diff --git a/browser/base/content/test/urlbar/browser_action_searchengine_alias.js b/browser/base/content/test/urlbar/browser_action_searchengine_alias.js
index 9824b2d09dc7..bf84aa017b69 100644
--- a/browser/base/content/test/urlbar/browser_action_searchengine_alias.js
+++ b/browser/base/content/test/urlbar/browser_action_searchengine_alias.js
@@ -1,6 +1,3 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
add_task(async function() {
let iconURI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAABGklEQVQoz2NgGB6AnZ1dUlJSXl4eSDIyMhLW4Ovr%2B%2Fr168uXL69Zs4YoG%2BLi4i5dusTExMTGxsbNzd3f37937976%2BnpmZmagbHR09J49e5YvX66kpATVEBYW9ubNm2nTphkbG7e2tp44cQLIuHfvXm5urpaWFlDKysqqu7v73LlzECMYIiIiHj58mJCQoKKicvXq1bS0NKBgW1vbjh074uPjgeqAXE1NzSdPnvDz84M0AEUvXLgAsW379u1z5swBen3jxo2zZ892cHB4%2BvQp0KlAfwI1cHJyghQFBwfv2rULokFXV%2FfixYu7d%2B8GGqGgoMDKyrpu3br9%2B%2FcDuXl5eVA%2FAEWBfoWHAdAYoNuAYQ0XAeoUERFhGDYAAPoUaT2dfWJuAAAAAElFTkSuQmCC";
Services.search.addEngineWithDetails("MozSearch", iconURI, "moz", "", "GET",
@@ -11,17 +8,20 @@ add_task(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
- registerCleanupFunction(async function() {
+ registerCleanupFunction(() => {
Services.search.currentEngine = originalEngine;
Services.search.removeEngine(engine);
+
try {
- await BrowserTestUtils.removeTab(tab);
+ gBrowser.removeTab(tab);
} catch (ex) { /* tab may have already been closed in case of failure */ }
- await PlacesUtils.history.clear();
+
+ return PlacesTestUtils.clearHistory();
});
await promiseAutocompleteResultPopup("moz open a search");
- let result = await waitForAutocompleteResultAt(0);
+
+ let result = gURLBar.popup.richlistbox.children[0];
ok(result.hasAttribute("image"), "Result should have an image attribute");
ok(result.getAttribute("image") === engine.iconURI.spec,
"Image attribute should have the search engine's icon");
@@ -31,7 +31,4 @@ add_task(async function() {
await tabPromise;
is(gBrowser.selectedBrowser.currentURI.spec, "http://example.com/?q=open+a+search");
-
- gURLBar.popup.hidePopup();
- await promisePopupHidden(gURLBar.popup);
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js b/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js
index ea9f5f46e9d0..6904940cd183 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_a11y_label.js
@@ -9,7 +9,9 @@ add_task(async function switchToTab() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:about");
await promiseAutocompleteResultPopup("% about");
- let result = await waitForAutocompleteResultAt(1);
+
+ ok(gURLBar.popup.richlistbox.children.length > 1, "Should get at least 2 results");
+ let result = gURLBar.popup.richlistbox.children[1];
is(result.getAttribute("type"), "switchtab", "Expect right type attribute");
is(result.label, "about:about about:about Tab", "Result a11y label should be:
Tab");
@@ -32,7 +34,6 @@ add_task(async function searchSuggestions() {
});
await promiseAutocompleteResultPopup("foo");
- await waitForAutocompleteResultAt(2);
// Don't assume that the search doesn't match history or bookmarks left around
// by earlier tests.
Assert.ok(gURLBar.popup.richlistbox.children.length >= 3,
@@ -53,6 +54,5 @@ add_task(async function searchSuggestions() {
}
}
Assert.ok(expectedSearches.length == 0);
- gURLBar.popup.hidePopup();
- await promisePopupHidden(gURLBar.popup);
+ gURLBar.closePopup();
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_autoselect.js b/browser/base/content/test/urlbar/browser_autocomplete_autoselect.js
index fe7c4eb818e2..261876c6f364 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_autoselect.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_autoselect.js
@@ -1,6 +1,3 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
const ONEOFF_URLBAR_PREF = "browser.urlbar.oneOffSearches";
function repeat(limit, func) {
@@ -30,12 +27,11 @@ function is_selected_one_off(index) {
add_task(async function() {
let maxResults = Services.prefs.getIntPref("browser.urlbar.maxRichResults");
+
Services.prefs.setBoolPref(ONEOFF_URLBAR_PREF, true);
- let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
registerCleanupFunction(async function() {
await PlacesTestUtils.clearHistory();
Services.prefs.clearUserPref(ONEOFF_URLBAR_PREF);
- await BrowserTestUtils.removeTab(tab);
});
let visits = [];
@@ -46,8 +42,8 @@ add_task(async function() {
});
await PlacesTestUtils.addVisits(visits);
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
await promiseAutocompleteResultPopup("example.com/autocomplete");
- await waitForAutocompleteResultAt(maxResults - 1);
let popup = gURLBar.popup;
let results = popup.richlistbox.children;
@@ -92,4 +88,5 @@ add_task(async function() {
EventUtils.synthesizeKey("VK_ESCAPE", {});
await promisePopupHidden(gURLBar.popup);
+ gBrowser.removeTab(tab);
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_cursor.js b/browser/base/content/test/urlbar/browser_autocomplete_cursor.js
index 7cf9da9f3b70..a0af6f43df89 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_cursor.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_cursor.js
@@ -1,6 +1,3 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
add_task(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
await promiseAutocompleteResultPopup("www.mozilla.org");
@@ -16,5 +13,5 @@ add_task(async function() {
is(gURLBar.selectionStart, 5, "Should have moved the cursor");
is(gURLBar.selectionEnd, 5, "And not selected anything");
- await BrowserTestUtils.removeTab(tab);
+ gBrowser.removeTab(tab);
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_edit_completed.js b/browser/base/content/test/urlbar/browser_autocomplete_edit_completed.js
index 27834623cef0..76b06923cf6b 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_edit_completed.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_edit_completed.js
@@ -1,19 +1,19 @@
add_task(async function() {
- await PlacesUtils.history.clear();
+ await PlacesTestUtils.clearHistory();
await PlacesTestUtils.addVisits([
{ uri: makeURI("http://example.com/foo") },
{ uri: makeURI("http://example.com/foo/bar") },
]);
- let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:blank");
registerCleanupFunction(async function() {
- await BrowserTestUtils.removeTab(tab);
- await PlacesUtils.history.clear();
+ await PlacesTestUtils.clearHistory();
});
+ gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, "about:blank");
+ gURLBar.focus();
+
await promiseAutocompleteResultPopup("http://example.com");
- await waitForAutocompleteResultAt(1);
let popup = gURLBar.popup;
let list = popup.richlistbox;
@@ -44,4 +44,5 @@ add_task(async function() {
docLoad,
]);
+ gBrowser.removeTab(gBrowser.selectedTab);
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js b/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js
index 466616069d67..5983e034f417 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_enter_race.js
@@ -2,11 +2,9 @@
add_task(async function setup() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
- let bm = await PlacesUtils.bookmarks.insert({
- parentGuid: PlacesUtils.bookmarks.unfiledGuid,
- url: "http://example.com/?q=%s",
- title: "test"
- });
+ let bm = await PlacesUtils.bookmarks.insert({ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ url: "http://example.com/?q=%s",
+ title: "test" });
registerCleanupFunction(async function() {
await PlacesUtils.bookmarks.remove(bm);
await BrowserTestUtils.removeTab(tab);
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_no_title.js b/browser/base/content/test/urlbar/browser_autocomplete_no_title.js
index 7b0ef2f7503b..8fd3aa282c54 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_no_title.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_no_title.js
@@ -1,17 +1,15 @@
add_task(async function() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:mozilla");
- await PlacesUtils.history.clear();
- const uri = "http://bug1060642.example.com/beards/are/pretty/great";
- await PlacesTestUtils.addVisits([{ uri, title: "" }]);
- registerCleanupFunction(async function() {
- await PlacesUtils.history.clear();
- await BrowserTestUtils.removeTab(tab);
- });
+
+ let uri = NetUtil.newURI("http://bug1060642.example.com/beards/are/pretty/great");
+ await PlacesTestUtils.addVisits([{uri, title: ""}]);
await promiseAutocompleteResultPopup("bug1060642");
- let result = await waitForAutocompleteResultAt(1);
+ ok(gURLBar.popup.richlistbox.children.length > 1, "Should get at least 2 results");
+ let result = gURLBar.popup.richlistbox.children[1];
is(result._titleText.textContent, "bug1060642.example.com", "Result title should be as expected");
gURLBar.popup.hidePopup();
await promisePopupHidden(gURLBar.popup);
+ gBrowser.removeTab(tab);
});
diff --git a/browser/base/content/test/urlbar/browser_autocomplete_tag_star_visibility.js b/browser/base/content/test/urlbar/browser_autocomplete_tag_star_visibility.js
index 18474f36a938..cd934771ad3c 100644
--- a/browser/base/content/test/urlbar/browser_autocomplete_tag_star_visibility.js
+++ b/browser/base/content/test/urlbar/browser_autocomplete_tag_star_visibility.js
@@ -1,17 +1,16 @@
add_task(async function() {
- registerCleanupFunction(async function() {
- await PlacesUtils.bookmarks.eraseEverything();
+ registerCleanupFunction(() => {
+ PlacesUtils.bookmarks.removeFolderChildren(PlacesUtils.unfiledBookmarksFolderId);
});
async function addTagItem(tagName) {
- let url = `http://example.com/this/is/tagged/${tagName}`;
- await PlacesUtils.bookmarks.insert({
- parentGuid: PlacesUtils.bookmarks.unfiledGuid,
- url,
- title: `test ${tagName}`
- });
- PlacesUtils.tagging.tagURI(Services.io.newURI(url), [tagName]);
- await PlacesTestUtils.addVisits({uri: url, title: `Test page with tag ${tagName}`});
+ let uri = NetUtil.newURI(`http://example.com/this/is/tagged/${tagName}`);
+ PlacesUtils.bookmarks.insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
+ uri,
+ PlacesUtils.bookmarks.DEFAULT_INDEX,
+ `test ${tagName}`);
+ PlacesUtils.tagging.tagURI(uri, [tagName]);
+ await PlacesTestUtils.addVisits([{uri, title: `Test page with tag ${tagName}`}]);
}
// We use different tags for each part of the test, as otherwise the
@@ -84,7 +83,7 @@ add_task(async function() {
}
await promiseAutocompleteResultPopup(testcase.input);
- let result = await waitForAutocompleteResultAt(1);
+ let result = gURLBar.popup.richlistbox.children[1];
ok(result && !result.collasped, "Should have result");
is(result.getAttribute("type"), testcase.expected.type, "Result should have expected type");
diff --git a/browser/base/content/test/urlbar/browser_search_favicon.js b/browser/base/content/test/urlbar/browser_search_favicon.js
index 5d4f9976fb43..175f74bb0fc9 100644
--- a/browser/base/content/test/urlbar/browser_search_favicon.js
+++ b/browser/base/content/test/urlbar/browser_search_favicon.js
@@ -30,7 +30,8 @@ add_task(async function() {
// The first autocomplete result has the action searchengine, while
// the second result is the "search favicon" element.
await promiseAutocompleteResultPopup("foo");
- let result = await waitForAutocompleteResultAt(1);
+ let result = gURLBar.popup.richlistbox.children[1];
+
isnot(result, null, "Expect a search result");
is(result.getAttribute("type"), "searchengine", "Expect correct `type` attribute");
diff --git a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js b/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
index a7ed5a1e5617..2accabb3833f 100644
--- a/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
+++ b/browser/base/content/test/urlbar/browser_urlbarSearchSuggestions_opt-out.js
@@ -72,12 +72,11 @@ add_task(async function click_on_focused() {
gURLBar.blur();
// Won't show the hint since it's not user initiated.
gURLBar.focus();
- await new Promise(resolve => setTimeout(resolve, 1000));
+ await new Promise(resolve => setTimeout(resolve, 500));
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
- Assert.ok(gURLBar.focused, "The input field should be focused");
let popupPromise = promisePopupShown(gURLBar.popup);
- EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, {});
+ EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, { button: 0, type: "mousedown" });
await popupPromise;
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
diff --git a/browser/base/content/test/urlbar/browser_urlbar_remove_match.js b/browser/base/content/test/urlbar/browser_urlbar_remove_match.js
index aed457c16442..e7a89e09feb1 100644
--- a/browser/base/content/test/urlbar/browser_urlbar_remove_match.js
+++ b/browser/base/content/test/urlbar/browser_urlbar_remove_match.js
@@ -12,11 +12,11 @@ add_task(async function test_remove_history() {
let promiseVisitRemoved = PlacesTestUtils.waitForNotification(
"onDeleteURI", uri => uri.spec == TEST_URL, "history");
-
await promiseAutocompleteResultPopup("remove.me/from_urlbar");
- let result = await waitForAutocompleteResultAt(1);
- Assert.equal(result.getAttribute("ac-value"), TEST_URL, "Found the expected result");
-
+ await BrowserTestUtils.waitForCondition(
+ () => gURLBar.popup.richlistbox.children.length > 1 &&
+ gURLBar.popup.richlistbox.children[1].getAttribute("ac-value") == TEST_URL,
+ "Waiting for the result to appear");
EventUtils.synthesizeKey("VK_DOWN", {});
Assert.equal(gURLBar.popup.richlistbox.selectedIndex, 1);
let options = AppConstants.platform == "macosx" ? { shiftKey: true } : {};
diff --git a/browser/base/content/test/urlbar/browser_urlbar_search_no_speculative_connect_with_client_cert.js b/browser/base/content/test/urlbar/browser_urlbar_search_no_speculative_connect_with_client_cert.js
index 40eaa399c36b..3d050bd60571 100644
--- a/browser/base/content/test/urlbar/browser_urlbar_search_no_speculative_connect_with_client_cert.js
+++ b/browser/base/content/test/urlbar/browser_urlbar_search_no_speculative_connect_with_client_cert.js
@@ -150,17 +150,19 @@ add_task(async function popup_mousedown_no_client_cert_dialog_until_navigate_tes
};
info(`Searching for '${test.search}'`);
await promiseAutocompleteResultPopup(test.search, window, true);
- await waitForAutocompleteResultAt(1);
let controller = gURLBar.popup.input.controller;
// The first item should be 'Search with ...' thus we want the second.
let value = controller.getFinalCompleteValueAt(1);
info(`The value of the second item is ${value}`);
is(value, test.completeValue, "The second item has the url we visited.");
- let listitem = await waitForAutocompleteResultAt(1);
- Assert.ok(is_visible(listitem), "The node is there.");
+ await BrowserTestUtils.waitForCondition(() => {
+ return !!gURLBar.popup.richlistbox.childNodes[1] &&
+ is_visible(gURLBar.popup.richlistbox.childNodes[1]);
+ }, "the node is there.");
expectingChooseCertificate = false;
+ let listitem = gURLBar.popup.richlistbox.childNodes[1];
EventUtils.synthesizeMouseAtCenter(listitem, {type: "mousedown"}, window);
is(gURLBar.popup.richlistbox.selectedIndex, 1, "The second item is selected");
diff --git a/browser/base/content/test/urlbar/head.js b/browser/base/content/test/urlbar/head.js
index e002292a9c28..0dfe22791309 100644
--- a/browser/base/content/test/urlbar/head.js
+++ b/browser/base/content/test/urlbar/head.js
@@ -313,12 +313,3 @@ function promiseSpeculativeConnection(httpserver) {
return false;
}, "Waiting for connection setup");
}
-
-async function waitForAutocompleteResultAt(index) {
- let searchString = gURLBar.controller.searchString;
- await BrowserTestUtils.waitForCondition(
- () => gURLBar.popup.richlistbox.children.length > index &&
- gURLBar.popup.richlistbox.children[index].getAttribute("ac-text") == searchString,
- `Waiting for the autocomplete result for "${searchString}" at [${index}] to appear`);
- return gURLBar.popup.richlistbox.children[index];
-}
diff --git a/browser/components/extensions/test/browser/browser-common.ini b/browser/components/extensions/test/browser/browser-common.ini
index ee8b963d4ef1..a3b72b55bdf9 100644
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -90,6 +90,7 @@ skip-if = (os == 'win' && !debug) # bug 1352668
[browser_ext_lastError.js]
[browser_ext_menus.js]
[browser_ext_omnibox.js]
+skip-if = debug || asan # Bug 1354681
[browser_ext_openPanel.js]
[browser_ext_optionsPage_browser_style.js]
[browser_ext_optionsPage_modals.js]
diff --git a/browser/components/extensions/test/browser/browser_ext_omnibox.js b/browser/components/extensions/test/browser/browser_ext_omnibox.js
index d7b95386b572..ec224991140d 100644
--- a/browser/components/extensions/test/browser/browser_ext_omnibox.js
+++ b/browser/components/extensions/test/browser/browser_ext_omnibox.js
@@ -94,10 +94,8 @@ add_task(async function() {
// Wait for the autocomplete search. Note that we cannot wait for the search
// to be complete, since the add-on doesn't communicate when it's done, so
// just check matches count.
- await BrowserTestUtils.waitForCondition(
- () => gURLBar.controller.matchCount >= 2 &&
- gURLBar.popup.richlistbox.children[1].getAttribute("ac-text") == gURLBar.controller.searchString,
- "waiting urlbar search to complete");
+ await BrowserTestUtils.waitForCondition(() => gURLBar.controller.matchCount >= 2,
+ "waiting urlbar search to complete");
return "t";
}
diff --git a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm
index 2c73279860f5..34436a736d61 100644
--- a/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm
+++ b/testing/mochitest/BrowserTestUtils/BrowserTestUtils.jsm
@@ -20,6 +20,7 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/AppConstants.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/Timer.jsm");
Cu.import("resource://testing-common/TestUtils.jsm");
Cu.import("resource://testing-common/ContentTask.jsm");
@@ -1310,8 +1311,53 @@ this.BrowserTestUtils = {
});
},
- // TODO: Fix consumers and remove me.
- waitForCondition: TestUtils.waitForCondition,
+ /**
+ * Will poll a condition function until it returns true.
+ *
+ * @param condition
+ * A condition function that must return true or false. If the
+ * condition ever throws, this is also treated as a false. The
+ * function can be a generator.
+ * @param interval
+ * The time interval to poll the condition function. Defaults
+ * to 100ms.
+ * @param attempts
+ * The number of times to poll before giving up and rejecting
+ * if the condition has not yet returned true. Defaults to 50
+ * (~5 seconds for 100ms intervals)
+ * @return Promise
+ * Resolves when condition is true.
+ * Rejects if timeout is exceeded or condition ever throws.
+ */
+ waitForCondition(condition, msg, interval=100, maxTries=50) {
+ return new Promise((resolve, reject) => {
+ let tries = 0;
+ let intervalID = setInterval(async function() {
+ if (tries >= maxTries) {
+ clearInterval(intervalID);
+ msg += ` - timed out after ${maxTries} tries.`;
+ reject(msg);
+ return;
+ }
+
+ let conditionPassed = false;
+ try {
+ conditionPassed = await condition();
+ } catch(e) {
+ msg += ` - threw exception: ${e}`;
+ clearInterval(intervalID);
+ reject(msg);
+ return;
+ }
+
+ if (conditionPassed) {
+ clearInterval(intervalID);
+ resolve();
+ }
+ tries++;
+ }, interval);
+ });
+ },
/**
* Waits for a with a particular value to appear
diff --git a/testing/modules/TestUtils.jsm b/testing/modules/TestUtils.jsm
index 0b1fbb9ce132..1b552b499b65 100644
--- a/testing/modules/TestUtils.jsm
+++ b/testing/modules/TestUtils.jsm
@@ -21,7 +21,6 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/Timer.jsm");
this.TestUtils = {
executeSoon(callbackFn) {
@@ -84,53 +83,5 @@ this.TestUtils = {
ctx.scale(ratio, ratio);
ctx.drawWindow(win, left, top, width, height, "#fff");
return canvas.toDataURL();
- },
-
- /**
- * Will poll a condition function until it returns true.
- *
- * @param condition
- * A condition function that must return true or false. If the
- * condition ever throws, this is also treated as a false. The
- * function can be a generator.
- * @param interval
- * The time interval to poll the condition function. Defaults
- * to 100ms.
- * @param attempts
- * The number of times to poll before giving up and rejecting
- * if the condition has not yet returned true. Defaults to 50
- * (~5 seconds for 100ms intervals)
- * @return Promise
- * Resolves when condition is true.
- * Rejects if timeout is exceeded or condition ever throws.
- */
- waitForCondition(condition, msg, interval = 100, maxTries = 50) {
- return new Promise((resolve, reject) => {
- let tries = 0;
- let intervalID = setInterval(async function() {
- if (tries >= maxTries) {
- clearInterval(intervalID);
- msg += ` - timed out after ${maxTries} tries.`;
- reject(msg);
- return;
- }
-
- let conditionPassed = false;
- try {
- conditionPassed = await condition();
- } catch (e) {
- msg += ` - threw exception: ${e}`;
- clearInterval(intervalID);
- reject(msg);
- return;
- }
-
- if (conditionPassed) {
- clearInterval(intervalID);
- resolve();
- }
- tries++;
- }, interval);
- });
- },
+ }
};
diff --git a/toolkit/components/places/tests/PlacesTestUtils.jsm b/toolkit/components/places/tests/PlacesTestUtils.jsm
index a80bd99d0f30..5892f10d4e67 100644
--- a/toolkit/components/places/tests/PlacesTestUtils.jsm
+++ b/toolkit/components/places/tests/PlacesTestUtils.jsm
@@ -12,8 +12,8 @@ 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, "TestUtils",
- "resource://testing-common/TestUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
+ "resource://gre/modules/NetUtil.jsm");
this.PlacesTestUtils = Object.freeze({
/**
@@ -55,9 +55,9 @@ this.PlacesTestUtils = Object.freeze({
let info = {url: place.uri};
info.title = (typeof place.title === "string") ? place.title : "test visit for " + info.url.spec ;
if (typeof place.referrer == "string") {
- place.referrer = Services.io.newURI(place.referrer);
+ place.referrer = NetUtil.newURI(place.referrer);
} else if (place.referrer && place.referrer instanceof URL) {
- place.referrer = Services.io.newURI(place.referrer.href);
+ place.referrer = NetUtil.newURI(place.referrer.href);
}
let visitDate = place.visitDate;
if (visitDate) {
@@ -82,11 +82,7 @@ this.PlacesTestUtils = Object.freeze({
}];
infos.push(info);
}
- await PlacesUtils.history.insertMany(infos);
- await TestUtils.waitForCondition(
- () => PlacesUtils.history.fetch(infos[infos.length - 1].url),
- "Ensure history has been updated and is visible to read-only connections"
- );
+ return PlacesUtils.history.insertMany(infos);
},
/*
@@ -108,8 +104,8 @@ this.PlacesTestUtils = Object.freeze({
throw new Error("URL does not exist");
}
faviconPromises.push(new Promise((resolve, reject) => {
- let uri = Services.io.newURI(key);
- let faviconURI = Services.io.newURI(val);
+ let uri = NetUtil.newURI(key);
+ let faviconURI = NetUtil.newURI(val);
try {
PlacesUtils.favicons.setAndFetchFaviconForPage(
uri,