Bug 1064877 - dexpcomify Accessible class, r=tbsaunde

This commit is contained in:
Alexander Surkov 2014-09-16 13:30:23 -04:00
parent 1ecd8c94cd
commit 0f5ef2e3f7
70 changed files with 1543 additions and 1712 deletions

View File

@ -21,11 +21,7 @@ static gboolean
doActionCB(AtkAction *aAction, gint aActionIndex)
{
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aAction));
if (!accWrap)
return FALSE;
nsresult rv = accWrap->DoAction(aActionIndex);
return (NS_FAILED(rv)) ? FALSE : TRUE;
return accWrap && accWrap->DoAction(aActionIndex);
}
static gint
@ -51,14 +47,13 @@ getActionDescriptionCB(AtkAction *aAction, gint aActionIndex)
static const gchar*
getActionNameCB(AtkAction *aAction, gint aActionIndex)
{
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aAction));
if (!accWrap)
return nullptr;
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aAction));
if (!accWrap)
return nullptr;
nsAutoString autoStr;
nsresult rv = accWrap->GetActionName(aActionIndex, autoStr);
NS_ENSURE_SUCCESS(rv, nullptr);
return AccessibleWrap::ReturnString(autoStr);
nsAutoString autoStr;
accWrap->ActionNameAt(aActionIndex, autoStr);
return AccessibleWrap::ReturnString(autoStr);
}
static const gchar*

View File

@ -39,8 +39,8 @@ grabFocusCB(AtkComponent* aComponent)
if (!accWrap)
return FALSE;
nsresult rv = accWrap->TakeFocus();
return (NS_FAILED(rv)) ? FALSE : TRUE;
accWrap->TakeFocus();
return TRUE;
}
}
@ -80,23 +80,21 @@ getExtentsHelper(AccessibleWrap* aAccWrap,
if (!aAccWrap || aAccWrap->IsDefunct())
return;
int32_t x = 0, y = 0, width = 0, height = 0;
// Returned in screen coordinates
nsresult rv = aAccWrap->GetBounds(&x, &y, &width, &height);
if (NS_FAILED(rv))
nsIntRect screenRect = aAccWrap->Bounds();
if (screenRect.IsEmpty())
return;
if (aCoordType == ATK_XY_WINDOW) {
nsIntPoint winCoords =
nsCoreUtils::GetScreenCoordsForWindow(aAccWrap->GetNode());
x -= winCoords.x;
y -= winCoords.y;
screenRect.x -= winCoords.x;
screenRect.y -= winCoords.y;
}
*aX = x;
*aY = y;
*aWidth = width;
*aHeight = height;
*aX = screenRect.x;
*aY = screenRect.y;
*aWidth = screenRect.width;
*aHeight = screenRect.height;
}
void

View File

@ -584,12 +584,11 @@ nsAccessiblePivot::MoveToPoint(nsIAccessibleTraversalRule* aRule,
// Match if no node below this is a match
if ((filtered & nsIAccessibleTraversalRule::FILTER_MATCH) && !match) {
int32_t childX, childY, childWidth, childHeight;
child->GetBounds(&childX, &childY, &childWidth, &childHeight);
nsIntRect childRect = child->Bounds();
// Double-check child's bounds since the deepest child may have been out
// of bounds. This assures we don't return a false positive.
if (aX >= childX && aX < childX + childWidth &&
aY >= childY && aY < childY + childHeight)
if (aX >= childRect.x && aX < childRect.x + childRect.width &&
aY >= childRect.y && aY < childRect.y + childRect.height)
match = child;
}

View File

@ -7,8 +7,9 @@
#ifndef mozilla_a11y_Accessible_inl_h_
#define mozilla_a11y_Accessible_inl_h_
#include "Accessible.h"
#include "DocAccessible.h"
#include "ARIAMap.h"
#include "nsCoreUtils.h"
namespace mozilla {
namespace a11y {
@ -59,6 +60,13 @@ Accessible::HasNumericValue() const
return mRoleMapEntry && mRoleMapEntry->valueRule != eNoValue;
}
inline void
Accessible::ScrollTo(uint32_t aHow) const
{
if (mContent)
nsCoreUtils::ScrollTo(mDoc->PresShell(), mContent, aHow);
}
} // namespace a11y
} // namespace mozilla

File diff suppressed because it is too large Load Diff

View File

@ -11,8 +11,8 @@
#include "mozilla/a11y/Role.h"
#include "mozilla/a11y/States.h"
#include "nsIAccessible.h"
#include "nsIAccessibleHyperLink.h"
#include "xpcAccessible.h"
#include "xpcAccessibleHyperLink.h"
#include "nsIAccessibleStates.h"
#include "xpcAccessibleSelectable.h"
#include "xpcAccessibleValue.h"
@ -27,6 +27,7 @@ struct nsRoleMapEntry;
struct nsRect;
class nsIFrame;
class nsIAtom;
struct nsIntRect;
class nsView;
namespace mozilla {
@ -122,8 +123,8 @@ typedef nsRefPtrHashtable<nsPtrHashKey<const void>, Accessible>
{ 0xbd, 0x50, 0x42, 0x6b, 0xd1, 0xd6, 0xe1, 0xad } \
}
class Accessible : public nsIAccessible,
public nsIAccessibleHyperLink,
class Accessible : public xpcAccessible,
public xpcAccessibleHyperLink,
public xpcAccessibleSelectable,
public xpcAccessibleValue
{
@ -133,10 +134,11 @@ public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(Accessible, nsIAccessible)
NS_DECL_NSIACCESSIBLE
NS_DECL_NSIACCESSIBLEHYPERLINK
NS_DECLARE_STATIC_IID_ACCESSOR(NS_ACCESSIBLE_IMPL_IID)
// nsIAccessible
NS_IMETHOD GetNativeInterface(void** aOutAccessible);
//////////////////////////////////////////////////////////////////////////////
// Public methods
@ -520,10 +522,40 @@ public:
*/
void TestChildCache(Accessible* aCachedChild) const;
/**
* Return boundaries in screen coordinates.
*/
virtual nsIntRect Bounds() const;
/**
* Return boundaries rect relative the bounding frame.
*/
virtual void GetBoundsRect(nsRect& aRect, nsIFrame** aRelativeFrame);
virtual nsRect RelativeBounds(nsIFrame** aRelativeFrame) const;
/**
* Selects the accessible within its container if applicable.
*/
virtual void SetSelected(bool aSelect);
/**
* Select the accessible within its container.
*/
void TakeSelection();
/**
* Focus the accessible.
*/
virtual void TakeFocus();
/**
* Scroll the accessible into view.
*/
void ScrollTo(uint32_t aHow) const;
/**
* Scroll the accessible to the given point.
*/
void ScrollToPoint(uint32_t aCoordinateType, int32_t aX, int32_t aY);
//////////////////////////////////////////////////////////////////////////////
// Downcasting and types
@ -621,6 +653,26 @@ public:
*/
virtual uint8_t ActionCount();
/**
* Return action name at given index.
*/
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName);
/**
* Default to localized action name.
*/
void ActionDescriptionAt(uint8_t aIndex, nsAString& aDescription)
{
nsAutoString name;
ActionNameAt(aIndex, name);
TranslateString(name, aDescription);
}
/**
* Invoke the accessible action.
*/
virtual bool DoAction(uint8_t aIndex);
/**
* Return access key, such as Alt+D.
*/
@ -633,7 +685,8 @@ public:
virtual KeyBinding KeyboardShortcut() const;
//////////////////////////////////////////////////////////////////////////////
// HyperLinkAccessible
// HyperLinkAccessible (any embedded object in text can implement HyperLink,
// which helps determine where it is located within containing text).
/**
* Return true if the accessible is hyper link accessible.
@ -977,9 +1030,9 @@ protected:
/**
* Return the action rule based on ARIA enum constants EActionRule
* (see ARIAMap.h). Used by ActionCount() and GetActionName().
* (see ARIAMap.h). Used by ActionCount() and ActionNameAt().
*/
uint32_t GetActionRule();
uint32_t GetActionRule() const;
/**
* Return group info.
@ -1028,6 +1081,7 @@ protected:
void StaticAsserts() const;
friend class DocAccessible;
friend class xpcAccessible;
nsAutoPtr<mozilla::a11y::EmbeddedObjCollector> mEmbeddedObjCollector;
int32_t mIndexOfEmbeddedChild;

View File

@ -39,30 +39,6 @@ NS_IMPL_ISUPPORTS_INHERITED(ApplicationAccessible, Accessible,
////////////////////////////////////////////////////////////////////////////////
// nsIAccessible
NS_IMETHODIMP
ApplicationAccessible::GetParent(nsIAccessible** aAccessible)
{
NS_ENSURE_ARG_POINTER(aAccessible);
*aAccessible = nullptr;
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::GetNextSibling(nsIAccessible** aNextSibling)
{
NS_ENSURE_ARG_POINTER(aNextSibling);
*aNextSibling = nullptr;
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::GetPreviousSibling(nsIAccessible** aPreviousSibling)
{
NS_ENSURE_ARG_POINTER(aPreviousSibling);
*aPreviousSibling = nullptr;
return NS_OK;
}
ENameValueFlag
ApplicationAccessible::Name(nsString& aName)
{
@ -146,64 +122,10 @@ ApplicationAccessible::RelationByType(RelationType aRelationType)
return Relation();
}
NS_IMETHODIMP
ApplicationAccessible::GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight)
nsIntRect
ApplicationAccessible::Bounds() const
{
NS_ENSURE_ARG_POINTER(aX);
*aX = 0;
NS_ENSURE_ARG_POINTER(aY);
*aY = 0;
NS_ENSURE_ARG_POINTER(aWidth);
*aWidth = 0;
NS_ENSURE_ARG_POINTER(aHeight);
*aHeight = 0;
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::SetSelected(bool aIsSelected)
{
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::TakeSelection()
{
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::TakeFocus()
{
return NS_OK;
}
uint8_t
ApplicationAccessible::ActionCount()
{
return 0;
}
NS_IMETHODIMP
ApplicationAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
ApplicationAccessible::GetActionDescription(uint8_t aIndex,
nsAString& aDescription)
{
aDescription.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
ApplicationAccessible::DoAction(uint8_t aIndex)
{
return NS_OK;
return nsIntRect();
}
////////////////////////////////////////////////////////////////////////////////
@ -355,35 +277,3 @@ ApplicationAccessible::GetSiblingAtOffset(int32_t aOffset,
return nullptr;
}
////////////////////////////////////////////////////////////////////////////////
// nsIAccessible
NS_IMETHODIMP
ApplicationAccessible::GetRootDocument(nsIAccessibleDocument** aRootDocument)
{
NS_ENSURE_ARG_POINTER(aRootDocument);
*aRootDocument = nullptr;
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::ScrollTo(uint32_t aScrollType)
{
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::ScrollToPoint(uint32_t aCoordinateType,
int32_t aX, int32_t aY)
{
return NS_OK;
}
NS_IMETHODIMP
ApplicationAccessible::GetLanguage(nsAString& aLanguage)
{
aLanguage.Truncate();
return NS_OK;
}

View File

@ -37,37 +37,21 @@ public:
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetRootDocument(nsIAccessibleDocument** aRootDocument);
NS_IMETHOD ScrollTo(uint32_t aScrollType);
NS_IMETHOD ScrollToPoint(uint32_t aCoordinateType, int32_t aX, int32_t aY);
NS_IMETHOD GetLanguage(nsAString& aLanguage);
NS_IMETHOD GetParent(nsIAccessible **aParent);
NS_IMETHOD GetNextSibling(nsIAccessible **aNextSibling);
NS_IMETHOD GetPreviousSibling(nsIAccessible **aPreviousSibling);
NS_IMETHOD GetBounds(int32_t *aX, int32_t *aY,
int32_t *aWidth, int32_t *aHeight);
NS_IMETHOD SetSelected(bool aIsSelected);
NS_IMETHOD TakeSelection();
NS_IMETHOD TakeFocus();
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString &aName);
NS_IMETHOD GetActionDescription(uint8_t aIndex, nsAString &aDescription);
NS_IMETHOD DoAction(uint8_t aIndex);
// nsIAccessibleApplication
NS_DECL_NSIACCESSIBLEAPPLICATION
// Accessible
virtual void Shutdown();
virtual nsIntRect Bounds() const MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual GroupPos GroupPosition();
virtual ENameValueFlag Name(nsString& aName);
virtual void ApplyARIAState(uint64_t* aState) const;
virtual void Description(nsString& aDescription);
virtual void Value(nsString& aValue);
virtual mozilla::a11y::role NativeRole();
virtual uint64_t State();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t State() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
@ -77,7 +61,6 @@ public:
virtual void InvalidateChildren();
// ActionAccessible
virtual uint8_t ActionCount();
virtual KeyBinding AccessKey() const;
protected:

View File

@ -81,10 +81,13 @@ NS_IMPL_ISUPPORTS_INHERITED0(LinkableAccessible, AccessibleWrap)
////////////////////////////////////////////////////////////////////////////////
// LinkableAccessible. nsIAccessible
NS_IMETHODIMP
void
LinkableAccessible::TakeFocus()
{
return mActionAcc ? mActionAcc->TakeFocus() : AccessibleWrap::TakeFocus();
if (mActionAcc)
mActionAcc->TakeFocus();
else
AccessibleWrap::TakeFocus();
}
uint64_t
@ -116,31 +119,25 @@ LinkableAccessible::ActionCount()
return (mIsOnclick || mIsLink) ? 1 : 0;
}
NS_IMETHODIMP
LinkableAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
LinkableAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
// Action 0 (default action): Jump to link
if (aIndex == eAction_Jump) {
if (mIsLink) {
if (mIsLink)
aName.AssignLiteral("jump");
return NS_OK;
}
else if (mIsOnclick) {
else if (mIsOnclick)
aName.AssignLiteral("click");
return NS_OK;
}
return NS_ERROR_NOT_IMPLEMENTED;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
LinkableAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Jump)
return NS_ERROR_INVALID_ARG;
return false;
return mActionAcc ? mActionAcc->DoAction(aIndex) :
AccessibleWrap::DoAction(aIndex);

View File

@ -60,18 +60,16 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD TakeFocus();
// Accessible
virtual void Shutdown();
virtual void Value(nsString& aValue);
virtual uint64_t NativeLinkState() const;
virtual void Shutdown() MOZ_OVERRIDE;
virtual void Value(nsString& aValue) MOZ_OVERRIDE;
virtual uint64_t NativeLinkState() const MOZ_OVERRIDE;
virtual void TakeFocus() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t index) MOZ_OVERRIDE;
virtual KeyBinding AccessKey() const;
// HyperLinkAccessible
@ -104,7 +102,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
protected:
virtual ~EnumRoleAccessible() { }

View File

@ -313,20 +313,14 @@ DocAccessible::FocusedChild()
return FocusMgr()->FocusedAccessible();
}
NS_IMETHODIMP
void
DocAccessible::TakeFocus()
{
if (IsDefunct())
return NS_ERROR_FAILURE;
// Focus the document.
nsFocusManager* fm = nsFocusManager::GetFocusManager();
NS_ENSURE_STATE(fm);
nsCOMPtr<nsIDOMElement> newFocus;
return fm->MoveFocus(mDocumentNode->GetWindow(), nullptr,
nsIFocusManager::MOVEFOCUS_ROOT, 0,
getter_AddRefs(newFocus));
fm->MoveFocus(mDocumentNode->GetWindow(), nullptr,
nsFocusManager::MOVEFOCUS_ROOT, 0, getter_AddRefs(newFocus));
}
@ -645,19 +639,19 @@ DocAccessible::GetFrame() const
}
// DocAccessible protected member
void
DocAccessible::GetBoundsRect(nsRect& aBounds, nsIFrame** aRelativeFrame)
nsRect
DocAccessible::RelativeBounds(nsIFrame** aRelativeFrame) const
{
*aRelativeFrame = GetFrame();
nsIDocument *document = mDocumentNode;
nsIDocument *parentDoc = nullptr;
nsRect bounds;
while (document) {
nsIPresShell *presShell = document->GetShell();
if (!presShell) {
return;
}
if (!presShell)
return nsRect();
nsRect scrollPort;
nsIScrollableFrame* sf = presShell->GetRootScrollFrameAsScrollableExternal();
@ -665,9 +659,9 @@ DocAccessible::GetBoundsRect(nsRect& aBounds, nsIFrame** aRelativeFrame)
scrollPort = sf->GetScrollPortRect();
} else {
nsIFrame* rootFrame = presShell->GetRootFrame();
if (!rootFrame) {
return;
}
if (!rootFrame)
return nsRect();
scrollPort = rootFrame->GetRect();
}
@ -676,14 +670,16 @@ DocAccessible::GetBoundsRect(nsRect& aBounds, nsIFrame** aRelativeFrame)
// this document, but we're intersecting rectangles derived from
// multiple documents and assuming they're all in the same coordinate
// system. See bug 514117.
aBounds.IntersectRect(scrollPort, aBounds);
bounds.IntersectRect(scrollPort, bounds);
}
else { // First time through loop
aBounds = scrollPort;
bounds = scrollPort;
}
document = parentDoc = document->GetParentDocument();
}
return bounds;
}
// DocAccessible protected member

View File

@ -59,9 +59,6 @@ public:
DocAccessible(nsIDocument* aDocument, nsIContent* aRootContent,
nsIPresShell* aPresShell);
// nsIAccessible
NS_IMETHOD TakeFocus(void);
// nsIScrollPositionListener
virtual void ScrollPositionWillChange(nscoord aX, nscoord aY) {}
virtual void ScrollPositionDidChange(nscoord aX, nscoord aY);
@ -79,18 +76,20 @@ public:
virtual mozilla::a11y::ENameValueFlag Name(nsString& aName);
virtual void Description(nsString& aDescription);
virtual Accessible* FocusedChild();
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual bool NativelyUnavailable() const;
virtual void ApplyARIAState(uint64_t* aState) const;
virtual already_AddRefed<nsIPersistentProperties> Attributes();
virtual void TakeFocus() MOZ_OVERRIDE;
#ifdef A11Y_LOG
virtual nsresult HandleAccEvent(AccEvent* aEvent);
#endif
virtual void GetBoundsRect(nsRect& aRect, nsIFrame** aRelativeFrame);
virtual nsRect RelativeBounds(nsIFrame** aRelativeFrame) const MOZ_OVERRIDE;
// HyperTextAccessible
virtual already_AddRefed<nsIEditor> GetEditor() const;

View File

@ -174,24 +174,21 @@ RadioButtonAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
RadioButtonAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
RadioButtonAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
if (aIndex == eAction_Click)
aName.AssignLiteral("select");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
RadioButtonAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
role

View File

@ -31,8 +31,8 @@ public:
// Accessible
virtual void Value(nsString& aValue);
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// Value
virtual double MaxValue() const MOZ_OVERRIDE;
@ -57,15 +57,13 @@ class RadioButtonAccessible : public LeafAccessible
public:
RadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual mozilla::a11y::role NativeRole();
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
enum { eAction_Click = 0 };

View File

@ -57,8 +57,8 @@ public:
// Accessible
virtual int32_t GetLevelInternal();
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual void InvalidateChildren();
virtual bool RemoveChild(Accessible* aAccessible);

View File

@ -109,34 +109,26 @@ ImageAccessible::ActionCount()
return HasLongDesc() ? actionCount + 1 : actionCount;
}
NS_IMETHODIMP
ImageAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
ImageAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
if (IsDefunct())
return NS_ERROR_FAILURE;
if (IsLongDescIndex(aIndex) && HasLongDesc()) {
if (IsLongDescIndex(aIndex) && HasLongDesc())
aName.AssignLiteral("showlongdesc");
return NS_OK;
}
return LinkableAccessible::GetActionName(aIndex, aName);
else
LinkableAccessible::ActionNameAt(aIndex, aName);
}
NS_IMETHODIMP
bool
ImageAccessible::DoAction(uint8_t aIndex)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
// Get the long description uri and open in a new window.
if (!IsLongDescIndex(aIndex))
return LinkableAccessible::DoAction(aIndex);
nsCOMPtr<nsIURI> uri = GetLongDescURI();
if (!uri)
return NS_ERROR_INVALID_ARG;
return false;
nsAutoCString utf8spec;
uri->GetSpec(utf8spec);
@ -145,11 +137,12 @@ ImageAccessible::DoAction(uint8_t aIndex)
nsIDocument* document = mContent->OwnerDoc();
nsCOMPtr<nsPIDOMWindow> piWindow = document->GetWindow();
nsCOMPtr<nsIDOMWindow> win = do_QueryInterface(piWindow);
NS_ENSURE_STATE(win);
if (!win)
return false;
nsCOMPtr<nsIDOMWindow> tmp;
return win->Open(spec, EmptyString(), EmptyString(),
getter_AddRefs(tmp));
return NS_SUCCEEDED(win->Open(spec, EmptyString(), EmptyString(),
getter_AddRefs(tmp)));
}
////////////////////////////////////////////////////////////////////////////////
@ -158,20 +151,28 @@ ImageAccessible::DoAction(uint8_t aIndex)
NS_IMETHODIMP
ImageAccessible::GetImagePosition(uint32_t aCoordType, int32_t* aX, int32_t* aY)
{
int32_t width, height;
nsresult rv = GetBounds(aX, aY, &width, &height);
if (NS_FAILED(rv))
return rv;
NS_ENSURE_ARG_POINTER(aX);
NS_ENSURE_ARG_POINTER(aY);
nsIntRect rect = Bounds();
*aX = rect.x;
*aY = rect.y;
nsAccUtils::ConvertScreenCoordsTo(aX, aY, aCoordType, this);
return NS_OK;
}
NS_IMETHODIMP
ImageAccessible::GetImageSize(int32_t* aWidth, int32_t* aHeight)
{
int32_t x, y;
return GetBounds(&x, &y, aWidth, aHeight);
NS_ENSURE_ARG_POINTER(aWidth);
NS_ENSURE_ARG_POINTER(aHeight);
nsIntRect rect = Bounds();
*aWidth = rect.width;
*aHeight = rect.height;
return NS_OK;
}
// Accessible

View File

@ -28,20 +28,18 @@ public:
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// nsIAccessibleImage
NS_DECL_NSIACCESSIBLEIMAGE
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
protected:
virtual ~ImageAccessible();
@ -65,7 +63,7 @@ private:
already_AddRefed<nsIURI> GetLongDescURI() const;
/**
* Used by GetActionName and DoAction to ensure the index for opening the
* Used by ActionNameAt and DoAction to ensure the index for opening the
* longdesc URL is valid.
* It is always assumed that the highest possible index opens the longdesc.
* This doesn't check that there is actually a longdesc, just that the index

View File

@ -51,11 +51,9 @@ Accessible*
OuterDocAccessible::ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild)
{
int32_t docX = 0, docY = 0, docWidth = 0, docHeight = 0;
nsresult rv = GetBounds(&docX, &docY, &docWidth, &docHeight);
NS_ENSURE_SUCCESS(rv, nullptr);
if (aX < docX || aX >= docX + docWidth || aY < docY || aY >= docY + docHeight)
nsIntRect docRect = Bounds();
if (aX < docRect.x || aX >= docRect.x + docRect.width ||
aY < docRect.y || aY >= docRect.y + docRect.height)
return nullptr;
// Always return the inner doc as direct child accessible unless bounds
@ -68,39 +66,6 @@ OuterDocAccessible::ChildAtPoint(int32_t aX, int32_t aY,
return child;
}
////////////////////////////////////////////////////////////////////////////////
// nsIAccessible
uint8_t
OuterDocAccessible::ActionCount()
{
// Internal frame, which is the doc's parent, should not have a click action.
return 0;
}
NS_IMETHODIMP
OuterDocAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
OuterDocAccessible::GetActionDescription(uint8_t aIndex,
nsAString& aDescription)
{
aDescription.Truncate();
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
OuterDocAccessible::DoAction(uint8_t aIndex)
{
return NS_ERROR_INVALID_ARG;
}
////////////////////////////////////////////////////////////////////////////////
// Accessible public

View File

@ -27,14 +27,9 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD GetActionDescription(uint8_t aIndex, nsAString& aDescription);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual void Shutdown();
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild);
@ -42,9 +37,6 @@ public:
virtual bool InsertChildAt(uint32_t aIdx, Accessible* aChild) MOZ_OVERRIDE;
virtual bool RemoveChild(Accessible* aAccessible);
// ActionAccessible
virtual uint8_t ActionCount();
protected:
virtual ~OuterDocAccessible();

View File

@ -33,7 +33,7 @@ public:
virtual mozilla::a11y::ENameValueFlag Name(nsString& aName);
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeState() MOZ_OVERRIDE;
// RootAccessible

View File

@ -25,7 +25,7 @@ public:
/**
* Return the caption accessible if any for this table.
*/
virtual Accessible* Caption() { return nullptr; }
virtual Accessible* Caption() const { return nullptr; }
/**
* Get the summary for this table.

View File

@ -21,7 +21,7 @@ public:
virtual ~TextLeafAccessible();
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual void AppendTextTo(nsAString& aText, uint32_t aStartOffset = 0,
uint32_t aLength = UINT32_MAX);
virtual ENameValueFlag Name(nsString& aName);

View File

@ -23,7 +23,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
protected:
virtual ~HTMLCanvasAccessible() { }

View File

@ -23,7 +23,7 @@ public:
LeafAccessible(aContent, aDoc) {}
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
};
/**
@ -39,8 +39,8 @@ public:
}
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
protected:
// Accessible
@ -60,7 +60,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
@ -81,7 +81,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;

View File

@ -51,33 +51,28 @@ HTMLCheckboxAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
HTMLCheckboxAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLCheckboxAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) { // 0 is the magic value for default action
// cycle, check or uncheck
uint64_t state = NativeState();
if (state & states::CHECKED)
aName.AssignLiteral("uncheck");
else if (state & states::MIXED)
aName.AssignLiteral("cycle");
else
aName.AssignLiteral("check");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
HTMLCheckboxAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != 0)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
uint64_t
@ -189,24 +184,21 @@ HTMLButtonAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
HTMLButtonAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLButtonAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
if (aIndex == eAction_Click)
aName.AssignLiteral("press");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
HTMLButtonAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
uint64_t
@ -445,23 +437,21 @@ HTMLTextFieldAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
HTMLTextFieldAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLTextFieldAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
if (aIndex == eAction_Click)
aName.AssignLiteral("activate");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
HTMLTextFieldAccessible::DoAction(uint8_t aIndex)
{
if (aIndex == 0)
return TakeFocus();
if (aIndex != 0)
return false;
return NS_ERROR_INVALID_ARG;
TakeFocus();
return true;
}
already_AddRefed<nsIEditor>
@ -707,7 +697,7 @@ HTMLGroupboxAccessible::NativeRole()
}
nsIContent*
HTMLGroupboxAccessible::GetLegend()
HTMLGroupboxAccessible::GetLegend() const
{
for (nsIContent* legendContent = mContent->GetFirstChild(); legendContent;
legendContent = legendContent->GetNextSibling()) {

View File

@ -34,16 +34,14 @@ public:
mStateFlags |= eIgnoreDOMUIEvent;
}
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState();
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -66,7 +64,7 @@ public:
}
// Accessible
virtual uint64_t NativeState();
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual void GetPositionAndSizeInternal(int32_t *aPosInSet,
int32_t *aSetSize);
};
@ -84,17 +82,15 @@ public:
HTMLButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t State();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t State() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -119,22 +115,20 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// HyperTextAccessible
virtual already_AddRefed<nsIEditor> GetEditor() const;
// Accessible
virtual void Value(nsString& aValue);
virtual void ApplyARIAState(uint64_t* aState) const;
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -162,7 +156,7 @@ public:
HTMLFileInputAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual nsresult HandleAccEvent(AccEvent* aAccEvent);
};
@ -205,7 +199,7 @@ public:
// Accessible
virtual void Value(nsString& aValue);
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
// Value
virtual double MaxValue() const MOZ_OVERRIDE;
@ -228,7 +222,7 @@ public:
HTMLGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
@ -236,7 +230,7 @@ protected:
virtual ENameValueFlag NativeName(nsString& aName) MOZ_OVERRIDE;
// HTMLGroupboxAccessible
nsIContent* GetLegend();
nsIContent* GetLegend() const;
};
@ -249,7 +243,7 @@ public:
HTMLLegendAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
};
@ -263,7 +257,7 @@ public:
// Accessible
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
@ -284,7 +278,7 @@ public:
HTMLFigcaptionAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
};

View File

@ -236,24 +236,25 @@ HTMLAreaAccessible::CacheChildren()
// No children for aria accessible.
}
void
HTMLAreaAccessible::GetBoundsRect(nsRect& aBounds, nsIFrame** aBoundingFrame)
nsRect
HTMLAreaAccessible::RelativeBounds(nsIFrame** aBoundingFrame) const
{
nsIFrame* frame = GetFrame();
if (!frame)
return;
return nsRect();
nsImageFrame* imageFrame = do_QueryFrame(frame);
nsImageMap* map = imageFrame->GetImageMap();
nsresult rv = map->GetBoundsForAreaContent(mContent, aBounds);
nsRect bounds;
nsresult rv = map->GetBoundsForAreaContent(mContent, bounds);
if (NS_FAILED(rv))
return;
return nsRect();
// XXX Areas are screwy; they return their rects as a pair of points, one pair
// stored into the width and height.
aBounds.width -= aBounds.x;
aBounds.height -= aBounds.y;
*aBoundingFrame = frame;
bounds.width -= bounds.x;
bounds.height -= bounds.y;
return bounds;
}

View File

@ -25,7 +25,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
// HyperLinkAccessible
virtual uint32_t AnchorCount();
@ -62,7 +62,7 @@ public:
virtual void Description(nsString& aDescription);
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild);
virtual void GetBoundsRect(nsRect& aBounds, nsIFrame** aBoundingFrame);
virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const MOZ_OVERRIDE;
// HyperLinkAccessible
virtual uint32_t StartOffset();

View File

@ -92,23 +92,22 @@ HTMLLinkAccessible::ActionCount()
return IsLinked() ? 1 : HyperTextAccessible::ActionCount();
}
NS_IMETHODIMP
HTMLLinkAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLLinkAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
if (!IsLinked())
return HyperTextAccessible::GetActionName(aIndex, aName);
if (!IsLinked()) {
HyperTextAccessible::ActionNameAt(aIndex, aName);
return;
}
// Action 0 (default action): Jump to link
if (aIndex != eAction_Jump)
return NS_ERROR_INVALID_ARG;
aName.AssignLiteral("jump");
return NS_OK;
if (aIndex == eAction_Jump)
aName.AssignLiteral("jump");
}
NS_IMETHODIMP
bool
HTMLLinkAccessible::DoAction(uint8_t aIndex)
{
if (!IsLinked())
@ -116,13 +115,10 @@ HTMLLinkAccessible::DoAction(uint8_t aIndex)
// Action 0 (default action): Jump to link
if (aIndex != eAction_Jump)
return NS_ERROR_INVALID_ARG;
if (IsDefunct())
return NS_ERROR_FAILURE;
return false;
DoCommand();
return NS_OK;
return true;
}
////////////////////////////////////////////////////////////////////////////////
@ -145,11 +141,8 @@ HTMLLinkAccessible::AnchorURIAt(uint32_t aAnchorIndex)
// Protected members
bool
HTMLLinkAccessible::IsLinked()
HTMLLinkAccessible::IsLinked() const
{
if (IsDefunct())
return false;
EventStates state = mContent->AsElement()->State();
return state.HasAtLeastOneOfStates(NS_EVENT_STATE_VISITED |
NS_EVENT_STATE_UNVISITED);

View File

@ -18,19 +18,17 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeLinkState() const;
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeLinkState() const MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// HyperLinkAccessible
virtual bool IsLink();
@ -44,7 +42,7 @@ protected:
/**
* Returns true if the link has href attribute.
*/
bool IsLinked();
bool IsLinked() const;
};
} // namespace a11y

View File

@ -81,21 +81,18 @@ HTMLLIAccessible::NativeState()
return HyperTextAccessibleWrap::NativeState() | states::READONLY;
}
NS_IMETHODIMP
HTMLLIAccessible::GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight)
nsIntRect
HTMLLIAccessible::Bounds() const
{
nsresult rv = AccessibleWrap::GetBounds(aX, aY, aWidth, aHeight);
if (NS_FAILED(rv) || !mBullet || mBullet->IsInside())
return rv;
nsIntRect rect = AccessibleWrap::Bounds();
if (rect.IsEmpty() || !mBullet || mBullet->IsInside())
return rect;
int32_t bulletX = 0, bulletY = 0, bulletWidth = 0, bulletHeight = 0;
rv = mBullet->GetBounds(&bulletX, &bulletY, &bulletWidth, &bulletHeight);
NS_ENSURE_SUCCESS(rv, rv);
nsIntRect bulletRect = mBullet->Bounds();
*aWidth += *aX - bulletX;
*aX = bulletX; // Move x coordinate of list item over to cover bullet as well
return NS_OK;
rect.width += rect.x - bulletRect.x;
rect.x = bulletRect.x; // Move x coordinate of list item over to cover bullet as well
return rect;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -28,8 +28,8 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
protected:
virtual ~HTMLListAccessible() { }
@ -47,14 +47,11 @@ public:
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight);
// Accessible
virtual void Shutdown();
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual nsIntRect Bounds() const MOZ_OVERRIDE;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// HTMLLIAccessible
HTMLListBulletAccessible* Bullet() const { return mBullet; }
@ -83,8 +80,8 @@ public:
// Accessible
virtual nsIFrame* GetFrame() const;
virtual ENameValueFlag Name(nsString& aName);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual void AppendTextTo(nsAString& aText, uint32_t aStartOffset = 0,
uint32_t aLength = UINT32_MAX);

View File

@ -231,11 +231,10 @@ HTMLSelectOptionAccessible::NativeState()
// <select> is not collapsed: compare bounds to calculate OFFSCREEN
Accessible* listAcc = Parent();
if (listAcc) {
int32_t optionX, optionY, optionWidth, optionHeight;
int32_t listX, listY, listWidth, listHeight;
GetBounds(&optionX, &optionY, &optionWidth, &optionHeight);
listAcc->GetBounds(&listX, &listY, &listWidth, &listHeight);
if (optionY < listY || optionY + optionHeight > listY + listHeight) {
nsIntRect optionRect = Bounds();
nsIntRect listRect = listAcc->Bounds();
if (optionRect.y < listRect.y ||
optionRect.y + optionRect.height > listRect.y + listRect.height) {
state |= states::OFFSCREEN;
}
}
@ -265,25 +264,21 @@ HTMLSelectOptionAccessible::GetLevelInternal()
return level;
}
void
HTMLSelectOptionAccessible::GetBoundsRect(nsRect& aTotalBounds,
nsIFrame** aBoundingFrame)
nsRect
HTMLSelectOptionAccessible::RelativeBounds(nsIFrame** aBoundingFrame) const
{
Accessible* combobox = GetCombobox();
if (combobox && (combobox->State() & states::COLLAPSED))
combobox->GetBoundsRect(aTotalBounds, aBoundingFrame);
else
HyperTextAccessibleWrap::GetBoundsRect(aTotalBounds, aBoundingFrame);
return combobox->RelativeBounds(aBoundingFrame);
return HyperTextAccessibleWrap::RelativeBounds(aBoundingFrame);
}
NS_IMETHODIMP
HTMLSelectOptionAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLSelectOptionAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Select) {
if (aIndex == eAction_Select)
aName.AssignLiteral("select");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
uint8_t
@ -292,27 +287,22 @@ HTMLSelectOptionAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
bool
HTMLSelectOptionAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Select)
return NS_ERROR_INVALID_ARG;
if (IsDefunct())
return NS_ERROR_FAILURE;
return false;
DoCommand();
return NS_OK;
return true;
}
NS_IMETHODIMP
void
HTMLSelectOptionAccessible::SetSelected(bool aSelect)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
HTMLOptionElement* option = HTMLOptionElement::FromContent(mContent);
return option ? option->SetSelected(aSelect) : NS_ERROR_FAILURE;
if (option)
option->SetSelected(aSelect);
}
////////////////////////////////////////////////////////////////////////////////
@ -344,24 +334,24 @@ HTMLSelectOptGroupAccessible::NativeInteractiveState() const
return NativelyUnavailable() ? states::UNAVAILABLE : 0;
}
NS_IMETHODIMP
HTMLSelectOptGroupAccessible::DoAction(uint8_t index)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
HTMLSelectOptGroupAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
uint8_t
HTMLSelectOptGroupAccessible::ActionCount()
{
return 0;
}
void
HTMLSelectOptGroupAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
}
bool
HTMLSelectOptGroupAccessible::DoAction(uint8_t aIndex)
{
return false;
}
////////////////////////////////////////////////////////////////////////////////
// HTMLComboboxAccessible
////////////////////////////////////////////////////////////////////////////////
@ -477,41 +467,30 @@ HTMLComboboxAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
bool
HTMLComboboxAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
if (IsDefunct())
return NS_ERROR_FAILURE;
return false;
DoCommand();
return NS_OK;
return true;
}
/**
* Our action name is the reverse of our state:
* if we are closed -> open is our name.
* if we are open -> closed is our name.
* Uses the frame to get the state, updated on every click
*/
NS_IMETHODIMP
HTMLComboboxAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
HTMLComboboxAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex != HTMLComboboxAccessible::eAction_Click) {
return NS_ERROR_INVALID_ARG;
}
if (aIndex != HTMLComboboxAccessible::eAction_Click)
return;
nsIComboboxControlFrame* comboFrame = do_QueryFrame(GetFrame());
if (!comboFrame) {
return NS_ERROR_FAILURE;
}
if (!comboFrame)
return;
if (comboFrame->IsDroppedDown())
aName.AssignLiteral("close");
else
aName.AssignLiteral("open");
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////
@ -625,37 +604,32 @@ HTMLComboboxListAccessible::NativeState()
return state;
}
/**
* Gets the bounds for the areaFrame.
* Walks the Frame tree and checks for proper frames.
*/
void
HTMLComboboxListAccessible::GetBoundsRect(nsRect& aBounds, nsIFrame** aBoundingFrame)
nsRect
HTMLComboboxListAccessible::RelativeBounds(nsIFrame** aBoundingFrame) const
{
*aBoundingFrame = nullptr;
Accessible* comboAcc = Parent();
if (!comboAcc)
return;
return nsRect();
if (0 == (comboAcc->State() & states::COLLAPSED)) {
HTMLSelectListAccessible::GetBoundsRect(aBounds, aBoundingFrame);
return;
return HTMLSelectListAccessible::RelativeBounds(aBoundingFrame);
}
// Get the first option.
nsIContent* content = mContent->GetFirstChild();
if (!content) {
return;
}
if (!content)
return nsRect();
nsIFrame* frame = content->GetPrimaryFrame();
if (!frame) {
*aBoundingFrame = nullptr;
return;
return nsRect();
}
*aBoundingFrame = frame->GetParent();
aBounds = (*aBoundingFrame)->GetRect();
return (*aBoundingFrame)->GetRect();
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -39,8 +39,8 @@ public:
virtual ~HTMLSelectListAccessible() {}
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// SelectAccessible
virtual bool SelectAll();
@ -70,21 +70,19 @@ public:
HTMLSelectOptionAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HTMLSelectOptionAccessible() {}
// nsIAccessible
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD SetSelected(bool aSelect);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual int32_t GetLevelInternal();
virtual void GetBoundsRect(nsRect& aTotalBounds, nsIFrame** aBoundingFrame);
virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const MOZ_OVERRIDE;
virtual void SetSelected(bool aSelect) MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual Accessible* ContainerWidget() const;
@ -142,16 +140,14 @@ public:
{ mType = eHTMLOptGroupType; }
virtual ~HTMLSelectOptGroupAccessible() {}
// nsIAccessible
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
};
/** ------------------------------------------------------ */
@ -171,20 +167,18 @@ public:
HTMLComboboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
virtual ~HTMLComboboxAccessible() {}
// nsIAccessible
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
// Accessible
virtual void Shutdown();
virtual void Description(nsString& aDescription);
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual void InvalidateChildren();
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -221,9 +215,9 @@ public:
// Accessible
virtual nsIFrame* GetFrame() const;
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual void GetBoundsRect(nsRect& aBounds, nsIFrame** aBoundingFrame);
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const MOZ_OVERRIDE;
// Widgets
virtual bool IsActiveWidget() const;

View File

@ -460,7 +460,7 @@ HTMLTableAccessible::RelationByType(RelationType aType)
// HTMLTableAccessible: nsIAccessibleTable implementation
Accessible*
HTMLTableAccessible::Caption()
HTMLTableAccessible::Caption() const
{
Accessible* child = mChildren.SafeElementAt(0, nullptr);
return child && child->Role() == roles::CAPTION ? child : nullptr;

View File

@ -39,9 +39,9 @@ public:
// Accessible
virtual TableCellAccessible* AsTableCell() { return this; }
virtual void Shutdown();
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
// TableCellAccessible
@ -83,7 +83,7 @@ public:
HTMLTableHeaderCellAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
};
@ -103,7 +103,7 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
protected:
virtual ~HTMLTableRowAccessible() { }
@ -138,7 +138,7 @@ public:
NS_FORWARD_NSIACCESSIBLETABLE(xpcAccessibleTable::)
// TableAccessible
virtual Accessible* Caption();
virtual Accessible* Caption() const;
virtual void Summary(nsString& aSummary);
virtual uint32_t ColCount();
virtual uint32_t RowCount();
@ -171,8 +171,8 @@ public:
virtual void Shutdown();
virtual TableAccessible* AsTable() { return this; }
virtual void Description(nsString& aDescription);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aRelationType) MOZ_OVERRIDE;
@ -234,7 +234,7 @@ public:
// nsIAccessible
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aRelationType) MOZ_OVERRIDE;
};

View File

@ -22,7 +22,7 @@ interface nsIAccessibleRelation;
* Mozilla creates the implementations of nsIAccessible on demand.
* See http://www.mozilla.org/projects/ui/accessibility for more information.
*/
[scriptable, uuid(ee62158b-bb83-424b-a88d-d7d7f9cf460d)]
[scriptable, uuid(66b110b0-c25a-4784-8623-f6ba40c7cfee)]
interface nsIAccessible : nsISupports
{
/**
@ -96,7 +96,7 @@ interface nsIAccessible : nsISupports
* compute the name. Any string value, including the empty string, should be
* considered author-intentional, and respected.
*/
attribute AString name;
readonly attribute AString name;
/**
* Accessible value -- a number or a secondary text equivalent for this node
@ -198,6 +198,7 @@ interface nsIAccessible : nsISupports
/**
* Nth accessible child using zero-based index or last child if index less than zero
*/
[binaryname(ScriptableGetChildAt)]
nsIAccessible getChildAt(in long aChildIndex);
/**
@ -220,6 +221,7 @@ interface nsIAccessible : nsISupports
/**
* Add or remove this accessible to the current selection
*/
[binaryname(ScriptableSetSelected)]
void setSelected(in boolean isSelected);
/**
@ -231,6 +233,7 @@ interface nsIAccessible : nsISupports
/**
* Select this accessible node only
*/
[binaryname(ScriptableTakeSelection)]
void takeSelection();
/**
@ -241,6 +244,7 @@ interface nsIAccessible : nsISupports
* will still set focus on that node, although normally that will not be visually
* indicated in most style sheets.
*/
[binaryname(ScriptableTakeFocus)]
void takeFocus();
/**
@ -262,6 +266,7 @@ interface nsIAccessible : nsISupports
* Perform the accessible action at the given zero-based index
* Action number 0 is the default action
*/
[binaryname(ScriptableDoAction)]
void doAction(in uint8_t index);
/**
@ -271,6 +276,7 @@ interface nsIAccessible : nsISupports
* the screen (see nsIAccessibleScrollType for
* available constants).
*/
[binaryname(ScriptableScrollTo)]
void scrollTo(in unsigned long aScrollType);
/**
@ -282,6 +288,7 @@ interface nsIAccessible : nsISupports
* @param x [in] - defines the x coordinate
* @param y [in] - defines the y coordinate
*/
[binaryname(ScriptableScrollToPoint)]
void scrollToPoint(in unsigned long coordinateType, in long x, in long y);
/**

View File

@ -374,13 +374,12 @@ GetClosestInterestingAccessible(id anObject)
if (!mGeckoAccessible)
return nil;
int32_t x = 0, y = 0, width = 0, height = 0;
mGeckoAccessible->GetBounds(&x, &y, &width, &height);
nsIntRect rect = mGeckoAccessible->Bounds();
NSScreen* mainView = [[NSScreen screens] objectAtIndex:0];
CGFloat scaleFactor = nsCocoaUtils::GetBackingScaleFactor(mainView);
NSPoint p = NSMakePoint(static_cast<CGFloat>(x) / scaleFactor,
[mainView frame].size.height - static_cast<CGFloat>(y + height) / scaleFactor);
NSPoint p = NSMakePoint(static_cast<CGFloat>(rect.x) / scaleFactor,
[mainView frame].size.height - static_cast<CGFloat>(rect.y + rect.height) / scaleFactor);
return [NSValue valueWithPoint:p];
@ -611,8 +610,8 @@ GetClosestInterestingAccessible(id anObject)
if (!mGeckoAccessible)
return NO;
nsresult rv = mGeckoAccessible->TakeFocus();
return NS_SUCCEEDED(rv);
mGeckoAccessible->TakeFocus();
return YES;
}
- (BOOL)isEnabled

View File

@ -221,8 +221,8 @@ ia2Accessible::scrollToPoint(enum IA2CoordinateType aCoordType,
nsIAccessibleCoordinateType::COORDTYPE_SCREEN_RELATIVE :
nsIAccessibleCoordinateType::COORDTYPE_PARENT_RELATIVE;
nsresult rv = acc->ScrollToPoint(geckoCoordType, aX, aY);
return GetHRESULT(rv);
acc->ScrollToPoint(geckoCoordType, aX, aY);
return S_OK;
A11Y_TRYBLOCK_END
}

View File

@ -65,8 +65,7 @@ ia2AccessibleAction::doAction(long aActionIndex)
return CO_E_OBJNOTCONNECTED;
uint8_t index = static_cast<uint8_t>(aActionIndex);
nsresult rv = acc->DoAction(index);
return GetHRESULT(rv);
return acc->DoAction(index) ? S_OK : E_INVALIDARG;
A11Y_TRYBLOCK_END
}
@ -167,12 +166,9 @@ ia2AccessibleAction::get_name(long aActionIndex, BSTR *aName)
nsAutoString name;
uint8_t index = static_cast<uint8_t>(aActionIndex);
nsresult rv = acc->GetActionName(index, name);
if (NS_FAILED(rv))
return GetHRESULT(rv);
acc->ActionNameAt(index, name);
if (name.IsEmpty())
return S_FALSE;
return E_INVALIDARG;
*aName = ::SysAllocStringLen(name.get(), name.Length());
return *aName ? S_OK : E_OUTOFMEMORY;

View File

@ -58,31 +58,22 @@ ia2AccessibleComponent::get_locationInParent(long* aX, long* aY)
if (state & states::INVISIBLE)
return S_OK;
int32_t x = 0, y = 0, width = 0, height = 0;
nsresult rv = acc->GetBounds(&x, &y, &width, &height);
if (NS_FAILED(rv))
return GetHRESULT(rv);
Accessible* parentAcc = acc->Parent();
nsIntRect rect = acc->Bounds();
// The coordinates of the returned position are relative to this object's
// parent or relative to the screen on which this object is rendered if it
// has no parent.
if (!parentAcc) {
*aX = x;
*aY = y;
if (!acc->Parent()) {
*aX = rect.x;
*aY = rect.y;
return S_OK;
}
// The coordinates of the bounding box are given relative to the parent's
// coordinate system.
int32_t parentx = 0, parenty = 0;
rv = acc->GetBounds(&parentx, &parenty, &width, &height);
if (NS_FAILED(rv))
return GetHRESULT(rv);
*aX = x - parentx;
*aY = y - parenty;
nsIntRect parentRect = acc->Parent()->Bounds();
*aX = rect.x - parentRect.x;
*aY = rect.y - parentRect.y;
return S_OK;
A11Y_TRYBLOCK_END

View File

@ -778,9 +778,7 @@ AccessibleWrap::get_accDefaultAction(
return CO_E_OBJNOTCONNECTED;
nsAutoString defaultAction;
if (NS_FAILED(xpAccessible->GetActionName(0, defaultAction)))
return E_FAIL;
xpAccessible->ActionNameAt(0, defaultAction);
*pszDefaultAction = ::SysAllocStringLen(defaultAction.get(),
defaultAction.Length());
return *pszDefaultAction ? S_OK : E_OUTOFMEMORY;
@ -859,14 +857,11 @@ AccessibleWrap::accLocation(
if (xpAccessible->IsDefunct())
return CO_E_OBJNOTCONNECTED;
int32_t x, y, width, height;
if (NS_FAILED(xpAccessible->GetBounds(&x, &y, &width, &height)))
return E_FAIL;
*pxLeft = x;
*pyTop = y;
*pcxWidth = width;
*pcyHeight = height;
nsIntRect rect = xpAccessible->Bounds();
*pxLeft = rect.x;
*pyTop = rect.y;
*pcxWidth = rect.width;
*pcyHeight = rect.height;
return S_OK;
A11Y_TRYBLOCK_END
@ -1004,7 +999,7 @@ AccessibleWrap::accDoDefaultAction(
if (xpAccessible->IsDefunct())
return CO_E_OBJNOTCONNECTED;
return GetHRESULT(xpAccessible->DoAction(0));
return xpAccessible->DoAction(0) ? S_OK : E_INVALIDARG;
A11Y_TRYBLOCK_END
}

View File

@ -129,13 +129,12 @@ DocAccessibleWrap::DoInitialUpdate()
rootDocument->GetNativeWindow());
bool isActive = true;
int32_t x = CW_USEDEFAULT, y = CW_USEDEFAULT, width = 0, height = 0;
nsIntRect rect(CW_USEDEFAULT, CW_USEDEFAULT, 0, 0);
if (Compatibility::IsDolphin()) {
GetBounds(&x, &y, &width, &height);
int32_t rootX = 0, rootY = 0, rootWidth = 0, rootHeight = 0;
rootDocument->GetBounds(&rootX, &rootY, &rootWidth, &rootHeight);
x = rootX - x;
y -= rootY;
rect = Bounds();
nsIntRect rootRect = rootDocument->Bounds();
rect.x = rootRect.x - rect.x;
rect.y -= rootRect.y;
nsCOMPtr<nsISupports> container = mDocumentNode->GetContainer();
nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(container);
@ -144,7 +143,8 @@ DocAccessibleWrap::DoInitialUpdate()
HWND parentWnd = reinterpret_cast<HWND>(nativeData);
mHWND = nsWinUtils::CreateNativeWindow(kClassNameTabContent, parentWnd,
x, y, width, height, isActive);
rect.x, rect.y,
rect.width, rect.height, isActive);
nsWinUtils::sHWNDCache->Put(mHWND, this);

View File

@ -75,11 +75,8 @@ sdnTextAccessible::get_clippedSubstringBounds(unsigned int aStartIndex,
NS_ASSERTION(document,
"There must always be a doc accessible, but there isn't. Crash!");
nscoord docX = 0, docY = 0, docWidth = 0, docHeight = 0;
document->GetBounds(&docX, &docY, &docWidth, &docHeight);
nsIntRect docRect = document->Bounds();
nsIntRect unclippedRect(x, y, width, height);
nsIntRect docRect(docX, docY, docWidth, docHeight);
nsIntRect clippedRect;
clippedRect.IntersectRect(unclippedRect, docRect);

View File

@ -5,6 +5,8 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
EXPORTS += [
'xpcAccessible.h',
'xpcAccessibleHyperLink.h',
'xpcAccessibleHyperText.h',
'xpcAccessibleSelectable.h',
'xpcAccessibleValue.h',
@ -12,6 +14,8 @@ EXPORTS += [
UNIFIED_SOURCES += [
'nsAccessibleRelation.cpp',
'xpcAccessible.cpp',
'xpcAccessibleHyperLink.cpp',
'xpcAccessibleHyperText.cpp',
'xpcAccessibleSelectable.cpp',
'xpcAccessibleTable.cpp',

View File

@ -0,0 +1,572 @@
/* -*- 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 "xpcAccessible.h"
#include "Accessible-inl.h"
#include "nsAccUtils.h"
#include "nsIAccessibleRelation.h"
#include "nsIAccessibleRole.h"
#include "nsAccessibleRelation.h"
#include "Relation.h"
#include "Role.h"
#include "RootAccessible.h"
#include "nsIMutableArray.h"
#include "nsIPersistentProperties2.h"
using namespace mozilla::a11y;
NS_IMETHODIMP
xpcAccessible::GetParent(nsIAccessible** aParent)
{
NS_ENSURE_ARG_POINTER(aParent);
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aParent = static_cast<Accessible*>(this)->Parent());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetNextSibling(nsIAccessible** aNextSibling)
{
NS_ENSURE_ARG_POINTER(aNextSibling);
*aNextSibling = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsresult rv = NS_OK;
NS_IF_ADDREF(*aNextSibling = static_cast<Accessible*>(this)->GetSiblingAtOffset(1, &rv));
return rv;
}
NS_IMETHODIMP
xpcAccessible::GetPreviousSibling(nsIAccessible** aPreviousSibling)
{
NS_ENSURE_ARG_POINTER(aPreviousSibling);
*aPreviousSibling = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsresult rv = NS_OK;
NS_IF_ADDREF(*aPreviousSibling = static_cast<Accessible*>(this)->GetSiblingAtOffset(-1, &rv));
return rv;
}
NS_IMETHODIMP
xpcAccessible::GetFirstChild(nsIAccessible** aFirstChild)
{
NS_ENSURE_ARG_POINTER(aFirstChild);
*aFirstChild = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aFirstChild = static_cast<Accessible*>(this)->FirstChild());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetLastChild(nsIAccessible** aLastChild)
{
NS_ENSURE_ARG_POINTER(aLastChild);
*aLastChild = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aLastChild = static_cast<Accessible*>(this)->LastChild());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetChildCount(int32_t* aChildCount)
{
NS_ENSURE_ARG_POINTER(aChildCount);
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aChildCount = static_cast<Accessible*>(this)->ChildCount();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableGetChildAt(int32_t aChildIndex, nsIAccessible** aChild)
{
NS_ENSURE_ARG_POINTER(aChild);
*aChild = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
// If child index is negative, then return last child.
// XXX: do we really need this?
if (aChildIndex < 0)
aChildIndex = static_cast<Accessible*>(this)->ChildCount() - 1;
Accessible* child = static_cast<Accessible*>(this)->GetChildAt(aChildIndex);
if (!child)
return NS_ERROR_INVALID_ARG;
NS_ADDREF(*aChild = child);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetChildren(nsIArray** aChildren)
{
NS_ENSURE_ARG_POINTER(aChildren);
*aChildren = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsresult rv = NS_OK;
nsCOMPtr<nsIMutableArray> children =
do_CreateInstance(NS_ARRAY_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
uint32_t childCount = static_cast<Accessible*>(this)->ChildCount();
for (uint32_t childIdx = 0; childIdx < childCount; childIdx++) {
nsIAccessible* child = static_cast<Accessible*>(this)->GetChildAt(childIdx);
children->AppendElement(child, false);
}
NS_ADDREF(*aChildren = children);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetIndexInParent(int32_t* aIndexInParent)
{
NS_ENSURE_ARG_POINTER(aIndexInParent);
*aIndexInParent = static_cast<Accessible*>(this)->IndexInParent();
return *aIndexInParent != -1 ? NS_OK : NS_ERROR_FAILURE;
}
NS_IMETHODIMP
xpcAccessible::GetDOMNode(nsIDOMNode** aDOMNode)
{
NS_ENSURE_ARG_POINTER(aDOMNode);
*aDOMNode = nullptr;
nsINode *node = static_cast<Accessible*>(this)->GetNode();
if (node)
CallQueryInterface(node, aDOMNode);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetDocument(nsIAccessibleDocument** aDocument)
{
NS_ENSURE_ARG_POINTER(aDocument);
NS_IF_ADDREF(*aDocument = static_cast<Accessible*>(this)->Document());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetRootDocument(nsIAccessibleDocument** aRootDocument)
{
NS_ENSURE_ARG_POINTER(aRootDocument);
NS_IF_ADDREF(*aRootDocument = static_cast<Accessible*>(this)->RootAccessible());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetRole(uint32_t* aRole)
{
NS_ENSURE_ARG_POINTER(aRole);
*aRole = nsIAccessibleRole::ROLE_NOTHING;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aRole = static_cast<Accessible*>(this)->Role();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetState(uint32_t* aState, uint32_t* aExtraState)
{
NS_ENSURE_ARG_POINTER(aState);
nsAccUtils::To32States(static_cast<Accessible*>(this)->State(),
aState, aExtraState);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetName(nsAString& aName)
{
aName.Truncate();
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsAutoString name;
static_cast<Accessible*>(this)->Name(name);
aName.Assign(name);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetDescription(nsAString& aDescription)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsAutoString desc;
static_cast<Accessible*>(this)->Description(desc);
aDescription.Assign(desc);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetLanguage(nsAString& aLanguage)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->Language(aLanguage);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetValue(nsAString& aValue)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsAutoString value;
static_cast<Accessible*>(this)->Value(value);
aValue.Assign(value);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetHelp(nsAString& aHelp)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
xpcAccessible::GetAccessKey(nsAString& aAccessKey)
{
aAccessKey.Truncate();
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->AccessKey().ToString(aAccessKey);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetKeyboardShortcut(nsAString& aKeyBinding)
{
aKeyBinding.Truncate();
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->KeyboardShortcut().ToString(aKeyBinding);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetAttributes(nsIPersistentProperties** aAttributes)
{
NS_ENSURE_ARG_POINTER(aAttributes);
*aAttributes = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIPersistentProperties> attributes =
static_cast<Accessible*>(this)->Attributes();
attributes.swap(*aAttributes);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight)
{
NS_ENSURE_ARG_POINTER(aX);
*aX = 0;
NS_ENSURE_ARG_POINTER(aY);
*aY = 0;
NS_ENSURE_ARG_POINTER(aWidth);
*aWidth = 0;
NS_ENSURE_ARG_POINTER(aHeight);
*aHeight = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsIntRect rect = static_cast<Accessible*>(this)->Bounds();
*aX = rect.x;
*aY = rect.y;
*aWidth = rect.width;
*aHeight = rect.height;;
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableGroupPosition(int32_t* aGroupLevel,
int32_t* aSimilarItemsInGroup,
int32_t* aPositionInGroup)
{
NS_ENSURE_ARG_POINTER(aGroupLevel);
*aGroupLevel = 0;
NS_ENSURE_ARG_POINTER(aSimilarItemsInGroup);
*aSimilarItemsInGroup = 0;
NS_ENSURE_ARG_POINTER(aPositionInGroup);
*aPositionInGroup = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
GroupPos groupPos = static_cast<Accessible*>(this)->GroupPosition();
*aGroupLevel = groupPos.level;
*aSimilarItemsInGroup = groupPos.setSize;
*aPositionInGroup = groupPos.posInSet;
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetRelationByType(uint32_t aType,
nsIAccessibleRelation** aRelation)
{
NS_ENSURE_ARG_POINTER(aRelation);
*aRelation = nullptr;
NS_ENSURE_ARG(aType <= static_cast<uint32_t>(RelationType::LAST));
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
Relation rel = static_cast<Accessible*>(this)->RelationByType(static_cast<RelationType>(aType));
NS_ADDREF(*aRelation = new nsAccessibleRelation(aType, &rel));
return *aRelation ? NS_OK : NS_ERROR_FAILURE;
}
NS_IMETHODIMP
xpcAccessible::GetRelations(nsIArray** aRelations)
{
NS_ENSURE_ARG_POINTER(aRelations);
*aRelations = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsIMutableArray> relations = do_CreateInstance(NS_ARRAY_CONTRACTID);
NS_ENSURE_TRUE(relations, NS_ERROR_OUT_OF_MEMORY);
static const uint32_t relationTypes[] = {
nsIAccessibleRelation::RELATION_LABELLED_BY,
nsIAccessibleRelation::RELATION_LABEL_FOR,
nsIAccessibleRelation::RELATION_DESCRIBED_BY,
nsIAccessibleRelation::RELATION_DESCRIPTION_FOR,
nsIAccessibleRelation::RELATION_NODE_CHILD_OF,
nsIAccessibleRelation::RELATION_NODE_PARENT_OF,
nsIAccessibleRelation::RELATION_CONTROLLED_BY,
nsIAccessibleRelation::RELATION_CONTROLLER_FOR,
nsIAccessibleRelation::RELATION_FLOWS_TO,
nsIAccessibleRelation::RELATION_FLOWS_FROM,
nsIAccessibleRelation::RELATION_MEMBER_OF,
nsIAccessibleRelation::RELATION_SUBWINDOW_OF,
nsIAccessibleRelation::RELATION_EMBEDS,
nsIAccessibleRelation::RELATION_EMBEDDED_BY,
nsIAccessibleRelation::RELATION_POPUP_FOR,
nsIAccessibleRelation::RELATION_PARENT_WINDOW_OF,
nsIAccessibleRelation::RELATION_DEFAULT_BUTTON,
nsIAccessibleRelation::RELATION_CONTAINING_DOCUMENT,
nsIAccessibleRelation::RELATION_CONTAINING_TAB_PANE,
nsIAccessibleRelation::RELATION_CONTAINING_APPLICATION
};
for (uint32_t idx = 0; idx < ArrayLength(relationTypes); idx++) {
nsCOMPtr<nsIAccessibleRelation> relation;
nsresult rv = GetRelationByType(relationTypes[idx], getter_AddRefs(relation));
if (NS_SUCCEEDED(rv) && relation) {
uint32_t targets = 0;
relation->GetTargetsCount(&targets);
if (targets)
relations->AppendElement(relation, false);
}
}
NS_ADDREF(*aRelations = relations);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetFocusedChild(nsIAccessible** aChild)
{
NS_ENSURE_ARG_POINTER(aChild);
*aChild = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aChild = static_cast<Accessible*>(this)->FocusedChild());
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetChildAtPoint(int32_t aX, int32_t aY,
nsIAccessible** aAccessible)
{
NS_ENSURE_ARG_POINTER(aAccessible);
*aAccessible = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aAccessible =
static_cast<Accessible*>(this)->ChildAtPoint(aX, aY,
Accessible::eDirectChild));
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetDeepestChildAtPoint(int32_t aX, int32_t aY,
nsIAccessible** aAccessible)
{
NS_ENSURE_ARG_POINTER(aAccessible);
*aAccessible = nullptr;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
NS_IF_ADDREF(*aAccessible =
static_cast<Accessible*>(this)->ChildAtPoint(aX, aY,
Accessible::eDeepestChild));
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableSetSelected(bool aSelect)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->SetSelected(aSelect);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ExtendSelection()
{
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHODIMP
xpcAccessible::ScriptableTakeSelection()
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->TakeSelection();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableTakeFocus()
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->TakeFocus();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetActionCount(uint8_t* aActionCount)
{
NS_ENSURE_ARG_POINTER(aActionCount);
*aActionCount = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aActionCount = static_cast<Accessible*>(this)->ActionCount();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex >= static_cast<Accessible*>(this)->ActionCount())
return NS_ERROR_INVALID_ARG;
static_cast<Accessible*>(this)->ActionNameAt(aIndex, aName);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::GetActionDescription(uint8_t aIndex, nsAString& aDescription)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex >= static_cast<Accessible*>(this)->ActionCount())
return NS_ERROR_INVALID_ARG;
static_cast<Accessible*>(this)->ActionDescriptionAt(aIndex, aDescription);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableDoAction(uint8_t aIndex)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
return static_cast<Accessible*>(this)->DoAction(aIndex) ?
NS_OK : NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
xpcAccessible::ScriptableScrollTo(uint32_t aHow)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->ScrollTo(aHow);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessible::ScriptableScrollToPoint(uint32_t aCoordinateType,
int32_t aX, int32_t aY)
{
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
static_cast<Accessible*>(this)->ScrollToPoint(aCoordinateType, aX, aY);
return NS_OK;
}

View File

@ -0,0 +1,88 @@
/* -*- 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/. */
#ifndef mozilla_a11y_xpcAccessible_h_
#define mozilla_a11y_xpcAccessible_h_
#include "nsIAccessible.h"
class nsIAccessible;
namespace mozilla {
namespace a11y {
class xpcAccessible : public nsIAccessible
{
public:
NS_IMETHOD GetParent(nsIAccessible** aParent) MOZ_FINAL;
NS_IMETHOD GetNextSibling(nsIAccessible** aNextSibling) MOZ_FINAL;
NS_IMETHOD GetPreviousSibling(nsIAccessible** aPreviousSibling) MOZ_FINAL;
NS_IMETHOD GetFirstChild(nsIAccessible** aFirstChild) MOZ_FINAL;
NS_IMETHOD GetLastChild(nsIAccessible** aLastChild) MOZ_FINAL;
NS_IMETHOD GetChildCount(int32_t* aChildCount) MOZ_FINAL;
NS_IMETHOD ScriptableGetChildAt(int32_t aChildIndex,
nsIAccessible** aChild) MOZ_FINAL;
NS_IMETHOD GetChildren(nsIArray** aChildren) MOZ_FINAL;
NS_IMETHOD GetIndexInParent(int32_t* aIndexInParent) MOZ_FINAL;
NS_IMETHOD GetDOMNode(nsIDOMNode** aDOMNode) MOZ_FINAL;
NS_IMETHOD GetDocument(nsIAccessibleDocument** aDocument) MOZ_FINAL;
NS_IMETHOD GetRootDocument(nsIAccessibleDocument** aRootDocument) MOZ_FINAL;
NS_IMETHOD GetRole(uint32_t* aRole) MOZ_FINAL;
NS_IMETHOD GetState(uint32_t* aState, uint32_t* aExtraState) MOZ_FINAL;
NS_IMETHOD GetDescription(nsAString& aDescription) MOZ_FINAL;
NS_IMETHOD GetName(nsAString& aName) MOZ_FINAL;
NS_IMETHOD GetLanguage(nsAString& aLanguage) MOZ_FINAL;
NS_IMETHOD GetValue(nsAString& aValue) MOZ_FINAL;
NS_IMETHOD GetHelp(nsAString& aHelp) MOZ_FINAL;
NS_IMETHOD GetAccessKey(nsAString& aAccessKey) MOZ_FINAL;
NS_IMETHOD GetKeyboardShortcut(nsAString& aKeyBinding) MOZ_FINAL;
NS_IMETHOD GetAttributes(nsIPersistentProperties** aAttributes) MOZ_FINAL;
NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight) MOZ_FINAL;
NS_IMETHOD ScriptableGroupPosition(int32_t* aGroupLevel,
int32_t* aSimilarItemsInGroup,
int32_t* aPositionInGroup) MOZ_FINAL;
NS_IMETHOD GetRelationByType(uint32_t aType,
nsIAccessibleRelation** aRelation) MOZ_FINAL;
NS_IMETHOD GetRelations(nsIArray** aRelations) MOZ_FINAL;
NS_IMETHOD GetFocusedChild(nsIAccessible** aChild) MOZ_FINAL;
NS_IMETHOD GetChildAtPoint(int32_t aX, int32_t aY,
nsIAccessible** aAccessible) MOZ_FINAL;
NS_IMETHOD GetDeepestChildAtPoint(int32_t aX, int32_t aY,
nsIAccessible** aAccessible) MOZ_FINAL;
NS_IMETHOD ScriptableSetSelected(bool aSelect) MOZ_FINAL;
NS_IMETHOD ExtendSelection() MOZ_FINAL;
NS_IMETHOD ScriptableTakeSelection() MOZ_FINAL;
NS_IMETHOD ScriptableTakeFocus() MOZ_FINAL;
NS_IMETHOD GetActionCount(uint8_t* aActionCount) MOZ_FINAL;
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName) MOZ_FINAL;
NS_IMETHOD GetActionDescription(uint8_t aIndex, nsAString& aDescription) MOZ_FINAL;
NS_IMETHOD ScriptableDoAction(uint8_t aIndex) MOZ_FINAL;
NS_IMETHOD ScriptableScrollTo(uint32_t aHow) MOZ_FINAL;
NS_IMETHOD ScriptableScrollToPoint(uint32_t aCoordinateType,
int32_t aX, int32_t aY) MOZ_FINAL;
private:
xpcAccessible() { }
friend class Accessible;
xpcAccessible(const xpcAccessible&) MOZ_DELETE;
xpcAccessible& operator =(const xpcAccessible&) MOZ_DELETE;
};
} // namespace a11y
} // namespace mozilla
#endif

View File

@ -0,0 +1,97 @@
/* -*- 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 "xpcAccessibleHyperLink.h"
#include "Accessible-inl.h"
using namespace mozilla::a11y;
NS_IMETHODIMP
xpcAccessibleHyperLink::GetStartIndex(int32_t* aStartIndex)
{
NS_ENSURE_ARG_POINTER(aStartIndex);
*aStartIndex = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aStartIndex = static_cast<Accessible*>(this)->StartOffset();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessibleHyperLink::GetEndIndex(int32_t* aEndIndex)
{
NS_ENSURE_ARG_POINTER(aEndIndex);
*aEndIndex = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aEndIndex = static_cast<Accessible*>(this)->EndOffset();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessibleHyperLink::GetAnchorCount(int32_t* aAnchorCount)
{
NS_ENSURE_ARG_POINTER(aAnchorCount);
*aAnchorCount = 0;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aAnchorCount = static_cast<Accessible*>(this)->AnchorCount();
return NS_OK;
}
NS_IMETHODIMP
xpcAccessibleHyperLink::GetURI(int32_t aIndex, nsIURI** aURI)
{
NS_ENSURE_ARG_POINTER(aURI);
Accessible* thisAcc = static_cast<Accessible*>(this);
if (thisAcc->IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex < 0 || aIndex >= static_cast<int32_t>(thisAcc->AnchorCount()))
return NS_ERROR_INVALID_ARG;
nsRefPtr<nsIURI>(thisAcc->AnchorURIAt(aIndex)).forget(aURI);
return NS_OK;
}
NS_IMETHODIMP
xpcAccessibleHyperLink::GetAnchor(int32_t aIndex, nsIAccessible** aAccessible)
{
NS_ENSURE_ARG_POINTER(aAccessible);
*aAccessible = nullptr;
Accessible* thisAcc = static_cast<Accessible*>(this);
if (thisAcc->IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex < 0 || aIndex >= static_cast<int32_t>(thisAcc->AnchorCount()))
return NS_ERROR_INVALID_ARG;
NS_IF_ADDREF(*aAccessible = thisAcc->AnchorAt(aIndex));
return NS_OK;
}
NS_IMETHODIMP
xpcAccessibleHyperLink::GetValid(bool* aValid)
{
NS_ENSURE_ARG_POINTER(aValid);
*aValid = false;
if (static_cast<Accessible*>(this)->IsDefunct())
return NS_ERROR_FAILURE;
*aValid = static_cast<Accessible*>(this)->IsLinkValid();
return NS_OK;
}

View File

@ -0,0 +1,38 @@
/* -*- 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/. */
#ifndef mozilla_a11y_xpcAccessibleHyperLink_h_
#define mozilla_a11y_xpcAccessibleHyperLink_h_
#include "nsIAccessibleHyperLink.h"
class nsIAccessible;
namespace mozilla {
namespace a11y {
class xpcAccessibleHyperLink : public nsIAccessibleHyperLink
{
public:
NS_IMETHOD GetAnchorCount(int32_t* aAnchorCount) MOZ_FINAL;
NS_IMETHOD GetStartIndex(int32_t* aStartIndex) MOZ_FINAL;
NS_IMETHOD GetEndIndex(int32_t* aEndIndex) MOZ_FINAL;
NS_IMETHOD GetURI(int32_t aIndex, nsIURI** aURI) MOZ_FINAL;
NS_IMETHOD GetAnchor(int32_t aIndex, nsIAccessible** aAccessible) MOZ_FINAL;
NS_IMETHOD GetValid(bool* aValid) MOZ_FINAL;
private:
xpcAccessibleHyperLink() { }
friend class Accessible;
xpcAccessibleHyperLink(const xpcAccessibleHyperLink&) MOZ_DELETE;
xpcAccessibleHyperLink& operator =(const xpcAccessibleHyperLink&) MOZ_DELETE;
};
} // namespace a11y
} // namespace mozilla
#endif

View File

@ -24,8 +24,8 @@ public:
// Accessible
virtual mozilla::a11y::ENameValueFlag Name(nsString& aName);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;

View File

@ -22,9 +22,9 @@ public:
// Accessible
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// Widgets
virtual Accessible* ContainerWidget() const;
@ -40,8 +40,8 @@ public:
XULColorPickerAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;

View File

@ -120,53 +120,40 @@ XULComboboxAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
bool
XULComboboxAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != XULComboboxAccessible::eAction_Click) {
return NS_ERROR_INVALID_ARG;
}
if (IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex != XULComboboxAccessible::eAction_Click)
return false;
// Programmaticaly toggle the combo box.
nsCOMPtr<nsIDOMXULMenuListElement> menuList(do_QueryInterface(mContent));
if (!menuList) {
return NS_ERROR_FAILURE;
}
bool isDroppedDown;
if (!menuList)
return false;
bool isDroppedDown = false;
menuList->GetOpen(&isDroppedDown);
return menuList->SetOpen(!isDroppedDown);
menuList->SetOpen(!isDroppedDown);
return true;
}
NS_IMETHODIMP
XULComboboxAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULComboboxAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex != XULComboboxAccessible::eAction_Click) {
return NS_ERROR_INVALID_ARG;
}
if (IsDefunct())
return NS_ERROR_FAILURE;
// Our action name is the reverse of our state:
// if we are close -> open is our name.
// if we are open -> close is our name.
// Uses the frame to get the state, updated on every click.
aName.Truncate();
if (aIndex != XULComboboxAccessible::eAction_Click)
return;
nsCOMPtr<nsIDOMXULMenuListElement> menuList(do_QueryInterface(mContent));
if (!menuList) {
return NS_ERROR_FAILURE;
}
bool isDroppedDown;
if (!menuList)
return;
bool isDroppedDown = false;
menuList->GetOpen(&isDroppedDown);
if (isDroppedDown)
aName.AssignLiteral("close");
else
aName.AssignLiteral("open");
return NS_OK;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -21,19 +21,17 @@ public:
XULComboboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD DoAction(uint8_t aIndex);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
// Accessible
virtual void Description(nsString& aDescription);
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState();
virtual bool CanHaveAnonChildren();
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsActiveWidget() const;

View File

@ -233,29 +233,23 @@ XULLinkAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
XULLinkAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULLinkAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
if (aIndex != eAction_Jump)
return NS_ERROR_INVALID_ARG;
aName.AssignLiteral("jump");
return NS_OK;
if (aIndex == eAction_Jump)
aName.AssignLiteral("jump");
}
NS_IMETHODIMP
bool
XULLinkAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Jump)
return NS_ERROR_INVALID_ARG;
if (IsDefunct())
return NS_ERROR_FAILURE;
return false;
DoCommand();
return NS_OK;
return true;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -24,8 +24,8 @@ public:
// Accessible
virtual void Shutdown();
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
void UpdateLabelValue(const nsString& aValue);
@ -75,8 +75,8 @@ public:
XULTooltipAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
};
class XULLinkAccessible : public XULLabelAccessible
@ -87,17 +87,15 @@ public:
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeLinkState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeLinkState() const MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// HyperLinkAccessible
virtual bool IsLink();

View File

@ -65,24 +65,21 @@ XULButtonAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
XULButtonAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULButtonAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
if (aIndex == eAction_Click)
aName.AssignLiteral("press");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
XULButtonAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != 0)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
////////////////////////////////////////////////////////////////////////////////
@ -196,7 +193,7 @@ XULButtonAccessible::IsAcceptableChild(Accessible* aPossibleChild) const
// XULButtonAccessible protected
bool
XULButtonAccessible::ContainsMenu()
XULButtonAccessible::ContainsMenu() const
{
static nsIContent::AttrValuesArray strings[] =
{&nsGkAtoms::menu, &nsGkAtoms::menuButton, nullptr};
@ -223,7 +220,7 @@ XULDropmarkerAccessible::ActionCount()
}
bool
XULDropmarkerAccessible::DropmarkerOpen(bool aToggleOpen)
XULDropmarkerAccessible::DropmarkerOpen(bool aToggleOpen) const
{
bool isOpen = false;
@ -248,34 +245,26 @@ XULDropmarkerAccessible::DropmarkerOpen(bool aToggleOpen)
return isOpen;
}
/**
* Return the name of our only action
*/
NS_IMETHODIMP
XULDropmarkerAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULDropmarkerAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
if (aIndex == eAction_Click) {
if (DropmarkerOpen(false))
aName.AssignLiteral("close");
else
aName.AssignLiteral("open");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
/**
* Tell the Dropmarker to do its action
*/
NS_IMETHODIMP
bool
XULDropmarkerAccessible::DoAction(uint8_t index)
{
if (index == eAction_Click) {
DropmarkerOpen(true); // Reverse the open attribute
return NS_OK;
return true;
}
return NS_ERROR_INVALID_ARG;
return false;
}
role
@ -312,36 +301,25 @@ XULCheckboxAccessible::ActionCount()
return 1;
}
/**
* Return the name of our only action
*/
NS_IMETHODIMP
XULCheckboxAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULCheckboxAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
// check or uncheck
if (NativeState() & states::CHECKED)
aName.AssignLiteral("uncheck");
else
aName.AssignLiteral("check");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
/**
* Tell the checkbox to do its only action -- check( or uncheck) itself
*/
NS_IMETHODIMP
bool
XULCheckboxAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
uint64_t

View File

@ -35,16 +35,14 @@ public:
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -58,7 +56,7 @@ protected:
virtual ~XULButtonAccessible();
// XULButtonAccessible
bool ContainsMenu();
bool ContainsMenu() const;
};
@ -71,16 +69,14 @@ public:
enum { eAction_Click = 0 };
XULCheckboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
};
/**
@ -92,19 +88,17 @@ public:
enum { eAction_Click = 0 };
XULDropmarkerAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
private:
bool DropmarkerOpen(bool aToggleOpen);
bool DropmarkerOpen(bool aToggleOpen) const;
};
/**
@ -116,7 +110,7 @@ public:
XULGroupboxAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
protected:
@ -134,8 +128,8 @@ public:
XULRadioButtonAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// Widgets
virtual Accessible* ContainerWidget() const;
@ -150,8 +144,8 @@ public:
XULRadioGroupAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeInteractiveState() const;
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -168,7 +162,7 @@ public:
XULStatusBarAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
};
/**
@ -196,7 +190,7 @@ public:
XULToolbarAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
protected:
// Accessible
@ -213,8 +207,8 @@ public:
DocAccessible* aDoc);
// Accessible
virtual mozilla::a11y::role NativeRole();
virtual uint64_t NativeState();
virtual mozilla::a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
};
} // namespace a11y

View File

@ -76,24 +76,21 @@ XULColumnItemAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
XULColumnItemAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULColumnItemAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
aName.AssignLiteral("click");
return NS_OK;
if (aIndex == eAction_Click)
aName.AssignLiteral("click");
}
NS_IMETHODIMP
bool
XULColumnItemAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
return false;
DoCommand();
return NS_OK;
return true;
}
////////////////////////////////////////////////////////////////////////////////
@ -593,7 +590,7 @@ XULListitemAccessible::~XULListitemAccessible()
NS_IMPL_ISUPPORTS_INHERITED0(XULListitemAccessible, Accessible)
Accessible*
XULListitemAccessible::GetListAccessible()
XULListitemAccessible::GetListAccessible() const
{
if (IsDefunct())
return nullptr;
@ -696,21 +693,16 @@ XULListitemAccessible::NativeInteractiveState() const
states::UNAVAILABLE : states::FOCUSABLE | states::SELECTABLE;
}
NS_IMETHODIMP
XULListitemAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULListitemAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click && mIsCheckbox) {
// check or uncheck
uint64_t states = NativeState();
if (states & states::CHECKED)
aName.AssignLiteral("uncheck");
else
aName.AssignLiteral("check");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
bool

View File

@ -30,8 +30,8 @@ public:
XULColumAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
};
/**
@ -43,16 +43,14 @@ class XULColumnItemAccessible : public LeafAccessible
public:
XULColumnItemAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
enum { eAction_Click = 0 };
};
@ -95,8 +93,8 @@ public:
virtual void Shutdown();
virtual void Value(nsString& aValue);
virtual TableAccessible* AsTable() { return this; }
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -123,17 +121,16 @@ public:
XULListitemAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t index, nsAString& aName);
// Don't use XUL menuitems's description attribute
// Accessible
virtual void Description(nsString& aDesc);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual bool CanHaveAnonChildren();
// Actions
virtual void ActionNameAt(uint8_t index, nsAString& aName) MOZ_OVERRIDE;
// Widgets
virtual Accessible* ContainerWidget() const;
@ -148,7 +145,7 @@ protected:
/**
* Return listbox accessible for the listitem.
*/
Accessible* GetListAccessible();
Accessible* GetListAccessible() const;
private:
bool mIsCheckbox;
@ -175,7 +172,7 @@ public:
virtual TableCellAccessible* AsTableCell() { return this; }
virtual void Shutdown();
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
// TableCellAccessible
virtual TableAccessible* Table() const MOZ_OVERRIDE;

View File

@ -274,26 +274,22 @@ XULMenuitemAccessible::CanHaveAnonChildren()
return false;
}
NS_IMETHODIMP
bool
XULMenuitemAccessible::DoAction(uint8_t index)
{
if (index == eAction_Click) { // default action
DoCommand();
return NS_OK;
return true;
}
return NS_ERROR_INVALID_ARG;
return false;
}
/** select us! close combo box if necessary*/
NS_IMETHODIMP
XULMenuitemAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULMenuitemAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Click) {
if (aIndex == eAction_Click)
aName.AssignLiteral("click");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
uint8_t
@ -383,16 +379,16 @@ XULMenuSeparatorAccessible::NativeRole()
return roles::SEPARATOR;
}
NS_IMETHODIMP
bool
XULMenuSeparatorAccessible::DoAction(uint8_t index)
{
return NS_ERROR_NOT_IMPLEMENTED;
return false;
}
NS_IMETHODIMP
XULMenuSeparatorAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULMenuSeparatorAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
return NS_ERROR_NOT_IMPLEMENTED;
aName.Truncate();
}
uint8_t

View File

@ -23,21 +23,19 @@ public:
XULMenuitemAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
// Accessible
virtual void Description(nsString& aDescription);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual int32_t GetLevelInternal();
virtual bool CanHaveAnonChildren();
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
virtual KeyBinding AccessKey() const;
virtual KeyBinding KeyboardShortcut() const;
@ -59,16 +57,14 @@ class XULMenuSeparatorAccessible : public XULMenuitemAccessible
public:
XULMenuSeparatorAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD DoAction(uint8_t index);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
protected:
// Accessible
@ -85,8 +81,8 @@ public:
XULMenupopupAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
// Widgets
virtual bool IsWidget() const;
@ -109,7 +105,7 @@ public:
XULMenubarAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
// Widget
virtual bool IsActiveWidget() const;

View File

@ -71,27 +71,25 @@ XULSliderAccessible::ActionCount()
return 1;
}
NS_IMETHODIMP
XULSliderAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULSliderAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
NS_ENSURE_ARG(aIndex == 0);
aName.AssignLiteral("activate");
return NS_OK;
if (aIndex == 0)
aName.AssignLiteral("activate");
}
NS_IMETHODIMP
bool
XULSliderAccessible::DoAction(uint8_t aIndex)
{
NS_ENSURE_ARG(aIndex == 0);
if (aIndex != 0)
return false;
nsIContent* sliderElm = GetSliderElement();
if (sliderElm)
DoCommand(sliderElm);
return NS_OK;
return true;
}
double

View File

@ -21,14 +21,10 @@ class XULSliderAccessible : public AccessibleWrap
public:
XULSliderAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual bool NativelyUnavailable() const;
virtual bool CanHaveAnonChildren();
@ -40,7 +36,9 @@ public:
virtual bool SetCurValue(double aValue) MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
protected:
/**
@ -68,7 +66,7 @@ public:
XULThumbAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
};
} // namespace a11y

View File

@ -39,30 +39,24 @@ XULTabAccessible::ActionCount()
}
/** Return the name of our only action */
NS_IMETHODIMP
XULTabAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULTabAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (aIndex == eAction_Switch) {
if (aIndex == eAction_Switch)
aName.AssignLiteral("switch");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
/** Tell the tab to do its action */
NS_IMETHODIMP
bool
XULTabAccessible::DoAction(uint8_t index)
{
if (index == eAction_Switch) {
nsCOMPtr<nsIDOMXULElement> tab(do_QueryInterface(mContent));
if ( tab )
{
if (tab) {
tab->Click();
return NS_OK;
return true;
}
return NS_ERROR_FAILURE;
}
return NS_ERROR_INVALID_ARG;
return false;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -23,18 +23,16 @@ public:
XULTabAccessible(nsIContent* aContent, DocAccessible* aDoc);
// nsIAccessible
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t index);
// Accessible
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
};
@ -48,10 +46,10 @@ public:
// Accessible
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
protected:
// Accessible
@ -70,7 +68,7 @@ public:
{ mType = eXULTabpanelsType; }
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
};
@ -87,7 +85,7 @@ public:
XULTabpanelAccessible(nsIContent* aContent, DocAccessible* aDoc);
// Accessible
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
};

View File

@ -733,34 +733,23 @@ XULTreeItemAccessibleBase::FocusedChild()
return FocusMgr()->FocusedAccessible() == this ? this : nullptr;
}
NS_IMETHODIMP
XULTreeItemAccessibleBase::GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight)
nsIntRect
XULTreeItemAccessibleBase::Bounds() const
{
NS_ENSURE_ARG_POINTER(aX);
*aX = 0;
NS_ENSURE_ARG_POINTER(aY);
*aY = 0;
NS_ENSURE_ARG_POINTER(aWidth);
*aWidth = 0;
NS_ENSURE_ARG_POINTER(aHeight);
*aHeight = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
// Get x coordinate and width from treechildren element, get y coordinate and
// height from tree cell.
nsCOMPtr<nsIBoxObject> boxObj = nsCoreUtils::GetTreeBodyBoxObject(mTree);
NS_ENSURE_STATE(boxObj);
if (!boxObj)
return nsIntRect();
nsCOMPtr<nsITreeColumn> column = nsCoreUtils::GetFirstSensibleColumn(mTree);
int32_t x = 0, y = 0, width = 0, height = 0;
nsresult rv = mTree->GetCoordsForCellItem(mRow, column, EmptyCString(),
&x, &y, &width, &height);
NS_ENSURE_SUCCESS(rv, rv);
if (NS_FAILED(rv))
return nsIntRect();
boxObj->GetWidth(&width);
@ -772,45 +761,35 @@ XULTreeItemAccessibleBase::GetBounds(int32_t* aX, int32_t* aY,
y += tcY;
nsPresContext* presContext = mDoc->PresContext();
*aX = presContext->CSSPixelsToDevPixels(x);
*aY = presContext->CSSPixelsToDevPixels(y);
*aWidth = presContext->CSSPixelsToDevPixels(width);
*aHeight = presContext->CSSPixelsToDevPixels(height);
return NS_OK;
return nsIntRect(presContext->CSSPixelsToDevPixels(x),
presContext->CSSPixelsToDevPixels(y),
presContext->CSSPixelsToDevPixels(width),
presContext->CSSPixelsToDevPixels(height));
}
NS_IMETHODIMP
void
XULTreeItemAccessibleBase::SetSelected(bool aSelect)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsITreeSelection> selection;
mTreeView->GetSelection(getter_AddRefs(selection));
if (selection) {
bool isSelected;
bool isSelected = false;
selection->IsSelected(mRow, &isSelected);
if (isSelected != aSelect)
selection->ToggleSelect(mRow);
}
return NS_OK;
}
NS_IMETHODIMP
void
XULTreeItemAccessibleBase::TakeFocus()
{
if (IsDefunct())
return NS_ERROR_FAILURE;
nsCOMPtr<nsITreeSelection> selection;
mTreeView->GetSelection(getter_AddRefs(selection));
if (selection)
selection->SetCurrentIndex(mRow);
// focus event will be fired here
return Accessible::TakeFocus();
Accessible::TakeFocus();
}
Relation
@ -855,43 +834,33 @@ XULTreeItemAccessibleBase::ActionCount()
return IsExpandable() ? 2 : 1;
}
NS_IMETHODIMP
XULTreeItemAccessibleBase::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULTreeItemAccessibleBase::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex == eAction_Click) {
aName.AssignLiteral("activate");
return NS_OK;
return;
}
if (aIndex == eAction_Expand && IsExpandable()) {
bool isContainerOpen;
bool isContainerOpen = false;
mTreeView->IsContainerOpen(mRow, &isContainerOpen);
if (isContainerOpen)
aName.AssignLiteral("collapse");
else
aName.AssignLiteral("expand");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
XULTreeItemAccessibleBase::DoAction(uint8_t aIndex)
{
if (IsDefunct())
return NS_ERROR_FAILURE;
if (aIndex != eAction_Click &&
(aIndex != eAction_Expand || !IsExpandable()))
return NS_ERROR_INVALID_ARG;
return false;
DoCommand(nullptr, aIndex);
return NS_OK;
return true;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -41,8 +41,8 @@ public:
// Accessible
virtual void Shutdown();
virtual void Value(nsString& aValue);
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild);
@ -146,27 +146,22 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeItemAccessibleBase,
AccessibleWrap)
// nsIAccessible
NS_IMETHOD GetBounds(int32_t *aX, int32_t *aY,
int32_t *aWidth, int32_t *aHeight);
NS_IMETHOD SetSelected(bool aSelect);
NS_IMETHOD TakeFocus();
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// Accessible
virtual void Shutdown();
virtual GroupPos GroupPosition();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual int32_t IndexInParent() const;
virtual void Shutdown() MOZ_OVERRIDE;
virtual nsIntRect Bounds() const MOZ_OVERRIDE;
virtual GroupPos GroupPosition() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
virtual int32_t IndexInParent() const MOZ_OVERRIDE;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
virtual Accessible* FocusedChild();
virtual Accessible* FocusedChild() MOZ_OVERRIDE;
virtual void SetSelected(bool aSelect) MOZ_OVERRIDE;
virtual void TakeFocus() MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// Widgets
virtual Accessible* ContainerWidget() const;
@ -240,7 +235,7 @@ public:
// Accessible
virtual void Shutdown();
virtual ENameValueFlag Name(nsString& aName);
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
// XULTreeItemAccessibleBase
virtual void RowInvalidated(int32_t aStartColIdx, int32_t aEndColIdx);

View File

@ -146,13 +146,11 @@ XULTreeGridAccessible::ColDescription(uint32_t aColIdx, nsString& aDescription)
{
aDescription.Truncate();
nsCOMPtr<nsIAccessible> treeColumns;
Accessible::GetFirstChild(getter_AddRefs(treeColumns));
Accessible* treeColumns = Accessible::GetChildAt(0);
if (treeColumns) {
nsCOMPtr<nsIAccessible> treeColumnItem;
treeColumns->GetChildAt(aColIdx, getter_AddRefs(treeColumnItem));
Accessible* treeColumnItem = treeColumns->GetChildAt(aColIdx);
if (treeColumnItem)
treeColumnItem->GetName(aDescription);
treeColumnItem->Name(aDescription);
}
}
@ -513,32 +511,21 @@ XULTreeGridCellAccessible::Name(nsString& aName)
return eNameOK;
}
NS_IMETHODIMP
XULTreeGridCellAccessible::GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight)
nsIntRect
XULTreeGridCellAccessible::Bounds() const
{
NS_ENSURE_ARG_POINTER(aX);
*aX = 0;
NS_ENSURE_ARG_POINTER(aY);
*aY = 0;
NS_ENSURE_ARG_POINTER(aWidth);
*aWidth = 0;
NS_ENSURE_ARG_POINTER(aHeight);
*aHeight = 0;
if (IsDefunct())
return NS_ERROR_FAILURE;
// Get bounds for tree cell and add x and y of treechildren element to
// x and y of the cell.
nsCOMPtr<nsIBoxObject> boxObj = nsCoreUtils::GetTreeBodyBoxObject(mTree);
NS_ENSURE_STATE(boxObj);
if (!boxObj)
return nsIntRect();
int32_t x = 0, y = 0, width = 0, height = 0;
nsresult rv = mTree->GetCoordsForCellItem(mRow, mColumn,
NS_LITERAL_CSTRING("cell"),
&x, &y, &width, &height);
NS_ENSURE_SUCCESS(rv, rv);
if (NS_FAILED(rv))
return nsIntRect();
int32_t tcX = 0, tcY = 0;
boxObj->GetScreenX(&tcX);
@ -547,12 +534,10 @@ XULTreeGridCellAccessible::GetBounds(int32_t* aX, int32_t* aY,
y += tcY;
nsPresContext* presContext = mDoc->PresContext();
*aX = presContext->CSSPixelsToDevPixels(x);
*aY = presContext->CSSPixelsToDevPixels(y);
*aWidth = presContext->CSSPixelsToDevPixels(width);
*aHeight = presContext->CSSPixelsToDevPixels(height);
return NS_OK;
return nsIntRect(presContext->CSSPixelsToDevPixels(x),
presContext->CSSPixelsToDevPixels(y),
presContext->CSSPixelsToDevPixels(width),
presContext->CSSPixelsToDevPixels(height));
}
uint8_t
@ -571,25 +556,22 @@ XULTreeGridCellAccessible::ActionCount()
return 0;
}
NS_IMETHODIMP
XULTreeGridCellAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
void
XULTreeGridCellAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
{
aName.Truncate();
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
if (IsDefunct() || !mTreeView)
return NS_ERROR_FAILURE;
if (aIndex != eAction_Click || !mTreeView)
return;
bool isCycler = false;
mColumn->GetCycler(&isCycler);
if (isCycler) {
aName.AssignLiteral("cycle");
return NS_OK;
return;
}
int16_t type;
int16_t type = 0;
mColumn->GetType(&type);
if (type == nsITreeColumn::TYPE_CHECKBOX && IsEditable()) {
nsAutoString value;
@ -598,37 +580,30 @@ XULTreeGridCellAccessible::GetActionName(uint8_t aIndex, nsAString& aName)
aName.AssignLiteral("uncheck");
else
aName.AssignLiteral("check");
return NS_OK;
}
return NS_ERROR_INVALID_ARG;
}
NS_IMETHODIMP
bool
XULTreeGridCellAccessible::DoAction(uint8_t aIndex)
{
if (aIndex != eAction_Click)
return NS_ERROR_INVALID_ARG;
if (IsDefunct())
return NS_ERROR_FAILURE;
return false;
bool isCycler = false;
mColumn->GetCycler(&isCycler);
if (isCycler) {
DoCommand();
return NS_OK;
return true;
}
int16_t type;
mColumn->GetType(&type);
if (type == nsITreeColumn::TYPE_CHECKBOX && IsEditable()) {
DoCommand();
return NS_OK;
return true;
}
return NS_ERROR_INVALID_ARG;
return false;
}
////////////////////////////////////////////////////////////////////////////////

View File

@ -57,7 +57,7 @@ public:
// Accessible
virtual void Shutdown();
virtual TableAccessible* AsTable() { return this; }
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
protected:
virtual ~XULTreeGridAccessible();
@ -88,7 +88,7 @@ public:
// Accessible
virtual void Shutdown();
virtual a11y::role NativeRole();
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual ENameValueFlag Name(nsString& aName);
virtual Accessible* ChildAtPoint(int32_t aX, int32_t aY,
EWhichChildAtPoint aWhichChild);
@ -141,31 +141,26 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(XULTreeGridCellAccessible,
LeafAccessible)
// nsIAccessible
NS_IMETHOD GetBounds(int32_t* aX, int32_t* aY,
int32_t* aWidth, int32_t* aHeight);
NS_IMETHOD GetActionName(uint8_t aIndex, nsAString& aName);
NS_IMETHOD DoAction(uint8_t aIndex);
// nsIAccessibleTableCell
NS_FORWARD_NSIACCESSIBLETABLECELL(xpcAccessibleTableCell::)
// Accessible
virtual TableCellAccessible* AsTableCell() { return this; }
virtual void Shutdown();
virtual nsIntRect Bounds() const MOZ_OVERRIDE;
virtual ENameValueFlag Name(nsString& aName);
virtual Accessible* FocusedChild();
virtual already_AddRefed<nsIPersistentProperties> NativeAttributes() MOZ_OVERRIDE;
virtual int32_t IndexInParent() const;
virtual Relation RelationByType(RelationType aType) MOZ_OVERRIDE;
virtual a11y::role NativeRole();
virtual uint64_t NativeState();
virtual uint64_t NativeInteractiveState() const;
virtual a11y::role NativeRole() MOZ_OVERRIDE;
virtual uint64_t NativeState() MOZ_OVERRIDE;
virtual uint64_t NativeInteractiveState() const MOZ_OVERRIDE;
// ActionAccessible
virtual uint8_t ActionCount();
virtual uint8_t ActionCount() MOZ_OVERRIDE;
virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) MOZ_OVERRIDE;
virtual bool DoAction(uint8_t aIndex) MOZ_OVERRIDE;
// TableCellAccessible
virtual TableAccessible* Table() const MOZ_OVERRIDE;