diff --git a/mozilla/content/html/style/src/nsCSSLoader.cpp b/mozilla/content/html/style/src/nsCSSLoader.cpp
index 068b73c01f3..60baa178258 100644
--- a/mozilla/content/html/style/src/nsCSSLoader.cpp
+++ b/mozilla/content/html/style/src/nsCSSLoader.cpp
@@ -382,12 +382,12 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, nsIURI* aURL,
mSheetIndex(aSheetIndex),
mOwningElement(nsnull),
mParserToUnblock(nsnull),
- mDidBlockParser(PR_FALSE),
mParentSheet(aParentSheet),
mParentRule(aParentRule),
mNext(nsnull),
mParentData(nsnull),
mPendingChildren(0),
+ mDidBlockParser(PR_FALSE),
mIsInline(PR_FALSE),
mIsAgent(PR_FALSE),
mSyncLoad(PR_FALSE),
@@ -410,12 +410,12 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, nsIURI* aURL,
mSheetIndex(-1),
mOwningElement(nsnull),
mParserToUnblock(nsnull),
- mDidBlockParser(PR_FALSE),
mParentSheet(nsnull),
mParentRule(nsnull),
mNext(nsnull),
mParentData(nsnull),
mPendingChildren(0),
+ mDidBlockParser(PR_FALSE),
mIsInline(PR_FALSE),
mIsAgent(PR_TRUE),
mSyncLoad(PRBool(nsnull == aObserver)),
@@ -617,9 +617,24 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader,
nsresult result = NS_OK;
nsString *strUnicodeBuffer = nsnull;
- if (aString && aStringLen>0) {
- nsCOMPtr request;
- aLoader->GetRequest(getter_AddRefs(request));
+ nsCOMPtr request;
+ result = aLoader->GetRequest(getter_AddRefs(request));
+ if (NS_FAILED(result))
+ request = nsnull;
+ // If it's an HTTP channel, we want to make sure this is not an
+ // error document we got.
+ PRBool realDocument = PR_TRUE;
+ nsCOMPtr httpChannel(do_QueryInterface(request));
+ if (httpChannel) {
+ PRUint32 statusCode;
+ result = httpChannel->GetResponseStatus(&statusCode);
+ // Only accept 2xx responses
+ if (NS_SUCCEEDED(result) && statusCode / 100 != 2) {
+ realDocument = PR_FALSE;
+ }
+ }
+
+ if (realDocument && aString && aStringLen>0) {
nsCAutoString contentType;
if (! (mLoader->mNavQuirkMode)) {
nsCOMPtr channel(do_QueryInterface(request));
diff --git a/mozilla/layout/style/nsCSSLoader.cpp b/mozilla/layout/style/nsCSSLoader.cpp
index 068b73c01f3..60baa178258 100644
--- a/mozilla/layout/style/nsCSSLoader.cpp
+++ b/mozilla/layout/style/nsCSSLoader.cpp
@@ -382,12 +382,12 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, nsIURI* aURL,
mSheetIndex(aSheetIndex),
mOwningElement(nsnull),
mParserToUnblock(nsnull),
- mDidBlockParser(PR_FALSE),
mParentSheet(aParentSheet),
mParentRule(aParentRule),
mNext(nsnull),
mParentData(nsnull),
mPendingChildren(0),
+ mDidBlockParser(PR_FALSE),
mIsInline(PR_FALSE),
mIsAgent(PR_FALSE),
mSyncLoad(PR_FALSE),
@@ -410,12 +410,12 @@ SheetLoadData::SheetLoadData(CSSLoaderImpl* aLoader, nsIURI* aURL,
mSheetIndex(-1),
mOwningElement(nsnull),
mParserToUnblock(nsnull),
- mDidBlockParser(PR_FALSE),
mParentSheet(nsnull),
mParentRule(nsnull),
mNext(nsnull),
mParentData(nsnull),
mPendingChildren(0),
+ mDidBlockParser(PR_FALSE),
mIsInline(PR_FALSE),
mIsAgent(PR_TRUE),
mSyncLoad(PRBool(nsnull == aObserver)),
@@ -617,9 +617,24 @@ SheetLoadData::OnStreamComplete(nsIStreamLoader* aLoader,
nsresult result = NS_OK;
nsString *strUnicodeBuffer = nsnull;
- if (aString && aStringLen>0) {
- nsCOMPtr request;
- aLoader->GetRequest(getter_AddRefs(request));
+ nsCOMPtr request;
+ result = aLoader->GetRequest(getter_AddRefs(request));
+ if (NS_FAILED(result))
+ request = nsnull;
+ // If it's an HTTP channel, we want to make sure this is not an
+ // error document we got.
+ PRBool realDocument = PR_TRUE;
+ nsCOMPtr httpChannel(do_QueryInterface(request));
+ if (httpChannel) {
+ PRUint32 statusCode;
+ result = httpChannel->GetResponseStatus(&statusCode);
+ // Only accept 2xx responses
+ if (NS_SUCCEEDED(result) && statusCode / 100 != 2) {
+ realDocument = PR_FALSE;
+ }
+ }
+
+ if (realDocument && aString && aStringLen>0) {
nsCAutoString contentType;
if (! (mLoader->mNavQuirkMode)) {
nsCOMPtr channel(do_QueryInterface(request));