tor-browser

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

browser_dns_over_https_exceptions_subdialog.js (5925B)


      1 async function dohExceptionsSubdialogOpened(dialogOverlay) {
      2  const promiseSubDialogLoaded = promiseLoadSubDialog(
      3    "chrome://browser/content/preferences/dialogs/dohExceptions.xhtml"
      4  );
      5  const contentDocument = gBrowser.contentDocument;
      6  contentDocument.getElementById("dohExceptionsButton").click();
      7  const win = await promiseSubDialogLoaded;
      8  dialogOverlay = content.gSubDialog._topDialog._overlay;
      9  ok(!BrowserTestUtils.isHidden(dialogOverlay), "The dialog is visible.");
     10  return win;
     11 }
     12 
     13 function acceptDoHExceptionsSubdialog(win) {
     14  const button = win.document.querySelector("dialog").getButton("accept");
     15  button.doCommand();
     16 }
     17 
     18 function cancelDoHExceptionsSubdialog(win) {
     19  const button = win.document.querySelector("dialog").getButton("cancel");
     20  button.doCommand();
     21 }
     22 
     23 function addNewException(domain, dialog) {
     24  let url = dialog.document.getElementById("url");
     25  let addButton = dialog.document.getElementById("btnAddException");
     26 
     27  ok(
     28    addButton.disabled,
     29    "The Add button is disabled when domain's input box is empty"
     30  );
     31 
     32  url.focus();
     33  EventUtils.sendString(domain);
     34 
     35  ok(
     36    !addButton.disabled,
     37    "The Add button is enabled when some text is on domain's input box"
     38  );
     39 
     40  addButton.click();
     41 
     42  is(
     43    url.value,
     44    "",
     45    "Domain input box is empty after adding a new domain to the list"
     46  );
     47  ok(
     48    addButton.disabled,
     49    "The Add button is disabled after exception has been added to the list"
     50  );
     51 }
     52 
     53 add_task(async function () {
     54  Services.prefs.lockPref("network.trr.excluded-domains");
     55 
     56  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
     57    leaveOpen: true,
     58  });
     59  let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
     60  let win = await dohExceptionsSubdialogOpened(dialogOverlay);
     61 
     62  ok(
     63    win.document.getElementById("btnAddException").disabled,
     64    "The Add button is disabled when preference is locked"
     65  );
     66  ok(
     67    win.document.getElementById("url").disabled,
     68    "The url input box is disabled when preference is locked"
     69  );
     70 
     71  cancelDoHExceptionsSubdialog(win);
     72  Services.prefs.unlockPref("network.trr.excluded-domains");
     73  win = await dohExceptionsSubdialogOpened(dialogOverlay);
     74 
     75  ok(
     76    win.document.getElementById("btnAddException").disabled,
     77    "The Add button is disabled when preference is not locked"
     78  );
     79  ok(
     80    !win.document.getElementById("url").disabled,
     81    "The url input box is enabled when preference is not locked"
     82  );
     83 
     84  cancelDoHExceptionsSubdialog(win);
     85  gBrowser.removeCurrentTab();
     86 });
     87 
     88 add_task(async function () {
     89  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
     90    leaveOpen: true,
     91  });
     92  let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
     93 
     94  ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible.");
     95  let win = await dohExceptionsSubdialogOpened(dialogOverlay);
     96  acceptDoHExceptionsSubdialog(win);
     97  ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible.");
     98 
     99  win = await dohExceptionsSubdialogOpened(dialogOverlay);
    100  Assert.equal(
    101    win.document.getElementById("permissionsBox").itemCount,
    102    0,
    103    "There are no exceptions set."
    104  );
    105  ok(
    106    win.document.getElementById("removeException").disabled,
    107    "The Remove button is disabled when there are no exceptions on the list"
    108  );
    109  ok(
    110    win.document.getElementById("removeAllExceptions").disabled,
    111    "The Remove All button is disabled when there are no exceptions on the list"
    112  );
    113  ok(
    114    win.document.getElementById("btnAddException").disabled,
    115    "The Add button is disabled when dialog box has just been opened"
    116  );
    117 
    118  addNewException("test1.com", win);
    119  Assert.equal(
    120    win.document.getElementById("permissionsBox").itemCount,
    121    1,
    122    "List shows 1 new item"
    123  );
    124  let activeExceptions = win.document.getElementById("permissionsBox").children;
    125  is(
    126    activeExceptions[0].getAttribute("domain"),
    127    "test1.com",
    128    "test1.com added to the list"
    129  );
    130  ok(
    131    !win.document.getElementById("removeAllExceptions").disabled,
    132    "The Remove All button is enabled when there is one exception on the list"
    133  );
    134  addNewException("test2.com", win);
    135  addNewException("test3.com", win);
    136  Assert.equal(
    137    win.document.getElementById("permissionsBox").itemCount,
    138    3,
    139    "List shows 3 domain items"
    140  );
    141  ok(
    142    win.document.getElementById("removeException").disabled,
    143    "The Remove button is disabled when no exception has been selected"
    144  );
    145  win.document.getElementById("permissionsBox").selectedIndex = 1;
    146  ok(
    147    !win.document.getElementById("removeException").disabled,
    148    "The Remove button is enabled when an exception has been selected"
    149  );
    150  win.document.getElementById("removeException").doCommand();
    151  Assert.equal(
    152    win.document.getElementById("permissionsBox").itemCount,
    153    2,
    154    "List shows 2 domain items after removing one of the three"
    155  );
    156  activeExceptions = win.document.getElementById("permissionsBox").children;
    157  ok(
    158    win.document.getElementById("permissionsBox").itemCount == 2 &&
    159      activeExceptions[0].getAttribute("domain") == "test1.com" &&
    160      activeExceptions[1].getAttribute("domain") == "test3.com",
    161    "test1.com and test3.com are the only items left on the list"
    162  );
    163  is(
    164    win.document.getElementById("permissionsBox").selectedIndex,
    165    -1,
    166    "There is no selected item after removal"
    167  );
    168  addNewException("test2.com", win);
    169  activeExceptions = win.document.getElementById("permissionsBox").children;
    170  ok(
    171    win.document.getElementById("permissionsBox").itemCount == 3 &&
    172      activeExceptions[1].getAttribute("domain") == "test2.com",
    173    "test2.com has been added as the second item"
    174  );
    175  win.document.getElementById("removeAllExceptions").doCommand();
    176  is(
    177    win.document.getElementById("permissionsBox").itemCount,
    178    0,
    179    "There are no elements on the list after clicking Remove All"
    180  );
    181 
    182  acceptDoHExceptionsSubdialog(win);
    183 
    184  gBrowser.removeCurrentTab();
    185 });