File: test_scrollframe_abspos_interrupt.html

package info (click to toggle)
firefox 141.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,550,616 kB
  • sloc: cpp: 7,426,508; javascript: 6,367,238; ansic: 3,707,354; python: 1,368,984; xml: 623,983; asm: 426,916; java: 184,324; sh: 64,488; makefile: 19,203; objc: 13,059; perl: 12,955; yacc: 4,583; cs: 3,846; pascal: 3,352; lex: 1,720; ruby: 1,071; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 54; csh: 10
file content (60 lines) | stat: -rw-r--r-- 1,479 bytes parent folder | download | duplicates (25)
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>