Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test gets skipped with pattern: os == 'linux' && os_version == '22.04' && display == 'wayland'
- Manifest: gfx/layers/apz/test/mochitest/mochitest.toml
<!DOCTYPE HTML>
<html>
<head>
  <title>Test scrolling flattened inactive frames</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script src="/tests/SimpleTest/EventUtils.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <script type="application/javascript" src="apz_test_utils.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
<style>
p {
  width:200px;
  height:200px;
  border:solid 1px black;
  overflow:auto;
}
</style>
</head>
<body>
<div id="iframe-body" style="overflow: auto; height: 1000px">
<hr>
<hr>
<hr>
<p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p id="subframe">
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p><p>
1	<br>
2	<br>
3	<br>
4	<br>
5	<br>
6	<br>
7	<br>
8	<br>
9	<br>
10	<br>
11	<br>
12	<br>
13	<br>
14	<br>
15	<br>
16	<br>
17	<br>
18	<br>
19	<br>
20	<br>
21	<br>
22	<br>
23	<br>
24	<br>
25	<br>
26	<br>
27	<br>
28	<br>
29	<br>
30	<br>
31	<br>
32	<br>
33	<br>
34	<br>
35	<br>
36	<br>
37	<br>
38	<br>
39	<br>
40	<br>
</p>
</div>
<script clss="testbody" type="text/javascript">
function ScrollTops() {
  this.outerScrollTop = document.getElementById("iframe-body").scrollTop;
  this.innerScrollTop = document.getElementById("subframe").scrollTop;
}
var DefaultEvent = {
  deltaMode: WheelEvent.DOM_DELTA_LINE,
  deltaX: 0, deltaY: 1,
  lineOrPageDeltaX: 0, lineOrPageDeltaY: 1,
};
async function test() {
  var subframe = document.getElementById("subframe");
  var oldpos = new ScrollTops();
  await new Promise(resolve => {
    sendWheelAndPaint(subframe, 10, 10, DefaultEvent, resolve);
  });
  var newpos = new ScrollTops();
  ok(oldpos.outerScrollTop == newpos.outerScrollTop, "viewport should not have scrolled");
  ok(oldpos.innerScrollTop != newpos.innerScrollTop, "subframe should have scrolled");
  oldpos = newpos;
  // Scroll outer
  var outer = document.getElementById("iframe-body");
  await new Promise(resolve => {
    sendWheelAndPaint(outer, 20, 5, DefaultEvent, resolve);
  });
  newpos = new ScrollTops();
  ok(oldpos.outerScrollTop != newpos.outerScrollTop, "viewport should have scrolled");
  ok(oldpos.innerScrollTop == newpos.innerScrollTop, "subframe should not have scrolled");
  oldpos = newpos;
  // Scroll inner again
  // Tick the refresh driver once to make sure the compositor has sent the
  // updated scroll offset for the outer scroller to WebRender, so that the
  // hit-test in sendWheelAndPaint takes it into account.
  var dwu = SpecialPowers.getDOMWindowUtils(window);
  dwu.advanceTimeAndRefresh(16);
  dwu.restoreNormalRefresh();
  await new Promise(resolve => {
    sendWheelAndPaint(subframe, 10, 10, DefaultEvent, resolve);
  });
  newpos = new ScrollTops();
  ok(oldpos.outerScrollTop == newpos.outerScrollTop, "viewport should not have scrolled");
  ok(oldpos.innerScrollTop != newpos.innerScrollTop, "subframe should have scrolled");
}
SimpleTest.waitForExplicitFinish();
pushPrefs([["general.smoothScroll", false],
           ["mousewheel.transaction.timeout", 0],
           ["mousewheel.transaction.ignoremovedelay", 0],
           ["test.events.async.enabled", true]])
.then(waitUntilApzStable)
.then(test)
.then(SimpleTest.finish, SimpleTest.finishWithFailure);
</script>
</body>
</html>