diff options
Diffstat (limited to 'accessible/windows/sdn/sdnDocAccessible.cpp')
-rw-r--r-- | accessible/windows/sdn/sdnDocAccessible.cpp | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/accessible/windows/sdn/sdnDocAccessible.cpp b/accessible/windows/sdn/sdnDocAccessible.cpp new file mode 100644 index 0000000000..07b39e66f6 --- /dev/null +++ b/accessible/windows/sdn/sdnDocAccessible.cpp @@ -0,0 +1,157 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "sdnDocAccessible.h" + +#include "ISimpleDOMDocument_i.c" + +#include "nsNameSpaceManager.h" + +using namespace mozilla; +using namespace mozilla::a11y; + +//////////////////////////////////////////////////////////////////////////////// +// sdnDocAccessible +//////////////////////////////////////////////////////////////////////////////// + +IMPL_IUNKNOWN_QUERY_HEAD(sdnDocAccessible) + IMPL_IUNKNOWN_QUERY_IFACE(ISimpleDOMDocument) +IMPL_IUNKNOWN_QUERY_TAIL_AGGREGATED(mAccessible) + +STDMETHODIMP +sdnDocAccessible::get_URL(BSTR __RPC_FAR* aURL) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aURL) + return E_INVALIDARG; + *aURL = nullptr; + + if (mAccessible->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + nsAutoString URL; + mAccessible->URL(URL); + if (URL.IsEmpty()) + return S_FALSE; + + *aURL = ::SysAllocStringLen(URL.get(), URL.Length()); + return *aURL ? S_OK : E_OUTOFMEMORY; + + A11Y_TRYBLOCK_END +} + +STDMETHODIMP +sdnDocAccessible::get_title(BSTR __RPC_FAR* aTitle) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aTitle) + return E_INVALIDARG; + *aTitle = nullptr; + + if (mAccessible->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + nsAutoString title; + mAccessible->Title(title); + *aTitle = ::SysAllocStringLen(title.get(), title.Length()); + return *aTitle ? S_OK : E_OUTOFMEMORY; + + A11Y_TRYBLOCK_END +} + +STDMETHODIMP +sdnDocAccessible::get_mimeType(BSTR __RPC_FAR* aMimeType) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aMimeType) + return E_INVALIDARG; + *aMimeType = nullptr; + + if (mAccessible->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + nsAutoString mimeType; + mAccessible->MimeType(mimeType); + if (mimeType.IsEmpty()) + return S_FALSE; + + *aMimeType = ::SysAllocStringLen(mimeType.get(), mimeType.Length()); + return *aMimeType ? S_OK : E_OUTOFMEMORY; + + A11Y_TRYBLOCK_END +} + +STDMETHODIMP +sdnDocAccessible::get_docType(BSTR __RPC_FAR* aDocType) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aDocType) + return E_INVALIDARG; + *aDocType = nullptr; + + if (mAccessible->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + nsAutoString docType; + mAccessible->DocType(docType); + if (docType.IsEmpty()) + return S_FALSE; + + *aDocType = ::SysAllocStringLen(docType.get(), docType.Length()); + return *aDocType ? S_OK : E_OUTOFMEMORY; + + A11Y_TRYBLOCK_END +} + +STDMETHODIMP +sdnDocAccessible::get_nameSpaceURIForID(short aNameSpaceID, + BSTR __RPC_FAR* aNameSpaceURI) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aNameSpaceURI) + return E_INVALIDARG; + *aNameSpaceURI = nullptr; + + if (mAccessible->IsDefunct()) + return CO_E_OBJNOTCONNECTED; + + if (aNameSpaceID < 0) + return E_INVALIDARG; // -1 is kNameSpaceID_Unknown + + nsAutoString nameSpaceURI; + nsNameSpaceManager* nameSpaceManager = nsNameSpaceManager::GetInstance(); + if (nameSpaceManager) + nameSpaceManager->GetNameSpaceURI(aNameSpaceID, nameSpaceURI); + + if (nameSpaceURI.IsEmpty()) + return S_FALSE; + + *aNameSpaceURI = ::SysAllocStringLen(nameSpaceURI.get(), + nameSpaceURI.Length()); + + return *aNameSpaceURI ? S_OK : E_OUTOFMEMORY; + + A11Y_TRYBLOCK_END +} + +STDMETHODIMP +sdnDocAccessible::put_alternateViewMediaTypes(BSTR __RPC_FAR* aCommaSeparatedMediaTypes) +{ + A11Y_TRYBLOCK_BEGIN + + if (!aCommaSeparatedMediaTypes) + return E_INVALIDARG; + *aCommaSeparatedMediaTypes = nullptr; + + return mAccessible->IsDefunct() ? CO_E_OBJNOTCONNECTED : E_NOTIMPL; + + A11Y_TRYBLOCK_END +} |