Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
/**
* Check that picking a link when using RDM does not trigger a navigation.
* See Bug 1609199.
*/
const TEST_URI = `${URL_ROOT}doc_picker_link.html`;
addRDMTask(TEST_URI, async function ({ ui }) {
info("Open the rule-view and select the test node before opening RDM");
const { inspector, toolbox } = await openRuleView();
await selectNode("body", inspector);
info("Open RDM");
// XXX: Using toggleTouchSimulation waits for browser loaded, which is not
// fired here?
info("Toggle Touch simulation");
const { document } = ui.toolWindow;
const touchButton = document.getElementById("touch-simulation-button");
const changed = once(ui, "touch-simulation-changed");
touchButton.click();
await changed;
info("Waiting for element picker to become active.");
await startPicker(toolbox, ui);
info("Move mouse over the pick-target");
await hoverElement(inspector, ui, ".picker-link", 15, 15);
// Add a listener on the "navigate" event.
let hasNavigated = false;
const { onDomCompleteResource } =
await waitForNextTopLevelDomCompleteResource(toolbox.commands);
onDomCompleteResource.then(() => {
hasNavigated = true;
});
info("Click and pick the link");
await pickElement(inspector, ui, ".picker-link");
// Wait until page to start navigation.
await wait(2000);
ok(
!hasNavigated,
"The page should not have navigated when picking the <a> element"
);
});
/**
* startPicker, hoverElement and pickElement are slightly modified copies of
* inspector's head.js helpers, but using spawnViewportTask to interact with the
* content page (as well as some other slight modifications).
*/
async function startPicker(toolbox, ui) {
info("Start the element picker");
toolbox.win.focus();
await toolbox.nodePicker.start();
// By default make sure the content window is focused since the picker may not focus
// the content window by default.
await spawnViewportTask(ui, {}, async () => {
content.focus();
});
}
async function hoverElement(inspector, ui, selector, x, y) {
info("Waiting for element " + selector + " to be hovered");
const onHovered = inspector.toolbox.nodePicker.once("picker-node-hovered");
await spawnViewportTask(ui, { selector, x, y }, async options => {
const target = content.document.querySelector(options.selector);
await EventUtils.synthesizeMouse(
target,
options.x,
options.y,
{ type: "mousemove", isSynthesized: false },
content
);
});
return onHovered;
}
async function pickElement(inspector, ui, selector) {
info("Waiting for element " + selector + " to be picked");
const onNewNodeFront = inspector.selection.once("new-node-front");
await spawnViewportTask(ui, { selector }, async options => {
const target = content.document.querySelector(options.selector);
EventUtils.synthesizeClick(target);
});
info("Returning on new-node-front");
return onNewNodeFront;
}