tor-browser

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

background.js (4116B)


      1 const port = browser.runtime.connectNative("browser");
      2 port.onMessage.addListener(message => {
      3  handleMessage(message, null);
      4 });
      5 
      6 browser.runtime.onMessage.addListener((message, sender) => {
      7  handleMessage(message, sender.tab.id);
      8 });
      9 
     10 browser.pageAction.onClicked.addListener(tab => {
     11  port.postMessage({ method: "onClicked", tabId: tab.id, type: "pageAction" });
     12 });
     13 
     14 browser.browserAction.onClicked.addListener(tab => {
     15  port.postMessage({
     16    method: "onClicked",
     17    tabId: tab.id,
     18    type: "browserAction",
     19  });
     20 });
     21 
     22 function handlePageActionMessage(message, tabId) {
     23  switch (message.action) {
     24    case "enable":
     25      browser.pageAction.show(tabId);
     26      break;
     27 
     28    case "disable":
     29      browser.pageAction.hide(tabId);
     30      break;
     31 
     32    case "setPopup":
     33      browser.pageAction.setPopup({
     34        tabId,
     35        popup: message.popup,
     36      });
     37      break;
     38 
     39    case "setPopupCheckRestrictions":
     40      browser.pageAction
     41        .setPopup({
     42          tabId,
     43          popup: message.popup,
     44        })
     45        .then(
     46          () => {
     47            port.postMessage({
     48              resultFor: "setPopup",
     49              type: "pageAction",
     50              success: true,
     51            });
     52          },
     53          err => {
     54            port.postMessage({
     55              resultFor: "setPopup",
     56              type: "pageAction",
     57              success: false,
     58              error: String(err),
     59            });
     60          }
     61        );
     62      break;
     63 
     64    case "setTitle":
     65      browser.pageAction.setTitle({
     66        tabId,
     67        title: message.title,
     68      });
     69      break;
     70 
     71    case "setIcon":
     72      browser.pageAction.setIcon({
     73        tabId,
     74        imageData: message.imageData,
     75        path: message.path,
     76      });
     77      break;
     78 
     79    default:
     80      throw new Error(`Page Action does not support ${message.action}`);
     81  }
     82 }
     83 
     84 function handleBrowserActionMessage(message, tabId) {
     85  switch (message.action) {
     86    case "enable":
     87      browser.browserAction.enable(tabId);
     88      break;
     89 
     90    case "disable":
     91      browser.browserAction.disable(tabId);
     92      break;
     93 
     94    case "setBadgeText":
     95      browser.browserAction.setBadgeText({
     96        tabId,
     97        text: message.text,
     98      });
     99      break;
    100 
    101    case "setBadgeTextColor":
    102      browser.browserAction.setBadgeTextColor({
    103        tabId,
    104        color: message.color,
    105      });
    106      break;
    107 
    108    case "setBadgeBackgroundColor":
    109      browser.browserAction.setBadgeBackgroundColor({
    110        tabId,
    111        color: message.color,
    112      });
    113      break;
    114 
    115    case "setPopup":
    116      browser.browserAction.setPopup({
    117        tabId,
    118        popup: message.popup,
    119      });
    120      break;
    121 
    122    case "setPopupCheckRestrictions":
    123      browser.browserAction
    124        .setPopup({
    125          tabId,
    126          popup: message.popup,
    127        })
    128        .then(
    129          () => {
    130            port.postMessage({
    131              resultFor: "setPopup",
    132              type: "browserAction",
    133              success: true,
    134            });
    135          },
    136          err => {
    137            port.postMessage({
    138              resultFor: "setPopup",
    139              type: "browserAction",
    140              success: false,
    141              error: String(err),
    142            });
    143          }
    144        );
    145      break;
    146 
    147    case "setTitle":
    148      browser.browserAction.setTitle({
    149        tabId,
    150        title: message.title,
    151      });
    152      break;
    153 
    154    case "setIcon":
    155      browser.browserAction.setIcon({
    156        tabId,
    157        imageData: message.imageData,
    158        path: message.path,
    159      });
    160      break;
    161 
    162    default:
    163      throw new Error(`Browser Action does not support ${message.action}`);
    164  }
    165 }
    166 
    167 function handleMessage(message, tabId) {
    168  switch (message.type) {
    169    case "ping":
    170      port.postMessage({ method: "pong" });
    171      return;
    172 
    173    case "load":
    174      browser.tabs.update(tabId, {
    175        url: message.url,
    176      });
    177      return;
    178 
    179    case "browserAction":
    180      handleBrowserActionMessage(message, tabId);
    181      return;
    182 
    183    case "pageAction":
    184      handlePageActionMessage(message, tabId);
    185      return;
    186 
    187    default:
    188      throw new Error(`Unsupported message type ${message.type}`);
    189  }
    190 }