87 lines
3.1 KiB
HTML
87 lines
3.1 KiB
HTML
<html>
|
|
<head>
|
|
<script src="../resources/js-test-pre.js"></script>
|
|
<script src="../resources/accessibility-helper.js"></script>
|
|
</head>
|
|
<body>
|
|
|
|
<p>Before</p>
|
|
|
|
<iframe id="iframe" title="InnerFrame"></iframe>
|
|
|
|
<p>After</p>
|
|
|
|
<p>End of test</p>
|
|
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
description("This tests that when an iframe finishes loading, it sends a notification.");
|
|
|
|
window.jsTestIsAsync = true;
|
|
|
|
// Recursively search the entire accessibility tree starting at the given
|
|
// AccessibilityUIElement (inclusive) and return the element whose title
|
|
// contains the given string. This makes it possible to find a node even
|
|
// when there are platform differences in the tree, i.e. due to different
|
|
// nodes being ignored.
|
|
function findByAccessibleTitleSubstring(startElement, titleSubstring)
|
|
{
|
|
if (startElement.title.indexOf(titleSubstring) >= 0)
|
|
return startElement;
|
|
|
|
for (var i = 0; i < startElement.childrenCount; i++) {
|
|
var found = findByAccessibleTitleSubstring(startElement.childAtIndex(i), titleSubstring);
|
|
if (found)
|
|
return found;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
if (window.accessibilityController) {
|
|
window.root = accessibilityController.rootElement;
|
|
|
|
// Initially, the iframe should not be loaded, so we shouldn't be able to find this button.
|
|
shouldBeFalse("findByAccessibleTitleSubstring(root, 'InnerButton') != null");
|
|
|
|
var gotLoadCompleteNotification = false;
|
|
window.accessibilityController.addNotificationListener(function (target, notification) {
|
|
// Ignore this notification if it's not on the iframe or not about the iframe being loaded.
|
|
var targetString = platformValueForW3CName(target);
|
|
if (targetString.indexOf("InnerFrame") != -1
|
|
&& notification == "AXLoadComplete")
|
|
gotLoadCompleteNotification = true;
|
|
});
|
|
|
|
setTimeout(async function() {
|
|
// Reset gotLoadCompleteNotification to false to disregard any notification up to this point.
|
|
gotLoadCompleteNotification = false;
|
|
await waitFor(() => {
|
|
return gotLoadCompleteNotification;
|
|
});
|
|
debug("Got AXLoadComplete notification on iframe.");
|
|
|
|
await waitFor(() => {
|
|
return findByAccessibleTitleSubstring(root, 'InnerButton');
|
|
});
|
|
// Check that the button within the iframe is now reachable from the root.
|
|
shouldBeTrue("findByAccessibleTitleSubstring(root, 'InnerButton') != null");
|
|
|
|
accessibilityController.removeNotificationListener();
|
|
finishJSTest();
|
|
}, 0);
|
|
}
|
|
|
|
window.iframeElement = document.getElementById("iframe");
|
|
|
|
// Load content into the iframe. This will trigger the event
|
|
// handler above, which will check that the accessibility tree
|
|
// was updated with new content.
|
|
window.iframeElement.src = "data:text/html,<body><button>InnerButton</button></body>";
|
|
</script>
|
|
<script src="../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html>
|