From e1ab9b72b7b5fc22969d80c75f17f6dd44055f2b Mon Sep 17 00:00:00 2001 From: Alexander Surkov Date: Thu, 4 Aug 2011 18:54:06 +0900 Subject: [PATCH] Bug 676267 - expose stale state on accessibles unattached from tree, r=tbsaunde --- accessible/src/base/nsAccessible.cpp | 5 + accessible/src/base/nsDocAccessible.h | 14 ++- accessible/tests/mochitest/states/Makefile.in | 1 + .../tests/mochitest/states/test_stale.html | 115 ++++++++++++++++++ 4 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 accessible/tests/mochitest/states/test_stale.html diff --git a/accessible/src/base/nsAccessible.cpp b/accessible/src/base/nsAccessible.cpp index b8347343d24..fc557d45f86 100644 --- a/accessible/src/base/nsAccessible.cpp +++ b/accessible/src/base/nsAccessible.cpp @@ -663,6 +663,11 @@ PRUint64 nsAccessible::NativeState() { PRUint64 state = 0; + + nsDocAccessible* document = GetDocAccessible(); + if (!document || !document->IsInDocument(this)) + state |= states::STALE; + PRBool disabled = PR_FALSE; if (mContent->IsElement()) { nsEventStates elementState = mContent->AsElement()->State(); diff --git a/accessible/src/base/nsDocAccessible.h b/accessible/src/base/nsDocAccessible.h index 2ecf46b1c00..2a82c88a0b7 100644 --- a/accessible/src/base/nsDocAccessible.h +++ b/accessible/src/base/nsDocAccessible.h @@ -235,9 +235,19 @@ public: /** * Return whether the given DOM node has an accessible or not. */ - inline bool HasAccessible(nsINode* aNode) + inline bool HasAccessible(nsINode* aNode) const + { return GetAccessible(aNode); } + + /** + * Return true if the given accessible is in document. + */ + inline bool IsInDocument(nsAccessible* aAccessible) const { - return GetAccessible(aNode); + nsAccessible* acc = aAccessible; + while (acc && !acc->IsPrimaryForNode()) + acc = acc->Parent(); + + return acc ? mNodeToAccessibleMap.Get(acc->GetNode()) : false; } /** diff --git a/accessible/tests/mochitest/states/Makefile.in b/accessible/tests/mochitest/states/Makefile.in index 8314fd9460b..6f139108e30 100644 --- a/accessible/tests/mochitest/states/Makefile.in +++ b/accessible/tests/mochitest/states/Makefile.in @@ -58,6 +58,7 @@ _TEST_FILES =\ test_inputs.xul \ test_link.html \ test_popup.xul \ + test_stale.html \ test_textbox.xul \ test_tree.xul \ z_frames.html \ diff --git a/accessible/tests/mochitest/states/test_stale.html b/accessible/tests/mochitest/states/test_stale.html new file mode 100644 index 00000000000..97a10f8a9b9 --- /dev/null +++ b/accessible/tests/mochitest/states/test_stale.html @@ -0,0 +1,115 @@ + + + + Stale state testing + + + + + + + + + + + + + + + Mozilla Bug 676267 + +

+ +
+  
+ +
+ + +