124 lines
3.4 KiB
JavaScript
124 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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");
|
|
});
|