Bug 1019627 - Check DOMRequest window before processing callback. r=dhylands

This commit is contained in:
Yuan Xulei 2014-07-08 13:44:22 +08:00
Родитель 323a26bfda
Коммит 06196ac684
2 изменённых файлов: 51 добавлений и 15 удалений

Просмотреть файл

@ -58,6 +58,11 @@ DeviceStorageRequestChild::
mCallback = nullptr;
}
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return true;
}
switch (aValue.type()) {
case DeviceStorageResponseValue::TErrorResponse:
@ -73,7 +78,7 @@ DeviceStorageRequestChild::
mDSFile->GetFullPath(fullPath);
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), fullPath, &result);
StringToJsval(window, fullPath, &result);
mRequest->FireSuccess(result);
break;
}
@ -86,7 +91,7 @@ DeviceStorageRequestChild::
mDSFile->GetFullPath(fullPath);
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), fullPath, &result);
StringToJsval(window, fullPath, &result);
mDSFileDescriptor->mDSFile = mDSFile;
mDSFileDescriptor->mFileDescriptor = r.fileDescriptor();
@ -103,7 +108,7 @@ DeviceStorageRequestChild::
nsCOMPtr<nsIDOMFile> file = do_QueryInterface(blob);
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx,
InterfaceToJsval(mRequest->GetOwner(), file, &NS_GET_IID(nsIDOMFile)));
InterfaceToJsval(window, file, &NS_GET_IID(nsIDOMFile)));
mRequest->FireSuccess(result);
break;
}
@ -131,7 +136,7 @@ DeviceStorageRequestChild::
AvailableStorageResponse r = aValue;
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), r.mountState(), &result);
StringToJsval(window, r.mountState(), &result);
mRequest->FireSuccess(result);
break;
}
@ -141,7 +146,7 @@ DeviceStorageRequestChild::
StorageStatusResponse r = aValue;
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), r.storageStatus(), &result);
StringToJsval(window, r.storageStatus(), &result);
mRequest->FireSuccess(result);
break;
}
@ -151,7 +156,7 @@ DeviceStorageRequestChild::
FormatStorageResponse r = aValue;
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), r.mountState(), &result);
StringToJsval(window, r.mountState(), &result);
mRequest->FireSuccess(result);
break;
}
@ -161,7 +166,7 @@ DeviceStorageRequestChild::
MountStorageResponse r = aValue;
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), r.storageStatus(), &result);
StringToJsval(window, r.storageStatus(), &result);
mRequest->FireSuccess(result);
break;
}
@ -171,7 +176,7 @@ DeviceStorageRequestChild::
UnmountStorageResponse r = aValue;
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), r.storageStatus(), &result);
StringToJsval(window, r.storageStatus(), &result);
mRequest->FireSuccess(result);
break;
}

Просмотреть файл

@ -1816,6 +1816,9 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
if (!mRequest->GetOwner()) {
return NS_OK;
}
mRequest->FireError(mError);
mRequest = nullptr;
return NS_OK;
@ -1906,13 +1909,18 @@ ContinueCursorEvent::Continue()
NS_IMETHODIMP
ContinueCursorEvent::Run()
{
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsRefPtr<DeviceStorageFile> file = GetNextFile();
nsDOMDeviceStorageCursor* cursor
= static_cast<nsDOMDeviceStorageCursor*>(mRequest.get());
AutoJSContext cx;
JS::Rooted<JS::Value> val(cx, nsIFileToJsval(cursor->GetOwner(), file));
JS::Rooted<JS::Value> val(cx, nsIFileToJsval(window, file));
if (file) {
cursor->mOkToCallContinue = true;
@ -2135,6 +2143,10 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsString state = NS_LITERAL_STRING("unavailable");
if (mFile) {
@ -2143,7 +2155,7 @@ public:
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), state, &result);
StringToJsval(window, state, &result);
mRequest->FireSuccess(result);
mRequest = nullptr;
return NS_OK;
@ -2169,6 +2181,10 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsString state = NS_LITERAL_STRING("undefined");
if (mFile) {
@ -2177,7 +2193,7 @@ public:
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), state, &result);
StringToJsval(window, state, &result);
mRequest->FireSuccess(result);
mRequest = nullptr;
return NS_OK;
@ -2203,6 +2219,10 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsString state = NS_LITERAL_STRING("unavailable");
if (mFile) {
@ -2211,7 +2231,7 @@ public:
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), state, &result);
StringToJsval(window, state, &result);
mRequest->FireSuccess(result);
mRequest = nullptr;
return NS_OK;
@ -2237,6 +2257,10 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsString state = NS_LITERAL_STRING("unavailable");
if (mFile) {
@ -2245,7 +2269,7 @@ public:
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), state, &result);
StringToJsval(window, state, &result);
mRequest->FireSuccess(result);
mRequest = nullptr;
return NS_OK;
@ -2271,6 +2295,10 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
nsString state = NS_LITERAL_STRING("unavailable");
if (mFile) {
@ -2279,7 +2307,7 @@ public:
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx);
StringToJsval(mRequest->GetOwner(), state, &result);
StringToJsval(window, state, &result);
mRequest->FireSuccess(result);
mRequest = nullptr;
return NS_OK;
@ -2322,10 +2350,13 @@ public:
NS_IMETHOD Run()
{
MOZ_ASSERT(NS_IsMainThread());
nsCOMPtr<nsPIDOMWindow> window = mRequest->GetOwner();
if (!window) {
return NS_OK;
}
AutoJSContext cx;
JS::Rooted<JS::Value> result(cx, JSVAL_NULL);
nsPIDOMWindow* window = mRequest->GetOwner();
if (mFile) {
result = nsIFileToJsval(window, mFile);