BaseAccessibles.h (4004B)
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_a11y_BaseAccessibles_h__ 7 #define mozilla_a11y_BaseAccessibles_h__ 8 9 #include "AccessibleWrap.h" 10 #include "HyperTextAccessible.h" 11 12 class nsIContent; 13 14 /** 15 * This file contains a number of classes that are used as base 16 * classes for the different accessibility implementations of 17 * the HTML and XUL widget sets. --jgaunt 18 */ 19 20 namespace mozilla { 21 namespace a11y { 22 23 /** 24 * Leaf version of DOM Accessible -- has no children 25 */ 26 class LeafAccessible : public AccessibleWrap { 27 public: 28 LeafAccessible(nsIContent* aContent, DocAccessible* aDoc); 29 30 // nsISupports 31 NS_INLINE_DECL_REFCOUNTING_INHERITED(LeafAccessible, AccessibleWrap) 32 33 // LocalAccessible 34 virtual LocalAccessible* LocalChildAtPoint( 35 int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override; 36 bool InsertChildAt(uint32_t aIndex, LocalAccessible* aChild) final; 37 bool RemoveChild(LocalAccessible* aChild) final; 38 39 virtual bool IsAcceptableChild(nsIContent* aEl) const override; 40 41 protected: 42 virtual ~LeafAccessible() {} 43 }; 44 45 /** 46 * Used for text or image accessible nodes contained by link accessibles or 47 * accessibles for nodes with registered click event handler. It knows how to 48 * report the state of the host link (traveled or not) and can focus the host 49 * accessible programmatically. 50 */ 51 class LinkableAccessible : public AccessibleWrap { 52 public: 53 LinkableAccessible(nsIContent* aContent, DocAccessible* aDoc) 54 : AccessibleWrap(aContent, aDoc) {} 55 56 NS_INLINE_DECL_REFCOUNTING_INHERITED(LinkableAccessible, AccessibleWrap) 57 58 // LocalAccessible 59 virtual void Value(nsString& aValue) const override; 60 virtual uint64_t NativeLinkState() const override; 61 virtual void TakeFocus() const override; 62 63 // ActionAccessible 64 virtual KeyBinding AccessKey() const override; 65 66 // ActionAccessible helpers 67 const LocalAccessible* ActionWalk(bool* aIsLink = nullptr, 68 bool* aIsOnclick = nullptr) const; 69 70 protected: 71 virtual ~LinkableAccessible() {} 72 }; 73 74 /** 75 * A simple accessible that gets its enumerated role. 76 */ 77 template <a11y::role R> 78 class EnumRoleAccessible : public AccessibleWrap { 79 public: 80 EnumRoleAccessible(nsIContent* aContent, DocAccessible* aDoc) 81 : AccessibleWrap(aContent, aDoc) {} 82 83 NS_IMETHOD QueryInterface(REFNSIID aIID, void** aPtr) override { 84 return LocalAccessible::QueryInterface(aIID, aPtr); 85 } 86 87 // LocalAccessible 88 virtual a11y::role NativeRole() const override { return R; } 89 90 protected: 91 virtual ~EnumRoleAccessible() {} 92 }; 93 94 /** 95 * Like EnumRoleAccessible, but with text support. 96 */ 97 template <a11y::role R> 98 class EnumRoleHyperTextAccessible : public HyperTextAccessible { 99 public: 100 EnumRoleHyperTextAccessible(nsIContent* aContent, DocAccessible* aDoc) 101 : HyperTextAccessible(aContent, aDoc) {} 102 103 // LocalAccessible 104 virtual a11y::role NativeRole() const override { return R; } 105 106 protected: 107 virtual ~EnumRoleHyperTextAccessible() {} 108 }; 109 110 /** 111 * A wrapper accessible around native accessible to connect it with 112 * crossplatform accessible tree. 113 */ 114 class DummyAccessible : public AccessibleWrap { 115 public: 116 explicit DummyAccessible(DocAccessible* aDocument = nullptr) 117 : AccessibleWrap(nullptr, aDocument) { 118 // IsDefunct() asserts if mContent is null, which is always true for 119 // DummyAccessible. We can prevent this by setting eSharedNode. 120 mStateFlags |= eSharedNode; 121 } 122 123 uint64_t NativeState() const final; 124 uint64_t NativeInteractiveState() const final; 125 uint64_t NativeLinkState() const final; 126 bool NativelyUnavailable() const final; 127 void ApplyARIAState(uint64_t* aState) const final; 128 129 protected: 130 virtual ~DummyAccessible() {} 131 }; 132 133 } // namespace a11y 134 } // namespace mozilla 135 136 #endif