Bug 1450359, part 1 - Add and use a new getter method on XPTInterfaceInfoManager.
This eliminates the only remaining use of mWorkingSet outside of
XPTInterfaceInfoManager.
MozReview-Commit-ID: FbLPbozJ8bd
--- a/xpcom/reflect/xptinfo/XPTInterfaceInfoManager.h
+++ b/xpcom/reflect/xptinfo/XPTInterfaceInfoManager.h
@@ -33,16 +33,18 @@ class XPTInterfaceInfoManager final
public:
// GetSingleton() is infallible
static XPTInterfaceInfoManager* GetSingleton();
static void FreeInterfaceInfoManager();
void GetScriptableInterfaces(nsCOMArray<nsIInterfaceInfo>& aInterfaces);
+ xptiInterfaceEntry* GetInterfaceEntry(const XPTInterfaceDescriptor* aIface);
+
xptiInterfaceEntry* GetInterfaceEntryForIID(const nsIID* iid);
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf);
private:
XPTInterfaceInfoManager();
~XPTInterfaceInfoManager();
@@ -62,19 +64,14 @@ private:
void InvalidateInterfaceInfos();
// XXX make these private with accessors
nsDataHashtable<nsIDHashKey, xptiInterfaceEntry*> mIIDTable;
nsDataHashtable<nsDepCharHashKey, xptiInterfaceEntry*> mNameTable;
};
- // XXX xptiInterfaceInfo wants to poke at the working set itself
- friend class ::xptiInterfaceInfo;
- friend class ::xptiInterfaceEntry;
- friend class ::xptiTypelibGuts;
-
xptiWorkingSet mWorkingSet;
};
} // namespace mozilla
#endif
--- a/xpcom/reflect/xptinfo/xptiInterfaceInfoManager.cpp
+++ b/xpcom/reflect/xptinfo/xptiInterfaceInfoManager.cpp
@@ -139,16 +139,30 @@ XPTInterfaceInfoManager::VerifyAndAddEnt
return;
mWorkingSet.mIIDTable.Put(entry->IID(), entry);
mWorkingSet.mNameTable.Put(entry->GetTheName(), entry);
typelib->SetEntryAt(idx, entry);
}
+xptiInterfaceEntry*
+XPTInterfaceInfoManager::GetInterfaceEntry(const XPTInterfaceDescriptor* aIface)
+{
+ static const nsID zeroIID = {
+ 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }
+ };
+
+ if (aIface->mIID.Equals(zeroIID)) {
+ return mWorkingSet.mNameTable.Get(aIface->Name());
+ }
+
+ return mWorkingSet.mIIDTable.Get(aIface->mIID);
+}
+
// this is a private helper
static nsresult
EntryToInfo(xptiInterfaceEntry* entry, nsIInterfaceInfo** _retval)
{
if (!entry) {
*_retval = nullptr;
return NS_ERROR_FAILURE;
}
--- a/xpcom/reflect/xptinfo/xptiTypelibGuts.cpp
+++ b/xpcom/reflect/xptinfo/xptiTypelibGuts.cpp
@@ -30,37 +30,25 @@ xptiTypelibGuts::Create()
return nullptr;
}
return new (place) xptiTypelibGuts();
}
xptiInterfaceEntry*
xptiTypelibGuts::GetEntryAt(uint16_t i)
{
- static const nsID zeroIID = {
- 0x0, 0x0, 0x0, { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }
- };
-
NS_ASSERTION(i < GetEntryCount(), "bad index");
xptiInterfaceEntry* r = mEntryArray[i];
if (r) {
return r;
}
const XPTInterfaceDescriptor* iface = XPTHeader::kInterfaces + i;
-
- XPTInterfaceInfoManager::xptiWorkingSet& set =
- XPTInterfaceInfoManager::GetSingleton()->mWorkingSet;
-
- if (iface->mIID.Equals(zeroIID)) {
- r = set.mNameTable.Get(iface->Name());
- } else {
- r = set.mIIDTable.Get(iface->mIID);
- }
+ r = XPTInterfaceInfoManager::GetSingleton()->GetInterfaceEntry(iface);
if (r) {
SetEntryAt(i, r);
}
return r;
}