1
0
Fork 0
firefox/dom/filesystem/tests/script_promptHandler.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

56 lines
1.6 KiB
JavaScript

/* eslint-env mozilla/chrome-script */
let dialogObserverTopic = "common-dialog-loaded";
function waitForButtonEnabledState(button) {
return new Promise(resolve => {
// Check if the button is already enabled (not disabled)
if (!button.disabled) {
resolve();
return;
}
// Create a MutationObserver instance
let win = button.ownerGlobal;
let { MutationObserver } = win;
const observer = new MutationObserver(mutationsList => {
for (const mutation of mutationsList) {
if (
mutation.type === "attributes" &&
mutation.attributeName === "disabled"
) {
if (!button.disabled) {
// Resolve the promise when the button is enabled
observer.disconnect(); // Stop observing
resolve();
}
}
}
});
// Start observing the button for changes to the 'disabled' attribute
observer.observe(button, {
attributes: true,
attributeFilter: ["disabled"],
});
});
}
async function dialogObserver(subj) {
let dialog = subj.document.querySelector("dialog");
let acceptButton = dialog.getButton("accept");
await waitForButtonEnabledState(acceptButton);
subj.document.querySelector("dialog").acceptDialog();
sendAsyncMessage("promptAccepted");
}
addMessageListener("init", () => {
Services.obs.addObserver(dialogObserver, dialogObserverTopic);
sendAsyncMessage("initDone");
});
addMessageListener("cleanup", () => {
Services.obs.removeObserver(dialogObserver, dialogObserverTopic);
sendAsyncMessage("cleanupDone");
});