/* 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/. */ // @ts-check /** * @template P * @typedef {import("react-redux").ResolveThunks

} ResolveThunks

*/ /** * @typedef {Object} StateProps * @property {boolean?} isSupportedPlatform * @property {PageContext} pageContext * @property {string | null} promptEnvRestart * @property {(() => void) | undefined} openRemoteDevTools */ /** * @typedef {StateProps} Props * @typedef {import("../../@types/perf").State} StoreState * @typedef {import("../../@types/perf").PageContext} PageContext */ "use strict"; const { PureComponent, createFactory, } = require("resource://devtools/client/shared/vendor/react.js"); const { connect, } = require("resource://devtools/client/shared/vendor/react-redux.js"); const { div, h1, button, } = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); const Localized = createFactory( require("resource://devtools/client/shared/vendor/fluent-react.js").Localized ); const Settings = createFactory( require("resource://devtools/client/performance-new/components/aboutprofiling/Settings.js") ); const Presets = createFactory( require("resource://devtools/client/performance-new/components/aboutprofiling/Presets.js") ); const selectors = require("resource://devtools/client/performance-new/store/selectors.js"); const { restartBrowserWithEnvironmentVariable, } = require("resource://devtools/client/performance-new/shared/browser.js"); /** * This is the top level component for the about:profiling page. It shares components * with the popup and DevTools page. * * @extends {React.PureComponent} */ class AboutProfiling extends PureComponent { handleRestart = () => { const { promptEnvRestart } = this.props; if (!promptEnvRestart) { throw new Error( "handleRestart() should only be called when promptEnvRestart exists." ); } restartBrowserWithEnvironmentVariable(promptEnvRestart, "1"); }; render() { const { isSupportedPlatform, pageContext, promptEnvRestart, openRemoteDevTools, } = this.props; if (isSupportedPlatform === null) { // We don't know yet if this is a supported platform, wait for a response. return null; } return div( { className: `perf perf-${pageContext}` }, promptEnvRestart ? div( { className: "perf-env-restart" }, div( { className: "perf-photon-message-bar perf-photon-message-bar-warning perf-env-restart-fixed", }, div({ className: "perf-photon-message-bar-warning-icon" }), Localized({ id: "perftools-status-restart-required" }), button( { className: "perf-photon-button perf-photon-button-micro", type: "button", onClick: this.handleRestart, }, Localized({ id: "perftools-button-restart" }) ) ) ) : null, openRemoteDevTools ? div( { className: "perf-back" }, button( { className: "perf-back-button", type: "button", onClick: openRemoteDevTools, }, Localized({ id: "perftools-button-save-settings" }) ) ) : null, div( { className: "perf-intro" }, h1( { className: "perf-intro-title" }, Localized({ id: "perftools-intro-title" }) ), div( { className: "perf-intro-row" }, div({}, div({ className: "perf-intro-icon" })), Localized({ className: "perf-intro-text", id: "perftools-intro-description", }) ) ), Presets(), Settings() ); } } /** * @param {StoreState} state * @returns {StateProps} */ function mapStateToProps(state) { return { isSupportedPlatform: selectors.getIsSupportedPlatform(state), pageContext: selectors.getPageContext(state), promptEnvRestart: selectors.getPromptEnvRestart(state), openRemoteDevTools: selectors.getOpenRemoteDevTools(state), }; } module.exports = connect(mapStateToProps)(AboutProfiling);