Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
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/. */
7 #include "sdnDocAccessible.h"
9 #include "ISimpleDOMDocument_i.c"
11 using namespace mozilla;
12 using namespace mozilla::a11y;
14 ////////////////////////////////////////////////////////////////////////////////
15 // sdnDocAccessible
16 ////////////////////////////////////////////////////////////////////////////////
18 IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible)
19 IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument)
20 IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible)
22 STDMETHODIMP
23 sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL)
24 {
25 A11Y_TRYBLOCK_BEGIN
27 if (!aURL)
28 return E_INVALIDARG;
29 *aURL = nullptr;
31 if (mAccessible->IsDefunct())
32 return CO_E_OBJNOTCONNECTED;
34 nsAutoString URL;
35 nsresult rv = mAccessible->GetURL(URL);
36 if (NS_FAILED(rv))
37 return E_FAIL;
39 if (URL.IsEmpty())
40 return S_FALSE;
42 *aURL = ::SysAllocStringLen(URL.get(), URL.Length());
43 return *aURL ? S_OK : E_OUTOFMEMORY;
45 A11Y_TRYBLOCK_END
46 }
48 STDMETHODIMP
49 sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle)
50 {
51 A11Y_TRYBLOCK_BEGIN
53 if (!aTitle)
54 return E_INVALIDARG;
55 *aTitle = nullptr;
57 if (mAccessible->IsDefunct())
58 return CO_E_OBJNOTCONNECTED;
60 nsAutoString title;
61 nsresult rv = mAccessible->GetTitle(title);
62 if (NS_FAILED(rv))
63 return E_FAIL;
65 *aTitle = ::SysAllocStringLen(title.get(), title.Length());
66 return *aTitle ? S_OK : E_OUTOFMEMORY;
68 A11Y_TRYBLOCK_END
69 }
71 STDMETHODIMP
72 sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType)
73 {
74 A11Y_TRYBLOCK_BEGIN
76 if (!aMimeType)
77 return E_INVALIDARG;
78 *aMimeType = nullptr;
80 if (mAccessible->IsDefunct())
81 return CO_E_OBJNOTCONNECTED;
83 nsAutoString mimeType;
84 nsresult rv = mAccessible->GetMimeType(mimeType);
85 if (NS_FAILED(rv))
86 return E_FAIL;
88 if (mimeType.IsEmpty())
89 return S_FALSE;
91 *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length());
92 return *aMimeType ? S_OK : E_OUTOFMEMORY;
94 A11Y_TRYBLOCK_END
95 }
97 STDMETHODIMP
98 sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType)
99 {
100 A11Y_TRYBLOCK_BEGIN
102 if (!aDocType)
103 return E_INVALIDARG;
104 *aDocType = nullptr;
106 if (mAccessible->IsDefunct())
107 return CO_E_OBJNOTCONNECTED;
109 nsAutoString docType;
110 nsresult rv = mAccessible->GetDocType(docType);
111 if (NS_FAILED(rv))
112 return E_FAIL;
114 if (docType.IsEmpty())
115 return S_FALSE;
117 *aDocType = ::SysAllocStringLen(docType.get(), docType.Length());
118 return *aDocType ? S_OK : E_OUTOFMEMORY;
120 A11Y_TRYBLOCK_END
121 }
123 STDMETHODIMP
124 sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID,
125 BSTR __RPC_FAR* aNameSpaceURI)
126 {
127 A11Y_TRYBLOCK_BEGIN
129 if (!aNameSpaceURI)
130 return E_INVALIDARG;
131 *aNameSpaceURI = nullptr;
133 if (mAccessible->IsDefunct())
134 return CO_E_OBJNOTCONNECTED;
136 if (aNameSpaceID < 0)
137 return E_INVALIDARG; // -1 is kNameSpaceID_Unknown
139 nsAutoString nameSpaceURI;
140 nsresult rv = mAccessible->GetNameSpaceURIForID(aNameSpaceID, nameSpaceURI);
141 if (NS_FAILED(rv))
142 return E_FAIL;
144 if (nameSpaceURI.IsEmpty())
145 return S_FALSE;
147 *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(),
148 nameSpaceURI.Length());
150 return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY;
152 A11Y_TRYBLOCK_END
153 }
155 STDMETHODIMP
156 sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes)
157 {
158 A11Y_TRYBLOCK_BEGIN
160 if (!aCommaSeparatedMediaTypes)
161 return E_INVALIDARG;
162 *aCommaSeparatedMediaTypes = nullptr;
164 return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL;
166 A11Y_TRYBLOCK_END
167 }