|
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 |
|
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
6 |
|
7 #include "sdnDocAccessible.h" |
|
8 |
|
9 #include "ISimpleDOMDocument_i.c" |
|
10 |
|
11 using namespace mozilla; |
|
12 using namespace mozilla::a11y; |
|
13 |
|
14 //////////////////////////////////////////////////////////////////////////////// |
|
15 // sdnDocAccessible |
|
16 //////////////////////////////////////////////////////////////////////////////// |
|
17 |
|
18 IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible) |
|
19 IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument) |
|
20 IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible) |
|
21 |
|
22 STDMETHODIMP |
|
23 sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL) |
|
24 { |
|
25 A11Y_TRYBLOCK_BEGIN |
|
26 |
|
27 if (!aURL) |
|
28 return E_INVALIDARG; |
|
29 *aURL = nullptr; |
|
30 |
|
31 if (mAccessible->IsDefunct()) |
|
32 return CO_E_OBJNOTCONNECTED; |
|
33 |
|
34 nsAutoString URL; |
|
35 nsresult rv = mAccessible->GetURL(URL); |
|
36 if (NS_FAILED(rv)) |
|
37 return E_FAIL; |
|
38 |
|
39 if (URL.IsEmpty()) |
|
40 return S_FALSE; |
|
41 |
|
42 *aURL = ::SysAllocStringLen(URL.get(), URL.Length()); |
|
43 return *aURL ? S_OK : E_OUTOFMEMORY; |
|
44 |
|
45 A11Y_TRYBLOCK_END |
|
46 } |
|
47 |
|
48 STDMETHODIMP |
|
49 sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle) |
|
50 { |
|
51 A11Y_TRYBLOCK_BEGIN |
|
52 |
|
53 if (!aTitle) |
|
54 return E_INVALIDARG; |
|
55 *aTitle = nullptr; |
|
56 |
|
57 if (mAccessible->IsDefunct()) |
|
58 return CO_E_OBJNOTCONNECTED; |
|
59 |
|
60 nsAutoString title; |
|
61 nsresult rv = mAccessible->GetTitle(title); |
|
62 if (NS_FAILED(rv)) |
|
63 return E_FAIL; |
|
64 |
|
65 *aTitle = ::SysAllocStringLen(title.get(), title.Length()); |
|
66 return *aTitle ? S_OK : E_OUTOFMEMORY; |
|
67 |
|
68 A11Y_TRYBLOCK_END |
|
69 } |
|
70 |
|
71 STDMETHODIMP |
|
72 sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType) |
|
73 { |
|
74 A11Y_TRYBLOCK_BEGIN |
|
75 |
|
76 if (!aMimeType) |
|
77 return E_INVALIDARG; |
|
78 *aMimeType = nullptr; |
|
79 |
|
80 if (mAccessible->IsDefunct()) |
|
81 return CO_E_OBJNOTCONNECTED; |
|
82 |
|
83 nsAutoString mimeType; |
|
84 nsresult rv = mAccessible->GetMimeType(mimeType); |
|
85 if (NS_FAILED(rv)) |
|
86 return E_FAIL; |
|
87 |
|
88 if (mimeType.IsEmpty()) |
|
89 return S_FALSE; |
|
90 |
|
91 *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length()); |
|
92 return *aMimeType ? S_OK : E_OUTOFMEMORY; |
|
93 |
|
94 A11Y_TRYBLOCK_END |
|
95 } |
|
96 |
|
97 STDMETHODIMP |
|
98 sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType) |
|
99 { |
|
100 A11Y_TRYBLOCK_BEGIN |
|
101 |
|
102 if (!aDocType) |
|
103 return E_INVALIDARG; |
|
104 *aDocType = nullptr; |
|
105 |
|
106 if (mAccessible->IsDefunct()) |
|
107 return CO_E_OBJNOTCONNECTED; |
|
108 |
|
109 nsAutoString docType; |
|
110 nsresult rv = mAccessible->GetDocType(docType); |
|
111 if (NS_FAILED(rv)) |
|
112 return E_FAIL; |
|
113 |
|
114 if (docType.IsEmpty()) |
|
115 return S_FALSE; |
|
116 |
|
117 *aDocType = ::SysAllocStringLen(docType.get(), docType.Length()); |
|
118 return *aDocType ? S_OK : E_OUTOFMEMORY; |
|
119 |
|
120 A11Y_TRYBLOCK_END |
|
121 } |
|
122 |
|
123 STDMETHODIMP |
|
124 sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID, |
|
125 BSTR __RPC_FAR* aNameSpaceURI) |
|
126 { |
|
127 A11Y_TRYBLOCK_BEGIN |
|
128 |
|
129 if (!aNameSpaceURI) |
|
130 return E_INVALIDARG; |
|
131 *aNameSpaceURI = nullptr; |
|
132 |
|
133 if (mAccessible->IsDefunct()) |
|
134 return CO_E_OBJNOTCONNECTED; |
|
135 |
|
136 if (aNameSpaceID < 0) |
|
137 return E_INVALIDARG; // -1 is kNameSpaceID_Unknown |
|
138 |
|
139 nsAutoString nameSpaceURI; |
|
140 nsresult rv = mAccessible->GetNameSpaceURIForID(aNameSpaceID, nameSpaceURI); |
|
141 if (NS_FAILED(rv)) |
|
142 return E_FAIL; |
|
143 |
|
144 if (nameSpaceURI.IsEmpty()) |
|
145 return S_FALSE; |
|
146 |
|
147 *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(), |
|
148 nameSpaceURI.Length()); |
|
149 |
|
150 return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY; |
|
151 |
|
152 A11Y_TRYBLOCK_END |
|
153 } |
|
154 |
|
155 STDMETHODIMP |
|
156 sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes) |
|
157 { |
|
158 A11Y_TRYBLOCK_BEGIN |
|
159 |
|
160 if (!aCommaSeparatedMediaTypes) |
|
161 return E_INVALIDARG; |
|
162 *aCommaSeparatedMediaTypes = nullptr; |
|
163 |
|
164 return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL; |
|
165 |
|
166 A11Y_TRYBLOCK_END |
|
167 } |