Auto merge of #12813 - emilio:hit-test, r=notriddle

dom: getElementsFromPoint does the hit testing on viewport coordinates.

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors

<!-- Either: -->
- [x] There are tests for these changes OR

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

We got this wrong (I think it wasn't my fault actually), I was just writing a test for #12777 when I found this.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/12813)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-08-11 05:34:27 -05:00 committed by GitHub
commit 4cefbcc949
4 changed files with 56 additions and 6 deletions

View file

@ -6660,6 +6660,12 @@
"url": "/_mozilla/mozilla/global.html"
}
],
"mozilla/hit_test_pos_fixed.html": [
{
"path": "mozilla/hit_test_pos_fixed.html",
"url": "/_mozilla/mozilla/hit_test_pos_fixed.html"
}
],
"mozilla/htmlcollection.html": [
{
"path": "mozilla/htmlcollection.html",

View file

@ -0,0 +1,42 @@
<!doctype html>
<meta charset="utf-8">
<title>Hit-test of an element with position: fixed should discard scroll offset</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
html, body { margin: 0; padding: 0; }
.hitme {
position: fixed;
left: 0;
top: 0;
width: 100px;
height: 100px;
background: blue;
}
.hitme:hover { background: green }
.container {
width: 100%;
background: red;
/* Ensure we can scroll */
height: 2000px;
/* FIXME: Uncomment when servo supports this properly
height: calc(100vh + 200px); */
}
</style>
<div class="container">
<div class="hitme"></div>
</div>
<script>
async_test(function(t) {
window.onload = t.step_func(function() {
window.scrollTo(0, 200);
var elements = document.elementsFromPoint(10, 10);
assert_true(elements.length > 0, "Should be elements");
assert_true(elements[0].className == "hitme",
"should be able to hit the fixed-positioned element");
t.done();
});
});
</script>