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));