1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/accessible/src/windows/sdn/sdnDocAccessible.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,167 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* vim: set ts=2 et sw=2 tw=80: */ 1.6 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include "sdnDocAccessible.h" 1.11 + 1.12 +#include "ISimpleDOMDocument_i.c" 1.13 + 1.14 +using namespace mozilla; 1.15 +using namespace mozilla::a11y; 1.16 + 1.17 +//////////////////////////////////////////////////////////////////////////////// 1.18 +// sdnDocAccessible 1.19 +//////////////////////////////////////////////////////////////////////////////// 1.20 + 1.21 +IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible) 1.22 + IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument) 1.23 +IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible) 1.24 + 1.25 +STDMETHODIMP 1.26 +sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL) 1.27 +{ 1.28 + A11Y_TRYBLOCK_BEGIN 1.29 + 1.30 + if (!aURL) 1.31 + return E_INVALIDARG; 1.32 + *aURL = nullptr; 1.33 + 1.34 + if (mAccessible->IsDefunct()) 1.35 + return CO_E_OBJNOTCONNECTED; 1.36 + 1.37 + nsAutoString URL; 1.38 + nsresult rv = mAccessible->GetURL(URL); 1.39 + if (NS_FAILED(rv)) 1.40 + return E_FAIL; 1.41 + 1.42 + if (URL.IsEmpty()) 1.43 + return S_FALSE; 1.44 + 1.45 + *aURL = ::SysAllocStringLen(URL.get(), URL.Length()); 1.46 + return *aURL ? S_OK : E_OUTOFMEMORY; 1.47 + 1.48 + A11Y_TRYBLOCK_END 1.49 +} 1.50 + 1.51 +STDMETHODIMP 1.52 +sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle) 1.53 +{ 1.54 + A11Y_TRYBLOCK_BEGIN 1.55 + 1.56 + if (!aTitle) 1.57 + return E_INVALIDARG; 1.58 + *aTitle = nullptr; 1.59 + 1.60 + if (mAccessible->IsDefunct()) 1.61 + return CO_E_OBJNOTCONNECTED; 1.62 + 1.63 + nsAutoString title; 1.64 + nsresult rv = mAccessible->GetTitle(title); 1.65 + if (NS_FAILED(rv)) 1.66 + return E_FAIL; 1.67 + 1.68 + *aTitle = ::SysAllocStringLen(title.get(), title.Length()); 1.69 + return *aTitle ? S_OK : E_OUTOFMEMORY; 1.70 + 1.71 + A11Y_TRYBLOCK_END 1.72 +} 1.73 + 1.74 +STDMETHODIMP 1.75 +sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType) 1.76 +{ 1.77 + A11Y_TRYBLOCK_BEGIN 1.78 + 1.79 + if (!aMimeType) 1.80 + return E_INVALIDARG; 1.81 + *aMimeType = nullptr; 1.82 + 1.83 + if (mAccessible->IsDefunct()) 1.84 + return CO_E_OBJNOTCONNECTED; 1.85 + 1.86 + nsAutoString mimeType; 1.87 + nsresult rv = mAccessible->GetMimeType(mimeType); 1.88 + if (NS_FAILED(rv)) 1.89 + return E_FAIL; 1.90 + 1.91 + if (mimeType.IsEmpty()) 1.92 + return S_FALSE; 1.93 + 1.94 + *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length()); 1.95 + return *aMimeType ? S_OK : E_OUTOFMEMORY; 1.96 + 1.97 + A11Y_TRYBLOCK_END 1.98 +} 1.99 + 1.100 +STDMETHODIMP 1.101 +sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType) 1.102 +{ 1.103 + A11Y_TRYBLOCK_BEGIN 1.104 + 1.105 + if (!aDocType) 1.106 + return E_INVALIDARG; 1.107 + *aDocType = nullptr; 1.108 + 1.109 + if (mAccessible->IsDefunct()) 1.110 + return CO_E_OBJNOTCONNECTED; 1.111 + 1.112 + nsAutoString docType; 1.113 + nsresult rv = mAccessible->GetDocType(docType); 1.114 + if (NS_FAILED(rv)) 1.115 + return E_FAIL; 1.116 + 1.117 + if (docType.IsEmpty()) 1.118 + return S_FALSE; 1.119 + 1.120 + *aDocType = ::SysAllocStringLen(docType.get(), docType.Length()); 1.121 + return *aDocType ? S_OK : E_OUTOFMEMORY; 1.122 + 1.123 + A11Y_TRYBLOCK_END 1.124 +} 1.125 + 1.126 +STDMETHODIMP 1.127 +sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID, 1.128 + BSTR __RPC_FAR* aNameSpaceURI) 1.129 +{ 1.130 + A11Y_TRYBLOCK_BEGIN 1.131 + 1.132 + if (!aNameSpaceURI) 1.133 + return E_INVALIDARG; 1.134 + *aNameSpaceURI = nullptr; 1.135 + 1.136 + if (mAccessible->IsDefunct()) 1.137 + return CO_E_OBJNOTCONNECTED; 1.138 + 1.139 + if (aNameSpaceID < 0) 1.140 + return E_INVALIDARG; // -1 is kNameSpaceID_Unknown 1.141 + 1.142 + nsAutoString nameSpaceURI; 1.143 + nsresult rv = mAccessible->GetNameSpaceURIForID(aNameSpaceID, nameSpaceURI); 1.144 + if (NS_FAILED(rv)) 1.145 + return E_FAIL; 1.146 + 1.147 + if (nameSpaceURI.IsEmpty()) 1.148 + return S_FALSE; 1.149 + 1.150 + *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(), 1.151 + nameSpaceURI.Length()); 1.152 + 1.153 + return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY; 1.154 + 1.155 + A11Y_TRYBLOCK_END 1.156 +} 1.157 + 1.158 +STDMETHODIMP 1.159 +sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes) 1.160 +{ 1.161 + A11Y_TRYBLOCK_BEGIN 1.162 + 1.163 + if (!aCommaSeparatedMediaTypes) 1.164 + return E_INVALIDARG; 1.165 + *aCommaSeparatedMediaTypes = nullptr; 1.166 + 1.167 + return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL; 1.168 + 1.169 + A11Y_TRYBLOCK_END 1.170 +}