tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });