зеркало из https://github.com/mozilla/pjs.git
Bug 371083: Second installment in our exiting series 'deCOMtaminate the XBL code'. r/sr=jst
This commit is contained in:
Родитель
45f7772e36
Коммит
ad95d9030f
|
@ -844,7 +844,7 @@ public:
|
|||
/**
|
||||
* See FlushSkinBindings on nsBindingManager
|
||||
*/
|
||||
virtual nsresult FlushSkinBindings() = 0;
|
||||
virtual void FlushSkinBindings() = 0;
|
||||
|
||||
protected:
|
||||
~nsIDocument()
|
||||
|
|
|
@ -1346,35 +1346,29 @@ nsContentUtils::FindFirstChildWithResolvedTag(nsIContent* aParent,
|
|||
PRInt32 aNamespace,
|
||||
nsIAtom* aTag)
|
||||
{
|
||||
if (!aParent) {
|
||||
nsIDocument* doc;
|
||||
if (!aParent || !(doc = aParent->GetOwnerDoc())) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
nsBindingManager* bindingManager = doc->BindingManager();
|
||||
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIXBLService> xblService =
|
||||
do_GetService("@mozilla.org/xbl;1", &rv);
|
||||
PRInt32 namespaceID;
|
||||
PRUint32 count = aParent->GetChildCount();
|
||||
|
||||
PRUint32 i;
|
||||
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
for (i = 0; i < count; i++) {
|
||||
nsIContent *child = aParent->GetChildAt(i);
|
||||
xblService->ResolveTag(child, &namespaceID, getter_AddRefs(tag));
|
||||
nsIAtom* tag = bindingManager->ResolveTag(child, &namespaceID);
|
||||
if (tag == aTag && namespaceID == aNamespace) {
|
||||
return child;
|
||||
}
|
||||
}
|
||||
|
||||
// now look for children in XBL
|
||||
nsIDocument* doc = aParent->GetDocument();
|
||||
if (!doc) {
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDOMNodeList> children;
|
||||
doc->BindingManager()->GetXBLChildNodesFor(aParent, getter_AddRefs(children));
|
||||
bindingManager->GetXBLChildNodesFor(aParent, getter_AddRefs(children));
|
||||
if (!children) {
|
||||
return nsnull;
|
||||
}
|
||||
|
@ -1385,7 +1379,7 @@ nsContentUtils::FindFirstChildWithResolvedTag(nsIContent* aParent,
|
|||
nsCOMPtr<nsIDOMNode> childNode;
|
||||
children->Item(i, getter_AddRefs(childNode));
|
||||
nsCOMPtr<nsIContent> childContent = do_QueryInterface(childNode);
|
||||
xblService->ResolveTag(childContent, &namespaceID, getter_AddRefs(tag));
|
||||
nsIAtom* tag = bindingManager->ResolveTag(childContent, &namespaceID);
|
||||
if (tag == aTag && namespaceID == aNamespace) {
|
||||
return childContent;
|
||||
}
|
||||
|
|
|
@ -3593,10 +3593,7 @@ nsDocument::GetBoxObjectFor(nsIDOMElement* aElement, nsIBoxObject** aResult)
|
|||
}
|
||||
|
||||
PRInt32 namespaceID;
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
nsCOMPtr<nsIXBLService> xblService = do_GetService("@mozilla.org/xbl;1");
|
||||
NS_ENSURE_TRUE(xblService, NS_ERROR_FAILURE);
|
||||
xblService->ResolveTag(content, &namespaceID, getter_AddRefs(tag));
|
||||
nsCOMPtr<nsIAtom> tag = mBindingManager->ResolveTag(content, &namespaceID);
|
||||
|
||||
nsCAutoString contractID("@mozilla.org/layout/xul-boxobject");
|
||||
if (namespaceID == kNameSpaceID_XUL) {
|
||||
|
@ -3659,10 +3656,10 @@ nsDocument::GetContentListFor(nsIContent* aContent, nsIDOMNodeList** aResult)
|
|||
return mBindingManager->GetContentListFor(aContent, aResult);
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsDocument::FlushSkinBindings()
|
||||
{
|
||||
return mBindingManager->FlushSkinBindings();
|
||||
mBindingManager->FlushSkinBindings();
|
||||
}
|
||||
|
||||
struct DirTable {
|
||||
|
|
|
@ -648,7 +648,7 @@ public:
|
|||
nsIDOMNodeList** aResult);
|
||||
virtual NS_HIDDEN_(nsresult) GetContentListFor(nsIContent* aContent,
|
||||
nsIDOMNodeList** aResult);
|
||||
virtual NS_HIDDEN_(nsresult) FlushSkinBindings();
|
||||
virtual NS_HIDDEN_(void) FlushSkinBindings();
|
||||
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(nsDocument, nsIDocument)
|
||||
|
||||
|
|
|
@ -1899,14 +1899,13 @@ nsGenericElement::doPreHandleEvent(nsIContent* aContent,
|
|||
// XXX XBL2/sXBL issue
|
||||
nsIDocument* ownerDoc = aContent->GetOwnerDoc();
|
||||
if (ownerDoc) {
|
||||
nsCOMPtr<nsIContent> insertionParent;
|
||||
ownerDoc->BindingManager()->
|
||||
GetInsertionParent(aContent, getter_AddRefs(insertionParent));
|
||||
nsIContent* insertionParent = ownerDoc->BindingManager()->
|
||||
GetInsertionParent(aContent);
|
||||
NS_ASSERTION(!(aVisitor.mEventTargetAtParent && insertionParent &&
|
||||
aVisitor.mEventTargetAtParent != insertionParent),
|
||||
"Retargeting and having insertion parent!");
|
||||
if (insertionParent) {
|
||||
parent.swap(insertionParent);
|
||||
parent = insertionParent;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3661,6 +3660,8 @@ nsGenericElement::List(FILE* out, PRInt32 aIndent,
|
|||
}
|
||||
|
||||
fputs(">\n", out);
|
||||
|
||||
nsGenericElement* nonConstThis = NS_CONST_CAST(nsGenericElement*, this);
|
||||
|
||||
// XXX sXBL/XBL2 issue! Owner or current document?
|
||||
nsIDocument *document = GetOwnerDoc();
|
||||
|
@ -3669,7 +3670,7 @@ nsGenericElement::List(FILE* out, PRInt32 aIndent,
|
|||
|
||||
nsBindingManager* bindingManager = document->BindingManager();
|
||||
nsCOMPtr<nsIDOMNodeList> anonymousChildren;
|
||||
bindingManager->GetAnonymousNodesFor(NS_CONST_CAST(nsGenericElement*, this),
|
||||
bindingManager->GetAnonymousNodesFor(nonConstThis,
|
||||
getter_AddRefs(anonymousChildren));
|
||||
|
||||
if (anonymousChildren) {
|
||||
|
@ -3690,13 +3691,9 @@ nsGenericElement::List(FILE* out, PRInt32 aIndent,
|
|||
}
|
||||
}
|
||||
|
||||
PRBool hasContentList;
|
||||
bindingManager->HasContentListFor(NS_CONST_CAST(nsGenericElement*, this),
|
||||
&hasContentList);
|
||||
|
||||
if (hasContentList) {
|
||||
if (bindingManager->HasContentListFor(nonConstThis)) {
|
||||
nsCOMPtr<nsIDOMNodeList> contentList;
|
||||
bindingManager->GetContentListFor(NS_CONST_CAST(nsGenericElement*, this),
|
||||
bindingManager->GetContentListFor(nonConstThis,
|
||||
getter_AddRefs(contentList));
|
||||
|
||||
NS_ASSERTION(contentList != nsnull, "oops, binding manager lied");
|
||||
|
|
|
@ -558,11 +558,11 @@ nsSVGElement::GetOwnerSVGElement(nsIDOMSVGSVGElement * *aOwnerSVGElement)
|
|||
bindingManager = ownerDoc->BindingManager();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> parent;
|
||||
nsIContent* parent = nsnull;
|
||||
|
||||
if (bindingManager) {
|
||||
// we have a binding manager -- do we have an anonymous parent?
|
||||
bindingManager->GetInsertionParent(this, getter_AddRefs(parent));
|
||||
parent = bindingManager->GetInsertionParent(this);
|
||||
}
|
||||
|
||||
if (!parent) {
|
||||
|
@ -578,12 +578,11 @@ nsSVGElement::GetOwnerSVGElement(nsIDOMSVGSVGElement * *aOwnerSVGElement)
|
|||
NS_ADDREF(*aOwnerSVGElement);
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsIContent> next;
|
||||
nsIContent* next = nsnull;
|
||||
|
||||
if (bindingManager) {
|
||||
bindingManager->GetInsertionParent(parent, getter_AddRefs(next));
|
||||
next = bindingManager->GetInsertionParent(parent);
|
||||
}
|
||||
|
||||
if (!next) {
|
||||
// no anonymous parent, so use explicit one
|
||||
next = parent->GetParent();
|
||||
|
|
|
@ -152,12 +152,12 @@ NS_IMETHODIMP nsSVGGraphicElement::GetCTM(nsIDOMSVGMatrix **_retval)
|
|||
bindingManager = ownerDoc->BindingManager();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> parent;
|
||||
nsIContent* parent = nsnull;
|
||||
nsCOMPtr<nsIDOMSVGMatrix> parentCTM;
|
||||
|
||||
if (bindingManager) {
|
||||
// check for an anonymous parent first
|
||||
bindingManager->GetInsertionParent(this, getter_AddRefs(parent));
|
||||
parent = bindingManager->GetInsertionParent(this);
|
||||
}
|
||||
if (!parent) {
|
||||
// if we didn't find an anonymous parent, use the explicit one
|
||||
|
@ -194,12 +194,12 @@ NS_IMETHODIMP nsSVGGraphicElement::GetScreenCTM(nsIDOMSVGMatrix **_retval)
|
|||
bindingManager = ownerDoc->BindingManager();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> parent;
|
||||
nsIContent* parent = nsnull;
|
||||
nsCOMPtr<nsIDOMSVGMatrix> parentScreenCTM;
|
||||
|
||||
if (bindingManager) {
|
||||
// check for an anonymous parent first
|
||||
bindingManager->GetInsertionParent(this, getter_AddRefs(parent));
|
||||
parent = bindingManager->GetInsertionParent(this);
|
||||
}
|
||||
if (!parent) {
|
||||
// if we didn't find an anonymous parent, use the explicit one
|
||||
|
|
|
@ -731,9 +731,10 @@ nsSVGSVGElement::GetCTM(nsIDOMSVGMatrix **_retval)
|
|||
nsCOMPtr<nsIDOMSVGMatrix> ancestorCTM;
|
||||
|
||||
while (1) {
|
||||
ancestor = nsnull;
|
||||
if (bindingManager) {
|
||||
// check for an anonymous ancestor first
|
||||
bindingManager->GetInsertionParent(element, getter_AddRefs(ancestor));
|
||||
ancestor = bindingManager->GetInsertionParent(element);
|
||||
}
|
||||
if (!ancestor) {
|
||||
// if we didn't find an anonymous ancestor, use the explicit one
|
||||
|
@ -844,9 +845,10 @@ nsSVGSVGElement::GetScreenCTM(nsIDOMSVGMatrix **_retval)
|
|||
nsCOMPtr<nsIDOMSVGMatrix> ancestorScreenCTM;
|
||||
|
||||
while (1) {
|
||||
ancestor = nsnull;
|
||||
if (bindingManager) {
|
||||
// check for an anonymous ancestor first
|
||||
bindingManager->GetInsertionParent(element, getter_AddRefs(ancestor));
|
||||
ancestor = bindingManager->GetInsertionParent(element);
|
||||
}
|
||||
if (!ancestor) {
|
||||
// if we didn't find an anonymous ancestor, use the explicit one
|
||||
|
|
|
@ -442,19 +442,15 @@ nsBindingManager::SetBinding(nsIContent* aContent, nsXBLBinding* aBinding)
|
|||
return result ? NS_OK : NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::GetInsertionParent(nsIContent* aContent, nsIContent** aResult)
|
||||
nsIContent*
|
||||
nsBindingManager::GetInsertionParent(nsIContent* aContent)
|
||||
{
|
||||
if (mInsertionParentTable.ops) {
|
||||
*aResult = NS_STATIC_CAST(nsIContent*,
|
||||
LookupObject(mInsertionParentTable, aContent));
|
||||
NS_IF_ADDREF(*aResult);
|
||||
}
|
||||
else {
|
||||
*aResult = nsnull;
|
||||
return NS_STATIC_CAST(nsIContent*,
|
||||
LookupObject(mInsertionParentTable, aContent));
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -463,18 +459,14 @@ nsBindingManager::SetInsertionParent(nsIContent* aContent, nsIContent* aParent)
|
|||
return SetOrRemoveObject(mInsertionParentTable, aContent, aParent);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::GetWrappedJS(nsIContent* aContent, nsIXPConnectWrappedJS** aResult)
|
||||
nsIXPConnectWrappedJS*
|
||||
nsBindingManager::GetWrappedJS(nsIContent* aContent)
|
||||
{
|
||||
if (mWrapperTable.ops) {
|
||||
*aResult = NS_STATIC_CAST(nsIXPConnectWrappedJS*, LookupObject(mWrapperTable, aContent));
|
||||
NS_IF_ADDREF(*aResult);
|
||||
}
|
||||
else {
|
||||
*aResult = nsnull;
|
||||
return NS_STATIC_CAST(nsIXPConnectWrappedJS*, LookupObject(mWrapperTable, aContent));
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
return nsnull;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -497,7 +489,7 @@ nsBindingManager::ChangeDocumentFor(nsIContent* aContent, nsIDocument* aOldDocum
|
|||
|
||||
// Hold a ref to the binding so it won't die when we remove it from our
|
||||
// table.
|
||||
nsRefPtr<nsXBLBinding> binding = nsBindingManager::GetBinding(aContent);
|
||||
nsRefPtr<nsXBLBinding> binding = GetBinding(aContent);
|
||||
if (binding) {
|
||||
binding->ChangeDocument(aOldDocument, aNewDocument);
|
||||
SetBinding(aContent, nsnull);
|
||||
|
@ -513,25 +505,21 @@ nsBindingManager::ChangeDocumentFor(nsIContent* aContent, nsIDocument* aOldDocum
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::ResolveTag(nsIContent* aContent, PRInt32* aNameSpaceID,
|
||||
nsIAtom** aResult)
|
||||
nsIAtom*
|
||||
nsBindingManager::ResolveTag(nsIContent* aContent, PRInt32* aNameSpaceID)
|
||||
{
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aContent);
|
||||
nsXBLBinding *binding = GetBinding(aContent);
|
||||
|
||||
if (binding) {
|
||||
*aResult = binding->GetBaseTag(aNameSpaceID);
|
||||
nsIAtom* base = binding->GetBaseTag(aNameSpaceID);
|
||||
|
||||
if (*aResult) {
|
||||
NS_ADDREF(*aResult);
|
||||
return NS_OK;
|
||||
if (base) {
|
||||
return base;
|
||||
}
|
||||
}
|
||||
|
||||
*aNameSpaceID = aContent->GetNameSpaceID();
|
||||
NS_ADDREF(*aResult = aContent->Tag());
|
||||
|
||||
return NS_OK;
|
||||
return aContent->Tag();
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -548,7 +536,7 @@ nsBindingManager::GetContentListFor(nsIContent* aContent, nsIDOMNodeList** aResu
|
|||
|
||||
if (!*aResult) {
|
||||
nsCOMPtr<nsIDOMNode> node(do_QueryInterface(aContent));
|
||||
return node->GetChildNodes(aResult);
|
||||
node->GetChildNodes(aResult);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
@ -570,16 +558,10 @@ nsBindingManager::SetContentListFor(nsIContent* aContent,
|
|||
return SetOrRemoveObject(mContentListTable, aContent, contentList);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::HasContentListFor(nsIContent* aContent, PRBool* aResult)
|
||||
PRBool
|
||||
nsBindingManager::HasContentListFor(nsIContent* aContent)
|
||||
{
|
||||
*aResult = PR_FALSE;
|
||||
if (mContentListTable.ops) {
|
||||
nsISupports* list = LookupObject(mContentListTable, aContent);
|
||||
*aResult = (list != nsnull);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
return mContentListTable.ops && LookupObject(mContentListTable, aContent);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -597,7 +579,7 @@ nsBindingManager::GetAnonymousNodesInternal(nsIContent* aContent,
|
|||
|
||||
if (!*aResult) {
|
||||
*aIsAnonymousContentList = PR_FALSE;
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aContent);
|
||||
nsXBLBinding *binding = GetBinding(aContent);
|
||||
if (binding) {
|
||||
*aResult = binding->GetAnonymousNodes().get();
|
||||
return NS_OK;
|
||||
|
@ -700,7 +682,7 @@ nsIContent*
|
|||
nsBindingManager::GetInsertionPoint(nsIContent* aParent, nsIContent* aChild,
|
||||
PRUint32* aIndex)
|
||||
{
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aParent);
|
||||
nsXBLBinding *binding = GetBinding(aParent);
|
||||
return binding ? binding->GetInsertionPoint(aChild, aIndex) : nsnull;
|
||||
}
|
||||
|
||||
|
@ -709,7 +691,7 @@ nsBindingManager::GetSingleInsertionPoint(nsIContent* aParent,
|
|||
PRUint32* aIndex,
|
||||
PRBool* aMultipleInsertionPoints)
|
||||
{
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aParent);
|
||||
nsXBLBinding *binding = GetBinding(aParent);
|
||||
if (binding)
|
||||
return binding->GetSingleInsertionPoint(aIndex, aMultipleInsertionPoints);
|
||||
|
||||
|
@ -744,7 +726,7 @@ nsresult
|
|||
nsBindingManager::RemoveLayeredBinding(nsIContent* aContent, nsIURI* aURL)
|
||||
{
|
||||
// Hold a ref to the binding so it won't die when we remove it from our table
|
||||
nsRefPtr<nsXBLBinding> binding = nsBindingManager::GetBinding(aContent);
|
||||
nsRefPtr<nsXBLBinding> binding = GetBinding(aContent);
|
||||
|
||||
if (!binding) {
|
||||
return NS_OK;
|
||||
|
@ -837,18 +819,11 @@ nsBindingManager::AddToAttachedQueue(nsXBLBinding* aBinding)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::ClearAttachedQueue()
|
||||
{
|
||||
mAttachedStack.Clear();
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsBindingManager::ProcessAttachedQueue()
|
||||
{
|
||||
if (mProcessingAttachedStack)
|
||||
return NS_OK;
|
||||
return;
|
||||
|
||||
mProcessingAttachedStack = PR_TRUE;
|
||||
|
||||
|
@ -862,8 +837,7 @@ nsBindingManager::ProcessAttachedQueue()
|
|||
}
|
||||
|
||||
mProcessingAttachedStack = PR_FALSE;
|
||||
ClearAttachedQueue();
|
||||
return NS_OK;
|
||||
mAttachedStack.Clear();
|
||||
}
|
||||
|
||||
PR_STATIC_CALLBACK(PLDHashOperator)
|
||||
|
@ -888,7 +862,7 @@ ExecuteDetachedHandler(void* aBinding, void* aClosure)
|
|||
return PR_TRUE;
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsBindingManager::ExecuteDetachedHandlers()
|
||||
{
|
||||
// Walk our hashtable of bindings.
|
||||
|
@ -897,7 +871,6 @@ nsBindingManager::ExecuteDetachedHandlers()
|
|||
mBindingTable.EnumerateRead(AccumulateBindingsToDetach, &bindingsToDetach);
|
||||
bindingsToDetach.EnumerateForwards(ExecuteDetachedHandler, nsnull);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -915,25 +888,21 @@ nsBindingManager::PutXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsBindingManager::RemoveXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo)
|
||||
{
|
||||
if (!mDocumentTable.IsInitialized())
|
||||
return NS_OK;
|
||||
|
||||
mDocumentTable.Remove(aDocumentInfo->DocumentURI());
|
||||
return NS_OK;
|
||||
if (mDocumentTable.IsInitialized()) {
|
||||
mDocumentTable.Remove(aDocumentInfo->DocumentURI());
|
||||
}
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::GetXBLDocumentInfo(nsIURI* aURL, nsIXBLDocumentInfo** aResult)
|
||||
nsIXBLDocumentInfo*
|
||||
nsBindingManager::GetXBLDocumentInfo(nsIURI* aURL)
|
||||
{
|
||||
*aResult = nsnull;
|
||||
if (!mDocumentTable.IsInitialized())
|
||||
return NS_OK;
|
||||
return nsnull;
|
||||
|
||||
mDocumentTable.Get(aURL, aResult);
|
||||
return NS_OK;
|
||||
return mDocumentTable.GetWeak(aURL);
|
||||
}
|
||||
|
||||
nsresult
|
||||
|
@ -950,26 +919,21 @@ nsBindingManager::PutLoadingDocListener(nsIURI* aURL, nsIStreamListener* aListen
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::GetLoadingDocListener(nsIURI* aURL, nsIStreamListener** aResult)
|
||||
nsIStreamListener*
|
||||
nsBindingManager::GetLoadingDocListener(nsIURI* aURL)
|
||||
{
|
||||
*aResult = nsnull;
|
||||
if (!mLoadingDocTable.IsInitialized())
|
||||
return NS_OK;
|
||||
return nsnull;
|
||||
|
||||
mLoadingDocTable.Get(aURL, aResult);
|
||||
return NS_OK;
|
||||
return mLoadingDocTable.GetWeak(aURL);
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsBindingManager::RemoveLoadingDocListener(nsIURI* aURL)
|
||||
{
|
||||
if (!mLoadingDocTable.IsInitialized())
|
||||
return NS_OK;
|
||||
|
||||
mLoadingDocTable.Remove(aURL);
|
||||
|
||||
return NS_OK;
|
||||
if (mLoadingDocTable.IsInitialized()) {
|
||||
mLoadingDocTable.Remove(aURL);
|
||||
}
|
||||
}
|
||||
|
||||
PR_STATIC_CALLBACK(PLDHashOperator)
|
||||
|
@ -987,12 +951,11 @@ MarkForDeath(nsISupports *aKey, nsXBLBinding *aBinding, void* aClosure)
|
|||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
nsresult
|
||||
void
|
||||
nsBindingManager::FlushSkinBindings()
|
||||
{
|
||||
if (mBindingTable.IsInitialized())
|
||||
mBindingTable.EnumerateRead(MarkForDeath, nsnull);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Used below to protect from recurring in QI calls through XPConnect.
|
||||
|
@ -1012,13 +975,12 @@ nsBindingManager::GetBindingImplementation(nsIContent* aContent, REFNSIID aIID,
|
|||
void** aResult)
|
||||
{
|
||||
*aResult = nsnull;
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aContent);
|
||||
nsXBLBinding *binding = GetBinding(aContent);
|
||||
if (binding) {
|
||||
// The binding should not be asked for nsISupports
|
||||
NS_ASSERTION(!aIID.Equals(NS_GET_IID(nsISupports)), "Asking a binding for nsISupports");
|
||||
if (binding->ImplementsInterface(aIID)) {
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrappedJS;
|
||||
GetWrappedJS(aContent, getter_AddRefs(wrappedJS));
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrappedJS = GetWrappedJS(aContent);
|
||||
|
||||
if (wrappedJS) {
|
||||
// Protect from recurring in QI calls through XPConnect.
|
||||
|
@ -1132,7 +1094,7 @@ nsBindingManager::WalkRules(nsStyleSet* aStyleSet,
|
|||
nsIContent *content = aData->mContent;
|
||||
|
||||
do {
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(content);
|
||||
nsXBLBinding *binding = GetBinding(content);
|
||||
if (binding) {
|
||||
aData->mScopedRoot = content;
|
||||
binding->WalkRules(aFunc, aData);
|
||||
|
@ -1166,42 +1128,32 @@ nsBindingManager::WalkRules(nsStyleSet* aStyleSet,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::ShouldBuildChildFrames(nsIContent* aContent, PRBool* aResult)
|
||||
PRBool
|
||||
nsBindingManager::ShouldBuildChildFrames(nsIContent* aContent)
|
||||
{
|
||||
*aResult = PR_TRUE;
|
||||
nsXBLBinding *binding = GetBinding(aContent);
|
||||
|
||||
nsXBLBinding *binding = nsBindingManager::GetBinding(aContent);
|
||||
|
||||
if (binding)
|
||||
*aResult = binding->ShouldBuildChildFrames();
|
||||
|
||||
return NS_OK;
|
||||
return !binding || binding->ShouldBuildChildFrames();
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsBindingManager::GetNestedInsertionPoint(nsIContent* aParent, nsIContent* aChild, nsIContent** aResult)
|
||||
nsIContent*
|
||||
nsBindingManager::GetNestedInsertionPoint(nsIContent* aParent, nsIContent* aChild)
|
||||
{
|
||||
*aResult = nsnull;
|
||||
|
||||
// Check to see if the content is anonymous.
|
||||
if (aChild->GetBindingParent() == aParent)
|
||||
return NS_OK; // It is anonymous. Don't use the insertion point, since that's only
|
||||
// for the explicit kids.
|
||||
return nsnull; // It is anonymous. Don't use the insertion point, since that's only
|
||||
// for the explicit kids.
|
||||
|
||||
PRUint32 index;
|
||||
nsIContent *insertionElement = GetInsertionPoint(aParent, aChild, &index);
|
||||
if (insertionElement != aParent) {
|
||||
// See if we nest even further in.
|
||||
nsCOMPtr<nsIContent> nestedPoint;
|
||||
GetNestedInsertionPoint(insertionElement, aChild, getter_AddRefs(nestedPoint));
|
||||
nsIContent* nestedPoint = GetNestedInsertionPoint(insertionElement, aChild);
|
||||
if (nestedPoint)
|
||||
insertionElement = nestedPoint;
|
||||
}
|
||||
|
||||
*aResult = insertionElement;
|
||||
NS_IF_ADDREF(*aResult);
|
||||
return NS_OK;
|
||||
return insertionElement;
|
||||
}
|
||||
|
||||
// Note: We don't hold a reference to the document observer; we assume
|
||||
|
@ -1252,8 +1204,7 @@ nsBindingManager::ContentAppended(nsIDocument* aDocument,
|
|||
|
||||
nsIContent *child = aContainer->GetChildAt(aNewIndexInContainer);
|
||||
|
||||
nsCOMPtr<nsIContent> ins;
|
||||
GetNestedInsertionPoint(aContainer, child, getter_AddRefs(ins));
|
||||
nsCOMPtr<nsIContent> ins = GetNestedInsertionPoint(aContainer, child);
|
||||
|
||||
if (ins) {
|
||||
nsCOMPtr<nsIDOMNodeList> nodeList;
|
||||
|
@ -1300,8 +1251,7 @@ nsBindingManager::ContentInserted(nsIDocument* aDocument,
|
|||
// XXX This is hacked just to make menus work again.
|
||||
if (aIndexInContainer != -1 && mContentListTable.ops) {
|
||||
// It's not anonymous.
|
||||
nsCOMPtr<nsIContent> ins;
|
||||
GetNestedInsertionPoint(aContainer, aChild, getter_AddRefs(ins));
|
||||
nsCOMPtr<nsIContent> ins = GetNestedInsertionPoint(aContainer, aChild);
|
||||
|
||||
if (ins) {
|
||||
nsCOMPtr<nsIDOMNodeList> nodeList;
|
||||
|
@ -1377,8 +1327,7 @@ nsBindingManager::ContentRemoved(nsIDocument* aDocument,
|
|||
// It's anonymous.
|
||||
return;
|
||||
|
||||
nsCOMPtr<nsIContent> point;
|
||||
GetNestedInsertionPoint(aContainer, aChild, getter_AddRefs(point));
|
||||
nsCOMPtr<nsIContent> point = GetNestedInsertionPoint(aContainer, aChild);
|
||||
|
||||
if (point) {
|
||||
nsCOMPtr<nsIDOMNodeList> nodeList;
|
||||
|
|
|
@ -74,12 +74,9 @@ public:
|
|||
nsXBLBinding* GetBinding(nsIContent* aContent);
|
||||
nsresult SetBinding(nsIContent* aContent, nsXBLBinding* aBinding);
|
||||
|
||||
nsresult GetInsertionParent(nsIContent* aContent, nsIContent** aResult);
|
||||
nsIContent* GetInsertionParent(nsIContent* aContent);
|
||||
nsresult SetInsertionParent(nsIContent* aContent, nsIContent* aResult);
|
||||
|
||||
nsresult GetWrappedJS(nsIContent* aContent, nsIXPConnectWrappedJS** aResult);
|
||||
nsresult SetWrappedJS(nsIContent* aContent, nsIXPConnectWrappedJS* aResult);
|
||||
|
||||
/**
|
||||
* Notify the binding manager that an element
|
||||
* has been moved from one document to another,
|
||||
|
@ -98,7 +95,7 @@ public:
|
|||
nsresult ChangeDocumentFor(nsIContent* aContent, nsIDocument* aOldDocument,
|
||||
nsIDocument* aNewDocument);
|
||||
|
||||
nsresult ResolveTag(nsIContent* aContent, PRInt32* aNameSpaceID, nsIAtom** aResult);
|
||||
nsIAtom* ResolveTag(nsIContent* aContent, PRInt32* aNameSpaceID);
|
||||
|
||||
/**
|
||||
* Return a list of all explicit children, including any children
|
||||
|
@ -117,7 +114,7 @@ public:
|
|||
* Determine whether or not the explicit child list has been altered
|
||||
* by XBL insertion points.
|
||||
*/
|
||||
nsresult HasContentListFor(nsIContent* aContent, PRBool* aResult);
|
||||
PRBool HasContentListFor(nsIContent* aContent);
|
||||
|
||||
/**
|
||||
* For a given element, retrieve the anonymous child content.
|
||||
|
@ -145,17 +142,16 @@ public:
|
|||
* anonymous content tree. Specifically, aChild should be inserted
|
||||
* beneath aResult at the index specified by aIndex.
|
||||
*/
|
||||
virtual nsIContent* GetInsertionPoint(nsIContent* aParent,
|
||||
nsIContent* aChild, PRUint32* aIndex);
|
||||
nsIContent* GetInsertionPoint(nsIContent* aParent,
|
||||
nsIContent* aChild, PRUint32* aIndex);
|
||||
|
||||
/**
|
||||
* Return the unfiltered insertion point for the specified parent
|
||||
* element. If other filtered insertion points exist,
|
||||
* aMultipleInsertionPoints will be set to true.
|
||||
*/
|
||||
virtual nsIContent* GetSingleInsertionPoint(nsIContent* aParent,
|
||||
PRUint32* aIndex,
|
||||
PRBool* aMultipleInsertionPoints);
|
||||
nsIContent* GetSingleInsertionPoint(nsIContent* aParent, PRUint32* aIndex,
|
||||
PRBool* aMultipleInsertionPoints);
|
||||
|
||||
nsresult AddLayeredBinding(nsIContent* aContent, nsIURI* aURL);
|
||||
nsresult RemoveLayeredBinding(nsIContent* aContent, nsIURI* aURL);
|
||||
|
@ -163,24 +159,23 @@ public:
|
|||
nsIDocument** aResult);
|
||||
|
||||
nsresult AddToAttachedQueue(nsXBLBinding* aBinding);
|
||||
nsresult ClearAttachedQueue();
|
||||
nsresult ProcessAttachedQueue();
|
||||
void ProcessAttachedQueue();
|
||||
|
||||
nsresult ExecuteDetachedHandlers();
|
||||
void ExecuteDetachedHandlers();
|
||||
|
||||
nsresult PutXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo);
|
||||
nsresult GetXBLDocumentInfo(nsIURI* aURI, nsIXBLDocumentInfo** aResult);
|
||||
nsresult RemoveXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo);
|
||||
nsIXBLDocumentInfo* GetXBLDocumentInfo(nsIURI* aURI);
|
||||
void RemoveXBLDocumentInfo(nsIXBLDocumentInfo* aDocumentInfo);
|
||||
|
||||
nsresult PutLoadingDocListener(nsIURI* aURL, nsIStreamListener* aListener);
|
||||
nsresult GetLoadingDocListener(nsIURI* aURL, nsIStreamListener** aResult);
|
||||
nsresult RemoveLoadingDocListener(nsIURI* aURL);
|
||||
nsIStreamListener* GetLoadingDocListener(nsIURI* aURL);
|
||||
void RemoveLoadingDocListener(nsIURI* aURL);
|
||||
|
||||
nsresult FlushSkinBindings();
|
||||
void FlushSkinBindings();
|
||||
|
||||
nsresult GetBindingImplementation(nsIContent* aContent, REFNSIID aIID, void** aResult);
|
||||
|
||||
nsresult ShouldBuildChildFrames(nsIContent* aContent, PRBool* aResult);
|
||||
PRBool ShouldBuildChildFrames(nsIContent* aContent);
|
||||
|
||||
/**
|
||||
* Add a new observer of document change notifications. Whenever content is
|
||||
|
@ -207,6 +202,9 @@ public:
|
|||
NS_DECL_CYCLE_COLLECTION_CLASS(nsBindingManager)
|
||||
|
||||
protected:
|
||||
nsIXPConnectWrappedJS* GetWrappedJS(nsIContent* aContent);
|
||||
nsresult SetWrappedJS(nsIContent* aContent, nsIXPConnectWrappedJS* aResult);
|
||||
|
||||
nsresult GetXBLChildNodesInternal(nsIContent* aContent,
|
||||
nsIDOMNodeList** aResult,
|
||||
PRBool* aIsAnonymousContentList);
|
||||
|
@ -214,7 +212,7 @@ protected:
|
|||
nsIDOMNodeList** aResult,
|
||||
PRBool* aIsAnonymousContentList);
|
||||
|
||||
nsresult GetNestedInsertionPoint(nsIContent* aParent, nsIContent* aChild, nsIContent** aResult);
|
||||
nsIContent* GetNestedInsertionPoint(nsIContent* aParent, nsIContent* aChild);
|
||||
|
||||
#define NS_BINDINGMANAGER_NOTIFY_OBSERVERS(func_, params_) \
|
||||
NS_OBSERVER_ARRAY_NOTIFY_OBSERVERS(mObservers, nsIMutationObserver, \
|
||||
|
|
|
@ -419,9 +419,9 @@ nsXBLStreamListener::Load(nsIDOMEvent* aEvent)
|
|||
}
|
||||
|
||||
// Put our doc info in the doc table.
|
||||
nsCOMPtr<nsIXBLDocumentInfo> info;
|
||||
nsBindingManager *xblDocBindingManager = mBindingDocument->BindingManager();
|
||||
xblDocBindingManager->GetXBLDocumentInfo(documentURI, getter_AddRefs(info));
|
||||
nsCOMPtr<nsIXBLDocumentInfo> info =
|
||||
xblDocBindingManager->GetXBLDocumentInfo(documentURI);
|
||||
xblDocBindingManager->RemoveXBLDocumentInfo(info); // Break the self-imposed cycle.
|
||||
if (!info) {
|
||||
NS_ERROR("An XBL file is malformed. Did you forget the XBL namespace on the bindings tag?");
|
||||
|
@ -708,12 +708,13 @@ nsXBLService::ResolveTag(nsIContent* aContent, PRInt32* aNameSpaceID,
|
|||
{
|
||||
nsIDocument* document = aContent->GetOwnerDoc();
|
||||
if (document) {
|
||||
return document->BindingManager()->ResolveTag(aContent, aNameSpaceID,
|
||||
aResult);
|
||||
*aResult = document->BindingManager()->ResolveTag(aContent, aNameSpaceID);
|
||||
NS_IF_ADDREF(*aResult);
|
||||
}
|
||||
else {
|
||||
*aNameSpaceID = aContent->GetNameSpaceID();
|
||||
NS_ADDREF(*aResult = aContent->Tag());
|
||||
}
|
||||
|
||||
*aNameSpaceID = aContent->GetNameSpaceID();
|
||||
NS_ADDREF(*aResult = aContent->Tag());
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -737,8 +738,10 @@ nsXBLService::GetXBLDocumentInfo(nsIURI* aURI, nsIContent* aBoundElement, nsIXBL
|
|||
if (!*aResult) {
|
||||
// The second line of defense is the binding manager's document table.
|
||||
nsIDocument* boundDocument = aBoundElement->GetOwnerDoc();
|
||||
if (boundDocument)
|
||||
boundDocument->BindingManager()->GetXBLDocumentInfo(aURI, aResult);
|
||||
if (boundDocument) {
|
||||
*aResult = boundDocument->BindingManager()->GetXBLDocumentInfo(aURI);
|
||||
NS_IF_ADDREF(*aResult);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -1063,7 +1066,7 @@ nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement,
|
|||
|
||||
if (aBoundDocument) {
|
||||
bindingManager = aBoundDocument->BindingManager();
|
||||
bindingManager->GetXBLDocumentInfo(documentURI, getter_AddRefs(info));
|
||||
info = bindingManager->GetXBLDocumentInfo(documentURI);
|
||||
}
|
||||
|
||||
nsINodeInfo *ni = nsnull;
|
||||
|
@ -1083,10 +1086,10 @@ nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement,
|
|||
// processed whenever the doc does finish loading.
|
||||
nsCOMPtr<nsIStreamListener> listener;
|
||||
if (bindingManager)
|
||||
bindingManager->GetLoadingDocListener(documentURI, getter_AddRefs(listener));
|
||||
listener = bindingManager->GetLoadingDocListener(documentURI);
|
||||
if (listener) {
|
||||
nsIStreamListener* ilist = listener.get();
|
||||
nsXBLStreamListener* xblListener = NS_STATIC_CAST(nsXBLStreamListener*, ilist);
|
||||
nsXBLStreamListener* xblListener =
|
||||
NS_STATIC_CAST(nsXBLStreamListener*, listener.get());
|
||||
// Create a new load observer.
|
||||
if (!xblListener->HasRequest(aBindingURI, aBoundElement)) {
|
||||
nsXBLBindingRequest* req = nsXBLBindingRequest::Create(mPool, aBindingURI, aBoundElement);
|
||||
|
@ -1111,7 +1114,7 @@ nsXBLService::LoadBindingDocumentInfo(nsIContent* aBoundElement,
|
|||
|
||||
if (document) {
|
||||
nsBindingManager *xblDocBindingManager = document->BindingManager();
|
||||
xblDocBindingManager->GetXBLDocumentInfo(documentURI, getter_AddRefs(info));
|
||||
info = xblDocBindingManager->GetXBLDocumentInfo(documentURI);
|
||||
if (!info) {
|
||||
NS_ERROR("An XBL file is malformed. Did you forget the XBL namespace on the bindings tag?");
|
||||
return NS_ERROR_FAILURE;
|
||||
|
|
|
@ -3612,24 +3612,19 @@ nsXULDocument::CheckTemplateBuilderHookup(nsIContent* aElement,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
/* static */ nsresult
|
||||
nsXULDocument::CreateTemplateBuilder(nsIContent* aElement)
|
||||
{
|
||||
// Check if need to construct a tree builder or content builder.
|
||||
PRBool isTreeBuilder = PR_FALSE;
|
||||
|
||||
PRInt32 nameSpaceID;
|
||||
nsCOMPtr<nsIAtom> baseTag;
|
||||
nsIDocument *document = aElement->GetOwnerDoc();
|
||||
NS_ASSERTION(document, "no document");
|
||||
NS_ENSURE_TRUE(document, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCOMPtr<nsIXBLService> xblService = do_GetService("@mozilla.org/xbl;1");
|
||||
if (xblService) {
|
||||
xblService->ResolveTag(aElement, &nameSpaceID, getter_AddRefs(baseTag));
|
||||
}
|
||||
else {
|
||||
nsINodeInfo *ni = aElement->NodeInfo();
|
||||
nameSpaceID = ni->NamespaceID();
|
||||
baseTag = ni->NameAtom();
|
||||
}
|
||||
PRInt32 nameSpaceID;
|
||||
nsIAtom* baseTag = document->BindingManager()->
|
||||
ResolveTag(aElement, &nameSpaceID);
|
||||
|
||||
if ((nameSpaceID == kNameSpaceID_XUL) && (baseTag == nsGkAtoms::tree)) {
|
||||
// By default, we build content for a tree and then we attach
|
||||
|
@ -3662,12 +3657,6 @@ nsXULDocument::CreateTemplateBuilder(nsIContent* aElement)
|
|||
getter_AddRefs(bodyContent));
|
||||
|
||||
if (! bodyContent) {
|
||||
// Get the document.
|
||||
nsIDocument *document = aElement->GetDocument();
|
||||
NS_ASSERTION(document, "no document");
|
||||
if (! document)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
nsresult rv = document->CreateElem(nsGkAtoms::treechildren,
|
||||
nsnull, kNameSpaceID_XUL,
|
||||
PR_FALSE,
|
||||
|
|
|
@ -6078,12 +6078,10 @@ nsCSSFrameConstructor::ConstructXULFrame(nsFrameConstructorState& aState,
|
|||
if (!newFrame->IsLeaf()) {
|
||||
// XXXbz don't we need calls to ShouldBuildChildFrames
|
||||
// elsewhere too? Why only for XUL?
|
||||
PRBool processChildren = PR_TRUE;
|
||||
mDocument->BindingManager()->ShouldBuildChildFrames(aContent,
|
||||
&processChildren);
|
||||
if (processChildren)
|
||||
if (mDocument->BindingManager()->ShouldBuildChildFrames(aContent)) {
|
||||
rv = ProcessChildren(aState, aContent, newFrame, PR_FALSE,
|
||||
childItems, PR_FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
CreateAnonymousFrames(aTag, aState, aContent, newFrame, PR_FALSE,
|
||||
|
@ -7025,10 +7023,10 @@ nsCSSFrameConstructor::ConstructSVGFrame(nsFrameConstructorState& aState,
|
|||
|
||||
PRBool parentIsSVG = PR_FALSE;
|
||||
if (aParentFrame && aParentFrame->GetContent()) {
|
||||
nsCOMPtr<nsIAtom> parentTag;
|
||||
PRInt32 parentNSID;
|
||||
mDocument->BindingManager()->ResolveTag(aParentFrame->GetContent(),
|
||||
&parentNSID, getter_AddRefs(parentTag));
|
||||
nsIAtom* parentTag =
|
||||
mDocument->BindingManager()->ResolveTag(aParentFrame->GetContent(),
|
||||
&parentNSID);
|
||||
|
||||
parentIsSVG = parentNSID == kNameSpaceID_SVG
|
||||
#ifdef MOZ_SVG_FOREIGNOBJECT
|
||||
|
@ -7415,10 +7413,10 @@ nsCSSFrameConstructor::ConstructFrameInternal( nsFrameConstructorState& aState,
|
|||
display = styleContext->GetStyleDisplay();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAtom> baseTag;
|
||||
PRInt32 nameSpaceID;
|
||||
xblService->ResolveTag(aContent, &nameSpaceID, getter_AddRefs(baseTag));
|
||||
|
||||
nsCOMPtr<nsIAtom> baseTag =
|
||||
mDocument->BindingManager()->ResolveTag(aContent, &nameSpaceID);
|
||||
|
||||
if (baseTag != aTag || aNameSpaceID != nameSpaceID) {
|
||||
// Construct the frame using the XBL base tag.
|
||||
rv = ConstructFrameInternal(aState,
|
||||
|
@ -8193,10 +8191,9 @@ nsCSSFrameConstructor::ContentAppended(nsIContent* aContainer,
|
|||
|
||||
#ifdef MOZ_XUL
|
||||
if (aContainer) {
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
PRInt32 namespaceID;
|
||||
mDocument->BindingManager()->ResolveTag(aContainer, &namespaceID,
|
||||
getter_AddRefs(tag));
|
||||
nsIAtom* tag =
|
||||
mDocument->BindingManager()->ResolveTag(aContainer, &namespaceID);
|
||||
|
||||
// Just ignore tree tags, anyway we don't create any frames for them.
|
||||
if (tag == nsGkAtoms::treechildren ||
|
||||
|
@ -8226,20 +8223,15 @@ nsCSSFrameConstructor::ContentAppended(nsIContent* aContainer,
|
|||
|
||||
PRBool hasInsertion = PR_FALSE;
|
||||
if (!multiple) {
|
||||
nsBindingManager *bindingManager = nsnull;
|
||||
nsIDocument* document = nsnull;
|
||||
nsIContent *firstAppendedChild =
|
||||
aContainer->GetChildAt(aNewIndexInContainer);
|
||||
if (firstAppendedChild) {
|
||||
document = firstAppendedChild->GetDocument();
|
||||
}
|
||||
if (document)
|
||||
bindingManager = document->BindingManager();
|
||||
if (bindingManager) {
|
||||
nsCOMPtr<nsIContent> insParent;
|
||||
bindingManager->GetInsertionParent(firstAppendedChild, getter_AddRefs(insParent));
|
||||
if (insParent)
|
||||
hasInsertion = PR_TRUE;
|
||||
if (document &&
|
||||
document->BindingManager()->GetInsertionParent(firstAppendedChild)) {
|
||||
hasInsertion = PR_TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8696,10 +8688,9 @@ PRBool NotifyListBoxBody(nsPresContext* aPresContext,
|
|||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
PRInt32 namespaceID;
|
||||
aDocument->BindingManager()->ResolveTag(aContainer, &namespaceID,
|
||||
getter_AddRefs(tag));
|
||||
nsIAtom* tag =
|
||||
aDocument->BindingManager()->ResolveTag(aContainer, &namespaceID);
|
||||
|
||||
// Just ignore tree tags, anyway we don't create any frames for them.
|
||||
if (tag == nsGkAtoms::treechildren ||
|
||||
|
@ -10043,9 +10034,8 @@ nsCSSFrameConstructor::AttributeChanged(nsIContent* aContent,
|
|||
// happen otherwise).
|
||||
if (!primaryFrame && !reframe) {
|
||||
PRInt32 namespaceID;
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
mDocument->BindingManager()->ResolveTag(aContent, &namespaceID,
|
||||
getter_AddRefs(tag));
|
||||
nsIAtom* tag =
|
||||
mDocument->BindingManager()->ResolveTag(aContent, &namespaceID);
|
||||
|
||||
if (namespaceID == kNameSpaceID_XUL &&
|
||||
(tag == nsGkAtoms::listitem ||
|
||||
|
@ -10105,9 +10095,8 @@ nsCSSFrameConstructor::AttributeChanged(nsIContent* aContent,
|
|||
aModType != nsIDOMMutationEvent::REMOVAL) ||
|
||||
aAttribute == nsGkAtoms::menuactive)) {
|
||||
PRInt32 namespaceID;
|
||||
nsCOMPtr<nsIAtom> tag;
|
||||
mDocument->BindingManager()->ResolveTag(aContent, &namespaceID,
|
||||
getter_AddRefs(tag));
|
||||
nsIAtom* tag =
|
||||
mDocument->BindingManager()->ResolveTag(aContent, &namespaceID);
|
||||
|
||||
if (namespaceID == kNameSpaceID_XUL &&
|
||||
(tag == nsGkAtoms::menupopup || tag == nsGkAtoms::popup ||
|
||||
|
|
|
@ -129,10 +129,10 @@ inDOMUtils::GetParentForNode(nsIDOMNode* aNode,
|
|||
} else if (aShowingAnonymousContent) {
|
||||
nsCOMPtr<nsIContent> content = do_QueryInterface(aNode);
|
||||
if (content) {
|
||||
nsCOMPtr<nsIContent> bparent;
|
||||
nsIContent* bparent = nsnull;
|
||||
nsRefPtr<nsBindingManager> bindingManager = inLayoutUtils::GetBindingManagerFor(aNode);
|
||||
if (bindingManager) {
|
||||
bindingManager->GetInsertionParent(content, getter_AddRefs(bparent));
|
||||
bparent = bindingManager->GetInsertionParent(content);
|
||||
}
|
||||
|
||||
parent = do_QueryInterface(bparent);
|
||||
|
|
|
@ -753,16 +753,15 @@ nsSplitterFrameInner::MouseDown(nsIDOMEvent* aMouseEvent)
|
|||
while (nsnull != childBox)
|
||||
{
|
||||
nsIContent* content = childBox->GetContent();
|
||||
nsCOMPtr<nsIAtom> atom;
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIXBLService> xblService =
|
||||
do_GetService("@mozilla.org/xbl;1", &rv);
|
||||
|
||||
if (NS_SUCCEEDED(rv) && xblService) {
|
||||
nsIDocument* doc = content->GetOwnerDoc();
|
||||
nsIAtom* atom;
|
||||
if (doc) {
|
||||
PRInt32 dummy;
|
||||
xblService->ResolveTag(content, &dummy, getter_AddRefs(atom));
|
||||
} else
|
||||
atom = doc->BindingManager()->ResolveTag(content, &dummy);
|
||||
} else {
|
||||
atom = content->Tag();
|
||||
}
|
||||
|
||||
// skip over any splitters
|
||||
if (atom != nsGkAtoms::splitter) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче