<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<div id="textbox1" role="textbox" aria-readonly="false" tabindex="0"></div>
<div id="textbox2" role="textbox" aria-readonly="true" tabindex="0"></div>
<p id="description"></p>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;
description("This tests that changing the aria-readonly value results in a state-changed notification.");

if (window.testRunner && window.accessibilityController) {
    accessibilityController.addNotificationListener(function(element, notification, state) {
        if (notification != "AXReadOnlyStatusChanged")
            return;
        debug(notification + " " + (state == "1") + " on " + element.stringAttributeValue("html-id"));
    });

    var element = document.getElementById("textbox1");
    element.focus();
    debug("Setting aria-readonly to true on textbox1.");
    element.setAttribute("aria-readonly", "true");

    element = document.getElementById("textbox2");
    element.focus();
    debug("Setting aria-readonly to false on textbox2.");
    element.setAttribute("aria-readonly", "false");

    window.setTimeout(function() {
        accessibilityController.removeNotificationListener();
        finishJSTest();
    }, 0);
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
