78 lines
2.9 KiB
HTML
78 lines
2.9 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<script src="../resources/accessibility-helper.js"></script>
|
|
<script src="../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<body>
|
|
|
|
<canvas id="canvas" tabindex="-1"></canvas>
|
|
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
description("This test makes sure that AccessibilityNodeObjects are properly detached when the node they point to is deleted.");
|
|
|
|
if (window.testRunner && window.accessibilityController) {
|
|
window.jsTestIsAsync = true;
|
|
testRunner.dumpAsText();
|
|
|
|
// Create an ordinary button on the page, focus it and get its accessibility role.
|
|
var button = document.createElement('button');
|
|
document.body.appendChild(button);
|
|
button.focus();
|
|
|
|
axButton = accessibilityController.focusedElement;
|
|
buttonRole = axButton.role;
|
|
debug("Button role: " + buttonRole);
|
|
|
|
// Now remove the button from the tree and get the role of the detached accessibility object.
|
|
document.body.removeChild(button);
|
|
detachedRole = axButton.role;
|
|
debug("Button role after being detached: " + detachedRole);
|
|
shouldBeTrue("buttonRole != detachedRole");
|
|
|
|
// This time create a button that's a child of a canvas element. It will be focusable but not rendered.
|
|
// In particular, this will create an AccessibilityNodeObject rather than an AccessibilityRenderObject.
|
|
var canvas = document.getElementById('canvas');
|
|
button = document.createElement('button');
|
|
canvas.appendChild(button);
|
|
|
|
// Note: Focusing the button and using that to get its accessibility object creates an extra
|
|
// reference to the button and it won't get deleted when we want it to. So instead we focus the
|
|
// canvas and get its first child.
|
|
canvas.focus();
|
|
|
|
var axCanvas = null;
|
|
setTimeout(async function() {
|
|
await waitFor(() => {
|
|
axCanvas = accessibilityController.focusedElement;
|
|
return axCanvas.childrenCount > 0;
|
|
});
|
|
axButton = axCanvas.childAtIndex(0);
|
|
canvasButtonRole = axButton.role;
|
|
debug("Canvas button role: " + canvasButtonRole);
|
|
shouldBe("canvasButtonRole", "buttonRole");
|
|
|
|
// Now delete the last reference to the button.
|
|
canvas.removeChild(button);
|
|
// Explicitly run garbage collection now. Since there are no more references to the button,
|
|
// it will be destroyed.
|
|
gc();
|
|
|
|
// Ensure that the accessibility object is detached by checking its role.
|
|
detachedCanvasButtonRole = axButton.role;
|
|
debug("Canvas button role after being detached: " + detachedCanvasButtonRole);
|
|
shouldBe("detachedCanvasButtonRole", "detachedRole");
|
|
|
|
finishJSTest();
|
|
}, 0);
|
|
}
|
|
|
|
</script>
|
|
|
|
<script src="../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|