| <!DOCTYPE HTML> | |
| <html> | |
| <body> | |
| <script src="../fast/js/resources/js-test-pre.js"></script> | |
| <div id="container" tabindex="-1"></div> | |
| <canvas id="canvas" tabindex="-1"></canvas> | |
| <div id="console"></div> | |
| <script> | |
| description("This test makes sure that AccessibilityNodeObjects are properly detached when the node they point to is reparented to a location that allows them to have a renderer."); | |
| if (window.testRunner && window.accessibilityController) { | |
| window.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(); | |
| window.axElement = accessibilityController.focusedElement; | |
| window.expectedButtonRole = axElement.role; | |
| // Now remove the node from the tree and get the role of the detached accessibility object. | |
| document.body.removeChild(button); | |
| window.expectedDetachedRole = axElement.role; | |
| shouldBeTrue("expectedButtonRole != expectedDetachedRole"); | |
| // 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'); | |
| (function() { | |
| var 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(); | |
| window.axElement = accessibilityController.focusedElement.childAtIndex(0); | |
| window.canvasButtonRole = axElement.role; | |
| shouldBe("canvasButtonRole", "expectedButtonRole"); | |
| // Now reparent the node to a container that's not a canvas. | |
| var container = document.getElementById('container'); | |
| container.appendChild(button); | |
| container.focus(); | |
| window.axReparentedElement = accessibilityController.focusedElement.childAtIndex(0); | |
| })(); | |
| // Ensure that the old accessibility object is detached by checking its role. | |
| window.detachedCanvasButtonRole = axElement.role; | |
| shouldBe("detachedCanvasButtonRole", "expectedDetachedRole"); | |
| // Ensure that the new accessibility object for the now-reparented node has the correct role. | |
| window.reparentedButtonRole = axReparentedElement.role; | |
| shouldBe("reparentedButtonRole", "expectedButtonRole"); | |
| } | |
| </script> | |
| <script src="../fast/js/resources/js-test-post.js"></script> | |
| </body> | |
| </html> |