diff --git a/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp b/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp index 63f8f9cc452..5ceaeade3ef 100644 --- a/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp +++ b/mozilla/modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp @@ -819,5 +819,8 @@ term_source (j_decompress_ptr jd) src->decoder->mObserver->OnStopDecode(nsnull, nsnull, NS_OK, nsnull); } - src->decoder->mFrame->SetMutable(PR_FALSE); + PRBool isMutable = PR_FALSE; + if (src->decoder->mImageLoad) + src->decoder->mImageLoad->GetIsMultiPartChannel(&isMutable); + src->decoder->mFrame->SetMutable(isMutable); } diff --git a/mozilla/modules/libpr0n/public/imgILoad.idl b/mozilla/modules/libpr0n/public/imgILoad.idl index b084bfd1e71..c88d831f979 100644 --- a/mozilla/modules/libpr0n/public/imgILoad.idl +++ b/mozilla/modules/libpr0n/public/imgILoad.idl @@ -41,4 +41,5 @@ interface imgILoad : nsISupports * @attention NEED DOCS */ attribute imgIContainer image; + readonly attribute PRBool isMultiPartChannel; }; diff --git a/mozilla/modules/libpr0n/src/imgRequest.cpp b/mozilla/modules/libpr0n/src/imgRequest.cpp index 151d11aed44..099847eadb0 100644 --- a/mozilla/modules/libpr0n/src/imgRequest.cpp +++ b/mozilla/modules/libpr0n/src/imgRequest.cpp @@ -58,7 +58,7 @@ imgRequest::imgRequest() : mObservers(0), mLoading(PR_FALSE), mProcessing(PR_FALSE), mImageStatus(imgIRequest::STATUS_NONE), mState(0), - mContentType(nsnull), mCacheId(0), mValidator(nsnull) + mContentType(nsnull), mCacheId(0), mValidator(nsnull), mIsMultiPartChannel(PR_FALSE) { NS_INIT_ISUPPORTS(); /* member initializers and constructor code */ @@ -307,6 +307,14 @@ NS_IMETHODIMP imgRequest::GetImage(imgIContainer **aImage) return NS_OK; } +NS_IMETHODIMP imgRequest::GetIsMultiPartChannel(PRBool *aIsMultiPartChannel) +{ + LOG_FUNC(gImgLog, "imgRequest::GetIsMultiPartChannel"); + + *aIsMultiPartChannel = mIsMultiPartChannel; + + return NS_OK; +} /** imgIContainerObserver methods **/ @@ -534,6 +542,11 @@ NS_IMETHODIMP imgRequest::OnStartRequest(nsIRequest *aRequest, nsISupports *ctxt mChannel = do_QueryInterface(aRequest); } + nsXPIDLCString mContentType; + mChannel->GetContentType(getter_Copies(mContentType)); + if (PL_strcasecmp("multipart/x-mixed-replace", mContentType.get()) == 0) + mIsMultiPartChannel = PR_TRUE; + /* set our state variables to their initial values. */ mImageStatus = imgIRequest::STATUS_NONE; mState = 0; diff --git a/mozilla/modules/libpr0n/src/imgRequest.h b/mozilla/modules/libpr0n/src/imgRequest.h index e08ec27827e..63b53df5b25 100644 --- a/mozilla/modules/libpr0n/src/imgRequest.h +++ b/mozilla/modules/libpr0n/src/imgRequest.h @@ -128,6 +128,7 @@ private: PRTime mLoadTime; httpValidateChecker *mValidator; + PRBool mIsMultiPartChannel; }; #endif