/* 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"; /** * Test internal announce method. */ addAccessibleTask( `

abc

`, async function testAnnounce(browser, accDoc) { function announce(announcement, priority) { return invokeContentTask( browser, [announcement, priority], (cAnnouncement, cPriority) => { const accService = Cc[ "@mozilla.org/accessibilityService;1" ].getService(Ci.nsIAccessibilityService); const cAcc = accService.getAccessibleFor( content.document.getElementById("p") ); cAcc.announce(cAnnouncement, cPriority); } ); } let acc = findAccessibleChildByID(accDoc, "p"); let onAnnounce = waitForEvent(EVENT_ANNOUNCEMENT, acc); await announce("please", nsIAccessibleAnnouncementEvent.POLITE); let evt = await onAnnounce; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "please", "announcement matches."); is(evt.priority, nsIAccessibleAnnouncementEvent.POLITE, "priority matches"); onAnnounce = waitForEvent(EVENT_ANNOUNCEMENT, acc); await announce("do it", nsIAccessibleAnnouncementEvent.ASSERTIVE); evt = await onAnnounce; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "do it", "announcement matches."); is( evt.priority, nsIAccessibleAnnouncementEvent.ASSERTIVE, "priority matches" ); }, { chrome: true, topLevel: true, iframe: true, remoteIframe: true } ); /** * Test ariaNotify. */ addAccessibleTask( `

abc

`, async function testAriaNotify(browser, docAcc) { const p = findAccessibleChildByID(docAcc, "p"); info("p.ariaNotify a, priority unspecified"); let announced = waitForEvent(EVENT_ANNOUNCEMENT, p); await invokeContentTask(browser, [], () => { content.p = content.document.getElementById("p"); content.p.ariaNotify("a"); }); let evt = await announced; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "a", "announcement matches"); is(evt.priority, nsIAccessibleAnnouncementEvent.POLITE, "priority correct"); info("p.ariaNotify b, priority normal"); announced = waitForEvent(EVENT_ANNOUNCEMENT, p); await invokeContentTask(browser, [], () => { content.p.ariaNotify("b", { priority: "normal" }); }); evt = await announced; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "b", "announcement matches"); is(evt.priority, nsIAccessibleAnnouncementEvent.POLITE, "priority correct"); info("p.ariaNotify c, priority high"); announced = waitForEvent(EVENT_ANNOUNCEMENT, p); await invokeContentTask(browser, [], () => { content.p.ariaNotify("c", { priority: "high" }); }); evt = await announced; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "c", "announcement matches"); is( evt.priority, nsIAccessibleAnnouncementEvent.ASSERTIVE, "priority correct" ); info("doc.ariaNotify d, priority unspecified"); announced = waitForEvent(EVENT_ANNOUNCEMENT, docAcc); await invokeContentTask(browser, [], () => { content.document.ariaNotify("d"); }); evt = await announced; evt.QueryInterface(nsIAccessibleAnnouncementEvent); is(evt.announcement, "d", "announcement matches"); is(evt.priority, nsIAccessibleAnnouncementEvent.POLITE, "priority correct"); }, { chrome: true, topLevel: true, iframe: true, remoteIframe: true } ); /** * Test ariaNotify's feature policy. */ addAccessibleTask( ``, async function testAriaNotifyPolicy(browser, docAcc) { info("doc.ariaNotify a"); await contentSpawnMutation( browser, { unexpected: [[EVENT_ANNOUNCEMENT, docAcc]] }, () => { content.document.ariaNotify("a"); } ); }, { topLevel: false, remoteIframe: true, iframeAttrs: { allow: "aria-notify none" }, } );