/src/mozilla-central/accessible/xpcom/nsAccessibleRelation.cpp
Line | Count | Source (jump to first uncovered line) |
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 | | #include "nsAccessibleRelation.h" |
7 | | |
8 | | #include "Relation.h" |
9 | | #include "Accessible.h" |
10 | | #include "xpcAccessibleDocument.h" |
11 | | |
12 | | #include "nsArrayUtils.h" |
13 | | #include "nsComponentManagerUtils.h" |
14 | | |
15 | | using namespace mozilla::a11y; |
16 | | |
17 | | nsAccessibleRelation::nsAccessibleRelation(uint32_t aType, |
18 | | Relation* aRel) : |
19 | | mType(aType) |
20 | 0 | { |
21 | 0 | mTargets = do_CreateInstance(NS_ARRAY_CONTRACTID); |
22 | 0 | Accessible* targetAcc = nullptr; |
23 | 0 | while ((targetAcc = aRel->Next())) |
24 | 0 | mTargets->AppendElement(static_cast<nsIAccessible*>(ToXPC(targetAcc))); |
25 | 0 | } |
26 | | |
27 | | nsAccessibleRelation::nsAccessibleRelation(uint32_t aType, |
28 | | const nsTArray<ProxyAccessible*>* aTargets) : |
29 | | mType(aType) |
30 | 0 | { |
31 | 0 | mTargets = do_CreateInstance(NS_ARRAY_CONTRACTID); |
32 | 0 | for (uint32_t idx = 0; idx < aTargets->Length(); ++idx) { |
33 | 0 | mTargets->AppendElement( |
34 | 0 | static_cast<nsIAccessible*>(ToXPC(aTargets->ElementAt(idx)))); |
35 | 0 | } |
36 | 0 | } |
37 | | |
38 | | nsAccessibleRelation::~nsAccessibleRelation() |
39 | 0 | { |
40 | 0 | } |
41 | | |
42 | | // nsISupports |
43 | | NS_IMPL_ISUPPORTS(nsAccessibleRelation, nsIAccessibleRelation) |
44 | | |
45 | | // nsIAccessibleRelation |
46 | | NS_IMETHODIMP |
47 | | nsAccessibleRelation::GetRelationType(uint32_t *aType) |
48 | 0 | { |
49 | 0 | NS_ENSURE_ARG_POINTER(aType); |
50 | 0 | *aType = mType; |
51 | 0 | return NS_OK; |
52 | 0 | } |
53 | | |
54 | | NS_IMETHODIMP |
55 | | nsAccessibleRelation::GetTargetsCount(uint32_t *aCount) |
56 | 0 | { |
57 | 0 | NS_ENSURE_ARG_POINTER(aCount); |
58 | 0 | *aCount = 0; |
59 | 0 | return mTargets->GetLength(aCount); |
60 | 0 | } |
61 | | |
62 | | NS_IMETHODIMP |
63 | | nsAccessibleRelation::GetTarget(uint32_t aIndex, nsIAccessible **aTarget) |
64 | 0 | { |
65 | 0 | NS_ENSURE_ARG_POINTER(aTarget); |
66 | 0 | nsresult rv = NS_OK; |
67 | 0 | nsCOMPtr<nsIAccessible> target = do_QueryElementAt(mTargets, aIndex, &rv); |
68 | 0 | target.forget(aTarget); |
69 | 0 | return rv; |
70 | 0 | } |
71 | | |
72 | | NS_IMETHODIMP |
73 | | nsAccessibleRelation::GetTargets(nsIArray **aTargets) |
74 | 0 | { |
75 | 0 | NS_ENSURE_ARG_POINTER(aTargets); |
76 | 0 | NS_ADDREF(*aTargets = mTargets); |
77 | 0 | return NS_OK; |
78 | 0 | } |