Bug 1366896, part 1 - Factor out initialize code and make initialize work with CIDs. r=gabor
MozReview-Commit-ID: 3spZGOqlU1j
--- 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;