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: