summaryrefslogtreecommitdiffstats
path: root/gfx/layers/apz/test/mochitest/browser_test_group_fission.js
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/apz/test/mochitest/browser_test_group_fission.js')
-rw-r--r--gfx/layers/apz/test/mochitest/browser_test_group_fission.js150
1 files changed, 150 insertions, 0 deletions
diff --git a/gfx/layers/apz/test/mochitest/browser_test_group_fission.js b/gfx/layers/apz/test/mochitest/browser_test_group_fission.js
new file mode 100644
index 0000000000..43bbcbe444
--- /dev/null
+++ b/gfx/layers/apz/test/mochitest/browser_test_group_fission.js
@@ -0,0 +1,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);
+ }
+});