/* 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"; loader.lazyRequireGetter( this, "isWebRenderEnabled", "devtools/server/actors/utils/accessibility", true ); const PREF_ACCESSIBILITY_FORCE_DISABLED = "accessibility.force_disabled"; function checkAccessibilityState(accessibility, parentAccessibility, expected) { const { enabled } = accessibility; const { canBeDisabled, canBeEnabled } = parentAccessibility; is(enabled, expected.enabled, "Enabled state is correct."); is(canBeDisabled, expected.canBeDisabled, "canBeDisabled state is correct."); is(canBeEnabled, expected.canBeEnabled, "canBeEnabled state is correct."); } // Simple checks for the AccessibilityActor and AccessibleWalkerActor add_task(async function() { const { walker: domWalker, target, accessibility, parentAccessibility, a11yWalker, } = await initAccessibilityFrontsForUrl( "data:text/html;charset=utf-8,test
", { enableByDefault: false } ); ok(accessibility, "The AccessibilityFront was created"); ok(accessibility.getWalker, "The getWalker method exists"); ok(accessibility.getSimulator, "The getSimulator method exists"); ok(accessibility.accessibleWalkerFront, "Accessible walker was initialized"); is( a11yWalker, accessibility.accessibleWalkerFront, "The AccessibleWalkerFront was returned" ); const a11ySimulator = accessibility.simulatorFront; const webRenderEnabled = isWebRenderEnabled(window); is( !!a11ySimulator, webRenderEnabled, `The SimulatorFront was${webRenderEnabled ? "" : " not"} returned.` ); if (webRenderEnabled) { ok(accessibility.simulatorFront, "Accessible simulator was initialized"); is( a11ySimulator, accessibility.simulatorFront, "The SimulatorFront was returned" ); } checkAccessibilityState(accessibility, parentAccessibility, { enabled: false, canBeDisabled: true, canBeEnabled: true, }); info("Force disable accessibility service: updates canBeEnabled flag"); let onEvent = parentAccessibility.once("can-be-enabled-change"); Services.prefs.setIntPref(PREF_ACCESSIBILITY_FORCE_DISABLED, 1); await onEvent; checkAccessibilityState(accessibility, parentAccessibility, { enabled: false, canBeDisabled: true, canBeEnabled: false, }); info("Clear force disable accessibility service: updates canBeEnabled flag"); onEvent = parentAccessibility.once("can-be-enabled-change"); Services.prefs.clearUserPref(PREF_ACCESSIBILITY_FORCE_DISABLED); await onEvent; checkAccessibilityState(accessibility, parentAccessibility, { enabled: false, canBeDisabled: true, canBeEnabled: true, }); info("Initialize accessibility service"); const initEvent = accessibility.once("init"); await parentAccessibility.enable(); await waitForA11yInit(); await initEvent; checkAccessibilityState(accessibility, parentAccessibility, { enabled: true, canBeDisabled: true, canBeEnabled: true, }); const rootNode = await domWalker.getRootNode(); const a11yDoc = await accessibility.accessibleWalkerFront.getAccessibleFor( rootNode ); ok(a11yDoc, "Accessible document actor is created"); info("Shutdown accessibility service"); const shutdownEvent = accessibility.once("shutdown"); await waitForA11yShutdown(parentAccessibility); await shutdownEvent; checkAccessibilityState(accessibility, parentAccessibility, { enabled: false, canBeDisabled: true, canBeEnabled: true, }); await target.destroy(); gBrowser.removeCurrentTab(); });