diff --git a/accessible/src/html/nsHTMLImageAccessible.cpp b/accessible/src/html/nsHTMLImageAccessible.cpp
index 261487351763..f4bb3442cbcc 100644
--- a/accessible/src/html/nsHTMLImageAccessible.cpp
+++ b/accessible/src/html/nsHTMLImageAccessible.cpp
@@ -30,6 +30,10 @@
#include "nsIDOMHTMLCollection.h"
#include "nsIAccessibilityService.h"
#include "nsIServiceManager.h"
+#include "imgIRequest.h"
+#include "imgIContainer.h"
+#include "nsIImageFrame.h"
+#include "nsIImageRequest.h"
// --- image -----
@@ -55,6 +59,40 @@ nsLinkableAccessible(aDOMNode, aShell)
}
}
+NS_IMETHODIMP nsHTMLImageAccessible::GetAccState(PRUint32 *_retval)
+{
+ // The state is a bitfield, get our inherited state, then logically OR it with STATE_ANIMATED if this
+ // is an animated image.
+
+ nsLinkableAccessible::GetAccState(_retval);
+
+ nsCOMPtr content(do_QueryInterface(mDOMNode));
+ nsCOMPtr shell(do_QueryReferent(mPresShell));
+ nsIFrame *frame = nsnull;
+ if (content && shell)
+ shell->GetPrimaryFrameFor(content, &frame);
+
+ nsCOMPtr imageFrame(do_QueryInterface(frame));
+
+ nsCOMPtr imageRequest;
+ if (imageFrame)
+ imageFrame->GetImageRequest(getter_AddRefs(imageRequest));
+
+ nsCOMPtr imgContainer;
+ if (imageRequest)
+ imageRequest->GetImage(getter_AddRefs(imgContainer));
+
+ if (imgContainer) {
+ PRUint32 numFrames;
+ imgContainer->GetNumFrames(&numFrames);
+ if (numFrames > 1)
+ *_retval |= STATE_ANIMATED;
+ }
+
+ return NS_OK;
+}
+
+
/* wstring getAccName (); */
NS_IMETHODIMP nsHTMLImageAccessible::GetAccName(nsAWritableString& _retval)
{
diff --git a/accessible/src/html/nsHTMLImageAccessible.h b/accessible/src/html/nsHTMLImageAccessible.h
index 69e11d824da0..4223bcbdbd74 100644
--- a/accessible/src/html/nsHTMLImageAccessible.h
+++ b/accessible/src/html/nsHTMLImageAccessible.h
@@ -40,6 +40,7 @@ class nsHTMLImageAccessible : public nsLinkableAccessible
public:
nsHTMLImageAccessible(nsIDOMNode* aDomNode, nsIImageFrame *imageFrame, nsIWeakReference* aShell);
NS_IMETHOD GetAccName(nsAWritableString& _retval);
+ NS_IMETHOD GetAccState(PRUint32 *_retval);
NS_IMETHOD GetAccRole(PRUint32 *_retval);
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);
diff --git a/accessible/src/nsHTMLImageAccessible.cpp b/accessible/src/nsHTMLImageAccessible.cpp
index 261487351763..f4bb3442cbcc 100644
--- a/accessible/src/nsHTMLImageAccessible.cpp
+++ b/accessible/src/nsHTMLImageAccessible.cpp
@@ -30,6 +30,10 @@
#include "nsIDOMHTMLCollection.h"
#include "nsIAccessibilityService.h"
#include "nsIServiceManager.h"
+#include "imgIRequest.h"
+#include "imgIContainer.h"
+#include "nsIImageFrame.h"
+#include "nsIImageRequest.h"
// --- image -----
@@ -55,6 +59,40 @@ nsLinkableAccessible(aDOMNode, aShell)
}
}
+NS_IMETHODIMP nsHTMLImageAccessible::GetAccState(PRUint32 *_retval)
+{
+ // The state is a bitfield, get our inherited state, then logically OR it with STATE_ANIMATED if this
+ // is an animated image.
+
+ nsLinkableAccessible::GetAccState(_retval);
+
+ nsCOMPtr content(do_QueryInterface(mDOMNode));
+ nsCOMPtr shell(do_QueryReferent(mPresShell));
+ nsIFrame *frame = nsnull;
+ if (content && shell)
+ shell->GetPrimaryFrameFor(content, &frame);
+
+ nsCOMPtr imageFrame(do_QueryInterface(frame));
+
+ nsCOMPtr imageRequest;
+ if (imageFrame)
+ imageFrame->GetImageRequest(getter_AddRefs(imageRequest));
+
+ nsCOMPtr imgContainer;
+ if (imageRequest)
+ imageRequest->GetImage(getter_AddRefs(imgContainer));
+
+ if (imgContainer) {
+ PRUint32 numFrames;
+ imgContainer->GetNumFrames(&numFrames);
+ if (numFrames > 1)
+ *_retval |= STATE_ANIMATED;
+ }
+
+ return NS_OK;
+}
+
+
/* wstring getAccName (); */
NS_IMETHODIMP nsHTMLImageAccessible::GetAccName(nsAWritableString& _retval)
{
diff --git a/accessible/src/nsHTMLImageAccessible.h b/accessible/src/nsHTMLImageAccessible.h
index 69e11d824da0..4223bcbdbd74 100644
--- a/accessible/src/nsHTMLImageAccessible.h
+++ b/accessible/src/nsHTMLImageAccessible.h
@@ -40,6 +40,7 @@ class nsHTMLImageAccessible : public nsLinkableAccessible
public:
nsHTMLImageAccessible(nsIDOMNode* aDomNode, nsIImageFrame *imageFrame, nsIWeakReference* aShell);
NS_IMETHOD GetAccName(nsAWritableString& _retval);
+ NS_IMETHOD GetAccState(PRUint32 *_retval);
NS_IMETHOD GetAccRole(PRUint32 *_retval);
NS_IMETHOD GetAccFirstChild(nsIAccessible **_retval);
NS_IMETHOD GetAccLastChild(nsIAccessible **_retval);