diff --git a/mozilla/xpinstall/src/nsXPInstallManager.cpp b/mozilla/xpinstall/src/nsXPInstallManager.cpp index f0843a1998a..cf3090d21aa 100644 --- a/mozilla/xpinstall/src/nsXPInstallManager.cpp +++ b/mozilla/xpinstall/src/nsXPInstallManager.cpp @@ -955,6 +955,18 @@ nsXPInstallManager::OnStartRequest(nsIRequest* request, nsISupports *ctxt) { nsresult rv = NS_ERROR_FAILURE; + // If we are dealing with a HTTP request, then treat HTTP error pages as + // download failures. + nsCOMPtr httpChan = do_QueryInterface(request); + if (httpChan) { + PRBool succeeded; + if (NS_SUCCEEDED(httpChan->GetRequestSucceeded(&succeeded)) && !succeeded) { + // HTTP response is not a 2xx! + request->Cancel(NS_BINDING_ABORTED); + return NS_OK; + } + } + NS_ASSERTION( mItem && mItem->mFile, "XPIMgr::OnStartRequest bad state"); if ( mItem && mItem->mFile ) { @@ -963,7 +975,7 @@ nsXPInstallManager::OnStartRequest(nsIRequest* request, nsISupports *ctxt) rv = NS_NewLocalFileOutputStream(getter_AddRefs(mItem->mOutStream), mItem->mFile, PR_WRONLY | PR_CREATE_FILE | PR_TRUNCATE, - 0664); + 0600); } return rv; }