chromium/third_party/blink/web_tests/fast/dom/shadow/offset-parent-does-not-leak-ua-shadow.html

<!DOCTYPE html>
<script src='../../../resources/testharness.js'></script>
<script src='../../../resources/testharnessreport.js'></script>
<body>
<style>
  #container {
    position: relative;
  }
  #host {
    width: 200px;
    height: 200px;
    border:10px solid black;
  }
  #shadowContainer {
    width: 120px;
    height: 120px;
    border: 10px solid gray;
    position: relative;
  }
  #lightdom {
    width: 100px;
    height: 100px;
    background: green;
  }
</style>
<div id="container" style="position: relative;"></div>
<script>

test(_ => {
  let container = document.querySelector('#container');
  let host = document.createElement('div');
  host.setAttribute("id", "host");
  container.appendChild(host);
  let child = document.createElement('div');
  host.appendChild(child);
  child.setAttribute("id", "lightdom");
  child.innerText = "author light dom";
  let shadow = host.attachShadow({mode: 'open'});
  shadow.innerHTML =
        '<div id="shadowContainer"><slot></slot></div>';
  assert_equals(child.offsetParent, document.querySelector("#container"),
    "offsetParent gets remapped to light DOM");
  shadow.querySelector("#shadowContainer").style.position = "static";
  assert_equals(child.offsetParent, document.querySelector("#container"),
    "offsetParent works through shadow DOM to light dom");
  host.remove();
}, "offsetParent works in author ShadowDOM");

test(_ => {
  // TODO crbug.com/1179356 reenable this test when done.
  return;
  assert_true(window.internals != null, 'This test requires window.internals to manipulate user agent Shadow DOM.');
  // Test that when the offsetParent is in user agent Shadow DOM, it is
  // not exposed to script, but its shadow host or the host's ancestor
  // which is appropriate as an offsetParent is returned.
  let container = document.querySelector('#container');
  let host = document.createElement('div');
  container.appendChild(host);
  host.setAttribute('open', 'open');
  host.setAttribute("id", "host");
  let child = document.createElement('div');
  host.appendChild(child);
  child.setAttribute("id", "lightdom");
  child.innerText = "user agent light dom";
  let shadow = internals.createUserAgentShadowRoot(host);
  shadow.innerHTML = '<div id="shadowContainer"><slot></slot></div>';
  assert_equals(child.offsetParent, document.querySelector("#container"),
    "offsetParent gets remapped to light DOM");
  shadow.querySelector("#shadowContainer").style.position = "static";
  assert_equals(child.offsetParent, document.querySelector("#container"),
    "offsetParent works through shadow DOM to light dom");
  // If host is not removed, Chrome DHECKs.
  // host.remove();
}, "offsetParent works in user agent ShadowDOM");

</script>