chromium/third_party/blink/web_tests/accessibility/show-context-menu-shadowdom.html

<!DOCTYPE HTML>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>

<style>
#outer {
  width: 400px;
  height: 200px;
  background-color: #99f;
  padding: 30px;
}
</style>

<div id="outer">
  <div id="shadowHost" aria-label="Don't ignore me">
    This content goes inside inner.
  </div>
  <p>
    This element totally obscures "inner", but it's still possible to context-click
    on "inner" using accessibiltiy APIs.
  </p>
</div>

<div id="inner" aria-label="Don't ignore me either">
  <style>
    #inner_wrap {
      position: relative;
      left: 50px;
      top: 50px;
      width: 300px;
      height: 100px;
      background-color: #f99;
      z-index: -1;
    }
  </style>
  <div id="inner_wrap">
    <p>Before the content.</p>
    <p id="target"><content></content></p>
    <p>After the content.</p>
  </div>
</div>

<script>
var target = document.getElementById('target');
var shadowHost = document.getElementById('shadowHost');
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
shadowRoot.appendChild(document.getElementById('inner'));

async_test(function(t)
{
    target.addEventListener('contextmenu', function() {
        document.getElementById("outer").style.display = "none";
        t.done();
    }, false);

    if (window.accessibilityController) {


        var axTarget = accessibilityController.accessibleElementById("target");
        axTargetText = axTarget.childAtIndex(0);
        assert_equals(axTargetText.role, 'AXRole: AXStaticText');
        assert_equals(axTargetText.stringValue, 'AXValue: This content goes inside inner.');
        axTargetText.showMenu();
    }
}, "can use accessibility to show context menu on element that's obscured behind another");
</script>