tor-browser

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

debug-targets-state.js (4569B)


      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  EXTENSION_BGSCRIPT_STATUS_UPDATED,
      9  REQUEST_EXTENSIONS_SUCCESS,
     10  REQUEST_PROCESSES_SUCCESS,
     11  REQUEST_TABS_SUCCESS,
     12  REQUEST_WORKERS_SUCCESS,
     13  TEMPORARY_EXTENSION_RELOAD_FAILURE,
     14  TEMPORARY_EXTENSION_RELOAD_START,
     15  TERMINATE_EXTENSION_BGSCRIPT_FAILURE,
     16  TERMINATE_EXTENSION_BGSCRIPT_START,
     17  UNWATCH_RUNTIME_SUCCESS,
     18 } = require("resource://devtools/client/aboutdebugging/src/constants.js");
     19 
     20 function DebugTargetsState() {
     21  return {
     22    installedExtensions: [],
     23    otherWorkers: [],
     24    processes: [],
     25    serviceWorkers: [],
     26    sharedWorkers: [],
     27    tabs: [],
     28    temporaryExtensions: [],
     29  };
     30 }
     31 
     32 function updateExtensionDetails(extensions, id, updatedDetails) {
     33  // extensions is meant to be either state.installExtensions or state.temporaryExtensions.
     34  return extensions.map(extension => {
     35    if (extension.id === id) {
     36      extension = Object.assign({}, extension);
     37 
     38      extension.details = Object.assign({}, extension.details, updatedDetails);
     39    }
     40    return extension;
     41  });
     42 }
     43 
     44 function updateTemporaryExtension(state, id, updatedDetails) {
     45  return updateExtensionDetails(state.temporaryExtensions, id, updatedDetails);
     46 }
     47 
     48 function updateInstalledExtension(state, id, updatedDetails) {
     49  return updateExtensionDetails(state.installedExtensions, id, updatedDetails);
     50 }
     51 
     52 function updateExtension(state, id, updatedDetails) {
     53  return {
     54    installedExtensions: updateInstalledExtension(state, id, updatedDetails),
     55    temporaryExtensions: updateTemporaryExtension(state, id, updatedDetails),
     56  };
     57 }
     58 
     59 function debugTargetsReducer(state = DebugTargetsState(), action) {
     60  switch (action.type) {
     61    case UNWATCH_RUNTIME_SUCCESS: {
     62      return DebugTargetsState();
     63    }
     64    case REQUEST_EXTENSIONS_SUCCESS: {
     65      const { installedExtensions, temporaryExtensions } = action;
     66      return Object.assign({}, state, {
     67        installedExtensions,
     68        temporaryExtensions,
     69      });
     70    }
     71    case REQUEST_PROCESSES_SUCCESS: {
     72      const { processes } = action;
     73      return Object.assign({}, state, { processes });
     74    }
     75    case REQUEST_TABS_SUCCESS: {
     76      const { tabs } = action;
     77      return Object.assign({}, state, { tabs });
     78    }
     79    case REQUEST_WORKERS_SUCCESS: {
     80      const { otherWorkers, serviceWorkers, sharedWorkers } = action;
     81      return Object.assign({}, state, {
     82        otherWorkers,
     83        serviceWorkers,
     84        sharedWorkers,
     85      });
     86    }
     87    case TEMPORARY_EXTENSION_RELOAD_FAILURE: {
     88      const { id, error } = action;
     89      const temporaryExtensions = updateTemporaryExtension(state, id, {
     90        reloadError: error.message,
     91      });
     92      return Object.assign({}, state, { temporaryExtensions });
     93    }
     94    case TEMPORARY_EXTENSION_RELOAD_START: {
     95      const { id } = action;
     96      const temporaryExtensions = updateTemporaryExtension(state, id, {
     97        reloadError: null,
     98      });
     99      return Object.assign({}, state, { temporaryExtensions });
    100    }
    101    case TERMINATE_EXTENSION_BGSCRIPT_START: {
    102      const { id } = action;
    103      const { installedExtensions, temporaryExtensions } = updateExtension(
    104        state,
    105        id,
    106        {
    107          // Clear the last error if one was still set.
    108          lastTerminateBackgroundScriptError: null,
    109        }
    110      );
    111      return Object.assign({}, state, {
    112        installedExtensions,
    113        temporaryExtensions,
    114      });
    115    }
    116    case TERMINATE_EXTENSION_BGSCRIPT_FAILURE: {
    117      const { id, error } = action;
    118      const { installedExtensions, temporaryExtensions } = updateExtension(
    119        state,
    120        id,
    121        {
    122          lastTerminateBackgroundScriptError: error.message,
    123        }
    124      );
    125      return Object.assign({}, state, {
    126        installedExtensions,
    127        temporaryExtensions,
    128      });
    129    }
    130    case EXTENSION_BGSCRIPT_STATUS_UPDATED: {
    131      const { id, backgroundScriptStatus } = action;
    132      const { installedExtensions, temporaryExtensions } = updateExtension(
    133        state,
    134        id,
    135        {
    136          backgroundScriptStatus,
    137          // Clear the last error if one was still set.
    138          lastTerminateBackgroundScriptError: null,
    139        }
    140      );
    141      return Object.assign({}, state, {
    142        installedExtensions,
    143        temporaryExtensions,
    144      });
    145    }
    146 
    147    default:
    148      return state;
    149  }
    150 }
    151 
    152 module.exports = {
    153  DebugTargetsState,
    154  debugTargetsReducer,
    155 };