michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* vim: set ts=2 et sw=2 tw=80: */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "sdnDocAccessible.h" michael@0: michael@0: #include "ISimpleDOMDocument_i.c" michael@0: michael@0: using namespace mozilla; michael@0: using namespace mozilla::a11y; michael@0: michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: // sdnDocAccessible michael@0: //////////////////////////////////////////////////////////////////////////////// michael@0: michael@0: IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible) michael@0: IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument) michael@0: IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible) michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aURL) michael@0: return E_INVALIDARG; michael@0: *aURL = nullptr; michael@0: michael@0: if (mAccessible->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: nsAutoString URL; michael@0: nsresult rv = mAccessible->GetURL(URL); michael@0: if (NS_FAILED(rv)) michael@0: return E_FAIL; michael@0: michael@0: if (URL.IsEmpty()) michael@0: return S_FALSE; michael@0: michael@0: *aURL = ::SysAllocStringLen(URL.get(), URL.Length()); michael@0: return *aURL ? S_OK : E_OUTOFMEMORY; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aTitle) michael@0: return E_INVALIDARG; michael@0: *aTitle = nullptr; michael@0: michael@0: if (mAccessible->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: nsAutoString title; michael@0: nsresult rv = mAccessible->GetTitle(title); michael@0: if (NS_FAILED(rv)) michael@0: return E_FAIL; michael@0: michael@0: *aTitle = ::SysAllocStringLen(title.get(), title.Length()); michael@0: return *aTitle ? S_OK : E_OUTOFMEMORY; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aMimeType) michael@0: return E_INVALIDARG; michael@0: *aMimeType = nullptr; michael@0: michael@0: if (mAccessible->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: nsAutoString mimeType; michael@0: nsresult rv = mAccessible->GetMimeType(mimeType); michael@0: if (NS_FAILED(rv)) michael@0: return E_FAIL; michael@0: michael@0: if (mimeType.IsEmpty()) michael@0: return S_FALSE; michael@0: michael@0: *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length()); michael@0: return *aMimeType ? S_OK : E_OUTOFMEMORY; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aDocType) michael@0: return E_INVALIDARG; michael@0: *aDocType = nullptr; michael@0: michael@0: if (mAccessible->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: nsAutoString docType; michael@0: nsresult rv = mAccessible->GetDocType(docType); michael@0: if (NS_FAILED(rv)) michael@0: return E_FAIL; michael@0: michael@0: if (docType.IsEmpty()) michael@0: return S_FALSE; michael@0: michael@0: *aDocType = ::SysAllocStringLen(docType.get(), docType.Length()); michael@0: return *aDocType ? S_OK : E_OUTOFMEMORY; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID, michael@0: BSTR __RPC_FAR* aNameSpaceURI) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aNameSpaceURI) michael@0: return E_INVALIDARG; michael@0: *aNameSpaceURI = nullptr; michael@0: michael@0: if (mAccessible->IsDefunct()) michael@0: return CO_E_OBJNOTCONNECTED; michael@0: michael@0: if (aNameSpaceID < 0) michael@0: return E_INVALIDARG; // -1 is kNameSpaceID_Unknown michael@0: michael@0: nsAutoString nameSpaceURI; michael@0: nsresult rv = mAccessible->GetNameSpaceURIForID(aNameSpaceID, nameSpaceURI); michael@0: if (NS_FAILED(rv)) michael@0: return E_FAIL; michael@0: michael@0: if (nameSpaceURI.IsEmpty()) michael@0: return S_FALSE; michael@0: michael@0: *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(), michael@0: nameSpaceURI.Length()); michael@0: michael@0: return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: } michael@0: michael@0: STDMETHODIMP michael@0: sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes) michael@0: { michael@0: A11Y_TRYBLOCK_BEGIN michael@0: michael@0: if (!aCommaSeparatedMediaTypes) michael@0: return E_INVALIDARG; michael@0: *aCommaSeparatedMediaTypes = nullptr; michael@0: michael@0: return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL; michael@0: michael@0: A11Y_TRYBLOCK_END michael@0: }