diff --git a/accessible/src/html/nsHyperTextAccessible.cpp b/accessible/src/html/nsHyperTextAccessible.cpp index 7b0acd75d14d..cccae581f333 100644 --- a/accessible/src/html/nsHyperTextAccessible.cpp +++ b/accessible/src/html/nsHyperTextAccessible.cpp @@ -93,15 +93,9 @@ nsresult nsHyperTextAccessible::QueryInterface(REFNSIID aIID, void** aInstancePt return NS_OK; } - if (mRoleMapEntry && - (mRoleMapEntry->role == roles::GRAPHIC || - mRoleMapEntry->role == roles::IMAGE_MAP || - mRoleMapEntry->role == roles::SLIDER || - mRoleMapEntry->role == roles::PROGRESSBAR || - mRoleMapEntry->role == roles::SEPARATOR)) { - // ARIA roles that these interfaces are not appropriate for + // ARIA roles that these interfaces are not appropriate for. + if (!IsTextRole()) return nsAccessible::QueryInterface(aIID, aInstancePtr); - } if (aIID.Equals(NS_GET_IID(nsIAccessibleText))) { *aInstancePtr = static_cast(this); @@ -2398,3 +2392,17 @@ nsHyperTextAccessible::GetSpellTextAttribute(nsINode* aNode, return NS_OK; } + +bool +nsHyperTextAccessible::IsTextRole() +{ + if (mRoleMapEntry && + (mRoleMapEntry->role == roles::GRAPHIC || + mRoleMapEntry->role == roles::IMAGE_MAP || + mRoleMapEntry->role == roles::SLIDER || + mRoleMapEntry->role == roles::PROGRESSBAR || + mRoleMapEntry->role == roles::SEPARATOR)) + return false; + + return true; +} diff --git a/accessible/src/html/nsHyperTextAccessible.h b/accessible/src/html/nsHyperTextAccessible.h index c64e7af05417..cc8c83a5c5c2 100644 --- a/accessible/src/html/nsHyperTextAccessible.h +++ b/accessible/src/html/nsHyperTextAccessible.h @@ -201,6 +201,12 @@ public: nsIDOMNode **aEndNode, PRInt32 *aEndOffset); + /** + * Return true if the used ARIA role (if any) allows the hypertext accessible + * to expose text interfaces. + */ + bool IsTextRole(); + ////////////////////////////////////////////////////////////////////////////// // TextAccessible diff --git a/accessible/src/msaa/Makefile.in b/accessible/src/msaa/Makefile.in index baaf45dc5b6b..02ce97d75a17 100644 --- a/accessible/src/msaa/Makefile.in +++ b/accessible/src/msaa/Makefile.in @@ -69,7 +69,7 @@ CPPSRCS = \ CAccessibleText.cpp \ CAccessibleEditableText.cpp \ CAccessibleHyperlink.cpp \ - CAccessibleHypertext.cpp \ + ia2AccessibleHypertext.cpp \ ia2AccessibleRelation.cpp \ CAccessibleTable.cpp \ CAccessibleTableCell.cpp \ @@ -98,7 +98,7 @@ EXPORTS = \ CAccessibleText.h \ CAccessibleEditableText.h \ CAccessibleHyperlink.h \ - CAccessibleHypertext.h \ + ia2AccessibleHypertext.h \ CAccessibleTable.h \ CAccessibleTableCell.h \ CAccessibleValue.h \ diff --git a/accessible/src/msaa/CAccessibleHypertext.cpp b/accessible/src/msaa/ia2AccessibleHypertext.cpp similarity index 78% rename from accessible/src/msaa/CAccessibleHypertext.cpp rename to accessible/src/msaa/ia2AccessibleHypertext.cpp index 67eedf8dda35..528f480d810e 100644 --- a/accessible/src/msaa/CAccessibleHypertext.cpp +++ b/accessible/src/msaa/ia2AccessibleHypertext.cpp @@ -38,26 +38,26 @@ * * ***** END LICENSE BLOCK ***** */ -#include "CAccessibleHypertext.h" +#include "ia2AccessibleHypertext.h" #include "AccessibleHypertext_i.c" -#include "nsHyperTextAccessible.h" +#include "nsHyperTextAccessibleWrap.h" // IUnknown STDMETHODIMP -CAccessibleHypertext::QueryInterface(REFIID iid, void** ppv) +ia2AccessibleHypertext::QueryInterface(REFIID iid, void** ppv) { *ppv = NULL; if (IID_IAccessibleHypertext == iid) { - nsCOMPtr hyperAcc(do_QueryObject(this)); - if (!hyperAcc) - return E_NOINTERFACE; - - *ppv = static_cast(this); - (reinterpret_cast(*ppv))->AddRef(); - return S_OK; + nsHyperTextAccessibleWrap* hyperAcc = static_cast(this); + if (hyperAcc->IsTextRole()) { + *ppv = static_cast(this); + (reinterpret_cast(*ppv))->AddRef(); + return S_OK; + } + return E_NOINTERFACE; } return CAccessibleText::QueryInterface(iid, ppv); @@ -66,12 +66,12 @@ CAccessibleHypertext::QueryInterface(REFIID iid, void** ppv) // IAccessibleHypertext STDMETHODIMP -CAccessibleHypertext::get_nHyperlinks(long *aHyperlinkCount) +ia2AccessibleHypertext::get_nHyperlinks(long* aHyperlinkCount) { __try { *aHyperlinkCount = 0; - nsRefPtr hyperText = do_QueryObject(this); + nsHyperTextAccessibleWrap* hyperText = static_cast(this); if (hyperText->IsDefunct()) return CO_E_OBJNOTCONNECTED; @@ -83,13 +83,13 @@ __try { } STDMETHODIMP -CAccessibleHypertext::get_hyperlink(long aLinkIndex, - IAccessibleHyperlink **aHyperlink) +ia2AccessibleHypertext::get_hyperlink(long aLinkIndex, + IAccessibleHyperlink** aHyperlink) { __try { *aHyperlink = NULL; - nsRefPtr hyperText = do_QueryObject(this); + nsHyperTextAccessibleWrap* hyperText = static_cast(this); if (hyperText->IsDefunct()) return CO_E_OBJNOTCONNECTED; @@ -112,12 +112,12 @@ __try { } STDMETHODIMP -CAccessibleHypertext::get_hyperlinkIndex(long aCharIndex, long *aHyperlinkIndex) +ia2AccessibleHypertext::get_hyperlinkIndex(long aCharIndex, long* aHyperlinkIndex) { __try { *aHyperlinkIndex = 0; - nsRefPtr hyperAcc(do_QueryObject(this)); + nsHyperTextAccessibleWrap* hyperAcc = static_cast(this); if (hyperAcc->IsDefunct()) return CO_E_OBJNOTCONNECTED; diff --git a/accessible/src/msaa/CAccessibleHypertext.h b/accessible/src/msaa/ia2AccessibleHypertext.h similarity index 90% rename from accessible/src/msaa/CAccessibleHypertext.h rename to accessible/src/msaa/ia2AccessibleHypertext.h index d354dfcb3266..2aaf2bbc2a28 100644 --- a/accessible/src/msaa/CAccessibleHypertext.h +++ b/accessible/src/msaa/ia2AccessibleHypertext.h @@ -46,8 +46,8 @@ #include "CAccessibleText.h" #include "AccessibleHypertext.h" -class CAccessibleHypertext: public CAccessibleText, - public IAccessibleHypertext +class ia2AccessibleHypertext : public CAccessibleText, + public IAccessibleHypertext { public: @@ -59,15 +59,15 @@ public: // IAccessibleHypertext virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks( - /* [retval][out] */ long *hyperlinkCount); + /* [retval][out] */ long* hyperlinkCount); virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink( /* [in] */ long index, - /* [retval][out] */ IAccessibleHyperlink **hyperlink); + /* [retval][out] */ IAccessibleHyperlink** hyperlink); virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex( /* [in] */ long charIndex, - /* [retval][out] */ long *hyperlinkIndex); + /* [retval][out] */ long* hyperlinkIndex); // nsISupports NS_IMETHOD QueryInterface(const nsIID& uuid, void** result) = 0; diff --git a/accessible/src/msaa/nsHyperTextAccessibleWrap.cpp b/accessible/src/msaa/nsHyperTextAccessibleWrap.cpp index 5621af381bf1..adcba94dd953 100644 --- a/accessible/src/msaa/nsHyperTextAccessibleWrap.cpp +++ b/accessible/src/msaa/nsHyperTextAccessibleWrap.cpp @@ -47,7 +47,7 @@ NS_IMPL_ISUPPORTS_INHERITED0(nsHyperTextAccessibleWrap, IMPL_IUNKNOWN_INHERITED2(nsHyperTextAccessibleWrap, nsAccessibleWrap, - CAccessibleHypertext, + ia2AccessibleHypertext, CAccessibleEditableText); nsresult diff --git a/accessible/src/msaa/nsHyperTextAccessibleWrap.h b/accessible/src/msaa/nsHyperTextAccessibleWrap.h index 82bde6ebb006..4282326c7aae 100644 --- a/accessible/src/msaa/nsHyperTextAccessibleWrap.h +++ b/accessible/src/msaa/nsHyperTextAccessibleWrap.h @@ -44,10 +44,10 @@ #include "nsHyperTextAccessible.h" #include "CAccessibleText.h" #include "CAccessibleEditableText.h" -#include "CAccessibleHyperText.h" +#include "ia2AccessibleHyperText.h" class nsHyperTextAccessibleWrap : public nsHyperTextAccessible, - public CAccessibleHypertext, + public ia2AccessibleHypertext, public CAccessibleEditableText { public: