summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/helper_hittest_fixed_in_scrolled_transform.html
blob: 93d1e6064ddd00924426517f9fb05be30b0b4acd (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<!DOCTYPE HTML>
<html>
<head>
  <title>Hit-testing on the special setup from fixed-pos-scrolled-clip-3.html</title>
  <script type="application/javascript" src="apz_test_utils.js"></script>
  <script type="application/javascript" src="apz_test_native_event_utils.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <meta name="viewport" content="width=device-width"/>
<style>
body {
  margin: 0;
  height: 4000px;
}

.transform {
  transform: translate(10px, 10px);
  width: 500px;
}

.subframe {
  height: 600px;
  overflow: auto;
  box-shadow: 0 0 0 2px black;
}

.scrolled {
  height: 4000px;
  position: relative;
}

.absoluteClip {
  position: absolute;
  top: 300px;
  left: 100px;
  width: 200px;
  height: 200px;
  background: red;
  clip: rect(auto auto auto auto);
}

.fixed {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  background: linear-gradient(lime, lime) black 0 100px no-repeat;
  background-size: 100% 200px;
}
</style>
</head>
<body>
<!-- This is lifted from layout/reftests/async-scrolling/fixed-pos-scrolled-clip-3.html -->
<div class="transform">
  <div class="subframe">
    <div class="scrolled">
      <div class="absoluteClip">
        <div class="fixed"></div>
      </div>
    </div>
  </div>
</div>
</body>
<script type="application/javascript">

async function test() {
  var config = getHitTestConfig();
  var utils = config.utils;

  // layerize the scrollable frame
  var subframe = document.querySelector(".subframe");
  utils.setDisplayPortForElement(0, 0, 800, 2000, subframe, 1);
  await promiseApzFlushedRepaints();

  var target = document.querySelector(".absoluteClip");
  // The fixed item is fixed with respect to the transform, which is
  // outside the subframe, so we should scroll the root scroll frame,
  // not the subframe.
  checkHitResult(hitTest(centerOf(target)),
                 APZHitResultFlags.VISIBLE,
                 utils.getViewId(document.scrollingElement),
                 utils.getLayersId(),
                 "fixed item inside a scrolling transform");
}

waitUntilApzStable()
.then(test)
.then(subtestDone, subtestFailed);

</script>
</html>