Bug 965920, part 3 - Smart pointerize newVariant. r=bholley

This commit is contained in:
Andrew McCreight 2014-02-04 19:29:58 -08:00
parent bcb8940d58
commit 125428116a
4 changed files with 13 additions and 13 deletions

View File

@ -721,10 +721,11 @@ XPCConvert::JSData2Native(void* d, HandleValue s,
MOZ_ASSERT(iid,"can't do interface conversions without iid");
if (iid->Equals(NS_GET_IID(nsIVariant))) {
XPCVariant* variant = XPCVariant::newVariant(cx, s);
nsCOMPtr<nsIVariant> variant = XPCVariant::newVariant(cx, s);
if (!variant)
return false;
*((nsISupports**)d) = static_cast<nsIVariant*>(variant);
variant.forget(static_cast<nsISupports**>(d));
return true;
} else if (iid->Equals(NS_GET_IID(nsIAtom)) &&
JSVAL_IS_STRING(s)) {

View File

@ -110,23 +110,20 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(XPCVariant)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
// static
XPCVariant* XPCVariant::newVariant(JSContext* cx, jsval aJSVal)
already_AddRefed<XPCVariant>
XPCVariant::newVariant(JSContext* cx, jsval aJSVal)
{
XPCVariant* variant;
nsRefPtr<XPCVariant> variant;
if (!JSVAL_IS_TRACEABLE(aJSVal))
variant = new XPCVariant(cx, aJSVal);
else
variant = new XPCTraceableVariant(cx, aJSVal);
if (!variant)
return nullptr;
NS_ADDREF(variant);
if (!variant->InitializeData(cx))
NS_RELEASE(variant); // Also sets variant to nullptr.
return nullptr;
return variant;
return variant.forget();
}
// Helper class to give us a namespace for the table based code below.

View File

@ -618,7 +618,8 @@ nsXPConnect::JSValToVariant(JSContext *cx,
{
NS_PRECONDITION(aResult, "bad param");
*aResult = XPCVariant::newVariant(cx, aJSVal);
nsRefPtr<XPCVariant> variant = XPCVariant::newVariant(cx, aJSVal);
variant.forget(aResult);
NS_ENSURE_TRUE(*aResult, NS_ERROR_OUT_OF_MEMORY);
return NS_OK;
@ -1073,7 +1074,8 @@ nsXPConnect::JSToVariant(JSContext* ctx, HandleValue value, nsIVariant** _retval
NS_PRECONDITION(ctx, "bad param");
NS_PRECONDITION(_retval, "bad param");
*_retval = XPCVariant::newVariant(ctx, value);
nsRefPtr<XPCVariant> variant = XPCVariant::newVariant(ctx, value);
variant.forget(_retval);
if (!(*_retval))
return NS_ERROR_FAILURE;

View File

@ -3215,7 +3215,7 @@ public:
// if a given nsIVariant is in fact an XPCVariant.
NS_DECLARE_STATIC_IID_ACCESSOR(XPCVARIANT_IID)
static XPCVariant* newVariant(JSContext* cx, jsval aJSVal);
static already_AddRefed<XPCVariant> newVariant(JSContext* cx, jsval aJSVal);
/**
* This getter clears the gray bit before handing out the jsval if the jsval