summaryrefslogtreecommitdiffstats
path: root/www/firefox3-devel/files
diff options
context:
space:
mode:
Diffstat (limited to 'www/firefox3-devel/files')
-rw-r--r--www/firefox3-devel/files/firefox.desktop.in191
-rw-r--r--www/firefox3-devel/files/patch-bugzilla2968181621
-rw-r--r--www/firefox3-devel/files/patch-build_unix_run-mozilla.sh12
-rw-r--r--www/firefox3-devel/files/patch-config-mkdepend-imakemdep.h10
-rw-r--r--www/firefox3-devel/files/patch-config-rules.mk13
-rw-r--r--www/firefox3-devel/files/patch-config_autoconf.mk.in18
-rw-r--r--www/firefox3-devel/files/patch-config_mkdepend_Makefile.in10
-rw-r--r--www/firefox3-devel/files/patch-content_xslt_public_txDouble.h20
-rw-r--r--www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp46
-rw-r--r--www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h12
-rw-r--r--www/firefox3-devel/files/patch-js_src_Makefile.in10
-rw-r--r--www/firefox3-devel/files/patch-js_src_jsnum.c28
-rw-r--r--www/firefox3-devel/files/patch-modules_libpref_src_init_all.js53
-rw-r--r--www/firefox3-devel/files/patch-security-coreconf-FreeBSD.mk24
-rw-r--r--www/firefox3-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp10
-rw-r--r--www/firefox3-devel/files/patch-storage_build_Makefile.in10
-rw-r--r--www/firefox3-devel/files/patch-sysnss34
-rw-r--r--www/firefox3-devel/files/patch-toolkit_xre_Makefile.in8
-rw-r--r--www/firefox3-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp29
-rw-r--r--www/firefox3-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc11
-rw-r--r--www/firefox3-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in54
-rw-r--r--www/firefox3-devel/files/patch-xptcall-alpha459
-rw-r--r--www/firefox3-devel/files/patch-xptcall-sparc64327
23 files changed, 0 insertions, 3010 deletions
diff --git a/www/firefox3-devel/files/firefox.desktop.in b/www/firefox3-devel/files/firefox.desktop.in
deleted file mode 100644
index d72090e1a..000000000
--- a/www/firefox3-devel/files/firefox.desktop.in
+++ /dev/null
@@ -1,191 +0,0 @@
-[Desktop Entry]
-Encoding=UTF-8
-Name=@MOZILLA_NAME@ Web Browser
-Name[am]=
-Name[ar]=
-Name[az]=@MOZILLA_NAME@ Veb Səyyahı
-Name[be]=
-Name[bg]=Интернет браузър @MOZILLA_NAME@
-Name[bn]=
-Name[bs]=@MOZILLA_NAME@ web preglednik
-Name[ca]=Navegador web @MOZILLA_NAME@
-Name[cs]=Prohlížeč WWW @MOZILLA_NAME@
-Name[cy]=Y Porwr Gwe @MOZILLA_NAME@
-Name[da]=@MOZILLA_NAME@ - internetsurfning
-Name[de]=@MOZILLA_NAME@ Webbrowser
-Name[el]=Περιηγητής Διαδικτύου @MOZILLA_NAME@
-Name[en_CA]=@MOZILLA_NAME@ Web Browser
-Name[en_GB]=@MOZILLA_NAME@ Web Browser
-Name[es]=Navegador Web @MOZILLA_NAME@
-Name[et]=@MOZILLA_NAME@ veebibrauser
-Name[eu]=@MOZILLA_NAME@ web arakatzailea
-Name[fi]=@MOZILLA_NAME@, WWW-selain
-Name[fr]=Navigateur Web @MOZILLA_NAME@
-Name[ga]=Brabhsálaí Lín @MOZILLA_NAME@
-Name[gu]=એપીફની વૅબ બ્રાઉઝર
-Name[he]=דפדפן @MOZILLA_NAME@
-Name[hi]=
-Name[hr]=@MOZILLA_NAME@ Web preglednik
-Name[hu]=@MOZILLA_NAME@ webböngésző
-Name[id]=Web Browser @MOZILLA_NAME@
-Name[it]=Browser web @MOZILLA_NAME@
-Name[ja]=@MOZILLA_NAME@ ウェブ・ブラウザ
-Name[ko]=@MOZILLA_NAME@ 웹 브라우저
-Name[li]=@MOZILLA_NAME@ Web Browser
-Name[lt]=@MOZILLA_NAME@ web naršyklė
-Name[mk]=@MOZILLA_NAME@ веб прелистувач
-Name[ml]=എപ്പിഫാനി വെബ്ബ് ബ്രൌസ‌ര്
-Name[mn]=@MOZILLA_NAME@ веб хөтөч
-Name[ms]=Pelungsur Web @MOZILLA_NAME@
-Name[nb]=@MOZILLA_NAME@ nettleser
-Name[nl]=@MOZILLA_NAME@ Webbrowser
-Name[nn]=@MOZILLA_NAME@ nettlesar
-Name[no]=@MOZILLA_NAME@ nettleser
-Name[pa]=ਏਪੀਫਾਨੀ ਵੈੱਬ ਬਰਾਊਜ਼ਰ
-Name[pl]=Przeglądarka WWW @MOZILLA_NAME@
-Name[pt]=Navegador Web @MOZILLA_NAME@
-Name[pt_BR]=Navegador Web @MOZILLA_NAME@
-Name[ro]=Navigatorul @MOZILLA_NAME@
-Name[ru]=Веб-браузер @MOZILLA_NAME@
-Name[sk]=
-Name[sl]=Spletni brskalnik @MOZILLA_NAME@
-Name[sq]=@MOZILLA_NAME@ - Shfletuesi Web
-Name[sr]=
-Name[sr@Latn]=Veb čitač Spoznaja
-Name[sv]=Webbläsaren @MOZILLA_NAME@
-Name[ta]=எபிபனி வலை உலாவி
-Name[tk]=@MOZILLA_NAME@ Web Ahtarçisi
-Name[tr]=@MOZILLA_NAME@ Web Tarayıcı
-Name[uk]=Переглядач web @MOZILLA_NAME@
-Name[vi]=Trình Duyệt Web @MOZILLA_NAME@
-Name[wa]=Betchteu waibe epiphany
-Name[zh_CN]=@MOZILLA_NAME@ Web 浏览器
-Name[zh_TW]=@MOZILLA_NAME@ 網頁瀏覽器
-GenericName=Web Browser
-GenericName[ar]=متصفّح الانترنت
-GenericName[az]=Veb Səyyahı
-GenericName[be]=Вандроўнік па павуціньню
-GenericName[bg]=Браузър
-GenericName[bn]=ওয়েব ব্রাউজার
-GenericName[bs]=Web preglednik
-GenericName[ca]=Navegador web
-GenericName[cs]=Prohlížeč WWW
-GenericName[cy]=Porwr Gwe
-GenericName[da]=Internetsurfning
-GenericName[de]=Webbrowser
-GenericName[el]=Περιηγητής Ιστοσελίδων
-GenericName[en_CA]=Web Browser
-GenericName[en_GB]=Web Browser
-GenericName[es]=Navegador web
-GenericName[et]=Veebilehitseja
-GenericName[eu]=Web arakatzailea
-GenericName[fi]=WWW-selain
-GenericName[fr]=Navigateur Web @MOZILLA_NAME@
-GenericName[ga]=Brabhsálaí Lín
-GenericName[gu]=વેબ બ્રાઉઝર
-GenericName[he]=דפדפן אינטרנט
-GenericName[hi]=वेब ब्राउज़र
-GenericName[hr]=Web preglednik
-GenericName[hu]=Webböngésző
-GenericName[id]=Browser Web
-GenericName[it]=Browser web
-GenericName[ja]=GNOME ウェブ・ブラウザ
-GenericName[ko]=웹 브라우저
-GenericName[li]=Wèb Browser
-GenericName[lt]=Web naršyklė
-GenericName[mk]=Веб прелистувач
-GenericName[mn]=Веб хөтөч
-GenericName[ms]=Pelungsur Web
-GenericName[nb]=Nettleser
-GenericName[nl]=Web-browser
-GenericName[nn]=Nettlesar
-GenericName[no]=Nettleser
-GenericName[pa]=ਵੈਬ ਬਰਾਊਜ਼
-GenericName[pl]=Przeglądarka WWW
-GenericName[pt]=Navegador Web
-GenericName[pt_BR]=Navegador Web
-GenericName[ro]=Navigator Internet
-GenericName[ru]=Веб-браузер
-GenericName[sk]=WWW prehliadač
-GenericName[sl]=Spletni brskalnik
-GenericName[sq]=Shfletuesi Web
-GenericName[sr]=Веб читач
-GenericName[sr@Latn]=Veb čitač
-GenericName[sv]=Webbläsare
-GenericName[ta]=வலை உலாவி
-GenericName[th]=เว็บบราวเซอร์
-GenericName[tk]=Web Ahtarçysy
-GenericName[tr]=Web Tarayıcı
-GenericName[uk]=Переглядач web-сторінок
-GenericName[vi]=Trình duyệt Web
-GenericName[wa]=Betchteu waibe
-GenericName[zh_CN]=Web 浏览器
-GenericName[zh_TW]=網頁瀏覽器
-Comment=Browse the web
-Comment[ar]=تصفح الانترنت
-Comment[az]=Vebi gəzin
-Comment[be]=Вандраваць па павуціньню
-Comment[bg]=Сърфиране в интернет
-Comment[bn]=ওয়েব ব্রাউজ করুন
-Comment[bs]=Pregledaj na internetu
-Comment[ca]=Navegueu per la web
-Comment[cs]=Prohlížet WWW
-Comment[cy]=Pori'r we
-Comment[da]=Surf på internettet
-Comment[de]=Im Web surfen
-Comment[el]=Περιήγηση στον παγκόσμιο ιστό
-Comment[en_CA]=Browse the web
-Comment[en_GB]=Browse the web
-Comment[es]=Navegar por la web
-Comment[et]=Sirvi veebi
-Comment[eu]=Arakatu web-a
-Comment[fi]=Selaa WWW:tä
-Comment[fr]=Naviguer sur Internet
-Comment[ga]=Brabhsáil an Líon
-Comment[gu]=વેબમાં શોધો
-Comment[he]=גלוש ברשת
-Comment[hi]=वेब ब्राउज़ करें
-Comment[hr]=Pregledaj Web
-Comment[hu]=A világháló böngészése
-Comment[id]=Jelajah web
-Comment[it]=Esplora il web
-Comment[ja]=ウェブを閲覧します
-Comment[ko]=웹을 돌아 다닙니다
-Comment[li]=Blajere op internet
-Comment[lt]=Naršyti internete
-Comment[mk]=Прелистувајте на веб
-Comment[ml]=വലക്കെട്ട് തിരയുക
-Comment[mn]=Веб броузе хийх
-Comment[ms]=Layari web
-Comment[nb]=Surf på nettet
-Comment[nl]=Websurfen
-Comment[nn]=Surf på nettet
-Comment[no]=Surf på nettet
-Comment[pa]=ਵੈਬ ਬਰਾਊਜ਼
-Comment[pl]=Przeglądanie stron WWW
-Comment[pt]=Navegar na web
-Comment[pt_BR]=Navegar na web
-Comment[ro]=Navigare Internet
-Comment[ru]=Веб-браузер
-Comment[sk]=Prehliadať internet
-Comment[sl]=Brskaj po spletu
-Comment[sq]=Eksploro web-in
-Comment[sr]=Прегледај веб
-Comment[sr@Latn]=Pregledaj veb
-Comment[sv]=Surfa på nätet
-Comment[ta]=வலையில் உலாவு
-Comment[th]=ใช้งานเว็บบราวเซอร์ @MOZILLA_NAME@
-Comment[tk]=Webi Ahtar
-Comment[tr]=Web'e Gözat
-Comment[uk]=Програма перегляду web-сторінок
-Comment[vi]=Duyệt web
-Comment[wa]=Naivyî avå les waibes
-Comment[zh_CN]=浏览 Web
-Comment[zh_TW]=瀏覽網頁
-Exec=@MOZILLA@ %u
-Icon=@FIREFOX_ICON@
-StartupNotify=false
-Terminal=false
-Type=Application
-Categories=Application;Network;
-MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;
diff --git a/www/firefox3-devel/files/patch-bugzilla296818 b/www/firefox3-devel/files/patch-bugzilla296818
deleted file mode 100644
index a7f22b4eb..000000000
--- a/www/firefox3-devel/files/patch-bugzilla296818
+++ /dev/null
@@ -1,1621 +0,0 @@
-diff --git ChangeLog ChangeLog
-new file mode 100644
-index 0000000..c9c7dce
---- /dev/null
-+++ ChangeLog
-@@ -0,0 +1,277 @@
-+2007-09-06 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Write the restore data regardless of
-+ the state we are in, right when we first fill the buffer.
-+
-+2007-09-06 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::RestoreDataDone): Print the first four bytes of the
-+ restore data, to check it later.
-+ (imgContainer::ReloadImages): Likewise.
-+
-+2007-09-06 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (info_callback):
-+ Reuse the image container if the loader has one; don't always
-+ create a new one. This lets containers reload themselves.
-+
-+2007-09-06 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::AppendFrame): Unconditionally increment mNumFrames!
-+ (imgContainer::RestoreDiscardedData): Check the number of restored
-+ frames here.
-+ (imgContainer::ReloadImages): Flush and close the decoder.
-+ (imgContainer::RestoreDataDone): No-op if we are already restoring
-+ the data.
-+
-+2007-09-06 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (*): Print the
-+ imgContainer pointers when logging.
-+
-+ * modules/libpr0n/src/imgContainer.cpp (*): Likewise.
-+
-+2007-09-04 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::ReloadImages): Oops, use an nsCOMPtr<> for the
-+ ContainerLoader, not a direct pointer.
-+ (ContainerLoader NS_IMPL_ISUPPORTS3): Oops, we also implement
-+ imgIContainerObserver.
-+ (class ContainerLoader): Implement nsISupportsWeakReference as
-+ well; imgContainer needs it from the observer.
-+ (imgContainer::RestoreDiscardedData): Log how many frames we got
-+ and how many we expected.
-+ (imgContainer::ReloadImages): Assert that we got the right number
-+ of frames.
-+ (imgContainer::GetCurrentFrameNoRef): Log failures from
-+ RestoreDiscardedData().
-+
-+ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (end_callback):
-+ Don't tell the container that the restore data is done here...
-+ (nsPNGDecoder::Close): ... but do it here instead. This is
-+ because end_callback() gets called from within ReadDataOut(); we
-+ don't want end_callback() to inform the container that the restore
-+ data is done before actually writing the restore data to it!
-+
-+2007-09-04 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (info_callback):
-+ Set the image container as discardable.
-+ (ReadDataOut): Store the compressed data in the image container to
-+ restore from it later.
-+ (end_callback): Tell the image container that we finished feeding
-+ it the restore data.
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::SetDiscardable): Log the MIME type of the
-+ discardable container.
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Clean up a printf format, and do the
-+ logging only on success.
-+
-+ * gfx/thebes/public/gfxXlibSurface.h: Add myself to the contributors.
-+ * modules/libpr0n/public/imgIContainer.idl: Likewise.
-+ * modules/libpr0n/src/imgContainer.cpp: Likewise.
-+ * modules/libpr0n/src/imgContainer.h: Likewise.
-+
-+2007-09-03 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::AddRestoreData): No-op if we are being called
-+ during the restore process (we already have the data; there is no
-+ need to save it again).
-+ (class ContainerLoader): Put the macro to implement QI for
-+ imgILoad and imgIDecoderObserver.
-+ (imgContainer::AppendFrame): Don't increment mNumFrames if we are
-+ restoring the image data. Fix the use of the frame counters.
-+ (imgContainer::sDiscardTimerCallback): Implement.
-+ (imgContainer::GetCurrentFrame): Oops, preserve the semantics of
-+ the original function --- if the actual getter gives us a null
-+ frame, return NS_ERROR_FAILURE.
-+
-+2007-08-31 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.h (class imgContainer): New
-+ prototype for a ReloadImages() method.
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::RestoreDiscardedData): Call ReloadImages().
-+ (imgContainer::ReloadImages): Implement.
-+ (class ContainerLoader): New helper class that implements
-+ imgILoader and imgIDecoderObserver. We'll use this to re-load the
-+ imgContainer from an image decoder.
-+
-+2007-08-31 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::RestoreDiscardedData): Reset the timer; if we got
-+ here it means that the data may be used again soon.
-+
-+2007-08-30 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add an
-+ mDiscarded field. We'll use it to know if the uncompressed image
-+ data has been discarded already and needs to be regenerated on
-+ demand.
-+ (class imgContainer): New prototype for a RestoreDiscardedData() method.
-+
-+ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize
-+ mDiscarded.
-+ (imgContainer::GetCurrentFrameNoRef): Return an nsresult rather
-+ than the image frame; return the actual image frame as a
-+ reference. Ensure that the discarded data gets restored.
-+ (imgContainer::GetCurrentFrame): Return the error from
-+ GetCurrentFrameNoRef() if it fails.
-+ (imgContainer::StartAnimation): Likewise.
-+ (imgContainer::GetFrameAt): Ensure that the discarded data gets restored.
-+ (imgContainer::ResetAnimation): Likewise.
-+ (imgContainer::Notify): Likewise.
-+ (imgContainer::RestoreDiscardedData): Just a stub for now.
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Oops, use "count" for the restore
-+ data, not "mBufferLen".
-+
-+2007-08-29 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add a
-+ mNumFrames field. Since we'll discard the contents of mFrames, we
-+ can't rely on mFrames.Count() for the frame count.
-+
-+ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize mNumFrames.
-+ (imgContainer::AppendFrame): Maintain the frame count in mNumFrames.
-+ (imgContainer::GetNumFrames): Use mNumFrames instead of mFrames.Count().
-+ (imgContainer::GetFrameAt): Likewise.
-+ (imgContainer::DecodingComplete): Likewise.
-+ (imgContainer::SetAnimationMode): Likewise.
-+ (imgContainer::StartAnimation): Likewise.
-+ (imgContainer::Notify): Likewise.
-+
-+2007-08-29 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.h
-+ (imgContainer::inlinedGetCurrentFrame): Removed to make it not
-+ inline.
-+ (imgContainer::GetCurrentFrameNoRef): New prototype.
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (imgContainer::GetCurrentFrameNoRef): Implement this here.
-+ (imgContainer::GetCurrentFrame, imgContainer::StartAnimation): Use
-+ GetCurrentFrameNoRef() instead of inlinedGetCurrentFrame().
-+
-+2007-08-28 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/public/imgIContainer.idl (restoreDataDone): New
-+ method. We'll use this to tell the container when we finish
-+ feeding it the compressed data. After that, it can begin its
-+ discard process whenever it wants.
-+
-+ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add
-+ mRestoreDataDone and mDiscardTimer fields.
-+
-+ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize
-+ the new fields.
-+ (imgContainer::RestoreDataDone): Implement. When turned on, we
-+ start the discard timer.
-+ (imgContainer::ResetDiscardTimer): New method.
-+ (~imgContainer): Cancel and destroy the timer.
-+ (imgContainer::sDiscardTimerCallback): New callback. Here we'll
-+ discard the uncompressed image data in the image frames. For now
-+ this is just a stub.
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Tell the imgContainer when we are done
-+ feeding data to it.
-+
-+2007-08-28 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp (discarding_is_enabled):
-+ Stub function, to be replaced with something better in the
-+ future. This lets us disable image discarding by setting a
-+ MOZ_DISABLE_IMAGE_DISCARD environment variable.
-+ (imgContainer::SetDiscardable): Noop if discarding is disabled.
-+ (imgContainer::AddRestoreData): Likewise.
-+
-+2007-08-28 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Mark the imgContainer as discardable
-+ when we create it. And when writing to the JPEG decoder, add the
-+ compressed data to the imgContainer so that it can restore itself
-+ later.
-+
-+2007-08-28 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgContainer.cpp
-+ (gCompressedImageAccountingLog): Create a
-+ "CompressedImageAccounting" log domain.
-+ (~imgContainer): Log the destruction of compressed data.
-+ (imgContainer::AddRestoreData): Log the addition of compressed data.
-+ (imgContainer::SetDiscardable): Log the creation of a compressed imgContainer.
-+
-+2007-08-28 Federico Mena Quintero <federico@novell.com>
-+
-+
-+ * modules/libpr0n/src/imgContainer.cpp (~imgContainer): Free the
-+ restore data and the MIME type.
-+
-+2007-08-22 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/public/imgIContainer.idl (setDiscardable): New
-+ method. When this is called (can be called only once) from an
-+ image decoder, the image container will discard its uncompressed
-+ image data after a timeout.
-+ (addRestoreData): New method. Image decoders should call this
-+ repeatedly after calling setDiscardable(); this is used to feed
-+ the original, compressed image data to the image container so that
-+ it can uncompress it on demand after discarding it.
-+
-+ * modules/libpr0n/src/imgContainer.cpp (imgContainer::SetDiscardable):
-+ Implement.
-+ (imgContainer::AddRestoreData): Implement.
-+
-+2007-08-20 Federico Mena Quintero <federico@novell.com>
-+
-+ * gfx/thebes/src/gfxXlibSurface.cpp
-+ (gfxXlibSurface::LogSurfaceCreation, surface_destroy_func): Count
-+ the number of surfaces in addition to the number of pixels.
-+
-+2007-08-17 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/public/ImageLogging.h: Remove gImgAccountingLog
-+ from here.
-+
-+ * modules/libpr0n/src/imgRequest.cpp: Likewise.
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (gJPEGDecodeAccountingLog): Create a "JPEGDecoderAccounting" log domain.
-+ (nsJPEGDecoder::WriteFrom): Use that log domain.
-+
-+ * gfx/thebes/src/gfxXlibSurface.cpp (gXlibSurfaceAccountingLog):
-+ Define a "XlibSurfaceAccounting" log domain.
-+ (gfxXlibSurface::LogSurfaceCreation): New method to log when an
-+ Xlib surface is created from a pixmap. Keeps a counter of how
-+ many pixels are allocated globally.
-+ (gfxXlibSurface::HookSurfaceDestructionForLogging): Utility method
-+ to set user data on the cairo surface, so that we can know when it
-+ is destroyed.
-+ (gfxXlibSurface::gfxXlibSurface): Log the creation of the surface,
-+ and hook it so that we can know when it is destroyed.
-+
-+2007-08-17 Federico Mena Quintero <federico@novell.com>
-+
-+ * modules/libpr0n/src/imgRequest.cpp (gImgAccountingLog): New
-+ logging domain "imgAccounting". We'll use this to log when images
-+ get allocated, freed, requested, etc.
-+
-+ * modules/libpr0n/public/ImageLogging.h (gImgAccountingLog):
-+ Declare this.
-+
-+ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+ (nsJPEGDecoder::WriteFrom): Log the creation of an image frame.
-+
-diff --git gfx/thebes/public/gfxXlibSurface.h gfx/thebes/public/gfxXlibSurface.h
-index 078dc73..ea7ba24 100644
---- gfx/thebes/public/gfxXlibSurface.h
-+++ gfx/thebes/public/gfxXlibSurface.h
-@@ -21,6 +21,7 @@
- * Contributor(s):
- * Stuart Parmenter <pavlov@pavlov.net>
- * Vladimir Vukicevic <vladimir@pobox.com>
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -85,6 +86,9 @@ public:
- // when the gfxXlibSurface is destroyed.
- void TakePixmap();
-
-+ void LogSurfaceCreation ();
-+ void HookSurfaceDestructionForLogging ();
-+
- protected:
- // if TakePixmap() was already called on this
- PRBool mPixmapTaken;
-diff --git gfx/thebes/src/gfxXlibSurface.cpp gfx/thebes/src/gfxXlibSurface.cpp
-index dc2a19f..f9c191c 100644
---- gfx/thebes/src/gfxXlibSurface.cpp
-+++ gfx/thebes/src/gfxXlibSurface.cpp
-@@ -21,6 +21,7 @@
- * Contributor(s):
- * Stuart Parmenter <pavlov@pavlov.net>
- * Vladimir Vukicevic <vladimir@pobox.com>
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -37,6 +38,7 @@
- * ***** END LICENSE BLOCK ***** */
-
- #include "gfxXlibSurface.h"
-+#include "prlog.h"
-
- #include "cairo.h"
- #include "cairo-xlib.h"
-@@ -51,6 +53,18 @@ typedef struct {
-
- static void pixmap_free_func (void *);
-
-+
-+#if defined(PR_LOGGING)
-+static PRLogModuleInfo *gXlibSurfaceAccountingLog = PR_NewLogModule ("XlibSurfaceAccounting");
-+#else
-+#define gXlibSurfaceAccountingLog
-+#endif
-+
-+static cairo_user_data_key_t surface_free_key;
-+static int num_surfaces_allocated;
-+static PRInt64 pixels_allocated;
-+
-+
- #define XLIB_IMAGE_SIDE_SIZE_LIMIT 0xffff
-
- gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual)
-@@ -59,6 +73,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual)
- DoSizeQuery();
- cairo_surface_t *surf = cairo_xlib_surface_create(dpy, drawable, visual, mSize.width, mSize.height);
- Init(surf);
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual, const gfxIntSize& size)
-@@ -69,6 +86,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual,
-
- cairo_surface_t *surf = cairo_xlib_surface_create(dpy, drawable, visual, mSize.width, mSize.height);
- Init(surf);
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::gfxXlibSurface(Display *dpy, Visual *visual, const gfxIntSize& size)
-@@ -87,6 +107,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Visual *visual, const gfxIntSize& s
-
- Init(surf);
- TakePixmap();
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, XRenderPictFormat *format,
-@@ -100,6 +123,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, XRenderPictForma
- ScreenOfDisplay(dpy,DefaultScreen(dpy)),
- format, mSize.width, mSize.height);
- Init(surf);
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::gfxXlibSurface(Display *dpy, XRenderPictFormat *format, const gfxIntSize& size)
-@@ -115,6 +141,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, XRenderPictFormat *format, const gf
- format, mSize.width, mSize.height);
- Init(surf);
- TakePixmap();
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::gfxXlibSurface(cairo_surface_t *csurf)
-@@ -124,6 +153,9 @@ gfxXlibSurface::gfxXlibSurface(cairo_surface_t *csurf)
- mDisplay = cairo_xlib_surface_get_display(csurf);
-
- Init(csurf, PR_TRUE);
-+
-+ LogSurfaceCreation ();
-+ HookSurfaceDestructionForLogging();
- }
-
- gfxXlibSurface::~gfxXlibSurface()
-@@ -198,3 +230,63 @@ pixmap_free_func (void *data)
-
- delete pfs;
- }
-+
-+void
-+gfxXlibSurface::LogSurfaceCreation ()
-+{
-+ gfxIntSize size;
-+
-+ size = GetSize ();
-+
-+ num_surfaces_allocated++;
-+ pixels_allocated += (PRInt64) size.width * size.height;
-+
-+ PR_LOG (gXlibSurfaceAccountingLog, PR_LOG_DEBUG,
-+ ("XlibSurfaceAccounting: Xlib surface %p created, %ux%u pixels - %d surfaces with %lld global pixels allocated",
-+ CairoSurface (),
-+ size.width,
-+ size.height,
-+ num_surfaces_allocated,
-+ pixels_allocated));
-+}
-+
-+struct SurfaceFreeData {
-+ gfxIntSize size;
-+ cairo_surface_t *surface;
-+};
-+
-+static void
-+surface_destroy_func (void *closure)
-+{
-+ SurfaceFreeData *data;
-+
-+ data = (SurfaceFreeData *) closure;
-+
-+ num_surfaces_allocated--;
-+ pixels_allocated -= (PRInt64) data->size.width * data->size.height;
-+
-+ PR_LOG (gXlibSurfaceAccountingLog, PR_LOG_DEBUG,
-+ ("XlibSurfaceAccounting: Destroying Xlib surface %p, %dx%d pixels - %d surfaces with %lld global pixels allocated",
-+ data->surface,
-+ data->size.width,
-+ data->size.height,
-+ num_surfaces_allocated,
-+ pixels_allocated));
-+
-+ delete data;
-+}
-+
-+void
-+gfxXlibSurface::HookSurfaceDestructionForLogging ()
-+{
-+ SurfaceFreeData *data;
-+
-+ data = new SurfaceFreeData;
-+ data->size = GetSize ();
-+ data->surface = CairoSurface ();
-+
-+ cairo_surface_set_user_data (data->surface,
-+ &surface_free_key,
-+ data,
-+ surface_destroy_func);
-+}
-diff --git modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-index 16b9fd8..48431e4 100644
---- modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-+++ modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
-@@ -22,6 +22,7 @@
- *
- * Contributor(s):
- * Stuart Parmenter <stuart@mozilla.com>
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -63,8 +64,10 @@ NS_IMPL_ISUPPORTS1(nsJPEGDecoder, imgIDecoder)
-
- #if defined(PR_LOGGING)
- PRLogModuleInfo *gJPEGlog = PR_NewLogModule("JPEGDecoder");
-+static PRLogModuleInfo *gJPEGDecoderAccountingLog = PR_NewLogModule ("JPEGDecoderAccounting");
- #else
- #define gJPEGlog
-+#define gJPEGDecoderAccountingLog
- #endif
-
-
-@@ -208,6 +211,15 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
- nsresult rv = inStr->Read((char*)mBuffer, count, &mBufferLen);
- *_retval = mBufferLen;
-
-+ if (mImage) {
-+ nsresult result = mImage->AddRestoreData ((char *) mBuffer, count);
-+
-+ if (NS_FAILED (result)) {
-+ mState = JPEG_ERROR;
-+ return result;
-+ }
-+ }
-+
- NS_ASSERTION(NS_SUCCEEDED(rv), "nsJPEGDecoder::WriteFrom -- inStr->Read failed");
- }
- // else no input stream.. Flush() ?
-@@ -357,6 +369,9 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
- /* Check if the request already has an image container.
- this is the case when multipart/x-mixed-replace is being downloaded
- if we already have one and it has the same width and height, reuse it.
-+
-+ This is also the case when an existing container is reloading itself from
-+ us.
- */
- mImageLoad->GetImage(getter_AddRefs(mImage));
- if (mImage) {
-@@ -370,6 +385,8 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
- }
-
- if (!mImage) {
-+ nsresult result;
-+
- mImage = do_CreateInstance("@mozilla.org/image/container;1");
- if (!mImage) {
- mState = JPEG_ERROR;
-@@ -377,6 +394,18 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
- }
- mImageLoad->SetImage(mImage);
- mImage->Init(mInfo.image_width, mInfo.image_height, mObserver);
-+
-+ result = mImage->SetDiscardable ("image/jpeg"); /* FIXME: is this MIME type always right for this decoder? */
-+ if (NS_FAILED (result)) {
-+ mState = JPEG_ERROR;
-+ return result;
-+ }
-+
-+ result = mImage->AddRestoreData ((char *) mBuffer, count);
-+ if (NS_FAILED (result)) {
-+ mState = JPEG_ERROR;
-+ return result;
-+ }
- }
-
- mObserver->OnStartContainer(nsnull, mImage);
-@@ -416,7 +445,11 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
- }
-
- mImage->AppendFrame(mFrame);
-- }
-+
-+ PR_LOG (gJPEGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("JPEGDecoderAccounting: nsJPEGDecoder::WriteFrom -- created image frame with %ux%u pixels",
-+ mInfo.image_width, mInfo.image_height));
-+ }
-
- mObserver->OnStartFrame(nsnull, mFrame);
-
-@@ -538,6 +571,8 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
-
- case JPEG_DONE:
- {
-+ nsresult result;
-+
- LOG_SCOPE(gJPEGlog, "nsJPEGDecoder::WriteFrom -- entering JPEG_DONE case");
-
- /* Step 7: Finish decompression */
-@@ -547,6 +582,12 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
-
- mState = JPEG_SINK_NON_JPEG_TRAILER;
-
-+ result = mImage->RestoreDataDone ();
-+ if (NS_FAILED (result)) {
-+ mState = JPEG_ERROR;
-+ return result;
-+ }
-+
- /* we're done dude */
- break;
- }
-diff --git modules/libpr0n/decoders/png/nsPNGDecoder.cpp modules/libpr0n/decoders/png/nsPNGDecoder.cpp
-index 85f0216..15abc9f 100644
---- modules/libpr0n/decoders/png/nsPNGDecoder.cpp
-+++ modules/libpr0n/decoders/png/nsPNGDecoder.cpp
-@@ -23,6 +23,7 @@
- * Contributor(s):
- * Stuart Parmenter <stuart@mozilla.com>
- * Andrew Smith
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -73,6 +74,7 @@ static void PNGAPI warning_callback(png_structp png_ptr, png_const_charp warning
-
- #ifdef PR_LOGGING
- PRLogModuleInfo *gPNGLog = PR_NewLogModule("PNGDecoder");
-+static PRLogModuleInfo *gPNGDecoderAccountingLog = PR_NewLogModule ("PNGDecoderAccounting");
- #endif
-
- NS_IMPL_ISUPPORTS1(nsPNGDecoder, imgIDecoder)
-@@ -119,6 +121,11 @@ void nsPNGDecoder::CreateFrame(png_uint_32 x_offset, png_uint_32 y_offset,
-
- if (mObserver)
- mObserver->OnStartFrame(nsnull, mFrame);
-+
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: nsPNGDecoder::CreateFrame -- created image frame with %dx%d pixels in container %p",
-+ width, height,
-+ mImage.get ()));
- }
-
- // set timeout and frame disposal method for the current frame
-@@ -213,9 +220,25 @@ NS_IMETHODIMP nsPNGDecoder::Init(imgILoad *aLoad)
- /* void close (); */
- NS_IMETHODIMP nsPNGDecoder::Close()
- {
-+ nsresult result;
-+
- if (mPNG)
- png_destroy_read_struct(&mPNG, mInfo ? &mInfo : NULL, NULL);
-
-+ result = mImage->RestoreDataDone ();
-+ if (NS_FAILED (result)) {
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: nsPNGDecoder::Close(): failure in RestoreDataDone() for image container %p",
-+ mImage.get ()));
-+
-+ mError = PR_TRUE;
-+ return result;
-+ }
-+
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: nsPNGDecoder::Close(): image container %p is now with RestoreDataDone",
-+ mImage.get ()));
-+
- return NS_OK;
- }
-
-@@ -234,6 +257,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
- PRUint32 *writeCount)
- {
- nsPNGDecoder *decoder = static_cast<nsPNGDecoder*>(closure);
-+ nsresult result;
-
- if (decoder->mError) {
- *writeCount = 0;
-@@ -248,10 +272,24 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
- *writeCount = 0;
- return NS_ERROR_FAILURE;
- }
--
- png_process_data(decoder->mPNG, decoder->mInfo,
- reinterpret_cast<unsigned char *>(const_cast<char *>(fromRawSegment)), count);
-
-+ result = decoder->mImage->AddRestoreData ((char *) fromRawSegment, count);
-+ if (NS_FAILED (result)) {
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: ReadDataOut(): failed to add restore data to image container %p",
-+ decoder->mImage.get ()));
-+
-+ decoder->mError = PR_TRUE;
-+ *writeCount = 0;
-+ return result;
-+ }
-+
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: ReadDataOut(): Added restore data to image container %p",
-+ decoder->mImage.get ()));
-+
- *writeCount = count;
- return NS_OK;
- }
-@@ -525,13 +563,41 @@ info_callback(png_structp png_ptr, png_infop info_ptr)
- if (decoder->mObserver)
- decoder->mObserver->OnStartDecode(nsnull);
-
-- decoder->mImage = do_CreateInstance("@mozilla.org/image/container;1");
-- if (!decoder->mImage)
-- longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
-+ /* The image container may already exist if it is reloading itself from us.
-+ * Check that it has the same width/height; otherwise create a new container.
-+ */
-+ decoder->mImageLoad->GetImage (getter_AddRefs (decoder->mImage));
-+ if (decoder->mImage) {
-+ PRInt32 container_width, container_height;
-+
-+ decoder->mImage->GetWidth (&container_width);
-+ decoder->mImage->GetHeight (&container_height);
-
-- decoder->mImageLoad->SetImage(decoder->mImage);
-+ if (container_width != width || container_height != height)
-+ decoder->mImage = nsnull;
-+ }
-
-- decoder->mImage->Init(width, height, decoder->mObserver);
-+ if (!decoder->mImage) {
-+ decoder->mImage = do_CreateInstance("@mozilla.org/image/container;1");
-+ if (!decoder->mImage)
-+ longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
-+
-+ decoder->mImageLoad->SetImage(decoder->mImage);
-+
-+ decoder->mImage->Init(width, height, decoder->mObserver);
-+
-+ /* FIXME: is this MIME type always right for this decoder? */
-+ if (NS_FAILED (decoder->mImage->SetDiscardable ("image/png"))) {
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: info_callback(): failed to set image container %p as discardable",
-+ decoder->mImage.get ()));
-+ longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
-+ }
-+
-+ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
-+ ("PNGDecoderAccounting: info_callback(): set image container %p as discardable",
-+ decoder->mImage.get ()));
-+ }
-
- if (decoder->mObserver)
- decoder->mObserver->OnStartContainer(nsnull, decoder->mImage);
-@@ -757,7 +823,7 @@ end_callback(png_structp png_ptr, png_infop info_ptr)
- }
-
- decoder->mImage->DecodingComplete();
--
-+
- if (decoder->mObserver) {
- if (!(decoder->apngFlags & FRAME_HIDDEN))
- decoder->mObserver->OnStopFrame(nsnull, decoder->mFrame);
-diff --git modules/libpr0n/public/imgIContainer.idl modules/libpr0n/public/imgIContainer.idl
-index fc42335..524af96 100644
---- modules/libpr0n/public/imgIContainer.idl
-+++ modules/libpr0n/public/imgIContainer.idl
-@@ -22,6 +22,7 @@
- *
- * Contributor(s):
- * Stuart Parmenter <pavlov@netscape.com>
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -144,4 +145,10 @@ interface imgIContainer : nsISupports
- * @note -1 means forever.
- */
- attribute long loopCount;
-+
-+ /* Methods to discard uncompressed images and restore them again */
-+ [noscript] void setDiscardable(in string aMimeType);
-+ [noscript] void addRestoreData(in charPtr aBuffer,
-+ in unsigned long aCount);
-+ [noscript] void restoreDataDone();
- };
-diff --git modules/libpr0n/src/imgContainer.cpp modules/libpr0n/src/imgContainer.cpp
-index 776c4ee..22d8735 100644
---- modules/libpr0n/src/imgContainer.cpp
-+++ modules/libpr0n/src/imgContainer.cpp
-@@ -25,6 +25,7 @@
- * Asko Tontti <atontti@cc.hut.fi>
- * Arron Mogge <paper@animecity.nu>
- * Andrew Smith
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -42,23 +43,49 @@
-
- #include "nsComponentManagerUtils.h"
- #include "imgIContainerObserver.h"
-+#include "ImageErrors.h"
- #include "nsIImage.h"
-+#include "imgILoad.h"
-+#include "imgIDecoder.h"
-+#include "imgIDecoderObserver.h"
- #include "imgContainer.h"
- #include "nsIInterfaceRequestor.h"
- #include "nsIInterfaceRequestorUtils.h"
- #include "nsAutoPtr.h"
-+#include "nsStringStream.h"
-+#include "prmem.h"
-+#include "prlog.h"
-
- #include "gfxContext.h"
-
-+/* Accounting for compressed data */
-+#if defined(PR_LOGGING)
-+static PRLogModuleInfo *gCompressedImageAccountingLog = PR_NewLogModule ("CompressedImageAccounting");
-+#else
-+#define gCompressedImageAccountingLog
-+#endif
-+
-+static int num_containers_with_discardable_data;
-+static PRInt64 num_compressed_image_bytes;
-+
-+
- NS_IMPL_ISUPPORTS3(imgContainer, imgIContainer, nsITimerCallback, nsIProperties)
-
- //******************************************************************************
- imgContainer::imgContainer() :
- mSize(0,0),
-+ mNumFrames(0),
- mAnim(nsnull),
- mAnimationMode(kNormalAnimMode),
- mLoopCount(-1),
-- mObserver(nsnull)
-+ mObserver(nsnull),
-+ mDiscardable(PR_FALSE),
-+ mDiscarded(PR_FALSE),
-+ mDiscardableMimeType(nsnull),
-+ mRestoreData(nsnull),
-+ mRestoreDataLength(0),
-+ mRestoreDataDone(PR_FALSE),
-+ mDiscardTimer(nsnull)
- {
- }
-
-@@ -67,6 +94,32 @@ imgContainer::~imgContainer()
- {
- if (mAnim)
- delete mAnim;
-+
-+ if (mDiscardableMimeType) {
-+ free (mDiscardableMimeType);
-+ mDiscardableMimeType = nsnull;
-+ }
-+
-+ if (mRestoreData) {
-+ PR_Free (mRestoreData);
-+
-+ num_containers_with_discardable_data--;
-+ num_compressed_image_bytes -= mRestoreDataLength;
-+
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: destroying imgContainer %p. "
-+ "Compressed containers: %d, Compressed data bytes: %lld",
-+ this,
-+ num_containers_with_discardable_data,
-+ num_compressed_image_bytes));
-+
-+ mRestoreDataLength = 0;
-+ }
-+
-+ if (mDiscardTimer) {
-+ mDiscardTimer->Cancel ();
-+ mDiscardTimer = nsnull;
-+ }
- }
-
- //******************************************************************************
-@@ -124,15 +177,53 @@ NS_IMETHODIMP imgContainer::GetHeight(PRInt32 *aHeight)
- return NS_OK;
- }
-
-+nsresult imgContainer::GetCurrentFrameNoRef (gfxIImageFrame** aFrame)
-+{
-+ nsresult result;
-+
-+ result = RestoreDiscardedData ();
-+ if (NS_FAILED (result)) {
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: imgContainer::GetCurrentFrameNoRef(): error %d in RestoreDiscardedData(); "
-+ "returning a null frame from imgContainer %p",
-+ result,
-+ this));
-+
-+ *aFrame = nsnull;
-+ return result;
-+ }
-+
-+ if (!mAnim)
-+ *aFrame = mFrames.SafeObjectAt(0);
-+ else if (mAnim->lastCompositedFrameIndex == mAnim->currentAnimationFrameIndex)
-+ *aFrame = mAnim->compositingFrame;
-+ else
-+ *aFrame = mFrames.SafeObjectAt(mAnim->currentAnimationFrameIndex);
-+
-+ if (!*aFrame)
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: imgContainer::GetCurrentFrameNoRef(): returning null frame from imgContainer %p "
-+ "(no errors when restoring data)",
-+ this));
-+
-+ return NS_OK;
-+}
-+
- //******************************************************************************
- /* readonly attribute gfxIImageFrame currentFrame; */
- NS_IMETHODIMP imgContainer::GetCurrentFrame(gfxIImageFrame **aCurrentFrame)
- {
-+ nsresult result;
-+
- NS_ASSERTION(aCurrentFrame, "imgContainer::GetCurrentFrame; Invalid Arg");
- if (!aCurrentFrame)
- return NS_ERROR_INVALID_POINTER;
-
-- if (!(*aCurrentFrame = inlinedGetCurrentFrame()))
-+ result = GetCurrentFrameNoRef (aCurrentFrame);
-+ if (NS_FAILED (result))
-+ return result;
-+
-+ if (!*aCurrentFrame)
- return NS_ERROR_FAILURE;
-
- NS_ADDREF(*aCurrentFrame);
-@@ -148,7 +239,7 @@ NS_IMETHODIMP imgContainer::GetNumFrames(PRUint32 *aNumFrames)
- if (!aNumFrames)
- return NS_ERROR_INVALID_ARG;
-
-- *aNumFrames = mFrames.Count();
-+ *aNumFrames = mNumFrames;
-
- return NS_OK;
- }
-@@ -157,16 +248,24 @@ NS_IMETHODIMP imgContainer::GetNumFrames(PRUint32 *aNumFrames)
- /* gfxIImageFrame getFrameAt (in unsigned long index); */
- NS_IMETHODIMP imgContainer::GetFrameAt(PRUint32 index, gfxIImageFrame **_retval)
- {
-+ nsresult result;
-+
- NS_ASSERTION(_retval, "imgContainer::GetFrameAt; Invalid Arg");
- if (!_retval)
- return NS_ERROR_INVALID_POINTER;
-
-- if (!mFrames.Count()) {
-+ if (mNumFrames == 0) {
- *_retval = nsnull;
- return NS_OK;
- }
-
-- NS_ENSURE_ARG(index < static_cast<PRUint32>(mFrames.Count()));
-+ NS_ENSURE_ARG((int) index < mNumFrames);
-+
-+ result = RestoreDiscardedData ();
-+ if (NS_FAILED (result)) {
-+ *_retval = nsnull;
-+ return result;
-+ }
-
- if (!(*_retval = mFrames[index]))
- return NS_ERROR_FAILURE;
-@@ -183,16 +282,17 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
- NS_ASSERTION(item, "imgContainer::AppendFrame; Invalid Arg");
- if (!item)
- return NS_ERROR_INVALID_ARG;
--
-- PRInt32 numFrames = mFrames.Count();
--
-- if (numFrames == 0) {
-+
-+ if (mFrames.Count () == 0) {
- // This may not be an animated image, don't do all the animation stuff.
- mFrames.AppendObject(item);
-+
-+ mNumFrames++;
-+
- return NS_OK;
- }
-
-- if (numFrames == 1) {
-+ if (mFrames.Count () == 1) {
- // Now that we got a second frame, initialize animation stuff.
- if (!ensureAnimExists())
- return NS_ERROR_OUT_OF_MEMORY;
-@@ -216,11 +316,13 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
- itemRect);
-
- mFrames.AppendObject(item);
-+
-+ mNumFrames++;
-
- // If this is our second frame, start the animation.
- // Must be called after AppendObject because StartAnimation checks for > 1
- // frame
-- if (numFrames == 1)
-+ if (mFrames.Count () == 1)
- StartAnimation();
-
- return NS_OK;
-@@ -230,6 +332,7 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
- /* void removeFrame (in gfxIImageFrame item); */
- NS_IMETHODIMP imgContainer::RemoveFrame(gfxIImageFrame *item)
- {
-+ /* Remember to decrement mNumFrames if you implement this */
- return NS_ERROR_NOT_IMPLEMENTED;
- }
-
-@@ -253,7 +356,7 @@ NS_IMETHODIMP imgContainer::DecodingComplete(void)
- mAnim->doneDecoding = PR_TRUE;
- // If there's only 1 frame, optimize it.
- // Optimizing animated images is not supported
-- if (mFrames.Count() == 1)
-+ if (mNumFrames == 1)
- mFrames[0]->SetMutable(PR_FALSE);
- return NS_OK;
- }
-@@ -292,11 +395,11 @@ NS_IMETHODIMP imgContainer::SetAnimationMode(PRUint16 aAnimationMode)
- break;
- case kNormalAnimMode:
- if (mLoopCount != 0 ||
-- (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mFrames.Count())))
-+ (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mNumFrames)))
- StartAnimation();
- break;
- case kLoopOnceAnimMode:
-- if (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mFrames.Count()))
-+ if (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mNumFrames))
- StartAnimation();
- break;
- }
-@@ -312,12 +415,18 @@ NS_IMETHODIMP imgContainer::StartAnimation()
- (mAnim && (mAnim->timer || mAnim->animating)))
- return NS_OK;
-
-- if (mFrames.Count() > 1) {
-+ if (mNumFrames > 1) {
- if (!ensureAnimExists())
- return NS_ERROR_OUT_OF_MEMORY;
-
- PRInt32 timeout;
-- gfxIImageFrame *currentFrame = inlinedGetCurrentFrame();
-+ nsresult result;
-+ gfxIImageFrame *currentFrame;
-+
-+ result = GetCurrentFrameNoRef (&currentFrame);
-+ if (NS_FAILED (result))
-+ return result;
-+
- if (currentFrame) {
- currentFrame->GetTimeout(&timeout);
- if (timeout <= 0) // -1 means display this frame forever
-@@ -376,8 +485,15 @@ NS_IMETHODIMP imgContainer::ResetAnimation()
- mAnim->currentAnimationFrameIndex = 0;
- // Update display
- nsCOMPtr<imgIContainerObserver> observer(do_QueryReferent(mObserver));
-- if (observer)
-+ if (observer) {
-+ nsresult result;
-+
-+ result = RestoreDiscardedData ();
-+ if (NS_FAILED (result))
-+ return result;
-+
- observer->FrameChanged(this, mFrames[0], &(mAnim->firstFrameRefreshArea));
-+ }
-
- if (oldAnimating)
- return StartAnimation();
-@@ -411,10 +527,161 @@ NS_IMETHODIMP imgContainer::SetLoopCount(PRInt32 aLoopCount)
- return NS_OK;
- }
-
-+static PRBool
-+discarding_is_enabled (void)
-+{
-+ static PRBool inited;
-+ static PRBool enabled;
-+
-+ if (!inited) {
-+ inited = PR_TRUE;
-+
-+ enabled = (getenv ("MOZ_DISABLE_IMAGE_DISCARD") == nsnull);
-+ }
-+
-+ return enabled;
-+}
-+
-+//******************************************************************************
-+/* void setDiscardable(in string mime_type); */
-+NS_IMETHODIMP imgContainer::SetDiscardable (const char* aMimeType)
-+{
-+ NS_ASSERTION(aMimeType, "imgContainer::SetDiscardable() called with null aMimeType");
-+
-+ if (!discarding_is_enabled ())
-+ return NS_OK;
-+
-+ if (mDiscardable) {
-+ NS_WARNING ("imgContainer::SetDiscardable(): cannot change an imgContainer which is already discardable");
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ mDiscardableMimeType = strdup (aMimeType);
-+ if (!mDiscardableMimeType)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+
-+ mDiscardable = PR_TRUE;
-+
-+ num_containers_with_discardable_data++;
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: Making imgContainer %p (%s) discardable. "
-+ "Compressed containers: %d, Compressed data bytes: %lld",
-+ this,
-+ aMimeType,
-+ num_containers_with_discardable_data,
-+ num_compressed_image_bytes));
-+
-+ return NS_OK;
-+}
-+
-+//******************************************************************************
-+/* void addRestoreData(in nsIInputStream aInputStream, in unsigned long aCount); */
-+NS_IMETHODIMP imgContainer::AddRestoreData (char *aBuffer, PRUint32 aCount)
-+{
-+ PRSize new_size;
-+ char *new_buffer;
-+
-+ NS_ASSERTION(aBuffer, "imgContainer::AddRestoreData() called with null aBuffer");
-+
-+ if (!discarding_is_enabled ())
-+ return NS_OK;
-+
-+ if (!mDiscardable) {
-+ NS_WARNING ("imgContainer::AddRestoreData() can only be called if SetDiscardable is called first");
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ if (mRestoreDataDone) {
-+ /* We are being called from the decoder while the data is being restored
-+ * (i.e. we were fully loaded once, then we discarded the image data, then
-+ * we are being restored). We don't want to save the compressed data again,
-+ * since we already have it.
-+ */
-+ return NS_OK;
-+ }
-+
-+ new_size = mRestoreDataLength + aCount;
-+
-+ new_buffer = (char *) PR_Realloc (mRestoreData, new_size);
-+ if (new_buffer)
-+ mRestoreData = new_buffer;
-+ else {
-+ /* Hmm, should we discard the whole buffer? The caller isn't going to be able to recover... */
-+ return NS_ERROR_OUT_OF_MEMORY;
-+ }
-+
-+ memcpy (mRestoreData + mRestoreDataLength, aBuffer, aCount);
-+ mRestoreDataLength = new_size;
-+
-+ num_compressed_image_bytes += aCount;
-+
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: Added compressed data to imgContainer %p (%s). "
-+ "Compressed containers: %d, Compressed data bytes: %lld",
-+ this,
-+ mDiscardableMimeType,
-+ num_containers_with_discardable_data,
-+ num_compressed_image_bytes));
-+
-+ return NS_OK;
-+}
-+
-+/* Note! buf must be declared as char buf[9]; */
-+static void
-+get_header_str (char *buf, char *data, PRSize data_len)
-+{
-+ int i;
-+ int n;
-+ static char hex[] = "0123456789abcdef";
-+
-+ n = data_len < 4 ? data_len : 4;
-+
-+ for (i = 0; i < n; i++) {
-+ buf[i * 2] = hex[(data[i] >> 4) & 0x0f];
-+ buf[i * 2 + 1] = hex[data[i] & 0x0f];
-+ }
-+
-+ buf[i * 2] = 0;
-+}
-+
-+//******************************************************************************
-+/* void restoreDataDone(); */
-+NS_IMETHODIMP imgContainer::RestoreDataDone (void)
-+{
-+ char buf[9];
-+
-+ if (!discarding_is_enabled ())
-+ return NS_OK;
-+
-+ if (mRestoreDataDone)
-+ return NS_OK;
-+
-+ mRestoreDataDone = PR_TRUE;
-+
-+ get_header_str (buf, mRestoreData, mRestoreDataLength);
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: imgContainer::RestoreDataDone() - data is done for container %p (%s), %d real frames (cached as %d frames) - header %p is 0x%s (length %d)",
-+ this,
-+ mDiscardableMimeType,
-+ mFrames.Count (),
-+ mNumFrames,
-+ mRestoreData,
-+ buf,
-+ (int) mRestoreDataLength));
-+
-+ return ResetDiscardTimer ();
-+}
-+
- //******************************************************************************
- /* void notify(in nsITimer timer); */
- NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
- {
-+ nsresult result;
-+
-+ result = RestoreDiscardedData ();
-+ if (NS_FAILED (result))
-+ return result;
-+
- // This should never happen since the timer is only set up in StartAnimation()
- // after mAnim is checked to exist.
- NS_ASSERTION(mAnim, "imgContainer::Notify() called but mAnim is null");
-@@ -433,8 +700,7 @@ NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
- return NS_OK;
- }
-
-- PRInt32 numFrames = mFrames.Count();
-- if (!numFrames)
-+ if (mNumFrames == 0)
- return NS_OK;
-
- gfxIImageFrame *nextFrame = nsnull;
-@@ -448,7 +714,7 @@ NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
- // finished decoding (see EndFrameDecode)
- if (mAnim->doneDecoding ||
- (nextFrameIndex < mAnim->currentDecodingFrameIndex)) {
-- if (numFrames == nextFrameIndex) {
-+ if (mNumFrames == nextFrameIndex) {
- // End of Animation
-
- // If animation mode is "loop once", it's time to stop animating
-@@ -875,3 +1141,328 @@ NS_IMETHODIMP imgContainer::GetKeys(PRUint32 *count, char ***keys)
- }
- return mProperties->GetKeys(count, keys);
- }
-+
-+static int
-+get_discard_timer_ms (void)
-+{
-+ /* FIXME: don't hardcode this */
-+ return 5000; /* 5 seconds */
-+}
-+
-+void
-+imgContainer::sDiscardTimerCallback (nsITimer *aTimer, void *aClosure)
-+{
-+ imgContainer *self = (imgContainer *) aClosure;
-+ int old_frame_count;
-+
-+ NS_ASSERTION (aTimer == self->mDiscardTimer,
-+ "imgContainer::DiscardTimerCallback() got a callback for an unknown timer");
-+
-+ self->mDiscardTimer = nsnull;
-+
-+ old_frame_count = self->mFrames.Count ();
-+
-+ if (self->mAnim) {
-+ delete self->mAnim;
-+ self->mAnim = nsnull;
-+ }
-+
-+ self->mFrames.Clear ();
-+
-+ self->mDiscarded = PR_TRUE;
-+
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: discarded uncompressed image data from imgContainer %p (%s) - %d frames (cached count: %d); "
-+ "Compressed containers: %d, Compressed data bytes: %lld",
-+ self,
-+ self->mDiscardableMimeType,
-+ old_frame_count,
-+ self->mNumFrames,
-+ num_containers_with_discardable_data,
-+ num_compressed_image_bytes));
-+}
-+
-+nsresult
-+imgContainer::ResetDiscardTimer (void)
-+{
-+ if (!discarding_is_enabled ())
-+ return NS_OK;
-+
-+ if (!mDiscardTimer) {
-+ mDiscardTimer = do_CreateInstance("@mozilla.org/timer;1");
-+
-+ if (!mDiscardTimer)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+ } else {
-+ if (NS_FAILED (mDiscardTimer->Cancel ()))
-+ return NS_ERROR_FAILURE;
-+ }
-+
-+ return mDiscardTimer->InitWithFuncCallback (sDiscardTimerCallback,
-+ (void *) this,
-+ get_discard_timer_ms (),
-+ nsITimer::TYPE_ONE_SHOT);
-+}
-+
-+nsresult
-+imgContainer::RestoreDiscardedData (void)
-+{
-+ nsresult result;
-+ int num_expected_frames;
-+
-+ if (!mDiscarded)
-+ return NS_OK;
-+
-+ result = ResetDiscardTimer ();
-+ if (NS_FAILED (result))
-+ return result;
-+
-+ num_expected_frames = mNumFrames;
-+
-+ result = ReloadImages ();
-+ if (NS_FAILED (result)) {
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: imgContainer::RestoreDiscardedData() for container %p failed to ReloadImages()",
-+ this));
-+ return result;
-+ }
-+
-+ mDiscarded = PR_FALSE;
-+
-+ NS_ASSERTION (mNumFrames == mFrames.Count (),
-+ "number of restored image frames doesn't match");
-+ NS_ASSERTION (num_expected_frames == mNumFrames,
-+ "number of restored image frames doesn't match the original number of frames!");
-+
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
-+ ("CompressedImageAccounting: imgContainer::RestoreDiscardedData() restored discarded data "
-+ "for imgContainer %p (%s) - %d image frames. "
-+ "Compressed containers: %d, Compressed data bytes: %lld",
-+ this,
-+ mDiscardableMimeType,
-+ mNumFrames,
-+ num_containers_with_discardable_data,
-+ num_compressed_image_bytes));
-+
-+ return NS_OK;
-+}
-+
-+class ContainerLoader : public imgILoad,
-+ public imgIDecoderObserver,
-+ public nsSupportsWeakReference
-+{
-+public:
-+
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_IMGILOAD
-+ NS_DECL_IMGIDECODEROBSERVER
-+ NS_DECL_IMGICONTAINEROBSERVER
-+
-+ ContainerLoader (void);
-+
-+private:
-+
-+ imgIContainer *mContainer;
-+};
-+
-+NS_IMPL_ISUPPORTS4 (ContainerLoader, imgILoad, imgIDecoderObserver, imgIContainerObserver, nsISupportsWeakReference)
-+
-+ContainerLoader::ContainerLoader (void)
-+{
-+}
-+
-+/* Implement imgILoad::image getter */
-+NS_IMETHODIMP
-+ContainerLoader::GetImage(imgIContainer **aImage)
-+{
-+ *aImage = mContainer;
-+ NS_IF_ADDREF (*aImage);
-+ return NS_OK;
-+}
-+
-+/* Implement imgILoad::image setter */
-+NS_IMETHODIMP
-+ContainerLoader::SetImage(imgIContainer *aImage)
-+{
-+ mContainer = aImage;
-+ return NS_OK;
-+}
-+
-+/* Implement imgILoad::isMultiPartChannel getter */
-+NS_IMETHODIMP
-+ContainerLoader::GetIsMultiPartChannel(PRBool *aIsMultiPartChannel)
-+{
-+ *aIsMultiPartChannel = PR_FALSE; /* FIXME: is this always right? */
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStartRequest() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStartRequest (imgIRequest *aRequest)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStartDecode() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStartDecode (imgIRequest *aRequest)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStartContainer() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStartContainer (imgIRequest *aRequest, imgIContainer *aContainer)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStartFrame() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStartFrame (imgIRequest *aRequest, gfxIImageFrame *aFrame)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onDataAvailable() */
-+NS_IMETHODIMP
-+ContainerLoader::OnDataAvailable (imgIRequest *aRequest, gfxIImageFrame *aFrame, const nsIntRect * aRect)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStopFrame() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStopFrame (imgIRequest *aRequest, gfxIImageFrame *aFrame)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStopContainer() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStopContainer (imgIRequest *aRequest, imgIContainer *aContainer)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStopDecode() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStopDecode (imgIRequest *aRequest, nsresult status, const PRUnichar *statusArg)
-+{
-+ return NS_OK;
-+}
-+
-+/* Implement imgIDecoderObserver::onStopRequest() */
-+NS_IMETHODIMP
-+ContainerLoader::OnStopRequest (imgIRequest *aRequest, PRBool aIsLastPart)
-+{
-+ return NS_OK;
-+}
-+
-+/* implement imgIContainerObserver::frameChanged() */
-+NS_IMETHODIMP
-+ContainerLoader::FrameChanged (imgIContainer *aContainer, gfxIImageFrame *aFrame, nsIntRect * aDirtyRect)
-+{
-+ return NS_OK;
-+}
-+
-+static char *
-+make_id_from_mime_type (char *mime_type)
-+{
-+ const char idbase[] = "@mozilla.org/image/decoder;2?type=";
-+ int idbase_len = strlen (idbase);
-+ char *id;
-+
-+ id = (char *) PR_Malloc (strlen (mime_type) + idbase_len + 1);
-+ if (!id)
-+ return nsnull;
-+
-+ strcpy (id, idbase);
-+ strcpy (id + idbase_len, mime_type);
-+
-+ return id;
-+}
-+
-+nsresult
-+imgContainer::ReloadImages (void)
-+{
-+ char *id;
-+ nsCOMPtr<imgILoad> loader;
-+ nsCOMPtr<imgIDecoder> decoder;
-+ nsresult result;
-+ PRUint32 written;
-+ nsCOMPtr<nsIInputStream> stream;
-+ char buf[9];
-+
-+ NS_ASSERTION (mRestoreData,
-+ "imgContainer::ReloadImages(): mRestoreData should not be null");
-+ NS_ASSERTION (mRestoreDataDone,
-+ "imgContainer::ReloadImages(): mRestoreDataDone shoudl be true!");
-+
-+ id = make_id_from_mime_type (mDiscardableMimeType);
-+ if (!id)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+
-+ mNumFrames = 0;
-+ NS_ASSERTION (mFrames.Count() == 0,
-+ "imgContainer::ReloadImages(): mFrames should be empty");
-+
-+ decoder = do_CreateInstance (id);
-+ PR_Free (id);
-+
-+ if (!decoder) {
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
-+ ("CompressedImageAccounting: imgContainer::ReloadImages() could not create decoder for %s",
-+ mDiscardableMimeType));
-+ return NS_IMAGELIB_ERROR_NO_DECODER;
-+ }
-+
-+ loader = new ContainerLoader ();
-+ if (!loader) {
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
-+ ("CompressedImageAccounting: imgContainer::ReloadImages() could not allocate ContainerLoader "
-+ "when reloading the images for container %p",
-+ this));
-+ return NS_ERROR_OUT_OF_MEMORY;
-+ }
-+
-+ loader->SetImage (this);
-+
-+ result = decoder->Init (loader);
-+ if (NS_FAILED (result)) {
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
-+ ("CompressedImageAccounting: imgContainer::ReloadImages() image container %p "
-+ "failed to initialize the decoder (%s)",
-+ this,
-+ mDiscardableMimeType));
-+ return result;
-+ }
-+
-+ result = NS_NewByteInputStream (getter_AddRefs (stream), mRestoreData, mRestoreDataLength, NS_ASSIGNMENT_DEPEND);
-+ NS_ENSURE_SUCCESS (result, result);
-+
-+ get_header_str (buf, mRestoreData, mRestoreDataLength);
-+ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
-+ ("CompressedImageAccounting: imgContainer::ReloadImages() starting to restore images for container %p (%s) - "
-+ "header %p is 0x%s (length %d)",
-+ this,
-+ mDiscardableMimeType,
-+ mRestoreData,
-+ buf,
-+ (int) mRestoreDataLength));
-+
-+ result = decoder->WriteFrom (stream, mRestoreDataLength, &written);
-+ NS_ENSURE_SUCCESS (result, result);
-+
-+ result = decoder->Flush ();
-+ if (!(result == NS_OK || result == NS_ERROR_NOT_IMPLEMENTED)) /* PNG doesn't implement Flush(), for example */
-+ return result;
-+
-+ result = decoder->Close ();
-+ NS_ENSURE_SUCCESS (result, result);
-+
-+ NS_ASSERTION (mFrames.Count() == mNumFrames,
-+ "imgContainer::ReloadImages(): the restored mFrames.Count() doesn't match mNumFrames!");
-+
-+ return result;
-+}
-diff --git modules/libpr0n/src/imgContainer.h modules/libpr0n/src/imgContainer.h
-index 3db7034..aa56939 100644
---- modules/libpr0n/src/imgContainer.h
-+++ modules/libpr0n/src/imgContainer.h
-@@ -23,6 +23,7 @@
- * Contributor(s):
- * Stuart Parmenter <pavlov@netscape.com>
- * Chris Saari <saari@netscape.com>
-+ * Federico Mena-Quintero <federico@novell.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
-@@ -194,14 +195,8 @@ private:
- timer->Cancel();
- }
- };
--
-- inline gfxIImageFrame* inlinedGetCurrentFrame() {
-- if (!mAnim)
-- return mFrames.SafeObjectAt(0);
-- if (mAnim->lastCompositedFrameIndex == mAnim->currentAnimationFrameIndex)
-- return mAnim->compositingFrame;
-- return mFrames.SafeObjectAt(mAnim->currentAnimationFrameIndex);
-- }
-+
-+ nsresult GetCurrentFrameNoRef(gfxIImageFrame** aFrame);
-
- inline Anim* ensureAnimExists() {
- if (!mAnim)
-@@ -274,10 +269,15 @@ private:
- nsIntSize mSize;
-
- //! All the <gfxIImageFrame>s of the PNG
-+ // *** IMPORTANT: if you use mFrames in a method, call RestoreDiscardedData() first to ensure
-+ // that the frames actually exist (they may have been discarded to save memory).
- nsCOMArray<gfxIImageFrame> mFrames;
-+ int mNumFrames; /* stored separately from mFrames.Count() to support discarded images */
-
- nsCOMPtr<nsIProperties> mProperties;
--
-+
-+ // *** IMPORTANT: if you use mAnim in a method, call RestoreDiscardedData() first to ensure
-+ // that the frames actually exist (they may have been discarded to save memory).
- imgContainer::Anim* mAnim;
-
- //! See imgIContainer for mode constants
-@@ -288,6 +288,19 @@ private:
-
- //! imgIContainerObserver
- nsWeakPtr mObserver;
-+
-+ PRBool mDiscardable;
-+ PRBool mDiscarded;
-+ char* mDiscardableMimeType;
-+ char* mRestoreData;
-+ PRSize mRestoreDataLength;
-+ PRBool mRestoreDataDone;
-+ nsCOMPtr<nsITimer> mDiscardTimer;
-+
-+ nsresult ResetDiscardTimer (void);
-+ nsresult RestoreDiscardedData (void);
-+ nsresult ReloadImages (void);
-+ static void sDiscardTimerCallback (nsITimer *aTimer, void *aClosure);
- };
-
- #endif /* __imgContainer_h__ */
diff --git a/www/firefox3-devel/files/patch-build_unix_run-mozilla.sh b/www/firefox3-devel/files/patch-build_unix_run-mozilla.sh
deleted file mode 100644
index a5295588e..000000000
--- a/www/firefox3-devel/files/patch-build_unix_run-mozilla.sh
+++ /dev/null
@@ -1,12 +0,0 @@
---- build/unix/run-mozilla.sh.orig Tue Feb 14 19:56:54 2006
-+++ build/unix/run-mozilla.sh Fri Dec 8 15:49:48 2006
-@@ -443,6 +443,9 @@
- export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
- export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH
-
-+MOZ_PLUGIN_PATH=%%PREFIX%%/lib/browser_plugins:%%PREFIX%%/lib/browser_linux_plugins
-+export MOZ_PLUGIN_PATH
-+
- if [ $moz_debug -eq 1 ]
- then
- moz_debug_program ${1+"$@"}
diff --git a/www/firefox3-devel/files/patch-config-mkdepend-imakemdep.h b/www/firefox3-devel/files/patch-config-mkdepend-imakemdep.h
deleted file mode 100644
index b688e6644..000000000
--- a/www/firefox3-devel/files/patch-config-mkdepend-imakemdep.h
+++ /dev/null
@@ -1,10 +0,0 @@
---- config/mkdepend/imakemdep.h Fri Sep 4 21:22:25 1998
-+++ config/mkdepend/imakemdep.h Thu Oct 16 22:43:25 2003
-@@ -278,4 +278,7 @@
- "-D__i386__",
- # endif
-+# if defined(__amd64__) || defined(__x86_64__)
-+ "-D__amd64__ -D__x86_64__",
-+# endif
- # ifdef __GNUC__
- "-traditional",
diff --git a/www/firefox3-devel/files/patch-config-rules.mk b/www/firefox3-devel/files/patch-config-rules.mk
deleted file mode 100644
index 8ab35f5a8..000000000
--- a/www/firefox3-devel/files/patch-config-rules.mk
+++ /dev/null
@@ -1,13 +0,0 @@
---- config/rules.mk.orig Thu Sep 14 14:07:03 2006
-+++ config/rules.mk Wed Oct 18 11:00:09 2006
-@@ -442,9 +442,7 @@
- endif
-
- ifeq ($(OS_ARCH),FreeBSD)
--ifdef IS_COMPONENT
--EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
--endif
-+EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic -lc
- endif
-
- ifeq ($(OS_ARCH),NetBSD)
diff --git a/www/firefox3-devel/files/patch-config_autoconf.mk.in b/www/firefox3-devel/files/patch-config_autoconf.mk.in
deleted file mode 100644
index 29fe7f8fb..000000000
--- a/www/firefox3-devel/files/patch-config_autoconf.mk.in
+++ /dev/null
@@ -1,18 +0,0 @@
---- config/autoconf.mk.in.orig Thu Jul 14 00:50:06 2005
-+++ config/autoconf.mk.in Thu Jul 14 00:50:40 2005
-@@ -50,13 +50,13 @@
- prefix = @prefix@
- exec_prefix = @exec_prefix@
- bindir = @bindir@
--includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-+includedir = @includedir@/%%MOZILLA%%
- libdir = @libdir@
- datadir = @datadir@
- mandir = @mandir@
- idldir = @datadir@/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-
--mozappdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
-+mozappdir = $(libdir)/%%MOZILLA%%
- mredir = $(libdir)/mre/mre-$(MOZ_APP_VERSION)
- mrelibdir = $(mredir)/lib
-
diff --git a/www/firefox3-devel/files/patch-config_mkdepend_Makefile.in b/www/firefox3-devel/files/patch-config_mkdepend_Makefile.in
deleted file mode 100644
index bace012a2..000000000
--- a/www/firefox3-devel/files/patch-config_mkdepend_Makefile.in
+++ /dev/null
@@ -1,10 +0,0 @@
---- config/mkdepend/Makefile.in.orig Sun Dec 12 07:36:57 2004
-+++ config/mkdepend/Makefile.in Sun Dec 12 07:37:55 2004
-@@ -57,6 +57,7 @@
- include $(topsrcdir)/config/rules.mk
-
- HOST_CFLAGS += -DINCLUDEDIR=\"/usr/include\" -DOBJSUFFIX=\".$(OBJ_SUFFIX)\"
-+HOST_CFLAGS += $(XCFLAGS)
-
- ifdef GNU_CC
- _GCCDIR = $(shell $(CC) -print-file-name=include)
diff --git a/www/firefox3-devel/files/patch-content_xslt_public_txDouble.h b/www/firefox3-devel/files/patch-content_xslt_public_txDouble.h
deleted file mode 100644
index 534bccba4..000000000
--- a/www/firefox3-devel/files/patch-content_xslt_public_txDouble.h
+++ /dev/null
@@ -1,20 +0,0 @@
---- content/xslt/public/txDouble.h.orig Fri Oct 13 00:00:29 2006
-+++ content/xslt/public/txDouble.h Fri Oct 13 00:00:53 2006
-@@ -41,7 +41,7 @@
- #define __txdouble_h__
-
- //A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
--#ifdef __FreeBSD__
-+/* #ifdef __FreeBSD__
- #include <ieeefp.h>
- #ifdef __alpha__
- fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
-@@ -50,7 +50,7 @@
- #endif
- fp_except_t oldmask = fpsetmask(~allmask);
- #endif
--
-+*/
- /**
- * Macros to workaround math-bugs bugs in various platforms
- */
diff --git a/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp b/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp
deleted file mode 100644
index 41c462d74..000000000
--- a/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
---- extensions/typeaheadfind/src/nsTypeAheadFind.cpp.orig Wed Nov 19 01:20:47 2003
-+++ extensions/typeaheadfind/src/nsTypeAheadFind.cpp Tue Feb 10 02:52:26 2004
-@@ -323,11 +323,11 @@
- prefBranch->GetBoolPref("accessibility.typeaheadfind.startlinksonly",
- &mStartLinksOnlyPref);
-
-- PRBool isSoundEnabled = PR_TRUE;
-+ mIsSoundEnabled = PR_TRUE;
- prefBranch->GetBoolPref("accessibility.typeaheadfind.enablesound",
-- &isSoundEnabled);
-+ &mIsSoundEnabled);
- nsXPIDLCString soundStr;
-- if (isSoundEnabled) {
-+ if (mIsSoundEnabled && mIsSoundEnabled) {
- prefBranch->GetCharPref("accessibility.typeaheadfind.soundURL",
- getter_Copies(soundStr));
- }
-@@ -758,7 +758,7 @@
- }
- else {
- // No find string to backspace in!
-- if (mIsBackspaceProtectOn) {
-+ if (mIsBackspaceProtectOn && mIsSoundEnabled) {
- // This flag should be on only if the last key was a backspace.
- // It keeps us from accidentally hitting backspace too many times and
- // going back in history when we really just wanted to clear
-@@ -1012,7 +1012,9 @@
-
- // Error sound (don't fire when backspace is pressed, they're
- // trying to correct the mistake!)
-- PlayNotFoundSound();
-+ if (mIsSoundEnabled) {
-+ PlayNotFoundSound();
-+ }
-
- // Remove bad character from buffer, so we can continue typing from
- // last matched character
-@@ -1059,7 +1061,7 @@
- void
- nsTypeAheadFind::PlayNotFoundSound()
- {
-- if (mNotFoundSoundURL.IsEmpty()) // no sound
-+ if (mNotFoundSoundURL.IsEmpty() || !mIsSoundEnabled) // no sound
- return;
- if (!mSoundInterface) {
- mSoundInterface = do_CreateInstance("@mozilla.org/sound;1");
diff --git a/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h b/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h
deleted file mode 100644
index 07ad43b43..000000000
--- a/www/firefox3-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h
+++ /dev/null
@@ -1,12 +0,0 @@
---- extensions/typeaheadfind/src/nsTypeAheadFind.h.orig Fri May 23 22:00:33 2003
-+++ extensions/typeaheadfind/src/nsTypeAheadFind.h Mon Feb 9 22:21:43 2004
-@@ -194,6 +194,9 @@
-
- nsCString mNotFoundSoundURL;
-
-+ // Move the sound enabled boolean out for all methods to access.
-+ PRBool mIsSoundEnabled;
-+
- // PRBool's are used instead of PRPackedBool's where the address of the
- // boolean variable is getting passed into a method. For example:
- // GetBoolPref("accessibility.typeaheadfind.linksonly", &mLinksOnlyPref);
diff --git a/www/firefox3-devel/files/patch-js_src_Makefile.in b/www/firefox3-devel/files/patch-js_src_Makefile.in
deleted file mode 100644
index fb0bd7f19..000000000
--- a/www/firefox3-devel/files/patch-js_src_Makefile.in
+++ /dev/null
@@ -1,10 +0,0 @@
---- js/src/Makefile.in.orig Wed Oct 18 09:23:09 2006
-+++ js/src/Makefile.in Wed Oct 18 09:27:27 2006
-@@ -244,6 +244,7 @@
- endif
-
- LDFLAGS += $(pathsubst -l%,$(NSPR_STATIC_PATH)/%.a,$(NSPR_LIBS))
-+LDFLAGS += -lc
-
- # BeOS and HP-UX do not require the extra linking of "-lm"
- ifeq (,$(filter BeOS HP-UX WINNT WINCE OpenVMS,$(OS_ARCH)))
diff --git a/www/firefox3-devel/files/patch-js_src_jsnum.c b/www/firefox3-devel/files/patch-js_src_jsnum.c
deleted file mode 100644
index a3ef2769a..000000000
--- a/www/firefox3-devel/files/patch-js_src_jsnum.c
+++ /dev/null
@@ -1,28 +0,0 @@
---- js/src/jsnum.c.orig Sun Nov 5 18:37:07 2006
-+++ js/src/jsnum.c Sun Nov 5 18:42:31 2006
-@@ -45,6 +45,9 @@
- #if defined(XP_WIN) || defined(XP_OS2)
- #include <float.h>
- #endif
-+#if defined(__FreeBSD__)
-+#include <sys/param.h>
-+#endif
- #include <locale.h>
- #include <limits.h>
- #include <math.h>
-@@ -532,7 +535,15 @@ static jsdouble NaN;
-
- #else
-
-+#if defined(__FreeBSD__) && __FreeBSD_version >= 601000
-+#include <fenv.h>
-+#define FIX_FPU() (fedisableexcept(FE_ALL_EXCEPT))
-+
-+#else
-+
- #define FIX_FPU() ((void)0)
-+
-+#endif /* defined(__FreeBSD__) && __FreeBSD_version >= 503000 */
-
- #endif
-
diff --git a/www/firefox3-devel/files/patch-modules_libpref_src_init_all.js b/www/firefox3-devel/files/patch-modules_libpref_src_init_all.js
deleted file mode 100644
index 1700380a5..000000000
--- a/www/firefox3-devel/files/patch-modules_libpref_src_init_all.js
+++ /dev/null
@@ -1,53 +0,0 @@
---- modules/libpref/src/init/all.js.orig Mon Feb 13 22:58:15 2006
-+++ modules/libpref/src/init/all.js Tue May 2 00:32:55 2006
-@@ -1883,33 +1883,33 @@
-
- // th
-
--pref("font.name.serif.tr", "Times");
--pref("font.name.sans-serif.tr", "Helvetica");
--pref("font.name.monospace.tr", "Courier");
-+pref("font.name.serif.tr", "serif");
-+pref("font.name.sans-serif.tr", "sans-serif");
-+pref("font.name.monospace.tr", "monospace");
-
- pref("font.name.serif.x-baltic", "serif");
- pref("font.name.sans-serif.x-baltic", "sans-serif");
- pref("font.name.monospace.x-baltic", "monospace");
-
--pref("font.name.serif.x-central-euro", "Times");
--pref("font.name.sans-serif.x-central-euro", "Helvetica");
--pref("font.name.monospace.x-central-euro", "Courier");
-+pref("font.name.serif.x-central-euro", "serif");
-+pref("font.name.sans-serif.x-central-euro", "sans-serif");
-+pref("font.name.monospace.x-central-euro", "monospace");
-
- pref("font.name.serif.x-cyrillic", "serif");
- pref("font.name.sans-serif.x-cyrillic", "sans-serif");
- pref("font.name.monospace.x-cyrillic", "monospace");
-
--pref("font.name.serif.x-unicode", "Times");
--pref("font.name.sans-serif.x-unicode", "Helvetica");
--pref("font.name.monospace.x-unicode", "Courier");
--
--pref("font.name.serif.x-user-def", "Times");
--pref("font.name.sans-serif.x-user-def", "Helvetica");
--pref("font.name.monospace.x-user-def", "Courier");
--
--pref("font.name.serif.x-western", "Times");
--pref("font.name.sans-serif.x-western", "Helvetica");
--pref("font.name.monospace.x-western", "Courier");
-+pref("font.name.serif.x-unicode", "serif");
-+pref("font.name.sans-serif.x-unicode", "sans-serif");
-+pref("font.name.monospace.x-unicode", "monospace");
-+
-+pref("font.name.serif.x-user-def", "serif");
-+pref("font.name.sans-serif.x-user-def", "sans-serif");
-+pref("font.name.monospace.x-user-def", "monospace");
-+
-+pref("font.name.serif.x-western", "serif");
-+pref("font.name.sans-serif.x-western", "sans-serif");
-+pref("font.name.monospace.x-western", "monospace");
-
- pref("font.name.serif.zh-CN", "serif");
- pref("font.name.sans-serif.zh-CN", "sans-serif");
diff --git a/www/firefox3-devel/files/patch-security-coreconf-FreeBSD.mk b/www/firefox3-devel/files/patch-security-coreconf-FreeBSD.mk
deleted file mode 100644
index 0f7a04a02..000000000
--- a/www/firefox3-devel/files/patch-security-coreconf-FreeBSD.mk
+++ /dev/null
@@ -1,24 +0,0 @@
---- security/coreconf/FreeBSD.mk.orig Mon Sep 25 18:26:23 2006
-+++ security/coreconf/FreeBSD.mk Mon Sep 25 18:27:03 2006
-@@ -45,8 +45,12 @@
- ifeq ($(OS_TEST),alpha)
- CPU_ARCH = alpha
- else
-+ifeq ($(OS_TEST),amd64)
-+CPU_ARCH = amd64
-+else
- CPU_ARCH = x86
- endif
-+endif
-
- OS_CFLAGS = $(DSO_CFLAGS) -ansi -Wall -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK
-
-@@ -73,7 +77,7 @@
- DLL_SUFFIX = so.1.0
- endif
-
--MKSHLIB = $(CC) $(DSO_LDOPTS)
-+MKSHLIB = $(CC) -Wl,-Bsymbolic -lc $(DSO_LDOPTS) -o $@
- ifdef MAPFILE
- MKSHLIB += -Wl,--version-script,$(MAPFILE)
- endif
diff --git a/www/firefox3-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp b/www/firefox3-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp
deleted file mode 100644
index f30d12229..000000000
--- a/www/firefox3-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
---- security/manager/ssl/src/nsNSSComponent.cpp.orig Mon May 29 23:10:54 2006
-+++ security/manager/ssl/src/nsNSSComponent.cpp Mon May 29 23:12:22 2006
-@@ -110,6 +110,7 @@
- #include "nss.h"
- #include "pk11func.h"
- #include "ssl.h"
-+#define NSS_ENABLE_ECC 1
- #include "sslproto.h"
- #include "secmod.h"
- #include "sechash.h"
diff --git a/www/firefox3-devel/files/patch-storage_build_Makefile.in b/www/firefox3-devel/files/patch-storage_build_Makefile.in
deleted file mode 100644
index 18202a5a6..000000000
--- a/www/firefox3-devel/files/patch-storage_build_Makefile.in
+++ /dev/null
@@ -1,10 +0,0 @@
---- storage/build/Makefile.in.orig Tue Feb 21 11:18:56 2006
-+++ storage/build/Makefile.in Sun Nov 5 16:16:06 2006
-@@ -77,6 +77,7 @@
- $(EXTRA_DSO_LIBS) \
- $(MOZ_COMPONENT_LIBS) \
- $(MOZ_JS_LIBS) \
-+ %%PTHREAD_LIBS%% \
- $(NULL)
-
- include $(topsrcdir)/config/rules.mk
diff --git a/www/firefox3-devel/files/patch-sysnss b/www/firefox3-devel/files/patch-sysnss
deleted file mode 100644
index 6f3d06298..000000000
--- a/www/firefox3-devel/files/patch-sysnss
+++ /dev/null
@@ -1,34 +0,0 @@
---- security/manager/ssl/src/Makefile.in.orig 2007-07-23 15:03:01.000000000 -0400
-+++ security/manager/ssl/src/Makefile.in 2007-09-04 20:47:03.000000000 -0400
-@@ -125,13 +125,11 @@
- pipboot \
- $(NULL)
-
--EXTRA_DEPS = $(NSS_DEP_LIBS)
--
- DEFINES += -DNSS_ENABLE_ECC
-
- # Use local includes because they are inserted before INCLUDES
- # so that Mozilla's nss.h is used, not glibc's
--LOCAL_INCLUDES += $(NSS_CFLAGS)
-+LOCAL_INCLUDES += -I%%LOCALBASE%%/include/nss/nss
-
- ifeq ($(OS_ARCH),Darwin)
- EXTRA_DSO_LDOPTS += \
-@@ -143,6 +141,7 @@
- $(MOZ_COMPONENT_LIBS) \
- $(MOZ_JS_LIBS) \
- $(NSS_LIBS) \
-+ $(LOCAL_INCLUDES) \
- $(NULL)
-
- include $(topsrcdir)/config/rules.mk
---- toolkit/components/url-classifier/src/Makefile.in.orig 2007-09-05 09:00:23.000000000 -0400
-+++ toolkit/components/url-classifier/src/Makefile.in 2007-09-05 09:00:27.000000000 -0400
-@@ -36,6 +36,3 @@
- $(NULL)
-
- include $(topsrcdir)/config/rules.mk
--
--export:: $(topsrcdir)/security/nss/lib/freebl/sha512.c
-- $(INSTALL) $^ .
diff --git a/www/firefox3-devel/files/patch-toolkit_xre_Makefile.in b/www/firefox3-devel/files/patch-toolkit_xre_Makefile.in
deleted file mode 100644
index 4a9c8533a..000000000
--- a/www/firefox3-devel/files/patch-toolkit_xre_Makefile.in
+++ /dev/null
@@ -1,8 +0,0 @@
---- toolkit/xre/Makefile.in.orig 2007-09-10 10:31:53.000000000 -0400
-+++ toolkit/xre/Makefile.in 2007-09-10 10:35:00.000000000 -0400
-@@ -263,5 +263,3 @@
- libs:: platform.ini
- $(INSTALL) $^ $(DIST)/bin
-
--install::
-- $(INSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)
diff --git a/www/firefox3-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp b/www/firefox3-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
deleted file mode 100644
index 7f8e55f53..000000000
--- a/www/firefox3-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
---- uriloader/exthandler/unix/nsGNOMERegistry.cpp.orig Fri Dec 24 04:30:00 2004
-+++ uriloader/exthandler/unix/nsGNOMERegistry.cpp Fri Dec 24 04:34:05 2004
-@@ -143,7 +143,7 @@
- PR_END_MACRO
-
- // Attempt to open libgconf
-- gconfLib = LoadVersionedLibrary("gconf-2", ".4");
-+ gconfLib = PR_LoadLibrary("libgconf-2.so");
- ENSURE_LIB(gconfLib);
-
- GET_LIB_FUNCTION(gconf, gconf_client_get_default);
-@@ -151,7 +151,7 @@
- GET_LIB_FUNCTION(gconf, gconf_client_get_bool);
-
- // Attempt to open libgnome
-- gnomeLib = LoadVersionedLibrary("gnome-2", ".0");
-+ gnomeLib = PR_LoadLibrary("libgnome-2.so");
- ENSURE_LIB(gnomeLib);
-
- GET_LIB_FUNCTION(gnome, gnome_url_show);
-@@ -160,7 +160,7 @@
- GET_LIB_FUNCTION(gnome, gnome_program_get);
-
- // Attempt to open libgnomevfs
-- vfsLib = LoadVersionedLibrary("gnomevfs-2", ".0");
-+ vfsLib = PR_LoadLibrary("libgnomevfs-2.so");
- ENSURE_LIB(vfsLib);
-
- GET_LIB_FUNCTION(vfs, gnome_vfs_mime_type_from_name);
diff --git a/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc b/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc
deleted file mode 100644
index 9a41bbfc4..000000000
--- a/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc
+++ /dev/null
@@ -1,11 +0,0 @@
---- xpcom/reflect/xptcall/public/xptcstubsdecl.inc.orig Tue Mar 16 03:07:25 2004
-+++ xpcom/reflect/xptcall/public/xptcstubsdecl.inc Tue Jun 15 12:52:36 2004
-@@ -8,7 +8,7 @@
- * 1 is AddRef
- * 2 is Release
- */
--#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__))
-+#if !defined(__ia64)
- NS_IMETHOD Stub3();
- NS_IMETHOD Stub4();
- NS_IMETHOD Stub5();
diff --git a/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in b/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in
deleted file mode 100644
index 51edeb95a..000000000
--- a/www/firefox3-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in
+++ /dev/null
@@ -1,54 +0,0 @@
---- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig Thu Aug 14 21:00:23 2003
-+++ xpcom/reflect/xptcall/src/md/unix/Makefile.in Sun Feb 1 15:06:40 2004
-@@ -49,6 +49,9 @@
- ifeq (86,$(findstring 86,$(OS_TEST)))
- CPPSRCS := xptcinvoke_unixish_x86.cpp xptcstubs_unixish_x86.cpp
- endif
-+ifeq (amd64,$(OS_TEST))
-+CPPSRCS := xptcinvoke_x86_64_linux.cpp xptcstubs_x86_64_linux.cpp
-+endif
- endif
- #
- # New code for Linux, et. al., with gcc
-@@ -60,7 +63,7 @@
- endif
- endif
- # IA64 Linux
--ifneq (,$(filter Linux,$(OS_ARCH)))
-+ifneq (,$(filter Linux FreeBSD,$(OS_ARCH)))
- ifneq (,$(findstring ia64,$(OS_TEST)))
- CPPSRCS := xptcinvoke_ipf64.cpp xptcstubs_ipf64.cpp
- ASFILES := xptcstubs_asm_ipf64.s xptcinvoke_asm_ipf64.s
-@@ -106,9 +109,15 @@
- ASFILES := xptcinvoke_asm_osf1_alpha.s xptcstubs_asm_osf1_alpha.s
- endif
- #
-+# FreeBSD/Alpha
-+#
-+ifeq ($(OS_ARCH)$(OS_TEST),FreeBSDalpha)
-+CPPSRCS := xptcinvoke_freebsd_alpha.cpp xptcstubs_freebsd_alpha.cpp
-+endif
-+#
- # Linux/Alpha
- #
--ifneq (,$(filter Linuxalpha FreeBSDalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
-+ifneq (,$(filter Linuxalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
- CPPSRCS := xptcinvoke_linux_alpha.cpp xptcstubs_linux_alpha.cpp
- endif
- #
-@@ -294,6 +303,15 @@
- ifeq ($(OS_ARCH)$(OS_TEST),NetBSDsparc)
- CPPSRCS := xptcinvoke_sparc_netbsd.cpp xptcstubs_sparc_netbsd.cpp
- ASFILES := xptcinvoke_asm_sparc_netbsd.s xptcstubs_asm_sparc_netbsd.s
-+endif
-+#
-+# FreeBSD/SPARC64
-+#
-+ifeq ($(OS_ARCH),FreeBSD)
-+ifneq (,$(findstring sparc,$(OS_TEST)))
-+CPPSRCS := xptcinvoke_sparc64_freebsd.cpp xptcstubs_sparc64_freebsd.cpp
-+ASFILES := xptcinvoke_asm_sparc64_freebsd.s xptcstubs_asm_sparcv9_solaris.s
-+endif
- endif
- #
- # Solaris/SPARC
diff --git a/www/firefox3-devel/files/patch-xptcall-alpha b/www/firefox3-devel/files/patch-xptcall-alpha
deleted file mode 100644
index 29631a98e..000000000
--- a/www/firefox3-devel/files/patch-xptcall-alpha
+++ /dev/null
@@ -1,459 +0,0 @@
---- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp.orig Tue May 27 01:37:25 2003
-+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp Tue May 27 01:37:00 2003
-@@ -0,0 +1,184 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-+/* ***** BEGIN LICENSE BLOCK *****
-+ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
-+ *
-+ * The contents of this file are subject to the Netscape Public License
-+ * Version 1.1 (the "License"); you may not use this file except in
-+ * compliance with the License. You may obtain a copy of the License at
-+ * http://www.mozilla.org/NPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS IS" basis,
-+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-+ * for the specific language governing rights and limitations under the
-+ * License.
-+ *
-+ * The Original Code is mozilla.org code.
-+ *
-+ * The Initial Developer of the Original Code is
-+ * Netscape Communications Corporation.
-+ * Portions created by the Initial Developer are Copyright (C) 1998
-+ * the Initial Developer. All Rights Reserved.
-+ *
-+ * Contributor(s):
-+ *
-+ * Alternatively, the contents of this file may be used under the terms of
-+ * either the GNU General Public License Version 2 or later (the "GPL"), or
-+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-+ * in which case the provisions of the GPL or the LGPL are applicable instead
-+ * of those above. If you wish to allow use of your version of this file only
-+ * under the terms of either the GPL or the LGPL, and not to allow others to
-+ * use your version of this file under the terms of the NPL, indicate your
-+ * decision by deleting the provisions above and replace them with the notice
-+ * and other provisions required by the GPL or the LGPL. If you do not delete
-+ * the provisions above, a recipient may use your version of this file under
-+ * the terms of any one of the NPL, the GPL or the LGPL.
-+ *
-+ * ***** END LICENSE BLOCK ***** */
-+
-+/* Platform specific code to invoke XPCOM methods on native objects */
-+
-+/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
-+
-+#include "xptcprivate.h"
-+
-+/* Prototype specifies unmangled function name and disables unused warning */
-+static void
-+invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
-+__asm__("invoke_copy_to_stack") __attribute__((unused));
-+
-+static void
-+invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
-+{
-+ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
-+
-+ for(PRUint32 i = 0; i < paramCount; i++, d++, s++)
-+ {
-+ if(s->IsPtrData())
-+ {
-+ *d = (PRUint64)s->ptr;
-+ continue;
-+ }
-+ switch(s->type)
-+ {
-+ case nsXPTType::T_I8 : *d = (PRUint64)s->val.i8; break;
-+ case nsXPTType::T_I16 : *d = (PRUint64)s->val.i16; break;
-+ case nsXPTType::T_I32 : *d = (PRUint64)s->val.i32; break;
-+ case nsXPTType::T_I64 : *d = (PRUint64)s->val.i64; break;
-+ case nsXPTType::T_U8 : *d = (PRUint64)s->val.u8; break;
-+ case nsXPTType::T_U16 : *d = (PRUint64)s->val.u16; break;
-+ case nsXPTType::T_U32 : *d = (PRUint64)s->val.u32; break;
-+ case nsXPTType::T_U64 : *d = (PRUint64)s->val.u64; break;
-+ case nsXPTType::T_FLOAT :
-+ if(i < NUM_ARG_REGS)
-+ {
-+ // convert floats to doubles if they are to be passed
-+ // via registers so we can just deal with doubles later
-+ union { PRUint64 u64; double d; } t;
-+ t.d = (double)s->val.f;
-+ *d = t.u64;
-+ }
-+ else
-+ // otherwise copy to stack normally
-+ *d = (PRUint64)s->val.u32;
-+ break;
-+ case nsXPTType::T_DOUBLE : *d = (PRUint64)s->val.u64; break;
-+ case nsXPTType::T_BOOL : *d = (PRUint64)s->val.b; break;
-+ case nsXPTType::T_CHAR : *d = (PRUint64)s->val.c; break;
-+ case nsXPTType::T_WCHAR : *d = (PRUint64)s->val.wc; break;
-+ default:
-+ // all the others are plain pointer types
-+ *d = (PRUint64)s->val.p;
-+ break;
-+ }
-+ }
-+}
-+
-+/*
-+ * XPTC_PUBLIC_API(nsresult)
-+ * XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
-+ * PRUint32 paramCount, nsXPTCVariant* params, void* vt)
-+ */
-+__asm__(
-+ "#### XPTC_InvokeByIndex ####\n"
-+".text\n\t"
-+ ".align 5\n\t"
-+ ".globl XPTC_InvokeByIndex\n\t"
-+ ".ent XPTC_InvokeByIndex\n"
-+"XPTC_InvokeByIndex:\n\t"
-+ ".frame $15,32,$26,0\n\t"
-+ ".mask 0x4008000,-32\n\t"
-+ "ldgp $29,0($27)\n"
-+"$XPTC_InvokeByIndex..ng:\n\t"
-+ "subq $30,32,$30\n\t"
-+ "stq $26,0($30)\n\t"
-+ "stq $15,8($30)\n\t"
-+ "bis $30,$30,$15\n\t"
-+ ".prologue 1\n\t"
-+
-+ /*
-+ * Allocate enough stack space to hold the greater of 6 or "paramCount"+1
-+ * parameters. (+1 for "this" pointer) Room for at least 6 parameters
-+ * is required for storage of those passed via registers.
-+ */
-+
-+ "bis $31,5,$2\n\t" /* count = MAX(5, "paramCount") */
-+ "cmplt $2,$18,$1\n\t"
-+ "cmovne $1,$18,$2\n\t"
-+ "s8addq $2,16,$1\n\t" /* room for count+1 params (8 bytes each) */
-+ "bic $1,15,$1\n\t" /* stack space is rounded up to 0 % 16 */
-+ "subq $30,$1,$30\n\t"
-+
-+ "stq $16,0($30)\n\t" /* save "that" (as "this" pointer) */
-+ "stq $17,16($15)\n\t" /* save "methodIndex" */
-+
-+ "addq $30,8,$16\n\t" /* pass stack pointer */
-+ "bis $18,$18,$17\n\t" /* pass "paramCount" */
-+ "bis $19,$19,$18\n\t" /* pass "params" */
-+ "bsr $26,$invoke_copy_to_stack..ng\n\t" /* call invoke_copy_to_stack */
-+
-+ /*
-+ * Copy the first 6 parameters to registers and remove from stack frame.
-+ * Both the integer and floating point registers are set for each parameter
-+ * except the first which is the "this" pointer. (integer only)
-+ * The floating point registers are all set as doubles since the
-+ * invoke_copy_to_stack function should have converted the floats.
-+ */
-+ "ldq $16,0($30)\n\t" /* integer registers */
-+ "ldq $17,8($30)\n\t"
-+ "ldq $18,16($30)\n\t"
-+ "ldq $19,24($30)\n\t"
-+ "ldq $20,32($30)\n\t"
-+ "ldq $21,40($30)\n\t"
-+ "ldt $f17,8($30)\n\t" /* floating point registers */
-+ "ldt $f18,16($30)\n\t"
-+ "ldt $f19,24($30)\n\t"
-+ "ldt $f20,32($30)\n\t"
-+ "ldt $f21,40($30)\n\t"
-+
-+ "addq $30,48,$30\n\t" /* remove params from stack */
-+
-+ /*
-+ * Call the virtual function with the constructed stack frame.
-+ */
-+ "bis $16,$16,$1\n\t" /* load "this" */
-+ "ldq $2,16($15)\n\t" /* load "methodIndex" */
-+ "ldq $1,0($1)\n\t" /* load vtable */
-+#if 0
-+ "s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */
-+#else
-+ "mulq $2, 8, $2\n\t"
-+ "addq $2, 0, $2\n\t" /* vtable index = "methodIndex" * 16 + 24 */
-+#endif
-+ "addq $1,$2,$1\n\t"
-+ "ldq $27,0($1)\n\t" /* load address of function */
-+ "jsr $26,($27),0\n\t" /* call virtual function */
-+ "ldgp $29,0($26)\n\t"
-+
-+ "bis $15,$15,$30\n\t"
-+ "ldq $26,0($30)\n\t"
-+ "ldq $15,8($30)\n\t"
-+ "addq $30,32,$30\n\t"
-+ "ret $31,($26),1\n\t"
-+ ".end XPTC_InvokeByIndex"
-+ );
-+
---- xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp.orig Tue May 27 01:37:30 2003
-+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp Tue May 27 01:37:04 2003
-@@ -0,0 +1,269 @@
-+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-+/* ***** BEGIN LICENSE BLOCK *****
-+ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
-+ *
-+ * The contents of this file are subject to the Netscape Public License
-+ * Version 1.1 (the "License"); you may not use this file except in
-+ * compliance with the License. You may obtain a copy of the License at
-+ * http://www.mozilla.org/NPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS IS" basis,
-+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-+ * for the specific language governing rights and limitations under the
-+ * License.
-+ *
-+ * The Original Code is mozilla.org code.
-+ *
-+ * The Initial Developer of the Original Code is
-+ * Netscape Communications Corporation.
-+ * Portions created by the Initial Developer are Copyright (C) 1999
-+ * the Initial Developer. All Rights Reserved.
-+ *
-+ * Contributor(s):
-+ *
-+ * Alternatively, the contents of this file may be used under the terms of
-+ * either the GNU General Public License Version 2 or later (the "GPL"), or
-+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-+ * in which case the provisions of the GPL or the LGPL are applicable instead
-+ * of those above. If you wish to allow use of your version of this file only
-+ * under the terms of either the GPL or the LGPL, and not to allow others to
-+ * use your version of this file under the terms of the NPL, indicate your
-+ * decision by deleting the provisions above and replace them with the notice
-+ * and other provisions required by the GPL or the LGPL. If you do not delete
-+ * the provisions above, a recipient may use your version of this file under
-+ * the terms of any one of the NPL, the GPL or the LGPL.
-+ *
-+ * ***** END LICENSE BLOCK ***** */
-+
-+/* Implement shared vtbl methods. */
-+
-+/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
-+
-+#include <sys/types.h>
-+#include <machine/cpu.h>
-+#include "xptcprivate.h"
-+
-+/* Prototype specifies unmangled function name and disables unused warning */
-+static nsresult
-+PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
-+__asm__("PrepareAndDispatch") __attribute__((unused));
-+
-+static nsresult
-+PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
-+{
-+ const PRUint8 PARAM_BUFFER_COUNT = 16;
-+ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
-+
-+ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
-+ nsXPTCMiniVariant* dispatchParams = NULL;
-+ nsIInterfaceInfo* iface_info = NULL;
-+ const nsXPTMethodInfo* info;
-+ PRUint8 paramCount;
-+ PRUint8 i;
-+ nsresult result = NS_ERROR_FAILURE;
-+
-+ NS_ASSERTION(self,"no self");
-+
-+ self->GetInterfaceInfo(&iface_info);
-+ NS_ASSERTION(iface_info,"no interface info");
-+
-+ iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
-+ NS_ASSERTION(info,"no interface info");
-+
-+ paramCount = info->GetParamCount();
-+
-+ // setup variant array pointer
-+ if(paramCount > PARAM_BUFFER_COUNT)
-+ dispatchParams = new nsXPTCMiniVariant[paramCount];
-+ else
-+ dispatchParams = paramBuffer;
-+ NS_ASSERTION(dispatchParams,"no place for params");
-+
-+ // args[0] to args[NUM_ARG_REGS] hold floating point register values
-+ PRUint64* ap = args + NUM_ARG_REGS;
-+ for(i = 0; i < paramCount; i++, ap++)
-+ {
-+ const nsXPTParamInfo& param = info->GetParam(i);
-+ const nsXPTType& type = param.GetType();
-+ nsXPTCMiniVariant* dp = &dispatchParams[i];
-+
-+ if(param.IsOut() || !type.IsArithmetic())
-+ {
-+ dp->val.p = (void*) *ap;
-+ continue;
-+ }
-+ // else
-+ switch(type)
-+ {
-+ case nsXPTType::T_I8 : dp->val.i8 = (PRInt8) *ap; break;
-+ case nsXPTType::T_I16 : dp->val.i16 = (PRInt16) *ap; break;
-+ case nsXPTType::T_I32 : dp->val.i32 = (PRInt32) *ap; break;
-+ case nsXPTType::T_I64 : dp->val.i64 = (PRInt64) *ap; break;
-+ case nsXPTType::T_U8 : dp->val.u8 = (PRUint8) *ap; break;
-+ case nsXPTType::T_U16 : dp->val.u16 = (PRUint16) *ap; break;
-+ case nsXPTType::T_U32 : dp->val.u32 = (PRUint32) *ap; break;
-+ case nsXPTType::T_U64 : dp->val.u64 = (PRUint64) *ap; break;
-+ case nsXPTType::T_FLOAT :
-+ if(i < NUM_ARG_REGS)
-+ {
-+ // floats passed via registers are stored as doubles
-+ // in the first NUM_ARG_REGS entries in args
-+ dp->val.u64 = (PRUint64) args[i];
-+ dp->val.f = (float) dp->val.d; // convert double to float
-+ }
-+ else
-+ dp->val.u32 = (PRUint32) *ap;
-+ break;
-+ case nsXPTType::T_DOUBLE :
-+ // doubles passed via registers are also stored
-+ // in the first NUM_ARG_REGS entries in args
-+ dp->val.u64 = (i < NUM_ARG_REGS) ? args[i] : *ap;
-+ break;
-+ case nsXPTType::T_BOOL : dp->val.b = (PRBool) *ap; break;
-+ case nsXPTType::T_CHAR : dp->val.c = (char) *ap; break;
-+ case nsXPTType::T_WCHAR : dp->val.wc = (PRUnichar) *ap; break;
-+ default:
-+ NS_ASSERTION(0, "bad type");
-+ break;
-+ }
-+ }
-+
-+ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
-+
-+ NS_RELEASE(iface_info);
-+
-+ if(dispatchParams != paramBuffer)
-+ delete [] dispatchParams;
-+
-+ return result;
-+}
-+
-+/*
-+ * SharedStub()
-+ * Collects arguments and calls PrepareAndDispatch. The "methodIndex" is
-+ * passed to this function via $1 to preserve the argument registers.
-+ */
-+__asm__(
-+ "#### SharedStub ####\n"
-+".text\n\t"
-+ ".align 5\n\t"
-+ ".ent SharedStub\n"
-+"SharedStub:\n\t"
-+ ".frame $30,96,$26,0\n\t"
-+ ".mask 0x4000000,-96\n\t"
-+ "ldgp $29,0($27)\n"
-+"$SharedStub..ng:\n\t"
-+ "subq $30,96,$30\n\t"
-+ "stq $26,0($30)\n\t"
-+ ".prologue 1\n\t"
-+
-+ /*
-+ * Store arguments passed via registers to the stack.
-+ * Floating point registers are stored as doubles and converted
-+ * to floats in PrepareAndDispatch if necessary.
-+ */
-+ "stt $f17,16($30)\n\t" /* floating point registers */
-+ "stt $f18,24($30)\n\t"
-+ "stt $f19,32($30)\n\t"
-+ "stt $f20,40($30)\n\t"
-+ "stt $f21,48($30)\n\t"
-+ "stq $17,56($30)\n\t" /* integer registers */
-+ "stq $18,64($30)\n\t"
-+ "stq $19,72($30)\n\t"
-+ "stq $20,80($30)\n\t"
-+ "stq $21,88($30)\n\t"
-+
-+ /*
-+ * Call PrepareAndDispatch function.
-+ */
-+ "bis $1,$1,$17\n\t" /* pass "methodIndex" */
-+ "addq $30,16,$18\n\t" /* pass "args" */
-+ "bsr $26,$PrepareAndDispatch..ng\n\t"
-+
-+ "ldq $26,0($30)\n\t"
-+ "addq $30,96,$30\n\t"
-+ "ret $31,($26),1\n\t"
-+ ".end SharedStub"
-+ );
-+
-+#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
-+/*
-+ * nsresult nsXPTCStubBase::Stub##n()
-+ * Sets register $1 to "methodIndex" and jumps to SharedStub.
-+ */
-+#define STUB_ENTRY(n) \
-+__asm__( \
-+ "#### Stub"#n" ####\n" \
-+".text\n\t" \
-+ ".align 5\n\t" \
-+ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev\n\t" \
-+ ".ent _ZN14nsXPTCStubBase5Stub"#n"Ev\n" \
-+"_ZN14nsXPTCStubBase5Stub"#n"Ev:\n\t" \
-+ ".frame $30,0,$26,0\n\t" \
-+ "ldgp $29,0($27)\n" \
-+"$_ZN14nsXPTCStubBase5Stub"#n"Ev..ng:\n\t" \
-+ ".prologue 1\n\t" \
-+ "lda $1,"#n"\n\t" \
-+ "br $31,$SharedStub..ng\n\t" \
-+ ".end _ZN14nsXPTCStubBase5Stub"#n"Ev" \
-+ ); \
-+__asm__( \
-+ "#### Stub"#n" ####\n" \
-+".text\n\t" \
-+ ".align 5\n\t" \
-+ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev\n\t" \
-+ ".ent _ZN14nsXPTCStubBase6Stub"#n"Ev\n" \
-+"_ZN14nsXPTCStubBase6Stub"#n"Ev:\n\t" \
-+ ".frame $30,0,$26,0\n\t" \
-+ "ldgp $29,0($27)\n" \
-+"$_ZN14nsXPTCStubBase6Stub"#n"Ev..ng:\n\t" \
-+ ".prologue 1\n\t" \
-+ "lda $1,"#n"\n\t" \
-+ "br $31,$SharedStub..ng\n\t" \
-+ ".end _ZN14nsXPTCStubBase6Stub"#n"Ev" \
-+ ); \
-+__asm__( \
-+ "#### Stub"#n" ####\n" \
-+".text\n\t" \
-+ ".align 5\n\t" \
-+ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev\n\t" \
-+ ".ent _ZN14nsXPTCStubBase7Stub"#n"Ev\n" \
-+"_ZN14nsXPTCStubBase7Stub"#n"Ev:\n\t" \
-+ ".frame $30,0,$26,0\n\t" \
-+ "ldgp $29,0($27)\n" \
-+"$_ZN14nsXPTCStubBase7Stub"#n"Ev..ng:\n\t" \
-+ ".prologue 1\n\t" \
-+ "lda $1,"#n"\n\t" \
-+ "br $31,$SharedStub..ng\n\t" \
-+ ".end _ZN14nsXPTCStubBase7Stub"#n"Ev" \
-+ );
-+#else
-+/*
-+ * nsresult nsXPTCStubBase::Stub##n()
-+ * Sets register $1 to "methodIndex" and jumps to SharedStub.
-+ */
-+#define STUB_ENTRY(n) \
-+nsresult nsXPTCStubBase::Stub##n() \
-+{ \
-+ nsresult result; \
-+__asm__ __volatile__( \
-+ "ldah $29,0($27)\n\t" \
-+ "lda $29,0($29)\n\t" \
-+ "lda $1, "#n"\n\t" \
-+ "br $31, $SharedStub..ng\n\t" \
-+ "mov $0, %0\n\t" \
-+ : "=r" (result) \
-+ ); \
-+ return result; \
-+}
-+#endif
-+
-+#define SENTINEL_ENTRY(n) \
-+nsresult nsXPTCStubBase::Sentinel##n() \
-+{ \
-+ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
-+ return NS_ERROR_NOT_IMPLEMENTED; \
-+}
-+
-+#include "xptcstubsdef.inc"
-+
diff --git a/www/firefox3-devel/files/patch-xptcall-sparc64 b/www/firefox3-devel/files/patch-xptcall-sparc64
deleted file mode 100644
index 9599a8a71..000000000
--- a/www/firefox3-devel/files/patch-xptcall-sparc64
+++ /dev/null
@@ -1,327 +0,0 @@
---- /dev/null Mon May 26 13:22:00 2003
-+++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_freebsd.cpp Mon May 26 04:12:55 2003
-@@ -0,0 +1,123 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ *
-+ * The contents of this file are subject to the Mozilla Public
-+ * License Version 1.1 (the "License"); you may not use this file
-+ * except in compliance with the License. You may obtain a copy of
-+ * the License at http://www.mozilla.org/MPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS
-+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+ * implied. See the License for the specific language governing
-+ * rights and limitations under the License.
-+ *
-+ * The Original Code is mozilla.org code.
-+ *
-+ * The Initial Developer of the Original Code is Netscape
-+ * Communications Corporation. Portions created by Netscape are
-+ * Copyright (C) 2001 Netscape Communications Corporation. All
-+ * Rights Reserved.
-+ *
-+ * Contributor(s):
-+ * Stuart Parmenter <pavlov@netscape.com>
-+ */
-+
-+/* Implement shared vtbl methods. */
-+
-+#include "xptcprivate.h"
-+
-+#if defined(sparc) || defined(__sparc__)
-+
-+extern "C" nsresult
-+PrepareAndDispatch(nsXPTCStubBase* self, PRUint64 methodIndex, PRUint64* args)
-+{
-+
-+#define PARAM_BUFFER_COUNT 16
-+
-+ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
-+ nsXPTCMiniVariant* dispatchParams = NULL;
-+ nsIInterfaceInfo* iface_info = NULL;
-+ const nsXPTMethodInfo* info;
-+ PRUint8 paramCount;
-+ PRUint8 i;
-+ nsresult result = NS_ERROR_FAILURE;
-+
-+ NS_ASSERTION(self,"no self");
-+
-+ self->GetInterfaceInfo(&iface_info);
-+ NS_ASSERTION(iface_info,"no interface info");
-+
-+ iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
-+ NS_ASSERTION(info,"no interface info");
-+
-+ paramCount = info->GetParamCount();
-+
-+ // setup variant array pointer
-+ if(paramCount > PARAM_BUFFER_COUNT)
-+ dispatchParams = new nsXPTCMiniVariant[paramCount];
-+ else
-+ dispatchParams = paramBuffer;
-+ NS_ASSERTION(dispatchParams,"no place for params");
-+
-+ PRUint64* ap = args;
-+ for(i = 0; i < paramCount; i++, ap++)
-+ {
-+ const nsXPTParamInfo& param = info->GetParam(i);
-+ const nsXPTType& type = param.GetType();
-+ nsXPTCMiniVariant* dp = &dispatchParams[i];
-+
-+ if(param.IsOut() || !type.IsArithmetic())
-+ {
-+ dp->val.p = (void*) *ap;
-+ continue;
-+ }
-+ // else
-+ switch(type)
-+ {
-+ case nsXPTType::T_I8 : dp->val.i8 = *((PRInt64*) ap); break;
-+ case nsXPTType::T_I16 : dp->val.i16 = *((PRInt64*) ap); break;
-+ case nsXPTType::T_I32 : dp->val.i32 = *((PRInt64*) ap); break;
-+ case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); break;
-+ case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) ap); break;
-+ case nsXPTType::T_I64 : dp->val.i64 = *((PRInt64*) ap); break;
-+ case nsXPTType::T_U8 : dp->val.u8 = *((PRUint64*) ap); break;
-+ case nsXPTType::T_U16 : dp->val.u16 = *((PRUint64*)ap); break;
-+ case nsXPTType::T_U32 : dp->val.u32 = *((PRUint64*)ap); break;
-+ case nsXPTType::T_FLOAT : dp->val.f = ((float*) ap)[1]; break;
-+ case nsXPTType::T_BOOL : dp->val.b = *((PRInt64*) ap); break;
-+ case nsXPTType::T_CHAR : dp->val.c = *((PRUint64*) ap); break;
-+ case nsXPTType::T_WCHAR : dp->val.wc = *((PRInt64*) ap); break;
-+ default:
-+ NS_ASSERTION(0, "bad type");
-+ break;
-+ }
-+ }
-+
-+ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
-+
-+ NS_RELEASE(iface_info);
-+
-+ if(dispatchParams != paramBuffer)
-+ delete [] dispatchParams;
-+
-+ return result;
-+}
-+
-+extern "C" int SharedStub(int, int*);
-+
-+#define STUB_ENTRY(n) \
-+nsresult nsXPTCStubBase::Stub##n() \
-+{ \
-+ int dummy; /* defeat tail-call optimization */ \
-+ return SharedStub(n, &dummy); \
-+}
-+
-+#define SENTINEL_ENTRY(n) \
-+nsresult nsXPTCStubBase::Sentinel##n() \
-+{ \
-+ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
-+ return NS_ERROR_NOT_IMPLEMENTED; \
-+}
-+
-+#include "xptcstubsdef.inc"
-+
-+#endif /* sparc || __sparc__ */
---- /dev/null Mon May 26 13:22:00 2003
-+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc64_freebsd.s Mon May 26 04:06:09 2003
-@@ -0,0 +1,104 @@
-+/* -*- Mode: asm; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ *
-+ * The contents of this file are subject to the Mozilla Public
-+ * License Version 1.1 (the "License"); you may not use this file
-+ * except in compliance with the License. You may obtain a copy of
-+ * the License at http://www.mozilla.org/MPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS
-+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+ * implied. See the License for the specific language governing
-+ * rights and limitations under the License.
-+ *
-+ * The Original Code is mozilla.org code.
-+ *
-+ * The Initial Developer of the Original Code is Netscape
-+ * Communications Corporation. Portions created by Netscape are
-+ * Copyright (C) 2001 Netscape Communications Corporation. All
-+ * Rights Reserved.
-+ *
-+ * Contributor(s):
-+ * Stuart Parmenter <pavlov@netscape.com>
-+ * Chris Seawood <cls@seawood.org>
-+ */
-+
-+/*
-+ Platform specific code to invoke XPCOM methods on native objects
-+ for sparcv9 Solaris.
-+
-+ See the SPARC Compliance Definition (SCD) Chapter 3
-+ for more information about what is going on here, including
-+ the use of BIAS (0x7ff).
-+ The SCD is available from http://www.sparc.com/.
-+*/
-+
-+ .global XPTC_InvokeByIndex
-+ .type XPTC_InvokeByIndex, #function
-+
-+/*
-+ XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
-+ PRUint32 paramCount, nsXPTCVariant* params);
-+
-+*/
-+XPTC_InvokeByIndex:
-+ save %sp,-(128 + 64),%sp ! room for the register window and
-+ ! struct pointer, rounded up to 0 % 64
-+ sll %i2,4,%l0 ! assume the worst case
-+ ! paramCount * 2 * 8 bytes
-+ cmp %l0, 0 ! are there any args? If not,
-+ be .invoke ! no need to copy args to stack
-+ nop
-+
-+ sub %sp,%l0,%sp ! create the additional stack space
-+ add %sp,0x7ff+136,%o0 ! step past the register window, the
-+ ! struct result pointer and the 'this' slot
-+ mov %i2,%o1 ! paramCount
-+ call invoke_copy_to_stack
-+ mov %i3,%o2 ! params
-+
-+!
-+! load arguments from stack into the outgoing registers
-+! BIAS is 0x7ff (2047)
-+!
-+
-+! load the %o1..5 64bit (extended word) output registers registers
-+ ldx [%sp + 0x7ff + 136],%o1 ! %i1
-+ ldx [%sp + 0x7ff + 144],%o2 ! %i2
-+ ldx [%sp + 0x7ff + 152],%o3 ! %i3
-+ ldx [%sp + 0x7ff + 160],%o4 ! %i4
-+ ldx [%sp + 0x7ff + 168],%o5 ! %i5
-+
-+! load the even number double registers starting with %d2
-+ ldd [%sp + 0x7ff + 136],%f2
-+ ldd [%sp + 0x7ff + 144],%f4
-+ ldd [%sp + 0x7ff + 152],%f6
-+ ldd [%sp + 0x7ff + 160],%f8
-+ ldd [%sp + 0x7ff + 168],%f10
-+ ldd [%sp + 0x7ff + 176],%f12
-+ ldd [%sp + 0x7ff + 184],%f14
-+ ldd [%sp + 0x7ff + 192],%f16
-+ ldd [%sp + 0x7ff + 200],%f18
-+ ldd [%sp + 0x7ff + 208],%f20
-+ ldd [%sp + 0x7ff + 216],%f22
-+ ldd [%sp + 0x7ff + 224],%f24
-+ ldd [%sp + 0x7ff + 232],%f26
-+ ldd [%sp + 0x7ff + 240],%f28
-+ ldd [%sp + 0x7ff + 248],%f30
-+
-+!
-+! calculate the target address from the vtable
-+!
-+.invoke:
-+ sll %i1,3,%l0 ! index *= 8
-+! add %l0,16,%l0 ! there are 2 extra entries in the vTable (16bytes)
-+ ldx [%i0],%l1 ! *that --> address of vtable
-+ ldx [%l0 + %l1],%l0 ! that->vtable[index * 8 + 16] --> address
-+
-+ jmpl %l0,%o7 ! call the routine
-+ mov %i0,%o0 ! move 'this' pointer to out register
-+
-+ mov %o0,%i0 ! propagate return value
-+ ret
-+ restore
-+
-+ .size XPTC_InvokeByIndex, .-XPTC_InvokeByIndex
---- /dev/null Mon May 26 14:00:00 2003
-+++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_sparc64_freebsd.cpp Mon May 26 14:00:49 2003
-@@ -0,0 +1,91 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
-+ *
-+ * The contents of this file are subject to the Mozilla Public
-+ * License Version 1.1 (the "License"); you may not use this file
-+ * except in compliance with the License. You may obtain a copy of
-+ * the License at http://www.mozilla.org/MPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS
-+ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+ * implied. See the License for the specific language governing
-+ * rights and limitations under the License.
-+ *
-+ * The Original Code is mozilla.org code.
-+ *
-+ * The Initial Developer of the Original Code is Netscape
-+ * Communications Corporation. Portions created by Netscape are
-+ * Copyright (C) 2001 Netscape Communications Corporation. All
-+ * Rights Reserved.
-+ *
-+ * Contributor(s):
-+ * Stuart Parmenter <pavlov@netscape.com>
-+ * Chris Seawood <cls@seawood.org>
-+ */
-+
-+
-+/* Platform specific code to invoke XPCOM methods on native objects */
-+
-+#include "xptcprivate.h"
-+
-+#if !defined(__sparc) && !defined(__sparc__)
-+#error "This code is for Sparc only"
-+#endif
-+
-+/* Prototype specifies unmangled function name */
-+extern "C" PRUint64
-+invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s);
-+
-+extern "C" PRUint64
-+invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
-+{
-+ /*
-+ We need to copy the parameters for this function to locals and use them
-+ from there since the parameters occupy the same stack space as the stack
-+ we're trying to populate.
-+ */
-+ PRUint64 *l_d = d;
-+ nsXPTCVariant *l_s = s;
-+ PRUint64 l_paramCount = paramCount;
-+ PRUint64 regCount = 0; // return the number of registers to load from the stack
-+
-+ for(PRUint64 i = 0; i < l_paramCount; i++, l_d++, l_s++)
-+ {
-+ if (regCount < 5) regCount++;
-+
-+ if (l_s->IsPtrData())
-+ {
-+ *l_d = (PRUint64)l_s->ptr;
-+ continue;
-+ }
-+ switch (l_s->type)
-+ {
-+ case nsXPTType::T_I8 : *((PRInt64*)l_d) = l_s->val.i8; break;
-+ case nsXPTType::T_I16 : *((PRInt64*)l_d) = l_s->val.i16; break;
-+ case nsXPTType::T_I32 : *((PRInt64*)l_d) = l_s->val.i32; break;
-+ case nsXPTType::T_I64 : *((PRInt64*)l_d) = l_s->val.i64; break;
-+
-+ case nsXPTType::T_U8 : *((PRUint64*)l_d) = l_s->val.u8; break;
-+ case nsXPTType::T_U16 : *((PRUint64*)l_d) = l_s->val.u16; break;
-+ case nsXPTType::T_U32 : *((PRUint64*)l_d) = l_s->val.u32; break;
-+ case nsXPTType::T_U64 : *((PRUint64*)l_d) = l_s->val.u64; break;
-+
-+ /* in the case of floats, we want to put the bits in to the
-+ 64bit space right justified... floats in the paramter array on
-+ sparcv9 use odd numbered registers.. %f1, %f3, so we have to skip
-+ the space that would be occupied by %f0, %f2, etc.
-+ */
-+ case nsXPTType::T_FLOAT : *(((float*)l_d) + 1) = l_s->val.f; break;
-+ case nsXPTType::T_DOUBLE: *((double*)l_d) = l_s->val.d; break;
-+ case nsXPTType::T_BOOL : *((PRInt64*)l_d) = l_s->val.b; break;
-+ case nsXPTType::T_CHAR : *((PRUint64*)l_d) = l_s->val.c; break;
-+ case nsXPTType::T_WCHAR : *((PRInt64*)l_d) = l_s->val.wc; break;
-+
-+ default:
-+ // all the others are plain pointer types
-+ *((void**)l_d) = l_s->val.p;
-+ break;
-+ }
-+ }
-+
-+ return regCount;
-+}