summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/browser_test_group_fission.js
blob: 43bbcbe444a11c20f214b18260bd5992d364678f (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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
add_task(async function setup_pref() {
  await SpecialPowers.pushPrefEnv({
    set: [
      // To avoid throttling requestAnimationFrame callbacks in invisible
      // iframes
      ["layout.throttled_frame_rate", 60],
      ["dom.animations-api.getAnimations.enabled", true],
      ["dom.animations-api.timelines.enabled", true],
      // Next two prefs are needed for hit-testing to work
      ["test.events.async.enabled", true],
      ["apz.test.logging_enabled", true],
    ],
  });
});

add_task(async function test_main() {
  function httpURL(filename) {
    let chromeURL = getRootDirectory(gTestPath) + filename;
    return chromeURL.replace(
      "chrome://mochitests/content/",
      "http://mochi.test:8888/"
    );
  }

  // Each of these subtests is a dictionary that contains:
  // file (required): filename of the subtest that will get opened in a new tab
  //   in the top-level fission-enabled browser window.
  // setup (optional): function that takes the top-level fission window and is
  //   run once after the subtest is loaded but before it is started.
  var subtests = [
    { file: "helper_fission_basic.html" },
    { file: "helper_fission_transforms.html" },
    { file: "helper_fission_scroll_oopif.html" },
    {
      file: "helper_fission_event_region_override.html",
      setup(win) {
        win.document.addEventListener("wheel", e => e.preventDefault(), {
          once: true,
          passive: false,
        });
      },
    },
    { file: "helper_fission_animation_styling_in_oopif.html" },
    { file: "helper_fission_force_empty_hit_region.html" },
    { file: "helper_fission_touch.html" },
    {
      file: "helper_fission_tap.html",
      prefs: [["apz.max_tap_time", 10000]],
    },
    { file: "helper_fission_inactivescroller_under_oopif.html" },
    {
      file: "helper_fission_tap_on_zoomed.html",
      prefs: [["apz.max_tap_time", 10000]],
    },
    {
      file: "helper_fission_tap_in_nested_iframe_on_zoomed.html",
      prefs: [["apz.max_tap_time", 10000]],
    },
    { file: "helper_fission_scroll_handoff.html" },
    { file: "helper_fission_large_subframe.html" },
    { file: "helper_fission_initial_displayport.html" },
    { file: "helper_fission_checkerboard_severity.html" },
    { file: "helper_fission_setResolution.html" },
    { file: "helper_fission_inactivescroller_positionedcontent.html" },
    { file: "helper_fission_irregular_areas.html" },
    { file: "helper_fission_animation_styling_in_transformed_oopif.html" },
    // add additional tests here
  ];

  // ccov builds run slower and need longer, so let's scale up the timeout
  // by the number of tests we're running.
  requestLongerTimeout(subtests.length);

  let fissionWindow = await BrowserTestUtils.openNewBrowserWindow({
    fission: true,
  });

  // We import the ESM here so that we can install functions on the class
  // below.
  const { FissionTestHelperParent } = ChromeUtils.importESModule(
    getRootDirectory(gTestPath) + "FissionTestHelperParent.sys.mjs"
  );
  FissionTestHelperParent.SimpleTest = SimpleTest;

  ChromeUtils.registerWindowActor("FissionTestHelper", {
    parent: {
      esModuleURI:
        getRootDirectory(gTestPath) + "FissionTestHelperParent.sys.mjs",
    },
    child: {
      esModuleURI:
        getRootDirectory(gTestPath) + "FissionTestHelperChild.sys.mjs",
      events: {
        "FissionTestHelper:Init": { capture: true, wantUntrusted: true },
      },
    },
    allFrames: true,
  });

  try {
    var onlyOneSubtest = SpecialPowers.getCharPref(
      "apz.subtest",
      /*default = */ ""
    );

    for (var subtest of subtests) {
      if (onlyOneSubtest && onlyOneSubtest != subtest.file) {
        SimpleTest.ok(
          true,
          "Skipping " +
            subtest.file +
            " because only " +
            onlyOneSubtest +
            " is being run"
        );
        continue;
      }
      let url = httpURL(subtest.file);
      dump(`Starting test ${url}\n`);

      // Load the test URL and tell it to get started, and wait until it reports
      // completion.
      await BrowserTestUtils.withNewTab(
        { gBrowser: fissionWindow.gBrowser, url },
        async browser => {
          let tabActor =
            browser.browsingContext.currentWindowGlobal.getActor(
              "FissionTestHelper"
            );
          let donePromise = tabActor.getTestCompletePromise();
          if (subtest.setup) {
            subtest.setup(fissionWindow);
          }
          tabActor.startTest();
          await donePromise;
        }
      );

      dump(`Finished test ${url}\n`);
    }
  } finally {
    // Delete stuff we added to FissionTestHelperParent, beacuse the object will
    // outlive this test, and leaving stuff on it may leak the things reachable
    // from it.
    delete FissionTestHelperParent.SimpleTest;
    // Teardown
    ChromeUtils.unregisterWindowActor("FissionTestHelper");
    await BrowserTestUtils.closeWindow(fissionWindow);
  }
});