Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
// Test that the highlighter is correctly positioned when switching context
// to an iframe that has an offset from the parent viewport (eg. 100px margin)
const TEST_URI =
"data:text/html;charset=utf-8," +
'<div id="outer"></div>' +
"<iframe style='margin:100px' src='data:text/html," +
'<div id="inner">Look I am here!</div>\'>';
add_task(async function () {
info("Enable command-button-frames preference setting");
Services.prefs.setBoolPref("devtools.command-button-frames.enabled", true);
const { inspector, toolbox } = await openInspectorForURL(TEST_URI);
await assertMarkupViewAsTree(
`
body
div id="outer"
iframe!ignore-children`,
"body",
inspector
);
info("Switch to the iframe context.");
await switchToFrameContext(1, toolbox, inspector);
info("Check the markup view is rendered correctly after switching frames");
await assertMarkupViewAsTree(
`
body
div id="inner"`,
"body",
inspector
);
info("Check highlighting is correct after switching iframe context");
await selectAndHighlightNode("#inner", inspector);
const nodeFront = await getNodeFront("#inner", inspector);
const iframeHighlighterTestFront = await getHighlighterTestFront(toolbox, {
target: nodeFront.targetFront,
});
const isHighlightCorrect =
await iframeHighlighterTestFront.assertHighlightedNode("#inner");
ok(isHighlightCorrect, "The selected node is properly highlighted.");
info("Cleanup command-button-frames preferences.");
Services.prefs.clearUserPref("devtools.command-button-frames.enabled");
});
/**
* Helper designed to switch context to another frame at the provided index.
* Returns a promise that will resolve when the navigation is complete.
* @return {Promise}
*/
async function switchToFrameContext(frameIndex, toolbox, inspector) {
// Open frame menu and wait till it's available on the screen.
const btn = toolbox.doc.getElementById("command-button-frames");
const panel = toolbox.doc.getElementById("command-button-frames-panel");
btn.click();
ok(panel, "popup panel has created.");
await waitUntil(() => panel.classList.contains("tooltip-visible"));
info("Select the iframe in the frame list.");
const menuList = toolbox.doc.getElementById("toolbox-frame-menu");
const firstButton = menuList.querySelectorAll(".command")[frameIndex];
const newRoot = inspector.once("new-root");
firstButton.click();
await newRoot;
await inspector.once("inspector-updated");
info("Navigation to the iframe is done.");
}