tor-browser

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

browser_change_app_handler.js (4414B)


      1 var gMimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService);
      2 var gHandlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"].getService(
      3  Ci.nsIHandlerService
      4 );
      5 
      6 SimpleTest.requestCompleteLog();
      7 
      8 function setupFakeHandler() {
      9  let info = gMimeSvc.getFromTypeAndExtension("text/plain", "foo.txt");
     10  ok(
     11    info.possibleLocalHandlers.length,
     12    "Should have at least one known handler"
     13  );
     14  let handler = info.possibleLocalHandlers.queryElementAt(
     15    0,
     16    Ci.nsILocalHandlerApp
     17  );
     18 
     19  let infoToModify = gMimeSvc.getFromTypeAndExtension(
     20    "text/x-test-handler",
     21    null
     22  );
     23  infoToModify.possibleApplicationHandlers.appendElement(handler);
     24 
     25  gHandlerSvc.store(infoToModify);
     26 }
     27 
     28 add_task(async function () {
     29  setupFakeHandler();
     30 
     31  let prefs = await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
     32    leaveOpen: true,
     33  });
     34  is(prefs.selectedPane, "paneGeneral", "General pane was selected");
     35  let win = gBrowser.selectedBrowser.contentWindow;
     36 
     37  let container = win.document.getElementById("handlersView");
     38  let ourItem = container.querySelector(
     39    "richlistitem[type='text/x-test-handler']"
     40  );
     41  ok(ourItem, "handlersView is present");
     42  ourItem.scrollIntoView();
     43  container.selectItem(ourItem);
     44  ok(ourItem.selected, "Should be able to select our item.");
     45 
     46  let list = ourItem.querySelector(".actionsMenu");
     47 
     48  let chooseItem = list.menupopup.querySelector(".choose-app-item");
     49  let dialogLoadedPromise = promiseLoadSubDialog(
     50    "chrome://global/content/appPicker.xhtml"
     51  );
     52  let cmdEvent = win.document.createEvent("xulcommandevent");
     53  cmdEvent.initCommandEvent(
     54    "command",
     55    true,
     56    true,
     57    win,
     58    0,
     59    false,
     60    false,
     61    false,
     62    false,
     63    0,
     64    null,
     65    0
     66  );
     67  chooseItem.dispatchEvent(cmdEvent);
     68 
     69  let dialog = await dialogLoadedPromise;
     70  info("Dialog loaded");
     71 
     72  let dialogDoc = dialog.document;
     73  let dialogElement = dialogDoc.getElementById("app-picker");
     74  let dialogList = dialogDoc.getElementById("app-picker-listbox");
     75  dialogList.selectItem(dialogList.firstElementChild);
     76  let selectedApp = dialogList.firstElementChild.handlerApp;
     77  dialogElement.acceptDialog();
     78 
     79  // Verify results are correct in mime service:
     80  let mimeInfo = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
     81  ok(
     82    mimeInfo.preferredApplicationHandler.equals(selectedApp),
     83    "App should be set as preferred."
     84  );
     85 
     86  // Check that we display this result:
     87  ok(list.selectedItem, "Should have a selected item");
     88  ok(
     89    mimeInfo.preferredApplicationHandler.equals(list.selectedItem.handlerApp),
     90    "App should be visible as preferred item."
     91  );
     92 
     93  // Now try to 'manage' this list:
     94  dialogLoadedPromise = promiseLoadSubDialog(
     95    "chrome://browser/content/preferences/dialogs/applicationManager.xhtml"
     96  );
     97 
     98  let manageItem = list.menupopup.querySelector(".manage-app-item");
     99  cmdEvent = win.document.createEvent("xulcommandevent");
    100  cmdEvent.initCommandEvent(
    101    "command",
    102    true,
    103    true,
    104    win,
    105    0,
    106    false,
    107    false,
    108    false,
    109    false,
    110    0,
    111    null,
    112    0
    113  );
    114  manageItem.dispatchEvent(cmdEvent);
    115 
    116  dialog = await dialogLoadedPromise;
    117  info("Dialog loaded the second time");
    118 
    119  dialogDoc = dialog.document;
    120  dialogElement = dialogDoc.getElementById("appManager");
    121  dialogList = dialogDoc.getElementById("appList");
    122  let itemToRemove = dialogList.querySelector(
    123    'richlistitem > label[value="' + selectedApp.name + '"]'
    124  ).parentNode;
    125  dialogList.selectItem(itemToRemove);
    126  let itemsBefore = dialogList.children.length;
    127  dialogDoc.getElementById("remove").click();
    128  ok(!itemToRemove.parentNode, "Item got removed from DOM");
    129  is(dialogList.children.length, itemsBefore - 1, "Item got removed");
    130  dialogElement.acceptDialog();
    131 
    132  // Verify results are correct in mime service:
    133  mimeInfo = gMimeSvc.getFromTypeAndExtension("text/x-test-handler", null);
    134  ok(
    135    !mimeInfo.preferredApplicationHandler,
    136    "App should no longer be set as preferred."
    137  );
    138 
    139  // Check that we display this result:
    140  ok(list.selectedItem, "Should have a selected item");
    141  ok(
    142    !list.selectedItem.handlerApp,
    143    "No app should be visible as preferred item."
    144  );
    145 
    146  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    147 });
    148 
    149 registerCleanupFunction(function () {
    150  let infoToModify = gMimeSvc.getFromTypeAndExtension(
    151    "text/x-test-handler",
    152    null
    153  );
    154  gHandlerSvc.remove(infoToModify);
    155 });