/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; Services.scriptloader.loadSubScript( "chrome://mochitests/content/browser/gfx/layers/apz/test/mochitest/apz_test_native_event_utils.js", this ); /** * Test accessible is has correct offscreen state before and after * APZ. */ addAccessibleTask( `
I am square
hello world I am large

I am a heading

`, async function (browser, accDoc) { const test = findAccessibleChildByID(accDoc, "test"); const heading = findAccessibleChildByID(accDoc, "heading"); info("Verifying offscreen state"); await untilCacheOk(() => { const [states] = getStates(test); return (states & STATE_OFFSCREEN) == 0; }, "test div should be ON screen"); await untilCacheOk(() => { const [states] = getStates(heading); return (states & STATE_OFFSCREEN) == 0; }, "heading should be ON screen"); info("Pinch zooming..."); await SpecialPowers.spawn(browser, [], async () => { const visualScrollPromise = new Promise(resolve => { content.window.visualViewport.addEventListener("scroll", resolve, { once: true, }); }); const utils = SpecialPowers.getDOMWindowUtils(content.window); utils.setResolutionAndScaleTo(2); utils.scrollToVisual( 200, 200, utils.UPDATE_TYPE_MAIN_THREAD, utils.SCROLL_MODE_INSTANT ); await visualScrollPromise; }); info("Verifying offscreen state"); await untilCacheOk(() => { const [states] = getStates(test); return (states & STATE_OFFSCREEN) != 0; }, "test div should be OFF screen"); await untilCacheOk(() => { const [states] = getStates(heading); return (states & STATE_OFFSCREEN) != 0; }, "heading should be OFF screen"); info("Scrolling to bottom of page..."); // We have to use the APZ scroll util here, we can't rely on // body.scrollTo, because the thing that we've created scroll // bars on is the visual viewport "element". await SpecialPowers.spawn(browser, [], async () => { const visualScrollPromise = new Promise(resolve => { content.window.visualViewport.addEventListener("scroll", resolve, { once: true, }); }); const utils = SpecialPowers.getDOMWindowUtils(content.window); utils.scrollToVisual( 0, content.visualViewport.height, utils.UPDATE_TYPE_MAIN_THREAD, utils.SCROLL_MODE_INSTANT ); await visualScrollPromise; }); info("Verifying offscreen state"); await untilCacheOk(() => { const [states] = getStates(test); return (states & STATE_OFFSCREEN) != 0; }, "test div should be OFF screen"); await untilCacheOk(() => { const [states] = getStates(heading); return (states & STATE_OFFSCREEN) == 0; }, "heading should be ON screen"); }, // APZ only happens on the top-level document, which means iframe tests // will assert differently than classic remote doc tests. { iframe: false, remoteIframe: false } );