<!DOCTYPE HTML>
<html>
<head>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
</head>
<body>
<div id="container">
<div id="hiddenDivContainer" aria-label="hiddenDivContainer">
<div id="hiddenDiv" hidden>
<div>
<button>Button</button>
</div>
</div>
</div>
<button aria-labelledby="hiddenDiv"> <!-- To include #hiddenDiv in tree -->
<div id="emptyDivContainer" aria-label="emptyDivContainer">
<div id="emptyDiv"></div>
</div>
<div id="divWithoutRoleContainer" aria-label="divWithoutRoleContainer">
<div id="divWithoutRole">
<div>
<button>Button</button>
</div>
</div>
</div>
</div>
<div id="console"></div>
<script>
async_test((t) => {
window.setTimeout(() => { assert_unreached("Did not receive all notifications within 1000ms"); }, 1000);
function accessibleElementById(id) {
return accessibilityController.accessibleElementById(id);
}
window.pendingSuccesses = new Set([
'hiddenDivContainer',
'emptyDiv',
'divWithoutRoleContainer',
]);
gotSuccessfulNotification = t.step_func((id) => {
if (!pendingSuccesses.has(id))
assert_unreached('Unexpected notification for ' + id);
pendingSuccesses.delete(id);
accessibleElementById(id).removeNotificationListener();
if (pendingSuccesses.size == 0)
t.done();
});
assert_true(accessibleElementById('hiddenDivContainer') != null);
assert_true(accessibleElementById('hiddenDiv').isIgnored);
accessibleElementById('hiddenDivContainer').addNotificationListener(t.step_func((notification) => {
console.log('Got ' + notification + ' notification on hiddenDivContainer');
assert_equals(accessibleElementById('hiddenDivContainer').childrenCount,
1);
gotSuccessfulNotification('hiddenDivContainer');
}));
document.getElementById('hiddenDiv').hidden = false;
assert_true(accessibleElementById('emptyDiv') != null);
accessibleElementById('emptyDiv').addNotificationListener(t.step_func((notification) => {
console.log('Got ' + notification + ' notification on emptyDiv');
assert_equals(accessibleElementById('emptyDiv').childrenCount, 1);
gotSuccessfulNotification('emptyDiv');
}));
document.getElementById('emptyDiv').innerText = 'Not empty anymore.';
document.getElementById('emptyDiv').offsetLeft;
assert_true(accessibleElementById('divWithoutRoleContainer') != null);
accessibleElementById('divWithoutRoleContainer').addNotificationListener(t.step_func((notification) => {
console.log('Got ' + notification + ' notification on divWithoutRoleContainer');
assert_equals(accessibleElementById('divWithoutRoleContainer').childrenCount, 1);
gotSuccessfulNotification('divWithoutRoleContainer');
}));
document.getElementById('divWithoutRole').setAttribute('role', 'heading');
}, "This test ensures that a change to accessibilityIsIgnored fires a children changed notification on the parent.");
</script>
</body>
</html>