diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /devtools/client/shared/components/throttling | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/shared/components/throttling')
6 files changed, 237 insertions, 0 deletions
diff --git a/devtools/client/shared/components/throttling/NetworkThrottlingMenu.js b/devtools/client/shared/components/throttling/NetworkThrottlingMenu.js new file mode 100644 index 0000000000..57855689fb --- /dev/null +++ b/devtools/client/shared/components/throttling/NetworkThrottlingMenu.js @@ -0,0 +1,88 @@ +/* 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 { PureComponent } = require("devtools/client/shared/vendor/react"); +const dom = require("devtools/client/shared/vendor/react-dom-factories"); +const PropTypes = require("devtools/client/shared/vendor/react-prop-types"); + +const throttlingProfiles = require("devtools/client/shared/components/throttling/profiles"); +const Types = require("devtools/client/shared/components/throttling/types"); + +// Localization +const { LocalizationHelper } = require("devtools/shared/l10n"); +const L10N = new LocalizationHelper( + "devtools/client/locales/network-throttling.properties" +); +const NO_THROTTLING_LABEL = L10N.getStr("responsive.noThrottling"); + +loader.lazyRequireGetter( + this, + "showMenu", + "devtools/client/shared/components/menu/utils", + true +); + +/** + * This component represents selector button that can be used + * to throttle network bandwidth. + */ +class NetworkThrottlingMenu extends PureComponent { + static get propTypes() { + return { + networkThrottling: PropTypes.shape(Types.networkThrottling).isRequired, + onChangeNetworkThrottling: PropTypes.func.isRequired, + }; + } + + constructor(props) { + super(props); + this.onShowThrottlingMenu = this.onShowThrottlingMenu.bind(this); + } + + onShowThrottlingMenu(event) { + const { networkThrottling, onChangeNetworkThrottling } = this.props; + + const menuItems = throttlingProfiles.map(profile => { + return { + label: profile.id, + type: "checkbox", + checked: + networkThrottling.enabled && profile.id == networkThrottling.profile, + click: () => onChangeNetworkThrottling(true, profile.id), + }; + }); + + menuItems.unshift("-"); + + menuItems.unshift({ + label: NO_THROTTLING_LABEL, + type: "checkbox", + checked: !networkThrottling.enabled, + click: () => onChangeNetworkThrottling(false, ""), + }); + + showMenu(menuItems, { button: event.target }); + } + + render() { + const { networkThrottling } = this.props; + const selectedProfile = networkThrottling.enabled + ? networkThrottling.profile + : NO_THROTTLING_LABEL; + + return dom.button( + { + id: "network-throttling-menu", + className: "devtools-button devtools-dropdown-button", + title: selectedProfile, + onClick: this.onShowThrottlingMenu, + }, + dom.span({ className: "title" }, selectedProfile) + ); + } +} + +module.exports = NetworkThrottlingMenu; diff --git a/devtools/client/shared/components/throttling/actions.js b/devtools/client/shared/components/throttling/actions.js new file mode 100644 index 0000000000..b6a686ab22 --- /dev/null +++ b/devtools/client/shared/components/throttling/actions.js @@ -0,0 +1,22 @@ +/* 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 actionTypes = { + CHANGE_NETWORK_THROTTLING: "CHANGE_NETWORK_THROTTLING", +}; + +function changeNetworkThrottling(enabled, profile) { + return { + type: actionTypes.CHANGE_NETWORK_THROTTLING, + enabled, + profile, + }; +} + +module.exports = { + ...actionTypes, + changeNetworkThrottling, +}; diff --git a/devtools/client/shared/components/throttling/moz.build b/devtools/client/shared/components/throttling/moz.build new file mode 100644 index 0000000000..2c178219fc --- /dev/null +++ b/devtools/client/shared/components/throttling/moz.build @@ -0,0 +1,13 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +DevToolsModules( + "actions.js", + "NetworkThrottlingMenu.js", + "profiles.js", + "reducer.js", + "types.js", +) diff --git a/devtools/client/shared/components/throttling/profiles.js b/devtools/client/shared/components/throttling/profiles.js new file mode 100644 index 0000000000..83054ce83b --- /dev/null +++ b/devtools/client/shared/components/throttling/profiles.js @@ -0,0 +1,68 @@ +/* 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 K = 1024; +const M = 1024 * 1024; +const Bps = 1 / 8; +const KBps = K * Bps; +const MBps = M * Bps; + +/** + * Predefined network throttling profiles. + * Speeds are in bytes per second. Latency is in ms. + */ +/* eslint-disable key-spacing */ +module.exports = [ + { + id: "GPRS", + download: 50 * KBps, + upload: 20 * KBps, + latency: 500, + }, + { + id: "Regular 2G", + download: 250 * KBps, + upload: 50 * KBps, + latency: 300, + }, + { + id: "Good 2G", + download: 450 * KBps, + upload: 150 * KBps, + latency: 150, + }, + { + id: "Regular 3G", + download: 750 * KBps, + upload: 250 * KBps, + latency: 100, + }, + { + id: "Good 3G", + download: 1.5 * MBps, + upload: 750 * KBps, + latency: 40, + }, + { + id: "Regular 4G / LTE", + download: 4 * MBps, + upload: 3 * MBps, + latency: 20, + }, + { + id: "DSL", + download: 2 * MBps, + upload: 1 * MBps, + latency: 5, + }, + { + id: "Wi-Fi", + download: 30 * MBps, + upload: 15 * MBps, + latency: 2, + }, +]; +/* eslint-enable key-spacing */ diff --git a/devtools/client/shared/components/throttling/reducer.js b/devtools/client/shared/components/throttling/reducer.js new file mode 100644 index 0000000000..7e5b1709d4 --- /dev/null +++ b/devtools/client/shared/components/throttling/reducer.js @@ -0,0 +1,29 @@ +/* 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 { + CHANGE_NETWORK_THROTTLING, +} = require("devtools/client/shared/components/throttling/actions"); + +const INITIAL_STATE = { + enabled: false, + profile: "", +}; + +function throttlingReducer(state = INITIAL_STATE, action) { + switch (action.type) { + case CHANGE_NETWORK_THROTTLING: { + return { + enabled: action.enabled, + profile: action.profile, + }; + } + default: + return state; + } +} + +module.exports = throttlingReducer; diff --git a/devtools/client/shared/components/throttling/types.js b/devtools/client/shared/components/throttling/types.js new file mode 100644 index 0000000000..3ef7486f7a --- /dev/null +++ b/devtools/client/shared/components/throttling/types.js @@ -0,0 +1,17 @@ +/* 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 PropTypes = require("devtools/client/shared/vendor/react-prop-types"); + +/** + * Network throttling state. + */ +exports.networkThrottling = { + // Whether or not network throttling is enabled + enabled: PropTypes.bool, + // Name of the selected throttling profile + profile: PropTypes.string, +}; |