зеркало из https://github.com/mozilla/gecko-dev.git
Bug 664452, unlink XUL some more, r=peterv
--HG-- extra : rebase_source : e17e5ed7c6a5d6565758ce2835df559b6abdcf32
This commit is contained in:
Родитель
d50c48a59f
Коммит
c8b469ea2c
|
@ -391,6 +391,8 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULDocument, nsXMLDocument)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULDocument, nsXMLDocument)
|
||||||
delete tmp->mTemplateBuilderTable;
|
delete tmp->mTemplateBuilderTable;
|
||||||
tmp->mTemplateBuilderTable = nsnull;
|
tmp->mTemplateBuilderTable = nsnull;
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mCommandDispatcher)
|
||||||
//XXX We should probably unlink all the objects we traverse.
|
//XXX We should probably unlink all the objects we traverse.
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
|
|
||||||
|
|
|
@ -190,13 +190,20 @@ nsXULPrototypeDocument::~nsXULPrototypeDocument()
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULPrototypeDocument)
|
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULPrototypeDocument)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_0(nsXULPrototypeDocument)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULPrototypeDocument)
|
||||||
|
tmp->mPrototypeWaiters.Clear();
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULPrototypeDocument)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULPrototypeDocument)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mRoot,
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mRoot,
|
||||||
nsXULPrototypeElement)
|
nsXULPrototypeElement)
|
||||||
|
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mGlobalObject");
|
||||||
cb.NoteXPCOMChild(static_cast<nsIScriptGlobalObject*>(tmp->mGlobalObject));
|
cb.NoteXPCOMChild(static_cast<nsIScriptGlobalObject*>(tmp->mGlobalObject));
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mNodeInfoManager,
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(mNodeInfoManager,
|
||||||
nsNodeInfoManager)
|
nsNodeInfoManager)
|
||||||
|
for (PRUint32 i = 0; i < tmp->mPrototypeWaiters.Length(); ++i) {
|
||||||
|
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, "mPrototypeWaiters[i]");
|
||||||
|
cb.NoteXPCOMChild(static_cast<nsINode*>(tmp->mPrototypeWaiters[i].get()));
|
||||||
|
}
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULPrototypeDocument)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsXULPrototypeDocument)
|
||||||
|
|
|
@ -81,9 +81,15 @@ public:
|
||||||
mQuerySetPriority(aQuerySetPriority),
|
mQuerySetPriority(aQuerySetPriority),
|
||||||
mContainer(aContainer),
|
mContainer(aContainer),
|
||||||
mResult(aResult),
|
mResult(aResult),
|
||||||
mNext(nsnull) {}
|
mNext(nsnull)
|
||||||
|
{
|
||||||
|
MOZ_COUNT_CTOR(nsTemplateMatch);
|
||||||
|
}
|
||||||
|
|
||||||
~nsTemplateMatch() {}
|
~nsTemplateMatch()
|
||||||
|
{
|
||||||
|
MOZ_COUNT_DTOR(nsTemplateMatch);
|
||||||
|
}
|
||||||
|
|
||||||
static nsTemplateMatch*
|
static nsTemplateMatch*
|
||||||
Create(nsFixedSizeAllocator& aPool,
|
Create(nsFixedSizeAllocator& aPool,
|
||||||
|
|
|
@ -275,6 +275,11 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTemplateBuilder)
|
||||||
if (tmp->mMatchMap.IsInitialized()) {
|
if (tmp->mMatchMap.IsInitialized()) {
|
||||||
tmp->mMatchMap.Enumerate(DestroyMatchList, &(tmp->mPool));
|
tmp->mMatchMap.Enumerate(DestroyMatchList, &(tmp->mPool));
|
||||||
}
|
}
|
||||||
|
for (PRUint32 i = 0; i < tmp->mQuerySets.Length(); ++i) {
|
||||||
|
nsTemplateQuerySet* qs = tmp->mQuerySets[i];
|
||||||
|
delete qs;
|
||||||
|
}
|
||||||
|
tmp->mQuerySets.Clear();
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTemplateBuilder)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsXULTemplateBuilder)
|
||||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDataSource)
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mDataSource)
|
||||||
|
|
|
@ -86,7 +86,9 @@ nsIRDFResource* nsXULTemplateQueryProcessorRDF::kNC_BookmarkSeparator;
|
||||||
nsIRDFResource* nsXULTemplateQueryProcessorRDF::kRDF_type;
|
nsIRDFResource* nsXULTemplateQueryProcessorRDF::kRDF_type;
|
||||||
|
|
||||||
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTemplateQueryProcessorRDF)
|
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTemplateQueryProcessorRDF)
|
||||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_0(nsXULTemplateQueryProcessorRDF)
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsXULTemplateQueryProcessorRDF)
|
||||||
|
tmp->Done();
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
|
|
||||||
static PLDHashOperator
|
static PLDHashOperator
|
||||||
BindingDependenciesTraverser(nsISupports* key,
|
BindingDependenciesTraverser(nsISupports* key,
|
||||||
|
@ -1056,7 +1058,7 @@ nsXULTemplateQueryProcessorRDF::SynchronizeAll(nsIRDFResource* aSource,
|
||||||
// Get all the matches whose assignments are currently supported
|
// Get all the matches whose assignments are currently supported
|
||||||
// by aSource and aProperty: we'll need to recompute them.
|
// by aSource and aProperty: we'll need to recompute them.
|
||||||
nsCOMArray<nsXULTemplateResultRDF>* results;
|
nsCOMArray<nsXULTemplateResultRDF>* results;
|
||||||
if (!mBindingDependencies.Get(aSource, &results))
|
if (!mBindingDependencies.Get(aSource, &results) || !mBuilder)
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
|
||||||
PRUint32 length = results->Count();
|
PRUint32 length = results->Count();
|
||||||
|
@ -1125,6 +1127,7 @@ nsXULTemplateQueryProcessorRDF::CheckContainer(nsIRDFResource* aResource,
|
||||||
PRBool* aIsContainer)
|
PRBool* aIsContainer)
|
||||||
{
|
{
|
||||||
NS_ENSURE_ARG_POINTER(aIsContainer);
|
NS_ENSURE_ARG_POINTER(aIsContainer);
|
||||||
|
NS_ENSURE_STATE(mDB);
|
||||||
|
|
||||||
// We have to look at all of the arcs extending out of the
|
// We have to look at all of the arcs extending out of the
|
||||||
// resource: if any of them are that "containment" property, then
|
// resource: if any of them are that "containment" property, then
|
||||||
|
@ -1159,6 +1162,7 @@ nsresult
|
||||||
nsXULTemplateQueryProcessorRDF::CheckEmpty(nsIRDFResource* aResource,
|
nsXULTemplateQueryProcessorRDF::CheckEmpty(nsIRDFResource* aResource,
|
||||||
PRBool* aIsEmpty)
|
PRBool* aIsEmpty)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_STATE(mDB);
|
||||||
*aIsEmpty = PR_TRUE;
|
*aIsEmpty = PR_TRUE;
|
||||||
|
|
||||||
for (nsResourceSet::ConstIterator property = mContainmentProperties.First();
|
for (nsResourceSet::ConstIterator property = mContainmentProperties.First();
|
||||||
|
@ -1186,6 +1190,7 @@ nsresult
|
||||||
nsXULTemplateQueryProcessorRDF::CheckIsSeparator(nsIRDFResource* aResource,
|
nsXULTemplateQueryProcessorRDF::CheckIsSeparator(nsIRDFResource* aResource,
|
||||||
PRBool* aIsSeparator)
|
PRBool* aIsSeparator)
|
||||||
{
|
{
|
||||||
|
NS_ENSURE_STATE(mDB);
|
||||||
return mDB->HasAssertion(aResource, kRDF_type, kNC_BookmarkSeparator,
|
return mDB->HasAssertion(aResource, kRDF_type, kNC_BookmarkSeparator,
|
||||||
PR_TRUE, aIsSeparator);
|
PR_TRUE, aIsSeparator);
|
||||||
}
|
}
|
||||||
|
@ -1903,7 +1908,7 @@ nsXULTemplateQueryProcessorRDF::GetContainerIndexOf(nsIXULTemplateResult* aResul
|
||||||
nsCOMPtr<nsISupports> ref;
|
nsCOMPtr<nsISupports> ref;
|
||||||
nsresult rv = aResult->GetBindingObjectFor(mRefVariable,
|
nsresult rv = aResult->GetBindingObjectFor(mRefVariable,
|
||||||
getter_AddRefs(ref));
|
getter_AddRefs(ref));
|
||||||
if (NS_FAILED(rv))
|
if (NS_FAILED(rv) || !mDB)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
nsCOMPtr<nsIRDFResource> container = do_QueryInterface(ref);
|
nsCOMPtr<nsIRDFResource> container = do_QueryInterface(ref);
|
||||||
|
@ -1940,7 +1945,7 @@ nsXULTemplateQueryProcessorRDF::GetSortValue(nsIXULTemplateResult* aResult,
|
||||||
return rv;
|
return rv;
|
||||||
|
|
||||||
nsCOMPtr<nsIRDFNode> value;
|
nsCOMPtr<nsIRDFNode> value;
|
||||||
if (source) {
|
if (source && mDB) {
|
||||||
// first check predicate?sort=true so that datasources may use a
|
// first check predicate?sort=true so that datasources may use a
|
||||||
// custom value for sorting
|
// custom value for sorting
|
||||||
rv = mDB->GetTarget(source, aSortPredicate, PR_TRUE,
|
rv = mDB->GetTarget(source, aSortPredicate, PR_TRUE,
|
||||||
|
|
|
@ -81,6 +81,7 @@ class nsXULTreeBuilder : public nsXULTemplateBuilder,
|
||||||
public:
|
public:
|
||||||
// nsISupports
|
// nsISupports
|
||||||
NS_DECL_ISUPPORTS_INHERITED
|
NS_DECL_ISUPPORTS_INHERITED
|
||||||
|
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
||||||
|
|
||||||
// nsIXULTreeBuilder
|
// nsIXULTreeBuilder
|
||||||
NS_DECL_NSIXULTREEBUILDER
|
NS_DECL_NSIXULTREEBUILDER
|
||||||
|
@ -304,15 +305,42 @@ NS_NewXULTreeBuilder(nsISupports* aOuter, REFNSIID aIID, void** aResult)
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_CLASS(nsXULTreeBuilder)
|
||||||
|
|
||||||
NS_IMPL_ADDREF_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
NS_IMPL_ADDREF_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
||||||
NS_IMPL_RELEASE_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
NS_IMPL_RELEASE_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mBoxObject)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mSelection)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mPersistStateStore)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mObservers)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||||
|
|
||||||
|
static PRBool TraverseObservers(nsISupports* aElement, void *aData)
|
||||||
|
{
|
||||||
|
nsCycleCollectionTraversalCallback *cb =
|
||||||
|
static_cast<nsCycleCollectionTraversalCallback*>(aData);
|
||||||
|
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(*cb, "mObservers[i]");
|
||||||
|
cb->NoteXPCOMChild(aElement);
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsXULTreeBuilder, nsXULTemplateBuilder)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mBoxObject)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSelection)
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mPersistStateStore)
|
||||||
|
if (tmp->mObservers) {
|
||||||
|
tmp->mObservers->EnumerateForwards(TraverseObservers, &cb);
|
||||||
|
}
|
||||||
|
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||||
|
|
||||||
DOMCI_DATA(XULTreeBuilder, nsXULTreeBuilder)
|
DOMCI_DATA(XULTreeBuilder, nsXULTreeBuilder)
|
||||||
|
|
||||||
NS_INTERFACE_MAP_BEGIN(nsXULTreeBuilder)
|
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsXULTreeBuilder)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsIXULTreeBuilder)
|
NS_INTERFACE_MAP_ENTRY(nsIXULTreeBuilder)
|
||||||
NS_INTERFACE_MAP_ENTRY(nsITreeView)
|
NS_INTERFACE_MAP_ENTRY(nsITreeView)
|
||||||
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULTreeBuilder)
|
NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(XULTreeBuilder)
|
||||||
NS_INTERFACE_MAP_END_INHERITING(nsXULTemplateBuilder)
|
NS_INTERFACE_MAP_END_INHERITING(nsXULTemplateBuilder)
|
||||||
|
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче