Bug 796061 - Part 2: Remove mInsertionParentTable from nsBindingManager. r=mrbkap

This commit is contained in:
William Chen
2013-07-17 09:05:06 -07:00
parent 1e57e7dfef
commit 21071ccf55
14 changed files with 146 additions and 124 deletions

View File

@@ -150,8 +150,7 @@ nsIContent*
nsIContent::GetFlattenedTreeParent() const
{
if (HasFlag(NODE_MAY_BE_IN_BINDING_MNGR)) {
nsIContent* parent = OwnerDoc()->BindingManager()->
GetInsertionParent(const_cast<nsIContent*>(this));
nsIContent* parent = GetXBLInsertionParent();
if (parent) {
return parent;
}
@@ -568,6 +567,9 @@ FragmentOrElement::nsDOMSlots::Traverse(nsCycleCollectionTraversalCallback &cb,
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mXBLBinding");
cb.NoteNativeChild(mXBLBinding, NS_CYCLE_COLLECTION_PARTICIPANT(nsXBLBinding));
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mXBLInsertionParent");
cb.NoteXPCOMChild(mXBLInsertionParent.get());
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mSlots->mChildrenList");
cb.NoteXPCOMChild(NS_ISUPPORTS_CAST(nsIDOMNodeList*, mChildrenList));
@@ -587,6 +589,7 @@ FragmentOrElement::nsDOMSlots::Unlink(bool aIsXUL)
if (aIsXUL)
NS_IF_RELEASE(mControllers);
mXBLBinding = nullptr;
mXBLInsertionParent = nullptr;
mChildrenList = nullptr;
mUndoManager = nullptr;
if (mClassList) {
@@ -806,8 +809,7 @@ nsIContent::PreHandleEvent(nsEventChainPreVisitor& aVisitor)
// check for an anonymous parent
// XXX XBL2/sXBL issue
if (HasFlag(NODE_MAY_BE_IN_BINDING_MNGR)) {
nsIContent* insertionParent = OwnerDoc()->BindingManager()->
GetInsertionParent(this);
nsIContent* insertionParent = GetXBLInsertionParent();
NS_ASSERTION(!(aVisitor.mEventTargetAtParent && insertionParent &&
aVisitor.mEventTargetAtParent != insertionParent),
"Retargeting and having insertion parent!");
@@ -943,6 +945,29 @@ FragmentOrElement::SetXBLBinding(nsXBLBinding* aBinding,
}
}
nsIContent*
FragmentOrElement::GetXBLInsertionParent() const
{
if (HasFlag(NODE_MAY_BE_IN_BINDING_MNGR)) {
nsDOMSlots *slots = GetExistingDOMSlots();
if (slots) {
return slots->mXBLInsertionParent;
}
}
return nullptr;
}
void
FragmentOrElement::SetXBLInsertionParent(nsIContent* aContent)
{
nsDOMSlots *slots = DOMSlots();
if (aContent) {
SetFlags(NODE_MAY_BE_IN_BINDING_MNGR);
}
slots->mXBLInsertionParent = aContent;
}
nsresult
FragmentOrElement::InsertChildAt(nsIContent* aKid,
uint32_t aIndex,