From 4dc8efd76cb2ff649cfcec5dfa88686ea79b4ee2 Mon Sep 17 00:00:00 2001 From: Gaming4JC Date: Sun, 9 Jun 2019 14:52:19 -0400 Subject: 1283712 - Part 11.1: Show notes in devtools console. --- .../components/message-types/evaluation-result.js | 2 ++ .../components/message-types/page-error.js | 2 ++ .../new-console-output/components/message.js | 31 +++++++++++++++- .../new-console-output/selectors/messages.js | 9 +++++ .../client/webconsole/new-console-output/types.js | 1 + .../new-console-output/utils/messages.js | 5 ++- devtools/server/actors/webconsole.js | 41 ++++++++++++++++++++-- 7 files changed, 87 insertions(+), 4 deletions(-) (limited to 'devtools') diff --git a/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js b/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js index 992dc62cf..824bdb3fb 100644 --- a/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js +++ b/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js @@ -34,6 +34,7 @@ function EvaluationResult(props) { id: messageId, exceptionDocURL, frame, + notes, } = message; let messageBody; @@ -57,6 +58,7 @@ function EvaluationResult(props) { serviceContainer, exceptionDocURL, frame, + notes, }; return Message(childProps); } diff --git a/devtools/client/webconsole/new-console-output/components/message-types/page-error.js b/devtools/client/webconsole/new-console-output/components/message-types/page-error.js index 77ea75ff7..c68b850bd 100644 --- a/devtools/client/webconsole/new-console-output/components/message-types/page-error.js +++ b/devtools/client/webconsole/new-console-output/components/message-types/page-error.js @@ -44,6 +44,7 @@ function PageError(props) { stacktrace, frame, exceptionDocURL, + notes, } = message; const childProps = { @@ -62,6 +63,7 @@ function PageError(props) { stacktrace, serviceContainer, exceptionDocURL, + notes, }; return Message(childProps); } diff --git a/devtools/client/webconsole/new-console-output/components/message.js b/devtools/client/webconsole/new-console-output/components/message.js index f36bff7e4..b3d206007 100644 --- a/devtools/client/webconsole/new-console-output/components/message.js +++ b/devtools/client/webconsole/new-console-output/components/message.js @@ -47,6 +47,10 @@ const Message = createClass({ onViewSourceInDebugger: PropTypes.func.isRequired, sourceMapService: PropTypes.any, }), + notes: PropTypes.arrayOf(PropTypes.shape({ + messageBody: PropTypes.string.isRequired, + frame: PropTypes.any, + })), }, getDefaultProps: function () { @@ -90,6 +94,7 @@ const Message = createClass({ serviceContainer, dispatch, exceptionDocURL, + notes, } = this.props; topLevelClasses.push("message", source, type, level); @@ -127,6 +132,29 @@ const Message = createClass({ }); } + let notesNodes; + if (notes) { + notes.map(note => dom.span( + { className: "message-flex-body error-note" }, + dom.span({ className: "message-body devtools-monospace" }, + "note: " + note.messageBody + ), + dom.span({ className: "message-location devtools-monospace" }, + note.frame ? FrameView({ + frame: note.frame, + onClick: serviceContainer + ? serviceContainer.onViewSourceInDebugger + : undefined, + showEmptyPathAsHost: true, + sourceMapService: serviceContainer + ? serviceContainer.sourceMapService + : undefined + }) : null + ))); + } else { + notesNodes = []; + } + const repeat = this.props.repeat ? MessageRepeat({repeat: this.props.repeat}) : null; // Configure the location. @@ -167,7 +195,8 @@ const Message = createClass({ repeat, location ), - attachment + attachment, + ...notesNodes ) ); } diff --git a/devtools/client/webconsole/new-console-output/selectors/messages.js b/devtools/client/webconsole/new-console-output/selectors/messages.js index c4b1aee28..e405be2f8 100644 --- a/devtools/client/webconsole/new-console-output/selectors/messages.js +++ b/devtools/client/webconsole/new-console-output/selectors/messages.js @@ -126,6 +126,15 @@ function matchSearchFilters(message, filters) { || (message.parameters !== null && message.parameters.join("").toLocaleLowerCase() .includes(text.toLocaleLowerCase())) + // Look for a match in notes. + || (Array.isArray(message.notes) && message.notes.some(note => + // Look for a match in location. + isTextInFrame(text, note.frame) + // Look for a match in messageBody. + || (note.messageBody !== null + && note.messageBody.toLocaleLowerCase() + .includes(text.toLocaleLowerCase())) + )) ); } diff --git a/devtools/client/webconsole/new-console-output/types.js b/devtools/client/webconsole/new-console-output/types.js index 897ae5d3a..cb27aedab 100644 --- a/devtools/client/webconsole/new-console-output/types.js +++ b/devtools/client/webconsole/new-console-output/types.js @@ -38,6 +38,7 @@ exports.ConsoleMessage = Immutable.Record({ groupId: null, exceptionDocURL: null, userProvidedStyles: null, + notes: null, }); exports.NetworkEventMessage = Immutable.Record({ diff --git a/devtools/client/webconsole/new-console-output/utils/messages.js b/devtools/client/webconsole/new-console-output/utils/messages.js index f91209e9d..119bc7fba 100644 --- a/devtools/client/webconsole/new-console-output/utils/messages.js +++ b/devtools/client/webconsole/new-console-output/utils/messages.js @@ -165,6 +165,7 @@ function transformPacket(packet) { stacktrace: pageError.stacktrace ? pageError.stacktrace : null, frame, exceptionDocURL: pageError.exceptionDocURL, + notes: pageError.notes, }); } @@ -185,7 +186,8 @@ function transformPacket(packet) { exceptionMessage: messageText, exceptionDocURL, frame, - result: parameters + result: parameters, + notes, } = packet; const level = messageText ? MESSAGE_LEVEL.ERROR : MESSAGE_LEVEL.LOG; @@ -197,6 +199,7 @@ function transformPacket(packet) { parameters, exceptionDocURL, frame, + notes, }); } } diff --git a/devtools/server/actors/webconsole.js b/devtools/server/actors/webconsole.js index a1eba84ed..66715bd34 100644 --- a/devtools/server/actors/webconsole.js +++ b/devtools/server/actors/webconsole.js @@ -888,7 +888,8 @@ WebConsoleActor.prototype = let evalResult = evalInfo.result; let helperResult = evalInfo.helperResult; - let result, errorDocURL, errorMessage, errorGrip = null, frame = null; + let result, errorDocURL, errorMessage, errorNotes = null, errorGrip = null, + frame = null; if (evalResult) { if ("return" in evalResult) { result = evalResult.return; @@ -943,6 +944,23 @@ WebConsoleActor.prototype = }; } } catch (ex) {} + + try { + let notes = error.errorNotes; + if (notes && notes.length) { + errorNotes = []; + for (let note of notes) { + errorNotes.push({ + messageBody: this._createStringGrip(note.message), + frame: { + source: note.fileName, + line: note.lineNumber, + column: note.columnNumber, + } + }); + } + } + } catch (ex) {} } } @@ -967,6 +985,7 @@ WebConsoleActor.prototype = exceptionDocURL: errorDocURL, frame, helperResult: helperResult, + notes: errorNotes, }; }, @@ -1500,6 +1519,23 @@ WebConsoleActor.prototype = lineText = lineText.substr(0, DebuggerServer.LONG_STRING_INITIAL_LENGTH); } + let notesArray = null; + let notes = aPageError.notes; + if (notes && notes.length) { + notesArray = []; + for (let i = 0, len = notes.length; i < len; i++) { + let note = notes.queryElementAt(i, Ci.nsIScriptErrorNote); + notesArray.push({ + messageBody: this._createStringGrip(note.errorMessage), + frame: { + source: note.sourceName, + line: note.lineNumber, + column: note.columnNumber, + } + }); + } + } + return { errorMessage: this._createStringGrip(aPageError.errorMessage), errorMessageName: aPageError.errorMessageName, @@ -1516,7 +1552,8 @@ WebConsoleActor.prototype = strict: !!(aPageError.flags & aPageError.strictFlag), info: !!(aPageError.flags & aPageError.infoFlag), private: aPageError.isFromPrivateWindow, - stacktrace: stack + stacktrace: stack, + notes: notesArray, }; }, -- cgit v1.2.3