browser_picker_link.js (3074B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 /** 7 * Check that picking a link when using RDM does not trigger a navigation. 8 * See Bug 1609199. 9 */ 10 const TEST_URI = `${URL_ROOT}doc_picker_link.html`; 11 12 addRDMTask(TEST_URI, async function ({ ui }) { 13 info("Open the rule-view and select the test node before opening RDM"); 14 const { inspector, toolbox } = await openRuleView(); 15 await selectNode("body", inspector); 16 17 info("Open RDM"); 18 19 // XXX: Using toggleTouchSimulation waits for browser loaded, which is not 20 // fired here? 21 info("Toggle Touch simulation"); 22 const { document } = ui.toolWindow; 23 const touchButton = document.getElementById("touch-simulation-button"); 24 const changed = once(ui, "touch-simulation-changed"); 25 touchButton.click(); 26 await changed; 27 28 info("Waiting for element picker to become active."); 29 await startPicker(toolbox, ui); 30 31 info("Move mouse over the pick-target"); 32 await hoverElement(inspector, ui, ".picker-link", 15, 15); 33 34 // Add a listener on the "navigate" event. 35 let hasNavigated = false; 36 const { onDomCompleteResource } = 37 await waitForNextTopLevelDomCompleteResource(toolbox.commands); 38 39 onDomCompleteResource.then(() => { 40 hasNavigated = true; 41 }); 42 43 info("Click and pick the link"); 44 await pickElement(inspector, ui, ".picker-link"); 45 46 // Wait until page to start navigation. 47 await wait(2000); 48 ok( 49 !hasNavigated, 50 "The page should not have navigated when picking the <a> element" 51 ); 52 }); 53 54 /** 55 * startPicker, hoverElement and pickElement are slightly modified copies of 56 * inspector's head.js helpers, but using spawnViewportTask to interact with the 57 * content page (as well as some other slight modifications). 58 */ 59 60 async function startPicker(toolbox, ui) { 61 info("Start the element picker"); 62 toolbox.win.focus(); 63 await toolbox.nodePicker.start(); 64 // By default make sure the content window is focused since the picker may not focus 65 // the content window by default. 66 await spawnViewportTask(ui, {}, async () => { 67 content.focus(); 68 }); 69 } 70 71 async function hoverElement(inspector, ui, selector, x, y) { 72 info("Waiting for element " + selector + " to be hovered"); 73 const onHovered = inspector.toolbox.nodePicker.once("picker-node-hovered"); 74 await spawnViewportTask(ui, { selector, x, y }, async options => { 75 const target = content.document.querySelector(options.selector); 76 await EventUtils.synthesizeMouse( 77 target, 78 options.x, 79 options.y, 80 { type: "mousemove", isSynthesized: false }, 81 content 82 ); 83 }); 84 return onHovered; 85 } 86 87 async function pickElement(inspector, ui, selector) { 88 info("Waiting for element " + selector + " to be picked"); 89 const onNewNodeFront = inspector.selection.once("new-node-front"); 90 await spawnViewportTask(ui, { selector }, async options => { 91 const target = content.document.querySelector(options.selector); 92 EventUtils.synthesizeClick(target); 93 }); 94 info("Returning on new-node-front"); 95 return onNewNodeFront; 96 }