script_promptHandler.js (1597B)
1 /* eslint-env mozilla/chrome-script */ 2 3 let dialogObserverTopic = "common-dialog-loaded"; 4 5 function waitForButtonEnabledState(button) { 6 return new Promise(resolve => { 7 // Check if the button is already enabled (not disabled) 8 if (!button.disabled) { 9 resolve(); 10 return; 11 } 12 13 // Create a MutationObserver instance 14 let win = button.ownerGlobal; 15 let { MutationObserver } = win; 16 const observer = new MutationObserver(mutationsList => { 17 for (const mutation of mutationsList) { 18 if ( 19 mutation.type === "attributes" && 20 mutation.attributeName === "disabled" 21 ) { 22 if (!button.disabled) { 23 // Resolve the promise when the button is enabled 24 observer.disconnect(); // Stop observing 25 resolve(); 26 } 27 } 28 } 29 }); 30 31 // Start observing the button for changes to the 'disabled' attribute 32 observer.observe(button, { 33 attributes: true, 34 attributeFilter: ["disabled"], 35 }); 36 }); 37 } 38 39 async function dialogObserver(subj) { 40 let dialog = subj.document.querySelector("dialog"); 41 let acceptButton = dialog.getButton("accept"); 42 await waitForButtonEnabledState(acceptButton); 43 44 subj.document.querySelector("dialog").acceptDialog(); 45 sendAsyncMessage("promptAccepted"); 46 } 47 48 addMessageListener("init", () => { 49 Services.obs.addObserver(dialogObserver, dialogObserverTopic); 50 sendAsyncMessage("initDone"); 51 }); 52 53 addMessageListener("cleanup", () => { 54 Services.obs.removeObserver(dialogObserver, dialogObserverTopic); 55 sendAsyncMessage("cleanupDone"); 56 });