/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Test that clicking on "reveal" always scrolls the view to show the real container, even // if the node is already selected. const TEST_URL = `data:text/html;charset=utf-8,
slot1 content
`; add_task(async function () { const { inspector } = await openInspectorForURL(TEST_URL); const { markup } = inspector; info("Find and expand the test-component shadow DOM host."); const hostFront = await getNodeFront("test-component", inspector); const hostContainer = markup.getContainer(hostFront); await expandContainer(inspector, hostContainer); info("Expand the shadow root"); const shadowRootContainer = hostContainer.getChildContainers()[0]; await expandContainer(inspector, shadowRootContainer); info("Expand the slot"); const slotContainer = shadowRootContainer.getChildContainers()[0]; await expandContainer(inspector, slotContainer); const slotChildContainers = slotContainer.getChildContainers(); is(slotChildContainers.length, 1, "Expecting 1 slotted child"); const slottedContainer = slotChildContainers[0]; const realContainer = inspector.markup.getContainer(slottedContainer.node); const slottedElement = slottedContainer.elt; const realElement = realContainer.elt; info("Click on the reveal link"); await clickOnRevealLink(inspector, slottedContainer); // "new-node-front" will also trigger the scroll, so make sure we are testing after // the scroll was performed. await waitUntil(() => isScrolledOut(slottedElement)); is(isScrolledOut(slottedElement), true, "slotted element is scrolled out"); await waitUntil(() => !isScrolledOut(realElement)); is(isScrolledOut(realElement), false, "real element is not scrolled out"); info("Scroll back to see the slotted element"); slottedElement.scrollIntoView(); is( isScrolledOut(slottedElement), false, "slotted element is not scrolled out" ); is(isScrolledOut(realElement), true, "real element is scrolled out"); info("Click on the reveal link again"); await clickOnRevealLink(inspector, slottedContainer); await waitUntil(() => isScrolledOut(slottedElement)); is(isScrolledOut(slottedElement), true, "slotted element is scrolled out"); await waitUntil(() => !isScrolledOut(realElement)); is(isScrolledOut(realElement), false, "real element is not scrolled out"); }); function isScrolledOut(element) { const win = element.ownerGlobal; const rect = element.getBoundingClientRect(); return rect.top < 0 || rect.top + rect.height > win.innerHeight; }