summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/helper_fission_event_region_override.html
blob: 8ebfc492f29afad3628e1fbaab4c13f1cc3cb1bf (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
<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>Ensure the event region override flags work properly</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script src="/tests/SimpleTest/paint_listener.js"></script>
  <script src="helper_fission_utils.js"></script>
  <script src="apz_test_utils.js"></script>
  <script src="apz_test_native_event_utils.js"></script>
  <script>

fission_subtest_init();

FissionTestHelper.startTestPromise
  .then(waitUntilApzStable)
  .then(loadOOPIFrame("testframe", "helper_fission_empty.html"))
  .then(waitUntilApzStable)
  .then(test)
  .then(FissionTestHelper.subtestDone, FissionTestHelper.subtestFailed);


// The actual test

let code_for_oopif_to_run = function() {
  document.body.innerHTML = '<div style="height: 5000px">scrollable content</div>';
  document.addEventListener("wheel", function(e) {
    dump(`OOPIF got wheel at ${e.clientX},${e.clientY}\n`);
    let result = { x: e.clientX, y: e.clientY };
    FissionTestHelper.fireEventInEmbedder("OOPIF:WheelData", result);
  }, { passive: true });
  document.addEventListener("scroll", function() {
    dump(`OOPIF got scroll to ${window.scrollX},${window.scrollY}\n`);
    let result = { x: window.scrollX, y: window.scrollY };
    FissionTestHelper.fireEventInEmbedder("OOPIF:Scrolled", result);
  });
  dump("OOPIF registered wheel and scroll listeners\n");
  return true;
};

async function test() {
  let iframeElement = document.getElementById("testframe");

  let iframeResponse = await FissionTestHelper.sendToOopif(iframeElement, `(${code_for_oopif_to_run})()`);
  dump("OOPIF response: " + JSON.stringify(iframeResponse) + "\n");
  ok(iframeResponse, "code_for_oopif_to_run successfully installed");

  let wheeled = false;
  let scrolled = false;
  window.addEventListener("OOIF:WheelData", function listener(e) {
    dump("OOPIF:WheelData received with data: " + JSON.stringify(e.data) + "\n");
    wheeled = true;
  });
  window.addEventListener("OOPIF:Scrolled", function listener(e) {
    dump("OOPIF:Scrolled received with data: " + JSON.stringify(e.data) + "\n");
    scrolled = true;
  });

  await synthesizeNativeWheel(iframeElement, 10, 10, 0, -50);

  // Advance a bunch of frames. The only goal here is to ensure enough time
  // passes so that if the OOPIF does scroll, we find out about it via the
  // OOPIF:Scrolled messaging.
  // If we don't wait long enough we might end up finishing the test before
  // that scroll message gets received here, and so we might wrongly pass the
  // test.
  await SpecialPowers.promiseTimeout(0);
  var utils = SpecialPowers.getDOMWindowUtils(window);
  for (var i = 0; i < 5; i++) {
    utils.advanceTimeAndRefresh(16);
  }
  utils.restoreNormalRefresh();
  await promiseOnlyApzControllerFlushed();

  ok(!wheeled, "OOPIF correctly did not get wheel event");
  ok(!scrolled, "OOPIF correctly did not scroll");
}

  </script>
</head>
<body>
<iframe id="testframe"></iframe>
</body>
</html>