static PLDHashOperator TraverseRuleToBindingsMap(nsISupports* aKey, nsXMLBindingSet* aMatch, void* aContext) { nsCycleCollectionTraversalCallback *cb = static_cast<nsCycleCollectionTraversalCallback*>(aContext); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mRuleToBindingsMap key"); cb->NoteXPCOMChild(aKey); NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mRuleToBindingsMap value"); cb->NoteNativeChild(aMatch, &NS_CYCLE_COLLECTION_NAME(nsXMLBindingSet)); return PL_DHASH_NEXT; }
void nsTransactionStack::DoTraverse(nsCycleCollectionTraversalCallback &cb) { for (PRInt32 i = 0, qcount = mQue.GetSize(); i < qcount; ++i) { nsTransactionItem *item = static_cast<nsTransactionItem*>(mQue.ObjectAt(i)); if (item) { NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "transaction stack mQue[i]"); cb.NoteNativeChild(item, &NS_CYCLE_COLLECTION_NAME(nsTransactionItem)); } } }
/* * nsJSEventListener implementation */ nsJSEventListener::nsJSEventListener(nsIScriptContext *aContext, JSObject* aScopeObject, nsISupports *aTarget, nsIAtom* aType, JSObject *aHandler) : nsIJSEventListener(aContext, aScopeObject, aTarget, aHandler), mEventName(aType) { // aScopeObject is the inner window's JS object, which we need to lock // until we are done with it. NS_ASSERTION(aScopeObject && aContext, "EventListener with no context or scope?"); nsContentUtils::HoldScriptObject(aContext->GetScriptTypeID(), this, &NS_CYCLE_COLLECTION_NAME(nsJSEventListener), aScopeObject, false); if (aHandler) { nsContentUtils::HoldScriptObject(aContext->GetScriptTypeID(), this, &NS_CYCLE_COLLECTION_NAME(nsJSEventListener), aHandler, true); } }
NS_IMETHODIMP nsXPCWrappedJS::QueryInterface(REFNSIID aIID, void** aInstancePtr) { if (nsnull == aInstancePtr) { NS_PRECONDITION(0, "null pointer"); return NS_ERROR_NULL_POINTER; } if ( aIID.Equals(NS_GET_IID(nsXPCOMCycleCollectionParticipant)) ) { *aInstancePtr = & NS_CYCLE_COLLECTION_NAME(nsXPCWrappedJS); return NS_OK; } if (aIID.Equals(NS_GET_IID(nsCycleCollectionISupports))) { *aInstancePtr = NS_CYCLE_COLLECTION_CLASSNAME(nsXPCWrappedJS)::Upcast(this); return NS_OK; } if (!IsValid()) return NS_ERROR_UNEXPECTED; // Always check for this first so that our 'outer' can get this interface // from us without recurring into a call to the outer's QI! if (aIID.Equals(NS_GET_IID(nsIXPConnectWrappedJS))) { NS_ADDREF(this); *aInstancePtr = (void*) static_cast<nsIXPConnectWrappedJS*>(this); return NS_OK; } nsISupports* outer = GetAggregatedNativeObject(); if (outer) return outer->QueryInterface(aIID, aInstancePtr); // else... return mClass->DelegatedQueryInterface(this, aIID, aInstancePtr); }
nsJSEventListener::~nsJSEventListener() { if (mContext) nsContentUtils::DropScriptObjects(mContext->GetScriptTypeID(), this, &NS_CYCLE_COLLECTION_NAME(nsJSEventListener)); }