tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

XULElementAccessibles.h (3125B)


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