mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-13 19:41:49 +00:00
Bug 1029209 - Additional patch to fix a rooting hazard; r=bent
This commit is contained in:
parent
8f28eb1deb
commit
75d95947f6
@ -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 =
|
||||
|
Loading…
x
Reference in New Issue
Block a user