blob: fe25e991f9419c905480dd9159261dc4b21faa12 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
<!doctype html>
<title>Test for bug 1526609</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<style>
body {
margin: 0;
}
.scroller {
overflow-y: auto;
position: relative;
width: 500px;
height: 300px;
}
.kid {
position: absolute;
width: 100%;
background: linear-gradient(to bottom, red, green);
line-height: 100px;
}
</style>
<div class="scroller" id="scroller">
<div class="kid"></div>
</div>
<script>
{
let text = " foo bar ";
for (let i = 0; i < 16; ++i)
text = text + text;
document.querySelector(".kid").innerText = text;
}
SimpleTest.waitForExplicitFinish();
const scroller = document.querySelector("#scroller");
is(scroller.scrollTop, 0, "Initial scroll position");
ok(scroller.scrollTopMax > 0, "Should be able to scroll down");
scroller.scrollTop = scroller.scrollTopMax;
is(scroller.scrollTop, scroller.scrollTopMax, "Should've scrolled");
const origWidth = scroller.offsetWidth;
const utils = SpecialPowers.DOMWindowUtils;
// Take control of the refresh driver
utils.advanceTimeAndRefresh(0);
// Force the next reflow to get interrupted
utils.forceReflowInterrupt();
scroller.style.width = "300px";
utils.advanceTimeAndRefresh(0);
isnot(scroller.scrollTop, 0, "Shouldn't have lost scroll position");
isnot(scroller.offsetWidth, origWidth, "Should've had to reflow");
utils.restoreNormalRefresh();
SimpleTest.finish();
</script>
|