/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests that source URLs in the Web Console can be clicked to display the // standard View Source window. const TEST_URI = "http://example.com/browser/browser/devtools/webconsole/test/test-error.html"; let containsValue; let Sources; let containsValueInvoked = false; function test() { addTab(TEST_URI); browser.addEventListener("load", function onLoad() { browser.removeEventListener("load", onLoad, true); openConsole(null, testViewSource); }, true); } function testViewSource(hud) { info("console opened"); let button = content.document.querySelector("button"); ok(button, "we have the button on the page"); expectUncaughtException(); EventUtils.sendMouseEvent({ type: "click" }, button, content); openDebugger().then(({panelWin: { DebuggerView }}) => { info("debugger opened"); Sources = DebuggerView.Sources; openConsole(null, (hud) => { info("console opened again"); waitForMessages({ webconsole: hud, messages: [{ text: "fooBazBaz is not defined", category: CATEGORY_JS, severity: SEVERITY_ERROR, }], }).then(onMessage); }); }); function onMessage([result]) { let msg = [...result.matched][0]; ok(msg, "error message"); let locationNode = msg.querySelector(".message-location"); ok(locationNode, "location node"); Services.ww.registerNotification(observer); containsValue = Sources.containsValue; Sources.containsValue = () => { containsValueInvoked = true; return false; }; EventUtils.sendMouseEvent({ type: "click" }, locationNode); } } let observer = { observe: function(aSubject, aTopic, aData) { if (aTopic != "domwindowopened") { return; } ok(true, "the view source window was opened in response to clicking " + "the location node"); aSubject.close(); ok(containsValueInvoked, "custom containsValue() was invoked"); Sources.containsValue = containsValue; Sources = containsValue = null; finishTest(); } }; registerCleanupFunction(function() { Services.ww.unregisterNotification(observer); });