Blob Blame History Raw
diff --git a/devtools/server/actors/resources/console-messages.js b/devtools/server/actors/resources/console-messages.js
--- a/devtools/server/actors/resources/console-messages.js
+++ b/devtools/server/actors/resources/console-messages.js
@@ -64,16 +64,23 @@
     // that process (window and window-less).
     // To do that we pass a null window and ConsoleAPIListener will catch everything.
     // And also ignore WebExtension as we will filter out only by addonId, which is
     // passed via consoleAPIListenerOptions. WebExtension may have multiple windows/documents
     // but all of them will be flagged with the same addon ID.
-    const window =
+    const messagesShouldMatchWindow =
       targetActor.targetType === Targets.TYPES.FRAME &&
       targetActor.typeName != "parentProcessTarget" &&
-      targetActor.typeName != "webExtensionTarget"
-        ? targetActor.window
-        : null;
+      targetActor.typeName != "webExtensionTarget";
+    const window = messagesShouldMatchWindow ? targetActor.window : null;
+
+    // If we should match messages for a given window but for some reason, targetActor.window
+    // did not return a window, bail out. Otherwise we wouldn't have anything to match against
+    // and would consume all the messages, which could lead to issue (e.g. infinite loop,
+    // see Bug 1828026).
+    if (messagesShouldMatchWindow && !window) {
+      return;
+    }
 
     const listener = new ConsoleAPIListener(window, onConsoleAPICall, {
       excludeMessagesBoundToWindow: isTargetActorContentProcess,
       matchExactWindow: targetActor.ignoreSubFrames,
       ...(targetActor.consoleAPIListenerOptions || {}),