84 lines
2.8 KiB
JavaScript
84 lines
2.8 KiB
JavaScript
/* 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";
|
|
|
|
addAccessibleTask(
|
|
`
|
|
a
|
|
<div id="noChars" style="width: 5px; height: 5px;"><p></p></div>
|
|
<p id="twoText"><span>a</span><span>b</span></p>
|
|
<div id="iframeAtEnd" style="width: 20px; height: 20px;">
|
|
a
|
|
<iframe width="1" height="1"></iframe>
|
|
</div>
|
|
<button id="pointBeforeText">
|
|
<div style="display: flex;">
|
|
<div style="width: 100px; background-color: red;" role="none"></div>
|
|
test
|
|
<div style="width: 100px; background-color: blue;" role="none"></div>
|
|
</div>
|
|
</button>
|
|
`,
|
|
async function (browser, docAcc) {
|
|
const dpr = await getContentDPR(browser);
|
|
// Test getOffsetAtPoint on a container containing no characters. The inner
|
|
// container does not include the requested point, but the outer one does.
|
|
const noChars = findAccessibleChildByID(docAcc, "noChars", [
|
|
Ci.nsIAccessibleText,
|
|
]);
|
|
let [x, y] = Layout.getBounds(noChars, dpr);
|
|
await testOffsetAtPoint(noChars, x, y, COORDTYPE_SCREEN_RELATIVE, -1);
|
|
|
|
// Test that the correct offset is returned for a point in a second text
|
|
// leaf.
|
|
const twoText = findAccessibleChildByID(docAcc, "twoText", [
|
|
Ci.nsIAccessibleText,
|
|
]);
|
|
const text2 = twoText.getChildAt(1);
|
|
[x, y] = Layout.getBounds(text2, dpr);
|
|
await testOffsetAtPoint(twoText, x, y, COORDTYPE_SCREEN_RELATIVE, 1);
|
|
|
|
// Test offsetAtPoint when there is an iframe at the end of the container.
|
|
const iframeAtEnd = findAccessibleChildByID(docAcc, "iframeAtEnd", [
|
|
Ci.nsIAccessibleText,
|
|
]);
|
|
let width;
|
|
let height;
|
|
[x, y, width, height] = Layout.getBounds(iframeAtEnd, dpr);
|
|
x += width - 1;
|
|
y += height - 1;
|
|
await testOffsetAtPoint(iframeAtEnd, x, y, COORDTYPE_SCREEN_RELATIVE, -1);
|
|
|
|
// Test that 0 is returned if the point is within the container but before
|
|
// the rectangle at offset 0. This is buggy behavior that some users have
|
|
// unfortunately come to rely on (bug 1816601).
|
|
const pointBeforeText = findAccessibleChildByID(docAcc, "pointBeforeText", [
|
|
Ci.nsIAccessibleText,
|
|
]);
|
|
[x, y, width, height] = Layout.getBounds(pointBeforeText, dpr);
|
|
await testOffsetAtPoint(
|
|
pointBeforeText,
|
|
x + 1,
|
|
y + 1,
|
|
COORDTYPE_SCREEN_RELATIVE,
|
|
0
|
|
);
|
|
// But this buggy behavior only applies for a point before offset 0, not
|
|
// a point after the last offset. So it's asymmetrically buggy. :(
|
|
await testOffsetAtPoint(
|
|
pointBeforeText,
|
|
x + width - 1,
|
|
y + height - 1,
|
|
COORDTYPE_SCREEN_RELATIVE,
|
|
-1
|
|
);
|
|
},
|
|
{
|
|
topLevel: true,
|
|
iframe: true,
|
|
remoteIframe: true,
|
|
chrome: true,
|
|
}
|
|
);
|