From 0e4015ecb83e0420ed6b26b8084f095237b41173 Mon Sep 17 00:00:00 2001 From: David Walsh Date: Wed, 27 May 2020 19:57:17 +0000 Subject: [PATCH] Bug 1640318 - Disable only JavaScript in the present tab when using the debugger menu r=jlast Differential Revision: https://phabricator.services.mozilla.com/D76600 --- devtools/client/debugger/src/actions/threads.js | 10 ++++++++++ devtools/client/debugger/src/actions/types/UIAction.js | 4 ++++ .../client/debugger/src/client/firefox/commands.js | 9 +++++++++ devtools/client/debugger/src/client/firefox/types.js | 1 + .../src/components/SecondaryPanes/CommandBar.js | 10 +++++++--- devtools/client/debugger/src/reducers/ui.js | 6 ++++++ devtools/client/debugger/src/utils/prefs.js | 5 ----- .../browser_dbg-settings-disable-javascript.js | 5 +---- devtools/client/debugger/test/mochitest/helpers.js | 1 - 9 files changed, 38 insertions(+), 13 deletions(-) diff --git a/devtools/client/debugger/src/actions/threads.js b/devtools/client/debugger/src/actions/threads.js index d7723371ca89..b45516bca97b 100644 --- a/devtools/client/debugger/src/actions/threads.js +++ b/devtools/client/debugger/src/actions/threads.js @@ -133,3 +133,13 @@ export function ensureHasThread(thread: ActorId) { } }; } + +export function toggleJavaScriptEnabled(enabled: Boolean) { + return async ({ panel, dispatch, client }: ThunkArgs) => { + await client.toggleJavaScriptEnabled(enabled); + dispatch({ + type: "TOGGLE_JAVASCRIPT_ENABLED", + value: enabled, + }); + }; +} diff --git a/devtools/client/debugger/src/actions/types/UIAction.js b/devtools/client/debugger/src/actions/types/UIAction.js index 830f46d57088..cab9d363020f 100644 --- a/devtools/client/debugger/src/actions/types/UIAction.js +++ b/devtools/client/debugger/src/actions/types/UIAction.js @@ -38,6 +38,10 @@ export type UIAction = +type: "TOGGLE_SOURCE_MAPS_ENABLED", +value: boolean, |} + | {| + +type: "TOGGLE_JAVASCRIPT_ENABLED", + +value: boolean, + |} | {| +type: "SHOW_SOURCE", +source: Source, diff --git a/devtools/client/debugger/src/client/firefox/commands.js b/devtools/client/debugger/src/client/firefox/commands.js index b6f670c65c2d..97eac5605ce1 100644 --- a/devtools/client/debugger/src/client/firefox/commands.js +++ b/devtools/client/debugger/src/client/firefox/commands.js @@ -189,6 +189,14 @@ function removeXHRBreakpoint(path: string, method: string) { return currentThreadFront().removeXHRBreakpoint(path, method); } +export function toggleJavaScriptEnabled(enabled: Boolean) { + return currentTarget().reconfigure({ + options: { + javascriptEnabled: enabled, + }, + }); +} + function addWatchpoint( object: Grip, property: string, @@ -579,6 +587,7 @@ const clientCommands = { lookupTarget, getFrontByID, fetchAncestorFramePositions, + toggleJavaScriptEnabled, }; export { setupCommands, clientCommands }; diff --git a/devtools/client/debugger/src/client/firefox/types.js b/devtools/client/debugger/src/client/firefox/types.js index 770c56264c20..03b4cb8adc82 100644 --- a/devtools/client/debugger/src/client/firefox/types.js +++ b/devtools/client/debugger/src/client/firefox/types.js @@ -207,6 +207,7 @@ export type Target = { isParentProcess: boolean, isServiceWorker: boolean, targetForm: Object, + reconfigure: Object, // Property installed by the debugger itself. debuggerServiceWorkerStatus: string, diff --git a/devtools/client/debugger/src/components/SecondaryPanes/CommandBar.js b/devtools/client/debugger/src/components/SecondaryPanes/CommandBar.js index 34ef47c583f4..6d0c257dc74d 100644 --- a/devtools/client/debugger/src/components/SecondaryPanes/CommandBar.js +++ b/devtools/client/debugger/src/components/SecondaryPanes/CommandBar.js @@ -9,7 +9,7 @@ import React, { Component } from "react"; import { connect } from "../../utils/connect"; import classnames from "classnames"; -import { features, javascriptPrefs, prefs } from "../../utils/prefs"; +import { features, prefs } from "../../utils/prefs"; import { getIsWaitingOnBreak, getSkipPausing, @@ -90,6 +90,7 @@ type Props = { isWaitingOnBreak: boolean, horizontal: boolean, skipPausing: boolean, + javascriptEnabled: boolean, topFrameSelected: boolean, resume: typeof actions.resume, stepIn: typeof actions.stepIn, @@ -100,6 +101,7 @@ type Props = { toggleSkipPausing: typeof actions.toggleSkipPausing, toggleInlinePreview: typeof actions.toggleInlinePreview, toggleSourceMapsEnabled: typeof actions.toggleSourceMapsEnabled, + toggleJavaScriptEnabled: typeof actions.toggleJavaScriptEnabled, }; class CommandBar extends Component { @@ -258,11 +260,11 @@ class CommandBar extends Component { { - javascriptPrefs.enableJavaScript = !javascriptPrefs.enableJavaScript; + this.props.toggleJavaScriptEnabled(!this.props.javascriptEnabled); }} /> ({ isWaitingOnBreak: getIsWaitingOnBreak(state, getCurrentThread(state)), skipPausing: getSkipPausing(state), topFrameSelected: isTopFrameSelected(state, getCurrentThread(state)), + javascriptEnabled: state.ui.javascriptEnabled, }); export default connect(mapStateToProps, { @@ -326,4 +329,5 @@ export default connect(mapStateToProps, { toggleSkipPausing: actions.toggleSkipPausing, toggleInlinePreview: actions.toggleInlinePreview, toggleSourceMapsEnabled: actions.toggleSourceMapsEnabled, + toggleJavaScriptEnabled: actions.toggleJavaScriptEnabled, })(CommandBar); diff --git a/devtools/client/debugger/src/reducers/ui.js b/devtools/client/debugger/src/reducers/ui.js index 0332bd5c4ba0..12529a9b2415 100644 --- a/devtools/client/debugger/src/reducers/ui.js +++ b/devtools/client/debugger/src/reducers/ui.js @@ -41,6 +41,7 @@ export type UIState = { isLogPoint: boolean, inlinePreviewEnabled: boolean, sourceMapsEnabled: boolean, + javascriptEnabled: boolean, }; export const createUIState = (): UIState => ({ @@ -58,6 +59,7 @@ export const createUIState = (): UIState => ({ cursorPosition: null, inlinePreviewEnabled: features.inlinePreview, sourceMapsEnabled: prefs.clientSourceMapsEnabled, + javascriptEnabled: true, }); function update(state: UIState = createUIState(), action: Action): UIState { @@ -76,6 +78,10 @@ function update(state: UIState = createUIState(), action: Action): UIState { return { ...state, inlinePreviewEnabled: action.value }; } + case "TOGGLE_JAVASCRIPT_ENABLED": { + return { ...state, javascriptEnabled: action.value }; + } + case "TOGGLE_SOURCE_MAPS_ENABLED": { prefs.clientSourceMapsEnabled = action.value; return { ...state, sourceMapsEnabled: action.value }; diff --git a/devtools/client/debugger/src/utils/prefs.js b/devtools/client/debugger/src/utils/prefs.js index e62a3e9e6b0b..97845b606d97 100644 --- a/devtools/client/debugger/src/utils/prefs.js +++ b/devtools/client/debugger/src/utils/prefs.js @@ -77,7 +77,6 @@ if (isDevelopment()) { pref("devtools.debugger.features.watchpoints", true); pref("devtools.debugger.features.frame-step", true); pref("devtools.editor.tabsize", 2); - pref("javascript.enabled", true); } export const prefs = new PrefsHelper("devtools", { @@ -122,10 +121,6 @@ export const prefs = new PrefsHelper("devtools", { indentSize: ["Int", "editor.tabsize"], }); -export const javascriptPrefs = new PrefsHelper("javascript", { - enableJavaScript: ["Bool", "enabled"], -}); - // The pref may not be defined. Defaulting to null isn't viable (cursor never blinks). // Can't use CodeMirror.defaults here because it's loaded later. // Hardcode the fallback value to that of CodeMirror.defaults.cursorBlinkRate. diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-settings-disable-javascript.js b/devtools/client/debugger/test/mochitest/browser_dbg-settings-disable-javascript.js index 53193cb4689b..f47d115e3534 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg-settings-disable-javascript.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg-settings-disable-javascript.js @@ -11,7 +11,6 @@ async function toggleJavaScript(dbg, shouldBeCheckedAtStart) { menuButton.click(); await waitForTime(200); - // Wait for the menu to show before trying to click the item const { parent } = dbg.panel.panelWin; const { document } = parent; @@ -34,10 +33,8 @@ add_task(async function() { info("Clicking the disable javascript button in the settings menu"); await toggleJavaScript(dbg, false); - is(Services.prefs.getBoolPref("javascript.enabled"), false, "JavaScript is disabled"); - info("Reloading page to ensure there are no sources"); - await reload(dbg); + info("Waiting for reload triggered by disabling javascript"); await waitForSourceCount(dbg, 0); info("Clicking the disable javascript button in the settings menu to reenable JavaScript"); diff --git a/devtools/client/debugger/test/mochitest/helpers.js b/devtools/client/debugger/test/mochitest/helpers.js index dad695e2ae76..a24ba8a21e24 100644 --- a/devtools/client/debugger/test/mochitest/helpers.js +++ b/devtools/client/debugger/test/mochitest/helpers.js @@ -585,7 +585,6 @@ async function clearDebuggerPreferences(prefs = []) { Services.prefs.clearUserPref("devtools.debugger.scopes-visible"); Services.prefs.clearUserPref("devtools.debugger.skip-pausing"); Services.prefs.clearUserPref("devtools.debugger.map-scopes-enabled"); - Services.prefs.clearUserPref("javascript.enabled"); await pushPref("devtools.debugger.log-actions", true); for (const pref of prefs) {