Bug 1361270 - Search also within net logs; r=nchevobbe
MozReview-Commit-ID: FTs2tJicTXC
--- a/devtools/client/webconsole/new-console-output/selectors/messages.js
+++ b/devtools/client/webconsole/new-console-output/selectors/messages.js
@@ -108,46 +108,24 @@ function matchCssFilters(message, filter
function matchSearchFilters(message, filters) {
let text = filters.text || "";
return (
text === ""
// Look for a match in parameters.
|| isTextInParameters(text, message.parameters)
// Look for a match in location.
|| isTextInFrame(text, message.frame)
- // Look for a match in stacktrace.
- || (
- Array.isArray(message.stacktrace) &&
- message.stacktrace.some(frame => isTextInFrame(text,
- // isTextInFrame expect the properties of the frame object to be in the same
- // order they are rendered in the Frame component.
- {
- functionName: frame.functionName ||
- l10n.getStr("stacktrace.anonymousFunction"),
- filename: frame.filename,
- lineNumber: frame.lineNumber,
- columnNumber: frame.columnNumber
- }))
- )
+ // Look for a match in net events.
+ || isTextInNetEvent(text, message.request)
+ // Look for a match in stack-trace.
+ || isTextInStackTrace(text, message.stacktrace)
// Look for a match in messageText.
- || (message.messageText &&
- message.messageText.toLocaleLowerCase().includes(text.toLocaleLowerCase()))
- // Look for a match in parameters. Currently only checks value grips.
- || (message.parameters &&
- message.parameters.join("").toLocaleLowerCase()
- .includes(text.toLocaleLowerCase()))
+ || isTextInMessageText(text, message.messageText)
// 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 &&
- note.messageBody.toLocaleLowerCase()
- .includes(text.toLocaleLowerCase()))
- ))
+ || isTextInNotes(text, message.notes)
);
}
/**
* Returns true if given text is included in provided stack frame.
*/
function isTextInFrame(text, frame) {
if (!frame) {
@@ -169,16 +147,78 @@ function isTextInParameters(text, parame
text = text.toLocaleLowerCase();
return getAllProps(parameters).find(prop =>
(prop + "").toLocaleLowerCase().includes(text)
);
}
/**
+ * Returns true if given text is included in provided net event grip.
+ */
+function isTextInNetEvent(text, request) {
+ if (!request) {
+ return false;
+ }
+
+ text = text.toLocaleLowerCase();
+
+ let method = request.method.toLocaleLowerCase();
+ let url = request.url.toLocaleLowerCase();
+ return method.includes(text) || url.includes(text);
+}
+
+/**
+ * Returns true if given text is included in provided stack trace.
+ */
+function isTextInStackTrace(text, stacktrace) {
+ if (!Array.isArray(stacktrace)) {
+ return false;
+ }
+
+ // isTextInFrame expect the properties of the frame object to be in the same
+ // order they are rendered in the Frame component.
+ return stacktrace.some(frame => isTextInFrame(text, {
+ functionName: frame.functionName || l10n.getStr("stacktrace.anonymousFunction"),
+ filename: frame.filename,
+ lineNumber: frame.lineNumber,
+ columnNumber: frame.columnNumber
+ }));
+}
+
+/**
+ * Returns true if given text is included in `messageText` field.
+ */
+function isTextInMessageText(text, messageText) {
+ if (!messageText) {
+ return false;
+ }
+
+ return messageText.toLocaleLowerCase().includes(text.toLocaleLowerCase());
+}
+
+/**
+ * Returns true if given text is included in notes.
+ */
+function isTextInNotes(text, notes) {
+ if (!Array.isArray(notes)) {
+ return false;
+ }
+
+ return notes.some(note =>
+ // Look for a match in location.
+ isTextInFrame(text, note.frame) ||
+ // Look for a match in messageBody.
+ (note.messageBody &&
+ note.messageBody.toLocaleLowerCase()
+ .includes(text.toLocaleLowerCase()))
+ );
+}
+
+/**
* Get a flat array of all the grips and their properties.
*
* @param {Array} Grips
* @return {Array} Flat array of the grips and their properties.
*/
function getAllProps(grips) {
let result = grips.reduce((res, grip) => {
let previewItems = getGripPreviewItems(grip);