accessible/src/html/HTMLTableAccessible.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     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/. */
     6 #ifndef mozilla_a11y_HTMLTableAccessible_h__
     7 #define mozilla_a11y_HTMLTableAccessible_h__
     9 #include "HyperTextAccessibleWrap.h"
    10 #include "nsIAccessibleTable.h"
    11 #include "TableAccessible.h"
    12 #include "TableCellAccessible.h"
    13 #include "xpcAccessibleTable.h"
    14 #include "xpcAccessibleTableCell.h"
    16 class nsITableLayout;
    17 class nsITableCellLayout;
    19 namespace mozilla {
    20 namespace a11y {
    22 /**
    23  * HTML table cell accessible (html:td).
    24  */
    25 class HTMLTableCellAccessible : public HyperTextAccessibleWrap,
    26                                 public nsIAccessibleTableCell,
    27                                 public TableCellAccessible,
    28                                 public xpcAccessibleTableCell
    29 {
    30 public:
    31   HTMLTableCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
    33   // nsISupports
    34   NS_DECL_ISUPPORTS_INHERITED
    36   // nsIAccessibleTableCell
    37   NS_FORWARD_NSIACCESSIBLETABLECELL(xpcAccessibleTableCell::)
    39   // Accessible
    40   virtual TableCellAccessible* AsTableCell() { return this; }
    41   virtual void Shutdown();
    42   virtual a11y::role NativeRole();
    43   virtual uint64_t NativeState();
    44   virtual uint64_t NativeInteractiveState() const;
    45   virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
    47   // TableCellAccessible
    48   virtual TableAccessible* Table() const MOZ_OVERRIDE;
    49   virtual uint32_t ColIdx() const MOZ_OVERRIDE;
    50   virtual uint32_t RowIdx() const MOZ_OVERRIDE;
    51   virtual uint32_t ColExtent() const MOZ_OVERRIDE;
    52   virtual uint32_t RowExtent() const MOZ_OVERRIDE;
    53   virtual void ColHeaderCells(nsTArray<Accessible*>* aCells) MOZ_OVERRIDE;
    54   virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) MOZ_OVERRIDE;
    55   virtual bool Selected() MOZ_OVERRIDE;
    57 protected:
    58   /**
    59    * Return host table accessible.
    60    */
    61   already_AddRefed<nsIAccessibleTable> GetTableAccessible();
    63   /**
    64    * Return nsITableCellLayout of the table cell frame.
    65    */
    66   nsITableCellLayout* GetCellLayout() const;
    68   /**
    69    * Return row and column indices of the cell.
    70    */
    71   nsresult GetCellIndexes(int32_t& aRowIdx, int32_t& aColIdx) const;
    72 };
    75 /**
    76  * HTML table row/column header accessible (html:th or html:td@scope).
    77  */
    78 class HTMLTableHeaderCellAccessible : public HTMLTableCellAccessible
    79 {
    80 public:
    81   HTMLTableHeaderCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
    83   // Accessible
    84   virtual a11y::role NativeRole();
    85 };
    88 /**
    89  * HTML table row accessible (html:tr).
    90  */
    91 class HTMLTableRowAccessible : public AccessibleWrap
    92 {
    93 public:
    94   HTMLTableRowAccessible(nsIContent* aContent, DocAccessible* aDoc) :
    95     AccessibleWrap(aContent, aDoc)
    96   {
    97     mType = eHTMLTableRowType;
    98     mGenericTypes |= eTableRow;
    99   }
   100   virtual ~HTMLTableRowAccessible() { }
   102   NS_DECL_ISUPPORTS_INHERITED
   104   // Accessible
   105   virtual a11y::role NativeRole();
   106 };
   109 /**
   110  * HTML table accessible (html:table).
   111  */
   113 // To turn on table debugging descriptions define SHOW_LAYOUT_HEURISTIC
   114 // This allow release trunk builds to be used by testers to refine the
   115 // data vs. layout heuristic
   116 // #define SHOW_LAYOUT_HEURISTIC
   118 class HTMLTableAccessible : public AccessibleWrap,
   119                             public xpcAccessibleTable,
   120                             public nsIAccessibleTable,
   121                             public TableAccessible
   122 {
   123 public:
   124   HTMLTableAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   125     AccessibleWrap(aContent, aDoc), xpcAccessibleTable(this)
   126   {
   127     mType = eHTMLTableType;
   128     mGenericTypes |= eTable;
   129   }
   131   NS_DECL_ISUPPORTS_INHERITED
   133   // nsIAccessible Table
   134   NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::)
   136   // TableAccessible
   137   virtual Accessible* Caption();
   138   virtual void Summary(nsString& aSummary);
   139   virtual uint32_t ColCount();
   140   virtual uint32_t RowCount();
   141   virtual Accessible* CellAt(uint32_t aRowIndex, uint32_t aColumnIndex);
   142   virtual int32_t CellIndexAt(uint32_t aRowIdx, uint32_t aColIdx);
   143   virtual int32_t ColIndexAt(uint32_t aCellIdx);
   144   virtual int32_t RowIndexAt(uint32_t aCellIdx);
   145   virtual void RowAndColIndicesAt(uint32_t aCellIdx, int32_t* aRowIdx,
   146                                   int32_t* aColIdx);
   147   virtual uint32_t ColExtentAt(uint32_t aRowIdx, uint32_t aColIdx);
   148   virtual uint32_t RowExtentAt(uint32_t aRowIdx, uint32_t aColIdx);
   149   virtual bool IsColSelected(uint32_t aColIdx);
   150   virtual bool IsRowSelected(uint32_t aRowIdx);
   151   virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx);
   152   virtual uint32_t SelectedCellCount();
   153   virtual uint32_t SelectedColCount();
   154   virtual uint32_t SelectedRowCount();
   155   virtual void SelectedCells(nsTArray<Accessible*>* aCells);
   156   virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells);
   157   virtual void SelectedColIndices(nsTArray<uint32_t>* aCols);
   158   virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows);
   159   virtual void SelectCol(uint32_t aColIdx);
   160   virtual void SelectRow(uint32_t aRowIdx);
   161   virtual void UnselectCol(uint32_t aColIdx);
   162   virtual void UnselectRow(uint32_t aRowIdx);
   163   virtual bool IsProbablyLayoutTable();
   164   virtual Accessible* AsAccessible() { return this; }
   166   // Accessible
   167   virtual void Shutdown();
   168   virtual TableAccessible* AsTable() { return this; }
   169   virtual void Description(nsString& aDescription);
   170   virtual a11y::role NativeRole();
   171   virtual uint64_t NativeState();
   172   virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
   173   virtual Relation RelationByType(RelationType aRelationType) MOZ_OVERRIDE;
   175 protected:
   176   // Accessible
   177   virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
   178   virtual void CacheChildren();
   180   // HTMLTableAccessible
   182   /**
   183    * Add row or column to selection.
   184    *
   185    * @param aIndex   [in] index of row or column to be selected
   186    * @param aTarget  [in] indicates what should be selected, either row or column
   187    *                  (see nsISelectionPrivate)
   188    */
   189   nsresult AddRowOrColumnToSelection(int32_t aIndex, uint32_t aTarget);
   191   /**
   192    * Removes rows or columns at the given index or outside it from selection.
   193    *
   194    * @param  aIndex    [in] row or column index
   195    * @param  aTarget   [in] indicates whether row or column should unselected
   196    * @param  aIsOuter  [in] indicates whether all rows or column excepting
   197    *                    the given one should be unselected or the given one
   198    *                    should be unselected only
   199    */
   200   nsresult RemoveRowsOrColumnsFromSelection(int32_t aIndex,
   201                                             uint32_t aTarget,
   202                                             bool aIsOuter);
   204   /**
   205    * Return true if table has an element with the given tag name.
   206    *
   207    * @param  aTagName     [in] tag name of searched element
   208    * @param  aAllowEmpty  [in, optional] points if found element can be empty
   209    *                       or contain whitespace text only.
   210    */
   211   bool HasDescendant(const nsAString& aTagName, bool aAllowEmpty = true);
   213 #ifdef SHOW_LAYOUT_HEURISTIC
   214   nsString mLayoutHeuristic;
   215 #endif
   216 };
   218 /**
   219  * HTML caption accessible (html:caption).
   220  */
   221 class HTMLCaptionAccessible : public HyperTextAccessibleWrap
   222 {
   223 public:
   224   HTMLCaptionAccessible(nsIContent* aContent, DocAccessible* aDoc) :
   225     HyperTextAccessibleWrap(aContent, aDoc) { }
   226   virtual ~HTMLCaptionAccessible() { }
   228   // nsIAccessible
   230   // Accessible
   231   virtual a11y::role NativeRole();
   232   virtual Relation RelationByType(RelationType aRelationType) MOZ_OVERRIDE;
   233 };
   235 } // namespace a11y
   236 } // namespace mozilla
   238 #endif

mercurial