accessible/src/xul/XULTreeGridAccessible.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_XULTreeGridAccessible_h__
     7 #define mozilla_a11y_XULTreeGridAccessible_h__
     9 #include "XULTreeAccessible.h"
    10 #include "TableAccessible.h"
    11 #include "TableCellAccessible.h"
    12 #include "xpcAccessibleTable.h"
    13 #include "xpcAccessibleTableCell.h"
    15 namespace mozilla {
    16 namespace a11y {
    18 /**
    19  * Represents accessible for XUL tree in the case when it has multiple columns.
    20  */
    21 class XULTreeGridAccessible : public XULTreeAccessible,
    22                               public xpcAccessibleTable,
    23                               public nsIAccessibleTable,
    24                               public TableAccessible
    25 {
    26 public:
    27   XULTreeGridAccessible(nsIContent* aContent, DocAccessible* aDoc,
    28                         nsTreeBodyFrame* aTreeFrame) :
    29     XULTreeAccessible(aContent, aDoc, aTreeFrame), xpcAccessibleTable(this)
    30     { mGenericTypes |= eTable; }
    32   // nsISupports
    33   NS_DECL_ISUPPORTS_INHERITED
    35   // nsIAccessibleTable
    36   NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::)
    38   // TableAccessible
    39   virtual uint32_t ColCount();
    40   virtual uint32_t RowCount();
    41   virtual Accessible* CellAt(uint32_t aRowIndex, uint32_t aColumnIndex);
    42   virtual void ColDescription(uint32_t aColIdx, nsString& aDescription);
    43   virtual bool IsColSelected(uint32_t aColIdx);
    44   virtual bool IsRowSelected(uint32_t aRowIdx);
    45   virtual bool IsCellSelected(uint32_t aRowIdx, uint32_t aColIdx);
    46   virtual uint32_t SelectedCellCount();
    47   virtual uint32_t SelectedColCount();
    48   virtual uint32_t SelectedRowCount();
    49   virtual void SelectedCells(nsTArray<Accessible*>* aCells);
    50   virtual void SelectedCellIndices(nsTArray<uint32_t>* aCells);
    51   virtual void SelectedColIndices(nsTArray<uint32_t>* aCols);
    52   virtual void SelectedRowIndices(nsTArray<uint32_t>* aRows);
    53   virtual void SelectRow(uint32_t aRowIdx);
    54   virtual void UnselectRow(uint32_t aRowIdx);
    55   virtual Accessible* AsAccessible() { return this; }
    57   // Accessible
    58   virtual void Shutdown();
    59   virtual TableAccessible* AsTable() { return this; }
    60   virtual a11y::role NativeRole();
    62 protected:
    64   // XULTreeAccessible
    65   virtual already_AddRefed<Accessible>
    66     CreateTreeItemAccessible(int32_t aRow) const MOZ_OVERRIDE;
    67 };
    70 /**
    71  * Represents accessible for XUL tree item in the case when XUL tree has
    72  * multiple columns.
    73  */
    74 class XULTreeGridRowAccessible : public XULTreeItemAccessibleBase
    75 {
    76 public:
    77   using Accessible::GetChildAt;
    79   XULTreeGridRowAccessible(nsIContent* aContent, DocAccessible* aDoc,
    80                            Accessible* aParent, nsITreeBoxObject* aTree,
    81                            nsITreeView* aTreeView, int32_t aRow);
    83   // nsISupports and cycle collection
    84   NS_DECL_ISUPPORTS_INHERITED
    85   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridRowAccessible,
    86                                            XULTreeItemAccessibleBase)
    88   // Accessible
    89   virtual void Shutdown();
    90   virtual a11y::role NativeRole();
    91   virtual ENameValueFlag Name(nsString& aName);
    92   virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
    93                                    EWhichChildAtPoint aWhichChild);
    95   virtual Accessible* GetChildAt(uint32_t aIndex) const MOZ_OVERRIDE;
    96   virtual uint32_t ChildCount() const MOZ_OVERRIDE;
    98   // XULTreeItemAccessibleBase
    99   virtual Accessible* GetCellAccessible(nsITreeColumn* aColumn) const MOZ_OVERRIDE;
   100   virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx);
   102 protected:
   104   // Accessible
   105   virtual void CacheChildren();
   107   // XULTreeItemAccessibleBase
   108   mutable AccessibleHashtable mAccessibleCache;
   109 };
   112 /**
   113  * Represents an accessible for XUL tree cell in the case when XUL tree has
   114  * multiple columns.
   115  */
   117 #define XULTREEGRIDCELLACCESSIBLE_IMPL_CID            \
   118 {  /* 84588ad4-549c-4196-a932-4c5ca5de5dff */         \
   119   0x84588ad4,                                         \
   120   0x549c,                                             \
   121   0x4196,                                             \
   122   { 0xa9, 0x32, 0x4c, 0x5c, 0xa5, 0xde, 0x5d, 0xff }  \
   123 }
   125 class XULTreeGridCellAccessible : public LeafAccessible,
   126                                   public nsIAccessibleTableCell,
   127                                   public TableCellAccessible,
   128                                   public xpcAccessibleTableCell
   129 {
   130 public:
   132   XULTreeGridCellAccessible(nsIContent* aContent, DocAccessible* aDoc,
   133                             XULTreeGridRowAccessible* aRowAcc,
   134                             nsITreeBoxObject* aTree, nsITreeView* aTreeView,
   135                             int32_t aRow, nsITreeColumn* aColumn);
   137   // nsISupports
   138   NS_DECL_ISUPPORTS_INHERITED
   139   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible,
   140                                            LeafAccessible)
   142   // nsIAccessible
   144   NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY,
   145                        int32_t* aWidth, int32_t* aHeight);
   147   NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
   148   NS_IMETHOD DoAction(uint8_t aIndex);
   150   // nsIAccessibleTableCell
   151   NS_FORWARD_NSIACCESSIBLETABLECELL(xpcAccessibleTableCell::)
   153   // Accessible
   154   virtual TableCellAccessible* AsTableCell() { return this; }
   155   virtual void Shutdown();
   156   virtual ENameValueFlag Name(nsString& aName);
   157   virtual Accessible* FocusedChild();
   158   virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
   159   virtual int32_t IndexInParent() const;
   160   virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
   161   virtual a11y::role NativeRole();
   162   virtual uint64_t NativeState();
   163   virtual uint64_t NativeInteractiveState() const;
   165   // ActionAccessible
   166   virtual uint8_t ActionCount();
   168   // TableCellAccessible
   169   virtual TableAccessible* Table() const MOZ_OVERRIDE;
   170   virtual uint32_t ColIdx() const MOZ_OVERRIDE;
   171   virtual uint32_t RowIdx() const MOZ_OVERRIDE;
   172   virtual void ColHeaderCells(nsTArray<Accessible*>* aHeaderCells) MOZ_OVERRIDE;
   173   virtual void RowHeaderCells(nsTArray<Accessible*>* aCells) MOZ_OVERRIDE { }
   174   virtual bool Selected() MOZ_OVERRIDE;
   176   // XULTreeGridCellAccessible
   177   NS_DECLARE_STATIC_IID_ACCESSOR(XULTREEGRIDCELLACCESSIBLE_IMPL_CID)
   179   /**
   180    * Fire name or state change event if the accessible text or value has been
   181    * changed.
   182    * @return true if name has changed
   183    */
   184   bool CellInvalidated();
   186 protected:
   187   // Accessible
   188   virtual Accessible* GetSiblingAtOffset(int32_t aOffset,
   189                                          nsresult* aError = nullptr) const;
   190   virtual void DispatchClickEvent(nsIContent* aContent, uint32_t aActionIndex);
   192   // XULTreeGridCellAccessible
   194   /**
   195    * Return true if value of cell can be modified.
   196    */
   197   bool IsEditable() const;
   199   enum { eAction_Click = 0 };
   201   nsCOMPtr<nsITreeBoxObject> mTree;
   202   nsITreeView* mTreeView;
   204   int32_t mRow;
   205   nsCOMPtr<nsITreeColumn> mColumn;
   207   nsString mCachedTextEquiv;
   208 };
   210 NS_DEFINE_STATIC_IID_ACCESSOR(XULTreeGridCellAccessible,
   211                               XULTREEGRIDCELLACCESSIBLE_IMPL_CID)
   213 } // namespace a11y
   214 } // namespace mozilla
   216 #endif

mercurial