/* 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"; async function runTests(browser, accDoc) { await waitForImageMap(browser, accDoc); const dpr = await getContentDPR(browser); await testChildAtPoint( dpr, 3, 3, findAccessibleChildByID(accDoc, "list"), findAccessibleChildByID(accDoc, "listitem"), findAccessibleChildByID(accDoc, "inner").firstChild ); todo( false, "Bug 746974 - children must match on all platforms. On Windows, " + "ChildAtPoint with eDeepestChild is incorrectly ignoring MustPrune " + "for the graphic." ); const txt = findAccessibleChildByID(accDoc, "txt"); await testChildAtPoint(dpr, 1, 1, txt, txt, txt); info( "::MustPrune case, point is outside of textbox accessible but is in document." ); await testChildAtPoint(dpr, -1, -1, txt, null, null); info("::MustPrune case, point is outside of root accessible."); await testChildAtPoint(dpr, -10000, -10000, txt, null, null); info("Not specific case, point is inside of btn accessible."); const btn = findAccessibleChildByID(accDoc, "btn"); await testChildAtPoint(dpr, 1, 1, btn, btn, btn); info("Not specific case, point is outside of btn accessible."); await testChildAtPoint(dpr, -1, -1, btn, null, null); info( "Out of flow accessible testing, do not return out of flow accessible " + "because it's not a child of the accessible even though visually it is." ); await invokeContentTask(browser, [], () => { const { CommonUtils } = ChromeUtils.importESModule( "chrome://mochitests/content/browser/accessible/tests/browser/Common.sys.mjs" ); const doc = content.document; const rectArea = CommonUtils.getNode("area", doc).getBoundingClientRect(); const outOfFlow = CommonUtils.getNode("outofflow", doc); outOfFlow.style.left = rectArea.left + "px"; outOfFlow.style.top = rectArea.top + "px"; }); const area = findAccessibleChildByID(accDoc, "area"); await testChildAtPoint(dpr, 1, 1, area, area, area); info("Test image maps. Their children are not in the layout tree."); const imgmap = findAccessibleChildByID(accDoc, "imgmap"); const theLetterA = imgmap.firstChild; await hitTest(browser, imgmap, theLetterA, theLetterA); await hitTest( browser, findAccessibleChildByID(accDoc, "container"), imgmap, theLetterA ); info("hit testing for element contained by zero-width element"); const container2Input = findAccessibleChildByID(accDoc, "container2_input"); await hitTest( browser, findAccessibleChildByID(accDoc, "container2"), container2Input, container2Input ); info("hittesting table, row, cells -- rows are not in the layout tree"); const table = findAccessibleChildByID(accDoc, "table"); const row = findAccessibleChildByID(accDoc, "row"); const cell1 = findAccessibleChildByID(accDoc, "cell1"); await hitTest(browser, table, row, cell1); info("Testing that an inaccessible child doesn't break hit testing"); const containerWithInaccessibleChild = findAccessibleChildByID( accDoc, "containerWithInaccessibleChild" ); const containerWithInaccessibleChildP2 = findAccessibleChildByID( accDoc, "containerWithInaccessibleChild_p2" ); await hitTest( browser, containerWithInaccessibleChild, containerWithInaccessibleChildP2, containerWithInaccessibleChildP2.firstChild ); info("Testing wrapped text"); const wrappedTextP = findAccessibleChildByID(accDoc, "wrappedTextP"); const wrappedTextA = findAccessibleChildByID(accDoc, "wrappedTextA"); await hitTest(browser, wrappedTextP, wrappedTextA, wrappedTextA.firstChild); } addAccessibleTask( `
hello | world |
hi
bye
ab cd
`, runTests, { iframe: true, remoteIframe: true, // Ensure that all hittest elements are in view. iframeAttrs: { style: "width: 600px; height: 600px; padding: 10px;" }, } ); addAccessibleTask( `