Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: asan OR tsan
- Manifest: toolkit/components/aboutprocesses/tests/browser/browser.toml
/* Any copyright is dedicated to the Public Domain.
"use strict";
var doc, tbody, tabAboutProcesses;
const rowTypes = ["process", "window", "thread-summary", "thread"];
function promiseUpdate() {
return promiseAboutProcessesUpdated({
doc,
tbody,
force: true,
tabAboutProcesses,
});
}
add_setup(async function () {
Services.prefs.setBoolPref("toolkit.aboutProcesses.showThreads", true);
info("Setting up about:processes");
tabAboutProcesses = await BrowserTestUtils.openNewForegroundTab({
gBrowser,
opening: "about:processes",
waitForLoad: true,
});
doc = tabAboutProcesses.linkedBrowser.contentDocument;
tbody = doc.getElementById("process-tbody");
await promiseUpdate();
info("Open a list of threads to have thread rows displayed");
let twisty = doc.querySelector("tr.thread-summary .twisty");
twisty.click();
await promiseUpdate();
});
add_task(async function testSelectionPersistedAfterUpdate() {
for (let rowType of rowTypes) {
let row = doc.querySelector(`tr.${rowType}`);
Assert.ok(!!row, `Found ${rowType} row`);
Assert.ok(!row.hasAttribute("selected"), "The row should not be selected");
info("Click in the row to select it.");
row.click();
Assert.equal(
row.getAttribute("selected"),
"true",
"The row should be selected"
);
Assert.equal(
doc.querySelectorAll("[selected]").length,
1,
"There should be only one selected row"
);
info("Wait for an update and ensure the selected row is still the same");
let rowId = row.rowId;
let findRowsWithId = rowId =>
[...doc.querySelectorAll("tr")].filter(r => r.rowId == rowId);
Assert.equal(
findRowsWithId(rowId).length,
1,
"There should be only one row with id " + rowId
);
await promiseUpdate();
let selectedRow = doc.querySelector("[selected]");
if (rowType == "thread" && !selectedRow) {
info("The thread row might have disappeared if the thread has ended");
Assert.equal(
findRowsWithId(rowId).length,
0,
"There should no longer be a row with id " + rowId
);
continue;
}
Assert.ok(
!!selectedRow,
"There should still be a selected row after an update"
);
Assert.equal(
selectedRow.rowId,
rowId,
"The selected row should have the same id as the row we clicked"
);
}
});
add_task(function testClickAgainToRemoveSelection() {
for (let rowType of rowTypes) {
let row = doc.querySelector(`tr.${rowType}`);
Assert.ok(!!row, `Found ${rowType} row`);
Assert.ok(!row.hasAttribute("selected"), "The row should not be selected");
info("Click in the row to select it.");
row.click();
Assert.equal(
row.getAttribute("selected"),
"true",
"The row should now be selected"
);
Assert.equal(
doc.querySelectorAll("[selected]").length,
1,
"There should be only one selected row"
);
info("Click the row again to remove the selection.");
row.click();
Assert.ok(
!row.hasAttribute("selected"),
"The row should no longer be selected"
);
Assert.ok(
!doc.querySelector("[selected]"),
"There should be no selected row"
);
}
});
add_task(function cleanup() {
BrowserTestUtils.removeTab(tabAboutProcesses);
Services.prefs.clearUserPref("toolkit.aboutProcesses.showThreads");
});