aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Mk/Uses/gecko.mk4
-rw-r--r--Mk/bsd.gecko.mk116
-rw-r--r--UPDATING8
-rw-r--r--devel/nspr/Makefile2
-rw-r--r--devel/nspr/distinfo4
-rw-r--r--mail/linux-thunderbird/Makefile5
-rw-r--r--mail/linux-thunderbird/distinfo4
-rw-r--r--mail/thunderbird-i18n/Makefile2
-rw-r--r--mail/thunderbird-i18n/distinfo220
-rw-r--r--mail/thunderbird/Makefile58
-rw-r--r--mail/thunderbird/distinfo4
-rw-r--r--mail/thunderbird/files/patch-bug101367589
-rw-r--r--mail/thunderbird/files/patch-bug101554794
-rw-r--r--mail/thunderbird/files/patch-bug91658917
-rw-r--r--mail/thunderbird/files/patch-zz-bug51742223
-rw-r--r--security/ca_root_nss/Makefile2
-rw-r--r--security/ca_root_nss/distinfo4
-rw-r--r--security/nss/Makefile2
-rw-r--r--security/nss/distinfo4
-rw-r--r--www/firefox-esr-i18n/Makefile2
-rw-r--r--www/firefox-esr-i18n/distinfo356
-rw-r--r--www/firefox-esr/Makefile18
-rw-r--r--www/firefox-esr/distinfo4
-rw-r--r--www/firefox-esr/files/patch-bug101367589
-rw-r--r--www/firefox-esr/files/patch-bug101554794
-rw-r--r--www/firefox-esr/files/patch-bug91658917
-rw-r--r--www/firefox-esr/files/patch-zz-bug51742223
-rw-r--r--www/firefox-i18n/Makefile4
-rw-r--r--www/firefox-i18n/distinfo346
-rw-r--r--www/firefox/Makefile24
-rw-r--r--www/firefox/distinfo4
-rw-r--r--www/firefox/files/patch-bug101367588
-rw-r--r--www/firefox/files/patch-bug101388214
-rw-r--r--www/firefox/files/patch-bug101554795
-rw-r--r--www/firefox/files/patch-bug78346311
-rw-r--r--www/firefox/files/patch-bug8069171999
-rw-r--r--www/firefox/files/patch-bug84756825
-rw-r--r--www/firefox/files/patch-bug91658917
-rw-r--r--www/firefox/files/patch-bug97374438
-rw-r--r--www/firefox/files/patch-bug97539773
-rw-r--r--www/firefox/files/patch-bug97563463
-rw-r--r--www/firefox/files/patch-bug97745727
-rw-r--r--www/firefox/files/patch-bug98134841
-rw-r--r--www/firefox/files/patch-bug98584822
-rw-r--r--www/firefox/files/patch-bug98911210
-rw-r--r--www/firefox/files/patch-clang34-disable-stdcall4
-rw-r--r--www/firefox/files/patch-ipc-chromium-Makefile.in18
-rw-r--r--www/firefox/files/patch-ipc-chromium-src-base-message_pump_libevent.cc11
-rw-r--r--www/firefox/files/patch-z-bug517422105
-rw-r--r--www/libxul/Makefile8
-rw-r--r--www/libxul/distinfo4
-rw-r--r--www/libxul/files/patch-bug101367589
-rw-r--r--www/libxul/files/patch-bug101554794
-rw-r--r--www/libxul/files/patch-bug91658917
-rw-r--r--www/libxul/files/patch-zz-bug51742223
-rw-r--r--www/linux-firefox/Makefile5
-rw-r--r--www/linux-firefox/distinfo4
-rw-r--r--www/linux-seamonkey/Makefile2
-rw-r--r--www/seamonkey/Makefile46
-rw-r--r--www/seamonkey/files/patch-bug101367588
-rw-r--r--www/seamonkey/files/patch-bug101554795
-rw-r--r--www/seamonkey/files/patch-bug91658917
-rw-r--r--www/seamonkey/files/patch-bug97539773
-rw-r--r--www/seamonkey/files/patch-z-bug51742223
64 files changed, 1881 insertions, 3011 deletions
diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk
index 33382930788b..60261709938c 100644
--- a/Mk/Uses/gecko.mk
+++ b/Mk/Uses/gecko.mk
@@ -39,12 +39,12 @@ RUN_DEPENDS+= libxul>=24:${PORTSDIR}/www/libxul
.elif ${_GECKO_ARGS:Mfirefox}
_GECKO_DEFAULT_VERSION= 24
-_GECKO_VERSIONS= 24 29
+_GECKO_VERSIONS= 24 30
_GECKO_TYPE= firefox
# Dependence lines for different Firefox versions
24_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr
-29_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
+30_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
.if exists(${LOCALBASE}/bin/firefox)
_GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null
diff --git a/Mk/bsd.gecko.mk b/Mk/bsd.gecko.mk
index e69fe468370f..728112584fb9 100644
--- a/Mk/bsd.gecko.mk
+++ b/Mk/bsd.gecko.mk
@@ -36,10 +36,6 @@ Gecko_Pre_Include= bsd.gecko.mk
# dependencies. Experimental deps use '+' like
# 'USE_MOZILLA= +speex +theora'.
#
-# GECKO_PLIST_PRE_FILES Manual add files in the plist if it needs.
-#
-# GECKO_PLIST_PRE_DIRS Manual directories in the plist if it needs.
-#
# MOZILLA_PLIST_DIRS List of directories to descend into when installing
# and creating the plist
#
@@ -77,11 +73,6 @@ Gecko_Pre_Include= bsd.gecko.mk
# PORT_MOZCONFIG Defaults to ${FILESDIR}/mozconfig.in, but can be
# set to a generic mozconfig included with the port
#
-# NOGECKO_INSTALL Don't install the built gecko (most likely for
-# testing)
-#
-# NOGECKO_PLIST Don't create a dynamically-generated playlist
-#
# NOMOZCONFIG Don't drop a customized .mozconfig into the build
# directory. Options will have to be specified in
# CONFIGURE_ARGS instead
@@ -94,18 +85,13 @@ MOZILLA_VER?= ${PORTVERSION}
MOZILLA_BIN?= ${PORTNAME}-bin
MOZILLA_EXEC_NAME?=${MOZILLA}
MOZ_RPATH?= ${MOZILLA}
-USE_GNOME+= desktopfileutils
-USES+= compiler:c++11-lib gmake iconv perl5 pkgconfig
+USES+= compiler:c++11-lib gmake iconv perl5 pkgconfig desktop-file-utils
USE_PERL5= build
USE_XORG= xext xrender xt
-NO_STAGE= yes
-
MOZILLA_SUFX?= none
MOZSRC?= ${WRKSRC}
WRKSRC?= ${WRKDIR}/mozilla
-FAKEDIR?= ${WRKDIR}/fake
-PLIST?= ${WRKDIR}/plist
PLISTD?= ${WRKDIR}/plist_dirs
PLISTF?= ${WRKDIR}/plist_files
@@ -129,7 +115,7 @@ MOZ_PKGCONFIG_FILES?= ${MOZILLA}-gtkmozembed ${MOZILLA}-js \
MOZ_EXPORT+= ${CONFIGURE_ENV} \
LIBS="${LIBS}" PERL="${PERL}"
-MOZ_OPTIONS+= --prefix="${FAKEDIR}"
+MOZ_OPTIONS+= --prefix="${PREFIX}"
CPPFLAGS+= -isystem${LOCALBASE}/include
LDFLAGS+= -L${LOCALBASE}/lib -Wl,-rpath,${PREFIX}/lib/${MOZILLA}
@@ -299,6 +285,9 @@ USE_QT4+= qmake_build moc_build rcc_build gui network opengl
MOZ_EXPORT+= HOST_QMAKE="${QMAKE}" HOST_MOC="${MOC}" HOST_RCC="${RCC}"
.elif ${MOZ_TOOLKIT:Mcairo-gtk3}
USE_GNOME+= gtk30
+. if ${MOZILLA_VER:R:R} >= 32
+USE_GNOME+= gtk20 # bug 624422
+. endif
.else # gtk2, cairo-gtk2
USE_GNOME+= gtk20
.endif
@@ -321,7 +310,7 @@ MOZ_OPTIONS+= --disable-dbus --disable-libnotify
.endif
.if ${PORT_OPTIONS:MGSTREAMER}
-. if ${MOZILLA_VER:R:R} >= 30 || exists(${FILESDIR}/patch-bug806917)
+. if ${MOZILLA_VER:R:R} >= 30 || ${MOZILLA} == "seamonkey"
USE_GSTREAMER1?=good libav
MOZ_OPTIONS+= --enable-gstreamer=1.0
. else
@@ -436,7 +425,6 @@ MOZ_SED_ARGS+= -e's|@CPPFLAGS@|${CPPFLAGS}|g' \
-e 's|@LDFLAGS@|${LDFLAGS}|g' \
-e 's|@LIBS@|${LIBS}|g' \
-e 's|@LOCALBASE@|${LOCALBASE}|g' \
- -e 's|@FAKEDIR@|${FAKEDIR}|g' \
-e 's|@PERL@|${PERL5}|g' \
-e 's|@MOZDIR@|${PREFIX}/lib/${MOZILLA}|g' \
-e 's|%%PREFIX%%|${PREFIX}|g' \
@@ -444,7 +432,6 @@ MOZ_SED_ARGS+= -e's|@CPPFLAGS@|${CPPFLAGS}|g' \
-e 's|%%LDFLAGS%%|${LDFLAGS}|g' \
-e 's|%%LIBS%%|${LIBS}|g' \
-e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
- -e 's|%%FAKEDIR%%|${FAKEDIR}|g' \
-e 's|%%PERL%%|${PERL5}|g' \
-e 's|%%MOZILLA%%|${MOZILLA}|g' \
-e 's|%%MOZILLA_BIN%%|${MOZILLA_BIN}|g' \
@@ -602,103 +589,36 @@ post-configure: gecko-post-configure
gecko-post-configure:
@${ECHO_CMD} "#define JNIIMPORT" >> ${MOZSRC}/mozilla-config.h
-pre-install: gecko-moz-pis-pre-install gecko-pre-install port-pre-install gecko-create-plist
+pre-install: gecko-moz-pis-pre-install
+post-install-script: gecko-create-plist
-.if !target(port-pre-install)
-port-pre-install:
- @${DO_NADA}
-.endif
+gecko-create-plist: port-post-install
-gecko-pre-install:
-.if !defined(NOGECKO_PLIST)
- @${RM} -rf ${FAKEDIR} ${PLIST} ${PLISTD} ${PLISTF}
- @${TOUCH} -f ${PLIST} ${PLISTD} ${PLISTF}
- @cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
- ${MAKEFILE} ${MAKE_ARGS} prefix=${FAKEDIR} ${INSTALL_TARGET}
-.if defined(MOZILLA_SUFX) && ${MOZILLA_SUFX}!="none"
- ${MV} ${FAKEDIR}/bin/${MOZILLA_EXEC_NAME:S/${MOZILLA_SUFX}//} ${FAKEDIR}/bin/${MOZILLA}
-.if exists(${FAKEDIR}/bin/${MOZILLA_EXEC_NAME:S/${MOZILLA_SUFX}//}-config)
- ${MV} ${FAKEDIR}/bin/${MOZILLA_EXEC_NAME:S/${MOZILLA_SUFX}//}-config ${FAKEDIR}/bin/${MOZILLA}-config
-.endif
-.for pc in ${MOZ_PKGCONFIG_FILES:S|${MOZILLA_SUFX}||}
- ${SED} -e 's|Requires: ${MOZILLA:S/${MOZILLA_SUFX}//}|Requires: ${MOZILLA}|' \
- ${FAKEDIR}/lib/pkgconfig/${pc}.pc > ${FAKEDIR}/lib/pkgconfig/${pc:S/${MOZILLA:S,${MOZILLA_SUFX},,}/${MOZILLA}/}.pc
-.endfor
- @${REINPLACE_CMD} -e 's|${MOZILLA_BIN}|${MOZILLA:S/${MOZILLA_SUFX}//}|; \
- s|$${progbase}-bin|${MOZILLA:S/${MOZILLA_SUFX}//}-bin|' \
- -e 's|${FAKEDIR}|${PREFIX}|g' \
- -i '' $$(${REALPATH} ${FAKEDIR}/bin/${MOZILLA}*)
-.else
- @${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
- -i '' $$(${REALPATH} ${FAKEDIR}/bin/${MOZILLA_EXEC_NAME}*)
-.endif
+.if !target(port-post-install)
+port-post-install:
+ @${DO_NADA}
.endif
gecko-create-plist:
-.if !defined(NOGECKO_PLIST)
# Create the plist
-.for f in ${GECKO_PLIST_PRE_FILES}
- ${ECHO_CMD} ${f} >> ${PLISTF}
-.endfor
-.for f in ${GECKO_PLIST_PRE_DIRS}
- ${ECHO_CMD} "@dirrm ${f}" >> ${PLISTD}
-.endfor
- ${MKDIR} ${FAKEDIR}/libdata
- ${MV} -f ${FAKEDIR}/lib/pkgconfig ${FAKEDIR}/libdata/ || ${TRUE}
- ${RM} -f ${FAKEDIR}/lib/pkgconfig
+ ${RM} -f ${PLISTF} ${PLISTD}
.for dir in ${MOZILLA_PLIST_DIRS}
- @cd ${FAKEDIR}/${dir} && ${FIND} -H -s * ! -type d | \
+ @cd ${STAGEDIR}${PREFIX}/${dir} && ${FIND} -H -s * ! -type d | \
${SED} -e 's|^|${dir}/|' >> ${PLISTF} && \
${FIND} -d * -type d | \
${SED} -e 's|^|@dirrm ${dir}/|' >> ${PLISTD}
.endfor
-.for pcfile in ${MOZ_PKGCONFIG_FILES}
- ${ECHO_CMD} "libdata/pkgconfig/${pcfile}.pc" >> ${PLISTF}
- @${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
- -e 's|${MOZILLA}-nspr = ${PORTVERSION}|nspr|' \
- ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc
-.endfor
- ${CAT} ${PLISTF} | ${SORT} >> ${PLIST}
- ${CAT} ${PLISTD} | ${SORT} -r >> ${PLIST}
- ${ECHO_CMD} "@exec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
- ${ECHO_CMD} "@unexec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
-.endif # !defined(NOGECKO_PLIST)
-
-do-install: gecko-do-install
-
-gecko-do-install:
-.if !defined(NOGECKO_INSTALL)
-.for dir in ${MOZILLA_PLIST_DIRS}
-.if !exists(${PREFIX}/${dir})
- ${MKDIR} ${PREFIX}/${dir}
-.endif
- ${TAR} cf - -C${FAKEDIR}/${dir} -s'|${FAKEDIR}|${PREFIX}|s' . | \
- ${TAR} xof - -C${PREFIX}/${dir}
-.endfor
-.for pcfile in ${MOZ_PKGCONFIG_FILES}
- ${INSTALL_DATA} ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc \
- ${PREFIX}/libdata/pkgconfig/${pcfile}.pc
-.endfor
-.endif # !defined(NOGECKO_INSTALL)
+ ${CAT} ${PLISTF} | ${SORT} >> ${TMPPLIST}
+ ${CAT} ${PLISTD} | ${SORT} -r >> ${TMPPLIST}
gecko-moz-pis-pre-install:
.if defined(MOZ_PIS_SCRIPTS)
- ${MKDIR} ${FAKEDIR}/${MOZ_PIS_DIR}
+ ${MKDIR} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR}
.for moz in ${MOZ_PIS_SCRIPTS}
- ${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${FAKEDIR}/${MOZ_PIS_DIR}
+ ${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${STAGEDIR}${PREFIX}/${MOZ_PIS_DIR}
.endfor
.endif
-post-install: gecko-post-install
-
-gecko-post-install:
-.if !defined(PACKAGE_BUILDING) && !defined(NO_MOZPKGINSTALL)
- @if [ -e ${PKGINSTALL} ] ; then \
- ${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL; \
- fi
-.endif
- @-update-desktop-database
-
.endif
.endif
# HERE THERE BE TACOS -- adamw
diff --git a/UPDATING b/UPDATING
index c4f7b359c980..2b1564c78197 100644
--- a/UPDATING
+++ b/UPDATING
@@ -5,6 +5,14 @@ they are unavoidable.
You should get into the habit of checking this file for changes each time
you update your ports collection, before attempting any port upgrades.
+20140610:
+ AFFECTS: users of www/firefox, www/seamonkey, mail/thunderbird, www/libxul
+ AUTHOR: gecko@FreeBSD.org
+
+ Gecko ports were switched to use more system libraries. Some of them
+ must be built with certain options unset (default).
+ - audio/soundtouch has to be installed with INTEGER_SAMPLES option disabled
+
20140604
AFFECTS: users of dns/dnscrypt-proxy
AUTHOR: feld@FreeBSD.org
diff --git a/devel/nspr/Makefile b/devel/nspr/Makefile
index 2a93a7703b80..2a48ba7bcba8 100644
--- a/devel/nspr/Makefile
+++ b/devel/nspr/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= nspr
-DISTVERSION= 4.10.4
+DISTVERSION= 4.10.6
CATEGORIES= devel
MASTER_SITES= MOZILLA/${PORTNAME}/releases/v${PORTVERSION}/src
diff --git a/devel/nspr/distinfo b/devel/nspr/distinfo
index ff07a7051b79..d553b1fa1220 100644
--- a/devel/nspr/distinfo
+++ b/devel/nspr/distinfo
@@ -1,2 +1,2 @@
-SHA256 (nspr-4.10.4.tar.gz) = eb3fcc5e4cbd90f244c19ea05c2dfb4d22df4acc777d34ec6946dbfae560d838
-SIZE (nspr-4.10.4.tar.gz) = 1107127
+SHA256 (nspr-4.10.6.tar.gz) = df69ac8b0126f11907792384468adf42712b1d6db9772f4aa20c6d471594644a
+SIZE (nspr-4.10.6.tar.gz) = 1131328
diff --git a/mail/linux-thunderbird/Makefile b/mail/linux-thunderbird/Makefile
index 0da7b19b0793..dd20f6ac571e 100644
--- a/mail/linux-thunderbird/Makefile
+++ b/mail/linux-thunderbird/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= thunderbird
-DISTVERSION= 24.5.0
+DISTVERSION= 24.6.0
CATEGORIES= mail news net-im ipv6
DISTNAME= ${PORTNAME}-${DISTVERSION}
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
@@ -10,7 +10,8 @@ MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
MAINTAINER= gecko@FreeBSD.org
COMMENT= Mozilla Thunderbird is standalone mail and news that stands above
-USE_BZIP2= yes
+USES= tar:bzip2
+
WANT_GTK218= yes
USE_LINUX_APPS= dbusglib dbuslibs alsalib alsa-plugins-oss
diff --git a/mail/linux-thunderbird/distinfo b/mail/linux-thunderbird/distinfo
index ad1ca8b67468..8a7dac7a7552 100644
--- a/mail/linux-thunderbird/distinfo
+++ b/mail/linux-thunderbird/distinfo
@@ -1,5 +1,5 @@
-SHA256 (thunderbird-24.5.0.tar.bz2) = 6441f90eda22808c37bca023748efee7735cf9b18b1d21ce75878c10da8baad7
-SIZE (thunderbird-24.5.0.tar.bz2) = 28958353
+SHA256 (thunderbird-24.6.0.tar.bz2) = ba35f578095f79582341e988ce7c5e07f489833f7a309756c80caf4f56367987
+SIZE (thunderbird-24.6.0.tar.bz2) = 28991898
SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99
SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908
SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b
diff --git a/mail/thunderbird-i18n/Makefile b/mail/thunderbird-i18n/Makefile
index 1a9aa4819ada..53c04823340b 100644
--- a/mail/thunderbird-i18n/Makefile
+++ b/mail/thunderbird-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= thunderbird-i18n
-PORTVERSION= 24.5.0
+PORTVERSION= 24.6.0
CATEGORIES= mail news net-im
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi
PKGNAMEPREFIX=
diff --git a/mail/thunderbird-i18n/distinfo b/mail/thunderbird-i18n/distinfo
index d404ffe8fa8b..19eaefc1061d 100644
--- a/mail/thunderbird-i18n/distinfo
+++ b/mail/thunderbird-i18n/distinfo
@@ -1,110 +1,110 @@
-SHA256 (xpi/thunderbird-i18n-24.5.0/ar.xpi) = 61c387758c281431653c0d2a40f9779dea513358129fca8838b7568bfcb2f046
-SIZE (xpi/thunderbird-i18n-24.5.0/ar.xpi) = 457862
-SHA256 (xpi/thunderbird-i18n-24.5.0/ast.xpi) = a24e106915b718563a6b59e43d0152c027ac8f851192ca9c26135eaf2d0bf5f4
-SIZE (xpi/thunderbird-i18n-24.5.0/ast.xpi) = 373831
-SHA256 (xpi/thunderbird-i18n-24.5.0/be.xpi) = 46f2f6a22fc8eaa40793be47e7f3351297182cc7ddfb8116b00da965d6ef4a20
-SIZE (xpi/thunderbird-i18n-24.5.0/be.xpi) = 416882
-SHA256 (xpi/thunderbird-i18n-24.5.0/bg.xpi) = e36c78b5dc1667c2a66000a94d4858fd315637b2072491abd5678739c3745f88
-SIZE (xpi/thunderbird-i18n-24.5.0/bg.xpi) = 485023
-SHA256 (xpi/thunderbird-i18n-24.5.0/bn-BD.xpi) = 84b0646dc6ab24c3d366dcb93f30c0e93a53215f2d837acfbfe6757d36cf8b2a
-SIZE (xpi/thunderbird-i18n-24.5.0/bn-BD.xpi) = 537258
-SHA256 (xpi/thunderbird-i18n-24.5.0/br.xpi) = 735a7dcf944090ded122ac7fd94ca081599018091b6b948629281b2dd053ea11
-SIZE (xpi/thunderbird-i18n-24.5.0/br.xpi) = 427679
-SHA256 (xpi/thunderbird-i18n-24.5.0/ca.xpi) = b44c121db7370a79569b8309658dcff73df319f19ce446695964a8913dfffa6d
-SIZE (xpi/thunderbird-i18n-24.5.0/ca.xpi) = 429746
-SHA256 (xpi/thunderbird-i18n-24.5.0/cs.xpi) = 500809375921ab12902f81c0d700c6b66ec2c3bd3a0d03cd58fd94bc59e61040
-SIZE (xpi/thunderbird-i18n-24.5.0/cs.xpi) = 431476
-SHA256 (xpi/thunderbird-i18n-24.5.0/da.xpi) = d9c3e799b534164318262e936b9a5b50016ffea58276d67a6f6cca3c8fad6a83
-SIZE (xpi/thunderbird-i18n-24.5.0/da.xpi) = 409626
-SHA256 (xpi/thunderbird-i18n-24.5.0/de.xpi) = e03fa8c3a32b66955c7b95ccb0651d555e73f62411ed55aa2a44237dbc27b624
-SIZE (xpi/thunderbird-i18n-24.5.0/de.xpi) = 408674
-SHA256 (xpi/thunderbird-i18n-24.5.0/el.xpi) = 490f21edef433189cbcb0e16acb87ebc6e4047bce5c53ae35073782ac2539ea5
-SIZE (xpi/thunderbird-i18n-24.5.0/el.xpi) = 464552
-SHA256 (xpi/thunderbird-i18n-24.5.0/en-GB.xpi) = df6884048a7cc4579cf8d01b9846f4a4fada50c35486a5ef753b92c9e6e9eca4
-SIZE (xpi/thunderbird-i18n-24.5.0/en-GB.xpi) = 400962
-SHA256 (xpi/thunderbird-i18n-24.5.0/en-US.xpi) = 7b6c84303047b2cd7b8def5050978852d5133837f2b805b445da553b7c61ad26
-SIZE (xpi/thunderbird-i18n-24.5.0/en-US.xpi) = 402144
-SHA256 (xpi/thunderbird-i18n-24.5.0/es-AR.xpi) = 1f89c991a958a89913c4ce7d398d3727505f1c5ea18188691f2503d4fc4808f0
-SIZE (xpi/thunderbird-i18n-24.5.0/es-AR.xpi) = 425656
-SHA256 (xpi/thunderbird-i18n-24.5.0/es-ES.xpi) = f4793deb6ddbe8be6af31fe809ba2e6b1a85c16c42fc023d9c798b2a48ed1aab
-SIZE (xpi/thunderbird-i18n-24.5.0/es-ES.xpi) = 366308
-SHA256 (xpi/thunderbird-i18n-24.5.0/et.xpi) = 96a8367da63bbb573386ef2301089a676b963e5000a7638dd616cf66f0fefc06
-SIZE (xpi/thunderbird-i18n-24.5.0/et.xpi) = 422893
-SHA256 (xpi/thunderbird-i18n-24.5.0/eu.xpi) = b3617b39f949ad5e2cc06ad96de92eb76240fb5299fc9ef65479365a390ba2f3
-SIZE (xpi/thunderbird-i18n-24.5.0/eu.xpi) = 418497
-SHA256 (xpi/thunderbird-i18n-24.5.0/fi.xpi) = 3732e9d56156d836dbe69cac9e0d17e2b9e65b3436d54337f01bad07ca79ad86
-SIZE (xpi/thunderbird-i18n-24.5.0/fi.xpi) = 424264
-SHA256 (xpi/thunderbird-i18n-24.5.0/fr.xpi) = 4f6749e30cd43d41d3ad963e09e891c5455f4afba5d659482c945bf2d3ffa041
-SIZE (xpi/thunderbird-i18n-24.5.0/fr.xpi) = 431289
-SHA256 (xpi/thunderbird-i18n-24.5.0/fy-NL.xpi) = 5fd8a7748cb741587e6f8f5608edd1b930adfd597d7c41572ef938acabf5527d
-SIZE (xpi/thunderbird-i18n-24.5.0/fy-NL.xpi) = 426098
-SHA256 (xpi/thunderbird-i18n-24.5.0/ga-IE.xpi) = 5c680e902636dbbdb0850afd8c52016716d2a45bee15661626f8e66dc40d7f3c
-SIZE (xpi/thunderbird-i18n-24.5.0/ga-IE.xpi) = 437114
-SHA256 (xpi/thunderbird-i18n-24.5.0/gd.xpi) = 49941bbc298c4ca251dc799280236e3f687a75a1650bf47ece9da7a6390f1c76
-SIZE (xpi/thunderbird-i18n-24.5.0/gd.xpi) = 440091
-SHA256 (xpi/thunderbird-i18n-24.5.0/gl.xpi) = 2498b883e3cd6d7a81c02824afdaede981228dde6f0a9c13217a34e6d6dfa7c1
-SIZE (xpi/thunderbird-i18n-24.5.0/gl.xpi) = 427543
-SHA256 (xpi/thunderbird-i18n-24.5.0/he.xpi) = a5546f26a205db3a0196c5032c8e69314affecd2174f7880f5ae517af73785f9
-SIZE (xpi/thunderbird-i18n-24.5.0/he.xpi) = 457065
-SHA256 (xpi/thunderbird-i18n-24.5.0/hr.xpi) = b225e5428b4ec30eb618fcac0de66557e2f7bfdc88957dc739ec142d7968a3b2
-SIZE (xpi/thunderbird-i18n-24.5.0/hr.xpi) = 422387
-SHA256 (xpi/thunderbird-i18n-24.5.0/hu.xpi) = a24e6b47bb40a6b71319b5a4f7638574e3eede2163238da059bf0876cf7ec3fa
-SIZE (xpi/thunderbird-i18n-24.5.0/hu.xpi) = 441511
-SHA256 (xpi/thunderbird-i18n-24.5.0/hy-AM.xpi) = a8021d93dc1f3d372ee94d4c7eaacae2f30df06e2bd6cfc37a1ab564c90b6fb4
-SIZE (xpi/thunderbird-i18n-24.5.0/hy-AM.xpi) = 477923
-SHA256 (xpi/thunderbird-i18n-24.5.0/id.xpi) = 41222ef78db07a5da8b388485cd3536184caf8eb7264830e410026c279972454
-SIZE (xpi/thunderbird-i18n-24.5.0/id.xpi) = 457499
-SHA256 (xpi/thunderbird-i18n-24.5.0/is.xpi) = 3fdd5a7f5692ba2103bec6037d77bf848f78cb02eb1644d46641e89fe52cae2c
-SIZE (xpi/thunderbird-i18n-24.5.0/is.xpi) = 425710
-SHA256 (xpi/thunderbird-i18n-24.5.0/it.xpi) = 7c9a296019584d63c44ec03dda76200b83f07f50dcbafbe7c3b69af8f894f5cd
-SIZE (xpi/thunderbird-i18n-24.5.0/it.xpi) = 357933
-SHA256 (xpi/thunderbird-i18n-24.5.0/ja.xpi) = 624bf5f383fbcaf6eff9164232b72395733ae01a3a1f5e10d4a3e6fda10de1b8
-SIZE (xpi/thunderbird-i18n-24.5.0/ja.xpi) = 475559
-SHA256 (xpi/thunderbird-i18n-24.5.0/ko.xpi) = 830f3245b7f246e2269a758b7cc9186d7aadbf519ee72fa33b3d2325e285a291
-SIZE (xpi/thunderbird-i18n-24.5.0/ko.xpi) = 428071
-SHA256 (xpi/thunderbird-i18n-24.5.0/lt.xpi) = dff8b84bcfbb8c07d76d415b6ef378d6024bd81f0655ca438927572b85f4e37c
-SIZE (xpi/thunderbird-i18n-24.5.0/lt.xpi) = 443259
-SHA256 (xpi/thunderbird-i18n-24.5.0/nb-NO.xpi) = 2ae8f6c1a61d6f17cfb4f86d5d9926688fb8a403ab64fe1950c89a8997bcdd55
-SIZE (xpi/thunderbird-i18n-24.5.0/nb-NO.xpi) = 418922
-SHA256 (xpi/thunderbird-i18n-24.5.0/nl.xpi) = da2532d21fb594927f59979d4c022297b0ee5f0c29cdf2209d7e4f9296931cd9
-SIZE (xpi/thunderbird-i18n-24.5.0/nl.xpi) = 418764
-SHA256 (xpi/thunderbird-i18n-24.5.0/nn-NO.xpi) = 2a52857fca772239f14207755946dbdd36ba1c0209f8c09f30cfe6cdc94a5892
-SIZE (xpi/thunderbird-i18n-24.5.0/nn-NO.xpi) = 421134
-SHA256 (xpi/thunderbird-i18n-24.5.0/pa-IN.xpi) = f817ef8578af107efe45cc2406be7568440c1b4e020c3764afbec774b3b17a4b
-SIZE (xpi/thunderbird-i18n-24.5.0/pa-IN.xpi) = 508272
-SHA256 (xpi/thunderbird-i18n-24.5.0/pl.xpi) = 13fd347b116e6d5e1c0b168f020270cc179f32b1e056e333cc3a86a8406f901a
-SIZE (xpi/thunderbird-i18n-24.5.0/pl.xpi) = 401752
-SHA256 (xpi/thunderbird-i18n-24.5.0/pt-BR.xpi) = 57f7c85aa5ff76cd01387ff1752a63e8d2b26749765dd7daf7137de4a06eb6fe
-SIZE (xpi/thunderbird-i18n-24.5.0/pt-BR.xpi) = 430909
-SHA256 (xpi/thunderbird-i18n-24.5.0/pt-PT.xpi) = 828f0920581519070aa58c366f603d964638a60b2de74ad49fcf9397db169145
-SIZE (xpi/thunderbird-i18n-24.5.0/pt-PT.xpi) = 425025
-SHA256 (xpi/thunderbird-i18n-24.5.0/rm.xpi) = b5ad4b75ba5670223b6f16686830f2eed904a764c72a61c88e054d9574518d44
-SIZE (xpi/thunderbird-i18n-24.5.0/rm.xpi) = 432384
-SHA256 (xpi/thunderbird-i18n-24.5.0/ro.xpi) = a5a8215d718a6be1c576059168c9913c55d557b26bed500a4e39a888e0f18c4b
-SIZE (xpi/thunderbird-i18n-24.5.0/ro.xpi) = 497491
-SHA256 (xpi/thunderbird-i18n-24.5.0/ru.xpi) = 53277de17e52ed168368153902b498ea478eed06e00fc9a3f6b880cfbcb48c1f
-SIZE (xpi/thunderbird-i18n-24.5.0/ru.xpi) = 425097
-SHA256 (xpi/thunderbird-i18n-24.5.0/si.xpi) = aca1ede31da89a6ab476aad09696306f61522cdd878c5e1dabd37ba7f5b28713
-SIZE (xpi/thunderbird-i18n-24.5.0/si.xpi) = 511166
-SHA256 (xpi/thunderbird-i18n-24.5.0/sk.xpi) = a64b7290e92579b75a6cf34ba1baed18bb086265c8452c08ddb0228c714b5ed5
-SIZE (xpi/thunderbird-i18n-24.5.0/sk.xpi) = 440106
-SHA256 (xpi/thunderbird-i18n-24.5.0/sl.xpi) = ebab16114f3fe94cd15c9993a94693412afa121ce8975afadf54bf06d9a5fbab
-SIZE (xpi/thunderbird-i18n-24.5.0/sl.xpi) = 421706
-SHA256 (xpi/thunderbird-i18n-24.5.0/sq.xpi) = 5f933fa1e66e16c15d6237099cf65f5f3300ff423d3352f6e5aa3b2d207c7f0a
-SIZE (xpi/thunderbird-i18n-24.5.0/sq.xpi) = 435215
-SHA256 (xpi/thunderbird-i18n-24.5.0/sr.xpi) = 21ee6b0854e5e0052ef4eacca593c0ff41ea000dd0dc75f1d7b647b34591ad49
-SIZE (xpi/thunderbird-i18n-24.5.0/sr.xpi) = 518889
-SHA256 (xpi/thunderbird-i18n-24.5.0/sv-SE.xpi) = 17e752fbcf6e24203b6d27bce06df39766a7878fced1db516b96e2f9ec7e7426
-SIZE (xpi/thunderbird-i18n-24.5.0/sv-SE.xpi) = 423815
-SHA256 (xpi/thunderbird-i18n-24.5.0/ta-LK.xpi) = 55b10f60dea2abc565c69c841988110b989e69e7ce880500f9990af1b7e7437a
-SIZE (xpi/thunderbird-i18n-24.5.0/ta-LK.xpi) = 534922
-SHA256 (xpi/thunderbird-i18n-24.5.0/tr.xpi) = 25b1be7c836addc60bfa36e6c759dcd2b12c73c468351bc830f125080489dd92
-SIZE (xpi/thunderbird-i18n-24.5.0/tr.xpi) = 438066
-SHA256 (xpi/thunderbird-i18n-24.5.0/uk.xpi) = 331ed11d6d4b873db63e33db707a205d98eb0f4b6201a75921431b2e7e4e0755
-SIZE (xpi/thunderbird-i18n-24.5.0/uk.xpi) = 480949
-SHA256 (xpi/thunderbird-i18n-24.5.0/vi.xpi) = 993eb8b5869166b51dab725fea1126445cc132cafadab1b5096f6850f2aaadd3
-SIZE (xpi/thunderbird-i18n-24.5.0/vi.xpi) = 495558
-SHA256 (xpi/thunderbird-i18n-24.5.0/zh-CN.xpi) = e587849f5bae5bbb65bc68087fb9bbe672162e5bca69a7e99f0ca7e4559d5354
-SIZE (xpi/thunderbird-i18n-24.5.0/zh-CN.xpi) = 449181
-SHA256 (xpi/thunderbird-i18n-24.5.0/zh-TW.xpi) = ace0e695c8112ba1754f16603ee14418303ae053b97f8af0b23272a308c4f066
-SIZE (xpi/thunderbird-i18n-24.5.0/zh-TW.xpi) = 450000
+SHA256 (xpi/thunderbird-i18n-24.6.0/ar.xpi) = 6aa3c326c9757751fe655242e446ae4d906a91ee86cc061a3dca1024fc57e88a
+SIZE (xpi/thunderbird-i18n-24.6.0/ar.xpi) = 457862
+SHA256 (xpi/thunderbird-i18n-24.6.0/ast.xpi) = e583f909925f6ecb4f72949bd99340f5a8524c21f2628594dee474c9307e1617
+SIZE (xpi/thunderbird-i18n-24.6.0/ast.xpi) = 373831
+SHA256 (xpi/thunderbird-i18n-24.6.0/be.xpi) = 1fb28fd586a69e277ed01b6d6d636e95c7157bb5327e50662f1faadf524d18d3
+SIZE (xpi/thunderbird-i18n-24.6.0/be.xpi) = 416882
+SHA256 (xpi/thunderbird-i18n-24.6.0/bg.xpi) = 9b3839d5d0b700d1b5258b47dd2cae555845e34c4dd3bc0a2c602dc0a4ff3503
+SIZE (xpi/thunderbird-i18n-24.6.0/bg.xpi) = 485024
+SHA256 (xpi/thunderbird-i18n-24.6.0/bn-BD.xpi) = 4fa1d881044ebc9b129e7f54b65278e5faa730ed5efc2f354f2ceaa6975398c1
+SIZE (xpi/thunderbird-i18n-24.6.0/bn-BD.xpi) = 537258
+SHA256 (xpi/thunderbird-i18n-24.6.0/br.xpi) = 31723061e78c394a75f2977a80378c6ceec8fbec7d980becd50dfc93c14e573a
+SIZE (xpi/thunderbird-i18n-24.6.0/br.xpi) = 427680
+SHA256 (xpi/thunderbird-i18n-24.6.0/ca.xpi) = e7fa72f56d0a3ab90dd3df581aab4154552be12f71408e04701e4d3aec2b9e94
+SIZE (xpi/thunderbird-i18n-24.6.0/ca.xpi) = 429746
+SHA256 (xpi/thunderbird-i18n-24.6.0/cs.xpi) = 360e5cb9097c16ac9fd626917777b491c7c00a95b2e1879ae0fad1b7bed2d870
+SIZE (xpi/thunderbird-i18n-24.6.0/cs.xpi) = 431476
+SHA256 (xpi/thunderbird-i18n-24.6.0/da.xpi) = ded61b233f3598f69352d92dc05a7ee9d0bd8852073e2835e0c3b05001f920a8
+SIZE (xpi/thunderbird-i18n-24.6.0/da.xpi) = 409627
+SHA256 (xpi/thunderbird-i18n-24.6.0/de.xpi) = aca6d21ea4176af021b27c67fd21707b0280cf0f1bf6ac34b03b6abf40d50e7e
+SIZE (xpi/thunderbird-i18n-24.6.0/de.xpi) = 408674
+SHA256 (xpi/thunderbird-i18n-24.6.0/el.xpi) = 63080f452b54b7275bfc09b8aa73fd202739c0afd00a1413729b384e86649525
+SIZE (xpi/thunderbird-i18n-24.6.0/el.xpi) = 464553
+SHA256 (xpi/thunderbird-i18n-24.6.0/en-GB.xpi) = dfdb57b440d21ea9e140fc528f25e6ab2a1966b3865fc87390362995d7c48067
+SIZE (xpi/thunderbird-i18n-24.6.0/en-GB.xpi) = 400962
+SHA256 (xpi/thunderbird-i18n-24.6.0/en-US.xpi) = 977732840ff02afdaa0c19c98faf088e799f1f97bb8d70c5e8240fcad862bc5f
+SIZE (xpi/thunderbird-i18n-24.6.0/en-US.xpi) = 402144
+SHA256 (xpi/thunderbird-i18n-24.6.0/es-AR.xpi) = 3ec3c00f39e98f81c045f6cd41c68bc50ea908c91d295ebd9fa9b18722b83080
+SIZE (xpi/thunderbird-i18n-24.6.0/es-AR.xpi) = 425657
+SHA256 (xpi/thunderbird-i18n-24.6.0/es-ES.xpi) = 14086fa0e85857aa6430bdbfdd5f1f333a14b846126fba2ebfa65d954b68b609
+SIZE (xpi/thunderbird-i18n-24.6.0/es-ES.xpi) = 366308
+SHA256 (xpi/thunderbird-i18n-24.6.0/et.xpi) = 01505e5154f27bea956f17bf1f8ae3ecac21857b9cc631750aaccb2ae3ed3438
+SIZE (xpi/thunderbird-i18n-24.6.0/et.xpi) = 422893
+SHA256 (xpi/thunderbird-i18n-24.6.0/eu.xpi) = 0277449af802ad6fac63b28e7b0383baf2c978ef15bc15a1dd373200762c3d8a
+SIZE (xpi/thunderbird-i18n-24.6.0/eu.xpi) = 418497
+SHA256 (xpi/thunderbird-i18n-24.6.0/fi.xpi) = 9999cf22d0baa8c5c35f560560e1a6ee86fdc37147c433c662f53ed062b251ea
+SIZE (xpi/thunderbird-i18n-24.6.0/fi.xpi) = 424265
+SHA256 (xpi/thunderbird-i18n-24.6.0/fr.xpi) = d053f8f6da0b1d5417342e160824fc0472fd15556b29b2d4a01f043efebbfcac
+SIZE (xpi/thunderbird-i18n-24.6.0/fr.xpi) = 431289
+SHA256 (xpi/thunderbird-i18n-24.6.0/fy-NL.xpi) = 39492e2d8c4d0783b0d3cbc4bdc2067805850041a3e159e7d2f87842e932c155
+SIZE (xpi/thunderbird-i18n-24.6.0/fy-NL.xpi) = 426098
+SHA256 (xpi/thunderbird-i18n-24.6.0/ga-IE.xpi) = 78223fedce58b23f0974b0795d90527778bda0ac07cc523345c471d724cc9d1e
+SIZE (xpi/thunderbird-i18n-24.6.0/ga-IE.xpi) = 437114
+SHA256 (xpi/thunderbird-i18n-24.6.0/gd.xpi) = cfb9655e0423bea9a7b9afe67fc0f38824f859b0bafeb6cacfa346a9e1f9f7db
+SIZE (xpi/thunderbird-i18n-24.6.0/gd.xpi) = 440092
+SHA256 (xpi/thunderbird-i18n-24.6.0/gl.xpi) = 41a888063bf5fc08f46280bb1d4e926b0162357bc2f76903d95272bf4d385683
+SIZE (xpi/thunderbird-i18n-24.6.0/gl.xpi) = 427543
+SHA256 (xpi/thunderbird-i18n-24.6.0/he.xpi) = bdc5f8002eeb770daac280431dcfd837e7e2d6e4b250b37b70dba658dba72437
+SIZE (xpi/thunderbird-i18n-24.6.0/he.xpi) = 457066
+SHA256 (xpi/thunderbird-i18n-24.6.0/hr.xpi) = 1e4cfebe1f3cb0e219e24e9ce2cfdf799a7df046dd4dec81b14f4b1c77104a85
+SIZE (xpi/thunderbird-i18n-24.6.0/hr.xpi) = 422387
+SHA256 (xpi/thunderbird-i18n-24.6.0/hu.xpi) = f374db7d1f05bf2bedb8da02ae4ba37b2cdacffbcbced929be2113525d16a971
+SIZE (xpi/thunderbird-i18n-24.6.0/hu.xpi) = 441512
+SHA256 (xpi/thunderbird-i18n-24.6.0/hy-AM.xpi) = c2c76a69dc3cb32a2009024d70ba25300bca706c72883f44e4894a679ecb5823
+SIZE (xpi/thunderbird-i18n-24.6.0/hy-AM.xpi) = 477923
+SHA256 (xpi/thunderbird-i18n-24.6.0/id.xpi) = d25be8b5e37035220e02b07f774d821290ec21d1802973a637abb5af878af690
+SIZE (xpi/thunderbird-i18n-24.6.0/id.xpi) = 457499
+SHA256 (xpi/thunderbird-i18n-24.6.0/is.xpi) = b87e04aa6d35bbb41692c72f9f9cb19246e49a54d4edc3e29fddca5db651a3c0
+SIZE (xpi/thunderbird-i18n-24.6.0/is.xpi) = 425710
+SHA256 (xpi/thunderbird-i18n-24.6.0/it.xpi) = fea724ca6ec33c7462fd4781390a0b310fb3a023aaa99771db83399b65f581fe
+SIZE (xpi/thunderbird-i18n-24.6.0/it.xpi) = 357933
+SHA256 (xpi/thunderbird-i18n-24.6.0/ja.xpi) = 0c2113e085d920d748a0424f89641f92901d9e97ae9c06cfdb561e980a276c99
+SIZE (xpi/thunderbird-i18n-24.6.0/ja.xpi) = 475559
+SHA256 (xpi/thunderbird-i18n-24.6.0/ko.xpi) = cbaa57d1df226fb6f921d90c3b7d93ee47d73b2bb4f7bf3c748171a1c7af2aac
+SIZE (xpi/thunderbird-i18n-24.6.0/ko.xpi) = 428071
+SHA256 (xpi/thunderbird-i18n-24.6.0/lt.xpi) = 6db3fa6fe593292d717b7077142381a038039365e8f14de74f74edbef64950e7
+SIZE (xpi/thunderbird-i18n-24.6.0/lt.xpi) = 443260
+SHA256 (xpi/thunderbird-i18n-24.6.0/nb-NO.xpi) = 1a773698c405c78a947d5bc2a276f770aa885fad724c9f2b8c04025215c0e994
+SIZE (xpi/thunderbird-i18n-24.6.0/nb-NO.xpi) = 418922
+SHA256 (xpi/thunderbird-i18n-24.6.0/nl.xpi) = 0761a699166bdcead5330af9691bb8437545dd24d3ce2cd1e642f1a48ecc7180
+SIZE (xpi/thunderbird-i18n-24.6.0/nl.xpi) = 418764
+SHA256 (xpi/thunderbird-i18n-24.6.0/nn-NO.xpi) = 4e1951dbdfdcf06dee95a6884d1e9e7b4cf141d95e078fa1fc5fb79feefe873e
+SIZE (xpi/thunderbird-i18n-24.6.0/nn-NO.xpi) = 421134
+SHA256 (xpi/thunderbird-i18n-24.6.0/pa-IN.xpi) = 8bfa8109aac418ac6650c8419f946250e569d8101f587f9d6f001a6a59b30385
+SIZE (xpi/thunderbird-i18n-24.6.0/pa-IN.xpi) = 508272
+SHA256 (xpi/thunderbird-i18n-24.6.0/pl.xpi) = e3514ebf5207fd6ae6caeb01c624ad015ffdb6e06aae3ffe39feade0bdbcdcce
+SIZE (xpi/thunderbird-i18n-24.6.0/pl.xpi) = 401753
+SHA256 (xpi/thunderbird-i18n-24.6.0/pt-BR.xpi) = 2bc7c139195fa661fbe0721df4cbb80e56cd193cd7807e8b16a7855d453b66e1
+SIZE (xpi/thunderbird-i18n-24.6.0/pt-BR.xpi) = 430909
+SHA256 (xpi/thunderbird-i18n-24.6.0/pt-PT.xpi) = 19c86db424f83dda485d655d80830d242850da1008cf2644e0e214d4bf56c745
+SIZE (xpi/thunderbird-i18n-24.6.0/pt-PT.xpi) = 425026
+SHA256 (xpi/thunderbird-i18n-24.6.0/rm.xpi) = 779d52491bfbc449ba87fc4ea11f5190021cb72a45d7167cdbcb8fc10cdbbdeb
+SIZE (xpi/thunderbird-i18n-24.6.0/rm.xpi) = 432384
+SHA256 (xpi/thunderbird-i18n-24.6.0/ro.xpi) = 6b1e81e6df2f2ee752aab0fe1b9290e6c287da4ca498df330601de2bc9f8086e
+SIZE (xpi/thunderbird-i18n-24.6.0/ro.xpi) = 497491
+SHA256 (xpi/thunderbird-i18n-24.6.0/ru.xpi) = 2c4b38d8d1581614ae481efbe1fb1d74e75e374c4360df2dcc5eef335627cab2
+SIZE (xpi/thunderbird-i18n-24.6.0/ru.xpi) = 425098
+SHA256 (xpi/thunderbird-i18n-24.6.0/si.xpi) = 7a5bac3f61891229cb933f82b8b5a196313951db10d157ea70688c69c0a4cf06
+SIZE (xpi/thunderbird-i18n-24.6.0/si.xpi) = 511167
+SHA256 (xpi/thunderbird-i18n-24.6.0/sk.xpi) = 3899a09c9b4f6269830217e5d8ebd26a78619cc95c0a81898ab84a246def5cd8
+SIZE (xpi/thunderbird-i18n-24.6.0/sk.xpi) = 440106
+SHA256 (xpi/thunderbird-i18n-24.6.0/sl.xpi) = 22d81c886d7a775e9b1464550c326c6d2adc32ed87c47fbc47e953ac5d4a388e
+SIZE (xpi/thunderbird-i18n-24.6.0/sl.xpi) = 421706
+SHA256 (xpi/thunderbird-i18n-24.6.0/sq.xpi) = 08a4bf603c50b67e28841e76d1cdb23ec250e52c9afbc04b35059c8ced37120a
+SIZE (xpi/thunderbird-i18n-24.6.0/sq.xpi) = 435215
+SHA256 (xpi/thunderbird-i18n-24.6.0/sr.xpi) = 7e8eb7dd6dd9846bbb704d80dd757086f6da1b38070716cad12e2d6e87a99311
+SIZE (xpi/thunderbird-i18n-24.6.0/sr.xpi) = 518890
+SHA256 (xpi/thunderbird-i18n-24.6.0/sv-SE.xpi) = 4b920e494be9abf2784dc8b8b282b0c022601458e1bdac5ca21b92157f1a0fa6
+SIZE (xpi/thunderbird-i18n-24.6.0/sv-SE.xpi) = 423816
+SHA256 (xpi/thunderbird-i18n-24.6.0/ta-LK.xpi) = 23ca919444d43bc104e282fb3dbaf5c71ebbbfacd80a5c8a1c72ece41971394c
+SIZE (xpi/thunderbird-i18n-24.6.0/ta-LK.xpi) = 534923
+SHA256 (xpi/thunderbird-i18n-24.6.0/tr.xpi) = e6d8de6e52b3bc0bd706d46a25f25e1fe8c5d37608d7d5c251b43008c5397fa6
+SIZE (xpi/thunderbird-i18n-24.6.0/tr.xpi) = 438067
+SHA256 (xpi/thunderbird-i18n-24.6.0/uk.xpi) = 650bbcb5e1879d756953cbe990e78730afbf6b93b4b4fceef6119d3618c00522
+SIZE (xpi/thunderbird-i18n-24.6.0/uk.xpi) = 480949
+SHA256 (xpi/thunderbird-i18n-24.6.0/vi.xpi) = 7c927599de8066f45e07ff338167b9dba1c9b7f179bb8f6c93cdc9b0fa6b4624
+SIZE (xpi/thunderbird-i18n-24.6.0/vi.xpi) = 495559
+SHA256 (xpi/thunderbird-i18n-24.6.0/zh-CN.xpi) = 63b2f4bfb24ad36d32529a79151a8b73195d4beb35eba9ef4a3e4cf8a2020139
+SIZE (xpi/thunderbird-i18n-24.6.0/zh-CN.xpi) = 449182
+SHA256 (xpi/thunderbird-i18n-24.6.0/zh-TW.xpi) = 0f99b8c4680ab081629535e79898081c568d3f57c01d7149c69118d4be125e55
+SIZE (xpi/thunderbird-i18n-24.6.0/zh-TW.xpi) = 450001
diff --git a/mail/thunderbird/Makefile b/mail/thunderbird/Makefile
index 84a7346dbd04..3d77f2691c4d 100644
--- a/mail/thunderbird/Makefile
+++ b/mail/thunderbird/Makefile
@@ -2,11 +2,10 @@
# $FreeBSD$
PORTNAME= thunderbird
-DISTVERSION= 24.5.0
-PORTREVISION= 1
+DISTVERSION= 24.6.0
CATEGORIES= mail news net-im ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
- https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/
+ https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source/
DISTFILES= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX}
EXTRACT_ONLY= ${PORTNAME}-${DISTVERSION}.source${EXTRACT_SUFX}
@@ -42,9 +41,8 @@ WANT_GNOME= yes
USE_QT4= # empty
QT_NONSTANDARD= yes
ALL_TARGET= default
-USE_BZIP2= yes
USE_GL= gl
-USES= dos2unix
+USES= dos2unix tar:bzip2
DOS2UNIX_FILES= mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
MOZ_PROTOCOLS= http,ftp,file,viewsource,res,data,wyciwyg,websocket
@@ -69,7 +67,6 @@ OPTIONS_DEFAULT=ENIGMAIL LIGHTNING
ALL_TARGET= build
MAKEFILE= ${WRKSRC}/client.mk
-NO_STAGE= yes
.include "${.CURDIR}/../../www/firefox/Makefile.options"
OPTIONS_DEFAULT:=${OPTIONS_DEFAULT:S/GSTREAMER//}
@@ -148,51 +145,28 @@ post-build:
.endif
port-pre-install:
- ${MKDIR} ${FAKEDIR}/lib/${PORTNAME}/defaults
-
-pre-install:
- @${ECHO_CMD} 'share/applications/${PORTNAME}.desktop' >> ${PLIST}
- @${ECHO_CMD} 'share/pixmaps/${PORTNAME_ICON}' >> ${PLIST}
+ ${MKDIR} ${STAGEDIR}${PREFIX}/lib/${PORTNAME}/defaults
post-install:
- ${INSTALL_DATA} ${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop ${PREFIX}/share/applications
- ${LN} -sf ${PORTNAME_ICON_SRC} ${PREFIX}/share/pixmaps/${PORTNAME_ICON}
+ ${INSTALL_DATA} ${WRKDIR}/${MOZILLA_EXEC_NAME}.desktop ${STAGEDIR}${PREFIX}/share/applications
+ ${LN} -sf ${PORTNAME_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME_ICON}
.if ${PORT_OPTIONS:MLIGHTNING}
- @${MKDIR} ${XPI_LIBDIR}/${XPI_ID} ${XPI_LIBDIR}/symlinks/thunderbird
- @(cd ${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE})
- @${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${XPI_LIBDIR}/${XPI_ID}
- @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${XPI_LIBDIR}/${XPI_ID}/install.rdf
- @${CHMOD} -R a+rX,go-w ${XPI_LIBDIR}/${XPI_ID}
- @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${LOCALBASE}/lib/thunderbird/extensions 2>/dev/null || true
- @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${XPI_LIBDIR}/symlinks/thunderbird 2>/dev/null || true
- @(cd ${XPI_LIBDIR}; ${FIND} ${XPI_ID} -not -type d) | ${SORT} | \
- ${SED} -ne 's,^,lib/xpi/,p' >> ${TMPPLIST}
- @${ECHO_CMD} 'lib/xpi/symlinks/thunderbird/${XPI_ID}' >> ${TMPPLIST}
+ @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird
+ @(cd ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE})
+ @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}/install.rdf
+ @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}
+ @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/thunderbird 2>/dev/null || true
@${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${XPI_ID} ${LOCALBASE}/lib/thunderbird/extensions 2>/dev/null || true' >> ${TMPPLIST}
@${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/thunderbird/extensions/${XPI_ID}' >> ${TMPPLIST}
- @(cd ${XPI_LIBDIR}; ${FIND} ${XPI_ID} -type d) | ${SORT} -r | \
- ${SED} -ne 's,^,@dirrm lib/xpi/,p' >> ${TMPPLIST}
.endif
.if ${PORT_OPTIONS:MENIGMAIL}
- @${MKDIR} ${XPI_LIBDIR}/${EM_ID} ${XPI_LIBDIR}/symlinks/${PORTNAME}
- @(cd ${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE})
- @${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${XPI_LIBDIR}/${EM_ID}
- @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES}
- @${CHMOD} -R a+rX,go-w ${XPI_LIBDIR}/${EM_ID}
- @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true
- @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true
- @(cd ${XPI_LIBDIR}; ${FIND} ${EM_ID} -not -type d) | ${SORT} | \
- ${SED} -ne 's,^,lib/xpi/,p' >> ${TMPPLIST}
- @${ECHO_CMD} 'lib/xpi/symlinks/${PORTNAME}/${EM_ID}' >> ${TMPPLIST}
+ @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME}
+ @(cd ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE})
+ @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES:S/^/${STAGEDIR}/}
+ @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}
+ @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true
@${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true' >> ${TMPPLIST}
@${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/${PORTNAME}/extensions/${EM_ID}' >> ${TMPPLIST}
- @(cd ${XPI_LIBDIR}; ${FIND} ${EM_ID} -type d) | ${SORT} -r | \
- ${SED} -ne 's,^,@dirrm lib/xpi/,p' >> ${TMPPLIST}
-.endif
-.if ${PORT_OPTIONS:MLIGHTNING} || ${PORT_OPTIONS:MENIGMAIL}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi/symlinks/${PORTNAME} 2>/dev/null || true' >> ${TMPPLIST}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi/symlinks 2>/dev/null || true' >> ${TMPPLIST}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi 2>/dev/null || true' >> ${TMPPLIST}
.endif
.include <bsd.port.post.mk>
diff --git a/mail/thunderbird/distinfo b/mail/thunderbird/distinfo
index ce5374633ed3..0e5920fd5c3b 100644
--- a/mail/thunderbird/distinfo
+++ b/mail/thunderbird/distinfo
@@ -1,4 +1,4 @@
-SHA256 (thunderbird-24.5.0.source.tar.bz2) = 971c48db11328613340ed97a92018403647b8cca6a692b3d6b4145aed124382a
-SIZE (thunderbird-24.5.0.source.tar.bz2) = 140048545
+SHA256 (thunderbird-24.6.0.source.tar.bz2) = ae9a7cbc8dc195bd9f4b7b4edcd33599fa08c5388a0690f77221e6c5566629ea
+SIZE (thunderbird-24.6.0.source.tar.bz2) = 140120461
SHA256 (enigmail-1.6.tar.gz) = 10d5eb7ba364b9b6e6275aae8bba1d0e4321ed7d55a715337d566ccf2a56ea4d
SIZE (enigmail-1.6.tar.gz) = 1231111
diff --git a/mail/thunderbird/files/patch-bug1013675 b/mail/thunderbird/files/patch-bug1013675
new file mode 100644
index 000000000000..0632acbf91f5
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1013675
@@ -0,0 +1,89 @@
+diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
+index 13a286f..293bd73 100644
+--- mozilla/xpcom/base/nsDebugImpl.cpp
++++ mozilla/xpcom/base/nsDebugImpl.cpp
+@@ -45,13 +45,44 @@
+ #endif
+ #endif
+
+-#if defined(XP_MACOSX)
++#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <stdbool.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/sysctl.h>
+ #endif
+
++#if defined(__OpenBSD__)
++#include <sys/proc.h>
++#endif
++
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(XP_MACOSX)
++#define KP_FLAGS kp_proc.p_flag
++#elif defined(__DragonFly__)
++#define KP_FLAGS kp_flags
++#elif defined(__FreeBSD__)
++#define KP_FLAGS ki_flag
++#elif defined(__OpenBSD__) && !defined(_P_TRACED)
++#define KP_FLAGS p_psflags
++#define P_TRACED PS_TRACED
++#else
++#define KP_FLAGS p_flag
++#endif
++
+ #include "mozilla/mozalloc_abort.h"
+
+ static void
+@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+
+ #if defined(XP_WIN)
+ *aResult = ::IsDebuggerPresent();
+-#elif defined(XP_MACOSX)
++#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ // Specify the info we're looking for
+- int mib[4];
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_PROC;
+- mib[2] = KERN_PROC_PID;
+- mib[3] = getpid();
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
+ size_t mibSize = sizeof(mib) / sizeof(int);
+
+- struct kinfo_proc info;
++ KINFO_PROC info;
+ size_t infoSize = sizeof(info);
+ memset(&info, 0, infoSize);
+
+@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+ return NS_OK;
+ }
+
+- if (info.kp_proc.p_flag & P_TRACED) {
++ if (info.KP_FLAGS & P_TRACED) {
+ *aResult = true;
+ }
+ #endif
diff --git a/mail/thunderbird/files/patch-bug1015547 b/mail/thunderbird/files/patch-bug1015547
new file mode 100644
index 000000000000..f3cd7494c301
--- /dev/null
+++ b/mail/thunderbird/files/patch-bug1015547
@@ -0,0 +1,94 @@
+diff --git configure.in configure.in
+index 7bed45f..053de17 100644
+--- mozilla/configure.in
++++ mozilla/configure.in
+@@ -3166,6 +3166,7 @@ AC_CHECK_FUNCS(random strerror lchown fc
+ AC_CHECK_FUNCS(statvfs64 statvfs statfs64 statfs)
+ AC_CHECK_FUNCS(flockfile getpagesize)
+ AC_CHECK_FUNCS(localtime_r strtok_r)
++AC_CHECK_FUNCS(arc4random arc4random_buf)
+
+ dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
+ AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
+diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
+index 0687344..ca3ff8b 100644
+--- mozilla/xpcom/base/nsUUIDGenerator.cpp
++++ mozilla/xpcom/base/nsUUIDGenerator.cpp
+@@ -15,6 +15,10 @@
+
+ #include "nsUUIDGenerator.h"
+
++#ifdef ANDROID
++extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
++#endif
++
+ using namespace mozilla;
+
+ NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
+@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
+ // We're a service, so we're guaranteed that Init() is not going
+ // to be reentered while we're inside Init().
+
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ /* initialize random number generator using NSPR random noise */
+ unsigned int seed;
+
+@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
+ return NS_ERROR_FAILURE;
+ #endif
+
+-#endif /* non XP_WIN and non XP_MACOSX */
++#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
+
+ return NS_OK;
+ }
+@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ * back to it; instead, we use the value returned when we called
+ * initstate, since older glibc's have broken setstate() return values
+ */
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ setstate(mState);
+ #endif
+
++#ifdef HAVE_ARC4RANDOM_BUF
++ arc4random_buf(id, sizeof(nsID));
++#else /* HAVE_ARC4RANDOM_BUF */
+ size_t bytesLeft = sizeof(nsID);
+ while (bytesLeft > 0) {
+-#ifdef ANDROID
++#ifdef HAVE_ARC4RANDOM
+ long rval = arc4random();
+ const size_t mRBytes = 4;
+ #else
+@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+
+ bytesLeft -= toWrite;
+ }
++#endif /* HAVE_ARC4RANDOM_BUF */
+
+ /* Put in the version */
+ id->m2 &= 0x0fff;
+@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ id->m3[0] &= 0x3f;
+ id->m3[0] |= 0x80;
+
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ /* Restore the previous RNG state */
+ setstate(mSavedState);
+ #endif
+diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
+index 6a24212..68ed6f2 100644
+--- mozilla/xpcom/base/nsUUIDGenerator.h
++++ mozilla/xpcom/base/nsUUIDGenerator.h
+@@ -27,7 +27,7 @@ private:
+ protected:
+
+ mozilla::Mutex mLock;
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ char mState[128];
+ char *mSavedState;
+ uint8_t mRBytes;
diff --git a/mail/thunderbird/files/patch-bug916589 b/mail/thunderbird/files/patch-bug916589
index c6aef052c4ce..3c24bf7ef332 100644
--- a/mail/thunderbird/files/patch-bug916589
+++ b/mail/thunderbird/files/patch-bug916589
@@ -2,17 +2,8 @@ diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/qu
index 5b50785..7cf47d5 100644
--- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -31,11 +31,18 @@
- */
-
--#ifndef _SYS_QUEUE_H_
-+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
-+#include_next <sys/queue.h>
-+# if defined(__DragonFly__)
-+#define STAILQ_FOREACH_SAFE STAILQ_FOREACH_MUTABLE
-+#define TAILQ_FOREACH_SAFE TAILQ_FOREACH_MUTABLE
-+# endif
-+#elif !defined(_SYS_QUEUE_H_)
+@@ -33,9 +33,10 @@
+ #ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
-#if !defined(__FreeBSD__) && !defined(DARWIN)
@@ -24,7 +15,7 @@ index 5b50785..7cf47d5 100644
#endif
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +46,6 @@
+@@ -43,8 +44,6 @@
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
@@ -33,7 +24,7 @@ index 5b50785..7cf47d5 100644
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
-@@ -285,7 +286,7 @@ struct { \
+@@ -285,7 +284,7 @@ struct { \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
diff --git a/mail/thunderbird/files/patch-zz-bug517422 b/mail/thunderbird/files/patch-zz-bug517422
index 3922c5b27fad..413a57a17e82 100644
--- a/mail/thunderbird/files/patch-zz-bug517422
+++ b/mail/thunderbird/files/patch-zz-bug517422
@@ -178,7 +178,7 @@ index 87db361..7947626 100644
dnl = Disable Opus audio codec support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,76 @@ MOZ_ARG_DISABLE_BOOL(opus,
+@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
MOZ_OPUS=1)
dnl ========================================================
@@ -245,6 +245,27 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ _SAVE_CXXFLAGS=$CXXFLAGS
++ CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS"
++ AC_CACHE_CHECK(for soundtouch sample type,
++ ac_cv_soundtouch_sample_type,
++ [AC_TRY_COMPILE([#include <SoundTouch.h>
++ #ifndef SOUNDTOUCH_INTEGER_SAMPLES
++ #error soundtouch expects float samples
++ #endif],
++ [],
++ [ac_cv_soundtouch_sample_type=short],
++ [ac_cv_soundtouch_sample_type=float])])
++ CXXFLAGS=$_SAVE_CXXFLAGS
++ AC_LANG_RESTORE
++
++ if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \
++ -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then
++ AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.])
++ fi
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
diff --git a/security/ca_root_nss/Makefile b/security/ca_root_nss/Makefile
index 57ec20045115..f23d4d80bb0c 100644
--- a/security/ca_root_nss/Makefile
+++ b/security/ca_root_nss/Makefile
@@ -24,7 +24,7 @@ PLIST_SUB+= CERTDIR=${CERTDIR}
# !!! Please DO NOT submit patches for new version until it has !!!
# !!! been committed there first. !!!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-VERSION_NSS= 3.16
+VERSION_NSS= 3.16.1
#NSS_SUFFIX= .with.ckbi.1.93
CERTDATA_TXT_PATH= nss-${VERSION_NSS}/nss/lib/ckfw/builtins/certdata.txt
BUNDLE_PROCESSOR= MAca-bundle.pl
diff --git a/security/ca_root_nss/distinfo b/security/ca_root_nss/distinfo
index ca6d01f6d9e5..df400028fccf 100644
--- a/security/ca_root_nss/distinfo
+++ b/security/ca_root_nss/distinfo
@@ -1,2 +1,2 @@
-SHA256 (nss-3.16.tar.gz) = 2bb4faa200962caacf0454f1e870e74aa9a543809e5c440f7978bcce58e0bfe8
-SIZE (nss-3.16.tar.gz) = 6378110
+SHA256 (nss-3.16.1.tar.gz) = fab750f7d34c09cf34df25da1924a9a8f4c7f1768e2d456f8be767ecbbe84a6e
+SIZE (nss-3.16.1.tar.gz) = 6409506
diff --git a/security/nss/Makefile b/security/nss/Makefile
index d739f7dfd5f5..20b5efc59bc0 100644
--- a/security/nss/Makefile
+++ b/security/nss/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= nss
-PORTVERSION= 3.16
+PORTVERSION= 3.16.1
#DISTVERSIONSUFFIX= .with.ckbi.1.93
CATEGORIES= security
MASTER_SITES= MOZILLA/security/${PORTNAME}/releases/${DISTNAME:tu:C/[-.]/_/g}_RTM/src
diff --git a/security/nss/distinfo b/security/nss/distinfo
index ca6d01f6d9e5..df400028fccf 100644
--- a/security/nss/distinfo
+++ b/security/nss/distinfo
@@ -1,2 +1,2 @@
-SHA256 (nss-3.16.tar.gz) = 2bb4faa200962caacf0454f1e870e74aa9a543809e5c440f7978bcce58e0bfe8
-SIZE (nss-3.16.tar.gz) = 6378110
+SHA256 (nss-3.16.1.tar.gz) = fab750f7d34c09cf34df25da1924a9a8f4c7f1768e2d456f8be767ecbbe84a6e
+SIZE (nss-3.16.1.tar.gz) = 6409506
diff --git a/www/firefox-esr-i18n/Makefile b/www/firefox-esr-i18n/Makefile
index 12d0694b5988..16bca4b00878 100644
--- a/www/firefox-esr-i18n/Makefile
+++ b/www/firefox-esr-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-PORTVERSION= 24.5.0
+PORTVERSION= 24.6.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}esr/linux-i686/xpi
PKGNAMEPREFIX=
diff --git a/www/firefox-esr-i18n/distinfo b/www/firefox-esr-i18n/distinfo
index 881e6ae4ea10..a26a865488aa 100644
--- a/www/firefox-esr-i18n/distinfo
+++ b/www/firefox-esr-i18n/distinfo
@@ -1,178 +1,178 @@
-SHA256 (xpi/firefox-24.5.0/ach.xpi) = 89bb3134815fceb3e21b3a0e03c705e4f8df4178271be8798714a78acfdb8368
-SIZE (xpi/firefox-24.5.0/ach.xpi) = 339946
-SHA256 (xpi/firefox-24.5.0/af.xpi) = dbf83ac1bfba4a3c325478813dc7f3b7d90e80d4ade272eb5e17ad97d7837933
-SIZE (xpi/firefox-24.5.0/af.xpi) = 333184
-SHA256 (xpi/firefox-24.5.0/ak.xpi) = 03557473c95e9c8a816784edbf6250a42931887008934f9cc3a908e6f08a6c23
-SIZE (xpi/firefox-24.5.0/ak.xpi) = 340941
-SHA256 (xpi/firefox-24.5.0/ar.xpi) = 461679df4d27aadc21fd04b04fe91fcceeea54a0779e2ab9c564e4647db0f281
-SIZE (xpi/firefox-24.5.0/ar.xpi) = 360850
-SHA256 (xpi/firefox-24.5.0/as.xpi) = 65f041d1ce7f15a2a859c78cea161dd78f73fc4ab2cb56da45eef85f0580093e
-SIZE (xpi/firefox-24.5.0/as.xpi) = 378086
-SHA256 (xpi/firefox-24.5.0/ast.xpi) = 8a1061bdb8d92c13322097c4824590615d03cba95a49a0e84794c7eb3072bf34
-SIZE (xpi/firefox-24.5.0/ast.xpi) = 292876
-SHA256 (xpi/firefox-24.5.0/be.xpi) = 156fda23ce2e89c2869f474d25ab49e85bf790b131906601c5187e708aae0774
-SIZE (xpi/firefox-24.5.0/be.xpi) = 316955
-SHA256 (xpi/firefox-24.5.0/bg.xpi) = 5181d2094822162aa17583c1a82709d1a8abdeff28d2f5629848cc65acf5c5a8
-SIZE (xpi/firefox-24.5.0/bg.xpi) = 373136
-SHA256 (xpi/firefox-24.5.0/bn-BD.xpi) = bb073f7e4f6cdb4145c2ebbea5ce37dc056b13d89e7dfc0bbb0692f2ea6ba7f5
-SIZE (xpi/firefox-24.5.0/bn-BD.xpi) = 394939
-SHA256 (xpi/firefox-24.5.0/bn-IN.xpi) = b3546e14be577515a3b4f3eac1b72737f0492e7f18f313d29f565757fcb722d6
-SIZE (xpi/firefox-24.5.0/bn-IN.xpi) = 427780
-SHA256 (xpi/firefox-24.5.0/br.xpi) = aa14900294be897d503ede9cd329ef0a80dd01041523086119a34537e8b77502
-SIZE (xpi/firefox-24.5.0/br.xpi) = 330509
-SHA256 (xpi/firefox-24.5.0/bs.xpi) = 5cb77e0b9c67935ba8a1bc91352552cb2aff201eb1bfe7e116b9d4876396d66a
-SIZE (xpi/firefox-24.5.0/bs.xpi) = 341621
-SHA256 (xpi/firefox-24.5.0/ca.xpi) = 85a0c9e67bbd6a2b3207a6025f6e8293900fda05b01556a50a9a14dcf85d2e7d
-SIZE (xpi/firefox-24.5.0/ca.xpi) = 341257
-SHA256 (xpi/firefox-24.5.0/cs.xpi) = ce6815b1563758701654b3bc3f1cbd5a5ea1d006cc0066a832b514118f054a3f
-SIZE (xpi/firefox-24.5.0/cs.xpi) = 335947
-SHA256 (xpi/firefox-24.5.0/csb.xpi) = 5ee8a4d05b7747ebddc32dabb9e8054422ca715ec8d0f1428f20af7092563f28
-SIZE (xpi/firefox-24.5.0/csb.xpi) = 329796
-SHA256 (xpi/firefox-24.5.0/cy.xpi) = f50f8c73a9871530a11ba6f18d33b0f0b44996923d03d87b2e4fd1832cb0af11
-SIZE (xpi/firefox-24.5.0/cy.xpi) = 330643
-SHA256 (xpi/firefox-24.5.0/da.xpi) = be6a10a1af27e35168e66b21d12ee0b31a22a557f1c101e7a3c31b74bca773bc
-SIZE (xpi/firefox-24.5.0/da.xpi) = 326882
-SHA256 (xpi/firefox-24.5.0/de.xpi) = 810293bb68ee37989d779c28670a82ee191b22f2e02538f6635c5bd78a40106f
-SIZE (xpi/firefox-24.5.0/de.xpi) = 323258
-SHA256 (xpi/firefox-24.5.0/el.xpi) = b0879237952cc2fcc55a592a47cd2716417dc165024998541c566c6fbaa561d4
-SIZE (xpi/firefox-24.5.0/el.xpi) = 365320
-SHA256 (xpi/firefox-24.5.0/en-GB.xpi) = 7719b15c422cf477d3ada1591ce85e47e428ccaea817a6de58d98c94328982d4
-SIZE (xpi/firefox-24.5.0/en-GB.xpi) = 318298
-SHA256 (xpi/firefox-24.5.0/en-US.xpi) = 9365305ecbd19e8fa23e1cdb003452d9fe624b668098888f676f3d1088d89e71
-SIZE (xpi/firefox-24.5.0/en-US.xpi) = 320993
-SHA256 (xpi/firefox-24.5.0/en-ZA.xpi) = cedee816a20945a4e613d14c653d0d6549533fb41c7b35baf04d269de903c44d
-SIZE (xpi/firefox-24.5.0/en-ZA.xpi) = 319321
-SHA256 (xpi/firefox-24.5.0/eo.xpi) = 121c95dd6087373846416c66d8d455a8f5aaa7026d1cd327be27acb68931e75a
-SIZE (xpi/firefox-24.5.0/eo.xpi) = 334940
-SHA256 (xpi/firefox-24.5.0/es-AR.xpi) = 3015be6ce0b6064773e95ba22e85ce2698b61e08f4fe9a588a01f7f0e8e95feb
-SIZE (xpi/firefox-24.5.0/es-AR.xpi) = 334010
-SHA256 (xpi/firefox-24.5.0/es-CL.xpi) = f3279fb89da82408da9d42c179b21e43c579485fa0e6bd501810749c3c54048c
-SIZE (xpi/firefox-24.5.0/es-CL.xpi) = 287027
-SHA256 (xpi/firefox-24.5.0/es-ES.xpi) = b6b20b2effc291c2fac5f6251dc350ae60764c5bf15d94eec42dc029dd03cbe6
-SIZE (xpi/firefox-24.5.0/es-ES.xpi) = 277860
-SHA256 (xpi/firefox-24.5.0/es-MX.xpi) = 24093829c9e9c220edd544c3ccd660976bcf8f6b105b33181069a47b6ed977e0
-SIZE (xpi/firefox-24.5.0/es-MX.xpi) = 302625
-SHA256 (xpi/firefox-24.5.0/et.xpi) = 4c7c05bf0bb5e5908ff9e2d331d0349a2550068da5fd4b1a82e80e09a42f3807
-SIZE (xpi/firefox-24.5.0/et.xpi) = 327698
-SHA256 (xpi/firefox-24.5.0/eu.xpi) = ce23102fbdb04b3844fc7885275edd7bfa7921ea34c651f977b369b1ce984b48
-SIZE (xpi/firefox-24.5.0/eu.xpi) = 332422
-SHA256 (xpi/firefox-24.5.0/fa.xpi) = 55cf194048cbb765d28491522cbf3a59b9b502766222dc843616e9a6503b663f
-SIZE (xpi/firefox-24.5.0/fa.xpi) = 375634
-SHA256 (xpi/firefox-24.5.0/ff.xpi) = 3125954890f30fb6ed594363fb1a1ce4106a6c71f542ffaf77ddf0891884ff2e
-SIZE (xpi/firefox-24.5.0/ff.xpi) = 332815
-SHA256 (xpi/firefox-24.5.0/fi.xpi) = 7e1daf06bf51ef963d8c8c832cfa039bcd97488e9f916c2d483113157e3c86f2
-SIZE (xpi/firefox-24.5.0/fi.xpi) = 328892
-SHA256 (xpi/firefox-24.5.0/fr.xpi) = 740443f01961855f55956c7bfe67b70599fd81641c8a58e0a3ba27fe1d88ba4f
-SIZE (xpi/firefox-24.5.0/fr.xpi) = 339178
-SHA256 (xpi/firefox-24.5.0/fy-NL.xpi) = be38c251d43ee3be8036528fe51053c434cc2d4ee04d5d9d771c58254cad261c
-SIZE (xpi/firefox-24.5.0/fy-NL.xpi) = 336593
-SHA256 (xpi/firefox-24.5.0/ga-IE.xpi) = b1f92ecffe17f85f790e7ae67f61050349fac7ab94566352e489137b75cfc8bd
-SIZE (xpi/firefox-24.5.0/ga-IE.xpi) = 345295
-SHA256 (xpi/firefox-24.5.0/gd.xpi) = 410feda6a4a6d93b35ef807379d0f879f48200c22a45dca2111a3977952441fb
-SIZE (xpi/firefox-24.5.0/gd.xpi) = 344812
-SHA256 (xpi/firefox-24.5.0/gl.xpi) = f32f085c60954ec5cb639504ccd5a01ad205cbb3287e838f5ca20f0c35ffcb9b
-SIZE (xpi/firefox-24.5.0/gl.xpi) = 336919
-SHA256 (xpi/firefox-24.5.0/gu-IN.xpi) = e84e03197a8dda85924493e3459e577cf69f1ba7cb0f9f0f39614ff2d5bbd771
-SIZE (xpi/firefox-24.5.0/gu-IN.xpi) = 359359
-SHA256 (xpi/firefox-24.5.0/he.xpi) = 4e81fa8fdba015cb59ad651802634494ddafb9bf00fdc9ac79253b9ad4a9e5db
-SIZE (xpi/firefox-24.5.0/he.xpi) = 354631
-SHA256 (xpi/firefox-24.5.0/hi-IN.xpi) = d4280e84dda7f30e272848e9d2764387d400030f89d2cd9cb3d9c3b0d37f5b90
-SIZE (xpi/firefox-24.5.0/hi-IN.xpi) = 379121
-SHA256 (xpi/firefox-24.5.0/hr.xpi) = 87a5b71bd29ca1bdfcf41fa47a674b08292097a2e5e02b0d66a4992ef1f13125
-SIZE (xpi/firefox-24.5.0/hr.xpi) = 336841
-SHA256 (xpi/firefox-24.5.0/hu.xpi) = 3cd756b11e7336aeeac0817d0926fed814725c6391b7da0528c090a5b90fea8c
-SIZE (xpi/firefox-24.5.0/hu.xpi) = 344103
-SHA256 (xpi/firefox-24.5.0/hy-AM.xpi) = df292c89159675f8ac95de5c0eb0cc9604ba809bc0df5b93261defee05ef00ea
-SIZE (xpi/firefox-24.5.0/hy-AM.xpi) = 385181
-SHA256 (xpi/firefox-24.5.0/id.xpi) = 351efda2d5e392d107d9070a9a2a20cbadb72536c5a49903ca2bed970eaba84b
-SIZE (xpi/firefox-24.5.0/id.xpi) = 319795
-SHA256 (xpi/firefox-24.5.0/is.xpi) = a9fe3ff50ad3884c8dc5dda592f7f046867c5afa450571d3189d66ce556ed97d
-SIZE (xpi/firefox-24.5.0/is.xpi) = 331826
-SHA256 (xpi/firefox-24.5.0/it.xpi) = 6cb83701d40c29e80bbb554b713af64defdebbb2ec79fca157ce39b1e4368843
-SIZE (xpi/firefox-24.5.0/it.xpi) = 271926
-SHA256 (xpi/firefox-24.5.0/ja.xpi) = 047262fa65b084a51d49371446072444e1c01f1abe08e71a0c96fa01a60b2589
-SIZE (xpi/firefox-24.5.0/ja.xpi) = 370904
-SHA256 (xpi/firefox-24.5.0/kk.xpi) = 8e06e5a4d0ac56ce7b2d70b0b457e4e68f1e6e26ece277839e4c3695d1cb17e6
-SIZE (xpi/firefox-24.5.0/kk.xpi) = 377502
-SHA256 (xpi/firefox-24.5.0/km.xpi) = 35327b91598f75e316c74f1747d8aef6178cb3c4e22589d91ec4f472d75977ea
-SIZE (xpi/firefox-24.5.0/km.xpi) = 400559
-SHA256 (xpi/firefox-24.5.0/kn.xpi) = dc7a37b155a5b778890e64b356c69f6daa94af980fd1eaae7413cf5a55963f0e
-SIZE (xpi/firefox-24.5.0/kn.xpi) = 391033
-SHA256 (xpi/firefox-24.5.0/ko.xpi) = 4e8fc61a5dbf760468b0994c2482621da257d7fb00540f26030b508c61aee607
-SIZE (xpi/firefox-24.5.0/ko.xpi) = 346164
-SHA256 (xpi/firefox-24.5.0/ku.xpi) = c2443c2f57c40d09f8176c48ec61a7be89a86b31ea1afe7b606626f3e5f719d9
-SIZE (xpi/firefox-24.5.0/ku.xpi) = 355632
-SHA256 (xpi/firefox-24.5.0/lg.xpi) = f739ff649c7313878889bcd037b9e9faa0c5fee884b07ac097fcdad7e6e699e2
-SIZE (xpi/firefox-24.5.0/lg.xpi) = 351111
-SHA256 (xpi/firefox-24.5.0/lij.xpi) = f211bdfd39359d6d83be9ea9357c6b22133d52292418ba0588c3b7330abc483c
-SIZE (xpi/firefox-24.5.0/lij.xpi) = 322703
-SHA256 (xpi/firefox-24.5.0/lt.xpi) = 1b1e85e0f0817b7ad6cb1f8bdc80b232aed8ff0e005946345fb7474bd92cbe0a
-SIZE (xpi/firefox-24.5.0/lt.xpi) = 352045
-SHA256 (xpi/firefox-24.5.0/lv.xpi) = 9d319f965e9545e50076de73ce9a51e25c457332595d8d5d35bf6bc0b0df5afb
-SIZE (xpi/firefox-24.5.0/lv.xpi) = 328665
-SHA256 (xpi/firefox-24.5.0/mai.xpi) = da093cbb6a1e2786ef6561dd91a60bb0fa81e4f1fad603efa566205ac188984c
-SIZE (xpi/firefox-24.5.0/mai.xpi) = 379767
-SHA256 (xpi/firefox-24.5.0/mk.xpi) = 965011e03d977df7cdfa4e00e9c1864570bfe26515103664c0c7f739ae6d1ae5
-SIZE (xpi/firefox-24.5.0/mk.xpi) = 376316
-SHA256 (xpi/firefox-24.5.0/ml.xpi) = 8ffbe5d36f5dbf6e07a4e93be42f81bbd01d67473702d6a926451098b01b210b
-SIZE (xpi/firefox-24.5.0/ml.xpi) = 399678
-SHA256 (xpi/firefox-24.5.0/mr.xpi) = 1d48a15eab812fdbd999ffa16bc5244cec414e4becc63acb4e6c57e8d9d06598
-SIZE (xpi/firefox-24.5.0/mr.xpi) = 380232
-SHA256 (xpi/firefox-24.5.0/nb-NO.xpi) = 8080a307c0f0ffbf6e87d2709b72048ecaf17b92bc95fd317522ab2044c06f35
-SIZE (xpi/firefox-24.5.0/nb-NO.xpi) = 330966
-SHA256 (xpi/firefox-24.5.0/nl.xpi) = b05435549d6aa06fa4167d034022bdcb399b4cb406d8929ae2c20f57d64d7712
-SIZE (xpi/firefox-24.5.0/nl.xpi) = 331405
-SHA256 (xpi/firefox-24.5.0/nn-NO.xpi) = 550abb8abdea1aac0738535b6b6ee0d84c551a36307b8d6d402592fc2b6cffe9
-SIZE (xpi/firefox-24.5.0/nn-NO.xpi) = 333907
-SHA256 (xpi/firefox-24.5.0/nso.xpi) = 5de065f05acf39ddc493b158ab277cbca78091626242aa50e5b85575ea79c546
-SIZE (xpi/firefox-24.5.0/nso.xpi) = 336298
-SHA256 (xpi/firefox-24.5.0/or.xpi) = ec6d6b647bbc342ef65256cb6e645b3b67db9bfbd9e4e502d83c3bc8c0025741
-SIZE (xpi/firefox-24.5.0/or.xpi) = 364593
-SHA256 (xpi/firefox-24.5.0/pa-IN.xpi) = bbef2c9f3b3d02efd46ab9fcdf56be10ae94a187b4a70191927849e3b2f3cc60
-SIZE (xpi/firefox-24.5.0/pa-IN.xpi) = 365653
-SHA256 (xpi/firefox-24.5.0/pl.xpi) = 3d6583fcd2fc1d8de25eae5996927ba1bd7f90333c978f9f558873dd120c6b5e
-SIZE (xpi/firefox-24.5.0/pl.xpi) = 341995
-SHA256 (xpi/firefox-24.5.0/pt-BR.xpi) = 24d5a37fc39bb64d11535625a707bd741f04c603a01e91515d3650c09925c7b0
-SIZE (xpi/firefox-24.5.0/pt-BR.xpi) = 334606
-SHA256 (xpi/firefox-24.5.0/pt-PT.xpi) = d6e489bab3a960bd988d1f1d59c113151820aaa894f116ec168f1cfde8bc9351
-SIZE (xpi/firefox-24.5.0/pt-PT.xpi) = 332740
-SHA256 (xpi/firefox-24.5.0/rm.xpi) = e1aeed564f7492fccbbb0c98918c3a9077501f05ece5493e5c125fabe47f422d
-SIZE (xpi/firefox-24.5.0/rm.xpi) = 339698
-SHA256 (xpi/firefox-24.5.0/ro.xpi) = 86d84a90e8bbebeb174d740482b355d93fd63be01efdfc49a85b008262b41aff
-SIZE (xpi/firefox-24.5.0/ro.xpi) = 362237
-SHA256 (xpi/firefox-24.5.0/ru.xpi) = 46e7530980ac1b7761d049cb6bde008e94f0ceef0187be8629b722cfd16148a7
-SIZE (xpi/firefox-24.5.0/ru.xpi) = 322761
-SHA256 (xpi/firefox-24.5.0/si.xpi) = deb60b658a54e26b286cf6f1a4996175169333d257ad8a1038faabdc663ddd84
-SIZE (xpi/firefox-24.5.0/si.xpi) = 372983
-SHA256 (xpi/firefox-24.5.0/sk.xpi) = 76bfa6a2bc4c526053fa9a81f3d8be99f1ffe5440c0d3b7f5e419bd723ccc3a6
-SIZE (xpi/firefox-24.5.0/sk.xpi) = 347879
-SHA256 (xpi/firefox-24.5.0/sl.xpi) = a60eeff81f3b3c9a765fead2b00c4ac7d96778b51d8185401dcbb6b5c2c727da
-SIZE (xpi/firefox-24.5.0/sl.xpi) = 331572
-SHA256 (xpi/firefox-24.5.0/son.xpi) = e6dc41c014cfe9921f9617837ca5cfbc30da9ba8b0bf0dc97da0370ece749072
-SIZE (xpi/firefox-24.5.0/son.xpi) = 328903
-SHA256 (xpi/firefox-24.5.0/sq.xpi) = c09e2ca9d828763ae9f1056cddcf44771f4fb06b6e2ea919d40b8c9d9c3a6746
-SIZE (xpi/firefox-24.5.0/sq.xpi) = 340677
-SHA256 (xpi/firefox-24.5.0/sr.xpi) = 10aab262ca85ca8fe67aadc1ec718a6b26ed762308ea950edfee75d0c25aa1b5
-SIZE (xpi/firefox-24.5.0/sr.xpi) = 385108
-SHA256 (xpi/firefox-24.5.0/sv-SE.xpi) = 4e26bd50b1770d57a5fa434972d63626fe399fb27452f90e4bdb4450bd14140d
-SIZE (xpi/firefox-24.5.0/sv-SE.xpi) = 333507
-SHA256 (xpi/firefox-24.5.0/ta-LK.xpi) = a7d1d5d44fa2b13f5fbc90bb66d29d14201922b4304e91eb463d5ba9a76b8e39
-SIZE (xpi/firefox-24.5.0/ta-LK.xpi) = 384156
-SHA256 (xpi/firefox-24.5.0/ta.xpi) = 1c322d1d87f7ad0b2b2792939dd353d63c864ca5d1038807046fb8f09be5cb82
-SIZE (xpi/firefox-24.5.0/ta.xpi) = 381423
-SHA256 (xpi/firefox-24.5.0/te.xpi) = 4c81cb886077916ab8e622933a1ce832dd4656b72bee9505506059b8d98ee331
-SIZE (xpi/firefox-24.5.0/te.xpi) = 394563
-SHA256 (xpi/firefox-24.5.0/th.xpi) = 1274f67c577a3325423774e17862ceb832a2523564816ef6f9b6bf2e6e6891fe
-SIZE (xpi/firefox-24.5.0/th.xpi) = 379823
-SHA256 (xpi/firefox-24.5.0/tr.xpi) = e969d229c5ee5e5d75e9709c07ef2f482974aa27e2c07741d371e29e2c5ae58f
-SIZE (xpi/firefox-24.5.0/tr.xpi) = 340387
-SHA256 (xpi/firefox-24.5.0/uk.xpi) = 6352035d5b50ba368aa4bce0bd9fca4811de4467a249e41708c1a771b72e1b26
-SIZE (xpi/firefox-24.5.0/uk.xpi) = 365699
-SHA256 (xpi/firefox-24.5.0/vi.xpi) = 6b915f53d4d375e99f20b955634bcc97e5dafd68e29b51f32d8b91ee02650a96
-SIZE (xpi/firefox-24.5.0/vi.xpi) = 358430
-SHA256 (xpi/firefox-24.5.0/zh-CN.xpi) = 43d21947d10746a7e41caf8df030b32c9ba834f26f47288e5c7d2b2959281fa5
-SIZE (xpi/firefox-24.5.0/zh-CN.xpi) = 358183
-SHA256 (xpi/firefox-24.5.0/zh-TW.xpi) = 88ab281a92fe9d1734cf199c562c80bdd1ccc603ec4c7c45ef82a460a68b6e0b
-SIZE (xpi/firefox-24.5.0/zh-TW.xpi) = 351833
-SHA256 (xpi/firefox-24.5.0/zu.xpi) = e0b7089d4e2cf97fb6f3843fb83cf15266a0106326ff6c98616356e064b0749c
-SIZE (xpi/firefox-24.5.0/zu.xpi) = 340395
+SHA256 (xpi/firefox-24.6.0/ach.xpi) = 760eaa7d308061e43ba9c57e28ed6f26e3821d286f8425bcb06fe31fa4f375c3
+SIZE (xpi/firefox-24.6.0/ach.xpi) = 339946
+SHA256 (xpi/firefox-24.6.0/af.xpi) = 51aa87f6ff3126bbbc93a62554b3f1ff7c3405279a29acea57a0674a2e53d7c2
+SIZE (xpi/firefox-24.6.0/af.xpi) = 333184
+SHA256 (xpi/firefox-24.6.0/ak.xpi) = 205083dd4890ac6ec3e1b26595e63820fdcfc91d408a1c56d963b084673ed910
+SIZE (xpi/firefox-24.6.0/ak.xpi) = 340940
+SHA256 (xpi/firefox-24.6.0/ar.xpi) = eda2edbf07efa2f1f70c30b3bb699e5db353f7854b8aa1f7e9b8599576b2fca5
+SIZE (xpi/firefox-24.6.0/ar.xpi) = 360850
+SHA256 (xpi/firefox-24.6.0/as.xpi) = 2893b39b73b5ca71b5b562af155db917e5ac1aa0ab02941e400b9cd055346601
+SIZE (xpi/firefox-24.6.0/as.xpi) = 378085
+SHA256 (xpi/firefox-24.6.0/ast.xpi) = 38c5ef1342b84f6f399746a05a2fa03743d19955efa88c34bf33ff6b9bba95e0
+SIZE (xpi/firefox-24.6.0/ast.xpi) = 292876
+SHA256 (xpi/firefox-24.6.0/be.xpi) = 0bc49ac841663b42e769bf26da9f18649762896aef0ba92f5b8399d94219d91f
+SIZE (xpi/firefox-24.6.0/be.xpi) = 316955
+SHA256 (xpi/firefox-24.6.0/bg.xpi) = f7835756fbb5ffcc74359200b4f2be3a4a7eca275285a4e5412d076625d52e35
+SIZE (xpi/firefox-24.6.0/bg.xpi) = 373136
+SHA256 (xpi/firefox-24.6.0/bn-BD.xpi) = 1ab701bbf5183df5d89d67adc0fc39eca12b5650b5076d0bc06811e193c0febd
+SIZE (xpi/firefox-24.6.0/bn-BD.xpi) = 394939
+SHA256 (xpi/firefox-24.6.0/bn-IN.xpi) = 4934052d84af60e3232799c3a7f5e84d253902e68385344269d69bb2ee891f3c
+SIZE (xpi/firefox-24.6.0/bn-IN.xpi) = 427780
+SHA256 (xpi/firefox-24.6.0/br.xpi) = 812c636e08adbdcbebaf9aa3995ed842fe61dd2c5487543df093a8167d30c37f
+SIZE (xpi/firefox-24.6.0/br.xpi) = 330509
+SHA256 (xpi/firefox-24.6.0/bs.xpi) = 182ad06c417103df56cd9bac37b7392cafa54b23e38d7b811300ccfb7f4b90c9
+SIZE (xpi/firefox-24.6.0/bs.xpi) = 341620
+SHA256 (xpi/firefox-24.6.0/ca.xpi) = 0b49401392e73469a8296f8319f42e220ad3012db1dd6012c1b45ce8fb359e1d
+SIZE (xpi/firefox-24.6.0/ca.xpi) = 341257
+SHA256 (xpi/firefox-24.6.0/cs.xpi) = 87f456f90093e9443c0718ffc9b3eed2bc8992329203a888adf0c78872859960
+SIZE (xpi/firefox-24.6.0/cs.xpi) = 335946
+SHA256 (xpi/firefox-24.6.0/csb.xpi) = d878fc7e6240283850ddd85567b0e3007c73f3cf2242327f1ad6629ce9f79a23
+SIZE (xpi/firefox-24.6.0/csb.xpi) = 329796
+SHA256 (xpi/firefox-24.6.0/cy.xpi) = 7c9c7400ac93e04e5335d359516facb371b77535b86a4731c1fb310f3cd9c151
+SIZE (xpi/firefox-24.6.0/cy.xpi) = 330643
+SHA256 (xpi/firefox-24.6.0/da.xpi) = 018ed2c01fb9df4a83e39c7a25b4d0f2190a7f288d6f1fd6b817e44d29d5948d
+SIZE (xpi/firefox-24.6.0/da.xpi) = 326882
+SHA256 (xpi/firefox-24.6.0/de.xpi) = fbaba3f3356377bfc71de91a5943f473d661f2daba32a881e3def5ed5a1244e1
+SIZE (xpi/firefox-24.6.0/de.xpi) = 323258
+SHA256 (xpi/firefox-24.6.0/el.xpi) = c33759d7fe6e3a7f5117af81e82d29e9a05f9384825a8ba8e85943f84d8c4991
+SIZE (xpi/firefox-24.6.0/el.xpi) = 365320
+SHA256 (xpi/firefox-24.6.0/en-GB.xpi) = 886959f3bdd2f14d243812982c5fcc68af7acc742cfad0dc58e3d30fa790256e
+SIZE (xpi/firefox-24.6.0/en-GB.xpi) = 318297
+SHA256 (xpi/firefox-24.6.0/en-US.xpi) = 5fb0d62bf3e08c73db0086a5a4721f588dc4b8282d098aff52c83078f1751ce0
+SIZE (xpi/firefox-24.6.0/en-US.xpi) = 320993
+SHA256 (xpi/firefox-24.6.0/en-ZA.xpi) = 207ae891c739deded157f390981ead19120184df069a790d1ed84276df792ea9
+SIZE (xpi/firefox-24.6.0/en-ZA.xpi) = 319321
+SHA256 (xpi/firefox-24.6.0/eo.xpi) = 81818d5f309e35351691a2a8821f90a50772847b5f41bed6bbf01319fe7fb3c1
+SIZE (xpi/firefox-24.6.0/eo.xpi) = 334940
+SHA256 (xpi/firefox-24.6.0/es-AR.xpi) = 7e338148ffa757c40dfa2967b7df02af4865b059f4f50a6569f13355d5a5c1f0
+SIZE (xpi/firefox-24.6.0/es-AR.xpi) = 334010
+SHA256 (xpi/firefox-24.6.0/es-CL.xpi) = 586b97eaeb957c38c93b43499a7ee262622da5c107ebad53c5e0e6026053e12f
+SIZE (xpi/firefox-24.6.0/es-CL.xpi) = 287027
+SHA256 (xpi/firefox-24.6.0/es-ES.xpi) = b6ace28a3609016e7f3a54ce39383d0a62355d4a7f9a20e226aae6986247d619
+SIZE (xpi/firefox-24.6.0/es-ES.xpi) = 277859
+SHA256 (xpi/firefox-24.6.0/es-MX.xpi) = a98e55f3ed4d5541ebbae2c301ea76ed87aaaeffc6fbb5d100e30f043135719b
+SIZE (xpi/firefox-24.6.0/es-MX.xpi) = 302625
+SHA256 (xpi/firefox-24.6.0/et.xpi) = 857193177866e9ba9d77570c4398522c06e899a5ace1818546c37aa8e8862529
+SIZE (xpi/firefox-24.6.0/et.xpi) = 327697
+SHA256 (xpi/firefox-24.6.0/eu.xpi) = 1822d8c824126df5cd3f7819787173d009420fed02d9e858acd78140d8c4e8d4
+SIZE (xpi/firefox-24.6.0/eu.xpi) = 332422
+SHA256 (xpi/firefox-24.6.0/fa.xpi) = 4d4e10237d0e69a0aac83c7e4c5045a199bc0e263bb46b10e936d8a5484cb456
+SIZE (xpi/firefox-24.6.0/fa.xpi) = 375633
+SHA256 (xpi/firefox-24.6.0/ff.xpi) = 9fe433bed01296ccd02ce631bfbb8eb29cb87da27ce987dfe23bfff6c1a7bb5a
+SIZE (xpi/firefox-24.6.0/ff.xpi) = 332815
+SHA256 (xpi/firefox-24.6.0/fi.xpi) = 0023d056329ef77db77fcb85cecc5779a12575679be4aa7480a472fbf1a64fb2
+SIZE (xpi/firefox-24.6.0/fi.xpi) = 328892
+SHA256 (xpi/firefox-24.6.0/fr.xpi) = 204c57d85444cae922e51884a089158a47c5200fa7b67b5ff9be25b3a00b2ff4
+SIZE (xpi/firefox-24.6.0/fr.xpi) = 339178
+SHA256 (xpi/firefox-24.6.0/fy-NL.xpi) = 646692c071f645783c603e3221de9517443af146255354fcf98b2afe230d4924
+SIZE (xpi/firefox-24.6.0/fy-NL.xpi) = 336589
+SHA256 (xpi/firefox-24.6.0/ga-IE.xpi) = d03b520fc2f94bf4b5ff56a29f892a79b48ba3470d024a68cd7674b382c1a9e1
+SIZE (xpi/firefox-24.6.0/ga-IE.xpi) = 345294
+SHA256 (xpi/firefox-24.6.0/gd.xpi) = 110d017c8ca20a29dd940df750d7868d47297c0e8742ad6b05f36016068a4dc3
+SIZE (xpi/firefox-24.6.0/gd.xpi) = 344811
+SHA256 (xpi/firefox-24.6.0/gl.xpi) = 50579a1852c2b482aedf224ed2e520471dc9330263b7fb78ab790348b7c52693
+SIZE (xpi/firefox-24.6.0/gl.xpi) = 336919
+SHA256 (xpi/firefox-24.6.0/gu-IN.xpi) = c8bb7bb276c09cfed037179bf72ba5438b80636b5a700e5db9e84b3ee08edeae
+SIZE (xpi/firefox-24.6.0/gu-IN.xpi) = 359359
+SHA256 (xpi/firefox-24.6.0/he.xpi) = 46ef2e3b53745da0cad551efef985adb7933f0b6090c3e187dc4609b207608bd
+SIZE (xpi/firefox-24.6.0/he.xpi) = 354631
+SHA256 (xpi/firefox-24.6.0/hi-IN.xpi) = e0ce6c822817a759f08f2fd3978cff91ca010fd4712981a1c5fa2351d7e89be8
+SIZE (xpi/firefox-24.6.0/hi-IN.xpi) = 379121
+SHA256 (xpi/firefox-24.6.0/hr.xpi) = de54dbfb350806e3292859f48d3689ed4716c0dec7fefacc8f895538a3c0d1c0
+SIZE (xpi/firefox-24.6.0/hr.xpi) = 336841
+SHA256 (xpi/firefox-24.6.0/hu.xpi) = 1d279c602f65db04708f1670d192dad2c81823b4f8774ef472e11bf454571c03
+SIZE (xpi/firefox-24.6.0/hu.xpi) = 344103
+SHA256 (xpi/firefox-24.6.0/hy-AM.xpi) = 0b278c52903e631e9ebcebec5416ed82191ec5df9f3544d723747806f69d5425
+SIZE (xpi/firefox-24.6.0/hy-AM.xpi) = 385180
+SHA256 (xpi/firefox-24.6.0/id.xpi) = f152bb87a56aa251324922afc9e5b03d28b96a4cca0a307bb3af4a7d4c0cfb05
+SIZE (xpi/firefox-24.6.0/id.xpi) = 319795
+SHA256 (xpi/firefox-24.6.0/is.xpi) = cfd12ce9a56d5f7e909f59757b2bf88b03e662c56b451680550ce1cb72b93fd9
+SIZE (xpi/firefox-24.6.0/is.xpi) = 331826
+SHA256 (xpi/firefox-24.6.0/it.xpi) = 0eb5b78f7cd1e310e62abc916b108cc660bd55c4f3bb164fc904bf1edcfc6bf1
+SIZE (xpi/firefox-24.6.0/it.xpi) = 271926
+SHA256 (xpi/firefox-24.6.0/ja.xpi) = e3fe0983fc34d84e732975b74a45dd65e25b4bb5e63ebe4f9a4f8c3fc321b78c
+SIZE (xpi/firefox-24.6.0/ja.xpi) = 370904
+SHA256 (xpi/firefox-24.6.0/kk.xpi) = 71767c2c1d2d5925861bd56222f18d97b19923b36d07baaae11c1ceb113ad219
+SIZE (xpi/firefox-24.6.0/kk.xpi) = 377502
+SHA256 (xpi/firefox-24.6.0/km.xpi) = d41f31a75c2f84fa40ac71e74c6666e0838ebd2c8113cf9fbc67aa29f7b74142
+SIZE (xpi/firefox-24.6.0/km.xpi) = 400559
+SHA256 (xpi/firefox-24.6.0/kn.xpi) = 65ffea88d62e5fcb6b762f7d966d0744b5a46fc3efea8837f1c1abd2360737b5
+SIZE (xpi/firefox-24.6.0/kn.xpi) = 391034
+SHA256 (xpi/firefox-24.6.0/ko.xpi) = e03decad990bca524ca2f741f75951664b8cebbc48659804a2fe85227fae96fd
+SIZE (xpi/firefox-24.6.0/ko.xpi) = 346164
+SHA256 (xpi/firefox-24.6.0/ku.xpi) = 0c14fcab9c376ffd2f0a48782e405c608e3b10c6a3047337c0c3257e63e5a76e
+SIZE (xpi/firefox-24.6.0/ku.xpi) = 355632
+SHA256 (xpi/firefox-24.6.0/lg.xpi) = 4cdf9b295ecab6e8f4ee9d1829273878c18cb609f32594af76b1ce1a4bbbce5c
+SIZE (xpi/firefox-24.6.0/lg.xpi) = 351111
+SHA256 (xpi/firefox-24.6.0/lij.xpi) = 025d1ddc5446b554000feeeca66023aa3c4234aeba50cd7f1fb2461f404fecfb
+SIZE (xpi/firefox-24.6.0/lij.xpi) = 322703
+SHA256 (xpi/firefox-24.6.0/lt.xpi) = 9ada99285be0aef762953cf2c0a5ef1b1ce45d286787a883d0908d2176c1bebc
+SIZE (xpi/firefox-24.6.0/lt.xpi) = 352045
+SHA256 (xpi/firefox-24.6.0/lv.xpi) = dfac1a3f01537c6df9a39f05b5ac9c29fdedb3745120c07dc9dbe8bf200244d2
+SIZE (xpi/firefox-24.6.0/lv.xpi) = 328664
+SHA256 (xpi/firefox-24.6.0/mai.xpi) = ccd6b3cc898738961fedce93f5f21ce0e122e51bcd9c4fb4b2d795011cd93ecf
+SIZE (xpi/firefox-24.6.0/mai.xpi) = 379767
+SHA256 (xpi/firefox-24.6.0/mk.xpi) = 87a5117d48ae0b5cb2ad00087f0e33a5c41034197ac77f252d7f017fcc05ffa7
+SIZE (xpi/firefox-24.6.0/mk.xpi) = 376316
+SHA256 (xpi/firefox-24.6.0/ml.xpi) = 4d876e6121199dba2e2aaa801c30aa31137515e2ac0bbd54ec6705cf0c8803fa
+SIZE (xpi/firefox-24.6.0/ml.xpi) = 399677
+SHA256 (xpi/firefox-24.6.0/mr.xpi) = 9ab7192bdfa84253dc1fe4dd903e578bb2b8be53450361941d96f02ff1d909e7
+SIZE (xpi/firefox-24.6.0/mr.xpi) = 380232
+SHA256 (xpi/firefox-24.6.0/nb-NO.xpi) = 4d3fbcc7ab4fd6d9417e93e9bb2583633368268c3cf167686e9a7cc9aabb69b9
+SIZE (xpi/firefox-24.6.0/nb-NO.xpi) = 330966
+SHA256 (xpi/firefox-24.6.0/nl.xpi) = eb87f884362fd4593f386a8f86086f8c22fcfc225fb8abf96a9c6ff32c74b171
+SIZE (xpi/firefox-24.6.0/nl.xpi) = 331404
+SHA256 (xpi/firefox-24.6.0/nn-NO.xpi) = 3b039307b362d9712c7d046baaddf781b6a14cf3ffdef29a508bf951a3241b2c
+SIZE (xpi/firefox-24.6.0/nn-NO.xpi) = 333907
+SHA256 (xpi/firefox-24.6.0/nso.xpi) = 128fb0c052af4b3fff3d59d820560ce8c743090b7e70f637772917422e17d2cf
+SIZE (xpi/firefox-24.6.0/nso.xpi) = 336298
+SHA256 (xpi/firefox-24.6.0/or.xpi) = 2907e2f67266186499d845d4e5ca413e8567e619ccad58568e91ad304029910b
+SIZE (xpi/firefox-24.6.0/or.xpi) = 364593
+SHA256 (xpi/firefox-24.6.0/pa-IN.xpi) = 5359438a698deb45572471a959cc7dbcb60d667b99b38ca3289e52d657bb5514
+SIZE (xpi/firefox-24.6.0/pa-IN.xpi) = 365653
+SHA256 (xpi/firefox-24.6.0/pl.xpi) = 23d1a216333643bd4f3e24b5e72be7653fce4ac125ca28de28f957f081987457
+SIZE (xpi/firefox-24.6.0/pl.xpi) = 341995
+SHA256 (xpi/firefox-24.6.0/pt-BR.xpi) = 4dedb31cca4cf75d1a89b598d5eaaca4e4c61eba6c0eee2a8bfdec45dca7ae86
+SIZE (xpi/firefox-24.6.0/pt-BR.xpi) = 334606
+SHA256 (xpi/firefox-24.6.0/pt-PT.xpi) = 99a74250f123d9e5a53a45f8fae43c5b58a09c8856898f4a4eb87aedf9e1e65c
+SIZE (xpi/firefox-24.6.0/pt-PT.xpi) = 332739
+SHA256 (xpi/firefox-24.6.0/rm.xpi) = 444ae4667d29f81051d0f214eb70816daae1ae0f532d16d63c0fac562808b33f
+SIZE (xpi/firefox-24.6.0/rm.xpi) = 339698
+SHA256 (xpi/firefox-24.6.0/ro.xpi) = f6f3131386fc0b9f40c64f7e28f7c3309ddeca6b533915f2fbe11e3918a35936
+SIZE (xpi/firefox-24.6.0/ro.xpi) = 362236
+SHA256 (xpi/firefox-24.6.0/ru.xpi) = f23aabad84b0da7967eaf4741f39fda0a9491fca11f6b7551912388772d5169e
+SIZE (xpi/firefox-24.6.0/ru.xpi) = 322761
+SHA256 (xpi/firefox-24.6.0/si.xpi) = e0addba9bab8c09b8cf8ec58f776bd28018b66959f06dff56c2c657248fa6ac6
+SIZE (xpi/firefox-24.6.0/si.xpi) = 372982
+SHA256 (xpi/firefox-24.6.0/sk.xpi) = 8b513cb6acc9df9ae84800114bcf361a119f3f9e9c55b72ead5833fb111d9193
+SIZE (xpi/firefox-24.6.0/sk.xpi) = 347879
+SHA256 (xpi/firefox-24.6.0/sl.xpi) = cedb15a7b0a0b6ed54be366226634111fd8e9a547497dd7ed9196d698193cdd8
+SIZE (xpi/firefox-24.6.0/sl.xpi) = 331572
+SHA256 (xpi/firefox-24.6.0/son.xpi) = 34a568be2b0254416ed0ccd6f38fd56bafe6f7a048130c6b56ce107ca82cc107
+SIZE (xpi/firefox-24.6.0/son.xpi) = 328899
+SHA256 (xpi/firefox-24.6.0/sq.xpi) = 831722b244cc5c6b74a50f31303cd20ff47cfc29f52bad805dde8c021d9c4c8b
+SIZE (xpi/firefox-24.6.0/sq.xpi) = 340677
+SHA256 (xpi/firefox-24.6.0/sr.xpi) = 233297df3bfbd044c36bb7cf678690631b30bcdfee2fa8765aac36014708508f
+SIZE (xpi/firefox-24.6.0/sr.xpi) = 385108
+SHA256 (xpi/firefox-24.6.0/sv-SE.xpi) = 530ceff17481052717b8f32e8563ba53b05d837494f281d9ebf5a67c81549f56
+SIZE (xpi/firefox-24.6.0/sv-SE.xpi) = 333507
+SHA256 (xpi/firefox-24.6.0/ta-LK.xpi) = c9743edd650e1146744fe836ec09d6e330d3b30f66b72dfa41cca218ca9b619a
+SIZE (xpi/firefox-24.6.0/ta-LK.xpi) = 384155
+SHA256 (xpi/firefox-24.6.0/ta.xpi) = 18fc1bd29581ce6f748a16c097c4370b97b0febf8c74ae2975b168659e2f3002
+SIZE (xpi/firefox-24.6.0/ta.xpi) = 381423
+SHA256 (xpi/firefox-24.6.0/te.xpi) = 3812771caa640514ebc9abd1d170402b7fdaf53a447d355bd91ae13ec7746372
+SIZE (xpi/firefox-24.6.0/te.xpi) = 394563
+SHA256 (xpi/firefox-24.6.0/th.xpi) = 14288fe4d0d69795df4aa4fb40471b6398f536c1c00398aedcc539a9ce16ea2d
+SIZE (xpi/firefox-24.6.0/th.xpi) = 379823
+SHA256 (xpi/firefox-24.6.0/tr.xpi) = ac03cc9c2c401f15a4bc29d972831195b1465421fed09003f2fcd4351b8b652d
+SIZE (xpi/firefox-24.6.0/tr.xpi) = 340387
+SHA256 (xpi/firefox-24.6.0/uk.xpi) = 45f8bf56a2a503074ee2e234f6f336914f0bdba2b1dcfe8e7ed69bbb33ece252
+SIZE (xpi/firefox-24.6.0/uk.xpi) = 365699
+SHA256 (xpi/firefox-24.6.0/vi.xpi) = 9b2fb878254624d8c36cc87aeace3287e06811d457aeba13d1708111f13235b1
+SIZE (xpi/firefox-24.6.0/vi.xpi) = 358430
+SHA256 (xpi/firefox-24.6.0/zh-CN.xpi) = b0387855eb292541034e1b6840920065af40caaee4a1ad67da3bf022947aac61
+SIZE (xpi/firefox-24.6.0/zh-CN.xpi) = 358182
+SHA256 (xpi/firefox-24.6.0/zh-TW.xpi) = fe8aae3ab4b25e242ba2b284e029b9803285e7524bacdecc2af3954bcc5d642b
+SIZE (xpi/firefox-24.6.0/zh-TW.xpi) = 351833
+SHA256 (xpi/firefox-24.6.0/zu.xpi) = 4b2ade2bdf3f39900ae3f3b82b9677eca8f2350c6b9c4aff8ee8074c716c9314
+SIZE (xpi/firefox-24.6.0/zu.xpi) = 340395
diff --git a/www/firefox-esr/Makefile b/www/firefox-esr/Makefile
index c15bb69d18ff..85f838117fa8 100644
--- a/www/firefox-esr/Makefile
+++ b/www/firefox-esr/Makefile
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 24.5.0
-PORTREVISION= 1
+DISTVERSION= 24.6.0
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source
@@ -42,9 +41,8 @@ USE_QT4= # empty
QT_NONSTANDARD= yes
ALL_TARGET= default
GNU_CONFIGURE= yes
-USE_BZIP2= yes
USE_GL= gl
-USES= dos2unix
+USES= dos2unix tar:bzip2
DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
NO_MOZPKGINSTALL=yes
@@ -54,7 +52,6 @@ MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
--enable-application=browser \
--enable-official-branding
-NO_STAGE= yes
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
@@ -79,14 +76,9 @@ pre-configure:
(cd ${WRKSRC} && ${AUTOCONF})
(cd ${WRKSRC}/js/src/ && ${AUTOCONF})
-port-pre-install:
- ${ECHO_CMD} 'share/applications/${MOZILLA}.desktop' >> ${PLISTF}
- ${ECHO_CMD} 'share/pixmaps/${FIREFOX_ICON}' >> ${PLISTF}
-
post-install:
- ${MKDIR} ${PREFIX}/share/pixmaps
- ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${PREFIX}/share/applications/
- ${LN} -sf ${FIREFOX_ICON_SRC} ${PREFIX}/share/pixmaps/${FIREFOX_ICON}
- @${CAT} ${PKGMESSAGE}
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/
+ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON}
.include <bsd.port.post.mk>
diff --git a/www/firefox-esr/distinfo b/www/firefox-esr/distinfo
index b872161f5c4c..8137a3cde37b 100644
--- a/www/firefox-esr/distinfo
+++ b/www/firefox-esr/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-24.5.0esr.source.tar.bz2) = 1670e72511cad6047eb8726fa6c2362adcb95b5d53a3c327c4c38bed4b788701
-SIZE (firefox-24.5.0esr.source.tar.bz2) = 119830718
+SHA256 (firefox-24.6.0esr.source.tar.bz2) = 02ee0424ddefd912768a3ae700a4581053ef68f9dea46c34e43e833c119289e4
+SIZE (firefox-24.6.0esr.source.tar.bz2) = 119465935
diff --git a/www/firefox-esr/files/patch-bug1013675 b/www/firefox-esr/files/patch-bug1013675
new file mode 100644
index 000000000000..cb1b4d0f5ea7
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1013675
@@ -0,0 +1,89 @@
+diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
+index 13a286f..293bd73 100644
+--- xpcom/base/nsDebugImpl.cpp
++++ xpcom/base/nsDebugImpl.cpp
+@@ -45,13 +45,44 @@
+ #endif
+ #endif
+
+-#if defined(XP_MACOSX)
++#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <stdbool.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/sysctl.h>
+ #endif
+
++#if defined(__OpenBSD__)
++#include <sys/proc.h>
++#endif
++
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(XP_MACOSX)
++#define KP_FLAGS kp_proc.p_flag
++#elif defined(__DragonFly__)
++#define KP_FLAGS kp_flags
++#elif defined(__FreeBSD__)
++#define KP_FLAGS ki_flag
++#elif defined(__OpenBSD__) && !defined(_P_TRACED)
++#define KP_FLAGS p_psflags
++#define P_TRACED PS_TRACED
++#else
++#define KP_FLAGS p_flag
++#endif
++
+ #include "mozilla/mozalloc_abort.h"
+
+ static void
+@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+
+ #if defined(XP_WIN)
+ *aResult = ::IsDebuggerPresent();
+-#elif defined(XP_MACOSX)
++#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ // Specify the info we're looking for
+- int mib[4];
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_PROC;
+- mib[2] = KERN_PROC_PID;
+- mib[3] = getpid();
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
+ size_t mibSize = sizeof(mib) / sizeof(int);
+
+- struct kinfo_proc info;
++ KINFO_PROC info;
+ size_t infoSize = sizeof(info);
+ memset(&info, 0, infoSize);
+
+@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+ return NS_OK;
+ }
+
+- if (info.kp_proc.p_flag & P_TRACED) {
++ if (info.KP_FLAGS & P_TRACED) {
+ *aResult = true;
+ }
+ #endif
diff --git a/www/firefox-esr/files/patch-bug1015547 b/www/firefox-esr/files/patch-bug1015547
new file mode 100644
index 000000000000..df963e0de88c
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1015547
@@ -0,0 +1,94 @@
+diff --git configure.in configure.in
+index 7bed45f..053de17 100644
+--- configure.in
++++ configure.in
+@@ -3166,6 +3166,7 @@ AC_CHECK_FUNCS(random strerror lchown fc
+ AC_CHECK_FUNCS(statvfs64 statvfs statfs64 statfs)
+ AC_CHECK_FUNCS(flockfile getpagesize)
+ AC_CHECK_FUNCS(localtime_r strtok_r)
++AC_CHECK_FUNCS(arc4random arc4random_buf)
+
+ dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
+ AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
+diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
+index 0687344..ca3ff8b 100644
+--- xpcom/base/nsUUIDGenerator.cpp
++++ xpcom/base/nsUUIDGenerator.cpp
+@@ -15,6 +15,10 @@
+
+ #include "nsUUIDGenerator.h"
+
++#ifdef ANDROID
++extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
++#endif
++
+ using namespace mozilla;
+
+ NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
+@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
+ // We're a service, so we're guaranteed that Init() is not going
+ // to be reentered while we're inside Init().
+
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ /* initialize random number generator using NSPR random noise */
+ unsigned int seed;
+
+@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
+ return NS_ERROR_FAILURE;
+ #endif
+
+-#endif /* non XP_WIN and non XP_MACOSX */
++#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
+
+ return NS_OK;
+ }
+@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ * back to it; instead, we use the value returned when we called
+ * initstate, since older glibc's have broken setstate() return values
+ */
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ setstate(mState);
+ #endif
+
++#ifdef HAVE_ARC4RANDOM_BUF
++ arc4random_buf(id, sizeof(nsID));
++#else /* HAVE_ARC4RANDOM_BUF */
+ size_t bytesLeft = sizeof(nsID);
+ while (bytesLeft > 0) {
+-#ifdef ANDROID
++#ifdef HAVE_ARC4RANDOM
+ long rval = arc4random();
+ const size_t mRBytes = 4;
+ #else
+@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+
+ bytesLeft -= toWrite;
+ }
++#endif /* HAVE_ARC4RANDOM_BUF */
+
+ /* Put in the version */
+ id->m2 &= 0x0fff;
+@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ id->m3[0] &= 0x3f;
+ id->m3[0] |= 0x80;
+
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ /* Restore the previous RNG state */
+ setstate(mSavedState);
+ #endif
+diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
+index 6a24212..68ed6f2 100644
+--- xpcom/base/nsUUIDGenerator.h
++++ xpcom/base/nsUUIDGenerator.h
+@@ -27,7 +27,7 @@ private:
+ protected:
+
+ mozilla::Mutex mLock;
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ char mState[128];
+ char *mSavedState;
+ uint8_t mRBytes;
diff --git a/www/firefox-esr/files/patch-bug916589 b/www/firefox-esr/files/patch-bug916589
index 5748c3316f85..c6c6c58c9175 100644
--- a/www/firefox-esr/files/patch-bug916589
+++ b/www/firefox-esr/files/patch-bug916589
@@ -2,17 +2,8 @@ diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/qu
index 5b50785..7cf47d5 100644
--- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -31,11 +31,18 @@
- */
-
--#ifndef _SYS_QUEUE_H_
-+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
-+#include_next <sys/queue.h>
-+# if defined(__DragonFly__)
-+#define STAILQ_FOREACH_SAFE STAILQ_FOREACH_MUTABLE
-+#define TAILQ_FOREACH_SAFE TAILQ_FOREACH_MUTABLE
-+# endif
-+#elif !defined(_SYS_QUEUE_H_)
+@@ -33,9 +33,10 @@
+ #ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
-#if !defined(__FreeBSD__) && !defined(DARWIN)
@@ -24,7 +15,7 @@ index 5b50785..7cf47d5 100644
#endif
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +46,6 @@
+@@ -43,8 +44,6 @@
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
@@ -33,7 +24,7 @@ index 5b50785..7cf47d5 100644
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
-@@ -285,7 +286,7 @@ struct { \
+@@ -285,7 +284,7 @@ struct { \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
diff --git a/www/firefox-esr/files/patch-zz-bug517422 b/www/firefox-esr/files/patch-zz-bug517422
index acdd451854cd..1c3d05480bc2 100644
--- a/www/firefox-esr/files/patch-zz-bug517422
+++ b/www/firefox-esr/files/patch-zz-bug517422
@@ -178,7 +178,7 @@ index 87db361..7947626 100644
dnl = Disable Opus audio codec support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,76 @@ MOZ_ARG_DISABLE_BOOL(opus,
+@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
MOZ_OPUS=1)
dnl ========================================================
@@ -245,6 +245,27 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ _SAVE_CXXFLAGS=$CXXFLAGS
++ CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS"
++ AC_CACHE_CHECK(for soundtouch sample type,
++ ac_cv_soundtouch_sample_type,
++ [AC_TRY_COMPILE([#include <SoundTouch.h>
++ #ifndef SOUNDTOUCH_INTEGER_SAMPLES
++ #error soundtouch expects float samples
++ #endif],
++ [],
++ [ac_cv_soundtouch_sample_type=short],
++ [ac_cv_soundtouch_sample_type=float])])
++ CXXFLAGS=$_SAVE_CXXFLAGS
++ AC_LANG_RESTORE
++
++ if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \
++ -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then
++ AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.])
++ fi
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile
index c1287e5047ae..99f14efe8d43 100644
--- a/www/firefox-i18n/Makefile
+++ b/www/firefox-i18n/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox-i18n
-PORTVERSION= 29.0
+PORTVERSION= 30.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi
PKGNAMEPREFIX=
@@ -14,7 +14,7 @@ COMMENT= Localized interface for Firefox
EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip
-USES= zip:infozip gecko:firefox,29
+USES= zip:infozip gecko:firefox,30
USE_XPI= firefox linux-firefox
NO_ARCH= yes
diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo
index 2c33b60cfb34..9497c4a6374e 100644
--- a/www/firefox-i18n/distinfo
+++ b/www/firefox-i18n/distinfo
@@ -1,176 +1,170 @@
-SHA256 (xpi/firefox-i18n-29.0/ach.xpi) = c6ccf91e05b119f39b0d83905ed143e36187649f62389156803a76318300a299
-SIZE (xpi/firefox-i18n-29.0/ach.xpi) = 373393
-SHA256 (xpi/firefox-i18n-29.0/af.xpi) = adf809368117ba8499a6e2f99b331ab32b62c499ba1174e2fe0918f72819e2b3
-SIZE (xpi/firefox-i18n-29.0/af.xpi) = 367124
-SHA256 (xpi/firefox-i18n-29.0/an.xpi) = a82aa53f398d619cdc203adc4b904b58d7f281550d8f631439c53269fa56a4bd
-SIZE (xpi/firefox-i18n-29.0/an.xpi) = 373502
-SHA256 (xpi/firefox-i18n-29.0/ar.xpi) = 9dd29397169946d0ea425483c2c3c60f67d8dbc784b3af302416c36aa0b82cae
-SIZE (xpi/firefox-i18n-29.0/ar.xpi) = 396597
-SHA256 (xpi/firefox-i18n-29.0/as.xpi) = 2f3a75d484e415551f9d19fb56c8208d6f65beab8db582b7d62f760f1f2f67f4
-SIZE (xpi/firefox-i18n-29.0/as.xpi) = 415330
-SHA256 (xpi/firefox-i18n-29.0/ast.xpi) = f232691daac61375b54312e6ef04cf4edb1270bc569694516d65c9a07f14f033
-SIZE (xpi/firefox-i18n-29.0/ast.xpi) = 324861
-SHA256 (xpi/firefox-i18n-29.0/be.xpi) = 46d25d6aef317349a915d99ee46325ae4de2947dbfd774343c5093f46b5ce098
-SIZE (xpi/firefox-i18n-29.0/be.xpi) = 340365
-SHA256 (xpi/firefox-i18n-29.0/bg.xpi) = a13eaeda2a8e664cb6849b5073b7da6bbf524b1038d40bda6a2b1c61314e6c07
-SIZE (xpi/firefox-i18n-29.0/bg.xpi) = 400750
-SHA256 (xpi/firefox-i18n-29.0/bn-BD.xpi) = be518dbeff0b3e15b28a196bd31c314b67b0c0116ae20c910b93b3a4b27f67d0
-SIZE (xpi/firefox-i18n-29.0/bn-BD.xpi) = 426365
-SHA256 (xpi/firefox-i18n-29.0/bn-IN.xpi) = cd49bf2e39e388ac3ae8f74df4e823f6a7a8ceec6da44fba7c0b59f09179a62d
-SIZE (xpi/firefox-i18n-29.0/bn-IN.xpi) = 421119
-SHA256 (xpi/firefox-i18n-29.0/br.xpi) = 1ba6c16865e0181fea267e45e7f4c87a8518f615b522aea9fb952ec94b984bd2
-SIZE (xpi/firefox-i18n-29.0/br.xpi) = 363996
-SHA256 (xpi/firefox-i18n-29.0/bs.xpi) = e968879eda41d0f96e35a21936d883c92110d40497e247a6510977c167dab4aa
-SIZE (xpi/firefox-i18n-29.0/bs.xpi) = 371223
-SHA256 (xpi/firefox-i18n-29.0/ca.xpi) = 602eaef7df208c516efeb4333a050e3433e0f3baad901fe0ea6278ba6678a576
-SIZE (xpi/firefox-i18n-29.0/ca.xpi) = 370413
-SHA256 (xpi/firefox-i18n-29.0/cs.xpi) = 7c57f8242a5c9c7ebfeb22fe24c4d6906a378c9c95e95de22a8fb8020911d0a2
-SIZE (xpi/firefox-i18n-29.0/cs.xpi) = 364875
-SHA256 (xpi/firefox-i18n-29.0/csb.xpi) = 86ffb57f543e8efca951974214f9f84b036c42ed9cb8d0d90974fa6691f2e0fe
-SIZE (xpi/firefox-i18n-29.0/csb.xpi) = 355955
-SHA256 (xpi/firefox-i18n-29.0/cy.xpi) = 7e41a6edfc20ca0ef55f8e2e34740521b87f36f48ee97dfcad69b25be0f235c6
-SIZE (xpi/firefox-i18n-29.0/cy.xpi) = 364982
-SHA256 (xpi/firefox-i18n-29.0/da.xpi) = f31a19e5512cf07b40548c676d5e53003734bb72d1898d8fe5a0d92d6cbab868
-SIZE (xpi/firefox-i18n-29.0/da.xpi) = 355875
-SHA256 (xpi/firefox-i18n-29.0/de.xpi) = f1e7a8b7b71373bd566c35559667a4da73b92fe86aebfd7acb0b24f2b0090895
-SIZE (xpi/firefox-i18n-29.0/de.xpi) = 363985
-SHA256 (xpi/firefox-i18n-29.0/el.xpi) = 28ce4ac766d10aef112451128ffe56119e972bfe9210a052c534945dee829820
-SIZE (xpi/firefox-i18n-29.0/el.xpi) = 397064
-SHA256 (xpi/firefox-i18n-29.0/en-GB.xpi) = 27e1a9560dacc0b8665f0bf4155669a208a934684fafe8907ee88e1c7927cdd2
-SIZE (xpi/firefox-i18n-29.0/en-GB.xpi) = 352794
-SHA256 (xpi/firefox-i18n-29.0/en-US.xpi) = 0b665ea8cbec2a5db2d130827c3aeb8be79133a611b0241ee11198d2a68cfcfe
-SIZE (xpi/firefox-i18n-29.0/en-US.xpi) = 352631
-SHA256 (xpi/firefox-i18n-29.0/en-ZA.xpi) = 00c54af05c8428e387409359f403993f1a141da9a30d4925a92be57fdbfb0eb7
-SIZE (xpi/firefox-i18n-29.0/en-ZA.xpi) = 343162
-SHA256 (xpi/firefox-i18n-29.0/eo.xpi) = f9f6f9071d6b8c128495ed95620180756112647eb76d680583957763ec63554d
-SIZE (xpi/firefox-i18n-29.0/eo.xpi) = 369151
-SHA256 (xpi/firefox-i18n-29.0/es-AR.xpi) = 269b4e8486ffb176a1a5082203398ed7f7c398ee0a3377888319431f1697a380
-SIZE (xpi/firefox-i18n-29.0/es-AR.xpi) = 367827
-SHA256 (xpi/firefox-i18n-29.0/es-CL.xpi) = 13c7a3fed0b61018161e45dd20ce6130583b68f270d4a71f4a1703be26d7dc46
-SIZE (xpi/firefox-i18n-29.0/es-CL.xpi) = 314748
-SHA256 (xpi/firefox-i18n-29.0/es-ES.xpi) = e50a73028675b28b8f60094731c96b24713178025a491aa24bacb805dd554e71
-SIZE (xpi/firefox-i18n-29.0/es-ES.xpi) = 305433
-SHA256 (xpi/firefox-i18n-29.0/es-MX.xpi) = a1966155e366c8b9eeaa87eb1d6e76a3c187c3bf6701b27b68c21b41627097cf
-SIZE (xpi/firefox-i18n-29.0/es-MX.xpi) = 372449
-SHA256 (xpi/firefox-i18n-29.0/et.xpi) = 1091cb9efa635996c0c9458a62aeaf03023bbaf2428b291ef2d0993ed9139609
-SIZE (xpi/firefox-i18n-29.0/et.xpi) = 352878
-SHA256 (xpi/firefox-i18n-29.0/eu.xpi) = a09f19ceb466f2c7a2e46b4a1f2dec3775d9b0d9a670ba04733b2ae7afbcbda9
-SIZE (xpi/firefox-i18n-29.0/eu.xpi) = 369441
-SHA256 (xpi/firefox-i18n-29.0/fa.xpi) = f27dca27d9215deae207b4ca38e7260421d74fd482eb8a1ddc6d6d0e39c1bc36
-SIZE (xpi/firefox-i18n-29.0/fa.xpi) = 409149
-SHA256 (xpi/firefox-i18n-29.0/ff.xpi) = 23be65bdb50c441ea75e5f3ed143160091a70191192dd4405da7f5a2d7335587
-SIZE (xpi/firefox-i18n-29.0/ff.xpi) = 361587
-SHA256 (xpi/firefox-i18n-29.0/fi.xpi) = 1dc290cf22dcfab88dcb7bdb0a2ecaad4be6163ee1bd8af13f4962ed037c1a11
-SIZE (xpi/firefox-i18n-29.0/fi.xpi) = 363340
-SHA256 (xpi/firefox-i18n-29.0/fr.xpi) = ada8b98915422b83aa4c62bf514456a27e9cedc82ddb6377178ce396f10729a3
-SIZE (xpi/firefox-i18n-29.0/fr.xpi) = 376279
-SHA256 (xpi/firefox-i18n-29.0/fy-NL.xpi) = 6a4d8b5ac760d8860aba66c779f302e19955fd5a232c237297dde3974b72cb25
-SIZE (xpi/firefox-i18n-29.0/fy-NL.xpi) = 372388
-SHA256 (xpi/firefox-i18n-29.0/ga-IE.xpi) = 25f92f7562f119c97189290f8e4746223d2db2ddf3fd260e3ce246119bcfb483
-SIZE (xpi/firefox-i18n-29.0/ga-IE.xpi) = 378267
-SHA256 (xpi/firefox-i18n-29.0/gd.xpi) = b6f370e9e0b6c8d7c9840999d185c50dc9832ba15691c6c2c2f61dd099bf4912
-SIZE (xpi/firefox-i18n-29.0/gd.xpi) = 375410
-SHA256 (xpi/firefox-i18n-29.0/gl.xpi) = b9e476f99b13b29fd84189283b9a7641ee41d641c171a4fa3587493bcb329a97
-SIZE (xpi/firefox-i18n-29.0/gl.xpi) = 363693
-SHA256 (xpi/firefox-i18n-29.0/gu-IN.xpi) = 1730b390f911b26f1d5107cdf79e9dedf1a970be7da9de96010ff1e83da3a1b0
-SIZE (xpi/firefox-i18n-29.0/gu-IN.xpi) = 391891
-SHA256 (xpi/firefox-i18n-29.0/he.xpi) = 5c62998721b69b83e63b4ec107a62e08d03d482c84de2fb3fc2c0844ab1f2315
-SIZE (xpi/firefox-i18n-29.0/he.xpi) = 385480
-SHA256 (xpi/firefox-i18n-29.0/hi-IN.xpi) = 19774e11ea7d30fa748f3d1aedce3c642dfcf83d3eacde963acf16ea38960a0a
-SIZE (xpi/firefox-i18n-29.0/hi-IN.xpi) = 410179
-SHA256 (xpi/firefox-i18n-29.0/hr.xpi) = 17240437b1e72eac60776cb3a307d60cbd59abd0444eee475fca8396ef52817f
-SIZE (xpi/firefox-i18n-29.0/hr.xpi) = 376605
-SHA256 (xpi/firefox-i18n-29.0/hu.xpi) = 518c74f77b1150ee0a17b94cafe09f3b1a84f972bf0fc6912a7ab32f5aedba08
-SIZE (xpi/firefox-i18n-29.0/hu.xpi) = 372533
-SHA256 (xpi/firefox-i18n-29.0/hy-AM.xpi) = 3052a32a950786aa0e540d4b4ae134d43def23141670c3625bcc9c0f35ad22c3
-SIZE (xpi/firefox-i18n-29.0/hy-AM.xpi) = 419572
-SHA256 (xpi/firefox-i18n-29.0/id.xpi) = 9f8d98a8b1546072a3675383252fbef3fd0fa9c4c41c3d3a9e1e50bb19535019
-SIZE (xpi/firefox-i18n-29.0/id.xpi) = 352597
-SHA256 (xpi/firefox-i18n-29.0/is.xpi) = 021226df2158678fecc9d0958b8a9a27a3cd70e584c9f34d0c7fa444870d78ad
-SIZE (xpi/firefox-i18n-29.0/is.xpi) = 364694
-SHA256 (xpi/firefox-i18n-29.0/it.xpi) = 80dde52c62e44e3706c3a228f091c1473bd871f3428c8efa0338890310b954f5
-SIZE (xpi/firefox-i18n-29.0/it.xpi) = 304003
-SHA256 (xpi/firefox-i18n-29.0/ja.xpi) = 5f23242ee1cd8045abd7564a095c5ba11bd98283b1530f1e3c29cf5fbce362c4
-SIZE (xpi/firefox-i18n-29.0/ja.xpi) = 405190
-SHA256 (xpi/firefox-i18n-29.0/kk.xpi) = b608322fe2364a15c2f96ed88449dfac1a71621081489677015aba1593eac32a
-SIZE (xpi/firefox-i18n-29.0/kk.xpi) = 408438
-SHA256 (xpi/firefox-i18n-29.0/km.xpi) = a86a3d15e836df6f767b7af53ec3cbe9c329716adfacbe14811739c878365d8d
-SIZE (xpi/firefox-i18n-29.0/km.xpi) = 438772
-SHA256 (xpi/firefox-i18n-29.0/kn.xpi) = 06bc663cf5bd3c70895ba07133cbe14adf36f08a1c375d8e3a9083ab4cda8981
-SIZE (xpi/firefox-i18n-29.0/kn.xpi) = 421792
-SHA256 (xpi/firefox-i18n-29.0/ko.xpi) = eda45d7394b912213cd1e724cf8b45126c7f60cc15cc7289b11c1abb7112b0e1
-SIZE (xpi/firefox-i18n-29.0/ko.xpi) = 372824
-SHA256 (xpi/firefox-i18n-29.0/ku.xpi) = 6fed426902356d91a149187050e97a88b590064be33a996229e328c9ac2ddb5a
-SIZE (xpi/firefox-i18n-29.0/ku.xpi) = 377944
-SHA256 (xpi/firefox-i18n-29.0/lij.xpi) = ffcc04ba6231154b7129225b4f8a62ff81c942940b8d055f38d2c770da5baa46
-SIZE (xpi/firefox-i18n-29.0/lij.xpi) = 353132
-SHA256 (xpi/firefox-i18n-29.0/lt.xpi) = 5f0ab5186966f4ef688d089cc1c02256fd58009023b1a65087243cf47898877d
-SIZE (xpi/firefox-i18n-29.0/lt.xpi) = 382910
-SHA256 (xpi/firefox-i18n-29.0/lv.xpi) = 7904ce0bd050e3c7bdc5047af6a8483ec6353d7180bf638f73dc4e86caec41cd
-SIZE (xpi/firefox-i18n-29.0/lv.xpi) = 360720
-SHA256 (xpi/firefox-i18n-29.0/mai.xpi) = c900355b017b2d6f823749eb2b59e7138885a106a3f935be9a7e91f50e50380b
-SIZE (xpi/firefox-i18n-29.0/mai.xpi) = 410012
-SHA256 (xpi/firefox-i18n-29.0/mk.xpi) = 2beb5a8a7c8d4a824b8901a6cbcaf81297347c4b83b1b55bab8855e0e5e87e6b
-SIZE (xpi/firefox-i18n-29.0/mk.xpi) = 411450
-SHA256 (xpi/firefox-i18n-29.0/ml.xpi) = 49995a410b48b0c53ff4994633602f868796c24a28d54bd1260b1f43adc79475
-SIZE (xpi/firefox-i18n-29.0/ml.xpi) = 430792
-SHA256 (xpi/firefox-i18n-29.0/mr.xpi) = 87bd2e7b71bcc21458b5d44dd83d9f2eeb461c53cd74c4a76d4eb2a6cba033c1
-SIZE (xpi/firefox-i18n-29.0/mr.xpi) = 408570
-SHA256 (xpi/firefox-i18n-29.0/ms.xpi) = 07a8b2295a6633ec838a6c8a431faff915b5f92e60d3c36aa92f1d6697bd8a49
-SIZE (xpi/firefox-i18n-29.0/ms.xpi) = 368830
-SHA256 (xpi/firefox-i18n-29.0/nb-NO.xpi) = afea740e93a87b7821fcf7885f8c44d8dcd865d1e2418d05530299ca2471a2d3
-SIZE (xpi/firefox-i18n-29.0/nb-NO.xpi) = 362513
-SHA256 (xpi/firefox-i18n-29.0/nl.xpi) = 36dd807b1b080c45a6b68fae77843d30f4cf7291bd29a61a8cebd509aeb470cd
-SIZE (xpi/firefox-i18n-29.0/nl.xpi) = 361308
-SHA256 (xpi/firefox-i18n-29.0/nn-NO.xpi) = 9522236bee6c980595ce05f9320d915a31b272a28a878eeab867329357156a9a
-SIZE (xpi/firefox-i18n-29.0/nn-NO.xpi) = 358819
-SHA256 (xpi/firefox-i18n-29.0/or.xpi) = 2b78878aa2c06143887d7f7c1f73f3c2d5c98cba58e06df5d96ecfbf9888e143
-SIZE (xpi/firefox-i18n-29.0/or.xpi) = 423772
-SHA256 (xpi/firefox-i18n-29.0/pa-IN.xpi) = 3a372d31c10dfc267cc381974a365eb4b44b6dd70d3054ac624f84fe3b41801c
-SIZE (xpi/firefox-i18n-29.0/pa-IN.xpi) = 401685
-SHA256 (xpi/firefox-i18n-29.0/pl.xpi) = 950ed718076217f4ee11c0a21cdc59005b06757af81a4d5cd028d00dc853c3b0
-SIZE (xpi/firefox-i18n-29.0/pl.xpi) = 354459
-SHA256 (xpi/firefox-i18n-29.0/pt-BR.xpi) = 28d5e2814fa7ac74b9ce44c73b1680d6b2360820f51d373c81fc4fc8304b7a7f
-SIZE (xpi/firefox-i18n-29.0/pt-BR.xpi) = 372122
-SHA256 (xpi/firefox-i18n-29.0/pt-PT.xpi) = fd74a1e2243899aae3c39e46a2d101338afa10da731a60f1b94ba6deffa2a9b2
-SIZE (xpi/firefox-i18n-29.0/pt-PT.xpi) = 359723
-SHA256 (xpi/firefox-i18n-29.0/rm.xpi) = 9ed40581c971918ea80b17e21acc8b331519b82ee322c6829e482edda6867914
-SIZE (xpi/firefox-i18n-29.0/rm.xpi) = 362965
-SHA256 (xpi/firefox-i18n-29.0/ro.xpi) = d237497e017ef6764fae81477b1ad6593d6d03c432641e14bc87e88cb1ab30c8
-SIZE (xpi/firefox-i18n-29.0/ro.xpi) = 397540
-SHA256 (xpi/firefox-i18n-29.0/ru.xpi) = 5c58a458ce5aa0cb974bd7c750dd155dd0080385bfe97344bb07ca7070d46f1e
-SIZE (xpi/firefox-i18n-29.0/ru.xpi) = 344166
-SHA256 (xpi/firefox-i18n-29.0/si.xpi) = f423bc581a57d4f1e315d3f4e591eee9b0b34b0ad26c7356957684ea80607371
-SIZE (xpi/firefox-i18n-29.0/si.xpi) = 403345
-SHA256 (xpi/firefox-i18n-29.0/sk.xpi) = c6e1d20bb1cead467ef3a4782e48f72fe9d577d2e5bf40aafe0f0700f6d86f88
-SIZE (xpi/firefox-i18n-29.0/sk.xpi) = 375676
-SHA256 (xpi/firefox-i18n-29.0/sl.xpi) = c5b6e6aed27cfa73480b89134786f2a450d4fe0f1879389262f0f6dc9892bcd2
-SIZE (xpi/firefox-i18n-29.0/sl.xpi) = 358502
-SHA256 (xpi/firefox-i18n-29.0/son.xpi) = 482834fa2c49c3bddfb48127d83258c1dde5dfc0cc5fd17fd66304fa65e6dcd8
-SIZE (xpi/firefox-i18n-29.0/son.xpi) = 358441
-SHA256 (xpi/firefox-i18n-29.0/sq.xpi) = f001eece8b1b7fc9eec35084679155802062fedd1aa096c2ba74be8e22682131
-SIZE (xpi/firefox-i18n-29.0/sq.xpi) = 374244
-SHA256 (xpi/firefox-i18n-29.0/sr.xpi) = f590d1a96a5231b4a448ca27bde8ffd2a3721f5c8d628475e4705980013d4c21
-SIZE (xpi/firefox-i18n-29.0/sr.xpi) = 412774
-SHA256 (xpi/firefox-i18n-29.0/sv-SE.xpi) = ccb78f6c29e470b15df6c0b0a1a9186ea6da1e95a01c5acf88d6d5663c0ddd37
-SIZE (xpi/firefox-i18n-29.0/sv-SE.xpi) = 368437
-SHA256 (xpi/firefox-i18n-29.0/ta.xpi) = 3a240719bae5fdd5f1dee8502a573c68d496dbcbb89e40fa2588a8f8cded48d1
-SIZE (xpi/firefox-i18n-29.0/ta.xpi) = 416214
-SHA256 (xpi/firefox-i18n-29.0/te.xpi) = 1a42033323e58bb24a230ccc547498d6b54864e6566ce38f97c8f5bc9dc802b1
-SIZE (xpi/firefox-i18n-29.0/te.xpi) = 429025
-SHA256 (xpi/firefox-i18n-29.0/th.xpi) = 9c91150755449786b400af12067d648f5751e78396bf72f9c604874dcdee5f11
-SIZE (xpi/firefox-i18n-29.0/th.xpi) = 413958
-SHA256 (xpi/firefox-i18n-29.0/tr.xpi) = 49c22b8f7384f83249cd1468e14f9aea657a4196fcf11125bfc44e112b6f93cb
-SIZE (xpi/firefox-i18n-29.0/tr.xpi) = 369613
-SHA256 (xpi/firefox-i18n-29.0/uk.xpi) = 2f232cc5a4e4b72e11e4751be8667f5c532952ba5864369e07a9438c25afc317
-SIZE (xpi/firefox-i18n-29.0/uk.xpi) = 399496
-SHA256 (xpi/firefox-i18n-29.0/vi.xpi) = e210ec8c8f985d5c6e31e37e191c35d270c310c647cb6e32cc1bf35e93194348
-SIZE (xpi/firefox-i18n-29.0/vi.xpi) = 386470
-SHA256 (xpi/firefox-i18n-29.0/xh.xpi) = 693c3c04abe48a7bf8e0c13c8192451bb70687581b79da13bf2905499c2150e8
-SIZE (xpi/firefox-i18n-29.0/xh.xpi) = 363925
-SHA256 (xpi/firefox-i18n-29.0/zh-CN.xpi) = fe6b9bb7d2dd6227fb6ea3b5ad7ecca1fb02105f10cecefc232aa9f7bc0c7096
-SIZE (xpi/firefox-i18n-29.0/zh-CN.xpi) = 389326
-SHA256 (xpi/firefox-i18n-29.0/zh-TW.xpi) = 34cf42493ffa140f869b48d6deaa10d43664e7dd7bfea6bd4a979062ef476bc1
-SIZE (xpi/firefox-i18n-29.0/zh-TW.xpi) = 386290
-SHA256 (xpi/firefox-i18n-29.0/zu.xpi) = 0ba903dcf73dcd6255e81eb049c0660eb876caef4c83b5ffbc5e1470a5918bc6
-SIZE (xpi/firefox-i18n-29.0/zu.xpi) = 373428
+SHA256 (xpi/firefox-i18n-30.0/ach.xpi) = f5053187ef0c83bf72bd5c71ab09a7ddc1e63baefb416ac1d6b68ba2314ac701
+SIZE (xpi/firefox-i18n-30.0/ach.xpi) = 375205
+SHA256 (xpi/firefox-i18n-30.0/af.xpi) = 1f39dc94db67d1b0f936a21237d98c25fd452a69636e53c6d7ece6c844307c39
+SIZE (xpi/firefox-i18n-30.0/af.xpi) = 369085
+SHA256 (xpi/firefox-i18n-30.0/ar.xpi) = ec7beaee554067af17a3a62220b8f038f75b618a186d2eb73ec948056765c428
+SIZE (xpi/firefox-i18n-30.0/ar.xpi) = 397913
+SHA256 (xpi/firefox-i18n-30.0/as.xpi) = cf9716f7b62bd6f34bb453420dec17a039199d11197c1920553ab299c496d654
+SIZE (xpi/firefox-i18n-30.0/as.xpi) = 416813
+SHA256 (xpi/firefox-i18n-30.0/ast.xpi) = fd83fe909ecb39803f0f7b43d159f34be70d2975584b4246d3625da72f8de09a
+SIZE (xpi/firefox-i18n-30.0/ast.xpi) = 321937
+SHA256 (xpi/firefox-i18n-30.0/be.xpi) = 325f8bddf7131f3e7a4a2daa8c632848ade0557bdfe8f8591898c9266ea6349f
+SIZE (xpi/firefox-i18n-30.0/be.xpi) = 341619
+SHA256 (xpi/firefox-i18n-30.0/bg.xpi) = b0603d804c90164d3059b86036e67d3f12491c5b698e51ac03f57c909effc2e6
+SIZE (xpi/firefox-i18n-30.0/bg.xpi) = 406716
+SHA256 (xpi/firefox-i18n-30.0/bn-BD.xpi) = 3e044ca099473c577e8849605d3341ab51bafc939e79713da7cb85193b29be77
+SIZE (xpi/firefox-i18n-30.0/bn-BD.xpi) = 428542
+SHA256 (xpi/firefox-i18n-30.0/bn-IN.xpi) = 9dcb9cff07bf636bedf835bb373fa4bc35260824d9d505c4a09fa1f0a1bf9ce4
+SIZE (xpi/firefox-i18n-30.0/bn-IN.xpi) = 426490
+SHA256 (xpi/firefox-i18n-30.0/br.xpi) = 43c85f1d81bc421104577519cd5bee9aaa3893627fd4540cbb24b2e2275f1a6b
+SIZE (xpi/firefox-i18n-30.0/br.xpi) = 365142
+SHA256 (xpi/firefox-i18n-30.0/bs.xpi) = c1efd1ae60586b16e50f61d20ffaf41e836c62e7371e3f2bda8e8e45f39bcd31
+SIZE (xpi/firefox-i18n-30.0/bs.xpi) = 373273
+SHA256 (xpi/firefox-i18n-30.0/ca.xpi) = 5f20854d7168d20f5b595ff415ca50417a2ad5e39f7bbe0f6f67a9eaede2aaf6
+SIZE (xpi/firefox-i18n-30.0/ca.xpi) = 371485
+SHA256 (xpi/firefox-i18n-30.0/cs.xpi) = 3197bcc9e38f2b5720a0ae1aa9ed61ebcde6518e675e0ed98c8d3d0feee4d512
+SIZE (xpi/firefox-i18n-30.0/cs.xpi) = 366052
+SHA256 (xpi/firefox-i18n-30.0/csb.xpi) = 989e01fbdf3516295429d3da58331078c9e41ba79ae31e24f34d9c828fbd9944
+SIZE (xpi/firefox-i18n-30.0/csb.xpi) = 358268
+SHA256 (xpi/firefox-i18n-30.0/cy.xpi) = b2327cac42ebd5880653f7ed02835b3a0b85441a0d514d72518231acc32e5dea
+SIZE (xpi/firefox-i18n-30.0/cy.xpi) = 366034
+SHA256 (xpi/firefox-i18n-30.0/da.xpi) = 2a0b1447de518bd3c714dd0fa023ae0f3189d98b6035eeb8e2f87f1a37bf4c1f
+SIZE (xpi/firefox-i18n-30.0/da.xpi) = 356771
+SHA256 (xpi/firefox-i18n-30.0/de.xpi) = fefa0eee68d3cae832e9afee0a64271b7dd621c0d14479eec472c28a8bb55f25
+SIZE (xpi/firefox-i18n-30.0/de.xpi) = 366021
+SHA256 (xpi/firefox-i18n-30.0/el.xpi) = b70382f47ff0e0999d4b9ff13e13eabee4ac6771ce1d3560b7fbfd1e6452b76b
+SIZE (xpi/firefox-i18n-30.0/el.xpi) = 398962
+SHA256 (xpi/firefox-i18n-30.0/en-GB.xpi) = 4fae63b6e5236ef8f21e411165aa1919bb285fe0bb3905d7daf00c6a3cccd480
+SIZE (xpi/firefox-i18n-30.0/en-GB.xpi) = 353587
+SHA256 (xpi/firefox-i18n-30.0/en-US.xpi) = 73879a12023d35214a85cff0d722652f669dba1e62631e815e7b850dfb403e69
+SIZE (xpi/firefox-i18n-30.0/en-US.xpi) = 353451
+SHA256 (xpi/firefox-i18n-30.0/en-ZA.xpi) = 9750f4362f8304c5665153d008ae3b158249a7cba5bd3a79cef7e822959c4bef
+SIZE (xpi/firefox-i18n-30.0/en-ZA.xpi) = 345015
+SHA256 (xpi/firefox-i18n-30.0/eo.xpi) = 0f77949f980f8037484f5a3ce2669d732f036772ccecfcb16ced1decc53a9f1b
+SIZE (xpi/firefox-i18n-30.0/eo.xpi) = 370141
+SHA256 (xpi/firefox-i18n-30.0/es-AR.xpi) = 263d318d53cd9e64c0a3f4122fa399f4fcbf528c7151dce352f4084e1784f2cd
+SIZE (xpi/firefox-i18n-30.0/es-AR.xpi) = 368587
+SHA256 (xpi/firefox-i18n-30.0/es-CL.xpi) = 7bfbb5aa80e61082736383b01190d97c3b066f97c79cef479c97322695267f7f
+SIZE (xpi/firefox-i18n-30.0/es-CL.xpi) = 315322
+SHA256 (xpi/firefox-i18n-30.0/es-ES.xpi) = a42b61243fc1596f5352daf6bf27ecf27c0eb70d960bfcfb401c7dc9b22b0bad
+SIZE (xpi/firefox-i18n-30.0/es-ES.xpi) = 306415
+SHA256 (xpi/firefox-i18n-30.0/es-MX.xpi) = 077a9c0741e8c6dfe560c11503700713fa46c31f26436d7ab482ccda93a9b6bb
+SIZE (xpi/firefox-i18n-30.0/es-MX.xpi) = 373549
+SHA256 (xpi/firefox-i18n-30.0/et.xpi) = b3405694ba783f2b4724ee77438d43c5bb9fa9c99b062179da83359b75def75e
+SIZE (xpi/firefox-i18n-30.0/et.xpi) = 353707
+SHA256 (xpi/firefox-i18n-30.0/eu.xpi) = 470e1e96f57a1d34b657446a226305729ac9e4cfee102eba603c252c9a176596
+SIZE (xpi/firefox-i18n-30.0/eu.xpi) = 369555
+SHA256 (xpi/firefox-i18n-30.0/fa.xpi) = 72aee9607616834fb9bf7fa3dda0fd468d2bdcc973cdfa6ba49debe05a35f90c
+SIZE (xpi/firefox-i18n-30.0/fa.xpi) = 410903
+SHA256 (xpi/firefox-i18n-30.0/ff.xpi) = b261a6ddcd9b077df4e89603ffcb6fe6568c5a2125fc6a8750bbc61994d59a2d
+SIZE (xpi/firefox-i18n-30.0/ff.xpi) = 370692
+SHA256 (xpi/firefox-i18n-30.0/fi.xpi) = e99f6bce22b9e7ce27233d37d1d5c5e465d5737118c2cacfee132aae88de1891
+SIZE (xpi/firefox-i18n-30.0/fi.xpi) = 364259
+SHA256 (xpi/firefox-i18n-30.0/fr.xpi) = cde387fb6d2ac70793a387b79b1193f1578d4e09b7e1b551edcda0176c853981
+SIZE (xpi/firefox-i18n-30.0/fr.xpi) = 377371
+SHA256 (xpi/firefox-i18n-30.0/fy-NL.xpi) = 298865967f4c80a3521c01a4e22e9c7cdda1edbb85755f4e9fc69fcfe73e8e8a
+SIZE (xpi/firefox-i18n-30.0/fy-NL.xpi) = 373136
+SHA256 (xpi/firefox-i18n-30.0/ga-IE.xpi) = 8351b8f50482fc719081dca1cd848aaed271c15922b8e2939ef335c4eb62ffb7
+SIZE (xpi/firefox-i18n-30.0/ga-IE.xpi) = 381256
+SHA256 (xpi/firefox-i18n-30.0/gd.xpi) = 24efa269698b83eeab9ed138ff0c239fd53e0c8c89e07864ce0c1017e586b947
+SIZE (xpi/firefox-i18n-30.0/gd.xpi) = 378207
+SHA256 (xpi/firefox-i18n-30.0/gl.xpi) = 860b3cbe4fa38ed7607ec6416286a1210d27a63ef48d3c3dcd25d45e0fda9569
+SIZE (xpi/firefox-i18n-30.0/gl.xpi) = 365569
+SHA256 (xpi/firefox-i18n-30.0/gu-IN.xpi) = 3d5e6dc2b975001df42725dabbdb513999438a75427284dd9b3235ea6b46d3ae
+SIZE (xpi/firefox-i18n-30.0/gu-IN.xpi) = 394097
+SHA256 (xpi/firefox-i18n-30.0/he.xpi) = 43ad9bb68e7f2f9c7934ec411725e5b9883f8ebabad5f7e716b6e39b420e3a45
+SIZE (xpi/firefox-i18n-30.0/he.xpi) = 387621
+SHA256 (xpi/firefox-i18n-30.0/hi-IN.xpi) = 053751b323b6faeef472833b24494ddbe018bd9cd917b19e096184972bb4d19a
+SIZE (xpi/firefox-i18n-30.0/hi-IN.xpi) = 412281
+SHA256 (xpi/firefox-i18n-30.0/hr.xpi) = 9ffdb635b3ed103ab3f434d8472f4d66fabc29326d8dd53431b854e6c7a92ad6
+SIZE (xpi/firefox-i18n-30.0/hr.xpi) = 377103
+SHA256 (xpi/firefox-i18n-30.0/hu.xpi) = 4eac70ba043bcc51a23beb322ef1cc55267b8d6eec339bc2479c38238c4cc706
+SIZE (xpi/firefox-i18n-30.0/hu.xpi) = 373672
+SHA256 (xpi/firefox-i18n-30.0/hy-AM.xpi) = 1584743623016ef2c922b3d1d861880e1c2ba8864836089ed173d37bb0f59a78
+SIZE (xpi/firefox-i18n-30.0/hy-AM.xpi) = 420567
+SHA256 (xpi/firefox-i18n-30.0/id.xpi) = 6b9331cab4a2ebc9b23d44ba02c5f8262cec1733e22f80eaba2b194dffa34521
+SIZE (xpi/firefox-i18n-30.0/id.xpi) = 353458
+SHA256 (xpi/firefox-i18n-30.0/is.xpi) = 58112df3ea4cc57b99d002f19ac1bf414b17b6c1d1941c7b5806f0f524fc8b9f
+SIZE (xpi/firefox-i18n-30.0/is.xpi) = 365850
+SHA256 (xpi/firefox-i18n-30.0/it.xpi) = d84b4cf65fbd1a23c2683346887da15334f48c64381998aa7d5422e303b0656e
+SIZE (xpi/firefox-i18n-30.0/it.xpi) = 304978
+SHA256 (xpi/firefox-i18n-30.0/ja.xpi) = 94e0b3d7535ca00cb7229cd7c20fd0760b51bec25f0ccd93e3a1797a8ae94c7a
+SIZE (xpi/firefox-i18n-30.0/ja.xpi) = 405379
+SHA256 (xpi/firefox-i18n-30.0/kk.xpi) = 87a73e136e2ebfebc5cbd92d7b20e16a065eef04df9b6050afd29de83e1a6785
+SIZE (xpi/firefox-i18n-30.0/kk.xpi) = 409876
+SHA256 (xpi/firefox-i18n-30.0/km.xpi) = 0979630969fa1c4c40ef5ea4e2a17df39e452cade2d0ccdda10d55b756ec5c70
+SIZE (xpi/firefox-i18n-30.0/km.xpi) = 440407
+SHA256 (xpi/firefox-i18n-30.0/kn.xpi) = feace52a5744fd754b807c84eac24319224781de30ccd295ba8442fb724620de
+SIZE (xpi/firefox-i18n-30.0/kn.xpi) = 423620
+SHA256 (xpi/firefox-i18n-30.0/ko.xpi) = 2e49e1e6cffb892ea14089a6b49bdfa21de49fc60eb4c13cfe13cf613792d4b4
+SIZE (xpi/firefox-i18n-30.0/ko.xpi) = 374829
+SHA256 (xpi/firefox-i18n-30.0/ku.xpi) = 06e1c16dcd80db781fc734ecb41445e07f5fb3a4ae895c71a50fe7dc409ddc8b
+SIZE (xpi/firefox-i18n-30.0/ku.xpi) = 379930
+SHA256 (xpi/firefox-i18n-30.0/lij.xpi) = 86e1b4ba7acef11d4bbb211679bf8f810e8bdf466cc22aa670cda79fad2055e7
+SIZE (xpi/firefox-i18n-30.0/lij.xpi) = 356150
+SHA256 (xpi/firefox-i18n-30.0/lt.xpi) = d51545cfec7b8b26724f73e80cc8f9db1b1ba502b6668f01983013a69362fbd1
+SIZE (xpi/firefox-i18n-30.0/lt.xpi) = 383890
+SHA256 (xpi/firefox-i18n-30.0/lv.xpi) = 0d51417b425a2136d33701bda3eb4f510f8db4e8e3a47f59ac9438771eced133
+SIZE (xpi/firefox-i18n-30.0/lv.xpi) = 359059
+SHA256 (xpi/firefox-i18n-30.0/mai.xpi) = a2f3563cfb10731fd7a20e2d3817daeb6273d46e7f610786719274fa4c9de053
+SIZE (xpi/firefox-i18n-30.0/mai.xpi) = 412127
+SHA256 (xpi/firefox-i18n-30.0/mk.xpi) = 8c123ce0d0829adc001fb01714303733e21cade4287a388ed0a5195a89918504
+SIZE (xpi/firefox-i18n-30.0/mk.xpi) = 413366
+SHA256 (xpi/firefox-i18n-30.0/ml.xpi) = 8d877768025f6138a880f2d921d4386181b737a423a35367063794b608728f56
+SIZE (xpi/firefox-i18n-30.0/ml.xpi) = 432785
+SHA256 (xpi/firefox-i18n-30.0/mr.xpi) = 5e72c1a4722333b9aad812e172b781bea624d8a0ec0aeec5b52f5729e2df3da7
+SIZE (xpi/firefox-i18n-30.0/mr.xpi) = 410579
+SHA256 (xpi/firefox-i18n-30.0/nb-NO.xpi) = 6e8dbff214a16125ff907669b269b7b2e0b3a83de4cff6a2fe39ebd38f59f49d
+SIZE (xpi/firefox-i18n-30.0/nb-NO.xpi) = 363801
+SHA256 (xpi/firefox-i18n-30.0/nl.xpi) = bb2988b3089fbb3f617d5dc4da317d6bda6a16f3c812dd01d593ad0d9595d948
+SIZE (xpi/firefox-i18n-30.0/nl.xpi) = 362382
+SHA256 (xpi/firefox-i18n-30.0/nn-NO.xpi) = e9d3e938083fdafb1010e962302e34300eb9c599b9bfe5de6daed0e85207c00b
+SIZE (xpi/firefox-i18n-30.0/nn-NO.xpi) = 360851
+SHA256 (xpi/firefox-i18n-30.0/or.xpi) = fdff4fb0c596aa26a1bf53aabbba9f536194616b9914b3fe31dada0377f937a5
+SIZE (xpi/firefox-i18n-30.0/or.xpi) = 428965
+SHA256 (xpi/firefox-i18n-30.0/pa-IN.xpi) = d2e5cd1c396bdfe4ebac57ca90d20dd59d7c6c31c51d92c0752adedc4dd0821a
+SIZE (xpi/firefox-i18n-30.0/pa-IN.xpi) = 406759
+SHA256 (xpi/firefox-i18n-30.0/pl.xpi) = 7b0fcbfbdbab445fb1be5b3e6a787a706f26ca72bfe811e2a1cf39b7d9fc6a4a
+SIZE (xpi/firefox-i18n-30.0/pl.xpi) = 353581
+SHA256 (xpi/firefox-i18n-30.0/pt-BR.xpi) = 53c41242f436d3814ffb1bea6b00d0bf9b758bd08120d9a8444d11271e8530de
+SIZE (xpi/firefox-i18n-30.0/pt-BR.xpi) = 373136
+SHA256 (xpi/firefox-i18n-30.0/pt-PT.xpi) = 9aef188d9a9f55f68db712880ce464b95be7b064b6fdc2eb2fc09953261a3996
+SIZE (xpi/firefox-i18n-30.0/pt-PT.xpi) = 360707
+SHA256 (xpi/firefox-i18n-30.0/rm.xpi) = c6f7d1006cf56eedcfbceb25f66a1eaa957d6f40d4715ba92b74d1ca35b62b78
+SIZE (xpi/firefox-i18n-30.0/rm.xpi) = 370536
+SHA256 (xpi/firefox-i18n-30.0/ro.xpi) = 9293bd081bd00590962f9c51a838f1a3304e0f1db00be0039c47e782350b16f6
+SIZE (xpi/firefox-i18n-30.0/ro.xpi) = 399527
+SHA256 (xpi/firefox-i18n-30.0/ru.xpi) = 0fec86cfbb14f2e2962b94f81aeaa2925cb26af912dd8fbec15f71f7891c8ba8
+SIZE (xpi/firefox-i18n-30.0/ru.xpi) = 345465
+SHA256 (xpi/firefox-i18n-30.0/si.xpi) = fb2e952ddbbf870665450a8632b276cbb62e37dbeb29130513e3d66dab872060
+SIZE (xpi/firefox-i18n-30.0/si.xpi) = 405107
+SHA256 (xpi/firefox-i18n-30.0/sk.xpi) = 6397df9319a6df628445255085b53c14bb1a3200d9c735de15f3fe0b2d7eb2e1
+SIZE (xpi/firefox-i18n-30.0/sk.xpi) = 376836
+SHA256 (xpi/firefox-i18n-30.0/sl.xpi) = 7704430faf5c7e70a37a3dd6a0e22904c9c205f34e624006e939eda68b09a64a
+SIZE (xpi/firefox-i18n-30.0/sl.xpi) = 358783
+SHA256 (xpi/firefox-i18n-30.0/son.xpi) = 6817b48334da873f9a177c2d02456b4608cc6e97f3e1f1ff2b257f4420282e91
+SIZE (xpi/firefox-i18n-30.0/son.xpi) = 360519
+SHA256 (xpi/firefox-i18n-30.0/sq.xpi) = 8c0c9ea9c1b3a004bd95284ccaaaf33274056dcbed42e46b061f66785e115f4a
+SIZE (xpi/firefox-i18n-30.0/sq.xpi) = 375451
+SHA256 (xpi/firefox-i18n-30.0/sr.xpi) = 6ec3951f21f71b6623172e5d55375e6ea286fa771480bb34d57be370a6bdf027
+SIZE (xpi/firefox-i18n-30.0/sr.xpi) = 414412
+SHA256 (xpi/firefox-i18n-30.0/sv-SE.xpi) = 881d929aad2ae887652840256db032c6f82459172608faf4360981909ad64205
+SIZE (xpi/firefox-i18n-30.0/sv-SE.xpi) = 369471
+SHA256 (xpi/firefox-i18n-30.0/ta.xpi) = 99695ce5a90a717ce71bc0ecfd4c2a0423190e0b1ed6e0dba20f88c7cb103d13
+SIZE (xpi/firefox-i18n-30.0/ta.xpi) = 421293
+SHA256 (xpi/firefox-i18n-30.0/te.xpi) = cb6895dc2722b1b896be519ed92724f691392d47fd4931978cb07b28ae272856
+SIZE (xpi/firefox-i18n-30.0/te.xpi) = 431168
+SHA256 (xpi/firefox-i18n-30.0/th.xpi) = 19b4b26bb6680d4e6d4012bd368436cf4b189bf76c20dad775a241a9e3ebfcd4
+SIZE (xpi/firefox-i18n-30.0/th.xpi) = 415959
+SHA256 (xpi/firefox-i18n-30.0/tr.xpi) = 11c3dc80161c8381aab9ca174b6067ae72b0ef3ebcda918fb6cbb4ed9477ae8f
+SIZE (xpi/firefox-i18n-30.0/tr.xpi) = 370698
+SHA256 (xpi/firefox-i18n-30.0/uk.xpi) = ec8f6faf6c271f7fa7c06113134cb7f8c5e77466cfe1f337e1a875614ba6a950
+SIZE (xpi/firefox-i18n-30.0/uk.xpi) = 401695
+SHA256 (xpi/firefox-i18n-30.0/vi.xpi) = 26be5d152903c759092fa998806dd06aff400aa240f994cf043676b2c9f01f32
+SIZE (xpi/firefox-i18n-30.0/vi.xpi) = 388346
+SHA256 (xpi/firefox-i18n-30.0/zh-CN.xpi) = 6c145b57901063e2edde3d9fed91e5fa6fee9eba6a2b1d6ae539c47b7ecd1d40
+SIZE (xpi/firefox-i18n-30.0/zh-CN.xpi) = 390679
+SHA256 (xpi/firefox-i18n-30.0/zh-TW.xpi) = f9adbf394304da88af89a100840f08a15cc5cdd1dfe0604f3748d360beacac3e
+SIZE (xpi/firefox-i18n-30.0/zh-TW.xpi) = 387316
+SHA256 (xpi/firefox-i18n-30.0/zu.xpi) = 2f1d7b072fe28cebd49de1ca825db5cad33be27290c183df772a27426cad60af
+SIZE (xpi/firefox-i18n-30.0/zu.xpi) = 375213
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 2e357ffd91ac..254c9901212e 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -2,12 +2,11 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 29.0
-PORTREVISION= 1
+DISTVERSION= 30.0
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
- https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/
+ https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source/
DISTNAME= ${PORTNAME}-${DISTVERSION}.source
MAINTAINER= gecko@FreeBSD.org
@@ -21,7 +20,7 @@ BUILD_DEPENDS= nspr>=4.10.3:${PORTSDIR}/devel/nspr \
libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \
opus>=1.1:${PORTSDIR}/audio/opus \
libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \
- sqlite3>=3.8.2:${PORTSDIR}/databases/sqlite3 \
+ sqlite3>=3.8.3.1:${PORTSDIR}/databases/sqlite3 \
${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \
zip:${PORTSDIR}/archivers/zip \
@@ -40,13 +39,12 @@ USE_MOZILLA= -cairo
MOZILLA_NAME= Firefox
WANT_GNOME= yes
-USE_QT4= # empty
+USE_QT5= # empty
QT_NONSTANDARD= yes
ALL_TARGET= default
GNU_CONFIGURE= yes
-USE_BZIP2= yes
USE_GL= gl
-USES= dos2unix
+USES= dos2unix tar:bzip2
DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
NO_MOZPKGINSTALL=yes
@@ -56,7 +54,6 @@ MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
--enable-application=browser \
--enable-official-branding
-NO_STAGE= yes
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
@@ -102,14 +99,9 @@ pre-configure:
(cd ${WRKSRC} && ${AUTOCONF})
(cd ${WRKSRC}/js/src/ && ${AUTOCONF})
-port-pre-install:
- ${ECHO_CMD} 'share/applications/${MOZILLA}.desktop' >> ${PLISTF}
- ${ECHO_CMD} 'share/pixmaps/${FIREFOX_ICON}' >> ${PLISTF}
-
post-install:
- ${MKDIR} ${PREFIX}/share/pixmaps
- ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${PREFIX}/share/applications/
- ${LN} -sf ${FIREFOX_ICON_SRC} ${PREFIX}/share/pixmaps/${FIREFOX_ICON}
- @${CAT} ${PKGMESSAGE}
+ ${MKDIR} ${STAGEDIR}${PREFIX}/share/pixmaps
+ ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${STAGEDIR}${PREFIX}/share/applications/
+ ${LN} -sf ${FIREFOX_ICON_SRC} ${STAGEDIR}${PREFIX}/share/pixmaps/${FIREFOX_ICON}
.include <bsd.port.post.mk>
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index ba0c27ea77cd..1170517eb1b6 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-29.0.source.tar.bz2) = 64402a1f1359f3ea30767a94977ae823ac25b39c6d54f9fe6db444ed127db892
-SIZE (firefox-29.0.source.tar.bz2) = 143163777
+SHA256 (firefox-30.0.source.tar.bz2) = 1e95740a8cf7095e210fb6a2313c4d0fba4fdf44ee7c327d01f202638403c22c
+SIZE (firefox-30.0.source.tar.bz2) = 143171952
diff --git a/www/firefox/files/patch-bug1013675 b/www/firefox/files/patch-bug1013675
new file mode 100644
index 000000000000..eac435acf3d0
--- /dev/null
+++ b/www/firefox/files/patch-bug1013675
@@ -0,0 +1,88 @@
+diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
+index 13a286f..293bd73 100644
+--- xpcom/base/nsDebugImpl.cpp
++++ xpcom/base/nsDebugImpl.cpp
+@@ -45,12 +45,43 @@
+ #endif
+ #endif
+
+-#if defined(XP_MACOSX)
++#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <stdbool.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/sysctl.h>
+ #endif
+
++#if defined(__OpenBSD__)
++#include <sys/proc.h>
++#endif
++
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(XP_MACOSX)
++#define KP_FLAGS kp_proc.p_flag
++#elif defined(__DragonFly__)
++#define KP_FLAGS kp_flags
++#elif defined(__FreeBSD__)
++#define KP_FLAGS ki_flag
++#elif defined(__OpenBSD__) && !defined(_P_TRACED)
++#define KP_FLAGS p_psflags
++#define P_TRACED PS_TRACED
++#else
++#define KP_FLAGS p_flag
++#endif
++
+ #include "mozilla/mozalloc_abort.h"
+
+ static void
+@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+
+ #if defined(XP_WIN)
+ *aResult = ::IsDebuggerPresent();
+-#elif defined(XP_MACOSX)
++#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ // Specify the info we're looking for
+- int mib[4];
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_PROC;
+- mib[2] = KERN_PROC_PID;
+- mib[3] = getpid();
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
+ size_t mibSize = sizeof(mib) / sizeof(int);
+
+- struct kinfo_proc info;
++ KINFO_PROC info;
+ size_t infoSize = sizeof(info);
+ memset(&info, 0, infoSize);
+
+@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+ return NS_OK;
+ }
+
+- if (info.kp_proc.p_flag & P_TRACED) {
++ if (info.KP_FLAGS & P_TRACED) {
+ *aResult = true;
+ }
+ #endif
diff --git a/www/firefox/files/patch-bug1013882 b/www/firefox/files/patch-bug1013882
new file mode 100644
index 000000000000..14b1e81df5b1
--- /dev/null
+++ b/www/firefox/files/patch-bug1013882
@@ -0,0 +1,14 @@
+--- browser/installer/package-manifest.in~
++++ browser/installer/package-manifest.in
+@@ -573,11 +573,6 @@
+ @BINPATH@/components/MozKeyboard.js
+ @BINPATH@/components/InputMethod.manifest
+
+-#ifdef MOZ_DEBUG
+-@BINPATH@/components/TestInterfaceJS.js
+-@BINPATH@/components/TestInterfaceJS.manifest
+-#endif
+-
+ ; Modules
+ @BINPATH@/browser/modules/*
+ @BINPATH@/modules/*
diff --git a/www/firefox/files/patch-bug1015547 b/www/firefox/files/patch-bug1015547
new file mode 100644
index 000000000000..ecb488c36e7f
--- /dev/null
+++ b/www/firefox/files/patch-bug1015547
@@ -0,0 +1,95 @@
+diff --git configure.in configure.in
+index 7bed45f..053de17 100644
+--- configure.in
++++ configure.in
+@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
+ dnl ========================================================
+ AC_PROG_GCC_TRADITIONAL
+ AC_FUNC_MEMCMP
+-AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
++AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
+
+ dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
+ AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
+diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
+index 0687344..ca3ff8b 100644
+--- xpcom/base/nsUUIDGenerator.cpp
++++ xpcom/base/nsUUIDGenerator.cpp
+@@ -15,6 +15,10 @@
+
+ #include "nsUUIDGenerator.h"
+
++#ifdef ANDROID
++extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
++#endif
++
+ using namespace mozilla;
+
+ NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
+@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
+ // We're a service, so we're guaranteed that Init() is not going
+ // to be reentered while we're inside Init().
+
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ /* initialize random number generator using NSPR random noise */
+ unsigned int seed;
+
+@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
+ return NS_ERROR_FAILURE;
+ #endif
+
+-#endif /* non XP_WIN and non XP_MACOSX */
++#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
+
+ return NS_OK;
+ }
+@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ * back to it; instead, we use the value returned when we called
+ * initstate, since older glibc's have broken setstate() return values
+ */
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ setstate(mState);
+ #endif
+
++#ifdef HAVE_ARC4RANDOM_BUF
++ arc4random_buf(id, sizeof(nsID));
++#else /* HAVE_ARC4RANDOM_BUF */
+ size_t bytesLeft = sizeof(nsID);
+ while (bytesLeft > 0) {
+-#ifdef ANDROID
++#ifdef HAVE_ARC4RANDOM
+ long rval = arc4random();
+ const size_t mRBytes = 4;
+ #else
+@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+
+ bytesLeft -= toWrite;
+ }
++#endif /* HAVE_ARC4RANDOM_BUF */
+
+ /* Put in the version */
+ id->m2 &= 0x0fff;
+@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ id->m3[0] &= 0x3f;
+ id->m3[0] |= 0x80;
+
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ /* Restore the previous RNG state */
+ setstate(mSavedState);
+ #endif
+diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
+index 6a24212..68ed6f2 100644
+--- xpcom/base/nsUUIDGenerator.h
++++ xpcom/base/nsUUIDGenerator.h
+@@ -27,7 +27,7 @@ private:
+ protected:
+
+ mozilla::Mutex mLock;
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ char mState[128];
+ char *mSavedState;
+ uint8_t mRBytes;
diff --git a/www/firefox/files/patch-bug783463 b/www/firefox/files/patch-bug783463
deleted file mode 100644
index 3ae6d51262e4..000000000000
--- a/www/firefox/files/patch-bug783463
+++ /dev/null
@@ -1,11 +0,0 @@
---- gfx/skia/moz.build~
-+++ gfx/skia/moz.build
-@@ -190,7 +190,7 @@ elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'qt
- 'SkFontHost_FreeType_common.cpp',
- 'SkOSFile.cpp',
- ]
-- if CONFIG['OS_TARGET'] == 'Linux':
-+ if CONFIG['MOZ_X11'] == 1 or CONFIG['OS_TARGET'] == 'Linux':
- EXPORTS.skia += [
- 'include/ports/SkTypeface_cairo.h',
- ]
diff --git a/www/firefox/files/patch-bug806917 b/www/firefox/files/patch-bug806917
deleted file mode 100644
index ca6d5302613b..000000000000
--- a/www/firefox/files/patch-bug806917
+++ /dev/null
@@ -1,1999 +0,0 @@
-commit cb40a26
-Author: Alessandro Decina <alessandro.d@gmail.com>
-Date: Fri Jan 03 08:16:54 2014 -0800
-
- Bug 806917 - support GStreamer 1.0
----
- configure.in | 66 ++-
- content/media/gstreamer/GStreamerAllocator.cpp | 197 +++++++
- content/media/gstreamer/GStreamerAllocator.h | 25 +
- content/media/gstreamer/GStreamerFormatHelper.cpp | 13 +-
- content/media/gstreamer/GStreamerFunctionList.h | 93 +++-
- content/media/gstreamer/GStreamerLoader.cpp | 48 +-
- content/media/gstreamer/GStreamerLoader.h | 8 +
- content/media/gstreamer/GStreamerReader-0.10.cpp | 200 +++++++
- content/media/gstreamer/GStreamerReader.cpp | 632 ++++++++++++++--------
- content/media/gstreamer/GStreamerReader.h | 42 +-
- content/media/gstreamer/moz.build | 11 +-
- content/media/test/manifest.js | 6 +-
- 12 files changed, 1057 insertions(+), 284 deletions(-)
-
-diff --git configure.in configure.in
-index 9776b8d..0b1698d 100644
---- configure.in
-+++ configure.in
-@@ -3988,6 +3988,7 @@ MOZ_SAMPLE_TYPE_FLOAT32=
- MOZ_SAMPLE_TYPE_S16=
- MOZ_OPUS=1
- MOZ_WEBM=1
-+MOZ_GSTREAMER=
- MOZ_DIRECTSHOW=
- MOZ_WMF=
- MOZ_FMP4=
-@@ -5634,44 +5635,61 @@ WINNT|Darwin|Android)
- ;;
- *)
- MOZ_GSTREAMER=1
-+ GST_API_VERSION=0.10
- ;;
- esac
-
--MOZ_ARG_ENABLE_BOOL(gstreamer,
--[ --enable-gstreamer Enable GStreamer support],
--MOZ_GSTREAMER=1,
--MOZ_GSTREAMER=)
--
--if test "$MOZ_GSTREAMER"; then
-- # API version, eg 0.10, 1.0 etc
-+MOZ_ARG_ENABLE_STRING(gstreamer,
-+[ --enable-gstreamer[=0.10] Enable GStreamer support],
-+[ MOZ_GSTREAMER=1
-+ # API version, eg 0.10, 1.0 etc
-+ if test -z "$enableval" -o "$enableval" = "yes"; then
- GST_API_VERSION=0.10
-+ elif test "$enableval" = "no"; then
-+ MOZ_GSTREAMER=
-+ else
-+ GST_API_VERSION=$enableval
-+ fi],
-+)
-+
-+if test -n "$MOZ_GSTREAMER"; then
- # core/base release number
-- GST_VERSION=0.10.25
-+ if test "$GST_API_VERSION" = "1.0"; then
-+ GST_VERSION=1.0
-+ else
-+ GST_VERSION=0.10.25
-+ fi
-+
- PKG_CHECK_MODULES(GSTREAMER,
- gstreamer-$GST_API_VERSION >= $GST_VERSION
- gstreamer-app-$GST_API_VERSION
-- gstreamer-plugins-base-$GST_API_VERSION, ,
-- AC_MSG_ERROR([gstreamer and gstreamer-plugins-base development packages are needed to build gstreamer backend. Install them or disable gstreamer support with --disable-gstreamer]))
-- if test -n "$GSTREAMER_LIBS"; then
-- _SAVE_LDFLAGS=$LDFLAGS
-- LDFLAGS="$LDFLAGS $GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
-- AC_TRY_LINK(,[return 0;],_HAVE_LIBGSTVIDEO=1,_HAVE_LIBGSTVIDEO=)
-- if test -n "$_HAVE_LIBGSTVIDEO" ; then
-- GSTREAMER_LIBS="$GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
-- else
-- AC_MSG_ERROR([gstreamer-plugins-base found, but no libgstvideo. Something has gone terribly wrong. Try reinstalling gstreamer-plugins-base; failing that, disable the gstreamer backend with --disable-gstreamer.])
-- fi
-- LDFLAGS=$_SAVE_LDFLAGS
-+ gstreamer-plugins-base-$GST_API_VERSION,
-+ [_HAVE_GSTREAMER=1],
-+ [_HAVE_GSTREAMER=])
-+ if test -z "$_HAVE_GSTREAMER"; then
-+ AC_MSG_ERROR([gstreamer and gstreamer-plugins-base development packages are needed to build gstreamer backend. Install them or disable gstreamer support with --disable-gstreamer])
-+ fi
-+
-+ _SAVE_LDFLAGS=$LDFLAGS
-+ LDFLAGS="$LDFLAGS $GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
-+ AC_TRY_LINK(,[return 0;],_HAVE_LIBGSTVIDEO=1,_HAVE_LIBGSTVIDEO=)
-+ if test -n "$_HAVE_LIBGSTVIDEO" ; then
-+ GSTREAMER_LIBS="$GSTREAMER_LIBS -lgstvideo-$GST_API_VERSION"
- else
-- AC_MSG_ERROR([gstreamer and gstreamer-plugins-base development packages are needed to build gstreamer backend. Install them or disable gstreamer support with --disable-gstreamer])
-+ AC_MSG_ERROR([gstreamer-plugins-base found, but no libgstvideo. Something has gone terribly wrong. Try reinstalling gstreamer-plugins-base; failing that, disable the gstreamer backend with --disable-gstreamer.])
- fi
-+ LDFLAGS=$_SAVE_LDFLAGS
-+
-+ AC_SUBST(GSTREAMER_CFLAGS)
-+ AC_SUBST(GSTREAMER_LIBS)
- fi
--AC_SUBST(GSTREAMER_CFLAGS)
--AC_SUBST(GSTREAMER_LIBS)
-+
- AC_SUBST(MOZ_GSTREAMER)
-+AC_SUBST(GST_API_VERSION)
-
- if test -n "$MOZ_GSTREAMER"; then
-- AC_DEFINE(MOZ_GSTREAMER)
-+ AC_DEFINE(MOZ_GSTREAMER)
-+ AC_DEFINE_UNQUOTED(GST_API_VERSION, "$GST_API_VERSION")
- fi
-
-
-diff --git content/media/gstreamer/GStreamerAllocator.cpp content/media/gstreamer/GStreamerAllocator.cpp
-new file mode 100644
-index 0000000..69d0385
---- /dev/null
-+++ content/media/gstreamer/GStreamerAllocator.cpp
-@@ -0,0 +1,197 @@
-+#ifdef HAVE_CONFIG_H
-+#include "config.h"
-+#endif
-+
-+#include "GStreamerAllocator.h"
-+
-+#include <gst/video/video.h>
-+#include <gst/video/gstvideometa.h>
-+
-+#include "GStreamerLoader.h"
-+
-+using namespace mozilla::layers;
-+
-+namespace mozilla {
-+
-+typedef struct
-+{
-+ GstAllocator parent;
-+ GStreamerReader *reader;
-+} MozGfxMemoryAllocator;
-+
-+typedef struct
-+{
-+ GstAllocatorClass parent;
-+} MozGfxMemoryAllocatorClass;
-+
-+typedef struct
-+{
-+ GstMemory memory;
-+ PlanarYCbCrImage* image;
-+ guint8* data;
-+} MozGfxMemory;
-+
-+typedef struct
-+{
-+ GstMeta meta;
-+} MozGfxMeta;
-+
-+typedef struct
-+{
-+ GstVideoBufferPoolClass parent_class;
-+} MozGfxBufferPoolClass;
-+
-+typedef struct
-+{
-+ GstVideoBufferPool pool;
-+} MozGfxBufferPool;
-+
-+G_DEFINE_TYPE(MozGfxMemoryAllocator, moz_gfx_memory_allocator, GST_TYPE_ALLOCATOR);
-+G_DEFINE_TYPE(MozGfxBufferPool, moz_gfx_buffer_pool, GST_TYPE_VIDEO_BUFFER_POOL);
-+
-+void
-+moz_gfx_memory_reset(MozGfxMemory *mem)
-+{
-+ if (mem->image)
-+ mem->image->Release();
-+
-+ ImageContainer* container = ((MozGfxMemoryAllocator*) mem->memory.allocator)->reader->GetImageContainer();
-+ mem->image = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(ImageFormat::PLANAR_YCBCR).get());
-+ mem->data = mem->image->AllocateAndGetNewBuffer(mem->memory.size);
-+}
-+
-+static GstMemory*
-+moz_gfx_memory_allocator_alloc(GstAllocator* aAllocator, gsize aSize,
-+ GstAllocationParams* aParams)
-+{
-+ MozGfxMemory* mem = g_slice_new (MozGfxMemory);
-+ gsize maxsize = aSize + aParams->prefix + aParams->padding;
-+ gst_memory_init(GST_MEMORY_CAST (mem),
-+ (GstMemoryFlags)aParams->flags,
-+ aAllocator, NULL, maxsize, aParams->align,
-+ aParams->prefix, aSize);
-+ mem->image = NULL;
-+ moz_gfx_memory_reset(mem);
-+
-+ return (GstMemory *) mem;
-+}
-+
-+static void
-+moz_gfx_memory_allocator_free (GstAllocator * allocator, GstMemory * gmem)
-+{
-+ MozGfxMemory *mem = (MozGfxMemory *) gmem;
-+
-+ if (mem->memory.parent)
-+ goto sub_mem;
-+
-+ if (mem->image)
-+ mem->image->Release();
-+
-+sub_mem:
-+ g_slice_free (MozGfxMemory, mem);
-+}
-+
-+static gpointer
-+moz_gfx_memory_map (MozGfxMemory * mem, gsize maxsize, GstMapFlags flags)
-+{
-+ // check that the allocation didn't fail
-+ if (mem->data == nullptr)
-+ return nullptr;
-+
-+ return mem->data + mem->memory.offset;
-+}
-+
-+static gboolean
-+moz_gfx_memory_unmap (MozGfxMemory * mem)
-+{
-+ return TRUE;
-+}
-+
-+static MozGfxMemory *
-+moz_gfx_memory_share (MozGfxMemory * mem, gssize offset, gsize size)
-+{
-+ MozGfxMemory *sub;
-+ GstMemory *parent;
-+
-+ /* find the real parent */
-+ if ((parent = mem->memory.parent) == NULL)
-+ parent = (GstMemory *) mem;
-+
-+ if (size == (gsize) -1)
-+ size = mem->memory.size - offset;
-+
-+ /* the shared memory is always readonly */
-+ sub = g_slice_new (MozGfxMemory);
-+
-+ gst_memory_init (GST_MEMORY_CAST (sub),
-+ (GstMemoryFlags) (GST_MINI_OBJECT_FLAGS (parent) | GST_MINI_OBJECT_FLAG_LOCK_READONLY),
-+ mem->memory.allocator, &mem->memory, mem->memory.maxsize, mem->memory.align,
-+ mem->memory.offset + offset, size);
-+
-+ sub->image = mem->image;
-+ sub->data = mem->data;
-+
-+ return sub;
-+}
-+
-+static void
-+moz_gfx_memory_allocator_class_init (MozGfxMemoryAllocatorClass * klass)
-+{
-+ GstAllocatorClass *allocator_class;
-+
-+ allocator_class = (GstAllocatorClass *) klass;
-+
-+ allocator_class->alloc = moz_gfx_memory_allocator_alloc;
-+ allocator_class->free = moz_gfx_memory_allocator_free;
-+}
-+
-+static void
-+moz_gfx_memory_allocator_init (MozGfxMemoryAllocator * allocator)
-+{
-+ GstAllocator *alloc = GST_ALLOCATOR_CAST (allocator);
-+
-+ alloc->mem_type = "moz-gfx-image";
-+ alloc->mem_map = (GstMemoryMapFunction) moz_gfx_memory_map;
-+ alloc->mem_unmap = (GstMemoryUnmapFunction) moz_gfx_memory_unmap;
-+ alloc->mem_share = (GstMemoryShareFunction) moz_gfx_memory_share;
-+ /* fallback copy and is_span */
-+}
-+
-+void
-+moz_gfx_memory_allocator_set_reader(GstAllocator* aAllocator, GStreamerReader* aReader)
-+{
-+ MozGfxMemoryAllocator *allocator = (MozGfxMemoryAllocator *) aAllocator;
-+ allocator->reader = aReader;
-+}
-+
-+nsRefPtr<PlanarYCbCrImage>
-+moz_gfx_memory_get_image(GstMemory *aMemory)
-+{
-+ NS_ASSERTION(GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(aMemory->allocator), "Should be a gfx image");
-+
-+ return ((MozGfxMemory *) aMemory)->image;
-+}
-+
-+void
-+moz_gfx_buffer_pool_reset_buffer (GstBufferPool* aPool, GstBuffer* aBuffer)
-+{
-+ GstMemory* mem = gst_buffer_peek_memory(aBuffer, 0);
-+
-+ NS_ASSERTION(GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(mem->allocator), "Should be a gfx image");
-+ moz_gfx_memory_reset((MozGfxMemory *) mem);
-+ GST_BUFFER_POOL_CLASS(moz_gfx_buffer_pool_parent_class)->reset_buffer(aPool, aBuffer);
-+}
-+
-+static void
-+moz_gfx_buffer_pool_class_init (MozGfxBufferPoolClass * klass)
-+{
-+ GstBufferPoolClass *pool_class = (GstBufferPoolClass *) klass;
-+ pool_class->reset_buffer = moz_gfx_buffer_pool_reset_buffer;
-+}
-+
-+static void
-+moz_gfx_buffer_pool_init (MozGfxBufferPool * pool)
-+{
-+}
-+
-+} // namespace mozilla
-diff --git content/media/gstreamer/GStreamerAllocator.h content/media/gstreamer/GStreamerAllocator.h
-new file mode 100644
-index 0000000..05a4412
---- /dev/null
-+++ content/media/gstreamer/GStreamerAllocator.h
-@@ -0,0 +1,25 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+#if !defined(GStreamerAllocator_h_)
-+#define GStreamerAllocator_h_
-+
-+#include "GStreamerReader.h"
-+
-+#define GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR (moz_gfx_memory_allocator_get_type())
-+#define GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR))
-+#define GST_TYPE_MOZ_GFX_BUFFER_POOL (moz_gfx_buffer_pool_get_type())
-+#define GST_IS_MOZ_GFX_BUFFER_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_MOZ_GFX_BUFFER_POOL))
-+
-+namespace mozilla {
-+
-+GType moz_gfx_memory_allocator_get_type();
-+void moz_gfx_memory_allocator_set_reader(GstAllocator *aAllocator, GStreamerReader* aReader);
-+nsRefPtr<layers::PlanarYCbCrImage> moz_gfx_memory_get_image(GstMemory *aMemory);
-+
-+GType moz_gfx_buffer_pool_get_type();
-+
-+} // namespace mozilla
-+
-+#endif
-diff --git content/media/gstreamer/GStreamerFormatHelper.cpp content/media/gstreamer/GStreamerFormatHelper.cpp
-index be71331..a5e5db8 100644
---- content/media/gstreamer/GStreamerFormatHelper.cpp
-+++ content/media/gstreamer/GStreamerFormatHelper.cpp
-@@ -294,12 +294,23 @@ bool GStreamerFormatHelper::CanHandleCodecCaps(GstCaps* aCaps)
- GList* GStreamerFormatHelper::GetFactories() {
- NS_ASSERTION(sLoadOK, "GStreamer library not linked");
-
-- uint32_t cookie = gst_default_registry_get_feature_list_cookie ();
-+#if GST_VERSION_MAJOR >= 1
-+ uint32_t cookie = gst_registry_get_feature_list_cookie(gst_registry_get());
-+#else
-+ uint32_t cookie = gst_default_registry_get_feature_list_cookie();
-+#endif
- if (cookie != mCookie) {
- g_list_free(mFactories);
-+#if GST_VERSION_MAJOR >= 1
-+ mFactories =
-+ gst_registry_feature_filter(gst_registry_get(),
-+ (GstPluginFeatureFilter)FactoryFilter,
-+ false, nullptr);
-+#else
- mFactories =
- gst_default_registry_feature_filter((GstPluginFeatureFilter)FactoryFilter,
- false, nullptr);
-+#endif
- mCookie = cookie;
- }
-
-diff --git content/media/gstreamer/GStreamerFunctionList.h content/media/gstreamer/GStreamerFunctionList.h
-index 56877c0..e169449 100644
---- content/media/gstreamer/GStreamerFunctionList.h
-+++ content/media/gstreamer/GStreamerFunctionList.h
-@@ -9,7 +9,6 @@
- * List of symbol names we need to dlsym from the gstreamer library.
- */
- GST_FUNC(LIBGSTAPP, gst_app_sink_get_type)
--GST_FUNC(LIBGSTAPP, gst_app_sink_pull_buffer)
- GST_FUNC(LIBGSTAPP, gst_app_sink_set_callbacks)
- GST_FUNC(LIBGSTAPP, gst_app_src_end_of_stream)
- GST_FUNC(LIBGSTAPP, gst_app_src_get_size)
-@@ -22,10 +21,8 @@ GST_FUNC(LIBGSTAPP, gst_app_src_set_stream_type)
- GST_FUNC(LIBGSTREAMER, gst_bin_get_by_name)
- GST_FUNC(LIBGSTREAMER, gst_bin_get_type)
- GST_FUNC(LIBGSTREAMER, gst_bin_iterate_recurse)
--GST_FUNC(LIBGSTREAMER, gst_buffer_copy_metadata)
- GST_FUNC(LIBGSTREAMER, gst_buffer_get_type)
- GST_FUNC(LIBGSTREAMER, gst_buffer_new)
--GST_FUNC(LIBGSTREAMER, gst_buffer_new_and_alloc)
- GST_FUNC(LIBGSTREAMER, gst_bus_set_sync_handler)
- GST_FUNC(LIBGSTREAMER, gst_bus_timed_pop_filtered)
- GST_FUNC(LIBGSTREAMER, gst_caps_append)
-@@ -37,47 +34,37 @@ GST_FUNC(LIBGSTREAMER, gst_caps_new_any)
- GST_FUNC(LIBGSTREAMER, gst_caps_new_empty)
- GST_FUNC(LIBGSTREAMER, gst_caps_new_full)
- GST_FUNC(LIBGSTREAMER, gst_caps_new_simple)
--GST_FUNC(LIBGSTREAMER, gst_caps_unref)
--GST_FUNC(LIBGSTREAMER, gst_element_factory_get_klass)
-+GST_FUNC(LIBGSTREAMER, gst_caps_set_simple)
- GST_FUNC(LIBGSTREAMER, gst_element_factory_get_static_pad_templates)
- GST_FUNC(LIBGSTREAMER, gst_element_factory_get_type)
- GST_FUNC(LIBGSTREAMER, gst_element_factory_make)
- GST_FUNC(LIBGSTREAMER, gst_element_get_factory)
--GST_FUNC(LIBGSTREAMER, gst_element_get_pad)
-+GST_FUNC(LIBGSTREAMER, gst_element_get_static_pad)
- GST_FUNC(LIBGSTREAMER, gst_element_get_type)
- GST_FUNC(LIBGSTREAMER, gst_element_query_convert)
- GST_FUNC(LIBGSTREAMER, gst_element_query_duration)
- GST_FUNC(LIBGSTREAMER, gst_element_seek_simple)
- GST_FUNC(LIBGSTREAMER, gst_element_set_state)
--GST_FUNC(LIBGSTREAMER, gst_event_parse_new_segment)
- GST_FUNC(LIBGSTREAMER, gst_flow_get_name)
- GST_FUNC(LIBGSTREAMER, gst_init)
- GST_FUNC(LIBGSTREAMER, gst_init_check)
- GST_FUNC(LIBGSTREAMER, gst_iterator_next)
- GST_FUNC(LIBGSTREAMER, gst_message_parse_error)
- GST_FUNC(LIBGSTREAMER, gst_message_type_get_name)
--GST_FUNC(LIBGSTREAMER, gst_mini_object_get_type)
--GST_FUNC(LIBGSTREAMER, gst_mini_object_new)
- GST_FUNC(LIBGSTREAMER, gst_mini_object_ref)
- GST_FUNC(LIBGSTREAMER, gst_mini_object_unref)
- GST_FUNC(LIBGSTREAMER, gst_object_get_name)
- GST_FUNC(LIBGSTREAMER, gst_object_get_parent)
- GST_FUNC(LIBGSTREAMER, gst_object_unref)
--GST_FUNC(LIBGSTREAMER, gst_pad_add_event_probe)
--GST_FUNC(LIBGSTREAMER, gst_pad_alloc_buffer)
- GST_FUNC(LIBGSTREAMER, gst_pad_get_element_private)
--GST_FUNC(LIBGSTREAMER, gst_pad_get_negotiated_caps)
--GST_FUNC(LIBGSTREAMER, gst_pad_set_bufferalloc_function)
- GST_FUNC(LIBGSTREAMER, gst_pad_set_element_private)
- GST_FUNC(LIBGSTREAMER, gst_parse_bin_from_description)
- GST_FUNC(LIBGSTREAMER, gst_pipeline_get_bus)
- GST_FUNC(LIBGSTREAMER, gst_pipeline_get_type)
- GST_FUNC(LIBGSTREAMER, gst_plugin_feature_get_rank)
- GST_FUNC(LIBGSTREAMER, gst_registry_feature_filter)
--GST_FUNC(LIBGSTREAMER, gst_registry_get_default)
- GST_FUNC(LIBGSTREAMER, gst_registry_get_feature_list_cookie)
- GST_FUNC(LIBGSTREAMER, gst_segment_init)
--GST_FUNC(LIBGSTREAMER, gst_segment_set_newsegment)
- GST_FUNC(LIBGSTREAMER, gst_segment_to_stream_time)
- GST_FUNC(LIBGSTREAMER, gst_static_caps_get)
- GST_FUNC(LIBGSTREAMER, gst_structure_copy)
-@@ -85,11 +72,82 @@ GST_FUNC(LIBGSTREAMER, gst_structure_get_int)
- GST_FUNC(LIBGSTREAMER, gst_structure_get_value)
- GST_FUNC(LIBGSTREAMER, gst_structure_new)
- GST_FUNC(LIBGSTREAMER, gst_util_uint64_scale)
-+
-+#if GST_VERSION_MAJOR == 0
-+GST_FUNC(LIBGSTAPP, gst_app_sink_pull_buffer)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_copy_metadata)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_new_and_alloc)
-+GST_FUNC(LIBGSTREAMER, gst_caps_unref)
-+GST_FUNC(LIBGSTREAMER, gst_element_factory_get_klass)
-+GST_FUNC(LIBGSTREAMER, gst_element_get_pad)
-+GST_FUNC(LIBGSTREAMER, gst_event_parse_new_segment)
-+GST_FUNC(LIBGSTREAMER, gst_mini_object_get_type)
-+GST_FUNC(LIBGSTREAMER, gst_mini_object_new)
-+GST_FUNC(LIBGSTREAMER, gst_pad_add_event_probe)
-+GST_FUNC(LIBGSTREAMER, gst_pad_alloc_buffer)
-+GST_FUNC(LIBGSTREAMER, gst_pad_get_negotiated_caps)
-+GST_FUNC(LIBGSTREAMER, gst_pad_set_bufferalloc_function)
-+GST_FUNC(LIBGSTREAMER, gst_registry_get_default)
-+GST_FUNC(LIBGSTREAMER, gst_segment_set_newsegment)
- GST_FUNC(LIBGSTVIDEO, gst_video_format_get_component_height)
- GST_FUNC(LIBGSTVIDEO, gst_video_format_get_component_offset)
- GST_FUNC(LIBGSTVIDEO, gst_video_format_get_component_width)
-+GST_FUNC(LIBGSTVIDEO, gst_video_format_get_pixel_stride)
- GST_FUNC(LIBGSTVIDEO, gst_video_format_get_row_stride)
- GST_FUNC(LIBGSTVIDEO, gst_video_format_parse_caps)
-+#else
-+
-+GST_FUNC(LIBGSTAPP, gst_app_sink_pull_sample)
-+GST_FUNC(LIBGSTREAMER, _gst_caps_any)
-+GST_FUNC(LIBGSTREAMER, gst_allocator_get_type)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_copy_into)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_extract)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_get_meta)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_get_size)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_map)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_new_allocate)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_n_memory)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_peek_memory)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_acquire_buffer)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_config_set_allocator)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_config_set_params)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_get_config)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_get_type)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_is_active)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_set_active)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_pool_set_config)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_set_size)
-+GST_FUNC(LIBGSTREAMER, gst_buffer_unmap)
-+GST_FUNC(LIBGSTREAMER, gst_element_factory_get_metadata)
-+GST_FUNC(LIBGSTREAMER, gst_event_parse_segment)
-+GST_FUNC(LIBGSTREAMER, gst_memory_init)
-+GST_FUNC(LIBGSTREAMER, gst_memory_map)
-+GST_FUNC(LIBGSTREAMER, gst_memory_unmap)
-+GST_FUNC(LIBGSTREAMER, gst_object_get_type)
-+GST_FUNC(LIBGSTREAMER, gst_pad_add_probe)
-+GST_FUNC(LIBGSTREAMER, gst_pad_get_current_caps)
-+GST_FUNC(LIBGSTREAMER, gst_pad_probe_info_get_query)
-+GST_FUNC(LIBGSTREAMER, gst_query_add_allocation_meta)
-+GST_FUNC(LIBGSTREAMER, gst_query_add_allocation_param)
-+GST_FUNC(LIBGSTREAMER, gst_query_add_allocation_pool)
-+GST_FUNC(LIBGSTREAMER, gst_query_parse_allocation)
-+GST_FUNC(LIBGSTREAMER, gst_registry_get)
-+GST_FUNC(LIBGSTREAMER, gst_sample_get_buffer)
-+GST_FUNC(LIBGSTREAMER, gst_segment_copy_into)
-+GST_FUNC(LIBGSTREAMER, gst_structure_free)
-+GST_FUNC(LIBGSTVIDEO, gst_buffer_pool_config_get_video_alignment)
-+GST_FUNC(LIBGSTVIDEO, gst_buffer_pool_has_option)
-+GST_FUNC(LIBGSTVIDEO, gst_video_buffer_pool_get_type)
-+GST_FUNC(LIBGSTVIDEO, gst_video_frame_map)
-+GST_FUNC(LIBGSTVIDEO, gst_video_frame_unmap)
-+GST_FUNC(LIBGSTVIDEO, gst_video_info_align)
-+GST_FUNC(LIBGSTVIDEO, gst_video_info_from_caps)
-+GST_FUNC(LIBGSTVIDEO, gst_video_info_init)
-+GST_FUNC(LIBGSTVIDEO, gst_video_meta_api_get_type)
-+GST_FUNC(LIBGSTVIDEO, gst_video_meta_map)
-+GST_FUNC(LIBGSTVIDEO, gst_video_meta_unmap)
-+
-+#endif
-
- /*
- * Functions that have been defined in the header file. We replace them so that
-@@ -99,6 +157,11 @@ GST_FUNC(LIBGSTVIDEO, gst_video_format_parse_caps)
- REPLACE_FUNC(gst_buffer_ref);
- REPLACE_FUNC(gst_buffer_unref);
- REPLACE_FUNC(gst_message_unref);
-+
-+#if GST_VERSION_MAJOR == 1
-+REPLACE_FUNC(gst_caps_unref);
-+REPLACE_FUNC(gst_sample_unref);
-+#endif
- #endif
-
- #endif // !defined(__APPLE__)
-diff --git content/media/gstreamer/GStreamerLoader.cpp content/media/gstreamer/GStreamerLoader.cpp
-index 5961b23..e6457e0 100644
---- content/media/gstreamer/GStreamerLoader.cpp
-+++ content/media/gstreamer/GStreamerLoader.cpp
-@@ -6,13 +6,21 @@
- #include <dlfcn.h>
- #include <stdio.h>
-
--#include "GStreamerLoader.h"
-+#include "nsDebug.h"
- #include "mozilla/NullPtr.h"
-
-+#include "GStreamerLoader.h"
-+
- #define LIBGSTREAMER 0
- #define LIBGSTAPP 1
- #define LIBGSTVIDEO 2
-
-+#ifdef __OpenBSD__
-+#define LIB_GST_SUFFIX ".so"
-+#else
-+#define LIB_GST_SUFFIX ".so.0"
-+#endif
-+
- namespace mozilla {
-
- /*
-@@ -32,6 +40,11 @@ namespace mozilla {
- GstBuffer * gst_buffer_ref_impl(GstBuffer *buf);
- void gst_buffer_unref_impl(GstBuffer *buf);
- void gst_message_unref_impl(GstMessage *msg);
-+void gst_caps_unref_impl(GstCaps *caps);
-+
-+#if GST_VERSION_MAJOR == 1
-+void gst_sample_unref_impl(GstSample *sample);
-+#endif
-
- bool
- load_gstreamer()
-@@ -58,32 +71,25 @@ load_gstreamer()
- if (major == GST_VERSION_MAJOR && minor == GST_VERSION_MINOR) {
- gstreamerLib = RTLD_DEFAULT;
- } else {
--#ifdef __OpenBSD__
-- gstreamerLib = dlopen("libgstreamer-0.10.so", RTLD_NOW | RTLD_LOCAL);
--#else
-- gstreamerLib = dlopen("libgstreamer-0.10.so.0", RTLD_NOW | RTLD_LOCAL);
--#endif
-+ gstreamerLib = dlopen("libgstreamer-" GST_API_VERSION LIB_GST_SUFFIX, RTLD_NOW | RTLD_LOCAL);
- }
-
-- void *handles[] = {
-+ void *handles[3] = {
- gstreamerLib,
--#ifdef __OpenBSD__
-- dlopen("libgstapp-0.10.so", RTLD_NOW | RTLD_LOCAL),
-- dlopen("libgstvideo-0.10.so", RTLD_NOW | RTLD_LOCAL)
--#else
-- dlopen("libgstapp-0.10.so.0", RTLD_NOW | RTLD_LOCAL),
-- dlopen("libgstvideo-0.10.so.0", RTLD_NOW | RTLD_LOCAL)
--#endif
-+ dlopen("libgstapp-" GST_API_VERSION LIB_GST_SUFFIX, RTLD_NOW | RTLD_LOCAL),
-+ dlopen("libgstvideo-" GST_API_VERSION LIB_GST_SUFFIX, RTLD_NOW | RTLD_LOCAL)
- };
-
- for (size_t i = 0; i < sizeof(handles) / sizeof(handles[0]); i++) {
- if (!handles[i]) {
-+ NS_WARNING("Couldn't link gstreamer libraries");
- goto fail;
- }
- }
-
- #define GST_FUNC(lib, symbol) \
- if (!(symbol = (typeof(symbol))dlsym(handles[lib], #symbol))) { \
-+ NS_WARNING("Couldn't link symbol " #symbol); \
- goto fail; \
- }
- #define REPLACE_FUNC(symbol) symbol = symbol##_impl;
-@@ -123,4 +129,18 @@ gst_message_unref_impl(GstMessage *msg)
- gst_mini_object_unref(GST_MINI_OBJECT_CAST(msg));
- }
-
-+#if GST_VERSION_MAJOR == 1
-+void
-+gst_sample_unref_impl(GstSample *sample)
-+{
-+ gst_mini_object_unref(GST_MINI_OBJECT_CAST(sample));
-+}
-+#endif
-+
-+void
-+gst_caps_unref_impl(GstCaps *caps)
-+{
-+ gst_mini_object_unref(GST_MINI_OBJECT_CAST(caps));
-+}
-+
- }
-diff --git content/media/gstreamer/GStreamerLoader.h content/media/gstreamer/GStreamerLoader.h
-index 2d801722..cd7fe6d 100644
---- content/media/gstreamer/GStreamerLoader.h
-+++ content/media/gstreamer/GStreamerLoader.h
-@@ -22,6 +22,11 @@
- #include <gst/video/video.h>
- #pragma GCC diagnostic pop
-
-+#if GST_VERSION_MAJOR == 1
-+#include <gst/video/gstvideometa.h>
-+#include <gst/video/gstvideopool.h>
-+#endif
-+
- namespace mozilla {
-
- /*
-@@ -42,4 +47,7 @@ bool load_gstreamer();
-
- }
-
-+#undef GST_CAPS_ANY
-+#define GST_CAPS_ANY (*_gst_caps_any)
-+
- #endif // GStreamerLoader_h_
-diff --git content/media/gstreamer/GStreamerReader-0.10.cpp content/media/gstreamer/GStreamerReader-0.10.cpp
-new file mode 100644
-index 0000000..fb98bde
---- /dev/null
-+++ content/media/gstreamer/GStreamerReader-0.10.cpp
-@@ -0,0 +1,200 @@
-+#include "nsError.h"
-+#include "MediaDecoderStateMachine.h"
-+#include "AbstractMediaDecoder.h"
-+#include "MediaResource.h"
-+#include "GStreamerReader.h"
-+#include "GStreamerMozVideoBuffer.h"
-+#include "GStreamerFormatHelper.h"
-+#include "VideoUtils.h"
-+#include "mozilla/dom/TimeRanges.h"
-+#include "mozilla/Preferences.h"
-+
-+using namespace mozilla;
-+using mozilla::layers::PlanarYCbCrImage;
-+using mozilla::layers::ImageContainer;
-+
-+GstFlowReturn GStreamerReader::AllocateVideoBufferCb(GstPad* aPad,
-+ guint64 aOffset,
-+ guint aSize,
-+ GstCaps* aCaps,
-+ GstBuffer** aBuf)
-+{
-+ GStreamerReader* reader = reinterpret_cast<GStreamerReader*>(gst_pad_get_element_private(aPad));
-+ return reader->AllocateVideoBuffer(aPad, aOffset, aSize, aCaps, aBuf);
-+}
-+
-+GstFlowReturn GStreamerReader::AllocateVideoBuffer(GstPad* aPad,
-+ guint64 aOffset,
-+ guint aSize,
-+ GstCaps* aCaps,
-+ GstBuffer** aBuf)
-+{
-+ nsRefPtr<PlanarYCbCrImage> image;
-+ return AllocateVideoBufferFull(aPad, aOffset, aSize, aCaps, aBuf, image);
-+}
-+
-+GstFlowReturn GStreamerReader::AllocateVideoBufferFull(GstPad* aPad,
-+ guint64 aOffset,
-+ guint aSize,
-+ GstCaps* aCaps,
-+ GstBuffer** aBuf,
-+ nsRefPtr<PlanarYCbCrImage>& aImage)
-+{
-+ /* allocate an image using the container */
-+ ImageContainer* container = mDecoder->GetImageContainer();
-+ if (container == nullptr) {
-+ return GST_FLOW_ERROR;
-+ }
-+ PlanarYCbCrImage* img = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(ImageFormat::PLANAR_YCBCR).get());
-+ nsRefPtr<PlanarYCbCrImage> image = dont_AddRef(img);
-+
-+ /* prepare a GstBuffer pointing to the underlying PlanarYCbCrImage buffer */
-+ GstBuffer* buf = GST_BUFFER(gst_moz_video_buffer_new());
-+ GST_BUFFER_SIZE(buf) = aSize;
-+ /* allocate the actual YUV buffer */
-+ GST_BUFFER_DATA(buf) = image->AllocateAndGetNewBuffer(aSize);
-+
-+ aImage = image;
-+
-+ /* create a GstMozVideoBufferData to hold the image */
-+ GstMozVideoBufferData* bufferdata = new GstMozVideoBufferData(image);
-+
-+ /* Attach bufferdata to our GstMozVideoBuffer, it will take care to free it */
-+ gst_moz_video_buffer_set_data(GST_MOZ_VIDEO_BUFFER(buf), bufferdata);
-+
-+ *aBuf = buf;
-+ return GST_FLOW_OK;
-+}
-+
-+gboolean GStreamerReader::EventProbe(GstPad* aPad, GstEvent* aEvent)
-+{
-+ GstElement* parent = GST_ELEMENT(gst_pad_get_parent(aPad));
-+ switch(GST_EVENT_TYPE(aEvent)) {
-+ case GST_EVENT_NEWSEGMENT:
-+ {
-+ gboolean update;
-+ gdouble rate;
-+ GstFormat format;
-+ gint64 start, stop, position;
-+ GstSegment* segment;
-+
-+ /* Store the segments so we can convert timestamps to stream time, which
-+ * is what the upper layers sync on.
-+ */
-+ ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
-+ gst_event_parse_new_segment(aEvent, &update, &rate, &format,
-+ &start, &stop, &position);
-+ if (parent == GST_ELEMENT(mVideoAppSink))
-+ segment = &mVideoSegment;
-+ else
-+ segment = &mAudioSegment;
-+ gst_segment_set_newsegment(segment, update, rate, format,
-+ start, stop, position);
-+ break;
-+ }
-+ case GST_EVENT_FLUSH_STOP:
-+ /* Reset on seeks */
-+ ResetDecode();
-+ break;
-+ default:
-+ break;
-+ }
-+ gst_object_unref(parent);
-+
-+ return TRUE;
-+}
-+
-+gboolean GStreamerReader::EventProbeCb(GstPad* aPad,
-+ GstEvent* aEvent,
-+ gpointer aUserData)
-+{
-+ GStreamerReader* reader = reinterpret_cast<GStreamerReader*>(aUserData);
-+ return reader->EventProbe(aPad, aEvent);
-+}
-+
-+nsRefPtr<PlanarYCbCrImage> GStreamerReader::GetImageFromBuffer(GstBuffer* aBuffer)
-+{
-+ if (!GST_IS_MOZ_VIDEO_BUFFER (aBuffer))
-+ return nullptr;
-+
-+ nsRefPtr<PlanarYCbCrImage> image;
-+ GstMozVideoBufferData* bufferdata = reinterpret_cast<GstMozVideoBufferData*>(gst_moz_video_buffer_get_data(GST_MOZ_VIDEO_BUFFER(aBuffer)));
-+ image = bufferdata->mImage;
-+
-+ PlanarYCbCrImage::Data data;
-+ data.mPicX = data.mPicY = 0;
-+ data.mPicSize = gfx::IntSize(mPicture.width, mPicture.height);
-+ data.mStereoMode = StereoMode::MONO;
-+
-+ data.mYChannel = GST_BUFFER_DATA(aBuffer);
-+ data.mYStride = gst_video_format_get_row_stride(mFormat, 0, mPicture.width);
-+ data.mYSize = gfx::IntSize(data.mYStride,
-+ gst_video_format_get_component_height(mFormat, 0, mPicture.height));
-+ data.mYSkip = 0;
-+ data.mCbCrStride = gst_video_format_get_row_stride(mFormat, 1, mPicture.width);
-+ data.mCbCrSize = gfx::IntSize(data.mCbCrStride,
-+ gst_video_format_get_component_height(mFormat, 1, mPicture.height));
-+ data.mCbChannel = data.mYChannel + gst_video_format_get_component_offset(mFormat, 1,
-+ mPicture.width, mPicture.height);
-+ data.mCrChannel = data.mYChannel + gst_video_format_get_component_offset(mFormat, 2,
-+ mPicture.width, mPicture.height);
-+ data.mCbSkip = 0;
-+ data.mCrSkip = 0;
-+
-+ image->SetDataNoCopy(data);
-+
-+ return image;
-+}
-+
-+void GStreamerReader::CopyIntoImageBuffer(GstBuffer* aBuffer,
-+ GstBuffer** aOutBuffer,
-+ nsRefPtr<PlanarYCbCrImage> &aImage)
-+{
-+ AllocateVideoBufferFull(nullptr, GST_BUFFER_OFFSET(aBuffer),
-+ GST_BUFFER_SIZE(aBuffer), nullptr, aOutBuffer, aImage);
-+
-+ gst_buffer_copy_metadata(*aOutBuffer, aBuffer, (GstBufferCopyFlags)GST_BUFFER_COPY_ALL);
-+ memcpy(GST_BUFFER_DATA(*aOutBuffer), GST_BUFFER_DATA(aBuffer), GST_BUFFER_SIZE(*aOutBuffer));
-+
-+ aImage = GetImageFromBuffer(*aOutBuffer);
-+}
-+
-+GstCaps* GStreamerReader::BuildAudioSinkCaps()
-+{
-+ GstCaps* caps;
-+#ifdef IS_LITTLE_ENDIAN
-+ int endianness = 1234;
-+#else
-+ int endianness = 4321;
-+#endif
-+ gint width;
-+#ifdef MOZ_SAMPLE_TYPE_FLOAT32
-+ caps = gst_caps_from_string("audio/x-raw-float, channels={1,2}");
-+ width = 32;
-+#else /* !MOZ_SAMPLE_TYPE_FLOAT32 */
-+ caps = gst_caps_from_string("audio/x-raw-int, channels={1,2}");
-+ width = 16;
-+#endif
-+ gst_caps_set_simple(caps,
-+ "width", G_TYPE_INT, width,
-+ "endianness", G_TYPE_INT, endianness,
-+ NULL);
-+
-+ return caps;
-+}
-+
-+void GStreamerReader::InstallPadCallbacks()
-+{
-+ GstPad* sinkpad = gst_element_get_static_pad(GST_ELEMENT(mVideoAppSink), "sink");
-+ gst_pad_add_event_probe(sinkpad,
-+ G_CALLBACK(&GStreamerReader::EventProbeCb), this);
-+
-+ gst_pad_set_bufferalloc_function(sinkpad, GStreamerReader::AllocateVideoBufferCb);
-+ gst_pad_set_element_private(sinkpad, this);
-+ gst_object_unref(sinkpad);
-+
-+ sinkpad = gst_element_get_static_pad(GST_ELEMENT(mAudioAppSink), "sink");
-+ gst_pad_add_event_probe(sinkpad,
-+ G_CALLBACK(&GStreamerReader::EventProbeCb), this);
-+ gst_object_unref(sinkpad);
-+}
-diff --git content/media/gstreamer/GStreamerReader.cpp content/media/gstreamer/GStreamerReader.cpp
-index 2be45dc..54509e3 100644
---- content/media/gstreamer/GStreamerReader.cpp
-+++ content/media/gstreamer/GStreamerReader.cpp
-@@ -10,8 +10,10 @@
- #include "AbstractMediaDecoder.h"
- #include "MediaResource.h"
- #include "GStreamerReader.h"
-+#if GST_VERSION_MAJOR >= 1
-+#include "GStreamerAllocator.h"
-+#endif
- #include "GStreamerFormatHelper.h"
--#include "GStreamerMozVideoBuffer.h"
- #include "VideoUtils.h"
- #include "mozilla/dom/TimeRanges.h"
- #include "mozilla/Preferences.h"
-@@ -31,14 +33,16 @@ extern PRLogModuleInfo* gMediaDecoderLog;
- #define LOG(type, msg, ...)
- #endif
-
--extern bool
--IsYV12Format(const VideoData::YCbCrBuffer::Plane& aYPlane,
-- const VideoData::YCbCrBuffer::Plane& aCbPlane,
-- const VideoData::YCbCrBuffer::Plane& aCrPlane);
--
-+#if DEBUG
- static const unsigned int MAX_CHANNELS = 4;
--// Let the demuxer work in pull mode for short files
--static const int SHORT_FILE_SIZE = 1024 * 1024;
-+#endif
-+// Let the demuxer work in pull mode for short files. This used to be a micro
-+// optimization to have more accurate durations for ogg files in mochitests.
-+// Since as of today we aren't using gstreamer to demux ogg, and having demuxers
-+// work in pull mode over http makes them slower (since they really assume
-+// near-zero latency in pull mode) set the constant to 0 for now, which
-+// effectively disables it.
-+static const int SHORT_FILE_SIZE = 0;
- // The default resource->Read() size when working in push mode
- static const int DEFAULT_SOURCE_READ_SIZE = 50 * 1024;
-
-@@ -60,6 +62,10 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder)
- : MediaDecoderReader(aDecoder),
- mMP3FrameParser(aDecoder->GetResource()->GetLength()),
- mUseParserDuration(false),
-+#if GST_VERSION_MAJOR >= 1
-+ mAllocator(nullptr),
-+ mBufferPool(nullptr),
-+#endif
- mPlayBin(nullptr),
- mBus(nullptr),
- mSource(nullptr),
-@@ -72,6 +78,9 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder)
- mAudioSinkBufferCount(0),
- mGstThreadsMonitor("media.gst.threads"),
- mReachedEos(false),
-+#if GST_VERSION_MAJOR >= 1
-+ mConfigureAlignment(true),
-+#endif
- fpsNum(0),
- fpsDen(0)
- {
-@@ -83,8 +92,12 @@ GStreamerReader::GStreamerReader(AbstractMediaDecoder* aDecoder)
-
- mSinkCallbacks.eos = GStreamerReader::EosCb;
- mSinkCallbacks.new_preroll = GStreamerReader::NewPrerollCb;
-+#if GST_VERSION_MAJOR >= 1
-+ mSinkCallbacks.new_sample = GStreamerReader::NewBufferCb;
-+#else
- mSinkCallbacks.new_buffer = GStreamerReader::NewBufferCb;
- mSinkCallbacks.new_buffer_list = nullptr;
-+#endif
-
- gst_segment_init(&mVideoSegment, GST_FORMAT_UNDEFINED);
- gst_segment_init(&mAudioSegment, GST_FORMAT_UNDEFINED);
-@@ -108,65 +121,59 @@ GStreamerReader::~GStreamerReader()
- mAudioAppSink = nullptr;
- gst_object_unref(mBus);
- mBus = nullptr;
-+#if GST_VERSION_MAJOR >= 1
-+ g_object_unref(mAllocator);
-+ g_object_unref(mBufferPool);
-+#endif
- }
- }
-
- nsresult GStreamerReader::Init(MediaDecoderReader* aCloneDonor)
- {
-- GError* error = nullptr;
-- if (!gst_init_check(0, 0, &error)) {
-- LOG(PR_LOG_ERROR, "gst initialization failed: %s", error->message);
-- g_error_free(error);
-- return NS_ERROR_FAILURE;
-- }
-+ GStreamerFormatHelper::Instance();
-+
-+#if GST_VERSION_MAJOR >= 1
-+ mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, nullptr));
-+ moz_gfx_memory_allocator_set_reader(mAllocator, this);
-+
-+ mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, nullptr));
-+#endif
-
-+#if GST_VERSION_MAJOR >= 1
-+ mPlayBin = gst_element_factory_make("playbin", nullptr);
-+#else
- mPlayBin = gst_element_factory_make("playbin2", nullptr);
-+#endif
- if (!mPlayBin) {
-- LOG(PR_LOG_ERROR, "couldn't create playbin2");
-+ LOG(PR_LOG_ERROR, "couldn't create playbin");
- return NS_ERROR_FAILURE;
- }
- g_object_set(mPlayBin, "buffer-size", 0, nullptr);
- mBus = gst_pipeline_get_bus(GST_PIPELINE(mPlayBin));
-
- mVideoSink = gst_parse_bin_from_description("capsfilter name=filter ! "
-- "appsink name=videosink sync=true max-buffers=1 "
-+ "appsink name=videosink sync=false max-buffers=1 "
-+#if GST_VERSION_MAJOR >= 1
-+ "caps=video/x-raw,format=I420"
-+#else
- "caps=video/x-raw-yuv,format=(fourcc)I420"
-+#endif
- , TRUE, nullptr);
- mVideoAppSink = GST_APP_SINK(gst_bin_get_by_name(GST_BIN(mVideoSink),
- "videosink"));
-- gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks,
-- (gpointer) this, nullptr);
-- GstPad* sinkpad = gst_element_get_pad(GST_ELEMENT(mVideoAppSink), "sink");
-- gst_pad_add_event_probe(sinkpad,
-- G_CALLBACK(&GStreamerReader::EventProbeCb), this);
-- gst_object_unref(sinkpad);
-- gst_pad_set_bufferalloc_function(sinkpad, GStreamerReader::AllocateVideoBufferCb);
-- gst_pad_set_element_private(sinkpad, this);
--
- mAudioSink = gst_parse_bin_from_description("capsfilter name=filter ! "
--#ifdef MOZ_SAMPLE_TYPE_FLOAT32
-- "appsink name=audiosink max-buffers=2 sync=false caps=audio/x-raw-float,"
--#ifdef IS_LITTLE_ENDIAN
-- "channels={1,2},width=32,endianness=1234", TRUE, nullptr);
--#else
-- "channels={1,2},width=32,endianness=4321", TRUE, nullptr);
--#endif
--#else
-- "appsink name=audiosink max-buffers=2 sync=false caps=audio/x-raw-int,"
--#ifdef IS_LITTLE_ENDIAN
-- "channels={1,2},width=16,endianness=1234", TRUE, nullptr);
--#else
-- "channels={1,2},width=16,endianness=4321", TRUE, nullptr);
--#endif
--#endif
-+ "appsink name=audiosink sync=false max-buffers=1", TRUE, nullptr);
- mAudioAppSink = GST_APP_SINK(gst_bin_get_by_name(GST_BIN(mAudioSink),
- "audiosink"));
-+ GstCaps* caps = BuildAudioSinkCaps();
-+ g_object_set(mAudioAppSink, "caps", caps, nullptr);
-+ gst_caps_unref(caps);
-+
-+ gst_app_sink_set_callbacks(mVideoAppSink, &mSinkCallbacks,
-+ (gpointer) this, nullptr);
- gst_app_sink_set_callbacks(mAudioAppSink, &mSinkCallbacks,
- (gpointer) this, nullptr);
-- sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink");
-- gst_pad_add_event_probe(sinkpad,
-- G_CALLBACK(&GStreamerReader::EventProbeCb), this);
-- gst_object_unref(sinkpad);
-+ InstallPadCallbacks();
-
- g_object_set(mPlayBin, "uri", "appsrc://",
- "video-sink", mVideoSink,
-@@ -331,13 +340,12 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
- /* Little trick: set the target caps to "skip" so that playbin2 fails to
- * find a decoder for the stream we want to skip.
- */
-- GstCaps* filterCaps = gst_caps_new_simple ("skip", nullptr);
-+ GstCaps* filterCaps = gst_caps_new_simple ("skip", nullptr, nullptr);
- g_object_set(filter, "caps", filterCaps, nullptr);
- gst_caps_unref(filterCaps);
- gst_object_unref(filter);
- }
-
-- /* start the pipeline */
- LOG(PR_LOG_DEBUG, "starting metadata pipeline");
- gst_element_set_state(mPlayBin, GST_STATE_PAUSED);
-
-@@ -358,6 +366,7 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
- gst_message_unref(message);
- ret = NS_ERROR_FAILURE;
- } else {
-+ LOG(PR_LOG_DEBUG, "read metadata pipeline prerolled");
- gst_message_unref(message);
- ret = NS_OK;
- break;
-@@ -373,21 +383,24 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
-
- /* FIXME: workaround for a bug in matroskademux. This seek makes matroskademux
- * parse the index */
-+ LOG(PR_LOG_DEBUG, "doing matroskademux seek hack");
- if (gst_element_seek_simple(mPlayBin, GST_FORMAT_TIME,
- GST_SEEK_FLAG_FLUSH, 0)) {
- /* after a seek we need to wait again for ASYNC_DONE */
-- message = gst_bus_timed_pop_filtered(mBus, GST_CLOCK_TIME_NONE,
-+ message = gst_bus_timed_pop_filtered(mBus, 5 * GST_SECOND,
- (GstMessageType)(GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR));
-- if (GST_MESSAGE_TYPE(message) == GST_MESSAGE_ERROR) {
-+ LOG(PR_LOG_DEBUG, "matroskademux seek hack done");
-+ if (GST_MESSAGE_TYPE(message) != GST_MESSAGE_ASYNC_DONE) {
- gst_element_set_state(mPlayBin, GST_STATE_NULL);
- gst_message_unref(message);
- return NS_ERROR_FAILURE;
- }
-+ } else {
-+ LOG(PR_LOG_DEBUG, "matroskademux seek hack failed (non fatal)");
- }
-
- /* report the duration */
- gint64 duration;
-- GstFormat format = GST_FORMAT_TIME;
-
- if (isMP3 && mMP3FrameParser.IsMP3()) {
- // The MP3FrameParser has reported a duration; use that over the gstreamer
-@@ -396,17 +409,25 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
- mUseParserDuration = true;
- mLastParserDuration = mMP3FrameParser.GetDuration();
- mDecoder->SetMediaDuration(mLastParserDuration);
--
-- } else if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
-- &format, &duration) && format == GST_FORMAT_TIME) {
-- // Otherwise use the gstreamer duration.
-- ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
-- LOG(PR_LOG_DEBUG, "returning duration %" GST_TIME_FORMAT, GST_TIME_ARGS(duration));
-- duration = GST_TIME_AS_USECONDS (duration);
-- mDecoder->SetMediaDuration(duration);
--
- } else {
-- mDecoder->SetMediaSeekable(false);
-+ LOG(PR_LOG_DEBUG, "querying duration");
-+ // Otherwise use the gstreamer duration.
-+#if GST_VERSION_MAJOR >= 1
-+ if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
-+ GST_FORMAT_TIME, &duration)) {
-+#else
-+ GstFormat format = GST_FORMAT_TIME;
-+ if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
-+ &format, &duration) && format == GST_FORMAT_TIME) {
-+#endif
-+ ReentrantMonitorAutoEnter mon(mDecoder->GetReentrantMonitor());
-+ LOG(PR_LOG_DEBUG, "have duration %" GST_TIME_FORMAT,
-+ GST_TIME_ARGS (duration));
-+ duration = GST_TIME_AS_USECONDS (duration);
-+ mDecoder->SetMediaDuration(duration);
-+ } else {
-+ mDecoder->SetMediaSeekable(false);
-+ }
- }
-
- int n_video = 0, n_audio = 0;
-@@ -410,7 +428,11 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
- *aTags = nullptr;
-
- // Watch the pipeline for fatal errors
-+#if GST_VERSION_MAJOR >= 1
-+ gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this, nullptr);
-+#else
- gst_bus_set_sync_handler(mBus, GStreamerReader::ErrorCb, this);
-+#endif
-
- /* set the pipeline to PLAYING so that it starts decoding and queueing data in
- * the appsinks */
-@@ -424,19 +446,35 @@ nsresult GStreamerReader::CheckSupportedFormats()
- bool done = false;
- bool unsupported = false;
-
-- GstIterator *it = gst_bin_iterate_recurse(GST_BIN(mPlayBin));
-+ GstIterator* it = gst_bin_iterate_recurse(GST_BIN(mPlayBin));
- while (!done) {
-+ GstIteratorResult res;
- GstElement* element;
-- GstIteratorResult res = gst_iterator_next(it, (void **)&element);
-+
-+#if GST_VERSION_MAJOR >= 1
-+ GValue value = {0,};
-+ res = gst_iterator_next(it, &value);
-+#else
-+ res = gst_iterator_next(it, (void **) &element);
-+#endif
- switch(res) {
- case GST_ITERATOR_OK:
- {
-+#if GST_VERSION_MAJOR >= 1
-+ element = GST_ELEMENT (g_value_get_object (&value));
-+#endif
- GstElementFactory* factory = gst_element_get_factory(element);
- if (factory) {
- const char* klass = gst_element_factory_get_klass(factory);
-- GstPad* pad = gst_element_get_pad(element, "sink");
-+ GstPad* pad = gst_element_get_static_pad(element, "sink");
- if (pad) {
-- GstCaps* caps = gst_pad_get_negotiated_caps(pad);
-+ GstCaps* caps;
-+
-+#if GST_VERSION_MAJOR >= 1
-+ caps = gst_pad_get_current_caps(pad);
-+#else
-+ caps = gst_pad_get_negotiated_caps(pad);
-+#endif
-
- if (caps) {
- /* check for demuxers but ignore elements like id3demux */
-@@ -451,7 +489,11 @@ nsresult GStreamerReader::CheckSupportedFormats()
- }
- }
-
-+#if GST_VERSION_MAJOR >= 1
-+ g_value_unset (&value);
-+#else
- gst_object_unref(element);
-+#endif
- done = unsupported;
- break;
- }
-@@ -475,6 +517,8 @@ nsresult GStreamerReader::ResetDecode()
- {
- nsresult res = NS_OK;
-
-+ LOG(PR_LOG_DEBUG, "reset decode");
-+
- if (NS_FAILED(MediaDecoderReader::ResetDecode())) {
- res = NS_ERROR_FAILURE;
- }
-@@ -485,6 +529,11 @@ nsresult GStreamerReader::ResetDecode()
- mVideoSinkBufferCount = 0;
- mAudioSinkBufferCount = 0;
- mReachedEos = false;
-+#if GST_VERSION_MAJOR >= 1
-+ mConfigureAlignment = true;
-+#endif
-+
-+ LOG(PR_LOG_DEBUG, "reset decode done");
-
- return res;
- }
-@@ -508,11 +557,11 @@ bool GStreamerReader::DecodeAudioData()
- /* We have nothing decoded so it makes no sense to return to the state machine
- * as it will call us back immediately, we'll return again and so on, wasting
- * CPU cycles for no job done. So, block here until there is either video or
-- * audio data available
-+ * audio data available
- */
- mon.Wait();
- if (!mAudioSinkBufferCount) {
-- /* There is still no audio data available, so either there is video data or
-+ /* There is still no audio data available, so either there is video data or
- * something else has happened (Eos, etc...). Return to the state machine
- * to process it.
- */
-@@ -533,24 +584,44 @@ bool GStreamerReader::DecodeAudioData()
- }
- }
-
-+#if GST_VERSION_MAJOR >= 1
-+ GstSample *sample = gst_app_sink_pull_sample(mAudioAppSink);
-+ buffer = gst_buffer_ref(gst_sample_get_buffer(sample));
-+ gst_sample_unref(sample);
-+#else
- buffer = gst_app_sink_pull_buffer(mAudioAppSink);
-+#endif
-+
- mAudioSinkBufferCount--;
- }
-
- int64_t timestamp = GST_BUFFER_TIMESTAMP(buffer);
- timestamp = gst_segment_to_stream_time(&mAudioSegment,
- GST_FORMAT_TIME, timestamp);
-+
- timestamp = GST_TIME_AS_USECONDS(timestamp);
-+
- int64_t duration = 0;
- if (GST_CLOCK_TIME_IS_VALID(GST_BUFFER_DURATION(buffer)))
- duration = GST_TIME_AS_USECONDS(GST_BUFFER_DURATION(buffer));
-
- int64_t offset = GST_BUFFER_OFFSET(buffer);
-+#if GST_VERSION_MAJOR >= 1
-+ GstMapInfo info;
-+ gst_buffer_map(buffer, &info, GST_MAP_READ);
-+ unsigned int size = info.size;
-+#else
- unsigned int size = GST_BUFFER_SIZE(buffer);
-+#endif
- int32_t frames = (size / sizeof(AudioDataValue)) / mInfo.mAudio.mChannels;
- ssize_t outSize = static_cast<size_t>(size / sizeof(AudioDataValue));
- nsAutoArrayPtr<AudioDataValue> data(new AudioDataValue[outSize]);
-+#if GST_VERSION_MAJOR >= 1
-+ memcpy(data, info.data, info.size);
-+ gst_buffer_unmap(buffer, &info);
-+#else
- memcpy(data, GST_BUFFER_DATA(buffer), GST_BUFFER_SIZE(buffer));
-+#endif
- AudioData* audio = new AudioData(offset, timestamp, duration,
- frames, data.forget(), mInfo.mAudio.mChannels);
-
-@@ -552,7 +620,7 @@ bool GStreamerReader::DecodeAudioData()
- }
-
- bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
-- int64_t aTimeThreshold)
-+ int64_t aTimeThreshold)
- {
- NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
-
-@@ -571,11 +639,11 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
- /* We have nothing decoded so it makes no sense to return to the state machine
- * as it will call us back immediately, we'll return again and so on, wasting
- * CPU cycles for no job done. So, block here until there is either video or
-- * audio data available
-+ * audio data available
- */
- mon.Wait();
- if (!mVideoSinkBufferCount) {
-- /* There is still no video data available, so either there is audio data or
-+ /* There is still no video data available, so either there is audio data or
- * something else has happened (Eos, etc...). Return to the state machine
- * to process it
- */
-@@ -589,11 +657,17 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
-
- mDecoder->NotifyDecodedFrames(0, 1);
-
-+#if GST_VERSION_MAJOR >= 1
-+ GstSample *sample = gst_app_sink_pull_sample(mVideoAppSink);
-+ buffer = gst_buffer_ref(gst_sample_get_buffer(sample));
-+ gst_sample_unref(sample);
-+#else
- buffer = gst_app_sink_pull_buffer(mVideoAppSink);
-+#endif
- mVideoSinkBufferCount--;
- }
-
-- bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DISCONT);
-+ bool isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT);
- if ((aKeyFrameSkip && !isKeyframe)) {
- gst_buffer_unref(buffer);
- return true;
-@@ -611,10 +687,18 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
- "frame has invalid timestamp");
-
- timestamp = GST_TIME_AS_USECONDS(timestamp);
-+ int64_t duration;
-+ if (GST_CLOCK_TIME_IS_VALID(GST_BUFFER_DURATION(buffer)))
-+ duration = GST_TIME_AS_USECONDS(GST_BUFFER_DURATION(buffer));
-+ else if (fpsNum && fpsDen)
-+ /* add 1-frame duration */
-+ duration = gst_util_uint64_scale(GST_USECOND, fpsDen, fpsNum);
-+
- if (timestamp < aTimeThreshold) {
- LOG(PR_LOG_DEBUG, "skipping frame %" GST_TIME_FORMAT
- " threshold %" GST_TIME_FORMAT,
-- GST_TIME_ARGS(timestamp), GST_TIME_ARGS(aTimeThreshold));
-+ GST_TIME_ARGS(timestamp * 1000),
-+ GST_TIME_ARGS(aTimeThreshold * 1000));
- gst_buffer_unref(buffer);
- return true;
- }
-@@ -623,61 +707,36 @@ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
- /* no more frames */
- return false;
-
-- int64_t duration = 0;
-- if (GST_CLOCK_TIME_IS_VALID(GST_BUFFER_DURATION(buffer)))
-- duration = GST_TIME_AS_USECONDS(GST_BUFFER_DURATION(buffer));
-- else if (fpsNum && fpsDen)
-- /* 1-frame duration */
-- duration = gst_util_uint64_scale(GST_USECOND, fpsNum, fpsDen);
--
-- nsRefPtr<PlanarYCbCrImage> image;
-- GstMozVideoBufferData* bufferdata = reinterpret_cast<GstMozVideoBufferData*>
-- GST_IS_MOZ_VIDEO_BUFFER(buffer)?gst_moz_video_buffer_get_data(GST_MOZ_VIDEO_BUFFER(buffer)):nullptr;
--
-- if(bufferdata)
-- image = bufferdata->mImage;
-+#if GST_VERSION_MAJOR >= 1
-+ if (mConfigureAlignment && buffer->pool) {
-+ GstStructure *config = gst_buffer_pool_get_config(buffer->pool);
-+ GstVideoAlignment align;
-+ if (gst_buffer_pool_config_get_video_alignment(config, &align))
-+ gst_video_info_align(&mVideoInfo, &align);
-+ gst_structure_free(config);
-+ mConfigureAlignment = false;
-+ }
-+#endif
-
-+ nsRefPtr<PlanarYCbCrImage> image = GetImageFromBuffer(buffer);
- if (!image) {
- /* Ugh, upstream is not calling gst_pad_alloc_buffer(). Fallback to
- * allocating a PlanarYCbCrImage backed GstBuffer here and memcpy.
- */
- GstBuffer* tmp = nullptr;
-- AllocateVideoBufferFull(nullptr, GST_BUFFER_OFFSET(buffer),
-- GST_BUFFER_SIZE(buffer), nullptr, &tmp, image);
--
-- /* copy */
-- gst_buffer_copy_metadata(tmp, buffer, (GstBufferCopyFlags)GST_BUFFER_COPY_ALL);
-- memcpy(GST_BUFFER_DATA(tmp), GST_BUFFER_DATA(buffer),
-- GST_BUFFER_SIZE(tmp));
-+ CopyIntoImageBuffer(buffer, &tmp, image);
- gst_buffer_unref(buffer);
- buffer = tmp;
- }
-
-- guint8* data = GST_BUFFER_DATA(buffer);
--
-- int width = mPicture.width;
-- int height = mPicture.height;
-- GstVideoFormat format = mFormat;
--
-- VideoData::YCbCrBuffer b;
-- for(int i = 0; i < 3; i++) {
-- b.mPlanes[i].mData = data + gst_video_format_get_component_offset(format, i,
-- width, height);
-- b.mPlanes[i].mStride = gst_video_format_get_row_stride(format, i, width);
-- b.mPlanes[i].mHeight = gst_video_format_get_component_height(format,
-- i, height);
-- b.mPlanes[i].mWidth = gst_video_format_get_component_width(format,
-- i, width);
-- b.mPlanes[i].mOffset = 0;
-- b.mPlanes[i].mSkip = 0;
-- }
--
-- isKeyframe = !GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT);
- int64_t offset = mDecoder->GetResource()->Tell(); // Estimate location in media.
-- VideoData* video = VideoData::Create(mInfo.mVideo, image, offset,
-- timestamp, duration, b,
-- isKeyframe, -1, mPicture);
-+ VideoData* video = VideoData::CreateFromImage(mInfo.mVideo,
-+ mDecoder->GetImageContainer(),
-+ offset, timestamp, duration,
-+ static_cast<Image*>(image.get()),
-+ isKeyframe, -1, mPicture);
- mVideoQueue.Push(video);
-+
- gst_buffer_unref(buffer);
-
- return true;
-@@ -698,6 +755,10 @@ nsresult GStreamerReader::Seek(int64_t aTarget,
- return NS_ERROR_FAILURE;
- }
- LOG(PR_LOG_DEBUG, "seek succeeded");
-+ GstMessage* message = gst_bus_timed_pop_filtered(mBus, GST_CLOCK_TIME_NONE,
-+ (GstMessageType)(GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR));
-+ gst_message_unref(message);
-+ LOG(PR_LOG_DEBUG, "seek completed");
-
- return DecodeToTarget(aTarget);
- }
-@@ -709,7 +770,9 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered,
- return NS_OK;
- }
-
-+#if GST_VERSION_MAJOR == 0
- GstFormat format = GST_FORMAT_TIME;
-+#endif
- MediaResource* resource = mDecoder->GetResource();
- nsTArray<MediaByteRange> ranges;
- resource->GetCachedRanges(ranges);
-@@ -731,12 +794,21 @@ nsresult GStreamerReader::GetBuffered(dom::TimeRanges* aBuffered,
- int64_t endOffset = ranges[index].mEnd;
- gint64 startTime, endTime;
-
-+#if GST_VERSION_MAJOR >= 1
-+ if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
-+ startOffset, GST_FORMAT_TIME, &startTime))
-+ continue;
-+ if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
-+ endOffset, GST_FORMAT_TIME, &endTime))
-+ continue;
-+#else
- if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
- startOffset, &format, &startTime) || format != GST_FORMAT_TIME)
- continue;
- if (!gst_element_query_convert(GST_ELEMENT(mPlayBin), GST_FORMAT_BYTES,
- endOffset, &format, &endTime) || format != GST_FORMAT_TIME)
- continue;
-+#endif
-
- double start = (double) GST_TIME_AS_USECONDS (startTime) / GST_MSECOND;
- double end = (double) GST_TIME_AS_USECONDS (endTime) / GST_MSECOND;
-@@ -755,7 +827,13 @@ void GStreamerReader::ReadAndPushData(guint aLength)
- nsresult rv = NS_OK;
-
- GstBuffer* buffer = gst_buffer_new_and_alloc(aLength);
-+#if GST_VERSION_MAJOR >= 1
-+ GstMapInfo info;
-+ gst_buffer_map(buffer, &info, GST_MAP_WRITE);
-+ guint8 *data = info.data;
-+#else
- guint8* data = GST_BUFFER_DATA(buffer);
-+#endif
- uint32_t size = 0, bytesRead = 0;
- while(bytesRead < aLength) {
- rv = resource->Read(reinterpret_cast<char*>(data + bytesRead),
-@@ -780,7 +860,12 @@ void GStreamerReader::ReadAndPushData(guint aLength)
- int64_t offset2 = resource->Tell();
- unused << offset2;
-
-+#if GST_VERSION_MAJOR >= 1
-+ gst_buffer_unmap(buffer, &info);
-+ gst_buffer_set_size(buffer, bytesRead);
-+#else
- GST_BUFFER_SIZE(buffer) = bytesRead;
-+#endif
-
- GstFlowReturn ret = gst_app_src_push_buffer(mSource, gst_buffer_ref(buffer));
- if (ret != GST_FLOW_OK) {
-@@ -786,8 +869,13 @@ int64_t GStreamerReader::QueryDuration()
- gint64 duration = 0;
- GstFormat format = GST_FORMAT_TIME;
-
-+#if GST_VERSION_MAJOR >= 1
-+ if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
-+ format, &duration)) {
-+#else
- if (gst_element_query_duration(GST_ELEMENT(mPlayBin),
- &format, &duration)) {
-+#endif
- if (format == GST_FORMAT_TIME) {
- LOG(PR_LOG_DEBUG, "pipeline duration %" GST_TIME_FORMAT,
- GST_TIME_ARGS (duration));
-@@ -893,109 +984,6 @@ gboolean GStreamerReader::SeekData(GstAppSrc* aSrc, guint64 aOffset)
- return NS_SUCCEEDED(rv);
- }
-
--gboolean GStreamerReader::EventProbeCb(GstPad* aPad,
-- GstEvent* aEvent,
-- gpointer aUserData)
--{
-- GStreamerReader* reader = reinterpret_cast<GStreamerReader*>(aUserData);
-- return reader->EventProbe(aPad, aEvent);
--}
--
--gboolean GStreamerReader::EventProbe(GstPad* aPad, GstEvent* aEvent)
--{
-- GstElement* parent = GST_ELEMENT(gst_pad_get_parent(aPad));
-- switch(GST_EVENT_TYPE(aEvent)) {
-- case GST_EVENT_NEWSEGMENT:
-- {
-- gboolean update;
-- gdouble rate;
-- GstFormat format;
-- gint64 start, stop, position;
-- GstSegment* segment;
--
-- /* Store the segments so we can convert timestamps to stream time, which
-- * is what the upper layers sync on.
-- */
-- ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
-- gst_event_parse_new_segment(aEvent, &update, &rate, &format,
-- &start, &stop, &position);
-- if (parent == GST_ELEMENT(mVideoAppSink))
-- segment = &mVideoSegment;
-- else
-- segment = &mAudioSegment;
-- gst_segment_set_newsegment(segment, update, rate, format,
-- start, stop, position);
-- break;
-- }
-- case GST_EVENT_FLUSH_STOP:
-- /* Reset on seeks */
-- ResetDecode();
-- break;
-- default:
-- break;
-- }
-- gst_object_unref(parent);
--
-- return TRUE;
--}
--
--GstFlowReturn GStreamerReader::AllocateVideoBufferFull(GstPad* aPad,
-- guint64 aOffset,
-- guint aSize,
-- GstCaps* aCaps,
-- GstBuffer** aBuf,
-- nsRefPtr<PlanarYCbCrImage>& aImage)
--{
-- /* allocate an image using the container */
-- ImageContainer* container = mDecoder->GetImageContainer();
-- if (!container) {
-- // We don't have an ImageContainer. We probably belong to an <audio>
-- // element.
-- return GST_FLOW_NOT_SUPPORTED;
-- }
-- PlanarYCbCrImage* img =
-- reinterpret_cast<PlanarYCbCrImage*>(
-- container->CreateImage(ImageFormat::PLANAR_YCBCR).get());
-- nsRefPtr<PlanarYCbCrImage> image = dont_AddRef(img);
--
-- /* prepare a GstBuffer pointing to the underlying PlanarYCbCrImage buffer */
-- GstBuffer* buf = GST_BUFFER(gst_moz_video_buffer_new());
-- GST_BUFFER_SIZE(buf) = aSize;
-- /* allocate the actual YUV buffer */
-- GST_BUFFER_DATA(buf) = image->AllocateAndGetNewBuffer(aSize);
--
-- aImage = image;
--
-- /* create a GstMozVideoBufferData to hold the image */
-- GstMozVideoBufferData* bufferdata = new GstMozVideoBufferData(image);
--
-- /* Attach bufferdata to our GstMozVideoBuffer, it will take care to free it */
-- gst_moz_video_buffer_set_data(GST_MOZ_VIDEO_BUFFER(buf), bufferdata);
--
-- *aBuf = buf;
-- return GST_FLOW_OK;
--}
--
--GstFlowReturn GStreamerReader::AllocateVideoBufferCb(GstPad* aPad,
-- guint64 aOffset,
-- guint aSize,
-- GstCaps* aCaps,
-- GstBuffer** aBuf)
--{
-- GStreamerReader* reader = reinterpret_cast<GStreamerReader*>(gst_pad_get_element_private(aPad));
-- return reader->AllocateVideoBuffer(aPad, aOffset, aSize, aCaps, aBuf);
--}
--
--GstFlowReturn GStreamerReader::AllocateVideoBuffer(GstPad* aPad,
-- guint64 aOffset,
-- guint aSize,
-- GstCaps* aCaps,
-- GstBuffer** aBuf)
--{
-- nsRefPtr<PlanarYCbCrImage> image;
-- return AllocateVideoBufferFull(aPad, aOffset, aSize, aCaps, aBuf, image);
--}
--
- GstFlowReturn GStreamerReader::NewPrerollCb(GstAppSink* aSink,
- gpointer aUserData)
- {
-@@ -979,8 +970,12 @@ void GStreamerReader::AudioPreroll()
- {
- /* The first audio buffer has reached the audio sink. Get rate and channels */
- LOG(PR_LOG_DEBUG, "Audio preroll");
-- GstPad* sinkpad = gst_element_get_pad(GST_ELEMENT(mAudioAppSink), "sink");
-+ GstPad* sinkpad = gst_element_get_static_pad(GST_ELEMENT(mAudioAppSink), "sink");
-+#if GST_VERSION_MAJOR >= 1
-+ GstCaps *caps = gst_pad_get_current_caps(sinkpad);
-+#else
- GstCaps* caps = gst_pad_get_negotiated_caps(sinkpad);
-+#endif
- GstStructure* s = gst_caps_get_structure(caps, 0);
- mInfo.mAudio.mRate = mInfo.mAudio.mChannels = 0;
- gst_structure_get_int(s, "rate", (gint*) &mInfo.mAudio.mRate);
-@@ -998,9 +993,18 @@ void GStreamerReader::VideoPreroll()
- {
- /* The first video buffer has reached the video sink. Get width and height */
- LOG(PR_LOG_DEBUG, "Video preroll");
-- GstPad* sinkpad = gst_element_get_pad(GST_ELEMENT(mVideoAppSink), "sink");
-+ GstPad* sinkpad = gst_element_get_static_pad(GST_ELEMENT(mVideoAppSink), "sink");
-+#if GST_VERSION_MAJOR >= 1
-+ GstCaps* caps = gst_pad_get_current_caps(sinkpad);
-+ memset (&mVideoInfo, 0, sizeof (mVideoInfo));
-+ gst_video_info_from_caps(&mVideoInfo, caps);
-+ mFormat = mVideoInfo.finfo->format;
-+ mPicture.width = mVideoInfo.width;
-+ mPicture.height = mVideoInfo.height;
-+#else
- GstCaps* caps = gst_pad_get_negotiated_caps(sinkpad);
- gst_video_format_parse_caps(caps, &mFormat, &mPicture.width, &mPicture.height);
-+#endif
- GstStructure* structure = gst_caps_get_structure(caps, 0);
- gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen);
- NS_ASSERTION(mPicture.width && mPicture.height, "invalid video resolution");
-@@ -1029,6 +1033,7 @@ void GStreamerReader::NewVideoBuffer()
- /* We have a new video buffer queued in the video sink. Increment the counter
- * and notify the decode thread potentially blocked in DecodeVideoFrame
- */
-+
- mDecoder->NotifyDecodedFrames(1, 0);
- mVideoSinkBufferCount++;
- mon.NotifyAll();
-@@ -1095,5 +1100,199 @@ void GStreamerReader::NotifyDataArrived(const char *aBuffer,
- }
- }
-
-+#if GST_VERSION_MAJOR >= 1
-+GstCaps* GStreamerReader::BuildAudioSinkCaps()
-+{
-+ GstCaps* caps = gst_caps_from_string("audio/x-raw, channels={1,2}");
-+ const char* format;
-+#ifdef MOZ_SAMPLE_TYPE_FLOAT32
-+#ifdef IS_LITTLE_ENDIAN
-+ format = "F32LE";
-+#else
-+ format = "F32BE";
-+#endif
-+#else /* !MOZ_SAMPLE_TYPE_FLOAT32 */
-+#ifdef IS_LITTLE_ENDIAN
-+ format = "S16LE";
-+#else
-+ format = "S16BE";
-+#endif
-+#endif
-+ gst_caps_set_simple(caps, "format", G_TYPE_STRING, format, nullptr);
-+
-+ return caps;
-+}
-+
-+void GStreamerReader::InstallPadCallbacks()
-+{
-+ GstPad* sinkpad = gst_element_get_static_pad(GST_ELEMENT(mVideoAppSink), "sink");
-+
-+ gst_pad_add_probe(sinkpad,
-+ (GstPadProbeType) (GST_PAD_PROBE_TYPE_SCHEDULING |
-+ GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM |
-+ GST_PAD_PROBE_TYPE_EVENT_UPSTREAM |
-+ GST_PAD_PROBE_TYPE_EVENT_FLUSH),
-+ &GStreamerReader::EventProbeCb, this, nullptr);
-+ gst_pad_add_probe(sinkpad, GST_PAD_PROBE_TYPE_QUERY_DOWNSTREAM,
-+ GStreamerReader::QueryProbeCb, nullptr, nullptr);
-+
-+ gst_pad_set_element_private(sinkpad, this);
-+ gst_object_unref(sinkpad);
-+
-+ sinkpad = gst_element_get_static_pad(GST_ELEMENT(mAudioAppSink), "sink");
-+ gst_pad_add_probe(sinkpad,
-+ (GstPadProbeType) (GST_PAD_PROBE_TYPE_SCHEDULING |
-+ GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM |
-+ GST_PAD_PROBE_TYPE_EVENT_UPSTREAM |
-+ GST_PAD_PROBE_TYPE_EVENT_FLUSH),
-+ &GStreamerReader::EventProbeCb, this, nullptr);
-+ gst_object_unref(sinkpad);
-+}
-+
-+GstPadProbeReturn GStreamerReader::EventProbeCb(GstPad *aPad,
-+ GstPadProbeInfo *aInfo,
-+ gpointer aUserData)
-+{
-+ GStreamerReader *reader = (GStreamerReader *) aUserData;
-+ GstEvent *aEvent = (GstEvent *)aInfo->data;
-+ return reader->EventProbe(aPad, aEvent);
-+}
-+
-+GstPadProbeReturn GStreamerReader::EventProbe(GstPad *aPad, GstEvent *aEvent)
-+{
-+ GstElement* parent = GST_ELEMENT(gst_pad_get_parent(aPad));
-+
-+ LOG(PR_LOG_DEBUG, "event probe %s", GST_EVENT_TYPE_NAME (aEvent));
-+
-+ switch(GST_EVENT_TYPE(aEvent)) {
-+ case GST_EVENT_SEGMENT:
-+ {
-+ const GstSegment *newSegment;
-+ GstSegment* segment;
-+
-+ /* Store the segments so we can convert timestamps to stream time, which
-+ * is what the upper layers sync on.
-+ */
-+ ReentrantMonitorAutoEnter mon(mGstThreadsMonitor);
-+#if GST_VERSION_MINOR <= 1 && GST_VERSION_MICRO < 1
-+ ResetDecode();
-+#endif
-+ gst_event_parse_segment(aEvent, &newSegment);
-+ if (parent == GST_ELEMENT(mVideoAppSink))
-+ segment = &mVideoSegment;
-+ else
-+ segment = &mAudioSegment;
-+ gst_segment_copy_into (newSegment, segment);
-+ break;
-+ }
-+ case GST_EVENT_FLUSH_STOP:
-+ /* Reset on seeks */
-+ ResetDecode();
-+ break;
-+ default:
-+ break;
-+ }
-+ gst_object_unref(parent);
-+
-+ return GST_PAD_PROBE_OK;
-+}
-+
-+GstPadProbeReturn GStreamerReader::QueryProbeCb(GstPad* aPad, GstPadProbeInfo* aInfo, gpointer aUserData)
-+{
-+ GStreamerReader* reader = reinterpret_cast<GStreamerReader*>(gst_pad_get_element_private(aPad));
-+ return reader->QueryProbe(aPad, aInfo, aUserData);
-+}
-+
-+GstPadProbeReturn GStreamerReader::QueryProbe(GstPad* aPad, GstPadProbeInfo* aInfo, gpointer aUserData)
-+{
-+ GstQuery *query = gst_pad_probe_info_get_query(aInfo);
-+ GstPadProbeReturn ret = GST_PAD_PROBE_OK;
-+
-+ switch (GST_QUERY_TYPE (query)) {
-+ case GST_QUERY_ALLOCATION:
-+ GstCaps *caps;
-+ GstVideoInfo info;
-+ gboolean need_pool;
-+
-+ gst_query_parse_allocation(query, &caps, &need_pool);
-+ gst_video_info_init(&info);
-+ gst_video_info_from_caps(&info, caps);
-+ gst_query_add_allocation_param(query, mAllocator, nullptr);
-+ gst_query_add_allocation_pool(query, mBufferPool, info.size, 0, 0);
-+ gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, nullptr);
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return ret;
-+}
-+
-+void GStreamerReader::ImageDataFromVideoFrame(GstVideoFrame *aFrame,
-+ PlanarYCbCrImage::Data *aData)
-+{
-+ NS_ASSERTION(GST_VIDEO_INFO_IS_YUV(&mVideoInfo),
-+ "Non-YUV video frame formats not supported");
-+ NS_ASSERTION(GST_VIDEO_FRAME_N_COMPONENTS(aFrame) == 3,
-+ "Unsupported number of components in video frame");
-+
-+ aData->mPicX = aData->mPicY = 0;
-+ aData->mPicSize = gfx::IntSize(mPicture.width, mPicture.height);
-+ aData->mStereoMode = StereoMode::MONO;
-+
-+ aData->mYChannel = GST_VIDEO_FRAME_COMP_DATA(aFrame, 0);
-+ aData->mYStride = GST_VIDEO_FRAME_COMP_STRIDE(aFrame, 0);
-+ aData->mYSize = gfx::IntSize(GST_VIDEO_FRAME_COMP_WIDTH(aFrame, 0),
-+ GST_VIDEO_FRAME_COMP_HEIGHT(aFrame, 0));
-+ aData->mYSkip = GST_VIDEO_FRAME_COMP_PSTRIDE(aFrame, 0) - 1;
-+ aData->mCbCrStride = GST_VIDEO_FRAME_COMP_STRIDE(aFrame, 1);
-+ aData->mCbCrSize = gfx::IntSize(GST_VIDEO_FRAME_COMP_WIDTH(aFrame, 1),
-+ GST_VIDEO_FRAME_COMP_HEIGHT(aFrame, 1));
-+ aData->mCbChannel = GST_VIDEO_FRAME_COMP_DATA(aFrame, 1);
-+ aData->mCrChannel = GST_VIDEO_FRAME_COMP_DATA(aFrame, 2);
-+ aData->mCbSkip = GST_VIDEO_FRAME_COMP_PSTRIDE(aFrame, 1) - 1;
-+ aData->mCrSkip = GST_VIDEO_FRAME_COMP_PSTRIDE(aFrame, 2) - 1;
-+}
-+
-+nsRefPtr<PlanarYCbCrImage> GStreamerReader::GetImageFromBuffer(GstBuffer* aBuffer)
-+{
-+ nsRefPtr<PlanarYCbCrImage> image = nullptr;
-+
-+ if (gst_buffer_n_memory(aBuffer) == 1) {
-+ GstMemory* mem = gst_buffer_peek_memory(aBuffer, 0);
-+ if (GST_IS_MOZ_GFX_MEMORY_ALLOCATOR(mem->allocator)) {
-+ image = moz_gfx_memory_get_image(mem);
-+
-+ GstVideoFrame frame;
-+ gst_video_frame_map(&frame, &mVideoInfo, aBuffer, GST_MAP_READ);
-+ PlanarYCbCrImage::Data data;
-+ ImageDataFromVideoFrame(&frame, &data);
-+ image->SetDataNoCopy(data);
-+ gst_video_frame_unmap(&frame);
-+ }
-+ }
-+
-+ return image;
-+}
-+
-+void GStreamerReader::CopyIntoImageBuffer(GstBuffer* aBuffer,
-+ GstBuffer** aOutBuffer,
-+ nsRefPtr<PlanarYCbCrImage> &image)
-+{
-+ *aOutBuffer = gst_buffer_new_allocate(mAllocator, gst_buffer_get_size(aBuffer), nullptr);
-+ GstMemory *mem = gst_buffer_peek_memory(*aOutBuffer, 0);
-+ GstMapInfo map_info;
-+ gst_memory_map(mem, &map_info, GST_MAP_WRITE);
-+ gst_buffer_extract(aBuffer, 0, map_info.data, gst_buffer_get_size(aBuffer));
-+ gst_memory_unmap(mem, &map_info);
-+
-+ /* create a new gst buffer with the newly created memory and copy the
-+ * metadata over from the incoming buffer */
-+ gst_buffer_copy_into(*aOutBuffer, aBuffer,
-+ (GstBufferCopyFlags)(GST_BUFFER_COPY_METADATA), 0, -1);
-+ image = GetImageFromBuffer(*aOutBuffer);
-+}
-+#endif
-+
- } // namespace mozilla
-
-diff --git content/media/gstreamer/GStreamerReader.h content/media/gstreamer/GStreamerReader.h
-index 1e30bed..6a90702 100644
---- content/media/gstreamer/GStreamerReader.h
-+++ content/media/gstreamer/GStreamerReader.h
-@@ -22,6 +22,7 @@
-
- #include "MediaDecoderReader.h"
- #include "MP3FrameParser.h"
-+#include "ImageContainer.h"
- #include "nsRect.h"
-
- namespace mozilla {
-@@ -30,10 +31,6 @@ namespace dom {
- class TimeRanges;
- }
-
--namespace layers {
--class PlanarYCbCrImage;
--}
--
- class AbstractMediaDecoder;
-
- class GStreamerReader : public MediaDecoderReader
-@@ -67,10 +64,20 @@ public:
- return mInfo.HasVideo();
- }
-
-+ layers::ImageContainer* GetImageContainer() { return mDecoder->GetImageContainer(); }
-+
- private:
-
- void ReadAndPushData(guint aLength);
- int64_t QueryDuration();
-+ nsRefPtr<layers::PlanarYCbCrImage> GetImageFromBuffer(GstBuffer* aBuffer);
-+ void CopyIntoImageBuffer(GstBuffer *aBuffer, GstBuffer** aOutBuffer, nsRefPtr<layers::PlanarYCbCrImage> &image);
-+ GstCaps* BuildAudioSinkCaps();
-+ void InstallPadCallbacks();
-+
-+#if GST_VERSION_MAJOR >= 1
-+ void ImageDataFromVideoFrame(GstVideoFrame *aFrame, layers::PlanarYCbCrImage::Data *aData);
-+#endif
-
- /* Called once the pipeline is setup to check that the stream only contains
- * supported formats
-@@ -105,20 +112,31 @@ private:
- gboolean SeekData(GstAppSrc* aSrc, guint64 aOffset);
-
- /* Called when events reach the sinks. See inline comments */
-+#if GST_VERSION_MAJOR == 1
-+ static GstPadProbeReturn EventProbeCb(GstPad *aPad, GstPadProbeInfo *aInfo, gpointer aUserData);
-+ GstPadProbeReturn EventProbe(GstPad *aPad, GstEvent *aEvent);
-+#else
- static gboolean EventProbeCb(GstPad* aPad, GstEvent* aEvent, gpointer aUserData);
- gboolean EventProbe(GstPad* aPad, GstEvent* aEvent);
-+#endif
-
-- /* Called when elements in the video branch of the pipeline call
-- * gst_pad_alloc_buffer(). Used to provide PlanarYCbCrImage backed GstBuffers
-- * to the pipeline so that a memory copy can be avoided when handling YUV
-- * buffers from the pipeline to the gfx side.
-+ /* Called when the video part of the pipeline allocates buffers. Used to
-+ * provide PlanarYCbCrImage backed GstBuffers to the pipeline so that a memory
-+ * copy can be avoided when handling YUV buffers from the pipeline to the gfx
-+ * side.
- */
-+#if GST_VERSION_MAJOR == 1
-+ static GstPadProbeReturn QueryProbeCb(GstPad *aPad, GstPadProbeInfo *aInfo, gpointer aUserData);
-+ GstPadProbeReturn QueryProbe(GstPad *aPad, GstPadProbeInfo *aInfo, gpointer aUserData);
-+#else
- static GstFlowReturn AllocateVideoBufferCb(GstPad* aPad, guint64 aOffset, guint aSize,
- GstCaps* aCaps, GstBuffer** aBuf);
- GstFlowReturn AllocateVideoBufferFull(GstPad* aPad, guint64 aOffset, guint aSize,
- GstCaps* aCaps, GstBuffer** aBuf, nsRefPtr<layers::PlanarYCbCrImage>& aImage);
- GstFlowReturn AllocateVideoBuffer(GstPad* aPad, guint64 aOffset, guint aSize,
- GstCaps* aCaps, GstBuffer** aBuf);
-+#endif
-+
-
- /* Called when the pipeline is prerolled, that is when at start or after a
- * seek, the first audio and video buffers are queued in the sinks.
-@@ -150,6 +168,11 @@ private:
- bool mUseParserDuration;
- int64_t mLastParserDuration;
-
-+#if GST_VERSION_MAJOR >= 1
-+ GstAllocator *mAllocator;
-+ GstBufferPool *mBufferPool;
-+ GstVideoInfo mVideoInfo;
-+#endif
- GstElement* mPlayBin;
- GstBus* mBus;
- GstAppSrc* mSource;
-@@ -180,6 +203,9 @@ private:
- * DecodeAudioData and DecodeVideoFrame should not expect any more data
- */
- bool mReachedEos;
-+#if GST_VERSION_MAJOR >= 1
-+ bool mConfigureAlignment;
-+#endif
- int fpsNum;
- int fpsDen;
- };
-diff --git content/media/gstreamer/moz.build content/media/gstreamer/moz.build
-index 7d51bf5..a3c1856 100644
---- content/media/gstreamer/moz.build
-+++ content/media/gstreamer/moz.build
-@@ -15,10 +15,19 @@ SOURCES += [
- 'GStreamerDecoder.cpp',
- 'GStreamerFormatHelper.cpp',
- 'GStreamerLoader.cpp',
-- 'GStreamerMozVideoBuffer.cpp',
- 'GStreamerReader.cpp',
- ]
-
-+if CONFIG['GST_API_VERSION'] == '1.0':
-+ SOURCES += [
-+ 'GStreamerAllocator.cpp',
-+ ]
-+else:
-+ SOURCES += [
-+ 'GStreamerMozVideoBuffer.cpp',
-+ 'GStreamerReader-0.10.cpp',
-+ ]
-+
- FAIL_ON_WARNINGS = True
-
- FINAL_LIBRARY = 'gklayout'
-diff --git content/media/test/manifest.js content/media/test/manifest.js
-index 6e39753..3c8c3b9 100644
---- content/media/test/manifest.js
-+++ content/media/test/manifest.js
-@@ -357,9 +357,9 @@ var gUnseekableTests = [
- { name:"bogus.duh", type:"bogus/duh"}
- ];
- // Unfortunately big-buck-bunny-unseekable.mp4 is doesn't play on Windows 7, so
--// only include it in the unseekable tests if we're on later versions of Windows.
--if (navigator.userAgent.indexOf("Windows") == -1 ||
-- IsWindows8OrLater()) {
-+// only include it in the unseekable tests if we're on later versions of Windows.
-+// This test actually only passes on win8 at the moment.
-+if (navigator.userAgent.indexOf("Windows") != -1 && IsWindows8OrLater()) {
- gUnseekableTests = gUnseekableTests.concat([
- { name:"big-buck-bunny-unseekable.mp4", type:"video/mp4" }
- ]);
diff --git a/www/firefox/files/patch-bug847568 b/www/firefox/files/patch-bug847568
index a253bbdcaf66..aa188f985b8b 100644
--- a/www/firefox/files/patch-bug847568
+++ b/www/firefox/files/patch-bug847568
@@ -86,21 +86,20 @@ index ac38f40..87536b7 100644
dnl Check for pixman and cairo
dnl ========================================================
-diff --git content/base/src/Makefile.in content/base/src/Makefile.in
-index a618096..596901a 100644
---- content/base/src/Makefile.in
-+++ content/base/src/Makefile.in
-@@ -5,6 +5,10 @@
-
- include $(topsrcdir)/config/rules.mk
+diff --git content/base/src/moz.build content/base/src/moz.build
+index d4f6380..0ee55df 100644
+--- content/base/src/moz.build
++++ content/base/src/moz.build
+@@ -179,6 +179,9 @@ SOURCES += [
+ 'nsObjectLoadingContent.cpp',
+ ]
-+ifdef MOZ_NATIVE_HARFBUZZ
-+nsContentUtils.$(OBJ_SUFFIX): CXXFLAGS+=$(MOZ_HARFBUZZ_CFLAGS)
-+endif
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']]
+
- # gcc requires -msse2 for this file since it uses SSE2 intrinsics. (See bug
- # 585538 comment 12.)
- ifneq (,$(INTEL_ARCHITECTURE))
+ EXTRA_COMPONENTS += [
+ 'contentAreaDropListener.js',
+ 'contentAreaDropListener.manifest',
diff --git gfx/moz.build gfx/moz.build
index 519aa46..6929751 100644
--- gfx/moz.build
diff --git a/www/firefox/files/patch-bug916589 b/www/firefox/files/patch-bug916589
index 5748c3316f85..c6c6c58c9175 100644
--- a/www/firefox/files/patch-bug916589
+++ b/www/firefox/files/patch-bug916589
@@ -2,17 +2,8 @@ diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/qu
index 5b50785..7cf47d5 100644
--- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -31,11 +31,18 @@
- */
-
--#ifndef _SYS_QUEUE_H_
-+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
-+#include_next <sys/queue.h>
-+# if defined(__DragonFly__)
-+#define STAILQ_FOREACH_SAFE STAILQ_FOREACH_MUTABLE
-+#define TAILQ_FOREACH_SAFE TAILQ_FOREACH_MUTABLE
-+# endif
-+#elif !defined(_SYS_QUEUE_H_)
+@@ -33,9 +33,10 @@
+ #ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
-#if !defined(__FreeBSD__) && !defined(DARWIN)
@@ -24,7 +15,7 @@ index 5b50785..7cf47d5 100644
#endif
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +46,6 @@
+@@ -43,8 +44,6 @@
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
@@ -33,7 +24,7 @@ index 5b50785..7cf47d5 100644
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
-@@ -285,7 +286,7 @@ struct { \
+@@ -285,7 +284,7 @@ struct { \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
diff --git a/www/firefox/files/patch-bug973744 b/www/firefox/files/patch-bug973744
deleted file mode 100644
index 6e700705cfbc..000000000000
--- a/www/firefox/files/patch-bug973744
+++ /dev/null
@@ -1,38 +0,0 @@
-commit 2506904
-Author: Alessandro Decina <alessandro.d@gmail.com>
-Date: Wed Feb 19 11:30:09 2014 -0500
-
- Bug 973744 - Remove matroska seek hack in the gstreamer media backend. r=edwin
----
- content/media/gstreamer/GStreamerReader.cpp | 21 ---------------------
- 1 file changed, 21 deletions(-)
-
-diff --git content/media/gstreamer/GStreamerReader.cpp content/media/gstreamer/GStreamerReader.cpp
-index e21ffdd..82dadeb 100644
---- content/media/gstreamer/GStreamerReader.cpp
-+++ content/media/gstreamer/GStreamerReader.cpp
-@@ -381,24 +381,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
- /* we couldn't get this to play */
- return ret;
-
-- /* FIXME: workaround for a bug in matroskademux. This seek makes matroskademux
-- * parse the index */
-- LOG(PR_LOG_DEBUG, "doing matroskademux seek hack");
-- if (gst_element_seek_simple(mPlayBin, GST_FORMAT_TIME,
-- GST_SEEK_FLAG_FLUSH, 0)) {
-- /* after a seek we need to wait again for ASYNC_DONE */
-- message = gst_bus_timed_pop_filtered(mBus, 5 * GST_SECOND,
-- (GstMessageType)(GST_MESSAGE_ASYNC_DONE | GST_MESSAGE_ERROR));
-- LOG(PR_LOG_DEBUG, "matroskademux seek hack done");
-- if (GST_MESSAGE_TYPE(message) != GST_MESSAGE_ASYNC_DONE) {
-- gst_element_set_state(mPlayBin, GST_STATE_NULL);
-- gst_message_unref(message);
-- return NS_ERROR_FAILURE;
-- }
-- } else {
-- LOG(PR_LOG_DEBUG, "matroskademux seek hack failed (non fatal)");
-- }
--
- /* report the duration */
- gint64 duration;
-
diff --git a/www/firefox/files/patch-bug975397 b/www/firefox/files/patch-bug975397
new file mode 100644
index 000000000000..6257e53e772d
--- /dev/null
+++ b/www/firefox/files/patch-bug975397
@@ -0,0 +1,73 @@
+commit 2fe45fb
+Author: L. David Baron <dbaron@dbaron.org>
+Date: Wed Apr 2 22:56:19 2014 -0700
+
+ Bug 975397 - Call TrackImage when constructing a new nsStyleBorder. r=heycam
+
+ I confirmed that the crashtest crashes in the harness without the patch.
+
+ --HG--
+ rename : layout/reftests/backgrounds/blue-32x32.png => layout/style/crashtests/blue-32x32.png
+---
+ layout/base/nsCSSRendering.cpp | 9 +++++++++
+ layout/style/crashtests/blue-32x32.png | Bin 0 -> 110 bytes
+ layout/style/crashtests/border-image-visited-link.html | 10 ++++++++++
+ layout/style/crashtests/crashtests.list | 1 +
+ 4 files changed, 20 insertions(+)
+
+diff --git layout/base/nsCSSRendering.cpp layout/base/nsCSSRendering.cpp
+index d91309b..2d8bb46 100644
+--- layout/base/nsCSSRendering.cpp
++++ layout/base/nsCSSRendering.cpp
+@@ -419,6 +419,10 @@ nsCSSRendering::PaintBorder(nsPresContext* aPresContext,
+ }
+
+ nsStyleBorder newStyleBorder(*styleBorder);
++ // We could do something fancy to avoid the TrackImage/UntrackImage
++ // work, but it doesn't seem worth it. (We need to call TrackImage
++ // since we're not going through nsRuleNode::ComputeBorderData.)
++ newStyleBorder.TrackImage(aPresContext);
+
+ NS_FOR_CSS_SIDES(side) {
+ newStyleBorder.SetBorderColor(side,
+@@ -428,6 +432,11 @@ nsCSSRendering::PaintBorder(nsPresContext* aPresContext,
+ PaintBorderWithStyleBorder(aPresContext, aRenderingContext, aForFrame,
+ aDirtyRect, aBorderArea, newStyleBorder,
+ aStyleContext, aSkipSides);
++
++ // We could do something fancy to avoid the TrackImage/UntrackImage
++ // work, but it doesn't seem worth it. (We need to call UntrackImage
++ // since we're not going through nsStyleBorder::Destroy.)
++ newStyleBorder.UntrackImage(aPresContext);
+ }
+
+ void
+diff --git layout/style/crashtests/blue-32x32.png layout/style/crashtests/blue-32x32.png
+new file mode 100644
+index 0000000..deefd19
+Binary files /dev/null and layout/style/crashtests/blue-32x32.png differ
+diff --git layout/style/crashtests/border-image-visited-link.html layout/style/crashtests/border-image-visited-link.html
+new file mode 100644
+index 0000000..b6e3ae5
+--- /dev/null
++++ layout/style/crashtests/border-image-visited-link.html
+@@ -0,0 +1,10 @@
++<!DOCTYPE HTML>
++<title>border-image on link with visited styles</title>
++<style>
++
++:link { color: blue }
++:visited { color: purple }
++:link, :visited { border: medium solid; border-image: url(blue-32x32.png) 4 4 4 4; }
++
++</style>
++<a href="http://example.com/">test</a>
+diff --git layout/style/crashtests/crashtests.list layout/style/crashtests/crashtests.list
+index e414f28..acd709c3 100644
+--- layout/style/crashtests/crashtests.list
++++ layout/style/crashtests/crashtests.list
+@@ -104,3 +104,4 @@ load 945048-1.html
+ load 972199-1.html
+ load 989965-1.html
+ load large_border_image_width.html
++load border-image-visited-link.html
diff --git a/www/firefox/files/patch-bug975634 b/www/firefox/files/patch-bug975634
deleted file mode 100644
index 4b53531a9a34..000000000000
--- a/www/firefox/files/patch-bug975634
+++ /dev/null
@@ -1,63 +0,0 @@
-diff --git configure.in configure.in
-index 0d9236a..0447104 100644
---- configure.in
-+++ configure.in
-@@ -8670,6 +8670,20 @@ fi
- AC_SUBST(MOZ_EM_DEBUG)
-
- if test -n "$COMPILE_ENVIRONMENT"; then
-+AC_MSG_CHECKING([for posix_fadvise])
-+AC_TRY_LINK([#define _XOPEN_SOURCE 600
-+ #include <fcntl.h>],
-+ [posix_fadvise(0, 0, 0, 0);],
-+ [ac_cv___posix_fadvise=true],
-+ [ac_cv___posix_fadvise=false])
-+
-+if test "$ac_cv___posix_fadvise" = true ; then
-+ AC_DEFINE(HAVE_POSIX_FADVISE)
-+ AC_MSG_RESULT(yes)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+
- AC_MSG_CHECKING([for posix_fallocate])
- AC_TRY_LINK([#define _XOPEN_SOURCE 600
- #include <fcntl.h>],
-diff --git js/src/configure.in js/src/configure.in
-index da9767c..352ba14 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -4025,6 +4025,20 @@ AC_SUBST(CXX_VERSION)
- AC_SUBST(MSMANIFEST_TOOL)
- AC_SUBST(MOZ_LINKER)
-
-+AC_MSG_CHECKING([for posix_fadvise])
-+AC_TRY_LINK([#define _XOPEN_SOURCE 600
-+ #include <fcntl.h>],
-+ [posix_fadvise(0, 0, 0, 0);],
-+ [ac_cv___posix_fadvise=true],
-+ [ac_cv___posix_fadvise=false])
-+
-+if test "$ac_cv___posix_fadvise" = true ; then
-+ AC_DEFINE(HAVE_POSIX_FADVISE)
-+ AC_MSG_RESULT(yes)
-+else
-+ AC_MSG_RESULT(no)
-+fi
-+
- AC_MSG_CHECKING([for posix_fallocate])
- AC_TRY_LINK([#define _XOPEN_SOURCE 600
- #include <fcntl.h>],
-diff --git xpcom/io/nsLocalFileUnix.cpp xpcom/io/nsLocalFileUnix.cpp
-index bacf06c..0e46e4a 100644
---- xpcom/io/nsLocalFileUnix.cpp
-+++ xpcom/io/nsLocalFileUnix.cpp
-@@ -382,7 +382,7 @@ nsLocalFile::OpenNSPRFileDesc(int32_t flags, int32_t mode, PRFileDesc **_retval)
- PR_Delete(mPath.get());
- }
-
--#if defined(LINUX) && !defined(ANDROID)
-+#if defined(HAVE_POSIX_FADVISE)
- if (flags & OS_READAHEAD) {
- posix_fadvise(PR_FileDesc2NativeHandle(*_retval), 0, 0,
- POSIX_FADV_SEQUENTIAL);
diff --git a/www/firefox/files/patch-bug977457 b/www/firefox/files/patch-bug977457
deleted file mode 100644
index cf57b6b1b809..000000000000
--- a/www/firefox/files/patch-bug977457
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git xpcom/base/nsStackWalk.cpp xpcom/base/nsStackWalk.cpp
-index bb0e15b..7641267 100644
---- xpcom/base/nsStackWalk.cpp
-+++ xpcom/base/nsStackWalk.cpp
-@@ -23,6 +23,12 @@ struct CriticalAddress {
- };
- static CriticalAddress gCriticalAddress;
-
-+// for _Unwind_Backtrace from libcxxrt or libunwind
-+// cxxabi.h from libcxxrt implicitly includes unwind.h first
-+#if defined(HAVE__UNWIND_BACKTRACE) && !defined(_GNU_SOURCE)
-+#define _GNU_SOURCE
-+#endif
-+
- #if defined(HAVE_DLOPEN) || defined(XP_MACOSX)
- #include <dlfcn.h>
- #endif
-@@ -1222,9 +1228,6 @@ NS_StackWalk(NS_WalkStackCallback aCallback, uint32_t aSkipFrames,
- #elif defined(HAVE__UNWIND_BACKTRACE)
-
- // libgcc_s.so symbols _Unwind_Backtrace@@GCC_3.3 and _Unwind_GetIP@@GCC_3.0
--#ifndef _GNU_SOURCE
--#define _GNU_SOURCE
--#endif
- #include <unwind.h>
-
- struct unwind_info {
diff --git a/www/firefox/files/patch-bug981348 b/www/firefox/files/patch-bug981348
new file mode 100644
index 000000000000..6eb877b08fa8
--- /dev/null
+++ b/www/firefox/files/patch-bug981348
@@ -0,0 +1,41 @@
+diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp
+index 4b21361..cb3be32 100644
+--- dom/system/OSFileConstants.cpp
++++ dom/system/OSFileConstants.cpp
+@@ -596,7 +596,7 @@ static const dom::ConstantSpec gLibcProperties[] =
+
+ { "OSFILE_SIZEOF_STATVFS", INT_TO_JSVAL(sizeof (struct statvfs)) },
+
+- { "OSFILE_OFFSETOF_STATVFS_F_BSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_bsize)) },
++ { "OSFILE_OFFSETOF_STATVFS_F_FRSIZE", INT_TO_JSVAL(offsetof (struct statvfs, f_frsize)) },
+ { "OSFILE_OFFSETOF_STATVFS_F_BAVAIL", INT_TO_JSVAL(offsetof (struct statvfs, f_bavail)) },
+
+ #endif // defined(XP_UNIX)
+diff --git toolkit/components/osfile/modules/osfile_unix_back.jsm toolkit/components/osfile/modules/osfile_unix_back.jsm
+index b59fca4..0cf220b 100644
+--- toolkit/components/osfile/modules/osfile_unix_back.jsm
++++ toolkit/components/osfile/modules/osfile_unix_back.jsm
+@@ -228,8 +228,8 @@
+ let statvfs = new SharedAll.HollowStructure("statvfs",
+ Const.OSFILE_SIZEOF_STATVFS);
+
+- statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BSIZE,
+- "f_bsize", Type.unsigned_long.implementation);
++ statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_FRSIZE,
++ "f_frsize", Type.unsigned_long.implementation);
+ statvfs.add_field_at(Const.OSFILE_OFFSETOF_STATVFS_F_BAVAIL,
+ "f_bavail", Type.fsblkcnt_t.implementation);
+
+diff --git toolkit/components/osfile/modules/osfile_unix_front.jsm toolkit/components/osfile/modules/osfile_unix_front.jsm
+index 99e5e9b..de642c5 100644
+--- toolkit/components/osfile/modules/osfile_unix_front.jsm
++++ toolkit/components/osfile/modules/osfile_unix_front.jsm
+@@ -373,7 +373,7 @@
+ throw_on_negative("statvfs", UnixFile.statvfs(sourcePath, fileSystemInfoPtr));
+
+ let bytes = new Type.uint64_t.implementation(
+- fileSystemInfo.f_bsize * fileSystemInfo.f_bavail);
++ fileSystemInfo.f_frsize * fileSystemInfo.f_bavail);
+
+ return bytes.value;
+ };
diff --git a/www/firefox/files/patch-bug985848 b/www/firefox/files/patch-bug985848
deleted file mode 100644
index c20c0e039827..000000000000
--- a/www/firefox/files/patch-bug985848
+++ /dev/null
@@ -1,22 +0,0 @@
---- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-@@ -19,7 +19,7 @@
- #include <stdlib.h>
-
- //v4l includes
--#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
- #include <sys/videoio.h>
- #elif defined(__sun)
- #include <sys/videodev2.h>
---- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
-@@ -18,7 +18,7 @@
- #include <string.h>
-
- //v4l includes
--#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
- #include <sys/videoio.h>
- #elif defined(__sun)
- #include <sys/videodev2.h>
diff --git a/www/firefox/files/patch-bug989112 b/www/firefox/files/patch-bug989112
deleted file mode 100644
index 3127fe348d42..000000000000
--- a/www/firefox/files/patch-bug989112
+++ /dev/null
@@ -1,10 +0,0 @@
---- content/media/gstreamer/GStreamerFunctionList.h~
-+++ content/media/gstreamer/GStreamerFunctionList.h
-@@ -122,6 +122,7 @@ GST_FUNC(LIBGSTREAMER, gst_buffer_set_size)
- GST_FUNC(LIBGSTREAMER, gst_buffer_unmap)
- GST_FUNC(LIBGSTREAMER, gst_element_factory_get_metadata)
- GST_FUNC(LIBGSTREAMER, gst_event_parse_segment)
-+GST_FUNC(LIBGSTREAMER, gst_event_type_get_name)
- GST_FUNC(LIBGSTREAMER, gst_memory_init)
- GST_FUNC(LIBGSTREAMER, gst_memory_map)
- GST_FUNC(LIBGSTREAMER, gst_memory_unmap)
diff --git a/www/firefox/files/patch-clang34-disable-stdcall b/www/firefox/files/patch-clang34-disable-stdcall
index 8f4bb31b9ccd..de30c49f9950 100644
--- a/www/firefox/files/patch-clang34-disable-stdcall
+++ b/www/firefox/files/patch-clang34-disable-stdcall
@@ -6,8 +6,8 @@
* NS_HIDDEN_(int) NS_FASTCALL func2(char *foo);
*/
--#if defined(__i386__) && defined(__GNUC__) && !defined(XP_OS2)
-+#if defined(__i386__) && defined(__GNUC__) && !defined(XP_OS2) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
+-#if defined(__i386__) && defined(__GNUC__)
++#if defined(__i386__) && defined(__GNUC__) && !(defined(__clang__) && __clang_major__ == 3 && __clang_minor__ == 4 && __clang_patchlevel__ == 0)
#define NS_FASTCALL __attribute__ ((regparm (3), stdcall))
#define NS_CONSTRUCTOR_FASTCALL __attribute__ ((regparm (3), stdcall))
#elif defined(XP_WIN) && !defined(_WIN64)
diff --git a/www/firefox/files/patch-ipc-chromium-Makefile.in b/www/firefox/files/patch-ipc-chromium-Makefile.in
index 0e20edf2ee37..fc5808594fb4 100644
--- a/www/firefox/files/patch-ipc-chromium-Makefile.in
+++ b/www/firefox/files/patch-ipc-chromium-Makefile.in
@@ -1,13 +1,11 @@
--- ipc/chromium/Makefile.in~
+++ ipc/chromium/Makefile.in
-@@ -55,9 +60,7 @@ vpath %.c \
- $(srcdir)/src/third_party/libevent \
- $(NULL)
- else # } else {
--# message_pump_libevent.cc includes third_party/libevent/event.h,
--# which we put in $(DIST), see export rule below
--LOCAL_INCLUDES += -I$(DIST)
-+LOCAL_INCLUDES += $(filter %/compat, $(MOZ_LIBEVENT_CFLAGS))
- endif # }
+@@ -28,6 +28,8 @@ include $(topsrcdir)/config/rules.mk
+
+ ifdef MOZ_NATIVE_LIBEVENT # {
- vpath %.cc \
++OS_CPPFLAGS += $(filter %/compat, $(MOZ_LIBEVENT_CFLAGS))
++
+ export-preqs = \
+ $(call mkdir_deps,$(CURDIR)/third_party/libevent) \
+ $(NULL)
diff --git a/www/firefox/files/patch-ipc-chromium-src-base-message_pump_libevent.cc b/www/firefox/files/patch-ipc-chromium-src-base-message_pump_libevent.cc
deleted file mode 100644
index 02b6a5e90eca..000000000000
--- a/www/firefox/files/patch-ipc-chromium-src-base-message_pump_libevent.cc
+++ /dev/null
@@ -1,11 +0,0 @@
---- ipc/chromium/src/base/message_pump_libevent.cc~
-+++ ipc/chromium/src/base/message_pump_libevent.cc
-@@ -16,7 +16,7 @@
- #include "base/scoped_ptr.h"
- #include "base/time.h"
- #include "nsDependentSubstring.h"
--#include "third_party/libevent/event.h"
-+#include "event.h"
-
- // Lifecycle of struct event
- // Libevent uses two main data structures:
diff --git a/www/firefox/files/patch-z-bug517422 b/www/firefox/files/patch-z-bug517422
index d44a30f7048e..f1d0278a49af 100644
--- a/www/firefox/files/patch-z-bug517422
+++ b/www/firefox/files/patch-z-bug517422
@@ -22,11 +22,17 @@ diff --git config/external/moz.build config/external/moz.build
index f67c5c7..eb909ce 100644
--- config/external/moz.build
+++ config/external/moz.build
-@@ -15,13 +15,13 @@ if CONFIG['MOZ_UPDATER']:
+@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']:
if not CONFIG['MOZ_NATIVE_BZ2']:
external_dirs += ['modules/libbz2']
-if CONFIG['MOZ_VORBIS']:
++if not CONFIG['MOZ_NATIVE_OGG']:
++ external_dirs += ['media/libogg']
++
++if not CONFIG['MOZ_NATIVE_THEORA']:
++ external_dirs += ['media/libtheora']
++
+if CONFIG['MOZ_VORBIS'] and not CONFIG['MOZ_NATIVE_VORBIS']:
external_dirs += ['media/libvorbis']
@@ -39,16 +45,7 @@ index f67c5c7..eb909ce 100644
external_dirs += ['media/libopus']
if CONFIG['MOZ_WEBM']:
-@@ -34,16 +34,23 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ
- external_dirs += ['media/libvpx']
-
- if CONFIG['MOZ_OGG']:
-- external_dirs += ['media/libogg', 'media/libtheora']
-+ if not CONFIG['MOZ_NATIVE_OGG']:
-+ external_dirs += ['media/libogg']
-+ if not CONFIG['MOZ_NATIVE_THEORA']:
-+ external_dirs += ['media/libtheora']
-
+@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']:
if not CONFIG['MOZ_NATIVE_PNG']:
external_dirs += ['media/libpng']
@@ -61,6 +58,8 @@ index f67c5c7..eb909ce 100644
external_dirs += [
'media/kiss_fft',
'media/libcubeb',
+- 'media/libogg',
+- 'media/libtheora',
- 'media/libspeex_resampler',
- 'media/libsoundtouch',
]
@@ -122,7 +121,7 @@ diff --git configure.in configure.in
index 87db361..7947626 100644
--- configure.in
+++ configure.in
-@@ -5211,6 +5211,57 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
+@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
fi
dnl ========================================================
@@ -136,6 +135,12 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_OGG"; then
+ PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.2.1)
++
++ _SAVE_LIBS=$LIBS
++ LIBS="$LIBS $MOZ_OGG_LIBS"
++ AC_CHECK_FUNC(ogg_set_mem_functions, [],
++ [AC_DEFINE(MOZ_OGG_NO_MEM_REPORTING)])
++ LIBS=$_SAVE_LIBS
+fi
+
+AC_SUBST(MOZ_NATIVE_OGG)
@@ -180,7 +185,7 @@ index 87db361..7947626 100644
dnl = Disable Opus audio codec support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,76 @@ MOZ_ARG_DISABLE_BOOL(opus,
+@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
MOZ_OPUS=1)
dnl ========================================================
@@ -247,6 +252,27 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ _SAVE_CXXFLAGS=$CXXFLAGS
++ CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS"
++ AC_CACHE_CHECK(for soundtouch sample type,
++ ac_cv_soundtouch_sample_type,
++ [AC_TRY_COMPILE([#include <SoundTouch.h>
++ #ifndef SOUNDTOUCH_INTEGER_SAMPLES
++ #error soundtouch expects float samples
++ #endif],
++ [],
++ [ac_cv_soundtouch_sample_type=short],
++ [ac_cv_soundtouch_sample_type=float])])
++ CXXFLAGS=$_SAVE_CXXFLAGS
++ AC_LANG_RESTORE
++
++ if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \
++ -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then
++ AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.])
++ fi
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
@@ -257,30 +283,19 @@ index 87db361..7947626 100644
dnl = Disable VP8 decoder support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(webm,
-diff --git content/media/AudioStream.cpp content/media/AudioStream.cpp
-index 88c8aa6..6b03288 100644
---- content/media/AudioStream.cpp
-+++ content/media/AudioStream.cpp
-@@ -13,7 +13,6 @@
- #include "mozilla/Mutex.h"
- #include <algorithm>
- #include "mozilla/Preferences.h"
--#include "soundtouch/SoundTouch.h"
- #include "Latency.h"
-
- namespace mozilla {
diff --git content/media/AudioStream.h content/media/AudioStream.h
index 085676d..00c54fb 100644
--- content/media/AudioStream.h
+++ content/media/AudioStream.h
-@@ -15,6 +15,7 @@
- #include "mozilla/StaticMutex.h"
+@@ -26,7 +26,7 @@ public:
+ };
- #include "cubeb/cubeb.h"
-+#include "soundtouch/SoundTouch.h"
+ namespace soundtouch {
+-class SoundTouch;
++class MOZ_IMPORT_API SoundTouch;
+ }
- template <>
- class nsAutoRefTraits<cubeb_stream> : public nsPointerRefTraits<cubeb_stream>
+ namespace mozilla {
diff --git content/media/Makefile.in content/media/Makefile.in
index fd34449..c6c42c8 100644
--- content/media/Makefile.in
@@ -447,3 +462,31 @@ index d42137a..695e75a8 100644
ifdef MOZ_NATIVE_LIBEVENT
EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS)
endif
+diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp
+index 2cf281e..6d7af0e 100644
+--- xpcom/build/nsXPComInit.cpp
++++ xpcom/build/nsXPComInit.cpp
+@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **)
+ #include "mozilla/VisualEventTracer.h"
+ #endif
+
++#ifndef MOZ_OGG_NO_MEM_REPORTING
+ #include "ogg/ogg.h"
++#endif
+ #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
+ #include "vpx_mem/vpx_mem.h"
+ #endif
+@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result,
+ // this oddness.
+ mozilla::SetICUMemoryFunctions();
+
++#ifndef MOZ_OGG_NO_MEM_REPORTING
+ // Do the same for libogg.
+ ogg_set_mem_functions(OggReporter::CountingMalloc,
+ OggReporter::CountingCalloc,
+ OggReporter::CountingRealloc,
+ OggReporter::CountingFree);
++#endif
+
+ #if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
+ // And for VPX.
diff --git a/www/libxul/Makefile b/www/libxul/Makefile
index 73c42c05dacf..d65d128968ff 100644
--- a/www/libxul/Makefile
+++ b/www/libxul/Makefile
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= libxul
-DISTVERSION= 24.5.0
-PORTREVISION= 1
+DISTVERSION= 24.6.0
CATEGORIES?= www devel
MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \
https://ftp.mozilla.org/pub/mozilla.org/firefox/candidates/${DISTVERSION}esr-candidates/build1/source/
@@ -39,7 +38,7 @@ WANT_PERL= yes
ALL_TARGET= default
GNU_CONFIGURE= yes
USE_GL= gl
-USES= dos2unix tar:bzip2
+USES= dos2unix pathfix tar:bzip2
DOS2UNIX_FILES= media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
MAKE_ENV= SKIP_GRE_REGISTRATION=1 mozappdir=${PREFIX}/lib/${MOZILLA}
LDFLAGS+= -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}
@@ -51,12 +50,11 @@ USE_GECKO= gecko
OBJDIR_BUILD= # in-tree build broken after bug 789837
MOZILLA_EXEC_NAME=xulrunner
USE_MOZILLA= # empty
-MOZILLA_PLIST_DIRS= bin include lib share/idl
+MOZILLA_PLIST_DIRS= bin include lib share/idl libdata
PLIST_DIRSTRY= share/idl
MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \
mozilla-plugin
-NO_STAGE= yes
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
diff --git a/www/libxul/distinfo b/www/libxul/distinfo
index b872161f5c4c..8137a3cde37b 100644
--- a/www/libxul/distinfo
+++ b/www/libxul/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-24.5.0esr.source.tar.bz2) = 1670e72511cad6047eb8726fa6c2362adcb95b5d53a3c327c4c38bed4b788701
-SIZE (firefox-24.5.0esr.source.tar.bz2) = 119830718
+SHA256 (firefox-24.6.0esr.source.tar.bz2) = 02ee0424ddefd912768a3ae700a4581053ef68f9dea46c34e43e833c119289e4
+SIZE (firefox-24.6.0esr.source.tar.bz2) = 119465935
diff --git a/www/libxul/files/patch-bug1013675 b/www/libxul/files/patch-bug1013675
new file mode 100644
index 000000000000..cb1b4d0f5ea7
--- /dev/null
+++ b/www/libxul/files/patch-bug1013675
@@ -0,0 +1,89 @@
+diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
+index 13a286f..293bd73 100644
+--- xpcom/base/nsDebugImpl.cpp
++++ xpcom/base/nsDebugImpl.cpp
+@@ -45,13 +45,44 @@
+ #endif
+ #endif
+
+-#if defined(XP_MACOSX)
++#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <stdbool.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/sysctl.h>
+ #endif
+
++#if defined(__OpenBSD__)
++#include <sys/proc.h>
++#endif
++
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(XP_MACOSX)
++#define KP_FLAGS kp_proc.p_flag
++#elif defined(__DragonFly__)
++#define KP_FLAGS kp_flags
++#elif defined(__FreeBSD__)
++#define KP_FLAGS ki_flag
++#elif defined(__OpenBSD__) && !defined(_P_TRACED)
++#define KP_FLAGS p_psflags
++#define P_TRACED PS_TRACED
++#else
++#define KP_FLAGS p_flag
++#endif
++
+ #include "mozilla/mozalloc_abort.h"
+
+ static void
+@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+
+ #if defined(XP_WIN)
+ *aResult = ::IsDebuggerPresent();
+-#elif defined(XP_MACOSX)
++#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ // Specify the info we're looking for
+- int mib[4];
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_PROC;
+- mib[2] = KERN_PROC_PID;
+- mib[3] = getpid();
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
+ size_t mibSize = sizeof(mib) / sizeof(int);
+
+- struct kinfo_proc info;
++ KINFO_PROC info;
+ size_t infoSize = sizeof(info);
+ memset(&info, 0, infoSize);
+
+@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+ return NS_OK;
+ }
+
+- if (info.kp_proc.p_flag & P_TRACED) {
++ if (info.KP_FLAGS & P_TRACED) {
+ *aResult = true;
+ }
+ #endif
diff --git a/www/libxul/files/patch-bug1015547 b/www/libxul/files/patch-bug1015547
new file mode 100644
index 000000000000..df963e0de88c
--- /dev/null
+++ b/www/libxul/files/patch-bug1015547
@@ -0,0 +1,94 @@
+diff --git configure.in configure.in
+index 7bed45f..053de17 100644
+--- configure.in
++++ configure.in
+@@ -3166,6 +3166,7 @@ AC_CHECK_FUNCS(random strerror lchown fc
+ AC_CHECK_FUNCS(statvfs64 statvfs statfs64 statfs)
+ AC_CHECK_FUNCS(flockfile getpagesize)
+ AC_CHECK_FUNCS(localtime_r strtok_r)
++AC_CHECK_FUNCS(arc4random arc4random_buf)
+
+ dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
+ AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
+diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
+index 0687344..ca3ff8b 100644
+--- xpcom/base/nsUUIDGenerator.cpp
++++ xpcom/base/nsUUIDGenerator.cpp
+@@ -15,6 +15,10 @@
+
+ #include "nsUUIDGenerator.h"
+
++#ifdef ANDROID
++extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
++#endif
++
+ using namespace mozilla;
+
+ NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
+@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
+ // We're a service, so we're guaranteed that Init() is not going
+ // to be reentered while we're inside Init().
+
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ /* initialize random number generator using NSPR random noise */
+ unsigned int seed;
+
+@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
+ return NS_ERROR_FAILURE;
+ #endif
+
+-#endif /* non XP_WIN and non XP_MACOSX */
++#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
+
+ return NS_OK;
+ }
+@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ * back to it; instead, we use the value returned when we called
+ * initstate, since older glibc's have broken setstate() return values
+ */
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ setstate(mState);
+ #endif
+
++#ifdef HAVE_ARC4RANDOM_BUF
++ arc4random_buf(id, sizeof(nsID));
++#else /* HAVE_ARC4RANDOM_BUF */
+ size_t bytesLeft = sizeof(nsID);
+ while (bytesLeft > 0) {
+-#ifdef ANDROID
++#ifdef HAVE_ARC4RANDOM
+ long rval = arc4random();
+ const size_t mRBytes = 4;
+ #else
+@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+
+ bytesLeft -= toWrite;
+ }
++#endif /* HAVE_ARC4RANDOM_BUF */
+
+ /* Put in the version */
+ id->m2 &= 0x0fff;
+@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ id->m3[0] &= 0x3f;
+ id->m3[0] |= 0x80;
+
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ /* Restore the previous RNG state */
+ setstate(mSavedState);
+ #endif
+diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
+index 6a24212..68ed6f2 100644
+--- xpcom/base/nsUUIDGenerator.h
++++ xpcom/base/nsUUIDGenerator.h
+@@ -27,7 +27,7 @@ private:
+ protected:
+
+ mozilla::Mutex mLock;
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ char mState[128];
+ char *mSavedState;
+ uint8_t mRBytes;
diff --git a/www/libxul/files/patch-bug916589 b/www/libxul/files/patch-bug916589
index 5748c3316f85..c6c6c58c9175 100644
--- a/www/libxul/files/patch-bug916589
+++ b/www/libxul/files/patch-bug916589
@@ -2,17 +2,8 @@ diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/qu
index 5b50785..7cf47d5 100644
--- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -31,11 +31,18 @@
- */
-
--#ifndef _SYS_QUEUE_H_
-+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
-+#include_next <sys/queue.h>
-+# if defined(__DragonFly__)
-+#define STAILQ_FOREACH_SAFE STAILQ_FOREACH_MUTABLE
-+#define TAILQ_FOREACH_SAFE TAILQ_FOREACH_MUTABLE
-+# endif
-+#elif !defined(_SYS_QUEUE_H_)
+@@ -33,9 +33,10 @@
+ #ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
-#if !defined(__FreeBSD__) && !defined(DARWIN)
@@ -24,7 +15,7 @@ index 5b50785..7cf47d5 100644
#endif
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +46,6 @@
+@@ -43,8 +44,6 @@
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
@@ -33,7 +24,7 @@ index 5b50785..7cf47d5 100644
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
-@@ -285,7 +286,7 @@ struct { \
+@@ -285,7 +284,7 @@ struct { \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
diff --git a/www/libxul/files/patch-zz-bug517422 b/www/libxul/files/patch-zz-bug517422
index acdd451854cd..1c3d05480bc2 100644
--- a/www/libxul/files/patch-zz-bug517422
+++ b/www/libxul/files/patch-zz-bug517422
@@ -178,7 +178,7 @@ index 87db361..7947626 100644
dnl = Disable Opus audio codec support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,76 @@ MOZ_ARG_DISABLE_BOOL(opus,
+@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
MOZ_OPUS=1)
dnl ========================================================
@@ -245,6 +245,27 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ _SAVE_CXXFLAGS=$CXXFLAGS
++ CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS"
++ AC_CACHE_CHECK(for soundtouch sample type,
++ ac_cv_soundtouch_sample_type,
++ [AC_TRY_COMPILE([#include <SoundTouch.h>
++ #ifndef SOUNDTOUCH_INTEGER_SAMPLES
++ #error soundtouch expects float samples
++ #endif],
++ [],
++ [ac_cv_soundtouch_sample_type=short],
++ [ac_cv_soundtouch_sample_type=float])])
++ CXXFLAGS=$_SAVE_CXXFLAGS
++ AC_LANG_RESTORE
++
++ if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \
++ -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then
++ AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.])
++ fi
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
diff --git a/www/linux-firefox/Makefile b/www/linux-firefox/Makefile
index 61891e0f8780..4f117bab68e4 100644
--- a/www/linux-firefox/Makefile
+++ b/www/linux-firefox/Makefile
@@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 29.0
+DISTVERSION= 30.0
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
@@ -11,7 +11,8 @@ DISTNAME= ${PORTNAME}-${DISTVERSION}
MAINTAINER= gecko@FreeBSD.org
COMMENT= Web browser based on the browser portion of Mozilla
-USE_BZIP2= yes
+USES= tar:bzip2
+
WANT_GTK218= yes
USE_LINUX_APPS= dbusglib dbuslibs alsalib alsa-plugins-oss
diff --git a/www/linux-firefox/distinfo b/www/linux-firefox/distinfo
index be9204d07efe..a9c089c426e3 100644
--- a/www/linux-firefox/distinfo
+++ b/www/linux-firefox/distinfo
@@ -1,5 +1,5 @@
-SHA256 (firefox-29.0.tar.bz2) = e616abb6854480a33c47b902d1ba277717a855ead3bff560025a25a7f4b1da6d
-SIZE (firefox-29.0.tar.bz2) = 36330381
+SHA256 (firefox-30.0.tar.bz2) = 4bca44a1ba94bf5616f7ea650e37cd3e5a719546def9e4a08ee88aedbc3a4db6
+SIZE (firefox-30.0.tar.bz2) = 37350490
SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99
SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908
SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b
diff --git a/www/linux-seamonkey/Makefile b/www/linux-seamonkey/Makefile
index d6cbb09e04da..4ec42f867bd1 100644
--- a/www/linux-seamonkey/Makefile
+++ b/www/linux-seamonkey/Makefile
@@ -9,7 +9,7 @@ MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US
MAINTAINER= gecko@FreeBSD.org
COMMENT= The open source, standards compliant web browser
-USE_BZIP2= yes
+USES= tar:bzip2
USE_LINUX_APPS= dbusglib dbuslibs alsalib alsa-plugins-oss
diff --git a/www/seamonkey/Makefile b/www/seamonkey/Makefile
index ff755e2b1848..ab7a35296b76 100644
--- a/www/seamonkey/Makefile
+++ b/www/seamonkey/Makefile
@@ -70,7 +70,6 @@ MAILNEWS_DESC?= Mail and News modules
ALL_TARGET= build
MAKEFILE= ${WRKSRC}/client.mk
-NO_STAGE= yes
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.options.mk>
@@ -198,50 +197,27 @@ post-build:
-C ${WRKSRC}/mailnews/extensions/enigmail
.endif
-port-pre-install:
- ${ECHO_CMD} share/applications/${MOZILLA}.desktop >> ${PLIST}
- ${ECHO_CMD} 'share/pixmaps/${MOZILLA}.png' >> ${PLIST}
-
post-install:
${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${PREFIX}/share/applications/
${LN} -sf ${PREFIX}/lib/${MOZILLA}/chrome/icons/default/default48.png \
- ${PREFIX}/share/pixmaps/${MOZILLA}.png
+ ${STAGEDIR}${PREFIX}/share/pixmaps/${MOZILLA}.png
.if ${PORT_OPTIONS:MLIGHTNING}
- @${MKDIR} ${XPI_LIBDIR}/${XPI_ID} ${XPI_LIBDIR}/symlinks/seamonkey
- @(cd ${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE})
- @${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${XPI_LIBDIR}/${XPI_ID}
- @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${XPI_LIBDIR}/${XPI_ID}/install.rdf
- @${CHMOD} -R a+rX,go-w ${XPI_LIBDIR}/${XPI_ID}
- @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${LOCALBASE}/lib/seamonkey/extensions 2>/dev/null || true
- @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${XPI_LIBDIR}/symlinks/seamonkey 2>/dev/null || true
- @(cd ${XPI_LIBDIR}; ${FIND} ${XPI_ID} -not -type d) | ${SORT} | \
- ${SED} -ne 's,^,lib/xpi/,p' >> ${TMPPLIST}
- @${ECHO_CMD} 'lib/xpi/symlinks/seamonkey/${XPI_ID}' >> ${TMPPLIST}
+ @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/seamonkey
+ @(cd ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}; ${TAR} -xf ${XPI_FILE})
+ @${REINPLACE_CMD} -i "" "s/${XPI_ORIG_ID}/${XPI_ID}/" ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}/install.rdf
+ @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${XPI_ID}
+ @${LN} -sf ${XPI_LIBDIR}/${XPI_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/seamonkey 2>/dev/null || true
@${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${XPI_ID} ${LOCALBASE}/lib/seamonkey/extensions 2>/dev/null || true' >> ${TMPPLIST}
@${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/seamonkey/extensions/${XPI_ID}' >> ${TMPPLIST}
- @(cd ${XPI_LIBDIR}; ${FIND} ${XPI_ID} -type d) | ${SORT} -r | \
- ${SED} -ne 's,^,@dirrm lib/xpi/,p' >> ${TMPPLIST}
.endif
.if ${PORT_OPTIONS:MMAILNEWS} && ${PORT_OPTIONS:MENIGMAIL}
- @${MKDIR} ${XPI_LIBDIR}/${EM_ID} ${XPI_LIBDIR}/symlinks/${PORTNAME}
- @(cd ${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE})
- @${CHOWN} -R ${SHAREOWN}:${SHAREGRP} ${XPI_LIBDIR}/${EM_ID}
- @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES}
- @${CHMOD} -R a+rX,go-w ${XPI_LIBDIR}/${EM_ID}
- @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true
- @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true
- @(cd ${XPI_LIBDIR}; ${FIND} ${EM_ID} -not -type d) | ${SORT} | \
- ${SED} -ne 's,^,lib/xpi/,p' >> ${TMPPLIST}
- @${ECHO_CMD} 'lib/xpi/symlinks/${PORTNAME}/${EM_ID}' >> ${TMPPLIST}
+ @${MKDIR} ${STAGEDIR}${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME}
+ @(cd ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}; ${TAR} -xf ${EM_XPI_FILE})
+ @${REINPLACE_CMD} -i "" "s/${EM_ORIG_ID}/${EM_ID}/" ${EM_ID_RFILES:S/^/${STAGEDIR}/g}
+ @${CHMOD} -R a+rX,go-w ${STAGEDIR}${XPI_LIBDIR}/${EM_ID}
+ @${LN} -sf ${XPI_LIBDIR}/${EM_ID} ${STAGEDIR}${XPI_LIBDIR}/symlinks/${PORTNAME} 2>/dev/null || true
@${ECHO_CMD} '@exec ${LN} -sf %D/lib/xpi/${EM_ID} ${LOCALBASE}/lib/${PORTNAME}/extensions 2>/dev/null || true' >> ${TMPPLIST}
@${ECHO_CMD} '@unexec ${RM} -f ${LOCALBASE}/lib/${PORTNAME}/extensions/${EM_ID}' >> ${TMPPLIST}
- @(cd ${XPI_LIBDIR}; ${FIND} ${EM_ID} -type d) | ${SORT} -r | \
- ${SED} -ne 's,^,@dirrm lib/xpi/,p' >> ${TMPPLIST}
-.endif
-.if ${PORT_OPTIONS:MLIGHTNING} || ${PORT_OPTIONS:MMAILNEWS} && ${PORT_OPTIONS:MENIGMAIL}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi/symlinks/${PORTNAME} 2>/dev/null || true' >> ${TMPPLIST}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi/symlinks 2>/dev/null || true' >> ${TMPPLIST}
- @${ECHO_CMD} '@unexec rmdir %D/lib/xpi 2>/dev/null || true' >> ${TMPPLIST}
.endif
.include <bsd.port.post.mk>
diff --git a/www/seamonkey/files/patch-bug1013675 b/www/seamonkey/files/patch-bug1013675
new file mode 100644
index 000000000000..c8b0a6bf02d0
--- /dev/null
+++ b/www/seamonkey/files/patch-bug1013675
@@ -0,0 +1,88 @@
+diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
+index 13a286f..293bd73 100644
+--- mozilla/xpcom/base/nsDebugImpl.cpp
++++ mozilla/xpcom/base/nsDebugImpl.cpp
+@@ -45,12 +45,43 @@
+ #endif
+ #endif
+
+-#if defined(XP_MACOSX)
++#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ #include <stdbool.h>
+ #include <unistd.h>
++#include <sys/param.h>
+ #include <sys/sysctl.h>
+ #endif
+
++#if defined(__OpenBSD__)
++#include <sys/proc.h>
++#endif
++
++#if defined(__DragonFly__) || defined(__FreeBSD__)
++#include <sys/user.h>
++#endif
++
++#if defined(__NetBSD__)
++#undef KERN_PROC
++#define KERN_PROC KERN_PROC2
++#define KINFO_PROC struct kinfo_proc2
++#else
++#define KINFO_PROC struct kinfo_proc
++#endif
++
++#if defined(XP_MACOSX)
++#define KP_FLAGS kp_proc.p_flag
++#elif defined(__DragonFly__)
++#define KP_FLAGS kp_flags
++#elif defined(__FreeBSD__)
++#define KP_FLAGS ki_flag
++#elif defined(__OpenBSD__) && !defined(_P_TRACED)
++#define KP_FLAGS p_psflags
++#define P_TRACED PS_TRACED
++#else
++#define KP_FLAGS p_flag
++#endif
++
+ #include "mozilla/mozalloc_abort.h"
+
+ static void
+@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+
+ #if defined(XP_WIN)
+ *aResult = ::IsDebuggerPresent();
+-#elif defined(XP_MACOSX)
++#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
++ || defined(__NetBSD__) || defined(__OpenBSD__)
+ // Specify the info we're looking for
+- int mib[4];
+- mib[0] = CTL_KERN;
+- mib[1] = KERN_PROC;
+- mib[2] = KERN_PROC_PID;
+- mib[3] = getpid();
++ int mib[] = {
++ CTL_KERN,
++ KERN_PROC,
++ KERN_PROC_PID,
++ getpid(),
++#if defined(__NetBSD__) || defined(__OpenBSD__)
++ sizeof(KINFO_PROC),
++ 1,
++#endif
++ };
+ size_t mibSize = sizeof(mib) / sizeof(int);
+
+- struct kinfo_proc info;
++ KINFO_PROC info;
+ size_t infoSize = sizeof(info);
+ memset(&info, 0, infoSize);
+
+@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
+ return NS_OK;
+ }
+
+- if (info.kp_proc.p_flag & P_TRACED) {
++ if (info.KP_FLAGS & P_TRACED) {
+ *aResult = true;
+ }
+ #endif
diff --git a/www/seamonkey/files/patch-bug1015547 b/www/seamonkey/files/patch-bug1015547
new file mode 100644
index 000000000000..8e6189444b50
--- /dev/null
+++ b/www/seamonkey/files/patch-bug1015547
@@ -0,0 +1,95 @@
+diff --git configure.in configure.in
+index 7bed45f..053de17 100644
+--- mozilla/configure.in
++++ mozilla/configure.in
+@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
+ dnl ========================================================
+ AC_PROG_GCC_TRADITIONAL
+ AC_FUNC_MEMCMP
+-AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
++AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
+
+ dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
+ AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
+diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
+index 0687344..ca3ff8b 100644
+--- mozilla/xpcom/base/nsUUIDGenerator.cpp
++++ mozilla/xpcom/base/nsUUIDGenerator.cpp
+@@ -15,6 +15,10 @@
+
+ #include "nsUUIDGenerator.h"
+
++#ifdef ANDROID
++extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
++#endif
++
+ using namespace mozilla;
+
+ NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
+@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
+ // We're a service, so we're guaranteed that Init() is not going
+ // to be reentered while we're inside Init().
+
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ /* initialize random number generator using NSPR random noise */
+ unsigned int seed;
+
+@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
+ return NS_ERROR_FAILURE;
+ #endif
+
+-#endif /* non XP_WIN and non XP_MACOSX */
++#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
+
+ return NS_OK;
+ }
+@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ * back to it; instead, we use the value returned when we called
+ * initstate, since older glibc's have broken setstate() return values
+ */
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ setstate(mState);
+ #endif
+
++#ifdef HAVE_ARC4RANDOM_BUF
++ arc4random_buf(id, sizeof(nsID));
++#else /* HAVE_ARC4RANDOM_BUF */
+ size_t bytesLeft = sizeof(nsID);
+ while (bytesLeft > 0) {
+-#ifdef ANDROID
++#ifdef HAVE_ARC4RANDOM
+ long rval = arc4random();
+ const size_t mRBytes = 4;
+ #else
+@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+
+ bytesLeft -= toWrite;
+ }
++#endif /* HAVE_ARC4RANDOM_BUF */
+
+ /* Put in the version */
+ id->m2 &= 0x0fff;
+@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
+ id->m3[0] &= 0x3f;
+ id->m3[0] |= 0x80;
+
+-#ifndef ANDROID
++#ifndef HAVE_ARC4RANDOM
+ /* Restore the previous RNG state */
+ setstate(mSavedState);
+ #endif
+diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
+index 6a24212..68ed6f2 100644
+--- mozilla/xpcom/base/nsUUIDGenerator.h
++++ mozilla/xpcom/base/nsUUIDGenerator.h
+@@ -27,7 +27,7 @@ private:
+ protected:
+
+ mozilla::Mutex mLock;
+-#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
++#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
+ char mState[128];
+ char *mSavedState;
+ uint8_t mRBytes;
diff --git a/www/seamonkey/files/patch-bug916589 b/www/seamonkey/files/patch-bug916589
index c6aef052c4ce..3c24bf7ef332 100644
--- a/www/seamonkey/files/patch-bug916589
+++ b/www/seamonkey/files/patch-bug916589
@@ -2,17 +2,8 @@ diff --git media/mtransport/third_party/nrappkit/src/port/generic/include/sys/qu
index 5b50785..7cf47d5 100644
--- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
-@@ -31,11 +31,18 @@
- */
-
--#ifndef _SYS_QUEUE_H_
-+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
-+#include_next <sys/queue.h>
-+# if defined(__DragonFly__)
-+#define STAILQ_FOREACH_SAFE STAILQ_FOREACH_MUTABLE
-+#define TAILQ_FOREACH_SAFE TAILQ_FOREACH_MUTABLE
-+# endif
-+#elif !defined(_SYS_QUEUE_H_)
+@@ -33,9 +33,10 @@
+ #ifndef _SYS_QUEUE_H_
#define _SYS_QUEUE_H_
-#if !defined(__FreeBSD__) && !defined(DARWIN)
@@ -24,7 +15,7 @@ index 5b50785..7cf47d5 100644
#endif
#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
-@@ -43,8 +46,6 @@
+@@ -43,8 +44,6 @@
(var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
(var) = (tvar))
@@ -33,7 +24,7 @@ index 5b50785..7cf47d5 100644
/*
* This file defines four types of data structures: singly-linked lists,
* singly-linked tail queues, lists and tail queues.
-@@ -285,7 +286,7 @@ struct { \
+@@ -285,7 +284,7 @@ struct { \
(STAILQ_EMPTY((head)) ? \
NULL : \
((struct type *) \
diff --git a/www/seamonkey/files/patch-bug975397 b/www/seamonkey/files/patch-bug975397
new file mode 100644
index 000000000000..69e87cef0dc3
--- /dev/null
+++ b/www/seamonkey/files/patch-bug975397
@@ -0,0 +1,73 @@
+commit 2fe45fb
+Author: L. David Baron <dbaron@dbaron.org>
+Date: Wed Apr 2 22:56:19 2014 -0700
+
+ Bug 975397 - Call TrackImage when constructing a new nsStyleBorder. r=heycam
+
+ I confirmed that the crashtest crashes in the harness without the patch.
+
+ --HG--
+ rename : layout/reftests/backgrounds/blue-32x32.png => layout/style/crashtests/blue-32x32.png
+---
+ layout/base/nsCSSRendering.cpp | 9 +++++++++
+ layout/style/crashtests/blue-32x32.png | Bin 0 -> 110 bytes
+ layout/style/crashtests/border-image-visited-link.html | 10 ++++++++++
+ layout/style/crashtests/crashtests.list | 1 +
+ 4 files changed, 20 insertions(+)
+
+diff --git layout/base/nsCSSRendering.cpp layout/base/nsCSSRendering.cpp
+index d91309b..2d8bb46 100644
+--- mozilla/layout/base/nsCSSRendering.cpp
++++ mozilla/layout/base/nsCSSRendering.cpp
+@@ -419,6 +419,10 @@ nsCSSRendering::PaintBorder(nsPresContext* aPresContext,
+ }
+
+ nsStyleBorder newStyleBorder(*styleBorder);
++ // We could do something fancy to avoid the TrackImage/UntrackImage
++ // work, but it doesn't seem worth it. (We need to call TrackImage
++ // since we're not going through nsRuleNode::ComputeBorderData.)
++ newStyleBorder.TrackImage(aPresContext);
+
+ NS_FOR_CSS_SIDES(side) {
+ newStyleBorder.SetBorderColor(side,
+@@ -428,6 +432,11 @@ nsCSSRendering::PaintBorder(nsPresContext* aPresContext,
+ PaintBorderWithStyleBorder(aPresContext, aRenderingContext, aForFrame,
+ aDirtyRect, aBorderArea, newStyleBorder,
+ aStyleContext, aSkipSides);
++
++ // We could do something fancy to avoid the TrackImage/UntrackImage
++ // work, but it doesn't seem worth it. (We need to call UntrackImage
++ // since we're not going through nsStyleBorder::Destroy.)
++ newStyleBorder.UntrackImage(aPresContext);
+ }
+
+ void
+diff --git layout/style/crashtests/blue-32x32.png layout/style/crashtests/blue-32x32.png
+new file mode 100644
+index 0000000..deefd19
+Binary files /dev/null and layout/style/crashtests/blue-32x32.png differ
+diff --git layout/style/crashtests/border-image-visited-link.html layout/style/crashtests/border-image-visited-link.html
+new file mode 100644
+index 0000000..b6e3ae5
+--- /dev/null
++++ mozilla/layout/style/crashtests/border-image-visited-link.html
+@@ -0,0 +1,10 @@
++<!DOCTYPE HTML>
++<title>border-image on link with visited styles</title>
++<style>
++
++:link { color: blue }
++:visited { color: purple }
++:link, :visited { border: medium solid; border-image: url(blue-32x32.png) 4 4 4 4; }
++
++</style>
++<a href="http://example.com/">test</a>
+diff --git layout/style/crashtests/crashtests.list layout/style/crashtests/crashtests.list
+index e414f28..acd709c3 100644
+--- mozilla/layout/style/crashtests/crashtests.list
++++ mozilla/layout/style/crashtests/crashtests.list
+@@ -102,3 +102,4 @@ load 930270-1.html
+ load 930270-2.html
+ load 945048-1.html
+ load 989965-1.html
++load border-image-visited-link.html
diff --git a/www/seamonkey/files/patch-z-bug517422 b/www/seamonkey/files/patch-z-bug517422
index 82e453baca96..15728f8cb66e 100644
--- a/www/seamonkey/files/patch-z-bug517422
+++ b/www/seamonkey/files/patch-z-bug517422
@@ -180,7 +180,7 @@ index 87db361..7947626 100644
dnl = Disable Opus audio codec support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,76 @@ MOZ_ARG_DISABLE_BOOL(opus,
+@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
MOZ_OPUS=1)
dnl ========================================================
@@ -247,6 +247,27 @@ index 87db361..7947626 100644
+
+if test -n "$MOZ_NATIVE_SOUNDTOUCH"; then
+ PKG_CHECK_MODULES(MOZ_SOUNDTOUCH, soundtouch >= 1.7.0)
++
++ AC_LANG_SAVE
++ AC_LANG_CPLUSPLUS
++ _SAVE_CXXFLAGS=$CXXFLAGS
++ CXXFLAGS="$CXXFLAGS $MOZ_SOUNDTOUCH_CFLAGS"
++ AC_CACHE_CHECK(for soundtouch sample type,
++ ac_cv_soundtouch_sample_type,
++ [AC_TRY_COMPILE([#include <SoundTouch.h>
++ #ifndef SOUNDTOUCH_INTEGER_SAMPLES
++ #error soundtouch expects float samples
++ #endif],
++ [],
++ [ac_cv_soundtouch_sample_type=short],
++ [ac_cv_soundtouch_sample_type=float])])
++ CXXFLAGS=$_SAVE_CXXFLAGS
++ AC_LANG_RESTORE
++
++ if test \( -n "$MOZ_SAMPLE_TYPE_S16" -a "$ac_cv_soundtouch_sample_type" != short \) \
++ -o \( -n "$MOZ_SAMPLE_TYPE_FLOAT32" -a "$ac_cv_soundtouch_sample_type" != float \) ; then
++ AC_MSG_ERROR([SoundTouch library is built with incompatible sample type. Either rebuild the library with/without --enable-integer-samples, chase default Mozilla sample type or remove --with-system-soundtouch.])
++ fi
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)