decoder->mObserver->OnStopFrame(nsnull, nsnull, decoder->mFrame); decoder->mObserver->OnStopContainer(nsnull, nsnull, decoder->mImage); decoder->mObserver->OnStopDecode(nsnull, nsnull, NS_OK, nsnull);
decoder->mObserver->OnStopFrame(nsnull, decoder->mFrame); decoder->mObserver->OnStopContainer(nsnull, decoder->mImage); decoder->mObserver->OnStopDecode(nsnull, NS_OK, nsnull);
end_callback(png_structp png_ptr, png_infop info_ptr){  /* libpng comments:   *   * this function is called when the whole image has been read,   * including any chunks after the image (up to and including   * the IEND).  You will usually have the same info chunk as you   * had in the header, although some data may have been added   * to the comments and time fields.   *   * Most people won't do much here, perhaps setting a flag that   * marks the image as finished.   */  nsPNGDecoder *decoder = NS_STATIC_CAST(nsPNGDecoder*, png_get_progressive_ptr(png_ptr));  if (decoder->mObserver) {    decoder->mObserver->OnStopFrame(nsnull, nsnull, decoder->mFrame);    decoder->mObserver->OnStopContainer(nsnull, nsnull, decoder->mImage);    decoder->mObserver->OnStopDecode(nsnull, nsnull, NS_OK, nsnull);  }  // We are never going to change the data of this frame again.  Let the OS  // do what it wants with this image.  decoder->mFrame->SetMutable(PR_FALSE);}