Bug 1029209 - Additional patch to fix a rooting hazard; r=bent

This commit is contained in:
Jan Varga 2014-07-17 12:41:08 -04:00
parent 4c05eee5c1
commit 26636e0611

View File

@ -780,10 +780,11 @@ ResolveMysteryBlob(nsIDOMBlob* aBlob, const nsString& aContentType,
class MainThreadDeserializationTraits
{
public:
static JSObject* CreateAndWrapMutableFile(JSContext* aCx,
IDBDatabase* aDatabase,
StructuredCloneFile& aFile,
const MutableFileData& aData)
static bool CreateAndWrapMutableFile(JSContext* aCx,
IDBDatabase* aDatabase,
StructuredCloneFile& aFile,
const MutableFileData& aData,
JS::MutableHandle<JSObject*> aResult)
{
MOZ_ASSERT(NS_IsMainThread());
@ -792,7 +793,13 @@ public:
nsRefPtr<IDBMutableFile> mutableFile = IDBMutableFile::Create(aData.name,
aData.type, aDatabase, fileInfo.forget());
return mutableFile->WrapObject(aCx);
JS::Rooted<JSObject*> result(aCx, mutableFile->WrapObject(aCx));
if (NS_WARN_IF(!result)) {
return false;
}
aResult.set(result);
return true;
}
static JSObject* CreateAndWrapBlobOrFile(JSContext* aCx,
@ -882,13 +889,22 @@ public:
class CreateIndexDeserializationTraits
{
public:
static JSObject* CreateAndWrapMutableFile(JSContext* aCx,
IDBDatabase* aDatabase,
StructuredCloneFile& aFile,
const MutableFileData& aData)
static bool CreateAndWrapMutableFile(JSContext* aCx,
IDBDatabase* aDatabase,
StructuredCloneFile& aFile,
const MutableFileData& aData,
JS::MutableHandle<JSObject*> aResult)
{
// MutableFile can't be used in index creation, so just make a dummy object.
return JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr());
JS::Rooted<JSObject*> obj(aCx,
JS_NewObject(aCx, nullptr, JS::NullPtr(), JS::NullPtr()));
if (NS_WARN_IF(!obj)) {
return false;
}
aResult.set(obj);
return true;
}
static JSObject* CreateAndWrapBlobOrFile(JSContext* aCx,
@ -1489,7 +1505,7 @@ IDBObjectStore::ReadBlobOrFile(JSStructuredCloneReader* aReader,
}
// static
template <class DeserializationTraits>
template <class Traits>
JSObject*
IDBObjectStore::StructuredCloneReadCallback(JSContext* aCx,
JSStructuredCloneReader* aReader,
@ -1527,8 +1543,16 @@ IDBObjectStore::StructuredCloneReadCallback(JSContext* aCx,
return nullptr;
}
return DeserializationTraits::CreateAndWrapMutableFile(aCx, database,
file, data);
JS::Rooted<JSObject*> result(aCx);
if (NS_WARN_IF(!Traits::CreateAndWrapMutableFile(aCx,
database,
file,
data,
&result))) {
return nullptr;
}
return result;
}
BlobOrFileData data;
@ -1536,8 +1560,7 @@ IDBObjectStore::StructuredCloneReadCallback(JSContext* aCx,
return nullptr;
}
return DeserializationTraits::CreateAndWrapBlobOrFile(aCx, database,
file, data);
return Traits::CreateAndWrapBlobOrFile(aCx, database, file, data);
}
const JSStructuredCloneCallbacks* runtimeCallbacks =