tor-browser

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

link.js (2567B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 
      5 "use strict";
      6 
      7 const {
      8  gDevTools,
      9 } = require("resource://devtools/client/framework/devtools.js");
     10 
     11 /**
     12 * Retrieve the most recent chrome window.
     13 */
     14 function _getTopWindow() {
     15  // Try the main application window, such as a browser window.
     16  let win = Services.wm.getMostRecentWindow(gDevTools.chromeWindowType);
     17  if (win?.openWebLinkIn && win?.openTrustedLinkIn) {
     18    return win;
     19  }
     20  // For non-browser cases like Browser Toolbox, try any chrome window.
     21  win = Services.wm.getMostRecentWindow(null);
     22  if (win?.openWebLinkIn && win?.openTrustedLinkIn) {
     23    return win;
     24  }
     25  return null;
     26 }
     27 
     28 /**
     29 * Opens a |url| that does not require trusted access, such as a documentation page, in a
     30 * new tab.
     31 *
     32 * @param {string} url
     33 *        The url to open.
     34 * @param {object} options
     35 *        Optional parameters, see documentation for openUILinkIn in utilityOverlay.js
     36 */
     37 exports.openDocLink = async function (url, options) {
     38  const top = _getTopWindow();
     39  if (!top) {
     40    return;
     41  }
     42  top.openWebLinkIn(url, "tab", options);
     43 };
     44 
     45 /**
     46 * Opens a |url| controlled by web content in a new tab.
     47 *
     48 * If the current tab has an open toolbox, this will attempt to refine the
     49 * `triggeringPrincipal` of the link using the tab's `contentPrincipal`.  This is only an
     50 * approximation, so bug 1467945 hopes to improve this.
     51 *
     52 * @param {string} url
     53 *        The url to open.
     54 * @param {object} options
     55 *        Optional parameters, see documentation for openUILinkIn in utilityOverlay.js
     56 */
     57 exports.openContentLink = async function (url, options = {}) {
     58  const top = _getTopWindow();
     59  if (!top) {
     60    return;
     61  }
     62  if (!options.triggeringPrincipal && top.gBrowser) {
     63    const tab = top.gBrowser.selectedTab;
     64    if (gDevTools.hasToolboxForTab(tab)) {
     65      options.triggeringPrincipal = tab.linkedBrowser.contentPrincipal;
     66      options.policyContainer = tab.linkedBrowser.policyContainer;
     67    }
     68  }
     69  top.openWebLinkIn(url, "tab", options);
     70 };
     71 
     72 /**
     73 * Open a trusted |url| in a new tab using the SystemPrincipal.
     74 *
     75 * @param {string} url
     76 *        The url to open.
     77 * @param {object} options
     78 *        Optional parameters, see documentation for openUILinkIn in utilityOverlay.js
     79 */
     80 exports.openTrustedLink = async function (url, options) {
     81  const top = _getTopWindow();
     82  if (!top) {
     83    return;
     84  }
     85  top.openTrustedLinkIn(url, "tab", options);
     86 };