mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 23:31:56 +00:00
Bug 1187151 (part 15) - Replace nsBaseHashtable::Enumerate() calls in dom/ with iterators. r=baku.
--HG-- extra : rebase_source : ecaa04bef4088c23213fe470549336c1a7420f1c
This commit is contained in:
parent
9fa2681d82
commit
b0da382c6c
@ -464,37 +464,6 @@ nsCCUncollectableMarker::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
struct TraceClosure
|
||||
{
|
||||
TraceClosure(JSTracer* aTrc, uint32_t aGCNumber)
|
||||
: mTrc(aTrc), mGCNumber(aGCNumber)
|
||||
{}
|
||||
JSTracer* mTrc;
|
||||
uint32_t mGCNumber;
|
||||
};
|
||||
|
||||
static PLDHashOperator
|
||||
TraceActiveWindowGlobal(const uint64_t& aId, nsGlobalWindow*& aWindow, void* aClosure)
|
||||
{
|
||||
if (aWindow->GetDocShell() && aWindow->IsOuterWindow()) {
|
||||
TraceClosure* closure = static_cast<TraceClosure*>(aClosure);
|
||||
aWindow->TraceGlobalJSObject(closure->mTrc);
|
||||
EventListenerManager* elm = aWindow->GetExistingListenerManager();
|
||||
if (elm) {
|
||||
elm->TraceListeners(closure->mTrc);
|
||||
}
|
||||
|
||||
#ifdef MOZ_XUL
|
||||
nsIDocument* doc = aWindow->GetExtantDoc();
|
||||
if (doc && doc->IsXULDocument()) {
|
||||
XULDocument* xulDoc = static_cast<XULDocument*>(doc);
|
||||
xulDoc->TraceProtos(closure->mTrc, closure->mGCNumber);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
void
|
||||
mozilla::dom::TraceBlackJS(JSTracer* aTrc, uint32_t aGCNumber, bool aIsShutdownGC)
|
||||
{
|
||||
@ -515,12 +484,27 @@ mozilla::dom::TraceBlackJS(JSTracer* aTrc, uint32_t aGCNumber, bool aIsShutdownG
|
||||
return;
|
||||
}
|
||||
|
||||
TraceClosure closure(aTrc, aGCNumber);
|
||||
|
||||
// Mark globals of active windows black.
|
||||
nsGlobalWindow::WindowByIdTable* windowsById =
|
||||
nsGlobalWindow::GetWindowsTable();
|
||||
if (windowsById) {
|
||||
windowsById->Enumerate(TraceActiveWindowGlobal, &closure);
|
||||
for (auto iter = windowsById->Iter(); !iter.Done(); iter.Next()) {
|
||||
nsGlobalWindow* window = iter.Data();
|
||||
if (window->GetDocShell() && window->IsOuterWindow()) {
|
||||
window->TraceGlobalJSObject(aTrc);
|
||||
EventListenerManager* elm = window->GetExistingListenerManager();
|
||||
if (elm) {
|
||||
elm->TraceListeners(aTrc);
|
||||
}
|
||||
|
||||
#ifdef MOZ_XUL
|
||||
nsIDocument* doc = window->GetExtantDoc();
|
||||
if (doc && doc->IsXULDocument()) {
|
||||
XULDocument* xulDoc = static_cast<XULDocument*>(doc);
|
||||
xulDoc->TraceProtos(aTrc, aGCNumber);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1624,15 +1624,6 @@ nsMessageManagerScriptExecutor::DidCreateGlobal()
|
||||
}
|
||||
}
|
||||
|
||||
static PLDHashOperator
|
||||
RemoveCachedScriptEntry(const nsAString& aKey,
|
||||
nsMessageManagerScriptHolder*& aData,
|
||||
void* aUserArg)
|
||||
{
|
||||
delete aData;
|
||||
return PL_DHASH_REMOVE;
|
||||
}
|
||||
|
||||
// static
|
||||
void
|
||||
nsMessageManagerScriptExecutor::Shutdown()
|
||||
@ -1640,7 +1631,10 @@ nsMessageManagerScriptExecutor::Shutdown()
|
||||
if (sCachedScripts) {
|
||||
AutoSafeJSContext cx;
|
||||
NS_ASSERTION(sCachedScripts != nullptr, "Need cached scripts");
|
||||
sCachedScripts->Enumerate(RemoveCachedScriptEntry, nullptr);
|
||||
for (auto iter = sCachedScripts->Iter(); !iter.Done(); iter.Next()) {
|
||||
delete iter.Data();
|
||||
iter.Remove();
|
||||
}
|
||||
|
||||
delete sCachedScripts;
|
||||
sCachedScripts = nullptr;
|
||||
|
Loading…
Reference in New Issue
Block a user