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

<button id="button">Click me</button>
<input type="text" id="text-input">

<script>
    description("This test ensures that making an element focused via accessibility (e.g. full keyboard access) re-focuses the page so that a focus ring can be drawn.");

    function takeFocus(id) {
        debug(`\nTaking focus via accessibilityController for id #${id}`);
        accessibilityController.accessibleElementById(id).takeFocus();
    }

    if (window.accessibilityController) {
        var button = document.getElementById("button");
        var textInput = document.getElementById("text-input");
        shouldBe("getComputedStyle(button).getPropertyValue('outline-width')", "'0px'");
        shouldBe("getComputedStyle(textInput).getPropertyValue('outline-width')", "'0px'");

        takeFocus("button");
        // Expect focus ring to have been drawn for the button.
        shouldBe("getComputedStyle(button).getPropertyValue('outline-width')", "'3px'");
        shouldBe("getComputedStyle(textInput).getPropertyValue('outline-width')", "'0px'");

        takeFocus("text-input");
        shouldBe("getComputedStyle(button).getPropertyValue('outline-width')", "'0px'");
        shouldBe("getComputedStyle(textInput).getPropertyValue('outline-width')", "'3px'");

        debug("\nMaking the entire page un-focused");
        // This simulates situations in which WebKit is embedded in another app and focus is not properly handed
        // over to WebKit when necessary, i.e. a full-keyboard access user tabbing into the embedded web view.
        if (window.internals)
            internals.setPageIsFocused(false);
        else
            debug("FAIL: window.internals not available")

        takeFocus("button");
        // Focusing the button via accessibility should re-focus the page and allow a focus ring to be drawn.
        // This simulates conditions where embedded WKWebView's are not ever marked as focused via their hosting
        // app, e.g. via [WKContentViewInteraction becomeFirstResponderForWebView].
        shouldBe("getComputedStyle(button).getPropertyValue('outline-width')", "'3px'");
        shouldBe("getComputedStyle(textInput).getPropertyValue('outline-width')", "'0px'");
    }
</script>
</body>
</html>

