Bug 855130 - Traverse nsHostObjectProtocolHandler from nsDocument. r=khuey

This commit is contained in:
Matthew Gregan 2013-05-03 12:54:05 +12:00
parent 9af24cb77c
commit 613691856d
3 changed files with 23 additions and 0 deletions

View File

@ -39,6 +39,7 @@ public:
nsACString& aUri); nsACString& aUri);
static void RemoveDataEntry(const nsACString& aUri); static void RemoveDataEntry(const nsACString& aUri);
static nsIPrincipal* GetDataEntryPrincipal(const nsACString& aUri); static nsIPrincipal* GetDataEntryPrincipal(const nsACString& aUri);
static void Traverse(const nsACString& aUri, nsCycleCollectionTraversalCallback& aCallback);
}; };
class nsBlobProtocolHandler : public nsHostObjectProtocolHandler class nsBlobProtocolHandler : public nsHostObjectProtocolHandler

View File

@ -1773,6 +1773,10 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsDocument)
if (tmp->mCSSLoader) { if (tmp->mCSSLoader) {
tmp->mCSSLoader->TraverseCachedSheets(cb); tmp->mCSSLoader->TraverseCachedSheets(cb);
} }
for (uint32_t i = 0; i < tmp->mHostObjectURIs.Length(); ++i) {
nsHostObjectProtocolHandler::Traverse(tmp->mHostObjectURIs[i], cb);
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
@ -1877,6 +1881,10 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDocument)
tmp->mCSSLoader->UnlinkCachedSheets(); tmp->mCSSLoader->UnlinkCachedSheets();
} }
for (uint32_t i = 0; i < tmp->mHostObjectURIs.Length(); ++i) {
nsHostObjectProtocolHandler::RemoveDataEntry(tmp->mHostObjectURIs[i]);
}
tmp->mInUnlinkOrDeletion = false; tmp->mInUnlinkOrDeletion = false;
NS_IMPL_CYCLE_COLLECTION_UNLINK_END NS_IMPL_CYCLE_COLLECTION_UNLINK_END

View File

@ -86,6 +86,20 @@ nsHostObjectProtocolHandler::GetDataEntryPrincipal(const nsACString& aUri)
return res->mPrincipal; return res->mPrincipal;
} }
void
nsHostObjectProtocolHandler::Traverse(const nsACString& aUri,
nsCycleCollectionTraversalCallback& aCallback)
{
DataInfo* res;
gDataTable->Get(aUri, &res);
if (!res) {
return;
}
NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(aCallback, "HostObjectProtocolHandler DataInfo.mObject");
aCallback.NoteXPCOMChild(res->mObject);
}
static DataInfo* static DataInfo*
GetDataInfo(const nsACString& aUri) GetDataInfo(const nsACString& aUri)
{ {