/* 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 { ACTIVITY_TYPE, OPEN_NETWORK_DETAILS, RESIZE_NETWORK_DETAILS, ENABLE_PERSISTENT_LOGS, DISABLE_BROWSER_CACHE, OPEN_STATISTICS, RESET_COLUMNS, SELECT_DETAILS_PANEL_TAB, SELECT_ACTION_BAR_TAB, TOGGLE_COLUMN, WATERFALL_RESIZE, SET_COLUMNS_WIDTH, SET_HEADERS_URL_PREVIEW_EXPANDED, OPEN_ACTION_BAR, } = require("resource://devtools/client/netmonitor/src/constants.js"); const { getDisplayedRequests, } = require("resource://devtools/client/netmonitor/src/selectors/index.js"); const DEVTOOLS_DISABLE_CACHE_PREF = "devtools.cache.disabled"; /** * Change network details panel. * * @param {boolean} open - expected network details panel open state */ function openNetworkDetails(open) { return ({ dispatch, getState }) => { const visibleRequestItems = getDisplayedRequests(getState()); const defaultSelectedId = visibleRequestItems.length ? visibleRequestItems[0].id : null; return dispatch({ type: OPEN_NETWORK_DETAILS, open, defaultSelectedId, }); }; } /** * Change network action bar open state. * * @param {boolean} open - expected network action bar open state */ function openNetworkActionBar(open) { return { type: OPEN_ACTION_BAR, open, }; } /** * Change network details panel size. * * @param {integer} width * @param {integer} height */ function resizeNetworkDetails(width, height) { return { type: RESIZE_NETWORK_DETAILS, width, height, }; } /** * Change persistent logs state. * * @param {boolean} enabled - expected persistent logs enabled state */ function enablePersistentLogs(enabled, skipTelemetry = false) { return { type: ENABLE_PERSISTENT_LOGS, enabled, skipTelemetry, }; } /** * Change browser cache state. * * @param {boolean} disabled - expected browser cache in disable state */ function disableBrowserCache(disabled) { return { type: DISABLE_BROWSER_CACHE, disabled, }; } /** * Change performance statistics panel open state. * * @param {Object} connector - connector object to the backend * @param {boolean} visible - expected performance statistics panel open state */ function openStatistics(connector, open) { if (open) { connector.triggerActivity(ACTIVITY_TYPE.RELOAD.WITH_CACHE_ENABLED); } else if (Services.prefs.getBoolPref(DEVTOOLS_DISABLE_CACHE_PREF)) { // Opening the Statistics panel reconfigures the page and enables // the browser cache (using ACTIVITY_TYPE.RELOAD.WITH_CACHE_ENABLED). // So, make sure to disable the cache again when the user returns back // from the Statistics panel (if DEVTOOLS_DISABLE_CACHE_PREF == true). // See also bug 1430359. connector.triggerActivity(ACTIVITY_TYPE.DISABLE_CACHE); } return { type: OPEN_STATISTICS, open, }; } /** * Resets all columns to their default state. * */ function resetColumns() { return { type: RESET_COLUMNS, }; } /** * Waterfall width has changed (likely on window resize). Update the UI. */ function resizeWaterfall(width) { return { type: WATERFALL_RESIZE, width, }; } /** * Change the selected tab for network details panel. * * @param {string} id - tab id to be selected */ function selectDetailsPanelTab(id) { return { type: SELECT_DETAILS_PANEL_TAB, id, }; } /** * Change the selected tab for network action bar. * * @param {string} id - tab id to be selected */ function selectActionBarTab(id) { return { type: SELECT_ACTION_BAR_TAB, id, }; } /** * Toggles a column * * @param {string} column - The column that is going to be toggled */ function toggleColumn(column) { return { type: TOGGLE_COLUMN, column, }; } /** * Set width of multiple columns * * @param {array} widths - array of pairs {name, width} */ function setColumnsWidth(widths) { return { type: SET_COLUMNS_WIDTH, widths, }; } /** * Toggle network details panel. */ function toggleNetworkDetails() { return ({ dispatch, getState }) => dispatch(openNetworkDetails(!getState().ui.networkDetailsOpen)); } /** * Toggle network action panel. */ function toggleNetworkActionBar() { return ({ dispatch, getState }) => dispatch(openNetworkActionBar(!getState().ui.networkActionOpen)); } /** * Toggle persistent logs status. */ function togglePersistentLogs() { return ({ dispatch, getState }) => dispatch(enablePersistentLogs(!getState().ui.persistentLogsEnabled)); } /** * Toggle browser cache status. */ function toggleBrowserCache() { return ({ dispatch, getState }) => dispatch(disableBrowserCache(!getState().ui.browserCacheDisabled)); } /** * Toggle performance statistics panel. */ function toggleStatistics(connector) { return ({ dispatch, getState }) => dispatch(openStatistics(connector, !getState().ui.statisticsOpen)); } function setHeadersUrlPreviewExpanded(expanded) { return { type: SET_HEADERS_URL_PREVIEW_EXPANDED, expanded, }; } module.exports = { openNetworkDetails, openNetworkActionBar, resizeNetworkDetails, enablePersistentLogs, disableBrowserCache, openStatistics, resetColumns, resizeWaterfall, selectDetailsPanelTab, selectActionBarTab, toggleColumn, setColumnsWidth, toggleNetworkDetails, toggleNetworkActionBar, togglePersistentLogs, toggleBrowserCache, toggleStatistics, setHeadersUrlPreviewExpanded, };