<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/accessibility-helper.js"></script>
<script src="../../resources/js-test.js"></script>
</head>
<body>

<div id="dropeffect-div" tabindex=0 aria-dropeffect="copy move" role="button" aria-label="drop">drop</div>
<div id="initially-grabbed-div" tabindex=0 aria-grabbed=true role="button" aria-label="grab1">grab</div>
<div id="initially-ungrabbed-div" tabindex=0 aria-grabbed=false role="button" aria-label="grab2">grab</div>

<script>
    var testOutput = "This tests that the ARIA drag and drop attributes work as intended.\n\n";

    if (window.accessibilityController) {
        window.jsTestIsAsync = true;

        testOutput += expect("accessibilityController.accessibleElementById('dropeffect-div').ariaDropEffects", "'copy,move'");

        var initiallyGrabbedDiv = accessibilityController.accessibleElementById("initially-grabbed-div");
        var initiallyUngrabbedDiv = accessibilityController.accessibleElementById("initially-ungrabbed-div");
        testOutput += expect("initiallyGrabbedDiv.ariaIsGrabbed", "true");
        testOutput += expect("initiallyUngrabbedDiv.ariaIsGrabbed", "false");
        testOutput += expect("initiallyGrabbedDiv.isAttributeSettable('AXGrabbed')", "true");
        testOutput += expect("initiallyUngrabbedDiv.isAttributeSettable('AXGrabbed')", "true");

        testOutput += "\nSetting aria-grabbed false for element #initially-grabbed-div.\n";
        document.getElementById("initially-grabbed-div").setAttribute("aria-grabbed", "false");
        setTimeout(async function() {
            await waitFor(() => !initiallyGrabbedDiv.ariaIsGrabbed );
            testOutput += expect("initiallyGrabbedDiv.ariaIsGrabbed", "false");

            debug(testOutput);
            finishJSTest();
        }, 0);
    }
</script>
</body>
</html>

