Bug 760038 - crash in NotificationController::WillRefresh, r=tbsaunde
--- a/accessible/src/generic/DocAccessible-inl.h
+++ b/accessible/src/generic/DocAccessible-inl.h
@@ -6,22 +6,16 @@
#ifndef mozilla_a11y_DocAccessible_inl_h_
#define mozilla_a11y_DocAccessible_inl_h_
#include "DocAccessible.h"
#include "nsAccessibilityService.h"
#include "NotificationController.h"
-inline DocAccessible*
-DocAccessible::ParentDocument() const
-{
- return GetAccService()->GetDocAccessible(mDocument->GetParentDocument());
-}
-
inline void
DocAccessible::BindChildDocument(DocAccessible* aDocument)
{
mNotificationController->ScheduleChildDocBinding(aDocument);
}
template<class Class, class Arg>
inline void
--- a/accessible/src/generic/DocAccessible.cpp
+++ b/accessible/src/generic/DocAccessible.cpp
@@ -2038,17 +2038,21 @@ DocAccessible::IsLoadEventTarget() const
do_QueryInterface(container);
NS_ASSERTION(docShellTreeItem, "No document shell for document!");
nsCOMPtr<nsIDocShellTreeItem> parentTreeItem;
docShellTreeItem->GetParent(getter_AddRefs(parentTreeItem));
// Return true if it's not a root document (either tab document or
// frame/iframe document) and its parent document is not in loading state.
- if (parentTreeItem)
- return ParentDocument()->HasLoadState(eCompletelyLoaded);
+ // Note: we can get notifications while document is loading (and thus
+ // while there's no parent document yet).
+ if (parentTreeItem) {
+ DocAccessible* parentDoc = ParentDocument();
+ return parentDoc && parentDoc->HasLoadState(eCompletelyLoaded);
+ }
// It's content (not chrome) root document.
PRInt32 contentType;
docShellTreeItem->GetItemType(&contentType);
return (contentType == nsIDocShellTreeItem::typeContent);
}
--- a/accessible/src/generic/DocAccessible.h
+++ b/accessible/src/generic/DocAccessible.h
@@ -147,17 +147,18 @@ public:
/**
* Return a native window handler or pointer depending on platform.
*/
virtual void* GetNativeWindow() const;
/**
* Return the parent document.
*/
- DocAccessible* ParentDocument() const;
+ DocAccessible* ParentDocument() const
+ { return mParent ? mParent->Document() : nsnull; }
/**
* Return the child document count.
*/
PRUint32 ChildDocumentCount() const
{ return mChildDocuments.Length(); }
/**