diff options
Diffstat (limited to 'devtools/client/aboutdebugging/src/reducers/debug-targets-state.js')
-rw-r--r-- | devtools/client/aboutdebugging/src/reducers/debug-targets-state.js | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/devtools/client/aboutdebugging/src/reducers/debug-targets-state.js b/devtools/client/aboutdebugging/src/reducers/debug-targets-state.js new file mode 100644 index 0000000000..8ee0473e3c --- /dev/null +++ b/devtools/client/aboutdebugging/src/reducers/debug-targets-state.js @@ -0,0 +1,155 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { + EXTENSION_BGSCRIPT_STATUS_UPDATED, + REQUEST_EXTENSIONS_SUCCESS, + REQUEST_PROCESSES_SUCCESS, + REQUEST_TABS_SUCCESS, + REQUEST_WORKERS_SUCCESS, + TEMPORARY_EXTENSION_RELOAD_FAILURE, + TEMPORARY_EXTENSION_RELOAD_START, + TERMINATE_EXTENSION_BGSCRIPT_FAILURE, + TERMINATE_EXTENSION_BGSCRIPT_START, + UNWATCH_RUNTIME_SUCCESS, +} = require("resource://devtools/client/aboutdebugging/src/constants.js"); + +function DebugTargetsState() { + return { + installedExtensions: [], + otherWorkers: [], + processes: [], + serviceWorkers: [], + sharedWorkers: [], + tabs: [], + temporaryExtensions: [], + }; +} + +function updateExtensionDetails(extensions, id, updatedDetails) { + // extensions is meant to be either state.installExtensions or state.temporaryExtensions. + return extensions.map(extension => { + if (extension.id === id) { + extension = Object.assign({}, extension); + + extension.details = Object.assign({}, extension.details, updatedDetails); + } + return extension; + }); +} + +function updateTemporaryExtension(state, id, updatedDetails) { + return updateExtensionDetails(state.temporaryExtensions, id, updatedDetails); +} + +function updateInstalledExtension(state, id, updatedDetails) { + return updateExtensionDetails(state.installedExtensions, id, updatedDetails); +} + +function updateExtension(state, id, updatedDetails) { + return { + installedExtensions: updateInstalledExtension(state, id, updatedDetails), + temporaryExtensions: updateTemporaryExtension(state, id, updatedDetails), + }; +} + +function debugTargetsReducer(state = DebugTargetsState(), action) { + switch (action.type) { + case UNWATCH_RUNTIME_SUCCESS: { + return DebugTargetsState(); + } + case REQUEST_EXTENSIONS_SUCCESS: { + const { installedExtensions, temporaryExtensions } = action; + return Object.assign({}, state, { + installedExtensions, + temporaryExtensions, + }); + } + case REQUEST_PROCESSES_SUCCESS: { + const { processes } = action; + return Object.assign({}, state, { processes }); + } + case REQUEST_TABS_SUCCESS: { + const { tabs } = action; + return Object.assign({}, state, { tabs }); + } + case REQUEST_WORKERS_SUCCESS: { + const { otherWorkers, serviceWorkers, sharedWorkers } = action; + return Object.assign({}, state, { + otherWorkers, + serviceWorkers, + sharedWorkers, + }); + } + case TEMPORARY_EXTENSION_RELOAD_FAILURE: { + const { id, error } = action; + const temporaryExtensions = updateTemporaryExtension(state, id, { + reloadError: error.message, + }); + return Object.assign({}, state, { temporaryExtensions }); + } + case TEMPORARY_EXTENSION_RELOAD_START: { + const { id } = action; + const temporaryExtensions = updateTemporaryExtension(state, id, { + reloadError: null, + }); + return Object.assign({}, state, { temporaryExtensions }); + } + case TERMINATE_EXTENSION_BGSCRIPT_START: { + const { id } = action; + const { installedExtensions, temporaryExtensions } = updateExtension( + state, + id, + { + // Clear the last error if one was still set. + lastTerminateBackgroundScriptError: null, + } + ); + return Object.assign({}, state, { + installedExtensions, + temporaryExtensions, + }); + } + case TERMINATE_EXTENSION_BGSCRIPT_FAILURE: { + const { id, error } = action; + const { installedExtensions, temporaryExtensions } = updateExtension( + state, + id, + { + lastTerminateBackgroundScriptError: error.message, + } + ); + return Object.assign({}, state, { + installedExtensions, + temporaryExtensions, + }); + } + case EXTENSION_BGSCRIPT_STATUS_UPDATED: { + const { id, backgroundScriptStatus } = action; + const { installedExtensions, temporaryExtensions } = updateExtension( + state, + id, + { + backgroundScriptStatus, + // Clear the last error if one was still set. + lastTerminateBackgroundScriptError: null, + } + ); + return Object.assign({}, state, { + installedExtensions, + temporaryExtensions, + }); + } + + default: + return state; + } +} + +module.exports = { + DebugTargetsState, + debugTargetsReducer, +}; |