browser_markup_view-source.js (3482B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 Services.scriptloader.loadSubScript( 7 "chrome://mochitests/content/browser/devtools/client/debugger/test/mochitest/shared-head.js", 8 this 9 ); 10 11 const DOCUMENT_SRC = ` 12 <body> 13 <button id="btn-eval">Eval</button> 14 <button id="btn-dom0" onclick="console.info('bloup')">DOM0</button> 15 <script> 16 var script = \` 17 function foo() { 18 console.log('handler'); 19 } 20 \`; 21 eval(script); 22 23 var button = document.getElementById("btn-eval"); 24 button.addEventListener("click", foo, false); 25 </script> 26 </body>`; 27 28 const TEST_URI = "data:text/html;charset=utf-8," + DOCUMENT_SRC; 29 30 add_task(async function () { 31 const { inspector, toolbox } = await openInspectorForURL(TEST_URI); 32 33 info( 34 "Test that event handler links go to the right debugger source when it came from an eval()" 35 ); 36 const evaledSource = await clickOnJumpToDebuggerIconForNode( 37 inspector, 38 toolbox, 39 "#btn-eval" 40 ); 41 is(evaledSource.url, null, "no expected url for eval source"); 42 43 info("Add a breakpoint in opened source"); 44 const debuggerContext = createDebuggerContext(toolbox); 45 await addBreakpoint( 46 debuggerContext, 47 debuggerContext.selectors.getSelectedSource(), 48 1 49 ); 50 await safeSynthesizeMouseEventAtCenterInContentPage("#btn-eval"); 51 52 await waitForPaused(debuggerContext); 53 ok(true, "The debugger paused on the evaled source breakpoint"); 54 await resume(debuggerContext); 55 56 info( 57 "Test that event handler links go to the right debugger source when it's a dom0 event listener." 58 ); 59 await toolbox.selectTool("inspector"); 60 const dom0Source = await clickOnJumpToDebuggerIconForNode( 61 inspector, 62 toolbox, 63 "#btn-dom0" 64 ); 65 is(dom0Source.url, null, "no expected url for dom0 event listener source"); 66 await addBreakpoint( 67 debuggerContext, 68 debuggerContext.selectors.getSelectedSource(), 69 1 70 ); 71 await safeSynthesizeMouseEventAtCenterInContentPage("#btn-dom0"); 72 await waitForPaused(debuggerContext); 73 ok(true, "The debugger paused on the dom0 source breakpoint"); 74 await resume(debuggerContext); 75 }); 76 77 async function clickOnJumpToDebuggerIconForNode( 78 inspector, 79 toolbox, 80 nodeSelector 81 ) { 82 const nodeFront = await getNodeFront(nodeSelector, inspector); 83 const container = getContainerForNodeFront(nodeFront, inspector); 84 85 const evHolder = container.elt.querySelector( 86 ".inspector-badge.interactive[data-event]" 87 ); 88 evHolder.scrollIntoView(); 89 info(`Display event tooltip for node "${nodeSelector}"`); 90 evHolder.click(); 91 92 const tooltip = inspector.markup.eventDetailsTooltip; 93 await tooltip.once("shown"); 94 95 info(`Tooltip displayed, click on the "jump to debugger" icon`); 96 const debuggerIcon = tooltip.panel.querySelector( 97 ".event-tooltip-debugger-icon" 98 ); 99 100 if (!debuggerIcon) { 101 ok( 102 false, 103 `There is no jump to debugger icon in event tooltip for node "${nodeSelector}"` 104 ); 105 return null; 106 } 107 108 const onDebuggerSelected = toolbox.once(`jsdebugger-selected`); 109 EventUtils.synthesizeMouse(debuggerIcon, 2, 2, {}, debuggerIcon.ownerGlobal); 110 111 const dbg = await onDebuggerSelected; 112 ok(true, "The debugger was opened"); 113 114 let source; 115 info("Wait for source to be opened"); 116 await BrowserTestUtils.waitForCondition( 117 () => { 118 source = dbg._selectors.getSelectedSource(dbg._getState()); 119 return !!source; 120 }, 121 "loaded source", 122 100, 123 20 124 ); 125 return source; 126 }