Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/accessible/xpcom/xpcAccessibleTableCell.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
5
 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#include "xpcAccessibleTableCell.h"
8
9
#include "Accessible.h"
10
#include "nsIAccessibleTable.h"
11
#include "TableAccessible.h"
12
#include "TableCellAccessible.h"
13
#include "xpcAccessibleDocument.h"
14
15
#include "nsComponentManagerUtils.h"
16
#include "nsIMutableArray.h"
17
18
using namespace mozilla;
19
using namespace mozilla::a11y;
20
21
////////////////////////////////////////////////////////////////////////////////
22
// nsISupports
23
24
NS_IMPL_ISUPPORTS_INHERITED(xpcAccessibleTableCell,
25
                            xpcAccessibleHyperText,
26
                            nsIAccessibleTableCell)
27
28
////////////////////////////////////////////////////////////////////////////////
29
// nsIAccessibleTableCell
30
31
NS_IMETHODIMP
32
xpcAccessibleTableCell::GetTable(nsIAccessibleTable** aTable)
33
0
{
34
0
  NS_ENSURE_ARG_POINTER(aTable);
35
0
  *aTable = nullptr;
36
0
37
0
  if (!Intl())
38
0
    return NS_ERROR_FAILURE;
39
0
40
0
  TableAccessible* table = Intl()->Table();
41
0
  if (!table)
42
0
    return NS_ERROR_FAILURE;
43
0
44
0
  nsCOMPtr<nsIAccessibleTable> xpcTable =
45
0
    do_QueryInterface(static_cast<nsIAccessible*>(ToXPC(table->AsAccessible())));
46
0
  xpcTable.forget(aTable);
47
0
  return NS_OK;
48
0
}
49
50
NS_IMETHODIMP
51
xpcAccessibleTableCell::GetColumnIndex(int32_t* aColIdx)
52
0
{
53
0
  NS_ENSURE_ARG_POINTER(aColIdx);
54
0
  *aColIdx = -1;
55
0
56
0
  if (!Intl())
57
0
    return NS_ERROR_FAILURE;
58
0
59
0
  *aColIdx = Intl()->ColIdx();
60
0
  return NS_OK;
61
0
}
62
63
NS_IMETHODIMP
64
xpcAccessibleTableCell::GetRowIndex(int32_t* aRowIdx)
65
0
{
66
0
  NS_ENSURE_ARG_POINTER(aRowIdx);
67
0
  *aRowIdx = -1;
68
0
69
0
  if (!Intl())
70
0
    return NS_ERROR_FAILURE;
71
0
72
0
  *aRowIdx = Intl()->RowIdx();
73
0
  return NS_OK;
74
0
}
75
76
NS_IMETHODIMP
77
xpcAccessibleTableCell::GetColumnExtent(int32_t* aExtent)
78
0
{
79
0
  NS_ENSURE_ARG_POINTER(aExtent);
80
0
  *aExtent = -1;
81
0
82
0
  if (!Intl())
83
0
    return NS_ERROR_FAILURE;
84
0
85
0
  *aExtent = Intl()->ColExtent();
86
0
  return NS_OK;
87
0
}
88
89
NS_IMETHODIMP
90
xpcAccessibleTableCell::GetRowExtent(int32_t* aExtent)
91
0
{
92
0
  NS_ENSURE_ARG_POINTER(aExtent);
93
0
  *aExtent = -1;
94
0
95
0
  if (!Intl())
96
0
    return NS_ERROR_FAILURE;
97
0
98
0
  *aExtent = Intl()->RowExtent();
99
0
  return NS_OK;
100
0
}
101
102
NS_IMETHODIMP
103
xpcAccessibleTableCell::GetColumnHeaderCells(nsIArray** aHeaderCells)
104
0
{
105
0
  NS_ENSURE_ARG_POINTER(aHeaderCells);
106
0
  *aHeaderCells = nullptr;
107
0
108
0
  if (!Intl())
109
0
    return NS_ERROR_FAILURE;
110
0
111
0
  AutoTArray<Accessible*, 10> headerCells;
112
0
  Intl()->ColHeaderCells(&headerCells);
113
0
114
0
  nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID);
115
0
  NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE);
116
0
117
0
  for (uint32_t idx = 0; idx < headerCells.Length(); idx++) {
118
0
    cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx])));
119
0
  }
120
0
121
0
  NS_ADDREF(*aHeaderCells = cells);
122
0
  return NS_OK;
123
0
}
124
125
NS_IMETHODIMP
126
xpcAccessibleTableCell::GetRowHeaderCells(nsIArray** aHeaderCells)
127
0
{
128
0
  NS_ENSURE_ARG_POINTER(aHeaderCells);
129
0
  *aHeaderCells = nullptr;
130
0
131
0
  if (!Intl())
132
0
    return NS_ERROR_FAILURE;
133
0
134
0
  AutoTArray<Accessible*, 10> headerCells;
135
0
  Intl()->RowHeaderCells(&headerCells);
136
0
137
0
  nsCOMPtr<nsIMutableArray> cells = do_CreateInstance(NS_ARRAY_CONTRACTID);
138
0
  NS_ENSURE_TRUE(cells, NS_ERROR_FAILURE);
139
0
140
0
  for (uint32_t idx = 0; idx < headerCells.Length(); idx++) {
141
0
    cells->AppendElement(static_cast<nsIAccessible*>(ToXPC(headerCells[idx])));
142
0
  }
143
0
144
0
  NS_ADDREF(*aHeaderCells = cells);
145
0
  return NS_OK;
146
0
}
147
148
NS_IMETHODIMP
149
xpcAccessibleTableCell::IsSelected(bool* aSelected)
150
0
{
151
0
  NS_ENSURE_ARG_POINTER(aSelected);
152
0
  *aSelected = false;
153
0
154
0
  if (!Intl())
155
0
    return NS_ERROR_FAILURE;
156
0
157
0
  *aSelected = Intl()->Selected();
158
0
  return NS_OK;
159
0
}