// static void XPCWrappedNativeScope::SuspectAllWrappers(XPCJSRuntime* rt, nsCycleCollectionNoteRootCallback& cb) { for (XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext) { cur->mWrappedNativeMap->Enumerate(WrappedNativeSuspecter, &cb); if (cur->mDOMExpandoSet) { for (DOMExpandoSet::Range r = cur->mDOMExpandoSet->all(); !r.empty(); r.popFront()) SuspectDOMExpandos(r.front(), cb); } } }
// static void XPCWrappedNativeScope::SuspectAllWrappers(XPCJSRuntime* rt, nsCycleCollectionNoteRootCallback& cb) { for (XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext) { for (auto i = cur->mWrappedNativeMap->Iter(); !i.Done(); i.Next()) { static_cast<Native2WrappedNativeMap::Entry*>(i.Get())->value->Suspect(cb); } if (cur->mDOMExpandoSet) { for (DOMExpandoSet::Range r = cur->mDOMExpandoSet->all(); !r.empty(); r.popFront()) SuspectDOMExpandos(r.front(), cb); } } }
// static void XPCWrappedNativeScope::TraceWrappedNativesInAllScopes(JSTracer* trc, XPCJSRuntime* rt) { // FIXME The lock may not be necessary during tracing as that serializes // access to JS runtime. See bug 380139. XPCAutoLock lock(rt->GetMapLock()); // Do JS_CallTracer for all wrapped natives with external references, as // well as any DOM expando objects. for (XPCWrappedNativeScope* cur = gScopes; cur; cur = cur->mNext) { cur->mWrappedNativeMap->Enumerate(WrappedNativeJSGCThingTracer, trc); if (cur->mDOMExpandoSet) { for (DOMExpandoSet::Range r = cur->mDOMExpandoSet->all(); !r.empty(); r.popFront()) JS_CallObjectTracer(trc, r.front(), "DOM expando object"); } } }