<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>CSS Test (Selectors): Keyboard focus enables :focus-visible</title>
  <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org" />
  <link rel="help" href="https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo" />
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/resources/testdriver.js"></script>
  <script src="/resources/testdriver-vendor.js"></script>
  <style>
    @supports not (selector(:focus-visible)) {
      #el:focus {
        outline: red solid 5px;
        background-color: red;
      }
    }

    :focus-visible {
      outline: green solid 5px;
    }

    #el:focus:not(:focus-visible) {
      background-color: red;
      outline: 0;
    }
  </style>
</head>
<body>
  This test checks that programmatically focusing an element after a keypress causes <code>:focus-visible</code> to match.
  <ol id="instructions">
    <li>Use the tab key to move focus to the button below that says "Tab to me and press ENTER."</li>
    <li>Press ENTER.</li>
    <li>If the element that says "I will be focused programmatically." has a red background, then the test result is FAILURE. If the element has a green outline, then the test result is SUCCESS.</li>
  </ol>
  <br />
  <button id="button">Tab to me and press ENTER.</button>
  <div id="el" tabindex="-1">I will be focused programmatically.</el>
  <script>
  if ("async_test" in window) {
    async_test(function(t) {
      button.addEventListener("click", t.step_func(() => {
        el.focus();
      }));
      el.addEventListener("focus", t.step_func(function() {
        assert_equals(getComputedStyle(el).outlineColor, "rgb(0, 128, 0)", `outlineColor for ${el.tagName}#${el.id} should be green`);
        assert_not_equals(getComputedStyle(el).backgroundColor, "rgb(255, 0, 0)", `backgroundColor for ${el.tagName}#${el.id} should NOT be red`);
        t.done();
      }));
      test_driver.send_keys(el, "\ue004\ue007"); // TAB and ENTER
    }, "Programmatic focus after keypress should match :focus-visible");
  } else {
    button.addEventListener("click", () => {
      el.focus();
    });
  }

  const tab_key = '\ue004';
  const enter_key = '\uE007';
  test_driver.send_keys(el, tab_key).then(() => {
    test_driver.send_keys(el, enter_key);
  });
  </script>
</body>
</html>
