// Disable compositor hit testing
document.addEventListener('touchstart', function() {});

window.addEventListener('load', function() {
  // Create any shadow DOM nodes requested by the test.
  var shadowTrees = document.querySelectorAll('[make-shadow-dom]');
  if (shadowTrees.length > 0 && !HTMLElement.prototype.ensureShadowRoot) {
    document.body.innerHTML = 'ERROR: Shadow DOM not supported!';
    return;
  }
  for (var i = 0; i < shadowTrees.length; i++) {
    var tree = shadowTrees[i];
    var host = tree.previousElementSibling;
    if (!host.hasAttribute('shadow-host')) {
      document.body.innerHTML = 'ERROR: make-shadow-dom node must follow a shadow-host node';
      return;
    }
    tree.parentElement.removeChild(tree);
    var shadowRoot = host.ensureShadowRoot();
    shadowRoot.appendChild(tree);
  }
});

/*
 * Visualization of hit test locations for manual testing.
 * To be invoked manually (so it doesn't intefere with testing).
 */
function addMarker(x, y)
{
    const kMarkerSize = 6;
    var marker = document.createElement('div');
    marker.className = 'marker';
    marker.style.top = (y - kMarkerSize/2) + 'px';
    marker.style.left = (x - kMarkerSize/2) + 'px';
    document.body.appendChild(marker);
}

function addMarkers()
{
  var tests = document.querySelectorAll('[expected-action]');
  for (var i = 0; i < tests.length; i++) {
    var r = tests[i].getClientRects()[0];
    addMarker(r.left, r.top);
    addMarker(r.right - 1, r.bottom - 1);
    addMarker(r.left + r.width / 2, r.top + r.height / 2);
  }
}
