Bug 344789 – "WARNING: Asked to remove non-existent observer" in <nsImageLoadingContent.cpp> |RemoveObserver()|

p=sgautherie r/sr=bzbarsky
This commit is contained in:
Serge Gautherie 2008-08-01 21:58:59 +01:00
parent a9906d2600
commit 45282e7f24

View File

@ -152,6 +152,8 @@ protected:
// can be false when this is true
PRPackedBool mShouldResize;
PRPackedBool mFirstResize;
// mObservingImageLoader is true while the observer is set.
PRPackedBool mObservingImageLoader;
};
ImageListener::ImageListener(nsImageDocument* aDocument)
@ -159,7 +161,6 @@ ImageListener::ImageListener(nsImageDocument* aDocument)
{
}
ImageListener::~ImageListener()
{
}
@ -212,6 +213,7 @@ ImageListener::OnStartRequest(nsIRequest* request, nsISupports *ctxt)
NS_ENSURE_TRUE(imageLoader, NS_ERROR_UNEXPECTED);
imageLoader->AddObserver(imgDoc);
imgDoc->mObservingImageLoader = PR_TRUE;
imageLoader->LoadImageWithChannel(channel, getter_AddRefs(mNextStream));
return nsMediaDocumentStreamListener::OnStartRequest(request, ctxt);
@ -227,6 +229,7 @@ ImageListener::OnStopRequest(nsIRequest* request, nsISupports *ctxt,
nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(imgDoc->mImageContent);
if (imageLoader) {
imgDoc->mObservingImageLoader = PR_FALSE;
imageLoader->RemoveObserver(imgDoc);
}
@ -334,9 +337,11 @@ nsImageDocument::Destroy()
target->RemoveEventListener(NS_LITERAL_STRING("click"), this, PR_FALSE);
// Break reference cycle with mImageContent, if we have one
nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(mImageContent);
if (imageLoader) {
imageLoader->RemoveObserver(this);
if (mObservingImageLoader) {
nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(mImageContent);
if (imageLoader) {
imageLoader->RemoveObserver(this);
}
}
mImageContent = nsnull;