tor-browser

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

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