Tue, 06 Jan 2015 21:39:09 +0100
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