diff options
Diffstat (limited to 'devtools/client/debugger/src/utils/pause/why.js')
-rw-r--r-- | devtools/client/debugger/src/utils/pause/why.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/devtools/client/debugger/src/utils/pause/why.js b/devtools/client/debugger/src/utils/pause/why.js new file mode 100644 index 0000000000..116d4c6007 --- /dev/null +++ b/devtools/client/debugger/src/utils/pause/why.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/>. */ + +// @flow + +import type { Why } from "../../types"; + +// Map protocol pause "why" reason to a valid L10N key +// These are the known unhandled reasons: +// "breakpointConditionThrown", "clientEvaluated" +// "interrupted", "attached" +const reasons = { + debuggerStatement: "whyPaused.debuggerStatement", + breakpoint: "whyPaused.breakpoint", + exception: "whyPaused.exception", + resumeLimit: "whyPaused.resumeLimit", + breakpointConditionThrown: "whyPaused.breakpointConditionThrown", + eventBreakpoint: "whyPaused.eventBreakpoint", + getWatchpoint: "whyPaused.getWatchpoint", + setWatchpoint: "whyPaused.setWatchpoint", + mutationBreakpoint: "whyPaused.mutationBreakpoint", + interrupted: "whyPaused.interrupted", + + // V8 + DOM: "whyPaused.breakpoint", + EventListener: "whyPaused.pauseOnDOMEvents", + XHR: "whyPaused.XHR", + promiseRejection: "whyPaused.promiseRejection", + assert: "whyPaused.assert", + debugCommand: "whyPaused.debugCommand", + other: "whyPaused.other", +}; + +export function getPauseReason(why?: ?Why): string | null { + if (!why) { + return null; + } + + const reasonType = why.type; + if (!reasons[reasonType]) { + console.log("Please file an issue: reasonType=", reasonType); + } + + return reasons[reasonType]; +} + +export function isException(why: Why) { + return why?.type === "exception"; +} + +export function isInterrupted(why: ?Why) { + return why?.type === "interrupted"; +} + +export function inDebuggerEval(why: ?Why) { + if ( + why && + why.type === "exception" && + why.exception && + why.exception.preview && + why.exception.preview.fileName + ) { + return why.exception.preview.fileName === "debugger eval code"; + } + + return false; +} |