96 lines
3 KiB
JavaScript
96 lines
3 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"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;
|
|
}
|