96 lines
3.2 KiB
JavaScript
96 lines
3.2 KiB
JavaScript
ChromeUtils.defineESModuleGetters(this, {
|
|
PlacesTestUtils: "resource://testing-common/PlacesTestUtils.sys.mjs",
|
|
});
|
|
|
|
const TRANSITION_LINK = PlacesUtils.history.TRANSITION_LINK;
|
|
const TRANSITION_TYPED = PlacesUtils.history.TRANSITION_TYPED;
|
|
const TRANSITION_BOOKMARK = PlacesUtils.history.TRANSITION_BOOKMARK;
|
|
const TRANSITION_REDIRECT_PERMANENT =
|
|
PlacesUtils.history.TRANSITION_REDIRECT_PERMANENT;
|
|
const TRANSITION_REDIRECT_TEMPORARY =
|
|
PlacesUtils.history.TRANSITION_REDIRECT_TEMPORARY;
|
|
const TRANSITION_EMBED = PlacesUtils.history.TRANSITION_EMBED;
|
|
const TRANSITION_FRAMED_LINK = PlacesUtils.history.TRANSITION_FRAMED_LINK;
|
|
const TRANSITION_DOWNLOAD = PlacesUtils.history.TRANSITION_DOWNLOAD;
|
|
|
|
function whenNewWindowLoaded(aOptions, aCallback) {
|
|
BrowserTestUtils.waitForNewWindow().then(aCallback);
|
|
OpenBrowserWindow(aOptions);
|
|
}
|
|
|
|
async function clearHistoryAndHistoryCache() {
|
|
await PlacesUtils.history.clear();
|
|
// Clear HistoryRestiction cache as well.
|
|
Cc["@mozilla.org/browser/history;1"]
|
|
.getService(Ci.mozIAsyncHistory)
|
|
.clearCache();
|
|
}
|
|
|
|
async function synthesizeVisitByUser(browser, url) {
|
|
let onNewTab = BrowserTestUtils.waitForNewTab(browser.ownerGlobal.gBrowser);
|
|
// We intentionally turn off this a11y check, because the following click is
|
|
// purposefully sent on an arbitrary web content that is not expected to be
|
|
// tested by itself with the browser mochitests, therefore this rule check
|
|
// shall be ignored by a11y_checks suite.
|
|
AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
|
|
await ContentTask.spawn(browser, [url], async ([href]) => {
|
|
EventUtils.synthesizeMouseAtCenter(
|
|
content.document.querySelector(`a[href='${href}'`),
|
|
{},
|
|
content
|
|
);
|
|
});
|
|
AccessibilityUtils.resetEnv();
|
|
let tab = await onNewTab;
|
|
BrowserTestUtils.removeTab(tab);
|
|
}
|
|
|
|
async function synthesizeVisitByScript(browser, url) {
|
|
let onNewTab = BrowserTestUtils.waitForNewTab(browser.ownerGlobal.gBrowser);
|
|
AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
|
|
await ContentTask.spawn(browser, [url], async ([href]) => {
|
|
let a = content.document.querySelector(`a[href='${href}'`);
|
|
a.click();
|
|
});
|
|
AccessibilityUtils.resetEnv();
|
|
let tab = await onNewTab;
|
|
BrowserTestUtils.removeTab(tab);
|
|
}
|
|
|
|
async function assertLinkVisitedStatus(
|
|
browser,
|
|
url,
|
|
{ visitCount: expectedVisitCount, isVisited: expectedVisited }
|
|
) {
|
|
await BrowserTestUtils.waitForCondition(async () => {
|
|
let visitCount =
|
|
(await PlacesTestUtils.getDatabaseValue("moz_places", "visit_count", {
|
|
url,
|
|
})) ?? 0;
|
|
|
|
if (visitCount != expectedVisitCount) {
|
|
return false;
|
|
}
|
|
|
|
Assert.equal(visitCount, expectedVisitCount, "The visit count is correct");
|
|
return true;
|
|
});
|
|
|
|
await ContentTask.spawn(
|
|
browser,
|
|
[url, expectedVisited],
|
|
async ([href, visited]) => {
|
|
// ElementState::VISITED
|
|
const VISITED_STATE = 1 << 18;
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
let isVisited = !!(
|
|
content.InspectorUtils.getContentState(
|
|
content.document.querySelector(`a[href='${href}']`)
|
|
) & VISITED_STATE
|
|
);
|
|
return isVisited == visited;
|
|
});
|
|
}
|
|
);
|
|
Assert.ok(true, "The visited state is corerct");
|
|
}
|