зеркало из https://github.com/mozilla/gecko-dev.git
Bug 965920, part 3 - Smart pointerize newVariant. r=bholley
This commit is contained in:
Родитель
291bf1fcf7
Коммит
266e5716aa
|
@ -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)) {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Загрузка…
Ссылка в новой задаче