tor-browser

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

create-store.js (4816B)


      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  applyMiddleware,
      9  createStore,
     10 } = require("resource://devtools/client/shared/vendor/redux.js");
     11 
     12 const {
     13  MIN_COLUMN_WIDTH,
     14  DEFAULT_COLUMN_WIDTH,
     15 } = require("resource://devtools/client/netmonitor/src/constants.js");
     16 
     17 // Middleware
     18 const {
     19  ignore,
     20 } = require("resource://devtools/client/shared/redux/middleware/ignore.js");
     21 const {
     22  thunk,
     23 } = require("resource://devtools/client/shared/redux/middleware/thunk.js");
     24 const {
     25  waitUntilService,
     26 } = require("resource://devtools/client/shared/redux/middleware/wait-service.js");
     27 
     28 const batching = require("resource://devtools/client/netmonitor/src/middleware/batching.js");
     29 const prefs = require("resource://devtools/client/netmonitor/src/middleware/prefs.js");
     30 const throttling = require("resource://devtools/client/netmonitor/src/middleware/throttling.js");
     31 const eventTelemetry = require("resource://devtools/client/netmonitor/src/middleware/event-telemetry.js");
     32 const requestBlocking = require("resource://devtools/client/netmonitor/src/middleware/request-blocking.js");
     33 
     34 // Reducers
     35 const rootReducer = require("resource://devtools/client/netmonitor/src/reducers/index.js");
     36 const {
     37  FilterTypes,
     38  Filters,
     39 } = require("resource://devtools/client/netmonitor/src/reducers/filters.js");
     40 const {
     41  Requests,
     42 } = require("resource://devtools/client/netmonitor/src/reducers/requests.js");
     43 const {
     44  Sort,
     45 } = require("resource://devtools/client/netmonitor/src/reducers/sort.js");
     46 const {
     47  TimingMarkers,
     48 } = require("resource://devtools/client/netmonitor/src/reducers/timing-markers.js");
     49 const {
     50  UI,
     51  Columns,
     52  ColumnsData,
     53 } = require("resource://devtools/client/netmonitor/src/reducers/ui.js");
     54 const {
     55  Messages,
     56  getMessageDefaultColumnsState,
     57 } = require("resource://devtools/client/netmonitor/src/reducers/messages.js");
     58 const {
     59  Search,
     60 } = require("resource://devtools/client/netmonitor/src/reducers/search.js");
     61 
     62 /**
     63 * Configure state and middleware for the Network monitor tool.
     64 */
     65 function configureStore(connector, commands, telemetry) {
     66  // Prepare initial state.
     67  const initialState = {
     68    filters: new Filters(getFiltersState()),
     69    requests: new Requests(),
     70    sort: new Sort(),
     71    timingMarkers: new TimingMarkers(),
     72    ui: UI({
     73      columns: getColumnState(),
     74      columnsData: getColumnsData(),
     75    }),
     76    messages: Messages({
     77      columns: getMessageColumnState(),
     78    }),
     79    search: new Search(),
     80  };
     81 
     82  // Prepare middleware.
     83  const middleware = applyMiddleware(
     84    // Register ignore first to prevent any subsequent middleware from running
     85    ignore,
     86 
     87    requestBlocking(commands),
     88    thunk({ connector, commands }),
     89    prefs,
     90    batching,
     91    throttling(connector),
     92    eventTelemetry(connector, telemetry),
     93    waitUntilService
     94  );
     95 
     96  return createStore(rootReducer, initialState, middleware);
     97 }
     98 
     99 // Helpers
    100 
    101 /**
    102 * Get column state from preferences.
    103 */
    104 function getColumnState() {
    105  const columns = Columns();
    106  const visibleColumns = getJsonPref("devtools.netmonitor.visibleColumns");
    107 
    108  const state = {};
    109  for (const col in columns) {
    110    state[col] = visibleColumns.includes(col);
    111  }
    112 
    113  return state;
    114 }
    115 
    116 /**
    117 * Get column state of Messages from preferences.
    118 */
    119 function getMessageColumnState() {
    120  const columns = getMessageDefaultColumnsState();
    121  const visibleColumns = getJsonPref("devtools.netmonitor.msg.visibleColumns");
    122 
    123  const state = {};
    124  for (const col in columns) {
    125    state[col] = visibleColumns.includes(col);
    126  }
    127 
    128  return state;
    129 }
    130 
    131 /**
    132 * Get columns data (width, min-width)
    133 */
    134 function getColumnsData() {
    135  const columnsData = getJsonPref("devtools.netmonitor.columnsData");
    136  if (!columnsData.length) {
    137    return ColumnsData();
    138  }
    139 
    140  const newMap = new Map();
    141  columnsData.forEach(col => {
    142    if (col.name) {
    143      col.minWidth = col.minWidth ? col.minWidth : MIN_COLUMN_WIDTH;
    144      col.width = col.width ? col.width : DEFAULT_COLUMN_WIDTH;
    145      newMap.set(col.name, col);
    146    }
    147  });
    148 
    149  return newMap;
    150 }
    151 
    152 /**
    153 * Get filter state from preferences.
    154 */
    155 function getFiltersState() {
    156  const activeFilters = {};
    157  const filters = getJsonPref("devtools.netmonitor.filters");
    158  filters.forEach(filter => {
    159    activeFilters[filter] = true;
    160  });
    161 
    162  return {
    163    requestFilterTypes: new FilterTypes(activeFilters),
    164    requestFilterText: Services.prefs.getCharPref(
    165      "devtools.netmonitor.requestfilter"
    166    ),
    167  };
    168 }
    169 
    170 /**
    171 * Get json data from preferences
    172 */
    173 
    174 function getJsonPref(pref) {
    175  try {
    176    return JSON.parse(Services.prefs.getCharPref(pref));
    177  } catch (_) {
    178    return [];
    179  }
    180 }
    181 
    182 exports.configureStore = configureStore;