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_XULElementAccessibles_h__
7 #define mozilla_a11y_XULElementAccessibles_h__
8
9 #include "HyperTextAccessibleWrap.h"
10 #include "TextLeafAccessibleWrap.h"
11
12 namespace mozilla {
13 namespace a11y {
14
15 class XULLabelTextLeafAccessible;
16
17 /**
18 * Used for XUL description and label elements.
19 */
20 class XULLabelAccessible : public HyperTextAccessibleWrap {
21 public:
22 XULLabelAccessible(nsIContent* aContent, DocAccessible* aDoc);
23
24 // Accessible
25 virtual void Shutdown() override;
26 virtual a11y::role NativeRole() const override;
27 virtual uint64_t NativeState() const override;
28 virtual Relation RelationByType(RelationType aType) const override;
29
30 void UpdateLabelValue(const nsString& aValue);
31
32 protected:
33 // Accessible
34 virtual ENameValueFlag NativeName(nsString& aName) const override;
35 virtual void DispatchClickEvent(nsIContent* aContent,
36 uint32_t aActionIndex) const override;
37
38 private:
39 RefPtr<XULLabelTextLeafAccessible> mValueTextLeaf;
40 };
41
AsXULLabel()42 inline XULLabelAccessible* Accessible::AsXULLabel() {
43 return IsXULLabel() ? static_cast<XULLabelAccessible*>(this) : nullptr;
44 }
45
46 /**
47 * Used to implement text interface on XUL label accessible in case when text
48 * is provided by @value attribute (no underlying text frame).
49 */
50 class XULLabelTextLeafAccessible final : public TextLeafAccessibleWrap {
51 public:
XULLabelTextLeafAccessible(nsIContent * aContent,DocAccessible * aDoc)52 XULLabelTextLeafAccessible(nsIContent* aContent, DocAccessible* aDoc)
53 : TextLeafAccessibleWrap(aContent, aDoc) {
54 mStateFlags |= eSharedNode;
55 }
56
~XULLabelTextLeafAccessible()57 virtual ~XULLabelTextLeafAccessible() {}
58
59 // Accessible
60 virtual a11y::role NativeRole() const override;
61 virtual uint64_t NativeState() const override;
62 };
63
64 /**
65 * Used for XUL tooltip element.
66 */
67 class XULTooltipAccessible : public LeafAccessible {
68 public:
69 XULTooltipAccessible(nsIContent* aContent, DocAccessible* aDoc);
70
71 // Accessible
72 virtual a11y::role NativeRole() const override;
73 virtual uint64_t NativeState() const override;
74 };
75
76 class XULLinkAccessible : public XULLabelAccessible {
77 public:
78 XULLinkAccessible(nsIContent* aContent, DocAccessible* aDoc);
79
80 // Accessible
81 virtual void Value(nsString& aValue) const override;
82 virtual a11y::role NativeRole() const override;
83 virtual uint64_t NativeLinkState() const override;
84
85 // ActionAccessible
86 virtual uint8_t ActionCount() const override;
87 virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override;
88 virtual bool DoAction(uint8_t aIndex) const override;
89
90 // HyperLinkAccessible
91 virtual bool IsLink() const override;
92 virtual uint32_t StartOffset() override;
93 virtual uint32_t EndOffset() override;
94 virtual already_AddRefed<nsIURI> AnchorURIAt(
95 uint32_t aAnchorIndex) const override;
96
97 protected:
98 virtual ~XULLinkAccessible();
99
100 // Accessible
101 virtual ENameValueFlag NativeName(nsString& aName) const override;
102
103 enum { eAction_Jump = 0 };
104 };
105
106 } // namespace a11y
107 } // namespace mozilla
108
109 #endif
110