mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-28 05:10:49 +00:00
Make the scriptloader check the HTTP status and not load 404 pages and
such as scripts. Bug 139040, r=jst, sr=rpotts
This commit is contained in:
parent
1242faca14
commit
5a892e5796
@ -617,15 +617,29 @@ nsScriptLoader::OnStreamComplete(nsIStreamLoader* aLoader,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// If the load returned an error page, then we need to abort
|
||||
nsCOMPtr<nsIRequest> req;
|
||||
rv = aLoader->GetRequest(getter_AddRefs(req));
|
||||
NS_ASSERTION(req, "StreamLoader's request went away prematurely");
|
||||
if (NS_FAILED(rv)) return rv; // XXX Should this remove the pending request?
|
||||
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(request));
|
||||
if (httpChannel) {
|
||||
PRBool requestSucceeded;
|
||||
rv = httpChannel->GetRequestSucceeded(&requestSucceeded);
|
||||
if (NS_SUCCEEDED(rv) && !requestSucceeded) {
|
||||
mPendingRequests.RemoveElement(aContext, 0);
|
||||
FireScriptAvailable(NS_ERROR_NOT_AVAILABLE, request,
|
||||
NS_LITERAL_STRING(""));
|
||||
ProcessPendingReqests();
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
if (stringLen) {
|
||||
nsAutoString characterSet, preferred;
|
||||
nsCOMPtr<nsIUnicodeDecoder> unicodeDecoder;
|
||||
|
||||
nsCOMPtr<nsIChannel> channel;
|
||||
nsCOMPtr<nsIRequest> req;
|
||||
rv = aLoader->GetRequest(getter_AddRefs(req));
|
||||
NS_ASSERTION(req, "StreamLoader's request went away prematurely");
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
channel = do_QueryInterface(req);
|
||||
if (channel) {
|
||||
|
@ -626,10 +626,9 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader,
|
||||
PRBool realDocument = PR_TRUE;
|
||||
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(request));
|
||||
if (httpChannel) {
|
||||
PRUint32 statusCode;
|
||||
result = httpChannel->GetResponseStatus(&statusCode);
|
||||
// Only accept 2xx responses
|
||||
if (NS_SUCCEEDED(result) && statusCode / 100 != 2) {
|
||||
PRBool requestSucceeded;
|
||||
result = httpChannel->GetRequestSucceeded(&requestSucceeded);
|
||||
if (NS_SUCCEEDED(result) && !requestSucceeded) {
|
||||
realDocument = PR_FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -626,10 +626,9 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader,
|
||||
PRBool realDocument = PR_TRUE;
|
||||
nsCOMPtr<nsIHttpChannel> httpChannel(do_QueryInterface(request));
|
||||
if (httpChannel) {
|
||||
PRUint32 statusCode;
|
||||
result = httpChannel->GetResponseStatus(&statusCode);
|
||||
// Only accept 2xx responses
|
||||
if (NS_SUCCEEDED(result) && statusCode / 100 != 2) {
|
||||
PRBool requestSucceeded;
|
||||
result = httpChannel->GetRequestSucceeded(&requestSucceeded);
|
||||
if (NS_SUCCEEDED(result) && !requestSucceeded) {
|
||||
realDocument = PR_FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -77,6 +77,7 @@ interface nsIHttpChannel : nsIChannel
|
||||
|
||||
readonly attribute unsigned long responseStatus;
|
||||
readonly attribute ACString responseStatusText;
|
||||
readonly attribute boolean requestSucceeded;
|
||||
|
||||
/**
|
||||
* Header strings are case insensitive
|
||||
|
@ -2663,6 +2663,17 @@ nsHttpChannel::GetResponseStatusText(nsACString &value)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHttpChannel::GetRequestSucceeded(PRBool *value)
|
||||
{
|
||||
NS_PRECONDITION(value, "Don't ever pass a null arg to this function");
|
||||
if (!mResponseHead)
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
PRUint32 status = mResponseHead->Status();
|
||||
*value = (status / 100 == 2);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsHttpChannel::GetResponseHeader(const nsACString &header, nsACString &value)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user