Source code

Revision control

Copy as Markdown

Other Tools

/* 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,
};