<!DOCTYPE html>
<meta charset="utf-8">
<title>HTML Test: focus - the sequential focus navigation order with shadow dom and non-focusable host</title>
<link rel="help" href="https://html.spec.whatwg.org/multipage/interaction.html#sequential-focus-navigation">
<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>
<script src="resources/shadow-utils.js"></script>
<body>
<script>
// Structure:
// <div #aboveHost tabindex=0>
// <div #host>
//    #shadowRoot
//      <div #aboveSlot tabindex=0>
//      <slot #slotAbove tabindex=0>
//        (slotted) <div #slottedAbove tabindex=0>
//      <slot #slotBelow tabindex=0>
//        (slotted) <div #slottedBelow tabindex=0>
//      <div #belowSlot tabindex=0>
// <div #belowHost tabindex=0>

promise_test(() => {
  let elementsInFlatTreeOrder;
  let [aboveHost, host, aboveSlot, slotAbove, slottedAbove, slotBelow, slottedBelow, belowSlot, belowHost] =
    elementsInFlatTreeOrder = prepareDOM(document.body, false);
  setTabIndex(elementsInFlatTreeOrder, 0);
  removeTabIndex([host]);
  resetFocus();
  // Focus should move in flat tree order since every one of them has tabindex ==0,
  // but doesn't include #slot since it's not rendered and #host since its tabindex is not set
  // (but #host is considered as 0 in focus scope navigation, keeping the flat tree order for the shadow root's descendants).
  return assertFocusOrder(elementsInFlatTreeOrder.filter(el => (el !== slotAbove && el !== slotBelow && el !== host)));
}, "Order when all tabindex=0 except host (tabindex not set)");
</script>
</body>
