Bug 629912 - 4.0b11pre crash [@ NotificationController::TextEnumerator(nsPtrHashKey<nsIContent>*, void*) ][@ nsINode::GetFlags()], r=davidb, a=betaN+

This commit is contained in:
Alexander Surkov 2011-01-31 12:04:32 +08:00
parent 06f1c2af92
commit fb0f6d54cf
5 changed files with 30 additions and 3 deletions

View File

@ -161,6 +161,14 @@ public:
}
}
/**
* Cancel pending text update.
*/
inline void CancelTextUpdate(nsIContent* aTextNode)
{
mTextHash.RemoveEntry(aTextNode);
}
/**
* Pend accessible tree update for content insertion.
*/

View File

@ -53,12 +53,13 @@
#include "nsTArray.h"
#include "nsRefPtrHashtable.h"
class AccEvent;
class AccGroupInfo;
class EmbeddedObjCollector;
class nsHyperTextAccessible;
class nsAccessible;
class AccEvent;
class nsHyperTextAccessible;
struct nsRoleMapEntry;
class nsTextAccessible;
struct nsRect;
class nsIContent;
@ -359,6 +360,9 @@ public:
inline bool IsHyperText() const { return mFlags & eHyperTextAccessible; }
nsHyperTextAccessible* AsHyperText();
inline bool IsTextLeaf() const { return mFlags & eTextLeafAccessible; }
nsTextAccessible* AsTextLeaf();
//////////////////////////////////////////////////////////////////////////////
// HyperLinkAccessible
@ -499,7 +503,8 @@ protected:
* @note keep these flags in sync with ChildrenFlags
*/
enum AccessibleTypes {
eHyperTextAccessible = 1 << 2
eHyperTextAccessible = 1 << 2,
eTextLeafAccessible = 1 << 3
};
//////////////////////////////////////////////////////////////////////////////

View File

@ -2057,6 +2057,9 @@ nsDocAccessible::UncacheChildrenInSubtree(nsAccessible* aRoot)
for (PRUint32 idx = 0; idx < count; idx++)
UncacheChildrenInSubtree(aRoot->GetCachedChildAt(idx));
if (aRoot->IsTextLeaf())
mNotificationController->CancelTextUpdate(aRoot->GetContent());
if (aRoot->IsPrimaryForNode() &&
mNodeToAccessibleMap.Get(aRoot->GetNode()) == aRoot)
mNodeToAccessibleMap.Remove(aRoot->GetNode());

View File

@ -48,6 +48,7 @@ nsTextAccessible::
nsTextAccessible(nsIContent *aContent, nsIWeakReference *aShell) :
nsLinkableAccessible(aContent, aShell)
{
mFlags |= eTextLeafAccessible;
}
PRUint32

View File

@ -61,5 +61,15 @@ protected:
};
////////////////////////////////////////////////////////////////////////////////
// nsAccessible downcast method
inline nsTextAccessible*
nsAccessible::AsTextLeaf()
{
return mFlags & eTextLeafAccessible ?
static_cast<nsTextAccessible*>(this) : nsnull;
}
#endif