Bug 1366896, part 1 - Factor out initialize code and make initialize work with CIDs. r=gabor draft
authorAndrew McCreight <continuation@gmail.com>
Wed, 24 May 2017 10:49:31 -0700
changeset 650158 8111ff6edea5aef4525bc3a538c558a6f4a0cbaf
parent 650157 d9150d0ff526fbb717943839fef58deab9b31292
child 650159 f8ccd8ffb5ed8504554cc2092f9c2066005c0a35
push id75288
push userbmo:continuation@gmail.com
push dateMon, 21 Aug 2017 22:42:18 +0000
reviewersgabor
bugs1366896
milestone57.0a1
Bug 1366896, part 1 - Factor out initialize code and make initialize work with CIDs. r=gabor MozReview-Commit-ID: 3spZGOqlU1j
js/xpconnect/src/XPCJSID.cpp
--- a/js/xpconnect/src/XPCJSID.cpp
+++ b/js/xpconnect/src/XPCJSID.cpp
@@ -565,18 +565,36 @@ NS_IMETHODIMP_(const nsID*) nsJSCID::Get
     {return &mDetails->ID();}
 
 NS_IMETHODIMP nsJSCID::GetValid(bool* aValid)
     {return mDetails->GetValid(aValid);}
 
 NS_IMETHODIMP nsJSCID::Equals(nsIJSID* other, bool* _retval)
     {return mDetails->Equals(other, _retval);}
 
-NS_IMETHODIMP nsJSCID::Initialize(const char* idString)
-    {return mDetails->Initialize(idString);}
+NS_IMETHODIMP
+nsJSCID::Initialize(const char* str)
+{
+    if (str[0] == '{') {
+        NS_ENSURE_SUCCESS(mDetails->Initialize(str), NS_ERROR_FAILURE);
+    } else {
+        nsCOMPtr<nsIComponentRegistrar> registrar;
+        NS_GetComponentRegistrar(getter_AddRefs(registrar));
+        NS_ENSURE_TRUE(registrar, NS_ERROR_FAILURE);
+
+        nsCID* cid;
+        if (NS_FAILED(registrar->ContractIDToCID(str, &cid)))
+            return NS_ERROR_FAILURE;
+        bool success = mDetails->InitWithName(*cid, str);
+        free(cid);
+        if (!success)
+            return NS_ERROR_FAILURE;
+    }
+    return NS_OK;
+}
 
 NS_IMETHODIMP nsJSCID::ToString(char** _retval)
     {ResolveName(); return mDetails->ToString(_retval);}
 
 void
 nsJSCID::ResolveName()
 {
     if (!mDetails->NameIsSet())
@@ -588,31 +606,18 @@ already_AddRefed<nsJSCID>
 nsJSCID::NewID(const char* str)
 {
     if (!str) {
         NS_ERROR("no string");
         return nullptr;
     }
 
     RefPtr<nsJSCID> idObj = new nsJSCID();
-    if (str[0] == '{') {
-        NS_ENSURE_SUCCESS(idObj->Initialize(str), nullptr);
-    } else {
-        nsCOMPtr<nsIComponentRegistrar> registrar;
-        NS_GetComponentRegistrar(getter_AddRefs(registrar));
-        NS_ENSURE_TRUE(registrar, nullptr);
-
-        nsCID* cid;
-        if (NS_FAILED(registrar->ContractIDToCID(str, &cid)))
-            return nullptr;
-        bool success = idObj->mDetails->InitWithName(*cid, str);
-        free(cid);
-        if (!success)
-            return nullptr;
-    }
+    if (NS_FAILED(idObj->Initialize(str)))
+        return nullptr;
     return idObj.forget();
 }
 
 static const nsID*
 GetIIDArg(uint32_t argc, const JS::Value& val, JSContext* cx)
 {
     const nsID* iid;