/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ #ifndef __nsAccessibilityService_h__ #define __nsAccessibilityService_h__ #include "mozilla/a11y/DocManager.h" #include "mozilla/a11y/FocusManager.h" #include "mozilla/a11y/Platform.h" #include "mozilla/a11y/Role.h" #include "mozilla/a11y/SelectionManager.h" #include "mozilla/Preferences.h" #include "nsAtomHashKeys.h" #include "nsIContent.h" #include "nsIObserver.h" #include "nsIAccessibleEvent.h" #include "nsIEventListenerService.h" #include "nsXULAppAPI.h" #include "xpcAccessibilityService.h" class nsImageFrame; class nsIArray; class nsITreeView; namespace mozilla { class PresShell; class Monitor; namespace dom { class DOMStringList; class Element; } // namespace dom namespace a11y { class AccAttributes; class Accessible; class ApplicationAccessible; class xpcAccessibleApplication; /** * Return focus manager. */ FocusManager* FocusMgr(); /** * Return selection manager. */ SelectionManager* SelectionMgr(); /** * Returns the application accessible. */ ApplicationAccessible* ApplicationAcc(); xpcAccessibleApplication* XPCApplicationAcc(); typedef LocalAccessible*(New_Accessible)(mozilla::dom::Element* aElement, LocalAccessible* aContext); // These fields are not `nsStaticAtom* const` because MSVC doesn't like it. struct MarkupAttrInfo { nsStaticAtom* name; nsStaticAtom* value; nsStaticAtom* DOMAttrName; nsStaticAtom* DOMAttrValue; }; struct MarkupMapInfo { nsStaticAtom* const tag; New_Accessible* new_func; a11y::role role; MarkupAttrInfo attrs[4]; }; struct XULMarkupMapInfo { nsStaticAtom* const tag; New_Accessible* new_func; }; /** * PREF_ACCESSIBILITY_FORCE_DISABLED preference change callback. */ void PrefChanged(const char* aPref, void* aClosure); /** * Read and normalize PREF_ACCESSIBILITY_FORCE_DISABLED preference. */ EPlatformDisabledState ReadPlatformDisabledState(); } // namespace a11y } // namespace mozilla class nsAccessibilityService final : public mozilla::a11y::DocManager, public mozilla::a11y::FocusManager, public mozilla::a11y::SelectionManager, public nsIListenerChangeListener, public nsIObserver { public: typedef mozilla::a11y::LocalAccessible LocalAccessible; typedef mozilla::a11y::DocAccessible DocAccessible; // nsIListenerChangeListener NS_IMETHOD ListenersChanged(nsIArray* aEventChanges) override; protected: ~nsAccessibilityService(); public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_NSIOBSERVER LocalAccessible* GetRootDocumentAccessible(mozilla::PresShell* aPresShell, bool aCanCreate); /** * Adds/remove ATK root accessible for gtk+ native window to/from children * of the application accessible. */ LocalAccessible* AddNativeRootAccessible(void* aAtkAccessible); void RemoveNativeRootAccessible(LocalAccessible* aRootAccessible); bool HasAccessible(nsINode* aDOMNode); /** * Get a string equivalent for an accessible role value. */ void GetStringRole(uint32_t aRole, nsAString& aString); /** * Get a string equivalent for an accessible state/extra state. */ already_AddRefed GetStringStates( uint64_t aStates) const; void GetStringStates(uint32_t aState, uint32_t aExtraState, nsISupports** aStringStates); /** * Get a string equivalent for an accessible event value. */ void GetStringEventType(uint32_t aEventType, nsAString& aString); /** * Get a string equivalent for an accessible event value. */ void GetStringEventType(uint32_t aEventType, nsACString& aString); /** * Get a string equivalent for an accessible relation type. */ void GetStringRelationType(uint32_t aRelationType, nsAString& aString); // nsAccesibilityService /** * Notification used to update the accessible tree when new content is * inserted. */ void ContentRangeInserted(mozilla::PresShell* aPresShell, nsIContent* aStartChild, nsIContent* aEndChild); /** * Triggers a re-evaluation of the a11y tree of aContent after the next * refresh. This is important because whether we create accessibles may * depend on the frame tree / style. */ void ScheduleAccessibilitySubtreeUpdate(mozilla::PresShell* aPresShell, nsIContent* aStartChild); /** * Notification used to update the accessible tree when content is removed. */ void ContentRemoved(mozilla::PresShell* aPresShell, nsIContent* aChild); /** * Notification used to invalidate the isLayoutTable cache. */ void TableLayoutGuessMaybeChanged(mozilla::PresShell* aPresShell, nsIContent* aContent); /** * Notifies when a combobox