Bug 1450359, part 1 - Add and use a new getter method on XPTInterfaceInfoManager. draft
authorAndrew McCreight <continuation@gmail.com>
Fri, 30 Mar 2018 13:30:44 -0700
changeset 776988 7f0cef94efae5a3682c7874e70b3b1a5e330d9bc
parent 776987 d247f217c7cf7b5c55b9e7244c24ab49d742ea2e
child 776989 3fe9bc13645c67dfdda5f057747b974ee5f08264
push id105048
push userbmo:continuation@gmail.com
push dateTue, 03 Apr 2018 23:38:23 +0000
bugs1450359
milestone61.0a1
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
xpcom/reflect/xptinfo/XPTInterfaceInfoManager.h
xpcom/reflect/xptinfo/xptiInterfaceInfoManager.cpp
xpcom/reflect/xptinfo/xptiTypelibGuts.cpp
--- 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;
 }