Skip to content

Commit

Permalink
Fix clamping of scroll position in window.scrollBy
Browse files Browse the repository at this point in the history
For rightward and downward overflow the spec says:

Let x be max(0, min(x, viewport scrolling area width - viewport width)).
Let y be max(0, min(y, viewport scrolling area height - viewport height)).

Previously, those operations were reversed, which created negative
overflow even when the overflow direction was downward. This change
ensures that Servo matches spec behavior.
  • Loading branch information
mrobinson committed May 11, 2017
1 parent 0040160 commit b13cf11
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 2 deletions.
4 changes: 2 additions & 2 deletions components/script/dom/window.rs
Expand Up @@ -1066,8 +1066,8 @@ impl Window {
let content_size = e.upcast::<Node>().bounding_content_box_or_zero();
let content_height = content_size.size.height.to_f64_px();
let content_width = content_size.size.width.to_f64_px();
(xfinite.max(0.0f64).min(content_width - width),
yfinite.max(0.0f64).min(content_height - height))
(xfinite.min(content_width - width).max(0.0f64),
yfinite.min(content_height - height).max(0.0f64))
},
None => {
(xfinite.max(0.0f64), yfinite.max(0.0f64))
Expand Down
10 changes: 10 additions & 0 deletions tests/wpt/mozilla/meta/MANIFEST.json
Expand Up @@ -19783,6 +19783,12 @@
{}
]
],
"mozilla/scrollBy.html": [
[
"/_mozilla/mozilla/scrollBy.html",
{}
]
],
"mozilla/scrollTo.html": [
[
"/_mozilla/mozilla/scrollTo.html",
Expand Down Expand Up @@ -31354,6 +31360,10 @@
"b247e3a0ba733c1a8b129ce2994b862d8ed3a423",
"testharness"
],
"mozilla/scrollBy.html": [
"0243d584bc615a73ea1667fc35f5d73b5165d19f",
"testharness"
],
"mozilla/scrollTo.html": [
"b9917be5fed364dbc46264f641f54f275b5c054a",
"testharness"
Expand Down
26 changes: 26 additions & 0 deletions tests/wpt/mozilla/tests/mozilla/scrollBy.html
@@ -0,0 +1,26 @@
<!doctype html>
<meta charset="utf-8">
<title>Ensure that the window.scrollBy function affects scroll position as expected</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<a id="link" href="http://mozilla.org">This is some link text.</a>
<div style="width: 10000px; height: 10000px; background: pink; z-index: -1;"></div>
<script>
test(function() {
scrollBy(0, 5000);
assert_equals(scrollX, 0);
assert_equals(pageXOffset, 0);
assert_equals(scrollY, 5000);
assert_equals(pageYOffset, 5000);

scrollTo(0, 0);

var link = document.getElementById("link");
var linkRect = link.getBoundingClientRect();
assert_equals(link, document.elementFromPoint(linkRect.left, linkRect.top));
window.scrollBy(0, 1);
assert_equals(link, document.elementFromPoint(linkRect.left, linkRect.top - 1));
});
</script>
</body>

0 comments on commit b13cf11

Please sign in to comment.