tor-browser

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

HTMLTableAccessible.h (4995B)


      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_HTMLTableAccessible_h__
      7 #define mozilla_a11y_HTMLTableAccessible_h__
      8 
      9 #include "HyperTextAccessible.h"
     10 
     11 class nsITableCellLayout;
     12 class nsTableCellFrame;
     13 class nsTableWrapperFrame;
     14 
     15 namespace mozilla {
     16 
     17 namespace a11y {
     18 
     19 class HTMLTableAccessible;
     20 
     21 /**
     22 * HTML table cell accessible (html:td).
     23 */
     24 class HTMLTableCellAccessible : public HyperTextAccessible {
     25 public:
     26  HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
     27 
     28  // nsISupports
     29  NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableCellAccessible,
     30                                       HyperTextAccessible)
     31 
     32  // LocalAccessible
     33  virtual a11y::role NativeRole() const override;
     34  virtual uint64_t NativeState() const override;
     35  virtual already_AddRefed<AccAttributes> NativeAttributes() override;
     36 
     37 protected:
     38  virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
     39                                   AttrModType aModType,
     40                                   const nsAttrValue* aOldValue,
     41                                   uint64_t aOldState) override;
     42  // HTMLTableCellAccessible
     43 public:
     44  HTMLTableAccessible* Table() const;
     45  uint32_t ColExtent() const;
     46  uint32_t RowExtent() const;
     47 
     48  static HTMLTableCellAccessible* GetFrom(LocalAccessible* aAcc) {
     49    if (aAcc->IsHTMLTableCell()) {
     50      return static_cast<HTMLTableCellAccessible*>(aAcc);
     51    }
     52    return nullptr;
     53  }
     54 
     55 protected:
     56  virtual ~HTMLTableCellAccessible() {}
     57 };
     58 
     59 /**
     60 * HTML table row/column header accessible (html:th or html:td@scope).
     61 */
     62 class HTMLTableHeaderCellAccessible : public HTMLTableCellAccessible {
     63 public:
     64  HTMLTableHeaderCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
     65 
     66  // LocalAccessible
     67  virtual a11y::role NativeRole() const override;
     68 };
     69 
     70 /**
     71 * HTML table row accessible (html:tr).
     72 */
     73 class HTMLTableRowAccessible : public HyperTextAccessible {
     74 public:
     75  HTMLTableRowAccessible(nsIContent* aContent, DocAccessible* aDoc)
     76      : HyperTextAccessible(aContent, aDoc) {
     77    mType = eHTMLTableRowType;
     78    mGenericTypes |= eTableRow;
     79  }
     80 
     81  NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableRowAccessible,
     82                                       HyperTextAccessible)
     83 
     84 protected:
     85  virtual ~HTMLTableRowAccessible() {}
     86 };
     87 
     88 /**
     89 * HTML table accessible (html:table).
     90 */
     91 
     92 // To turn on table debugging descriptions define SHOW_LAYOUT_HEURISTIC
     93 // This allow release trunk builds to be used by testers to refine the
     94 // data vs. layout heuristic
     95 // #define SHOW_LAYOUT_HEURISTIC
     96 
     97 class HTMLTableAccessible : public HyperTextAccessible {
     98 public:
     99  HTMLTableAccessible(nsIContent* aContent, DocAccessible* aDoc)
    100      : HyperTextAccessible(aContent, aDoc) {
    101    mType = eHTMLTableType;
    102    mGenericTypes |= eTable;
    103  }
    104 
    105  NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLTableAccessible, HyperTextAccessible)
    106 
    107  // HTMLTableAccessible
    108  LocalAccessible* Caption() const;
    109  uint32_t ColCount() const;
    110  uint32_t RowCount();
    111  bool IsProbablyLayoutTable();
    112 
    113  static HTMLTableAccessible* GetFrom(LocalAccessible* aAcc) {
    114    if (aAcc->IsHTMLTable()) {
    115      return static_cast<HTMLTableAccessible*>(aAcc);
    116    }
    117    return nullptr;
    118  }
    119 
    120  // LocalAccessible
    121  virtual EDescriptionValueFlag Description(
    122      nsString& aDescription) const override;
    123  virtual uint64_t NativeState() const override;
    124  virtual already_AddRefed<AccAttributes> NativeAttributes() override;
    125  virtual Relation RelationByType(RelationType aRelationType) const override;
    126 
    127  virtual bool InsertChildAt(uint32_t aIndex, LocalAccessible* aChild) override;
    128 
    129 protected:
    130  virtual ~HTMLTableAccessible() {}
    131 
    132  // LocalAccessible
    133  virtual ENameValueFlag NativeName(nsString& aName) const override;
    134 
    135  virtual void DOMAttributeChanged(int32_t aNameSpaceID, nsAtom* aAttribute,
    136                                   AttrModType aModType,
    137                                   const nsAttrValue* aOldValue,
    138                                   uint64_t aOldState) override;
    139 
    140  // HTMLTableAccessible
    141 
    142 #ifdef SHOW_LAYOUT_HEURISTIC
    143  nsString mLayoutHeuristic;
    144 #endif
    145 
    146 private:
    147  /**
    148   * Get table wrapper frame, or return null if there is no inner table.
    149   */
    150  nsTableWrapperFrame* GetTableWrapperFrame() const;
    151 };
    152 
    153 /**
    154 * HTML caption accessible (html:caption).
    155 */
    156 class HTMLCaptionAccessible : public HyperTextAccessible {
    157 public:
    158  HTMLCaptionAccessible(nsIContent* aContent, DocAccessible* aDoc)
    159      : HyperTextAccessible(aContent, aDoc) {
    160    mType = eHTMLCaptionType;
    161  }
    162 
    163  // LocalAccessible
    164  virtual a11y::role NativeRole() const override;
    165  virtual Relation RelationByType(RelationType aRelationType) const override;
    166 
    167 protected:
    168  virtual ~HTMLCaptionAccessible() {}
    169 };
    170 
    171 }  // namespace a11y
    172 }  // namespace mozilla
    173 
    174 #endif