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 };