tor-browser

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

browser-menubar.js (8059B)


      1 /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*-
      2 * This Source Code Form is subject to the terms of the Mozilla Public
      3 * License, v. 2.0. If a copy of the MPL was not distributed with this
      4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      5 
      6 document.addEventListener(
      7  "DOMContentLoaded",
      8  () => {
      9    let mainMenuBar = document.getElementById("main-menubar");
     10 
     11    mainMenuBar.addEventListener("command", event => {
     12      switch (event.target.id) {
     13        // == edit-menu ==
     14        case "menu_preferences":
     15          openPreferences(undefined);
     16          break;
     17 
     18        // == view-menu ==
     19        case "menu_pageStyleNoStyle":
     20          gPageStyleMenu.disableStyle();
     21          break;
     22        case "menu_pageStylePersistentOnly":
     23          gPageStyleMenu.switchStyleSheet(null);
     24          break;
     25        case "repair-text-encoding":
     26          BrowserCommands.forceEncodingDetection();
     27          break;
     28        case "enterFullScreenItem":
     29        case "exitFullScreenItem":
     30          BrowserCommands.fullScreen();
     31          break;
     32        case "documentDirection-swap":
     33          gBrowser.selectedBrowser.sendMessageToActor(
     34            "SwitchDocumentDirection",
     35            {},
     36            "SwitchDocumentDirection",
     37            "roots"
     38          );
     39          break;
     40 
     41        // == history-menu ==
     42        case "sync-tabs-menuitem":
     43          gSync.openSyncedTabsPanel();
     44          break;
     45        case "hiddenTabsMenu":
     46          gTabsPanel.showHiddenTabsPanel(event, "hidden-tabs-menuitem");
     47          break;
     48        case "sync-setup":
     49          gSync.openPrefs("menubar");
     50          break;
     51        case "sync-enable":
     52          gSync.openPrefs("menubar");
     53          break;
     54        case "sync-unverifieditem":
     55          gSync.openPrefs("menubar");
     56          break;
     57        case "sync-syncnowitem":
     58          gSync.doSync(event);
     59          break;
     60        case "sync-reauthitem":
     61          gSync.openSignInAgainPage("menubar");
     62          break;
     63        case "menu_openFirefoxView":
     64          FirefoxViewHandler.openTab();
     65          break;
     66        case "hiddenUndoCloseWindow":
     67          SessionWindowUI.undoCloseWindow(0);
     68          break;
     69 
     70        // == menu_HelpPopup ==
     71        // (Duplicated in PanelUI._onHelpCommand)
     72        case "menu_openHelp":
     73          openHelpLink("firefox-help");
     74          break;
     75        case "menu_layout_debugger":
     76          toOpenWindowByType(
     77            "mozapp:layoutdebug",
     78            "chrome://layoutdebug/content/layoutdebug.xhtml"
     79          );
     80          break;
     81        case "feedbackPage":
     82          openFeedbackPage();
     83          break;
     84        case "helpSafeMode":
     85          safeModeRestart();
     86          break;
     87        case "troubleShooting":
     88          openTroubleshootingPage();
     89          break;
     90        case "menu_HelpPopup_reportPhishingtoolmenu":
     91          openUILink(gSafeBrowsing.getReportURL("Phish"), event, {
     92            triggeringPrincipal:
     93              Services.scriptSecurityManager.createNullPrincipal({}),
     94          });
     95          break;
     96        case "menu_HelpPopup_reportPhishingErrortoolmenu":
     97          gSafeBrowsing.reportFalseDeceptiveSite();
     98          break;
     99        case "helpSwitchDevice":
    100          openSwitchingDevicesPage();
    101          break;
    102        case "aboutName":
    103          openAboutDialog();
    104          break;
    105        case "helpPolicySupport":
    106          openTrustedLinkIn(Services.policies.getSupportMenu().URL.href, "tab");
    107          break;
    108        case "torBrowserUserManual":
    109          gBrowser.selectedTab = gBrowser.addTab("about:manual", {
    110            triggeringPrincipal:
    111              Services.scriptSecurityManager.getSystemPrincipal(),
    112          });
    113          break;
    114      }
    115    });
    116 
    117    document
    118      .getElementById("historyMenuPopup")
    119      .addEventListener("command", event => {
    120        // Handle commands/clicks on the descending menuitems that are
    121        // history entries.
    122        let historyMenu = document.getElementById("history-menu");
    123        historyMenu._placesView._onCommand(event);
    124      });
    125 
    126    let bookmarksMenuPopup = document.getElementById("bookmarksMenuPopup");
    127    bookmarksMenuPopup.addEventListener("command", event => {
    128      BookmarksEventHandler.onCommand(event);
    129    });
    130 
    131    bookmarksMenuPopup.addEventListener("click", event => {
    132      BookmarksEventHandler.onClick(
    133        event,
    134        bookmarksMenuPopup.parentNode._placesView
    135      );
    136    });
    137 
    138    bookmarksMenuPopup.addEventListener("mouseup", event => {
    139      BookmarksEventHandler.onMouseUp(event);
    140    });
    141 
    142    const bookmarksMenu = document.getElementById("bookmarksMenu");
    143    bookmarksMenu.addEventListener("dragover", event =>
    144      PlacesMenuDNDHandler.onDragOver(event)
    145    );
    146    bookmarksMenu.addEventListener("dragenter", event =>
    147      PlacesMenuDNDHandler.onDragEnter(event)
    148    );
    149    bookmarksMenu.addEventListener("dragleave", event =>
    150      PlacesMenuDNDHandler.onDragLeave(event)
    151    );
    152    bookmarksMenu.addEventListener("drop", event =>
    153      PlacesMenuDNDHandler.onDrop(event)
    154    );
    155 
    156    mainMenuBar.addEventListener("popupshowing", event => {
    157      // On macOS, we don't track whether activation of the native menubar happened
    158      // with the keyboard.
    159      if (AppConstants.platform != "macosx") {
    160        // We only set the "openedwithkey" if a specific menu like "Edit" was opened
    161        // instead of the general menu bar. (e.g. Alt+E instead of just Alt)
    162        if (event.target.parentNode.parentNode == this) {
    163          this.setAttribute(
    164            "openedwithkey",
    165            event.target.parentNode.openedWithKey
    166          );
    167        }
    168      }
    169 
    170      switch (event.target.id) {
    171        case "menu_FilePopup":
    172          gFileMenu.onPopupShowing(event);
    173          break;
    174        case "menu_newUserContextPopup":
    175          createUserContextMenu(event);
    176          break;
    177        case "menu_EditPopup":
    178          updateEditUIVisibility();
    179          break;
    180        case "view-menu-popup":
    181          ToolbarContextMenu.onViewToolbarsPopupShowing(event);
    182          break;
    183        case "pageStyleMenuPopup":
    184          gPageStyleMenu.fillPopup(event.target);
    185          break;
    186        case "historyMenuPopup":
    187          if (!event.target.parentNode._placesView) {
    188            new HistoryMenu(event);
    189          }
    190 
    191          AIWindow.appMenu(event, window);
    192          break;
    193        case "historyUndoPopup":
    194          document
    195            .getElementById("history-menu")
    196            ._placesView.populateUndoSubmenu();
    197          break;
    198        case "historyUndoWindowPopup":
    199          document
    200            .getElementById("history-menu")
    201            ._placesView.populateUndoWindowSubmenu();
    202          break;
    203        case "bookmarksMenuPopup":
    204          BookmarkingUI.onMainMenuPopupShowing(event);
    205          if (!event.target.parentNode._placesView) {
    206            new PlacesMenu(
    207              event,
    208              `place:parent=${PlacesUtils.bookmarks.menuGuid}`
    209            );
    210          }
    211          break;
    212        case "bookmarksToolbarFolderPopup":
    213          if (!event.target.parentNode._placesView) {
    214            new PlacesMenu(
    215              event,
    216              `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`
    217            );
    218          }
    219          break;
    220        case "otherBookmarksFolderPopup":
    221          if (!event.target.parentNode._placesView) {
    222            new PlacesMenu(
    223              event,
    224              `place:parent=${PlacesUtils.bookmarks.unfiledGuid}`
    225            );
    226          }
    227          break;
    228        case "mobileBookmarksFolderPopup":
    229          if (!event.target.parentNode._placesView) {
    230            new PlacesMenu(
    231              event,
    232              `place:parent=${PlacesUtils.bookmarks.mobileGuid}`
    233            );
    234          }
    235          break;
    236        case "menu_HelpPopup":
    237          buildHelpMenu();
    238          break;
    239        case "menu_ProfilesPopup":
    240          gProfiles.onPopupShowing(event);
    241          break;
    242      }
    243    });
    244 
    245    document
    246      .getElementById("menu_EditPopup")
    247      .addEventListener("popuphidden", () => {
    248        updateEditUIVisibility();
    249      });
    250  },
    251  { once: true }
    252 );