Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 2014 09:55:30 GMT
From:      svn-freebsd-gecko@chruetertee.ch
To:        freebsd-gecko@freebsd.org
Subject:   [SVN-Commit] r1478 - in trunk: Mk www/firefox www/firefox-i18n www/firefox-nightly www/firefox/files www/seamonkey www/seamonkey-i18n
Message-ID:  <201402050955.s159tUUl056668@trillian.chruetertee.ch>

next in thread | raw e-mail | index | archive | help
Author: jbeich
Date: Wed Feb  5 09:55:30 2014
New Revision: 1478

Log:
update

Added:
   trunk/www/firefox/files/patch-bug806917
   trunk/www/firefox/files/patch-js-src-Makefile.in
Deleted:
   trunk/www/firefox/files/patch-bug810716
   trunk/www/firefox/files/patch-bug945046
   trunk/www/firefox/files/patch-bug946560
   trunk/www/firefox/files/patch-toolkit_xre_Makefile.in
Modified:
   trunk/Mk/bsd.gecko.mk
   trunk/www/firefox-i18n/Makefile
   trunk/www/firefox-i18n/distinfo
   trunk/www/firefox-nightly/Makefile
   trunk/www/firefox-nightly/Makefile.hgrev
   trunk/www/firefox-nightly/distinfo
   trunk/www/firefox/Makefile
   trunk/www/firefox/distinfo
   trunk/www/firefox/files/patch-bug826985
   trunk/www/seamonkey-i18n/Makefile
   trunk/www/seamonkey-i18n/distinfo
   trunk/www/seamonkey/Makefile
   trunk/www/seamonkey/distinfo

Modified: trunk/Mk/bsd.gecko.mk
==============================================================================
--- trunk/Mk/bsd.gecko.mk	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/Mk/bsd.gecko.mk	Wed Feb  5 09:55:30 2014	(r1478)
@@ -176,7 +176,7 @@
 #                         is given by the maintainer via the port or by the
 #                         user via defined variable try to find the highest
 #                         stable installed version.
-#                         Available values: yes 24+ 27+ 24 27
+#                         Available values: yes 24+ 28+ 24 28
 #                         NOTE:
 #                         default value 24 is used in case of USE_FIREFOX=yes
 #
@@ -218,11 +218,11 @@
 .endif
 
 _FIREFOX_DEFAULT_VERSION=	24
-_FIREFOX_VERSIONS=			24 27
-_FIREFOX_RANGE_VERSIONS=	24+ 27+
+_FIREFOX_VERSIONS=			24 28
+_FIREFOX_RANGE_VERSIONS=	24+ 28+
 
 # For specifying [24, ..]+
-_FIREFOX_27P=	27 ${_FIREFOX_24P}
+_FIREFOX_28P=	28 ${_FIREFOX_24P}
 _FIREFOX_24P=	24
 
 # Set the default Firefox version and check if USE_FIREFOX=yes was given
@@ -269,7 +269,7 @@
 
 # Dependence lines for different Firefox versions
 24_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox-esr
-27_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
+28_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:${PORTSDIR}/www/firefox
 
 # Add dependencies
 .if defined(USE_FIREFOX)

Modified: trunk/www/firefox-i18n/Makefile
==============================================================================
--- trunk/www/firefox-i18n/Makefile	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox-i18n/Makefile	Wed Feb  5 09:55:30 2014	(r1478)
@@ -2,7 +2,7 @@
 # $FreeBSD: head/www/firefox-i18n/Makefile 336446 2013-12-14 13:42:06Z flo $
 
 PORTNAME=	firefox-i18n
-PORTVERSION=	27.0
+PORTVERSION=	28.0b1
 CATEGORIES=	www
 MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/linux-i686/xpi
 PKGNAMEPREFIX=
@@ -14,7 +14,7 @@
 
 EXTRACT_DEPENDS=	zip:${PORTSDIR}/archivers/zip
 
-USE_FIREFOX=	27
+USE_FIREFOX=	28
 USE_XPI=	firefox linux-firefox
 
 NO_ARCH=	yes

Modified: trunk/www/firefox-i18n/distinfo
==============================================================================
--- trunk/www/firefox-i18n/distinfo	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox-i18n/distinfo	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1,170 +1,170 @@
-SHA256 (xpi/firefox-i18n-27.0/ach.xpi) = 65cdfbcbd6014dc59399322da4ea93189b8f330a16d18c0ea83df80ab35fd69f
-SIZE (xpi/firefox-i18n-27.0/ach.xpi) = 355298
-SHA256 (xpi/firefox-i18n-27.0/af.xpi) = ca5bec9e99d5761c5b6d6e1b3433eaf48b70c6bd12abc6bd4e49b876fd41ce2c
-SIZE (xpi/firefox-i18n-27.0/af.xpi) = 348846
-SHA256 (xpi/firefox-i18n-27.0/ar.xpi) = df215466a8a7138b3ca107c9682508700d5784cb343cdb8f66f0342853b7b508
-SIZE (xpi/firefox-i18n-27.0/ar.xpi) = 378144
-SHA256 (xpi/firefox-i18n-27.0/as.xpi) = 5f5083c2dfe2fd92f35960212766353dec3f683f35447d77565fc6fde83e75fd
-SIZE (xpi/firefox-i18n-27.0/as.xpi) = 400776
-SHA256 (xpi/firefox-i18n-27.0/ast.xpi) = b851aeb2a180068acc2077bc050e1e808a37ea425ab7bff2d461a7c1c268d27c
-SIZE (xpi/firefox-i18n-27.0/ast.xpi) = 309187
-SHA256 (xpi/firefox-i18n-27.0/be.xpi) = 0e562077db87bf6749f9df4b11d37e82e59cac2c9c7709111048590d2f0b85c0
-SIZE (xpi/firefox-i18n-27.0/be.xpi) = 332358
-SHA256 (xpi/firefox-i18n-27.0/bg.xpi) = 704628352752c46ec905145b7dcf4b711a31735206a630690dfc7e56d430e7f9
-SIZE (xpi/firefox-i18n-27.0/bg.xpi) = 389841
-SHA256 (xpi/firefox-i18n-27.0/bn-BD.xpi) = bb7d395513d170562deeda0e541c26eda43eb492506c1457e97648ec92d7602f
-SIZE (xpi/firefox-i18n-27.0/bn-BD.xpi) = 410846
-SHA256 (xpi/firefox-i18n-27.0/bn-IN.xpi) = 2835ccc522361166aa52d69940c099663f1daf522b2bd8dde85d74043fbdf06a
-SIZE (xpi/firefox-i18n-27.0/bn-IN.xpi) = 407699
-SHA256 (xpi/firefox-i18n-27.0/br.xpi) = de107ce823b623b78313f92010aae875d6ddf538aad2ec23a87da54eb9e662f1
-SIZE (xpi/firefox-i18n-27.0/br.xpi) = 351227
-SHA256 (xpi/firefox-i18n-27.0/bs.xpi) = abaa6db8e80fb3caaa3656812014eab91b4b0094b078fafd9284a389bc48b726
-SIZE (xpi/firefox-i18n-27.0/bs.xpi) = 354539
-SHA256 (xpi/firefox-i18n-27.0/ca.xpi) = 8b79d45cef709758bc7099afabef768b799fbf83f517f44a95e32e19db7d57d7
-SIZE (xpi/firefox-i18n-27.0/ca.xpi) = 357568
-SHA256 (xpi/firefox-i18n-27.0/cs.xpi) = a06ec864c6a9c8bdafec657d18e87afb3f678c2f97a8fc166a3700a219a028c3
-SIZE (xpi/firefox-i18n-27.0/cs.xpi) = 353324
-SHA256 (xpi/firefox-i18n-27.0/csb.xpi) = a85ba066994a82c532dd9b7b1895ff269fa3a6d4266e663f426d2bc30b0a1543
-SIZE (xpi/firefox-i18n-27.0/csb.xpi) = 343114
-SHA256 (xpi/firefox-i18n-27.0/cy.xpi) = 1fb750ce593eb58bee7f7f4124744806ddad7b73c6eeb5e0e38859b048b9d267
-SIZE (xpi/firefox-i18n-27.0/cy.xpi) = 351733
-SHA256 (xpi/firefox-i18n-27.0/da.xpi) = e12a78feef00f81837ebfc623c1fa16f475145d1947e16c679923fdd663d4b2e
-SIZE (xpi/firefox-i18n-27.0/da.xpi) = 343538
-SHA256 (xpi/firefox-i18n-27.0/de.xpi) = a82ce6181e633a599c3cc5b9c6a39163f011c4e9e9069c4e34299d562e7bd0da
-SIZE (xpi/firefox-i18n-27.0/de.xpi) = 345770
-SHA256 (xpi/firefox-i18n-27.0/el.xpi) = 3e7e398e00dfb0027d9ea030a242d68e247f38eac52a36d00e6ecce1cae70220
-SIZE (xpi/firefox-i18n-27.0/el.xpi) = 378045
-SHA256 (xpi/firefox-i18n-27.0/en-GB.xpi) = f93788d8eb0ee356c0c45a682628666655b0ff5d991bd3c161b0cab117a23f17
-SIZE (xpi/firefox-i18n-27.0/en-GB.xpi) = 337399
-SHA256 (xpi/firefox-i18n-27.0/en-US.xpi) = f04981553bb513ccde3d4752a2e61188d6cc065fb9be7c6831a9b33d595b50c4
-SIZE (xpi/firefox-i18n-27.0/en-US.xpi) = 335284
-SHA256 (xpi/firefox-i18n-27.0/en-ZA.xpi) = 447bb54a7481d8dc3f3f557561a4c19a317646c0506a424de48968e0e699518f
-SIZE (xpi/firefox-i18n-27.0/en-ZA.xpi) = 332018
-SHA256 (xpi/firefox-i18n-27.0/eo.xpi) = 139a645f78069a6a2c75763e2c52e5c4df1a836ca7b08530e14e005a98c9114e
-SIZE (xpi/firefox-i18n-27.0/eo.xpi) = 351109
-SHA256 (xpi/firefox-i18n-27.0/es-AR.xpi) = c23cfa308a5cb65d001bb1756c95ca075b2e97d459e05171f65e39ace7acaa82
-SIZE (xpi/firefox-i18n-27.0/es-AR.xpi) = 354328
-SHA256 (xpi/firefox-i18n-27.0/es-CL.xpi) = 7730db5896bf181f4507c71a582eb983e756e04d72779059880fbef8b65aa515
-SIZE (xpi/firefox-i18n-27.0/es-CL.xpi) = 301974
-SHA256 (xpi/firefox-i18n-27.0/es-ES.xpi) = 2ee0cd90f30009f6a345632a2eccd134a2f5208cbc39b6e4377ca6e848b78631
-SIZE (xpi/firefox-i18n-27.0/es-ES.xpi) = 293441
-SHA256 (xpi/firefox-i18n-27.0/es-MX.xpi) = 1e324ee15726f899906a4dad28a58146e6da2343a3cd183e846a509f728befe2
-SIZE (xpi/firefox-i18n-27.0/es-MX.xpi) = 356360
-SHA256 (xpi/firefox-i18n-27.0/et.xpi) = 9bbf739a69e9f2dea2f83638dd699c817b8315751b1b272b9cc1dfc0a9ebf67c
-SIZE (xpi/firefox-i18n-27.0/et.xpi) = 343296
-SHA256 (xpi/firefox-i18n-27.0/eu.xpi) = b2ceb52d5d815b2e458131bdecdbdb9da2552763c7d60a18e17e13570d084b2f
-SIZE (xpi/firefox-i18n-27.0/eu.xpi) = 350045
-SHA256 (xpi/firefox-i18n-27.0/fa.xpi) = 4709bcaaae8a6465e43d074ee9dbe025272b92fdb6b76da1afa1bad667c313ea
-SIZE (xpi/firefox-i18n-27.0/fa.xpi) = 391167
-SHA256 (xpi/firefox-i18n-27.0/ff.xpi) = 2d1f36ba8accdfcd27e2f092f0d867b411ca87a022c6d808f913cc9da241e654
-SIZE (xpi/firefox-i18n-27.0/ff.xpi) = 348062
-SHA256 (xpi/firefox-i18n-27.0/fi.xpi) = f77abbff461ea2016438490d0984ad61a40a4899b686402b2564d2163761f0be
-SIZE (xpi/firefox-i18n-27.0/fi.xpi) = 347379
-SHA256 (xpi/firefox-i18n-27.0/fr.xpi) = 5d828ce14698eb0c93361b8eec4c35586e8bef0a4391288672fed4946a98a987
-SIZE (xpi/firefox-i18n-27.0/fr.xpi) = 360467
-SHA256 (xpi/firefox-i18n-27.0/fy-NL.xpi) = 23eb65bac2f48ee2e52299114aa67ccbecba630ac33c8e3fcbf302aa149a38de
-SIZE (xpi/firefox-i18n-27.0/fy-NL.xpi) = 356625
-SHA256 (xpi/firefox-i18n-27.0/ga-IE.xpi) = b681177cc971738006428b84485d7af6aefc4d30251b4c01f32d045372273afc
-SIZE (xpi/firefox-i18n-27.0/ga-IE.xpi) = 361190
-SHA256 (xpi/firefox-i18n-27.0/gd.xpi) = 758759e74da70ca817827133819b914151505c42486b05297b3c304e4aa5ff80
-SIZE (xpi/firefox-i18n-27.0/gd.xpi) = 357708
-SHA256 (xpi/firefox-i18n-27.0/gl.xpi) = 6dbab688d071055c90079586ed6cdc8b562c24353de201651904074fd689b69b
-SIZE (xpi/firefox-i18n-27.0/gl.xpi) = 353148
-SHA256 (xpi/firefox-i18n-27.0/gu-IN.xpi) = 2710574a1127266c189c8de357a340ae4c5ac24b76120c21af7f9369d0cb1cd0
-SIZE (xpi/firefox-i18n-27.0/gu-IN.xpi) = 377587
-SHA256 (xpi/firefox-i18n-27.0/he.xpi) = cccf082dc057db11a75c94d39de6a37573d251713c3bde8184846b1f80d4abab
-SIZE (xpi/firefox-i18n-27.0/he.xpi) = 370010
-SHA256 (xpi/firefox-i18n-27.0/hi-IN.xpi) = 43c47e272d9e8ce1323c370b5164bb6c12b59e14dcb21bd5f76b2f4809c5d492
-SIZE (xpi/firefox-i18n-27.0/hi-IN.xpi) = 396450
-SHA256 (xpi/firefox-i18n-27.0/hr.xpi) = cd289f87392ac3832fd37ebe7834e82677cb9ca87880d26132fc6c138bc5654d
-SIZE (xpi/firefox-i18n-27.0/hr.xpi) = 357707
-SHA256 (xpi/firefox-i18n-27.0/hu.xpi) = fbf5ac3f5f520e906023a0010fbac4edbb4aeb59c7a057e9b94d1fe539c44408
-SIZE (xpi/firefox-i18n-27.0/hu.xpi) = 361929
-SHA256 (xpi/firefox-i18n-27.0/hy-AM.xpi) = f5091d2ba8e3ebc5e4da3d36cb405a4eedeb819c414007cba578abfa9d288ef5
-SIZE (xpi/firefox-i18n-27.0/hy-AM.xpi) = 402981
-SHA256 (xpi/firefox-i18n-27.0/id.xpi) = 5f41c04044a5d114b7ace1c371387cc3a4e953447e50444489ef183ffa3634c3
-SIZE (xpi/firefox-i18n-27.0/id.xpi) = 339611
-SHA256 (xpi/firefox-i18n-27.0/is.xpi) = ea9b27c089a974b9e53e0f3bfd293fa82d1b1ac7cf7a85b6cb45b0a62879bf66
-SIZE (xpi/firefox-i18n-27.0/is.xpi) = 346530
-SHA256 (xpi/firefox-i18n-27.0/it.xpi) = 0b6f6969a28baea46a2a487b4b9e49c2b37d6c7369fd3212a7a13f75bc9de983
-SIZE (xpi/firefox-i18n-27.0/it.xpi) = 291091
-SHA256 (xpi/firefox-i18n-27.0/ja.xpi) = 2115c6be8ce609b0f7ceba049e71be3a159b2a59403c845e9902eb21e715680f
-SIZE (xpi/firefox-i18n-27.0/ja.xpi) = 393700
-SHA256 (xpi/firefox-i18n-27.0/kk.xpi) = f5a5a755b583902a1ce4bcdfb1a7cc400fba29792de960de2276daa0b3f5daad
-SIZE (xpi/firefox-i18n-27.0/kk.xpi) = 396373
-SHA256 (xpi/firefox-i18n-27.0/km.xpi) = 34d590c896aa241c290b3526beddbd0d0b12821b9268ab3cdc9ec62f0e0283cd
-SIZE (xpi/firefox-i18n-27.0/km.xpi) = 418733
-SHA256 (xpi/firefox-i18n-27.0/kn.xpi) = 588b191197603a968805774bddef4616400323483ddcecd2311771c868748262
-SIZE (xpi/firefox-i18n-27.0/kn.xpi) = 408351
-SHA256 (xpi/firefox-i18n-27.0/ko.xpi) = 12d592bc4feb2c746c88802467091a42bfbfc42f4bf31c2799931755256da944
-SIZE (xpi/firefox-i18n-27.0/ko.xpi) = 363839
-SHA256 (xpi/firefox-i18n-27.0/ku.xpi) = 4196f8deb8dc1f59a643d6fc805be53ad332dd92019f57b889f64fc817e506a0
-SIZE (xpi/firefox-i18n-27.0/ku.xpi) = 370259
-SHA256 (xpi/firefox-i18n-27.0/lij.xpi) = 6782c0f7dbf78b70423cbe02a879678b76449905fe3d5827a1e3ccf8de365d25
-SIZE (xpi/firefox-i18n-27.0/lij.xpi) = 339916
-SHA256 (xpi/firefox-i18n-27.0/lt.xpi) = 1a8bd95e7c070fae8cdc9a551947b8488116062d1abdaf4d5eea7514fefb64c3
-SIZE (xpi/firefox-i18n-27.0/lt.xpi) = 369739
-SHA256 (xpi/firefox-i18n-27.0/lv.xpi) = 863368f5fbdd47684aef60259a0fecc8d7365bff04d19af0ad0006c91dd910e4
-SIZE (xpi/firefox-i18n-27.0/lv.xpi) = 343465
-SHA256 (xpi/firefox-i18n-27.0/mai.xpi) = 7a0dc5e4f6624f66aad5f24d564dc6feb62c98c0692dd00320b6653a23d393d2
-SIZE (xpi/firefox-i18n-27.0/mai.xpi) = 396632
-SHA256 (xpi/firefox-i18n-27.0/mk.xpi) = 17586344aee0891622fbe311cd318b2601f8a2c716232b15cec558081d736f65
-SIZE (xpi/firefox-i18n-27.0/mk.xpi) = 392645
-SHA256 (xpi/firefox-i18n-27.0/ml.xpi) = 03267ecbbe5d4d2937f611273b290fbd5befc0f1951576c0583dfe80a27d938e
-SIZE (xpi/firefox-i18n-27.0/ml.xpi) = 417094
-SHA256 (xpi/firefox-i18n-27.0/mr.xpi) = 269d397462db41cea9f2146f3f5bc369ca5859a86d2a2700057b6a35b3d7b07b
-SIZE (xpi/firefox-i18n-27.0/mr.xpi) = 397289
-SHA256 (xpi/firefox-i18n-27.0/nb-NO.xpi) = 4a5a5f25b84dd831759998420f4ff87da4e8a9665d071334ccc999bd146e6956
-SIZE (xpi/firefox-i18n-27.0/nb-NO.xpi) = 346640
-SHA256 (xpi/firefox-i18n-27.0/nl.xpi) = b9348795890072a29592cd1223c9e11433b897b8d9cc8d8222b14bda1216603a
-SIZE (xpi/firefox-i18n-27.0/nl.xpi) = 348111
-SHA256 (xpi/firefox-i18n-27.0/nn-NO.xpi) = 3c96cb3a39ea645651e7b87ea029b55c6806507a0c4a590c29871e520c469947
-SIZE (xpi/firefox-i18n-27.0/nn-NO.xpi) = 344618
-SHA256 (xpi/firefox-i18n-27.0/or.xpi) = 03a87cc368a3da045c7b8192cf2c9820d98585066751ba67ea46719573e75b1d
-SIZE (xpi/firefox-i18n-27.0/or.xpi) = 410073
-SHA256 (xpi/firefox-i18n-27.0/pa-IN.xpi) = 7f41cd12fb36fe94670c3a2825cfc9eb2af8205f773dcff6799498c330740fd5
-SIZE (xpi/firefox-i18n-27.0/pa-IN.xpi) = 385301
-SHA256 (xpi/firefox-i18n-27.0/pl.xpi) = 6b25815c860f0c29ca8c3b6e555d0f9c32544962b99e91c044c37cd125c120d2
-SIZE (xpi/firefox-i18n-27.0/pl.xpi) = 348871
-SHA256 (xpi/firefox-i18n-27.0/pt-BR.xpi) = a6ce16cc4b14d7d9b2795cee2e435812d77d1e47c797fe2410b523e9c8d9eae5
-SIZE (xpi/firefox-i18n-27.0/pt-BR.xpi) = 354076
-SHA256 (xpi/firefox-i18n-27.0/pt-PT.xpi) = f95755a7eb0b5d3ce6925ba1fe9e532d570b6a2d94ee56e9fe8eea4561027bd5
-SIZE (xpi/firefox-i18n-27.0/pt-PT.xpi) = 347957
-SHA256 (xpi/firefox-i18n-27.0/rm.xpi) = f3d2f7b0c69dff2f6a1e3dfef2bbc39340e1e48726637693a3c8ff0f988d1d97
-SIZE (xpi/firefox-i18n-27.0/rm.xpi) = 349335
-SHA256 (xpi/firefox-i18n-27.0/ro.xpi) = 95232d726600879b77f84f3752bf7797bd236db5d3e170a537bafc3fd7ee5e10
-SIZE (xpi/firefox-i18n-27.0/ro.xpi) = 378831
-SHA256 (xpi/firefox-i18n-27.0/ru.xpi) = 0159a06d3d61d977993111d021c49f5434cd0e202aa369724d20bcdebc4e5071
-SIZE (xpi/firefox-i18n-27.0/ru.xpi) = 336572
-SHA256 (xpi/firefox-i18n-27.0/si.xpi) = 9ab44209603a6b26f9e8b5be4d1457fed5a8a8745f9d8c48633e4bb9db82cd70
-SIZE (xpi/firefox-i18n-27.0/si.xpi) = 387683
-SHA256 (xpi/firefox-i18n-27.0/sk.xpi) = 8e10d88de5975f945032efd914d2c171b68e6ab682c6928cf649510062c35d15
-SIZE (xpi/firefox-i18n-27.0/sk.xpi) = 364725
-SHA256 (xpi/firefox-i18n-27.0/sl.xpi) = 169751b4b335372633d927051b012934316627e05c96340320a9bf3669cfae42
-SIZE (xpi/firefox-i18n-27.0/sl.xpi) = 347788
-SHA256 (xpi/firefox-i18n-27.0/son.xpi) = a3aff6dee8f69441a56744b2796276e9db5d439cdeda9b7dbfa3f58c021a55e4
-SIZE (xpi/firefox-i18n-27.0/son.xpi) = 344431
-SHA256 (xpi/firefox-i18n-27.0/sq.xpi) = 6e6b77e9c387ff8cb4dffeb1b5fa3bbd27b98f2533034421f8213b37976bbefb
-SIZE (xpi/firefox-i18n-27.0/sq.xpi) = 357148
-SHA256 (xpi/firefox-i18n-27.0/sr.xpi) = f42f271f999673487ae27a35706a8b1e71acb116eaacbd974e4f3e6642ee9618
-SIZE (xpi/firefox-i18n-27.0/sr.xpi) = 399940
-SHA256 (xpi/firefox-i18n-27.0/sv-SE.xpi) = c55e673ad0db2bdcfbef5d9538a6e90e372f9770eca78a315efc016552c8a981
-SIZE (xpi/firefox-i18n-27.0/sv-SE.xpi) = 352870
-SHA256 (xpi/firefox-i18n-27.0/ta.xpi) = e2169f2aba94e69571cff72d7dbaeb56054786e3fe7eca6872121df58174970d
-SIZE (xpi/firefox-i18n-27.0/ta.xpi) = 400412
-SHA256 (xpi/firefox-i18n-27.0/te.xpi) = ac1093be104ed057b8a8632fb7c89e0b4505ca1956e157de8d1cd949e0f24b4f
-SIZE (xpi/firefox-i18n-27.0/te.xpi) = 417871
-SHA256 (xpi/firefox-i18n-27.0/th.xpi) = e6667e3a1f4b5768b016fdcb113249ee0507f2fdb12bd5d428bdfbd673456adc
-SIZE (xpi/firefox-i18n-27.0/th.xpi) = 394991
-SHA256 (xpi/firefox-i18n-27.0/tr.xpi) = 6550afc209d1e369c345865dfd3e975026963895db64378bfbe7f50729e24a50
-SIZE (xpi/firefox-i18n-27.0/tr.xpi) = 356668
-SHA256 (xpi/firefox-i18n-27.0/uk.xpi) = ed15cfae9f5e1846b02cf64eed460c13c8c75c198f5281e406a803b8e5d20d01
-SIZE (xpi/firefox-i18n-27.0/uk.xpi) = 381434
-SHA256 (xpi/firefox-i18n-27.0/vi.xpi) = 7e86801cfab6807c6be256540845c222d312fd523b6c67cb038da177619547ff
-SIZE (xpi/firefox-i18n-27.0/vi.xpi) = 375485
-SHA256 (xpi/firefox-i18n-27.0/zh-CN.xpi) = 33cbe52cb0a22218442db9ed78b2c8c00c0765ad54994725c4ffefb8ae9ccae1
-SIZE (xpi/firefox-i18n-27.0/zh-CN.xpi) = 374670
-SHA256 (xpi/firefox-i18n-27.0/zh-TW.xpi) = c96fc4f2b44477f6d1bd8fe3f1b391cca1e4e47ce59de3e4f07668b63428e4bc
-SIZE (xpi/firefox-i18n-27.0/zh-TW.xpi) = 372318
-SHA256 (xpi/firefox-i18n-27.0/zu.xpi) = eca1b78b6749c850a7b28b9330a917b6e2562da607dfadcee1d7763becfc66a3
-SIZE (xpi/firefox-i18n-27.0/zu.xpi) = 357236
+SHA256 (xpi/firefox-i18n-28.0b1/ach.xpi) = 93c80f3798b36e8d8f517999dc343ba3b0d300a163563321c7c6ff6f71c23918
+SIZE (xpi/firefox-i18n-28.0b1/ach.xpi) = 363208
+SHA256 (xpi/firefox-i18n-28.0b1/af.xpi) = 4af17ac072bb2d5528155b6720d43933dcfa36c07ad84f5c4ea7db81ab81c270
+SIZE (xpi/firefox-i18n-28.0b1/af.xpi) = 357552
+SHA256 (xpi/firefox-i18n-28.0b1/ar.xpi) = 855cfd2260465c43fa0933927a4fa4b6771ee2c91811419c100622cfb7aa5591
+SIZE (xpi/firefox-i18n-28.0b1/ar.xpi) = 386806
+SHA256 (xpi/firefox-i18n-28.0b1/as.xpi) = 04314b20278b3d22c17e9d23c4e3405ae96223670fb4d2a6bec9b3b663981ae2
+SIZE (xpi/firefox-i18n-28.0b1/as.xpi) = 404377
+SHA256 (xpi/firefox-i18n-28.0b1/ast.xpi) = ac588bd08d8202482755614ee0f519930fb509e498a49d8a0d059c860d4f0abd
+SIZE (xpi/firefox-i18n-28.0b1/ast.xpi) = 313719
+SHA256 (xpi/firefox-i18n-28.0b1/be.xpi) = 424c8a562b26f42316c2f5200b55b75fda3225cde86af7f2c8ec8c581fdb14d6
+SIZE (xpi/firefox-i18n-28.0b1/be.xpi) = 342306
+SHA256 (xpi/firefox-i18n-28.0b1/bg.xpi) = 53f1a555dc8ad69f26e96a8062703b0deca8adf49ce2efb61b8e4f9028901ccc
+SIZE (xpi/firefox-i18n-28.0b1/bg.xpi) = 393205
+SHA256 (xpi/firefox-i18n-28.0b1/bn-BD.xpi) = 7fe24ec5aa82a0666e5bcf3afed90a6fb1352168299460cd03e5dae96d88225e
+SIZE (xpi/firefox-i18n-28.0b1/bn-BD.xpi) = 418596
+SHA256 (xpi/firefox-i18n-28.0b1/bn-IN.xpi) = 2976e57eb72f88819ccac1a8c625fb544965562ae7d9ef9f31ba568029e09c95
+SIZE (xpi/firefox-i18n-28.0b1/bn-IN.xpi) = 411403
+SHA256 (xpi/firefox-i18n-28.0b1/br.xpi) = 98797921c1abc794293e46b4fa56ad6af96a3086af1478d8479f4fc8a7eb9ac9
+SIZE (xpi/firefox-i18n-28.0b1/br.xpi) = 354960
+SHA256 (xpi/firefox-i18n-28.0b1/bs.xpi) = 72905e5d14df775f5f5d4305181640e73cc64020709823db42d0abf0bc50d429
+SIZE (xpi/firefox-i18n-28.0b1/bs.xpi) = 363405
+SHA256 (xpi/firefox-i18n-28.0b1/ca.xpi) = fcb9547d51836f8533889fb53641bd12e658d4c7c253a0fc93d8e87ac0daf8f6
+SIZE (xpi/firefox-i18n-28.0b1/ca.xpi) = 361290
+SHA256 (xpi/firefox-i18n-28.0b1/cs.xpi) = faca51196dc11c6b8dcb62e8564391748258fc3b92236d249a8c9d06ddf12777
+SIZE (xpi/firefox-i18n-28.0b1/cs.xpi) = 357030
+SHA256 (xpi/firefox-i18n-28.0b1/csb.xpi) = 230350653d61c65b809c432aeceb0025707472c019dd8cd697d49f1b3fb6b708
+SIZE (xpi/firefox-i18n-28.0b1/csb.xpi) = 347623
+SHA256 (xpi/firefox-i18n-28.0b1/cy.xpi) = 3ef579c3863611b6d35411cc6cad8c03b0d6b8e4cba312068e0dc927d9b200e6
+SIZE (xpi/firefox-i18n-28.0b1/cy.xpi) = 355459
+SHA256 (xpi/firefox-i18n-28.0b1/da.xpi) = a177abf2e59a575c7f97978e8a65e288d81fb0d90b1bd14c567ca26cb8ce9b06
+SIZE (xpi/firefox-i18n-28.0b1/da.xpi) = 347233
+SHA256 (xpi/firefox-i18n-28.0b1/de.xpi) = 4a6b5e3b821fe9b93bea22a16157659a8b53a6490ffb2d5e217506a98ee0b20a
+SIZE (xpi/firefox-i18n-28.0b1/de.xpi) = 349485
+SHA256 (xpi/firefox-i18n-28.0b1/el.xpi) = ad52fc0a33824838ddf99a63c8eed1fe5c2ad67ade75b6427401a10b1189916f
+SIZE (xpi/firefox-i18n-28.0b1/el.xpi) = 386921
+SHA256 (xpi/firefox-i18n-28.0b1/en-GB.xpi) = 50326bd644ce1aab09add80e0f5591028d9aa68502c5fb57fb35e0b30bf4ca61
+SIZE (xpi/firefox-i18n-28.0b1/en-GB.xpi) = 341049
+SHA256 (xpi/firefox-i18n-28.0b1/en-US.xpi) = 2a6f5446e4fa0704284a08560547d26a4488942d940950c705046cf7d4116dd8
+SIZE (xpi/firefox-i18n-28.0b1/en-US.xpi) = 343398
+SHA256 (xpi/firefox-i18n-28.0b1/en-ZA.xpi) = 20603bd64338a0438c747020835c657a8eab3fcc2b3e030dd01184313505c75e
+SIZE (xpi/firefox-i18n-28.0b1/en-ZA.xpi) = 335613
+SHA256 (xpi/firefox-i18n-28.0b1/eo.xpi) = a8bae12e18d0a3a37efd099e361fd041613f52998d1f4bb0ab3956429a392cd4
+SIZE (xpi/firefox-i18n-28.0b1/eo.xpi) = 359938
+SHA256 (xpi/firefox-i18n-28.0b1/es-AR.xpi) = 6ec80397ad737641600550ea99ef67bb6c7abe56c072384a254d1965bdb29004
+SIZE (xpi/firefox-i18n-28.0b1/es-AR.xpi) = 358076
+SHA256 (xpi/firefox-i18n-28.0b1/es-CL.xpi) = 1a539bc2dc908c2099974e14dce292ae107056dffb3641c9f852372e223e09ed
+SIZE (xpi/firefox-i18n-28.0b1/es-CL.xpi) = 307249
+SHA256 (xpi/firefox-i18n-28.0b1/es-ES.xpi) = 21dc0e2b5d5403b1e7a053ff74336a24b686d7ac165d9f401e51e9c51a3d63ca
+SIZE (xpi/firefox-i18n-28.0b1/es-ES.xpi) = 298795
+SHA256 (xpi/firefox-i18n-28.0b1/es-MX.xpi) = 211490635471a57cb7c92132ac8fa9edb1630f75367ea03387af2da02b4a36c3
+SIZE (xpi/firefox-i18n-28.0b1/es-MX.xpi) = 360106
+SHA256 (xpi/firefox-i18n-28.0b1/et.xpi) = 40cee6992628b168398969db3f3c1df92dec58436d83955b4b49f3beb5d45792
+SIZE (xpi/firefox-i18n-28.0b1/et.xpi) = 346988
+SHA256 (xpi/firefox-i18n-28.0b1/eu.xpi) = 4345c3c0986823594802e0f32ddd77c37ea2043cecefb0a573b6445192937cc9
+SIZE (xpi/firefox-i18n-28.0b1/eu.xpi) = 358942
+SHA256 (xpi/firefox-i18n-28.0b1/fa.xpi) = eccd8e408976a303782fcc66b7d07e653a2565f21bd51eea08d6cd0061adbbbe
+SIZE (xpi/firefox-i18n-28.0b1/fa.xpi) = 399201
+SHA256 (xpi/firefox-i18n-28.0b1/ff.xpi) = 2bc07e559cc4f633da43a63f956d071155bef24729da9303d523be33e5aaabfc
+SIZE (xpi/firefox-i18n-28.0b1/ff.xpi) = 351536
+SHA256 (xpi/firefox-i18n-28.0b1/fi.xpi) = 867c8c09377e2ef3892677199882502b5fb6557e16a3c65c5490610601733fa0
+SIZE (xpi/firefox-i18n-28.0b1/fi.xpi) = 351057
+SHA256 (xpi/firefox-i18n-28.0b1/fr.xpi) = 81ad0a5fd446a426271f77d90d3f451b973c36f56a4af69224782be2da4b88cb
+SIZE (xpi/firefox-i18n-28.0b1/fr.xpi) = 364194
+SHA256 (xpi/firefox-i18n-28.0b1/fy-NL.xpi) = 51d2b4cecd98c95ddd5662ede808f4792befb083c5f269f6c088cef7d82ce85c
+SIZE (xpi/firefox-i18n-28.0b1/fy-NL.xpi) = 360369
+SHA256 (xpi/firefox-i18n-28.0b1/ga-IE.xpi) = 89bdb15b87bec17388d8f0d49cf16057bcd8ced6dd23ce6c7fab310d6608e788
+SIZE (xpi/firefox-i18n-28.0b1/ga-IE.xpi) = 364856
+SHA256 (xpi/firefox-i18n-28.0b1/gd.xpi) = 4f97f6ed63ae7c6dfb2ea874126c7e3d8ab7cb033da7db5f0005c1ddd873b1f0
+SIZE (xpi/firefox-i18n-28.0b1/gd.xpi) = 361326
+SHA256 (xpi/firefox-i18n-28.0b1/gl.xpi) = ab0deb7ac338cf2bfafa8bf0dc30c6b3f5fa2226f9d1755d6ddee0faceb3442d
+SIZE (xpi/firefox-i18n-28.0b1/gl.xpi) = 356139
+SHA256 (xpi/firefox-i18n-28.0b1/gu-IN.xpi) = a6eb80ae19aadbf1874f0c8b6a513de889d15951a8f4f7d43b28dcb5e5ddb4b2
+SIZE (xpi/firefox-i18n-28.0b1/gu-IN.xpi) = 381328
+SHA256 (xpi/firefox-i18n-28.0b1/he.xpi) = 7284013fab9738e0b12de09c4fa70c56802f1056996bce35ffa033362fa8fbfb
+SIZE (xpi/firefox-i18n-28.0b1/he.xpi) = 377881
+SHA256 (xpi/firefox-i18n-28.0b1/hi-IN.xpi) = 150dc70e57cbaf65b5c441ecebdc1c181fee5bb446a0899d519103e8fe78e2c0
+SIZE (xpi/firefox-i18n-28.0b1/hi-IN.xpi) = 399892
+SHA256 (xpi/firefox-i18n-28.0b1/hr.xpi) = 928ee812ae16b5836fe28bffbd6d7c1f228b6c10b8ee1af2e3866956e324de33
+SIZE (xpi/firefox-i18n-28.0b1/hr.xpi) = 366577
+SHA256 (xpi/firefox-i18n-28.0b1/hu.xpi) = 6f596d86f0730326f3cca34bdd6b0b2aaed16c85d392a214a766ad2ec822a1d7
+SIZE (xpi/firefox-i18n-28.0b1/hu.xpi) = 365626
+SHA256 (xpi/firefox-i18n-28.0b1/hy-AM.xpi) = 066ca6879ae5b5a26b01abf713c693d223b4e056fce747a7d376dfa1e517db8f
+SIZE (xpi/firefox-i18n-28.0b1/hy-AM.xpi) = 411721
+SHA256 (xpi/firefox-i18n-28.0b1/id.xpi) = 0e8128e00cff6bd086bc639c0605fd21522ee2bf24933daaf0ee6d8c6b8b842c
+SIZE (xpi/firefox-i18n-28.0b1/id.xpi) = 343341
+SHA256 (xpi/firefox-i18n-28.0b1/is.xpi) = 3255f6114f62849852bfd9750a86dd22dfec2f02472367e25166807e60222afc
+SIZE (xpi/firefox-i18n-28.0b1/is.xpi) = 355470
+SHA256 (xpi/firefox-i18n-28.0b1/it.xpi) = 09da83593e345eabe17f46b6b38a451a31d389f5471897322111339d1ba6c094
+SIZE (xpi/firefox-i18n-28.0b1/it.xpi) = 296427
+SHA256 (xpi/firefox-i18n-28.0b1/ja.xpi) = d866815a9f881bf27179cf8602b43aa4c314e0840e6f884ddd943da7922fec8d
+SIZE (xpi/firefox-i18n-28.0b1/ja.xpi) = 397376
+SHA256 (xpi/firefox-i18n-28.0b1/kk.xpi) = bda4a4f1806965db0fb3dd61f93dc8678c439eb0626488e294de9511071fe86a
+SIZE (xpi/firefox-i18n-28.0b1/kk.xpi) = 399986
+SHA256 (xpi/firefox-i18n-28.0b1/km.xpi) = 2653cb94209d02f885017f6a09e3d64efe857e650efe7d1519516743b3a3717c
+SIZE (xpi/firefox-i18n-28.0b1/km.xpi) = 427478
+SHA256 (xpi/firefox-i18n-28.0b1/kn.xpi) = 61542ae1a6ff39c70287cd01b094a216bdfac292d2f9a8ddae5b14c72d4a080a
+SIZE (xpi/firefox-i18n-28.0b1/kn.xpi) = 411751
+SHA256 (xpi/firefox-i18n-28.0b1/ko.xpi) = 99cb5dc9220489ced0ce4dd0bbbcf929bcfa6fad999756928d4bd1fd47255122
+SIZE (xpi/firefox-i18n-28.0b1/ko.xpi) = 367541
+SHA256 (xpi/firefox-i18n-28.0b1/ku.xpi) = 7cc04daa5621c26bd15e382bea4f401c1dcdef153bd1a29ceddb1b931581b8d3
+SIZE (xpi/firefox-i18n-28.0b1/ku.xpi) = 378841
+SHA256 (xpi/firefox-i18n-28.0b1/lij.xpi) = 9cba557c7b3cc79ecefc565e618ed12b39b0dc6b031a9a94f45e656d3952a3ae
+SIZE (xpi/firefox-i18n-28.0b1/lij.xpi) = 344099
+SHA256 (xpi/firefox-i18n-28.0b1/lt.xpi) = 6234c69a97fa7885bc178be6e33bc055f5f5390b67a4a1ac03b8c22132f94833
+SIZE (xpi/firefox-i18n-28.0b1/lt.xpi) = 373444
+SHA256 (xpi/firefox-i18n-28.0b1/lv.xpi) = dfc1f7e0d95581330a035069e8eb553c7eef7a2d1c44284987efef3c1f7a5a8c
+SIZE (xpi/firefox-i18n-28.0b1/lv.xpi) = 352617
+SHA256 (xpi/firefox-i18n-28.0b1/mai.xpi) = 4cbd8f2ea0f16b0fcb2f3b736794546fe4dfec270c9f828ca6d5b7bb754475ff
+SIZE (xpi/firefox-i18n-28.0b1/mai.xpi) = 399987
+SHA256 (xpi/firefox-i18n-28.0b1/mk.xpi) = d68c8113829a21e6fd10dc4c5ae3589d6b95b65232d3ef6704184161a2937214
+SIZE (xpi/firefox-i18n-28.0b1/mk.xpi) = 400747
+SHA256 (xpi/firefox-i18n-28.0b1/ml.xpi) = 74241f0be4ddd1487b61bba855aaf483a6ca0d4958dd4cd6cf2db998006743b5
+SIZE (xpi/firefox-i18n-28.0b1/ml.xpi) = 420453
+SHA256 (xpi/firefox-i18n-28.0b1/mr.xpi) = 77f59d1fc1b2bcb5ef280907ded6ce7475c60666a90ebcd9073934c0dc951203
+SIZE (xpi/firefox-i18n-28.0b1/mr.xpi) = 400782
+SHA256 (xpi/firefox-i18n-28.0b1/nb-NO.xpi) = dcd85fd108985763a978387fa4a71dd2458ab61f25e989d58920384a9733fc14
+SIZE (xpi/firefox-i18n-28.0b1/nb-NO.xpi) = 350402
+SHA256 (xpi/firefox-i18n-28.0b1/nl.xpi) = fa634a33dcb29c74db5f41f4fbae466f1ce966fe6ccf1d8f20be9edaca0b2bdc
+SIZE (xpi/firefox-i18n-28.0b1/nl.xpi) = 351822
+SHA256 (xpi/firefox-i18n-28.0b1/nn-NO.xpi) = b98415fa1f1257e8bd22a3f9dea50b71ea19e1ba06cffd5cfefb553eafaf7455
+SIZE (xpi/firefox-i18n-28.0b1/nn-NO.xpi) = 348405
+SHA256 (xpi/firefox-i18n-28.0b1/or.xpi) = 31e3ecb7cf09177ce23411a01e45f7b3001b388de984c7fed323b9ee5be4e1dd
+SIZE (xpi/firefox-i18n-28.0b1/or.xpi) = 413667
+SHA256 (xpi/firefox-i18n-28.0b1/pa-IN.xpi) = b35b71c5dc395ed588bc293febf5af574c25a899d944f4476117119ab9d569ce
+SIZE (xpi/firefox-i18n-28.0b1/pa-IN.xpi) = 389012
+SHA256 (xpi/firefox-i18n-28.0b1/pl.xpi) = d814d9976bb8cf7238b1b082e80f5968cbbefcb293fbd2abb62e7fa34a88f7d3
+SIZE (xpi/firefox-i18n-28.0b1/pl.xpi) = 352835
+SHA256 (xpi/firefox-i18n-28.0b1/pt-BR.xpi) = f6f6ee858e480e33b1a09451a0ee3032d4fe6fbaf49f1079010db587351c54f8
+SIZE (xpi/firefox-i18n-28.0b1/pt-BR.xpi) = 357836
+SHA256 (xpi/firefox-i18n-28.0b1/pt-PT.xpi) = 1e56d8d2d312a0ad7b04d06a6dad410827e91dcd2f704d69a34361034ed18d8b
+SIZE (xpi/firefox-i18n-28.0b1/pt-PT.xpi) = 351716
+SHA256 (xpi/firefox-i18n-28.0b1/rm.xpi) = f9d2bfe44193d6fa3eba54f60a194d8c9198f8d8e1e3794a68e1bcbfb15179f5
+SIZE (xpi/firefox-i18n-28.0b1/rm.xpi) = 352772
+SHA256 (xpi/firefox-i18n-28.0b1/ro.xpi) = cf02883f97a79ddbbaf4ab404bc60a7be6932cf06073399ea95d89f086818214
+SIZE (xpi/firefox-i18n-28.0b1/ro.xpi) = 387416
+SHA256 (xpi/firefox-i18n-28.0b1/ru.xpi) = 6a42b2c7a84566b3dd0aaa6d00257097b4cef88ff33790792379dc1e56e14b1d
+SIZE (xpi/firefox-i18n-28.0b1/ru.xpi) = 341890
+SHA256 (xpi/firefox-i18n-28.0b1/si.xpi) = daaec69d5d2abf99ba0803019f21a10491fbbc3e09d68c5b8c53c605e7633f2e
+SIZE (xpi/firefox-i18n-28.0b1/si.xpi) = 395719
+SHA256 (xpi/firefox-i18n-28.0b1/sk.xpi) = a670edd0aed66ebdc3e246d9a16e442667c8bc324ff4e80e8e6f4c6c7c2e870f
+SIZE (xpi/firefox-i18n-28.0b1/sk.xpi) = 368400
+SHA256 (xpi/firefox-i18n-28.0b1/sl.xpi) = beecdba75d1121c149711b8c092493e49c2d48022284fa8c1da1af5befb8e530
+SIZE (xpi/firefox-i18n-28.0b1/sl.xpi) = 351537
+SHA256 (xpi/firefox-i18n-28.0b1/son.xpi) = 6d16c5707c0733afe34d55d466e765e1510cd4d0b65a02c4690c06e7abd7647d
+SIZE (xpi/firefox-i18n-28.0b1/son.xpi) = 348056
+SHA256 (xpi/firefox-i18n-28.0b1/sq.xpi) = 72417dc591358dd8b68ed3bb22ba021a5872c0dc44418ee3a07b5d1e6bfadcb3
+SIZE (xpi/firefox-i18n-28.0b1/sq.xpi) = 365886
+SHA256 (xpi/firefox-i18n-28.0b1/sr.xpi) = 6ea789ad58ab5d8d74634ed131bc457fe47afbb78e8cb55a73f06aa246c83e57
+SIZE (xpi/firefox-i18n-28.0b1/sr.xpi) = 402632
+SHA256 (xpi/firefox-i18n-28.0b1/sv-SE.xpi) = 36d4cdbf968ac6970dbbc69611b09ab518c352756af454810d550cd95aec1c89
+SIZE (xpi/firefox-i18n-28.0b1/sv-SE.xpi) = 356614
+SHA256 (xpi/firefox-i18n-28.0b1/ta.xpi) = e87da7370125407ad8b4136a64a2bfb0fb5772e658947947e5994825d439e7ce
+SIZE (xpi/firefox-i18n-28.0b1/ta.xpi) = 403991
+SHA256 (xpi/firefox-i18n-28.0b1/te.xpi) = d729f4355ed5a012c42e6674e185757c38273337472ef627a80cbd6e4511896a
+SIZE (xpi/firefox-i18n-28.0b1/te.xpi) = 421516
+SHA256 (xpi/firefox-i18n-28.0b1/th.xpi) = 20e296ec1cda71e9e7e2c58ad589b51364cb389bcb5d4d0b2f6767522a4a6d49
+SIZE (xpi/firefox-i18n-28.0b1/th.xpi) = 403633
+SHA256 (xpi/firefox-i18n-28.0b1/tr.xpi) = e02a1c28e3c0b76e5b4e86b20d32c229541d4db84ddfa9071ffb3ae6689f9f4b
+SIZE (xpi/firefox-i18n-28.0b1/tr.xpi) = 360319
+SHA256 (xpi/firefox-i18n-28.0b1/uk.xpi) = 0628f5b26c43124815b8e800c115d6e381f3c2602c651a4244f981f4ddcd29ae
+SIZE (xpi/firefox-i18n-28.0b1/uk.xpi) = 385138
+SHA256 (xpi/firefox-i18n-28.0b1/vi.xpi) = 82ed6baa71355ff4757f9626bcb02574c68a0dc99647cc969ec823d85bbc6597
+SIZE (xpi/firefox-i18n-28.0b1/vi.xpi) = 378860
+SHA256 (xpi/firefox-i18n-28.0b1/zh-CN.xpi) = 16ce6449da9c580365fe50b59bd8568ce535ceac510bcd0cf7d597e6deb1b5f0
+SIZE (xpi/firefox-i18n-28.0b1/zh-CN.xpi) = 378432
+SHA256 (xpi/firefox-i18n-28.0b1/zh-TW.xpi) = 2bcf0feb2ed7a0c04919ecbd40d900f4a7bb3026c7dac7a7e70a314fd4df7051
+SIZE (xpi/firefox-i18n-28.0b1/zh-TW.xpi) = 376074
+SHA256 (xpi/firefox-i18n-28.0b1/zu.xpi) = 3c213ca47a2d2ae62106f6bdb1e88c2b2ba713d10be11c490cd568d4cd24f58b
+SIZE (xpi/firefox-i18n-28.0b1/zu.xpi) = 365911

Modified: trunk/www/firefox-nightly/Makefile
==============================================================================
--- trunk/www/firefox-nightly/Makefile	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox-nightly/Makefile	Wed Feb  5 09:55:30 2014	(r1478)
@@ -2,7 +2,7 @@
 # $FreeBSD$
 
 PORTNAME=	firefox
-PORTVERSION=	29.0.${HGREV:C/:.*//}
+PORTVERSION=	30.0.${HGREV:C/:.*//}
 PORTEPOCH=	1
 CATEGORIES=	www ipv6
 MASTER_SITES=	https://hg.mozilla.org/integration/mozilla-inbound/archive/

Modified: trunk/www/firefox-nightly/Makefile.hgrev
==============================================================================
--- trunk/www/firefox-nightly/Makefile.hgrev	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox-nightly/Makefile.hgrev	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1 +1 @@
-HGREV=		166152:2a7a697f2d88
+HGREV=		166874:a497dfd65f25

Modified: trunk/www/firefox-nightly/distinfo
==============================================================================
--- trunk/www/firefox-nightly/distinfo	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox-nightly/distinfo	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1,2 +1,2 @@
-SHA256 (firefox-nightly/2a7a697f2d88.tar.bz2) = 989d23356a16983564b20daf8f063e7d626fc75e7db3d6be9509e9190fb2f7fc
-SIZE (firefox-nightly/2a7a697f2d88.tar.bz2) = 139589506
+SHA256 (firefox-nightly/a497dfd65f25.tar.bz2) = 02aa9fdccee57e647045d6aac07fadbb3ef1cd8330458094b3056b89cec0ccae
+SIZE (firefox-nightly/a497dfd65f25.tar.bz2) = 140146557

Modified: trunk/www/firefox/Makefile
==============================================================================
--- trunk/www/firefox/Makefile	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox/Makefile	Wed Feb  5 09:55:30 2014	(r1478)
@@ -2,7 +2,7 @@
 # $FreeBSD: head/www/firefox/Makefile 339634 2014-01-13 21:00:02Z rene $
 
 PORTNAME=	firefox
-DISTVERSION=	27.0
+DISTVERSION=	28.0b1
 PORTEPOCH=	1
 CATEGORIES=	www ipv6
 MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
@@ -12,9 +12,10 @@
 MAINTAINER=	gecko@FreeBSD.org
 COMMENT=	Web browser based on the browser portion of Mozilla
 
-BUILD_DEPENDS=	nspr>=4.10.2:${PORTSDIR}/devel/nspr \
+BUILD_DEPENDS=	nspr>=4.10.3:${PORTSDIR}/devel/nspr \
 		nss>=3.15.4:${PORTSDIR}/security/nss \
-		sqlite3>=3.8.0.2:${PORTSDIR}/databases/sqlite3 \
+		libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \
+		sqlite3>=3.8.1:${PORTSDIR}/databases/sqlite3 \
 		${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
 		v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \
 		unzip:${PORTSDIR}/archivers/unzip
@@ -51,7 +52,7 @@
 .include "${.CURDIR}/../../www/firefox/Makefile.options"
 .include <bsd.port.pre.mk>
 
-WRKSRC:=	${WRKDIR}/mozilla-release
+WRKSRC:=	${WRKDIR}/mozilla-beta
 
 .if ${ARCH} == i386 && ${OSVERSION} < 1000000
 USE_GCC?=	yes

Modified: trunk/www/firefox/distinfo
==============================================================================
--- trunk/www/firefox/distinfo	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox/distinfo	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1,2 +1,2 @@
-SHA256 (firefox-27.0.source.tar.bz2) = 703be57d85a90fe28636ed7f3d3ae907cec1dd33e847c1d0faf1d6312d66f1a4
-SIZE (firefox-27.0.source.tar.bz2) = 129222806
+SHA256 (firefox-28.0b1.source.tar.bz2) = e791f62fe99375a0a6087c2390979d85ca9f7b0ab11d83ce31525f522c1ee9d3
+SIZE (firefox-28.0b1.source.tar.bz2) = 134830833

Added: trunk/www/firefox/files/patch-bug806917
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/www/firefox/files/patch-bug806917	Wed Feb  5 09:55:30 2014	(r1478)
@@ -0,0 +1,1972 @@
+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                                      |  64 ++-
+ content/media/gstreamer/GStreamerAllocator.cpp    | 194 +++++++
+ 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  | 198 +++++++
+ content/media/gstreamer/GStreamerReader.cpp       | 618 ++++++++++++++--------
+ content/media/gstreamer/GStreamerReader.h         |  42 +-
+ content/media/gstreamer/moz.build                 |  11 +-
+ content/media/test/manifest.js                    |   6 +-
+ 12 files changed, 1046 insertions(+), 274 deletions(-)
+
+diff --git configure.in configure.in
+index 9776b8d..0b1698d 100644
+--- configure.in
++++ configure.in
+@@ -3982,6 +3982,7 @@ MOZ_SAMPLE_TYPE_FLOAT32=
+ MOZ_SAMPLE_TYPE_S16=
+ MOZ_OPUS=1
+ MOZ_WEBM=1
++MOZ_GSTREAMER=
+ MOZ_DIRECTSHOW=
+ MOZ_WMF=
+ MOZ_FMP4=
+@@ -5606,43 +5607,58 @@ dnl = Enable GStreamer
+ dnl ========================================================
+ if test "$OS_TARGET" = "Linux"; then
+   MOZ_GSTREAMER=1
++  GST_API_VERSION=0.10
+ fi
+ 
+-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
++  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,194 @@
++#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();
++  ImageFormat format = PLANAR_YCBCR;
++  mem->image = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(&format, 1).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)
++{
++  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,46 +34,36 @@ 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_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,198 @@
++#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();
++  ImageFormat format = PLANAR_YCBCR;
++  PlanarYCbCrImage* img = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(&format, 1).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 = nsIntSize(mPicture.width, mPicture.height);
++  data.mStereoMode = STEREO_MODE_MONO;
++
++  data.mYChannel = GST_BUFFER_DATA(aBuffer);
++  data.mYStride = gst_video_format_get_row_stride(mFormat, 0, mPicture.width);
++  data.mYSize = nsIntSize(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 = nsIntSize(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,9 @@ 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);
+-
+ 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;
++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 +57,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 +73,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 +87,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 +116,67 @@ 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)
+ {
++#if 0
+   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;
+   }
++#endif
++  GStreamerFormatHelper::Instance();
+ 
++#if GST_VERSION_MAJOR >= 1
++  mAllocator = static_cast<GstAllocator*>(g_object_new(GST_TYPE_MOZ_GFX_MEMORY_ALLOCATOR, NULL));
++  moz_gfx_memory_allocator_set_reader(mAllocator, this);
++
++  mBufferPool = static_cast<GstBufferPool*>(g_object_new(GST_TYPE_MOZ_GFX_BUFFER_POOL, NULL));
++#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);
++                             (gpointer) this, nullptr);  
++  InstallPadCallbacks();
+ 
+   g_object_set(mPlayBin, "uri", "appsrc://",
+                "video-sink", mVideoSink,
+@@ -316,13 +326,13 @@ 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);
+ 
+     /* Wait for ASYNC_DONE, which is emitted when the pipeline is built,
+@@ -343,6 +353,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;
+@@ -358,16 +369,20 @@ 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)")); 
+   }
+ 
+   bool isMP3 = mDecoder->GetResource()->GetContentType().EqualsASCII(AUDIO_MP3);
+@@ -377,7 +392,6 @@ nsresult GStreamerReader::ReadMetadata(MediaInfo* aInfo,
+ 
+   /* 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
+@@ -386,18 +400,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 +431,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, NULL);
++#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 +449,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 +492,11 @@ nsresult GStreamerReader::CheckSupportedFormats()
+           }
+         }
+ 
++#if GST_VERSION_MAJOR >= 1
++        g_value_unset (&value);
++#else
+         gst_object_unref(element);
++#endif
+         done = unsupported;
+         break;
+       }
+@@ -475,16 +520,23 @@ nsresult GStreamerReader::ResetDecode()
+ {
+   nsresult res = NS_OK;
+ 
++  LOG(PR_LOG_DEBUG, ("reset decode"));
++
+   if (NS_FAILED(MediaDecoderReader::ResetDecode())) {
+     res = NS_ERROR_FAILURE;
+   }
+-
++  
+   mVideoQueue.Reset();
+   mAudioQueue.Reset();
+ 
+   mVideoSinkBufferCount = 0;
+   mAudioSinkBufferCount = 0;
+   mReachedEos = false;
++#if GST_VERSION_MAJOR >= 1
++  mConfigureAlignment = true;
++#endif
++  
++  LOG(PR_LOG_DEBUG, ("reset decode done"));
+ 
+   return res;
+ }
+@@ -524,24 +576,43 @@ 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);
+ 
+@@ -550,9 +621,9 @@ bool GStreamerReader::DecodeAudioData()
+ 
+   return true;
+ }
+-
++ 
+ bool GStreamerReader::DecodeVideoFrame(bool &aKeyFrameSkip,
+-                                         int64_t aTimeThreshold)
++                                       int64_t aTimeThreshold)
+ {
+   NS_ASSERTION(mDecoder->OnDecodeThread(), "Should be on decode thread.");
+ 
+@@ -589,11 +660,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;
+@@ -609,10 +686,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;
+   }
+@@ -621,61 +706,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 +758,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 +773,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 +797,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 +830,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),
+@@ -766,14 +847,19 @@ void GStreamerReader::ReadAndPushData(guint aLength)
+     bytesRead += size;
+   }
+ 
++#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) {
+     LOG(PR_LOG_ERROR, ("ReadAndPushData push ret %s", gst_flow_get_name(ret)));
+   }
+ 
+-  if (GST_BUFFER_SIZE (buffer) < aLength) {
++  if (bytesRead < aLength) {
+     /* If we read less than what we wanted, we reached the end */
+     gst_app_src_end_of_stream(mSource);
+   }
+@@ -786,8 +872,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)));
+@@ -866,103 +957,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();
+-  ImageFormat format = PLANAR_YCBCR;
+-  PlanarYCbCrImage* img = reinterpret_cast<PlanarYCbCrImage*>(container->CreateImage(&format, 1).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 +973,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 +996,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 +1036,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 +1103,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, NULL);
++
++  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, NULL);
++      gst_query_add_allocation_pool(query, mBufferPool, info.size, 0, 0);
++      gst_query_add_allocation_meta(query, GST_VIDEO_META_API_TYPE, NULL);
++      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 = nsIntSize(mPicture.width, mPicture.height);
++  aData->mStereoMode = STEREO_MODE_MONO;
++
++  aData->mYChannel = GST_VIDEO_FRAME_COMP_DATA(aFrame, 0);
++  aData->mYStride = GST_VIDEO_FRAME_COMP_STRIDE(aFrame, 0);
++  aData->mYSize = nsIntSize(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 = nsIntSize(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), NULL);
++  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
+@@ -364,9 +364,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" }
+   ]);

Deleted: trunk/www/firefox/files/patch-bug810716
==============================================================================
--- trunk/www/firefox/files/patch-bug810716	Wed Feb  5 09:55:30 2014	(r1477)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,68 +0,0 @@
-diff --git configure.in configure.in
-index 2084be9..eb6eeb2 100644
---- configure.in
-+++ configure.in
-@@ -3369,14 +3369,19 @@ fi
- AC_CACHE_CHECK(
-     [for res_ninit()],
-     ac_cv_func_res_ninit,
--    [AC_TRY_LINK([
-+    [AC_TRY_RUN([
-         #ifdef linux
-         #define _BSD_SOURCE 1
-         #endif
-+        #include <sys/types.h>
-+        #include <netinet/in.h>
-+        #include <arpa/nameser.h>
-         #include <resolv.h>
--        ],
--        [int foo = res_ninit(&_res);],
-+        int main(int argc, char **argv){
-+            int foo = res_ninit(&_res);
-+        }],
-         [ac_cv_func_res_ninit=yes],
-+        [ac_cv_func_res_ninit=no],
-         [ac_cv_func_res_ninit=no])
-     ])
- 
-diff --git extensions/auth/nsAuthGSSAPI.cpp extensions/auth/nsAuthGSSAPI.cpp
-index e828beb..6444246 100644
---- extensions/auth/nsAuthGSSAPI.cpp
-+++ extensions/auth/nsAuthGSSAPI.cpp
-@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTickets_type)(
- #endif
- 
- #if defined(HAVE_RES_NINIT)
-+#include <sys/types.h>
-+#include <netinet/in.h>
-+#include <arpa/nameser.h>
- #include <resolv.h>
- #endif
- 
-diff --git js/src/configure.in js/src/configure.in
-index e25f569..b9722f9 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2797,14 +2797,19 @@ fi
- AC_CACHE_CHECK(
-     [for res_ninit()],
-     ac_cv_func_res_ninit,
--    [AC_TRY_LINK([
-+    [AC_TRY_RUN([
-         #ifdef linux
-         #define _BSD_SOURCE 1
-         #endif
-+        #include <sys/types.h>
-+        #include <netinet/in.h>
-+        #include <arpa/nameser.h>
-         #include <resolv.h>
--        ],
--        [int foo = res_ninit(&_res);],
-+        int main(int argc, char **argv){
-+            int foo = res_ninit(&_res);
-+        }],
-         [ac_cv_func_res_ninit=yes],
-+        [ac_cv_func_res_ninit=no],
-         [ac_cv_func_res_ninit=no])
-     ])
- 

Modified: trunk/www/firefox/files/patch-bug826985
==============================================================================
--- trunk/www/firefox/files/patch-bug826985	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/firefox/files/patch-bug826985	Wed Feb  5 09:55:30 2014	(r1478)
@@ -42,9 +42,9 @@
 --- media/webrtc/signaling/test/Makefile.in
 +++ media/webrtc/signaling/test/Makefile.in
 @@ -17,6 +17,7 @@ LIBS = \
-   $(NSPR_LIBS) \
    $(NSS_LIBS) \
    $(REALTIME_LIBS) \
+   $(MOZ_JS_LIBS) \
 +  $(MOZ_LIBV4L2_LIBS) \
    $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
    $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \
@@ -53,7 +53,7 @@
 index 239a292..bab496c 100644
 --- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
 +++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
-@@ -26,11 +26,23 @@
+@@ -25,10 +25,21 @@
  #else
  #include <linux/videodev2.h>
  #endif
@@ -61,9 +61,8 @@
 +#include <libv4l2.h>
 +#endif
  
- #include "ref_count.h"
- #include "trace.h"
- 
+ #include "webrtc/system_wrappers/interface/ref_count.h"
+ #include "webrtc/system_wrappers/interface/trace.h"
  
 +#ifdef HAVE_LIBV4L2
 +#define open	v4l2_open
@@ -73,10 +72,9 @@
 +#define mmap	v4l2_mmap
 +#define munmap	v4l2_munmap
 +#endif
-+
+ 
  namespace webrtc
  {
- namespace videocapturemodule
 @@ -130,6 +142,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName(
      memset(deviceNameUTF8, 0, deviceNameLength);
      memcpy(cameraName, cap.card, sizeof(cap.card));
@@ -154,11 +152,11 @@
 index 9c16ffa..1db3794 100644
 --- toolkit/library/Makefile.in
 +++ toolkit/library/Makefile.in
-@@ -405,6 +405,7 @@ endif
+@@ -121,6 +121,7 @@ endif
  EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
  
  ifdef MOZ_WEBRTC
 +EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
- ifdef MOZ_PEERCONNECTION
- COMPONENT_LIBS += peerconnection
- endif
+ ifdef MOZ_WEBRTC_SIGNALING
+ SHARED_LIBRARY_LIBS += \
+   $(DEPTH)/media/webrtc/signaling/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \

Deleted: trunk/www/firefox/files/patch-bug945046
==============================================================================
--- trunk/www/firefox/files/patch-bug945046	Wed Feb  5 09:55:30 2014	(r1477)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,160 +0,0 @@
-diff --git config/system-headers config/system-headers
-index 432cba6..18a9627 100644
---- config/system-headers
-+++ config/system-headers
-@@ -1131,3 +1131,4 @@ unicode/unum.h
- unicode/ustring.h
- unicode/utypes.h
- #endif
-+libutil.h
-diff --git js/src/config/system-headers js/src/config/system-headers
-index 432cba6..18a9627 100644
---- js/src/config/system-headers
-+++ js/src/config/system-headers
-@@ -1131,3 +1131,4 @@ unicode/unum.h
- unicode/ustring.h
- unicode/utypes.h
- #endif
-+libutil.h
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
-index 9975621..b4b037d 100644
---- toolkit/library/Makefile.in
-+++ toolkit/library/Makefile.in
-@@ -289,6 +289,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
- EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
- endif
- 
-+ifeq ($(OS_ARCH),FreeBSD)
-+OS_LIBS += $(call EXPAND_LIBNAME,util)
-+endif
-+
- ifeq ($(OS_ARCH),WINNT)
- OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet wbemuuid)
- ifdef ACCESSIBILITY
-diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
-index b8147c8..0ffb34e 100644
---- xpcom/base/nsMemoryReporterManager.cpp
-+++ xpcom/base/nsMemoryReporterManager.cpp
-@@ -204,6 +204,61 @@ ResidentFastDistinguishedAmount(int64_t* aN)
-     return ResidentDistinguishedAmount(aN);
- }
- 
-+#ifdef __FreeBSD__
-+#include <libutil.h>
-+#include <algorithm>
-+
-+static nsresult
-+GetKinfoVmentrySelf(int64_t* prss, uint64_t* maxreg)
-+{
-+    int cnt;
-+    struct kinfo_vmentry *vmmap, *kve;
-+    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
-+        return NS_ERROR_FAILURE;
-+
-+    if (prss)
-+        *prss = 0;
-+    if (maxreg)
-+        *maxreg = 0;
-+
-+    for (int i = 0; i < cnt; i++) {
-+        kve = &vmmap[i];
-+        if (prss)
-+            *prss += kve->kve_private_resident;
-+        if (maxreg)
-+            *maxreg = std::max(*maxreg,
-+                               kve->kve_end - kve->kve_start);
-+    }
-+
-+    free(vmmap);
-+    return NS_OK;
-+}
-+
-+#define HAVE_PRIVATE_REPORTER
-+static nsresult
-+PrivateDistinguishedAmount(int64_t* aN)
-+{
-+    int64_t priv;
-+    nsresult rv = GetKinfoVmentrySelf(&priv, NULL);
-+    if (NS_SUCCEEDED(rv))
-+        *aN = priv * getpagesize();
-+
-+    return NS_OK;
-+}
-+
-+#define HAVE_VSIZE_MAX_CONTIGUOUS_REPORTER 1
-+static nsresult
-+VsizeMaxContiguousDistinguishedAmount(int64_t* aN)
-+{
-+    uint64_t biggestRegion;
-+    nsresult rv = GetKinfoVmentrySelf(NULL, &biggestRegion);
-+    if (NS_SUCCEEDED(rv))
-+        *aN = biggestRegion;
-+
-+    return NS_OK;
-+}
-+#endif // FreeBSD
-+
- #elif defined(SOLARIS)
- 
- #include <procfs.h>
-@@ -416,6 +470,25 @@ VsizeMaxContiguousDistinguishedAmount(int64_t* aN)
-     return NS_OK;
- }
- 
-+#define HAVE_PRIVATE_REPORTER
-+static nsresult
-+PrivateDistinguishedAmount(int64_t* aN)
-+{
-+    PROCESS_MEMORY_COUNTERS_EX pmcex;
-+    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
-+
-+    if (!GetProcessMemoryInfo(
-+            GetCurrentProcess(),
-+            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
-+        return NS_ERROR_FAILURE;
-+    }
-+
-+    *aN = pmcex.PrivateUsage;
-+    return NS_OK;
-+}
-+#endif  // XP_<PLATFORM>
-+
-+#ifdef HAVE_VSIZE_MAX_CONTIGUOUS_REPORTER
- class VsizeMaxContiguousReporter MOZ_FINAL : public MemoryUniReporter
- {
- public:
-@@ -429,8 +502,9 @@ public:
-         return VsizeMaxContiguousDistinguishedAmount(aAmount);
-     }
- };
-+#endif
- 
--#define HAVE_PRIVATE_REPORTER
-+#ifdef HAVE_PRIVATE_REPORTER
- class PrivateReporter MOZ_FINAL : public MemoryUniReporter
- {
- public:
-@@ -443,21 +517,10 @@ public:
- 
-     NS_IMETHOD GetAmount(int64_t* aAmount)
-     {
--        PROCESS_MEMORY_COUNTERS_EX pmcex;
--        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
--
--        if (!GetProcessMemoryInfo(
--                GetCurrentProcess(),
--                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
--            return NS_ERROR_FAILURE;
--        }
--
--        *aAmount = pmcex.PrivateUsage;
--        return NS_OK;
-+        return PrivateDistinguishedAmount(aAmount);
-     }
- };
--
--#endif  // XP_<PLATFORM>
-+#endif
- 
- #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
- class VsizeReporter MOZ_FINAL : public MemoryUniReporter

Deleted: trunk/www/firefox/files/patch-bug946560
==============================================================================
--- trunk/www/firefox/files/patch-bug946560	Wed Feb  5 09:55:30 2014	(r1477)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,62 +0,0 @@
-diff --git xpcom/base/nsMemoryInfoDumper.cpp xpcom/base/nsMemoryInfoDumper.cpp
-index 0b2f78c..d857374 100644
---- xpcom/base/nsMemoryInfoDumper.cpp
-+++ xpcom/base/nsMemoryInfoDumper.cpp
-@@ -6,7 +6,7 @@
- 
- #include "mozilla/nsMemoryInfoDumper.h"
- 
--#ifdef XP_LINUX
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- #include "mozilla/Preferences.h"
- #endif
- #include "mozilla/unused.h"
-@@ -31,7 +31,7 @@
- #include <unistd.h>
- #endif
- 
--#ifdef XP_LINUX
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
-@@ -110,7 +110,7 @@ private:
- 
- } // anonymous namespace
- 
--#ifdef XP_LINUX // {
-+#if defined(XP_LINUX) || defined(__FreeBSD__) // {
- namespace {
- 
- /*
-@@ -552,7 +552,7 @@ nsMemoryInfoDumper::~nsMemoryInfoDumper()
- /* static */ void
- nsMemoryInfoDumper::Initialize()
- {
--#ifdef XP_LINUX
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
-   SignalPipeWatcher::Create();
-   FifoWatcher::MaybeCreate();
- #endif
-diff --git xpcom/base/nsMemoryReporterManager.cpp xpcom/base/nsMemoryReporterManager.cpp
-index 1252e27..6f22093 100644
---- xpcom/base/nsMemoryReporterManager.cpp
-+++ xpcom/base/nsMemoryReporterManager.cpp
-@@ -17,7 +17,7 @@
- #include "nsPIDOMWindow.h"
- #include "nsIObserverService.h"
- #include "nsIGlobalObject.h"
--#if defined(XP_LINUX)
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
- #include "nsMemoryInfoDumper.h"
- #endif
- #include "mozilla/Attributes.h"
-@@ -898,7 +898,7 @@ nsMemoryReporterManager::Init()
-     RegisterStrongReporter(new mozilla::dmd::DMDReporter());
- #endif
- 
--#if defined(XP_LINUX)
-+#if defined(XP_LINUX) || defined(__FreeBSD__)
-     nsMemoryInfoDumper::Initialize();
- #endif
- 

Added: trunk/www/firefox/files/patch-js-src-Makefile.in
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ trunk/www/firefox/files/patch-js-src-Makefile.in	Wed Feb  5 09:55:30 2014	(r1478)
@@ -0,0 +1,11 @@
+--- js/src/Makefile.in~
++++ js/src/Makefile.in
+@@ -373,7 +373,7 @@ endif
+ ifdef MOZ_SHARED_ICU
+ EXTRA_DSO_LDOPTS += $(MOZ_ICU_LIBS)
+ else
+-SHARED_LIBRARY_LIBS += $(MOZ_ICU_LIBS)
++SHARED_LIBRARY_LIBS += $(filter-out -L% -l%,$(MOZ_ICU_LIBS))
+ endif
+ 
+ # Prevent floating point errors caused by VC++ optimizations

Deleted: trunk/www/firefox/files/patch-toolkit_xre_Makefile.in
==============================================================================
--- trunk/www/firefox/files/patch-toolkit_xre_Makefile.in	Wed Feb  5 09:55:30 2014	(r1477)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,8 +0,0 @@
---- toolkit/xre/Makefile.in.orig	2007-09-10 10:31:53.000000000 -0400
-+++ toolkit/xre/Makefile.in	2007-09-10 10:35:00.000000000 -0400
-@@ -263,5 +263,3 @@
- libs:: platform.ini
- 	$(INSTALL) $^ $(DIST)/bin
- 
--install::
--	$(INSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)

Modified: trunk/www/seamonkey-i18n/Makefile
==============================================================================
--- trunk/www/seamonkey-i18n/Makefile	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/seamonkey-i18n/Makefile	Wed Feb  5 09:55:30 2014	(r1478)
@@ -2,7 +2,7 @@
 # $FreeBSD: head/www/seamonkey-i18n/Makefile 336446 2013-12-14 13:42:06Z flo $
 
 PORTNAME=	seamonkey-i18n
-PORTVERSION=	2.24b1
+PORTVERSION=	2.24
 CATEGORIES=	www mail news editors irc
 MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${PORTVERSION}/langpack
 PKGNAMEPREFIX=

Modified: trunk/www/seamonkey-i18n/distinfo
==============================================================================
--- trunk/www/seamonkey-i18n/distinfo	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/seamonkey-i18n/distinfo	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1,30 +1,30 @@
-SHA256 (xpi/seamonkey-i18n-2.24b1/be.xpi) = 7b4be24c48a065e0e264963f7a5a59d7836a9aaee3affa04ed300db034b346e2
-SIZE (xpi/seamonkey-i18n-2.24b1/be.xpi) = 814307
-SHA256 (xpi/seamonkey-i18n-2.24b1/en-US.xpi) = 58f312c75468ddebeb66d51d5643861b4cbc4e1eb123120e53dd886fafa069af
-SIZE (xpi/seamonkey-i18n-2.24b1/en-US.xpi) = 782073
-SHA256 (xpi/seamonkey-i18n-2.24b1/es-AR.xpi) = 73217c85a05a2ca80c4b30aee8e5f2375d68c8594d46d4d960b8846f465e5ad2
-SIZE (xpi/seamonkey-i18n-2.24b1/es-AR.xpi) = 838204
-SHA256 (xpi/seamonkey-i18n-2.24b1/es-ES.xpi) = 9c1a6d32518ca15bdb0408d774b332e8a4ee0e310f468e55efe4189ff381af73
-SIZE (xpi/seamonkey-i18n-2.24b1/es-ES.xpi) = 811306
-SHA256 (xpi/seamonkey-i18n-2.24b1/gl.xpi) = 345854e02ebd9286e98e688e40b4d9b61d215d69c04e5812a62d933eb721ef50
-SIZE (xpi/seamonkey-i18n-2.24b1/gl.xpi) = 789063
-SHA256 (xpi/seamonkey-i18n-2.24b1/hu.xpi) = 0bd93abe392cbfeacd6403dd9b48e005ba7e0e5577db4c25049bfc2e8fc96f07
-SIZE (xpi/seamonkey-i18n-2.24b1/hu.xpi) = 823607
-SHA256 (xpi/seamonkey-i18n-2.24b1/lt.xpi) = f0c03d8be7816c54a91007fd4cae1b9d72450255f1f13607f3125d9760346a65
-SIZE (xpi/seamonkey-i18n-2.24b1/lt.xpi) = 827034
-SHA256 (xpi/seamonkey-i18n-2.24b1/nl.xpi) = b61860af3fb1c448343d2eb21e7c61355288979e262b50426b40e7969ba7d55e
-SIZE (xpi/seamonkey-i18n-2.24b1/nl.xpi) = 776386
-SHA256 (xpi/seamonkey-i18n-2.24b1/pl.xpi) = e9c61a3eee9125519f8134f718e74eebd6e59abcc964aa565da49df71d19e478
-SIZE (xpi/seamonkey-i18n-2.24b1/pl.xpi) = 852730
-SHA256 (xpi/seamonkey-i18n-2.24b1/ru.xpi) = 4d49e4ebf438cc38e06206fde3f3e0461672e48a8f19ca6d5bb1858dc58b77a8
-SIZE (xpi/seamonkey-i18n-2.24b1/ru.xpi) = 882614
-SHA256 (xpi/seamonkey-i18n-2.24b1/sk.xpi) = 5912e60ef0d7f31a3ee02fd05d7cf3ff6f7e4c6288c591909be3628904dfb152
-SIZE (xpi/seamonkey-i18n-2.24b1/sk.xpi) = 836795
-SHA256 (xpi/seamonkey-i18n-2.24b1/tr.xpi) = 6f114c6b671aad9b027479da4e32b0c44bf2425096c05e7b349461e4764d76b3
-SIZE (xpi/seamonkey-i18n-2.24b1/tr.xpi) = 850114
-SHA256 (xpi/seamonkey-i18n-2.24b1/uk.xpi) = 92394ed40dade39d8b1a2e6cb2385883aade942a0e4572adf854cebf2b579757
-SIZE (xpi/seamonkey-i18n-2.24b1/uk.xpi) = 852876
-SHA256 (xpi/seamonkey-i18n-2.24b1/zh-CN.xpi) = 82eaba3f73fbfdb3b7175a066c66d7eba3a9c4feba5986df9180ada4be791704
-SIZE (xpi/seamonkey-i18n-2.24b1/zh-CN.xpi) = 813619
-SHA256 (xpi/seamonkey-i18n-2.24b1/zh-TW.xpi) = af0501364cf79a8abfce50127107da278311f9774b2c4d9ed1db6726259be544
-SIZE (xpi/seamonkey-i18n-2.24b1/zh-TW.xpi) = 837900
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.be.langpack.xpi) = 1d2c583dd8bc513127d6f605f129d7675865f0e32ac294313b803a9690e87acf
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.be.langpack.xpi) = 814307
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.en-US.langpack.xpi) = 3fae3e80f0b046ee88133c949705264e7b002ec00b2ada403c5d811a77ae87d1
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.en-US.langpack.xpi) = 782073
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.es-AR.langpack.xpi) = c96e94479dc6819a0a60341cc661801d72fabf9343344a8dbcf782eece9cbf61
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.es-AR.langpack.xpi) = 838204
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.es-ES.langpack.xpi) = 9c8ef69f5f142c52edde2c26e383af76a2f71accc816babb7a1d08986e05c335
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.es-ES.langpack.xpi) = 811306
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.gl.langpack.xpi) = c08bad0701e6cb7f3b042a24879a16a4f0614e92c623744b4f415f050b0dfaa9
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.gl.langpack.xpi) = 789063
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.hu.langpack.xpi) = 1b2bda6ee49db7a6b351a1b156058b95a3d0d45abd075b26469d4890eb81f1a7
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.hu.langpack.xpi) = 823607
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.lt.langpack.xpi) = f241fb89d6392e086d53ff07686be700557ff892958a054ca74c93c8bf5f8f84
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.lt.langpack.xpi) = 827034
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.nl.langpack.xpi) = 1029c64658d7548d31202bbe37e1287537899eb2a52040a71f3acda32586b286
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.nl.langpack.xpi) = 776386
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.pl.langpack.xpi) = 719dcebd471be8840f47d7cf427e988fbc37bd7349e33a278358b8c4d79f7049
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.pl.langpack.xpi) = 852730
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.ru.langpack.xpi) = 23a1b8a21410a4d06b248918a5432951072dd02a188818f8bcb20e0456f6dac0
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.ru.langpack.xpi) = 882614
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.sk.langpack.xpi) = 8b44077e774f36d56e90ce1aa7b3f2acf51511429cb2d4620e2be5e42f25188a
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.sk.langpack.xpi) = 836795
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.tr.langpack.xpi) = e7f97c238050da3986bae68ce5b916cccde5f2148051c91c7e02c7af388bab66
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.tr.langpack.xpi) = 850114
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.uk.langpack.xpi) = 80a72905a03d2cadfb60e169027dfe5828df9513d04a8b19de098d094d26b33f
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.uk.langpack.xpi) = 852876
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.zh-CN.langpack.xpi) = c6d97ec69db69d791e709931e6f0acc66fb526f0629545cfc3949d3445c525d9
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.zh-CN.langpack.xpi) = 813619
+SHA256 (xpi/seamonkey-i18n-2.24/seamonkey-2.24.zh-TW.langpack.xpi) = dda948359944a67331752fcc45ada941ea30ff4f11d0de7a6e7fb5e7a194509e
+SIZE (xpi/seamonkey-i18n-2.24/seamonkey-2.24.zh-TW.langpack.xpi) = 837900

Modified: trunk/www/seamonkey/Makefile
==============================================================================
--- trunk/www/seamonkey/Makefile	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/seamonkey/Makefile	Wed Feb  5 09:55:30 2014	(r1478)
@@ -2,7 +2,7 @@
 # $FreeBSD: head/www/seamonkey/Makefile 339634 2014-01-13 21:00:02Z rene $
 
 PORTNAME=	seamonkey
-DISTVERSION=	2.24b1
+DISTVERSION=	2.24
 CATEGORIES?=	www mail news editors irc ipv6
 MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
 		https://ftp.mozilla.org/pub/mozilla.org/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source/

Modified: trunk/www/seamonkey/distinfo
==============================================================================
--- trunk/www/seamonkey/distinfo	Sun Feb  2 11:33:35 2014	(r1477)
+++ trunk/www/seamonkey/distinfo	Wed Feb  5 09:55:30 2014	(r1478)
@@ -1,4 +1,4 @@
-SHA256 (seamonkey-2.24b1.source.tar.bz2) = 85889226ba21c0202583daf832b6533c02b688d2d6e9b56b48ae102a719b7e58
-SIZE (seamonkey-2.24b1.source.tar.bz2) = 150208012
+SHA256 (seamonkey-2.24.source.tar.bz2) = 63855265b4754dd056af8d611b50219577a592466cdf1d3865028d86ed680474
+SIZE (seamonkey-2.24.source.tar.bz2) = 149845514
 SHA256 (enigmail-1.6.tar.gz) = 10d5eb7ba364b9b6e6275aae8bba1d0e4321ed7d55a715337d566ccf2a56ea4d
 SIZE (enigmail-1.6.tar.gz) = 1231111



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201402050955.s159tUUl056668>