diff --git a/dom/ipc/jsactor/JSWindowActorProtocol.cpp b/dom/ipc/jsactor/JSWindowActorProtocol.cpp index b89c70236d16..530a475ab129 100644 --- a/dom/ipc/jsactor/JSWindowActorProtocol.cpp +++ b/dom/ipc/jsactor/JSWindowActorProtocol.cpp @@ -205,7 +205,17 @@ NS_IMETHODIMP JSWindowActorProtocol::Observe(nsISupports* aSubject, if (!inner) { nsCOMPtr outer = do_QueryInterface(aSubject); - if (NS_WARN_IF(!outer) || NS_WARN_IF(!outer->GetCurrentInnerWindow())) { + if (NS_WARN_IF(!outer)) { + nsContentUtils::LogSimpleConsoleError( + NS_ConvertUTF8toUTF16(nsPrintfCString( + "JSWindowActor %s: expected window subject for topic '%s'.", + mName.get(), aTopic)), + "JSActor", + /* aFromPrivateWindow */ false, + /* aFromChromeContext */ true); + return NS_ERROR_FAILURE; + } + if (NS_WARN_IF(!outer->GetCurrentInnerWindow())) { return NS_ERROR_FAILURE; } wgc = outer->GetCurrentInnerWindow()->GetWindowGlobalChild(); diff --git a/dom/ipc/tests/JSWindowActor/browser_observer_notification.js b/dom/ipc/tests/JSWindowActor/browser_observer_notification.js index 6a7691409f0f..ae8c40f78179 100644 --- a/dom/ipc/tests/JSWindowActor/browser_observer_notification.js +++ b/dom/ipc/tests/JSWindowActor/browser_observer_notification.js @@ -49,6 +49,25 @@ declTest("test observers with null data", { declTest("observers don't notify with wrong window", { async test(browser) { + const MSG_RE = /JSWindowActor TestWindow: expected window subject for topic 'test-js-window-actor-child-observer'/; + let expectMessage = new Promise(resolve => { + Services.console.registerListener(function consoleListener(msg) { + // Run everything async in order to avoid logging messages from the + // console listener. + Cu.dispatch(() => { + if (!MSG_RE.test(msg.message)) { + info("ignoring non-matching console message: " + msg.message); + return; + } + info("received console message: " + msg.message); + is(msg.logLevel, Ci.nsIConsoleMessage.error, "should be an error"); + + Services.console.unregisterListener(consoleListener); + resolve(); + }); + }); + }); + await SpecialPowers.spawn(browser, [], async function() { const TOPIC = "test-js-window-actor-child-observer"; Services.obs.notifyObservers(null, TOPIC); @@ -61,6 +80,8 @@ declTest("observers don't notify with wrong window", { "Should not receive wrong window's observer notification!" ); }); + + await expectMessage; }, });