<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<select id="combobox">
  <option value="1">one</option>
  <option value="2">two</option>
  <option value="3">three</option>
  <option value="4">four</option>
</select>
<button id="button">OK</button>
<p id="description"></p>
<div id="console"></div>
<script>
window.jsTestIsAsync = true;
description("This tests that changing the selection in a non-focused combo box doesn't result in erroneous focus claims.");

if (window.testRunner && window.accessibilityController) {
    accessibilityController.addNotificationListener(function(element, notification) {
        if (notification == "AXFocusedUIElementChanged" || notification == "AXMenuItemSelected")
            debug(notification + ": " + element.role);
    });

    window.setTimeout(function() {
        debug("Changing focus to button.");
        document.getElementById("button").focus();
        debug("Focused element is: " + accessibilityController.focusedElement.role + "\n");

        let axMenu = accessibilityController.accessibleElementById("combobox").childAtIndex(0);

        // Programmatic selection changes in the non-focused combo box do not result
        // in the button losing focus. Therefore the combo box should not claim focus.
        debug("Changing selected item in non-focused combobox.");
        document.getElementById("combobox").selectedIndex = 3;
        window.setTimeout(function() {
            debug("Selected item is: " + axMenu.selectedChildAtIndex(0).title);
            debug("Focused element is: " + accessibilityController.focusedElement.role + "\n");

            // Programmatic selection changes in the non-focused combo box do not result
            // in the button losing focus. Therefore the combo box should not claim focus.
            debug("Changing selected item in non-focused combobox.");
            document.getElementById('combobox').selectedIndex = 2;
            window.setTimeout(function() {
                debug("Selected item is: " + axMenu.selectedChildAtIndex(0).title);
                debug("Focused element is: " + accessibilityController.focusedElement.role + "\n");

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