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
parent 323a26bfda
commit 06196ac684
2 changed files with 51 additions and 15 deletions

View File

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

View File

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