aboutsummaryrefslogtreecommitdiffstats
path: root/www
diff options
context:
space:
mode:
authorjbeich <jbeich@FreeBSD.org>2015-07-16 14:05:59 +0800
committerjbeich <jbeich@FreeBSD.org>2015-07-16 14:05:59 +0800
commit5873978b2c3832e1d08395fee2f0aafb6e94811c (patch)
treecaa550e9c6de6d456de3b7c58dd8a734b5352b71 /www
parent2845d93d1e8c3e47c539a1e7bcafc1a822f8178d (diff)
downloadfreebsd-ports-gnome-5873978b2c3832e1d08395fee2f0aafb6e94811c.tar.gz
freebsd-ports-gnome-5873978b2c3832e1d08395fee2f0aafb6e94811c.tar.zst
freebsd-ports-gnome-5873978b2c3832e1d08395fee2f0aafb6e94811c.zip
- Update NSS and ca_root_nss to 3.19.2
- Update Firefox and gmp-api to 39.0 - Update Firefox ESR and libxul to 38.1.0 Changes: https://developer.mozilla.org/docs/Mozilla/Projects/NSS/NSS_3.19.2_release_notes Changes: https://www.mozilla.org/firefox/39.0/releasenotes/ Changes: https://www.mozilla.org/firefox/38.1.0/releasenotes/ MFH: 2015Q3 Security: https://vuxml.freebsd.org/freebsd/44d9daee-940c-4179-86bb-6e3ffd617869.html
Diffstat (limited to 'www')
-rw-r--r--www/firefox-esr-i18n/Makefile4
-rw-r--r--www/firefox-esr-i18n/Makefile.lang14
-rw-r--r--www/firefox-esr-i18n/distinfo354
-rw-r--r--www/firefox-esr/Makefile30
-rw-r--r--www/firefox-esr/distinfo4
-rw-r--r--www/firefox-esr/files/patch-bug101367588
-rw-r--r--www/firefox-esr/files/patch-bug101388210
-rw-r--r--www/firefox-esr/files/patch-bug101554795
-rw-r--r--www/firefox-esr/files/patch-bug1021171193
-rw-r--r--www/firefox-esr/files/patch-bug1021761129
-rw-r--r--www/firefox-esr/files/patch-bug102682820
-rw-r--r--www/firefox-esr/files/patch-bug104126826
-rw-r--r--www/firefox-esr/files/patch-bug104138112
-rw-r--r--www/firefox-esr/files/patch-bug104179548
-rw-r--r--www/firefox-esr/files/patch-bug104622426
-rw-r--r--www/firefox-esr/files/patch-bug106173650
-rw-r--r--www/firefox-esr/files/patch-bug106737778
-rw-r--r--www/firefox-esr/files/patch-bug1073117877
-rw-r--r--www/firefox-esr/files/patch-bug107370918
-rw-r--r--www/firefox-esr/files/patch-bug108219926
-rw-r--r--www/firefox-esr/files/patch-bug110385842
-rw-r--r--www/firefox-esr/files/patch-bug112557914
-rw-r--r--www/firefox-esr/files/patch-bug112558011
-rw-r--r--www/firefox-esr/files/patch-bug113015523
-rw-r--r--www/firefox-esr/files/patch-bug1138845 (renamed from www/firefox/files/patch-bug1138845)0
-rw-r--r--www/firefox-esr/files/patch-bug1143686 (renamed from www/firefox/files/patch-bug1143686)0
-rw-r--r--www/firefox-esr/files/patch-bug1144643 (renamed from www/firefox/files/patch-bug1144643)0
-rw-r--r--www/firefox-esr/files/patch-bug70217934
-rw-r--r--www/firefox-esr/files/patch-bug77971324
-rw-r--r--www/firefox-esr/files/patch-bug82698578
-rw-r--r--www/firefox-esr/files/patch-bug847568204
-rw-r--r--www/firefox-esr/files/patch-bug858919391
-rw-r--r--www/firefox-esr/files/patch-bug961264266
-rw-r--r--www/firefox-esr/files/patch-ijg-libjpeg56
-rw-r--r--www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp16
-rw-r--r--www/firefox-esr/files/patch-system-openh264239
-rw-r--r--www/firefox-esr/files/patch-z-bug517422508
-rw-r--r--www/firefox-i18n/Makefile6
-rw-r--r--www/firefox-i18n/distinfo352
-rw-r--r--www/firefox/Makefile8
-rw-r--r--www/firefox/distinfo4
-rw-r--r--www/firefox/files/patch-bug101388210
-rw-r--r--www/firefox/files/patch-bug1073117542
-rw-r--r--www/firefox/files/patch-bug114341127
-rw-r--r--www/firefox/files/patch-bug77971314
-rw-r--r--www/firefox/files/patch-bug8269858
-rw-r--r--www/firefox/files/patch-system-openh26425
-rw-r--r--www/libxul/Makefile30
-rw-r--r--www/libxul/distinfo4
-rw-r--r--www/libxul/files/patch-bug101367588
-rw-r--r--www/libxul/files/patch-bug101388210
-rw-r--r--www/libxul/files/patch-bug101554795
-rw-r--r--www/libxul/files/patch-bug1021171193
-rw-r--r--www/libxul/files/patch-bug1021761129
-rw-r--r--www/libxul/files/patch-bug102682820
-rw-r--r--www/libxul/files/patch-bug104126826
-rw-r--r--www/libxul/files/patch-bug104138112
-rw-r--r--www/libxul/files/patch-bug104179548
-rw-r--r--www/libxul/files/patch-bug104622426
-rw-r--r--www/libxul/files/patch-bug106173650
-rw-r--r--www/libxul/files/patch-bug106737778
-rw-r--r--www/libxul/files/patch-bug1073117877
-rw-r--r--www/libxul/files/patch-bug107370918
-rw-r--r--www/libxul/files/patch-bug108219926
-rw-r--r--www/libxul/files/patch-bug110385842
-rw-r--r--www/libxul/files/patch-bug112557914
-rw-r--r--www/libxul/files/patch-bug112558011
-rw-r--r--www/libxul/files/patch-bug113015523
-rw-r--r--www/libxul/files/patch-bug1138845134
-rw-r--r--www/libxul/files/patch-bug114368646
-rw-r--r--www/libxul/files/patch-bug114464333
-rw-r--r--www/libxul/files/patch-bug70217934
-rw-r--r--www/libxul/files/patch-bug77971324
-rw-r--r--www/libxul/files/patch-bug82698578
-rw-r--r--www/libxul/files/patch-bug847568204
-rw-r--r--www/libxul/files/patch-bug858919391
-rw-r--r--www/libxul/files/patch-bug961264266
-rw-r--r--www/libxul/files/patch-ijg-libjpeg56
-rw-r--r--www/libxul/files/patch-media-libstagefright-foundation-AString.cpp16
-rw-r--r--www/libxul/files/patch-system-openh264239
-rw-r--r--www/libxul/files/patch-z-bug517422508
-rw-r--r--www/linux-firefox/Makefile4
-rw-r--r--www/linux-firefox/distinfo4
-rw-r--r--www/linux-firefox/pkg-plist1
84 files changed, 4195 insertions, 4667 deletions
diff --git a/www/firefox-esr-i18n/Makefile b/www/firefox-esr-i18n/Makefile
index 45cc530f9a59..b000683987fa 100644
--- a/www/firefox-esr-i18n/Makefile
+++ b/www/firefox-esr-i18n/Makefile
@@ -2,10 +2,10 @@
# $FreeBSD$
PORTNAME= firefox
-PORTVERSION= 31.7.0
+PORTVERSION= 38.1.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}esr/linux-i686/xpi \
- MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build2/linux-i686/xpi
+ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}esr-candidates/build1/linux-i686/xpi
PKGNAMEPREFIX=
PKGNAMESUFFIX= -esr-i18n
DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/}
diff --git a/www/firefox-esr-i18n/Makefile.lang b/www/firefox-esr-i18n/Makefile.lang
index c8852f07af38..aa4c89c91326 100644
--- a/www/firefox-esr-i18n/Makefile.lang
+++ b/www/firefox-esr-i18n/Makefile.lang
@@ -1,13 +1,13 @@
# Created by: Koji Yokota <yokota@res.otaru-uc.ac.jp>
# $FreeBSD$
-FIREFOX_I18N_ALL_= ach af an ar as ast be bg bn-BD bn-IN br bs ca cs \
- csb cy da de el en-GB en-US en-ZA eo es-AR es-CL \
+FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cs \
+ cy da de dsb el en-GB en-US en-ZA eo es-AR es-CL \
es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl \
gu-IN he hi-IN hr hsb hu hy-AM id is it ja kk km \
- kn ko ku lij lt lv mai mk ml mr ms nb-NO nl nn-NO \
+ kn ko lij lt lv mai mk ml mr ms nb-NO nl nn-NO \
or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son sq \
- sr sv-SE ta te th tr uk vi xh zh-CN zh-TW zu
+ sr sv-SE ta te th tr uk vi xh zh-CN zh-TW
.if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package)
FIREFOX_I18N= ${FIREFOX_I18N_ALL_}
@@ -30,6 +30,9 @@ FIREFOX_I18N+= as
.if ${PORT_OPTIONS:MLANG_AST}
FIREFOX_I18N+= ast
.endif
+.if ${PORT_OPTIONS:MLANG_AZ}
+FIREFOX_I18N+= az
+.endif
.if ${PORT_OPTIONS:MLANG_BE}
FIREFOX_I18N+= be
.endif
@@ -66,6 +69,9 @@ FIREFOX_I18N+= da
.if ${PORT_OPTIONS:MLANG_DE}
FIREFOX_I18N+= de
.endif
+.if ${PORT_OPTIONS:MLANG_DSB}
+FIREFOX_I18N+= dsb
+.endif
.if ${PORT_OPTIONS:MLANG_EL}
FIREFOX_I18N+= el
.endif
diff --git a/www/firefox-esr-i18n/distinfo b/www/firefox-esr-i18n/distinfo
index a0e6882a9275..df191d776a29 100644
--- a/www/firefox-esr-i18n/distinfo
+++ b/www/firefox-esr-i18n/distinfo
@@ -1,178 +1,176 @@
-SHA256 (xpi/firefox-31.7.0/ach.xpi) = a46aab04cc4f8e7c310d18f25b281e618e318c3c42c664e0801fc8dfd7d7c448
-SIZE (xpi/firefox-31.7.0/ach.xpi) = 445326
-SHA256 (xpi/firefox-31.7.0/af.xpi) = 9b90171ca31d767403cf874b96895e49ba71114bcef4f0f48125ef8062bf1ad8
-SIZE (xpi/firefox-31.7.0/af.xpi) = 431089
-SHA256 (xpi/firefox-31.7.0/an.xpi) = 4a0ba3d16c1ea336297d19ec810b74427744ff49dd9eed790594e7e2948ff638
-SIZE (xpi/firefox-31.7.0/an.xpi) = 407151
-SHA256 (xpi/firefox-31.7.0/ar.xpi) = a2c08b2724a2582e432bc3442b650a30491efed3b434d790bfd03af66f1182fb
-SIZE (xpi/firefox-31.7.0/ar.xpi) = 459824
-SHA256 (xpi/firefox-31.7.0/as.xpi) = 837e0bbb261f288d765d64a5ba320cebb53d6b85fc64e4a5cb5866cec6d393dc
-SIZE (xpi/firefox-31.7.0/as.xpi) = 448568
-SHA256 (xpi/firefox-31.7.0/ast.xpi) = 53182a51b3b39f14af5742eb23a2d6392c8982e99baf2fd874ff5f592c536c72
-SIZE (xpi/firefox-31.7.0/ast.xpi) = 352340
-SHA256 (xpi/firefox-31.7.0/be.xpi) = a9fbbbe0f55e3a66b23f39a607caa86cc3a2d75618bf421049ce8a0fc989b0f1
-SIZE (xpi/firefox-31.7.0/be.xpi) = 378668
-SHA256 (xpi/firefox-31.7.0/bg.xpi) = a5b3ca6b806c7fd3abc2012a54d7a711dc4b5dc0e74feee7db64d4d12a9f090b
-SIZE (xpi/firefox-31.7.0/bg.xpi) = 438061
-SHA256 (xpi/firefox-31.7.0/bn-BD.xpi) = 35ec629d0252a452689e2081013d47ef472e8d690c6d400489adca943a816028
-SIZE (xpi/firefox-31.7.0/bn-BD.xpi) = 472626
-SHA256 (xpi/firefox-31.7.0/bn-IN.xpi) = 74e81096becea929294b831ca9ae5d27885873ce0c1fc55ac10bd3e7c898c67a
-SIZE (xpi/firefox-31.7.0/bn-IN.xpi) = 462593
-SHA256 (xpi/firefox-31.7.0/br.xpi) = 787d8460434e0404d3b41aec55874433a1b62393ceda146c12ca69e3e08de1e0
-SIZE (xpi/firefox-31.7.0/br.xpi) = 389704
-SHA256 (xpi/firefox-31.7.0/bs.xpi) = 55c147fb777304da501c93c5f9118eecf96a355b112bce2b7d1d481a7246718a
-SIZE (xpi/firefox-31.7.0/bs.xpi) = 429014
-SHA256 (xpi/firefox-31.7.0/ca.xpi) = 98442d2eca73b4e49a2316b1229c245e95d9e44c1548a2dd59967da9a2ca1d12
-SIZE (xpi/firefox-31.7.0/ca.xpi) = 403575
-SHA256 (xpi/firefox-31.7.0/cs.xpi) = d5a667efd1b3ae7f7f019c60d9783c2df7ccc31b26d192a0dd6135f1ddd53002
-SIZE (xpi/firefox-31.7.0/cs.xpi) = 390979
-SHA256 (xpi/firefox-31.7.0/csb.xpi) = 244cb21b264752c1c51d3b633822a409854e7805ebf3238d64505f9a9ea07de3
-SIZE (xpi/firefox-31.7.0/csb.xpi) = 383695
-SHA256 (xpi/firefox-31.7.0/cy.xpi) = 894d27928c7c8be1889a400d950e6cfd750612256d48523a16ab78cc3a62705a
-SIZE (xpi/firefox-31.7.0/cy.xpi) = 390727
-SHA256 (xpi/firefox-31.7.0/da.xpi) = 2c04601b1a1927d70cf08429d641f056b7cd9bc5a0b0b4af2cf41da39fbab056
-SIZE (xpi/firefox-31.7.0/da.xpi) = 397747
-SHA256 (xpi/firefox-31.7.0/de.xpi) = 0942a9e3108c73904248f5883031db8c9b1533ad7d1fb99b56278c10412252a5
-SIZE (xpi/firefox-31.7.0/de.xpi) = 395165
-SHA256 (xpi/firefox-31.7.0/el.xpi) = 9338bd6441506040fbf43dde73751010a897117850da56a7f74eafb49ecae868
-SIZE (xpi/firefox-31.7.0/el.xpi) = 442982
-SHA256 (xpi/firefox-31.7.0/en-GB.xpi) = 62a0eab5307fd1bf8edeb650f88e2b5583bc97d3ad09d055fcceded267f70e16
-SIZE (xpi/firefox-31.7.0/en-GB.xpi) = 390119
-SHA256 (xpi/firefox-31.7.0/en-US.xpi) = b465b5352d1598225a9d2bc84e54db540e5965618cc4cdaab88fe1c1ef2e8058
-SIZE (xpi/firefox-31.7.0/en-US.xpi) = 422788
-SHA256 (xpi/firefox-31.7.0/en-ZA.xpi) = 5402bbc92fb8b7953acf7ff9a2a4bb92d7113e94d92c782687825c303325a0d3
-SIZE (xpi/firefox-31.7.0/en-ZA.xpi) = 388527
-SHA256 (xpi/firefox-31.7.0/eo.xpi) = 37793b813547b052751b18cbd8413644d98753bef9cc9de9ce0c319b996300e3
-SIZE (xpi/firefox-31.7.0/eo.xpi) = 431831
-SHA256 (xpi/firefox-31.7.0/es-AR.xpi) = 6c5865f4d479449a0a9b825231c859df0d6a275c81afb39a6d8ecbc12b24a462
-SIZE (xpi/firefox-31.7.0/es-AR.xpi) = 399937
-SHA256 (xpi/firefox-31.7.0/es-CL.xpi) = 936f49302395973a8fccf344ab121e5d3caf6a9a4713ea28fa74b2e3475d2172
-SIZE (xpi/firefox-31.7.0/es-CL.xpi) = 342808
-SHA256 (xpi/firefox-31.7.0/es-ES.xpi) = 16930441fccf01cb56f74e847820374203ee10e3621e0bc727b60faf647b1ea7
-SIZE (xpi/firefox-31.7.0/es-ES.xpi) = 335880
-SHA256 (xpi/firefox-31.7.0/es-MX.xpi) = 19e1c14ea4b2964b2c482be44444864be37e7afbb25347b2c61b6a73aea46205
-SIZE (xpi/firefox-31.7.0/es-MX.xpi) = 402672
-SHA256 (xpi/firefox-31.7.0/et.xpi) = 7b3aabcd02422a86e990cf3d122fa833493275d433cab826b062ad0c389ddbae
-SIZE (xpi/firefox-31.7.0/et.xpi) = 390360
-SHA256 (xpi/firefox-31.7.0/eu.xpi) = 08da23a46160d70f1f267176c367ab42e7d9309a3694aab127f02092846d4032
-SIZE (xpi/firefox-31.7.0/eu.xpi) = 412999
-SHA256 (xpi/firefox-31.7.0/fa.xpi) = 9f320fb90856afeda61ed6ef231c7f08a5f286cc1a3e1ccb648e00bc83b9ca0d
-SIZE (xpi/firefox-31.7.0/fa.xpi) = 460857
-SHA256 (xpi/firefox-31.7.0/ff.xpi) = 186e83c5d270013ece23c060db9b688d86d5fa411e1e43180147964344a4fa08
-SIZE (xpi/firefox-31.7.0/ff.xpi) = 400143
-SHA256 (xpi/firefox-31.7.0/fi.xpi) = a735827f8b51d44d2dbf06dc60694e5c495120d2cd30a06a141f265c6e2a5559
-SIZE (xpi/firefox-31.7.0/fi.xpi) = 392740
-SHA256 (xpi/firefox-31.7.0/fr.xpi) = c87f0a11b32b0d9232aebed8c8db11653b7a1f6e4cff349cd55605c984b5e353
-SIZE (xpi/firefox-31.7.0/fr.xpi) = 406462
-SHA256 (xpi/firefox-31.7.0/fy-NL.xpi) = 06f65abe1aad68faf55dffbe60b8cec4c6dbf9ed49a8e0b6e829bc35cdae668f
-SIZE (xpi/firefox-31.7.0/fy-NL.xpi) = 401930
-SHA256 (xpi/firefox-31.7.0/ga-IE.xpi) = c2d7f32ffa5f7a4eb0f9fd793c5ce2bd4dae08f7fba57b0bfc9f9a5c276db1b9
-SIZE (xpi/firefox-31.7.0/ga-IE.xpi) = 410077
-SHA256 (xpi/firefox-31.7.0/gd.xpi) = d6507eaefcf693abdf44df8ab8ff31af1453064543e41324fd535f77792fa3b8
-SIZE (xpi/firefox-31.7.0/gd.xpi) = 403014
-SHA256 (xpi/firefox-31.7.0/gl.xpi) = 7492fa58143cb2e31377165e0f62a31ba5a6d6b93f44dbea7a196c1fe6c35117
-SIZE (xpi/firefox-31.7.0/gl.xpi) = 390599
-SHA256 (xpi/firefox-31.7.0/gu-IN.xpi) = 09b503b94a67ee8b7f031375f6e3247544e6e58f47b1077931f6022117f12eca
-SIZE (xpi/firefox-31.7.0/gu-IN.xpi) = 423504
-SHA256 (xpi/firefox-31.7.0/he.xpi) = fc459d3c9b7c4989b78f9f9ef3f56b7a3130b04ddcf4af199e63f531ff3369ef
-SIZE (xpi/firefox-31.7.0/he.xpi) = 427629
-SHA256 (xpi/firefox-31.7.0/hi-IN.xpi) = 1fe8ffc2781376657a2190ce67c3cb0f8d661a941ff14d2a11360feb898963da
-SIZE (xpi/firefox-31.7.0/hi-IN.xpi) = 441402
-SHA256 (xpi/firefox-31.7.0/hr.xpi) = 7233b1981e2b4333c4d92fc1b354e29abd426b5c2cad8157ceae9836e874f0e7
-SIZE (xpi/firefox-31.7.0/hr.xpi) = 424371
-SHA256 (xpi/firefox-31.7.0/hsb.xpi) = 78f17b9699469f7aa33adb332e6a86865d78a4bb41e61aaaf9632de06d6c93fc
-SIZE (xpi/firefox-31.7.0/hsb.xpi) = 413076
-SHA256 (xpi/firefox-31.7.0/hu.xpi) = 98d7f3c03c8c0e25ac904edc9b7744adaf1b7001b887c496cf731b66e4da30f4
-SIZE (xpi/firefox-31.7.0/hu.xpi) = 398644
-SHA256 (xpi/firefox-31.7.0/hy-AM.xpi) = be183e444d88a9d84c7f7d9f8f39805036f90cbd33cdb1157cf0a620dc510d5f
-SIZE (xpi/firefox-31.7.0/hy-AM.xpi) = 478743
-SHA256 (xpi/firefox-31.7.0/id.xpi) = c059b5bca06f2073dc68f7068f99b6d3d52291f07bdb2a5527c62d64f787d40e
-SIZE (xpi/firefox-31.7.0/id.xpi) = 378301
-SHA256 (xpi/firefox-31.7.0/is.xpi) = ff432dd9cda5aa362806be2b93a44ae343860e56ad871c12b808eab3ce95e4b2
-SIZE (xpi/firefox-31.7.0/is.xpi) = 427327
-SHA256 (xpi/firefox-31.7.0/it.xpi) = 63b7031dc95cb7938f796f8273aca84959dc4c1b06457186d39d2314437135d9
-SIZE (xpi/firefox-31.7.0/it.xpi) = 330905
-SHA256 (xpi/firefox-31.7.0/ja.xpi) = c6e5d30f36831608bbb001a30dd20d36357a8f812208caef3b3672f15d03869d
-SIZE (xpi/firefox-31.7.0/ja.xpi) = 421664
-SHA256 (xpi/firefox-31.7.0/kk.xpi) = 4134807f0682c4e3b531050d6152c95a3cd207bbf6266ae668e40af5a404b44d
-SIZE (xpi/firefox-31.7.0/kk.xpi) = 439116
-SHA256 (xpi/firefox-31.7.0/km.xpi) = 425742f17f805c4fb8bcffe2f634687a4430e9a0a97af14e3e66d81930349d86
-SIZE (xpi/firefox-31.7.0/km.xpi) = 506476
-SHA256 (xpi/firefox-31.7.0/kn.xpi) = 21dde9bc0907a3f3d6eccb62209512c4e923e9578f99d3cfa38b9fc0f5749166
-SIZE (xpi/firefox-31.7.0/kn.xpi) = 458891
-SHA256 (xpi/firefox-31.7.0/ko.xpi) = d1815717ff979a4f4d752860d7584afddc8598c5870e9827866b0ab5ef8ec6c5
-SIZE (xpi/firefox-31.7.0/ko.xpi) = 402815
-SHA256 (xpi/firefox-31.7.0/ku.xpi) = fbae0d3034d27f604dadc2f1f9d47faa919429951ef0fddc3acb27cc54c761fb
-SIZE (xpi/firefox-31.7.0/ku.xpi) = 420260
-SHA256 (xpi/firefox-31.7.0/lij.xpi) = 64b6cbc1afed4d403e1dc138adb00ee5a0d9f510aeb0203ee5a55ae0c12a54df
-SIZE (xpi/firefox-31.7.0/lij.xpi) = 385864
-SHA256 (xpi/firefox-31.7.0/lt.xpi) = e427e278896af7049be1a2ba0921fe040a0f28ea6db88b9776e61c9aa1f7c1f2
-SIZE (xpi/firefox-31.7.0/lt.xpi) = 435431
-SHA256 (xpi/firefox-31.7.0/lv.xpi) = 808561e54dcbcfc2c5d4340b8981c26c32ffaaff41981c24987985b3e5237836
-SIZE (xpi/firefox-31.7.0/lv.xpi) = 398576
-SHA256 (xpi/firefox-31.7.0/mai.xpi) = c0028b9cb674795770485754d827e33d326c7b088faa07ae0533eedb4c4b0a98
-SIZE (xpi/firefox-31.7.0/mai.xpi) = 444885
-SHA256 (xpi/firefox-31.7.0/mk.xpi) = 9e2b8adbe49312fff3f4f4f466253c55ff475d77ee621ed1ec90d3f6db132f21
-SIZE (xpi/firefox-31.7.0/mk.xpi) = 475483
-SHA256 (xpi/firefox-31.7.0/ml.xpi) = 7c84d8089f4a191597ba04043f1ed06b495afa8493db7b9069b3b8e8431f1019
-SIZE (xpi/firefox-31.7.0/ml.xpi) = 466254
-SHA256 (xpi/firefox-31.7.0/mr.xpi) = 8fde662d065db623971f5ca3259edbda653b269a85089d7da61b59a2ac1028bf
-SIZE (xpi/firefox-31.7.0/mr.xpi) = 451292
-SHA256 (xpi/firefox-31.7.0/ms.xpi) = cf842b609e2c0196e38ef566cb6cd440d9d98aa406ee19e73ba9be199b3e5137
-SIZE (xpi/firefox-31.7.0/ms.xpi) = 436230
-SHA256 (xpi/firefox-31.7.0/nb-NO.xpi) = 614e4819e7542455d53f5fa1d477e7bbaca34f9a60f381f310f469f8eb7a6585
-SIZE (xpi/firefox-31.7.0/nb-NO.xpi) = 392006
-SHA256 (xpi/firefox-31.7.0/nl.xpi) = 25fa21b6f5b9226bc98b564c6ea4597def332bf45287245b946406901176c85c
-SIZE (xpi/firefox-31.7.0/nl.xpi) = 390885
-SHA256 (xpi/firefox-31.7.0/nn-NO.xpi) = 1da9ed892eef144fc24f36d8d357e909bebf1add25f39bc18d9eb3b3752676e6
-SIZE (xpi/firefox-31.7.0/nn-NO.xpi) = 386281
-SHA256 (xpi/firefox-31.7.0/or.xpi) = c6609d74a5ad5c26f47557431f284ec22218f6482a1da09e6a82a5be81ff6746
-SIZE (xpi/firefox-31.7.0/or.xpi) = 464749
-SHA256 (xpi/firefox-31.7.0/pa-IN.xpi) = b190e43dc00acb59269a64ef34871d326296b526b3ebc4efbdf6a7d2d9cd35ae
-SIZE (xpi/firefox-31.7.0/pa-IN.xpi) = 439326
-SHA256 (xpi/firefox-31.7.0/pl.xpi) = 594ad2d1bc2ad972da2e1b6a04cff08d31664293c766bfaeac5339efc85b57e3
-SIZE (xpi/firefox-31.7.0/pl.xpi) = 374747
-SHA256 (xpi/firefox-31.7.0/pt-BR.xpi) = b5713f2dfe91eee8eaa6628592165eaa134bfa0f61b741bfe31fd9b321d309b9
-SIZE (xpi/firefox-31.7.0/pt-BR.xpi) = 405565
-SHA256 (xpi/firefox-31.7.0/pt-PT.xpi) = abb6214eca83b79f83b042597d222e06474acc6252d389d5ba2c651a9e5ce03a
-SIZE (xpi/firefox-31.7.0/pt-PT.xpi) = 386344
-SHA256 (xpi/firefox-31.7.0/rm.xpi) = 14812365a8427dacc135cbedd51aa9f05cdeae79ae534e733c90156871bdce44
-SIZE (xpi/firefox-31.7.0/rm.xpi) = 399285
-SHA256 (xpi/firefox-31.7.0/ro.xpi) = 37101737210648a141e39bdd45b6a09d6bd1c7c91921fce6e18e06c960786a75
-SIZE (xpi/firefox-31.7.0/ro.xpi) = 439388
-SHA256 (xpi/firefox-31.7.0/ru.xpi) = f26cd9d88445e805ad9001e64c6fc090e4e2a9a38a6a1a3a4db16d4d2f86af85
-SIZE (xpi/firefox-31.7.0/ru.xpi) = 367898
-SHA256 (xpi/firefox-31.7.0/si.xpi) = 9b65abd0a84e28cd02fec01f57601dec37e62ee79364ee1e9afcf56c051e872f
-SIZE (xpi/firefox-31.7.0/si.xpi) = 463224
-SHA256 (xpi/firefox-31.7.0/sk.xpi) = 79af6394fb242a2381c22d530661c8e4aa49f79072547270d1666623cd234376
-SIZE (xpi/firefox-31.7.0/sk.xpi) = 413802
-SHA256 (xpi/firefox-31.7.0/sl.xpi) = 5adbabcf3f9df45ece596da1866551abd308f93a14d4c2d2872cb93b3d00a365
-SIZE (xpi/firefox-31.7.0/sl.xpi) = 387134
-SHA256 (xpi/firefox-31.7.0/son.xpi) = f6fe46997da6c63a2622df2ae8fcd162df761cc13f02f12e19a5827bd5b3d5d9
-SIZE (xpi/firefox-31.7.0/son.xpi) = 395144
-SHA256 (xpi/firefox-31.7.0/sq.xpi) = 4b11e3c0f1b709193df7ac617f09502224fa90891c64456bf3b09f64081f7366
-SIZE (xpi/firefox-31.7.0/sq.xpi) = 431136
-SHA256 (xpi/firefox-31.7.0/sr.xpi) = 7cec3903511642d0f18d681f9c8db88d7a515a0d4bc41c3b47b639f900888394
-SIZE (xpi/firefox-31.7.0/sr.xpi) = 425903
-SHA256 (xpi/firefox-31.7.0/sv-SE.xpi) = e90efaef588b44c2aa8ed7243930fe749c8804ac29f27505cdb4f16578c47ece
-SIZE (xpi/firefox-31.7.0/sv-SE.xpi) = 399026
-SHA256 (xpi/firefox-31.7.0/ta.xpi) = 1eb3703416367ca99e10779fc9cdbfd2b521c33d841cdc5e37a780c8995ffeab
-SIZE (xpi/firefox-31.7.0/ta.xpi) = 447685
-SHA256 (xpi/firefox-31.7.0/te.xpi) = 6e8b188de46947a0021db9bea2f559d00c2fed6c6fdd359d3c6ed43ae9e672c8
-SIZE (xpi/firefox-31.7.0/te.xpi) = 462591
-SHA256 (xpi/firefox-31.7.0/th.xpi) = c5f507998c17c120af9659fabdb0573e807784fb482c86d559cd3001cfb584c4
-SIZE (xpi/firefox-31.7.0/th.xpi) = 478126
-SHA256 (xpi/firefox-31.7.0/tr.xpi) = 846f9802aacfb0d6a873a9cfbc7854fce33b2f59311f1c85d91d7a929bab2255
-SIZE (xpi/firefox-31.7.0/tr.xpi) = 417370
-SHA256 (xpi/firefox-31.7.0/uk.xpi) = 5e988550f6722b30362f1e69675e18259e8bb20439747ce37a4fde9fd429a5d8
-SIZE (xpi/firefox-31.7.0/uk.xpi) = 428002
-SHA256 (xpi/firefox-31.7.0/vi.xpi) = 3e6aa2a99aef4613d6dcc5b912ebe2a017d2f7cae3494429484441a0d501b319
-SIZE (xpi/firefox-31.7.0/vi.xpi) = 413375
-SHA256 (xpi/firefox-31.7.0/xh.xpi) = fe7fbc65ab6d572a7bb9c3133ddd6ea1772171ac3e1ce43528c07ebc78a2f8b5
-SIZE (xpi/firefox-31.7.0/xh.xpi) = 397875
-SHA256 (xpi/firefox-31.7.0/zh-CN.xpi) = 20aa5d265b0d275c63fceea28257e100ce788598b4e18e448083ce02d50f8dff
-SIZE (xpi/firefox-31.7.0/zh-CN.xpi) = 419630
-SHA256 (xpi/firefox-31.7.0/zh-TW.xpi) = 5752bf1f8f6618bfd039cfd378d43a29d37270e4deb26474ee86b4cd4275e993
-SIZE (xpi/firefox-31.7.0/zh-TW.xpi) = 412520
-SHA256 (xpi/firefox-31.7.0/zu.xpi) = 012bb28adb83356fc8367556f8cc397c2d0fbcd552ff56c5e146cb48653c822b
-SIZE (xpi/firefox-31.7.0/zu.xpi) = 433216
+SHA256 (xpi/firefox-38.1.0/ach.xpi) = d8d0439db26597a0d869e5467bb849bc77c1786b0c2df3a16cf91801523cbebb
+SIZE (xpi/firefox-38.1.0/ach.xpi) = 477969
+SHA256 (xpi/firefox-38.1.0/af.xpi) = 1a4c6835db2ba384767f6ceddf021a30b61c1d29f17577cf2f7330e3358c9ff7
+SIZE (xpi/firefox-38.1.0/af.xpi) = 483325
+SHA256 (xpi/firefox-38.1.0/an.xpi) = dbecee3b6d22ff49680d412a338a8e94d6f759c62110cb55ed6aa21f11537a0a
+SIZE (xpi/firefox-38.1.0/an.xpi) = 461422
+SHA256 (xpi/firefox-38.1.0/ar.xpi) = 47eef2d1bfa6e5594cd8835bddca7bfd5019aac1553b54b05c1c749fad659dda
+SIZE (xpi/firefox-38.1.0/ar.xpi) = 516495
+SHA256 (xpi/firefox-38.1.0/as.xpi) = 1628e61d5bb7e7c4cbdff288ca2e6d8623578ccf12797e63b27864e68be21c1c
+SIZE (xpi/firefox-38.1.0/as.xpi) = 509574
+SHA256 (xpi/firefox-38.1.0/ast.xpi) = bfe8b26cffb80f7cc0824dc08546f31d54da190bf8fd342b12204ecdc85977e7
+SIZE (xpi/firefox-38.1.0/ast.xpi) = 397202
+SHA256 (xpi/firefox-38.1.0/az.xpi) = a29a1f0362aa53c7ea42e500478d2218e6e3e356c7305b249c65f078218fb272
+SIZE (xpi/firefox-38.1.0/az.xpi) = 489152
+SHA256 (xpi/firefox-38.1.0/be.xpi) = ff7583b04c4e57128f0165ecd94488bca77cf4a84bf0284f313f9aca2c885faf
+SIZE (xpi/firefox-38.1.0/be.xpi) = 441056
+SHA256 (xpi/firefox-38.1.0/bg.xpi) = 5096d0dc1ff5e547fb07906e0a3183b3117a6453311fb28afa991db5c34c95d1
+SIZE (xpi/firefox-38.1.0/bg.xpi) = 487819
+SHA256 (xpi/firefox-38.1.0/bn-BD.xpi) = 2ca791e8a573f76f60698b3b634cf9c0768eee657ba6e99f65c0f8979e152216
+SIZE (xpi/firefox-38.1.0/bn-BD.xpi) = 528688
+SHA256 (xpi/firefox-38.1.0/bn-IN.xpi) = b664469d76782fe549f582b79cb88d8350d439038ee1eaa7a7388fd5b3cb1eff
+SIZE (xpi/firefox-38.1.0/bn-IN.xpi) = 527927
+SHA256 (xpi/firefox-38.1.0/br.xpi) = 57ee679bb3532a0e9289827d4fb421598683ea8168656889edddcff1e21bb6b9
+SIZE (xpi/firefox-38.1.0/br.xpi) = 441962
+SHA256 (xpi/firefox-38.1.0/bs.xpi) = 92b42a21fdd59775f65f13316e875f93f7478695aa70ab02016f3145c79a3aea
+SIZE (xpi/firefox-38.1.0/bs.xpi) = 485305
+SHA256 (xpi/firefox-38.1.0/ca.xpi) = 53c42f1501f90ddd9259ca255baae8a7ea6a1055fa88acc0cd1de9d8a20db2b9
+SIZE (xpi/firefox-38.1.0/ca.xpi) = 458091
+SHA256 (xpi/firefox-38.1.0/cs.xpi) = a23e9ea357bd08c5029d31d6865516efc5ff3aa8504dae8dc316af5efc859fa9
+SIZE (xpi/firefox-38.1.0/cs.xpi) = 446725
+SHA256 (xpi/firefox-38.1.0/cy.xpi) = 464c9b57d03fbaff4a6241dfa492623a338018a609e2289defeba196ab454b95
+SIZE (xpi/firefox-38.1.0/cy.xpi) = 444384
+SHA256 (xpi/firefox-38.1.0/da.xpi) = 2b339c9a73067076f4ca8b28d9d8543064be5616dd4db50cf0bf1ed0e4cea3c2
+SIZE (xpi/firefox-38.1.0/da.xpi) = 450762
+SHA256 (xpi/firefox-38.1.0/de.xpi) = bb0aca584ae740caa4cd2adeab2de09670c38ec8dd0241512318201b3ed6d761
+SIZE (xpi/firefox-38.1.0/de.xpi) = 451628
+SHA256 (xpi/firefox-38.1.0/dsb.xpi) = 921ff1abd17da602be91dcd9ddf7f0655bb97231840ac72f964252bacfdcfcf9
+SIZE (xpi/firefox-38.1.0/dsb.xpi) = 470923
+SHA256 (xpi/firefox-38.1.0/el.xpi) = 96e8b36888ccadce8d576208a76ab6522c3148c501bc35549e25bce545c11a01
+SIZE (xpi/firefox-38.1.0/el.xpi) = 498369
+SHA256 (xpi/firefox-38.1.0/en-GB.xpi) = 3f80590f27a73d5cb50b56b7658c38f4378f0bb1b84d3da4c2e0cd9a7b8f4120
+SIZE (xpi/firefox-38.1.0/en-GB.xpi) = 437845
+SHA256 (xpi/firefox-38.1.0/en-US.xpi) = 36fe4e6fc9b319f65b81ab0f9f8eda2b185ff175b6d4999799489365154142e6
+SIZE (xpi/firefox-38.1.0/en-US.xpi) = 469718
+SHA256 (xpi/firefox-38.1.0/en-ZA.xpi) = 6d3a854cffcb9a6ff37a6ae4b2b9a91da3fd16914ea4cd70f69ad3039b960ceb
+SIZE (xpi/firefox-38.1.0/en-ZA.xpi) = 439925
+SHA256 (xpi/firefox-38.1.0/eo.xpi) = ac159c4a6b9dfb3b838dd757350cdfa92d7322c772e46bf79fbfce8d7e03b433
+SIZE (xpi/firefox-38.1.0/eo.xpi) = 488369
+SHA256 (xpi/firefox-38.1.0/es-AR.xpi) = 7410081864264d57267ffb4795aac402a72d30e369e4aa6ec2df6501c77ead8f
+SIZE (xpi/firefox-38.1.0/es-AR.xpi) = 453982
+SHA256 (xpi/firefox-38.1.0/es-CL.xpi) = f5979bcfc6576cd6796a555617966c4f7c42d90bba52dc281824d09f7ca2ba01
+SIZE (xpi/firefox-38.1.0/es-CL.xpi) = 384678
+SHA256 (xpi/firefox-38.1.0/es-ES.xpi) = 87e28415879608af646ab9a531108c74b18a8b94f7a472439841ed7b79240537
+SIZE (xpi/firefox-38.1.0/es-ES.xpi) = 374072
+SHA256 (xpi/firefox-38.1.0/es-MX.xpi) = aa8e47ac74821a900eac826459e9fefb0eb8c0de77ee1b5246a55e23a369f4b8
+SIZE (xpi/firefox-38.1.0/es-MX.xpi) = 457049
+SHA256 (xpi/firefox-38.1.0/et.xpi) = 76e0e0480e62cc5187e6cf97845d61d835a16b883582cd8a27ef2b6e74c3d69c
+SIZE (xpi/firefox-38.1.0/et.xpi) = 443228
+SHA256 (xpi/firefox-38.1.0/eu.xpi) = ecac2d452d2a4e4165970a1aed2a0ae6bff8212c0d6dc0687e5782758d5d72d9
+SIZE (xpi/firefox-38.1.0/eu.xpi) = 466554
+SHA256 (xpi/firefox-38.1.0/fa.xpi) = 90bbd088bff3a41dfc752f695f0184e68d5621ffdaa17536a989067bc2f4f7de
+SIZE (xpi/firefox-38.1.0/fa.xpi) = 518281
+SHA256 (xpi/firefox-38.1.0/ff.xpi) = cb840656488d9044aa2042805f95458720fbcbb19e6fbd8beca197a9101817d1
+SIZE (xpi/firefox-38.1.0/ff.xpi) = 454586
+SHA256 (xpi/firefox-38.1.0/fi.xpi) = 6d1a14149420b2d851673c58308cff8b5218a4e9835b60d5a5274d2edf367635
+SIZE (xpi/firefox-38.1.0/fi.xpi) = 444852
+SHA256 (xpi/firefox-38.1.0/fr.xpi) = 8e416c8c930e09adb020ede16d420fd94a4e0e169d3a40213e33db94dee44d6b
+SIZE (xpi/firefox-38.1.0/fr.xpi) = 461401
+SHA256 (xpi/firefox-38.1.0/fy-NL.xpi) = f6f06bac70b7edd570510deed989e3184d08a42a7e49a7e7960ed1f6a705e0a0
+SIZE (xpi/firefox-38.1.0/fy-NL.xpi) = 455537
+SHA256 (xpi/firefox-38.1.0/ga-IE.xpi) = 39ae1a583ac7be57fb3631e98734008823fe735ac679a173efe8729ef66e295c
+SIZE (xpi/firefox-38.1.0/ga-IE.xpi) = 469623
+SHA256 (xpi/firefox-38.1.0/gd.xpi) = c38b1152552c91e0531eb4536b2727bc72c1c9397679d8b42003dbf7dab1be7d
+SIZE (xpi/firefox-38.1.0/gd.xpi) = 454616
+SHA256 (xpi/firefox-38.1.0/gl.xpi) = d8ad198ce7afef708e7974384cac5b646efa58c1b914c0e58a0c19569276ac9d
+SIZE (xpi/firefox-38.1.0/gl.xpi) = 448924
+SHA256 (xpi/firefox-38.1.0/gu-IN.xpi) = dc03e9021e27b9c5d41be2c9e569da7165176f2139872fc5694500edd71e7102
+SIZE (xpi/firefox-38.1.0/gu-IN.xpi) = 477980
+SHA256 (xpi/firefox-38.1.0/he.xpi) = 4d67723435a899817745f8141c7671fd8c0ed899db6b9fc040a7cf77a997113a
+SIZE (xpi/firefox-38.1.0/he.xpi) = 486784
+SHA256 (xpi/firefox-38.1.0/hi-IN.xpi) = 3404e4a912049d583508619d92fb37663629cddc09f91f2c6f6e007fcbd1a281
+SIZE (xpi/firefox-38.1.0/hi-IN.xpi) = 508166
+SHA256 (xpi/firefox-38.1.0/hr.xpi) = 98487a75721efbb651b30d94fc00edac8962ca4aa0f356c714aae1761ed1650b
+SIZE (xpi/firefox-38.1.0/hr.xpi) = 478271
+SHA256 (xpi/firefox-38.1.0/hsb.xpi) = b36779a40c56839cb9b6a78eca688704dcc5c202921493726640805580b7bf6e
+SIZE (xpi/firefox-38.1.0/hsb.xpi) = 468719
+SHA256 (xpi/firefox-38.1.0/hu.xpi) = 93ace7ddee6b87c2a3cdfeedce151ced7354d3504d0d7e1aee8f2368094cabc0
+SIZE (xpi/firefox-38.1.0/hu.xpi) = 453554
+SHA256 (xpi/firefox-38.1.0/hy-AM.xpi) = 8c6a5918df7c1bdd36cdf9a5fe44400c53e2e8998dc910ad71ff29178299d63b
+SIZE (xpi/firefox-38.1.0/hy-AM.xpi) = 534264
+SHA256 (xpi/firefox-38.1.0/id.xpi) = f37f250ba26bdf7cdb1f3d47a6bf7f7feb90ebd82da1a55ff4f11932af1da1e5
+SIZE (xpi/firefox-38.1.0/id.xpi) = 431488
+SHA256 (xpi/firefox-38.1.0/is.xpi) = fa4eca6ec46e110683178b282f4bd3cc6b47b315e4ddbd34cd99b8c00676b297
+SIZE (xpi/firefox-38.1.0/is.xpi) = 485128
+SHA256 (xpi/firefox-38.1.0/it.xpi) = 42948d7424e1554ce71e34d34c63b1bd3b94bf067845b8826576591aeeba3bb9
+SIZE (xpi/firefox-38.1.0/it.xpi) = 368409
+SHA256 (xpi/firefox-38.1.0/ja.xpi) = 456e16ba61c0bb904cbfb3d05b184d6fc9d7cac7f346c7b38d9fe230af96e96d
+SIZE (xpi/firefox-38.1.0/ja.xpi) = 479113
+SHA256 (xpi/firefox-38.1.0/kk.xpi) = 0c10adeca506e653e464285b1feaf049d79dbcb45e1820dfe6cbb13198422c5a
+SIZE (xpi/firefox-38.1.0/kk.xpi) = 503567
+SHA256 (xpi/firefox-38.1.0/km.xpi) = b94aff6d6093856b1726b1aa8d6ffa0ad2db3a897ea9ad6a5589fbffac6580a9
+SIZE (xpi/firefox-38.1.0/km.xpi) = 565673
+SHA256 (xpi/firefox-38.1.0/kn.xpi) = 72d4b3da5a920975904ba4f17b55826685ec71ffc4e952a946142210e2ae95eb
+SIZE (xpi/firefox-38.1.0/kn.xpi) = 533464
+SHA256 (xpi/firefox-38.1.0/ko.xpi) = 4caa6c2e11b1c0d9184cc688fcb5f9534ab74a1d87c2d7624a83c0fc1ea4699d
+SIZE (xpi/firefox-38.1.0/ko.xpi) = 460853
+SHA256 (xpi/firefox-38.1.0/lij.xpi) = 75c704a30c99d4bd6b0a99945709dd88c86b8859ffe448ed59b0b9af51c76c7b
+SIZE (xpi/firefox-38.1.0/lij.xpi) = 444237
+SHA256 (xpi/firefox-38.1.0/lt.xpi) = 0a4c45516ba00ab84b2744690ff4e70ef624825238fa4c4cd6345db68be158e5
+SIZE (xpi/firefox-38.1.0/lt.xpi) = 486451
+SHA256 (xpi/firefox-38.1.0/lv.xpi) = 3f88098b580f7591a9a435ba93f06e73f6adb312d9a19ad4b756768b93bd3b1b
+SIZE (xpi/firefox-38.1.0/lv.xpi) = 467197
+SHA256 (xpi/firefox-38.1.0/mai.xpi) = 27473c24c7f66a9ed31ccda36d04bf98cc81f699bdfe4c5958de0abd9c5c6824
+SIZE (xpi/firefox-38.1.0/mai.xpi) = 514665
+SHA256 (xpi/firefox-38.1.0/mk.xpi) = 6e2d2ac3b859eedc499041e2961cc1bf4b92316dd59526f14ff694fb4c2067b4
+SIZE (xpi/firefox-38.1.0/mk.xpi) = 529204
+SHA256 (xpi/firefox-38.1.0/ml.xpi) = f4d488f0207854450945af1230b70db6773bd94bad6804fdba4215bba921734f
+SIZE (xpi/firefox-38.1.0/ml.xpi) = 528919
+SHA256 (xpi/firefox-38.1.0/mr.xpi) = dd9caa414cc4ba76ec4161b246612cb008585b5662b4c911d1ca7058e86a54a5
+SIZE (xpi/firefox-38.1.0/mr.xpi) = 505961
+SHA256 (xpi/firefox-38.1.0/ms.xpi) = 00c98155bc447385340e2c1b08ecfac7f4405b8b843c0603ab39a65b037f49e3
+SIZE (xpi/firefox-38.1.0/ms.xpi) = 489872
+SHA256 (xpi/firefox-38.1.0/nb-NO.xpi) = 9b17997524d839b610e60b42cae25c512ea93f3fedad473e723a91289f839ca5
+SIZE (xpi/firefox-38.1.0/nb-NO.xpi) = 444176
+SHA256 (xpi/firefox-38.1.0/nl.xpi) = 8d1532bbbb2a843babfd5b46909f0af1457fc8c9c14145b693ad0ff91b3e90ef
+SIZE (xpi/firefox-38.1.0/nl.xpi) = 443993
+SHA256 (xpi/firefox-38.1.0/nn-NO.xpi) = 732a5be1501711e2aed2a5073dd6a3726095b8d3940765e4b368c74c2ad32c59
+SIZE (xpi/firefox-38.1.0/nn-NO.xpi) = 438451
+SHA256 (xpi/firefox-38.1.0/or.xpi) = 1297c29d98f2b1952d05f50417ba383c28505dd316ab8fd7179be6f6805ba892
+SIZE (xpi/firefox-38.1.0/or.xpi) = 527048
+SHA256 (xpi/firefox-38.1.0/pa-IN.xpi) = d3ee939b7914194a87f5ea3b24e569c3c9486ca3d0b997e8303c2c9c42b3bf76
+SIZE (xpi/firefox-38.1.0/pa-IN.xpi) = 493722
+SHA256 (xpi/firefox-38.1.0/pl.xpi) = 8b88410da0376d2c14ccc3e3c0eb8a0031d60d048aebba176100854a17bc16b4
+SIZE (xpi/firefox-38.1.0/pl.xpi) = 406566
+SHA256 (xpi/firefox-38.1.0/pt-BR.xpi) = f1b89e40d210497e3a7ef45b7acbf42c9d0b0b7990efd35d94f04fd0247dfc53
+SIZE (xpi/firefox-38.1.0/pt-BR.xpi) = 459812
+SHA256 (xpi/firefox-38.1.0/pt-PT.xpi) = 23e456c3550b31d7596956dd9739ef317ae742137419d426a4326f277e1c0206
+SIZE (xpi/firefox-38.1.0/pt-PT.xpi) = 439974
+SHA256 (xpi/firefox-38.1.0/rm.xpi) = f305e7a119c349ec71d4000517f315867f8174147dbbf6178a715e27e9aca29b
+SIZE (xpi/firefox-38.1.0/rm.xpi) = 446286
+SHA256 (xpi/firefox-38.1.0/ro.xpi) = cd38ec29af9fbbc27ad61330d2804d57f999c98cebccf6333aa58d55c4e1db87
+SIZE (xpi/firefox-38.1.0/ro.xpi) = 494078
+SHA256 (xpi/firefox-38.1.0/ru.xpi) = b2c612a33a7e7126343644b3931749cd9de1421f8bb1aad283087f0ede074c31
+SIZE (xpi/firefox-38.1.0/ru.xpi) = 414418
+SHA256 (xpi/firefox-38.1.0/si.xpi) = 02de4fd1753d33e6b0c1d81dce2beec09dd01c1bff2c0e82864ec0700971bb68
+SIZE (xpi/firefox-38.1.0/si.xpi) = 537392
+SHA256 (xpi/firefox-38.1.0/sk.xpi) = 2fb1510e200824e455dee3492c8de7c0dd6bc4925307c5069d454fdc9513ca9b
+SIZE (xpi/firefox-38.1.0/sk.xpi) = 469436
+SHA256 (xpi/firefox-38.1.0/sl.xpi) = d5f5ae891561d7ea891f9eaeee4a417e76159f8ee2b6402580d71e155de5bf23
+SIZE (xpi/firefox-38.1.0/sl.xpi) = 441593
+SHA256 (xpi/firefox-38.1.0/son.xpi) = 9fa1b158b3ca08335ca6c9bcf70fd76e6b4baab6cfdb667475188aaacc2f2193
+SIZE (xpi/firefox-38.1.0/son.xpi) = 449266
+SHA256 (xpi/firefox-38.1.0/sq.xpi) = 94d82f9dcf552f6e696e14d17ea9da388de8f5231e72bed6a0eef8b7426f6097
+SIZE (xpi/firefox-38.1.0/sq.xpi) = 486075
+SHA256 (xpi/firefox-38.1.0/sr.xpi) = f63271245f4919db7b86e9740a5128f50db750fe747e98343b1641291e7be1d3
+SIZE (xpi/firefox-38.1.0/sr.xpi) = 479418
+SHA256 (xpi/firefox-38.1.0/sv-SE.xpi) = 724e6ed7ad69ea5a612185851d1bcc39eb46e9cdaaee9032609637516b2fb4fc
+SIZE (xpi/firefox-38.1.0/sv-SE.xpi) = 452631
+SHA256 (xpi/firefox-38.1.0/ta.xpi) = f0fc43a9cfde17cb71a3c1adef1ec4ae53201d0246528216f7c62fa93d5ca621
+SIZE (xpi/firefox-38.1.0/ta.xpi) = 506605
+SHA256 (xpi/firefox-38.1.0/te.xpi) = 47024b3c034826560b19281b5346d3c79b46b86c308d15c98acc5898545c47a5
+SIZE (xpi/firefox-38.1.0/te.xpi) = 526252
+SHA256 (xpi/firefox-38.1.0/th.xpi) = f99a2d738ee379bde70fc472626611365054eb25165c613824180d8ee7d53454
+SIZE (xpi/firefox-38.1.0/th.xpi) = 534269
+SHA256 (xpi/firefox-38.1.0/tr.xpi) = c7eac37f05b3a4afc073e85c9a065f343cc40b0cdba17fb8dd7219bc175c7723
+SIZE (xpi/firefox-38.1.0/tr.xpi) = 481075
+SHA256 (xpi/firefox-38.1.0/uk.xpi) = 6c68750ac5d4dab03b6c93d7694d8a8c430e95d9ad103a86c2477089fd678d99
+SIZE (xpi/firefox-38.1.0/uk.xpi) = 493312
+SHA256 (xpi/firefox-38.1.0/vi.xpi) = 874f22b8c19d7fe417496c6916b150c7d51a7021e5e73809a542799238c194fd
+SIZE (xpi/firefox-38.1.0/vi.xpi) = 467503
+SHA256 (xpi/firefox-38.1.0/xh.xpi) = 53aca9e35a77091be291a3d2246ada0110d71e0451018c20d9a8c1f40dd2b2ae
+SIZE (xpi/firefox-38.1.0/xh.xpi) = 450241
+SHA256 (xpi/firefox-38.1.0/zh-CN.xpi) = 0dbc3ac200290bdb5514c2076f5a1459442b4e3ee235ef29216384f2ad06d61f
+SIZE (xpi/firefox-38.1.0/zh-CN.xpi) = 488276
+SHA256 (xpi/firefox-38.1.0/zh-TW.xpi) = e3ec89fe112a80d424e25934d21de61efbde5e6680ce2aece0c37a04d96be91c
+SIZE (xpi/firefox-38.1.0/zh-TW.xpi) = 467843
diff --git a/www/firefox-esr/Makefile b/www/firefox-esr/Makefile
index 2968564da825..124a545d1d54 100644
--- a/www/firefox-esr/Makefile
+++ b/www/firefox-esr/Makefile
@@ -2,42 +2,41 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 31.7.0
+DISTVERSION= 38.1.0
DISTVERSIONSUFFIX=esr.source
-PORTREVISION= 1
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}esr/source \
- MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build2/source
+ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}esr-candidates/build1/source
PKGNAMESUFFIX= -esr
MAINTAINER= gecko@FreeBSD.org
COMMENT= Web browser based on the browser portion of Mozilla
-BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \
- nss>=3.16.2.3:${PORTSDIR}/security/nss \
+BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \
+ nss>=3.19.2:${PORTSDIR}/security/nss \
libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \
cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \
soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \
harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \
graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \
- libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \
- opus>=1.1:${PORTSDIR}/audio/opus \
+ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \
libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \
- sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \
+ sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \
${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \
autoconf-2.13:${PORTSDIR}/devel/autoconf213 \
zip:${PORTSDIR}/archivers/zip \
unzip:${PORTSDIR}/archivers/unzip
+# opus>=1.1:${PORTSDIR}/audio/opus \
LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l
USE_GECKO= gecko
CPE_PRODUCT= ${PORTNAME}_esr
-CONFLICTS= firefox-3[02-9].* firefox-2[0-35-9].*
+CONFLICTS_INSTALL= firefox-4[0-4].* firefox-3[02-9].* firefox-2[0-35-9].*
MOZ_PKGCONFIG_FILES= # empty
-USE_MOZILLA= # empty
+USE_MOZILLA= -opus
MOZILLA_NAME= Firefox
USE_QT5= # empty
@@ -52,10 +51,15 @@ MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
--enable-application=browser \
--enable-official-branding
+OPTIONS_DEFAULT= GTK2
+
+OPTIONS_SINGLE+= TOOLKIT
+OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3
+
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
-WRKSRC:= ${WRKDIR}/mozilla-esr31
+WRKSRC:= ${WRKDIR}/mozilla-esr38
.if ${PORT_OPTIONS:MALSA}
RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib
@@ -65,6 +69,10 @@ RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib
RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav
.endif
+.if ${PORT_OPTIONS:MGTK3}
+BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30
+.endif
+
post-extract:
@${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \
-e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \
diff --git a/www/firefox-esr/distinfo b/www/firefox-esr/distinfo
index cdd6c531f1e3..d7587fa34ae9 100644
--- a/www/firefox-esr/distinfo
+++ b/www/firefox-esr/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-31.7.0esr.source.tar.bz2) = 8523c10ecb318f278a251d90e2161c07c7431796d4387fe9091dfa4e633474b6
-SIZE (firefox-31.7.0esr.source.tar.bz2) = 147772244
+SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff
+SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775
diff --git a/www/firefox-esr/files/patch-bug1013675 b/www/firefox-esr/files/patch-bug1013675
deleted file mode 100644
index eac435acf3d0..000000000000
--- a/www/firefox-esr/files/patch-bug1013675
+++ /dev/null
@@ -1,88 +0,0 @@
-diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
-index 13a286f..293bd73 100644
---- xpcom/base/nsDebugImpl.cpp
-+++ xpcom/base/nsDebugImpl.cpp
-@@ -45,12 +45,43 @@
- #endif
- #endif
-
--#if defined(XP_MACOSX)
-+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
-+ || defined(__NetBSD__) || defined(__OpenBSD__)
- #include <stdbool.h>
- #include <unistd.h>
-+#include <sys/param.h>
- #include <sys/sysctl.h>
- #endif
-
-+#if defined(__OpenBSD__)
-+#include <sys/proc.h>
-+#endif
-+
-+#if defined(__DragonFly__) || defined(__FreeBSD__)
-+#include <sys/user.h>
-+#endif
-+
-+#if defined(__NetBSD__)
-+#undef KERN_PROC
-+#define KERN_PROC KERN_PROC2
-+#define KINFO_PROC struct kinfo_proc2
-+#else
-+#define KINFO_PROC struct kinfo_proc
-+#endif
-+
-+#if defined(XP_MACOSX)
-+#define KP_FLAGS kp_proc.p_flag
-+#elif defined(__DragonFly__)
-+#define KP_FLAGS kp_flags
-+#elif defined(__FreeBSD__)
-+#define KP_FLAGS ki_flag
-+#elif defined(__OpenBSD__) && !defined(_P_TRACED)
-+#define KP_FLAGS p_psflags
-+#define P_TRACED PS_TRACED
-+#else
-+#define KP_FLAGS p_flag
-+#endif
-+
- #include "mozilla/mozalloc_abort.h"
-
- static void
-@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
-
- #if defined(XP_WIN)
- *aResult = ::IsDebuggerPresent();
--#elif defined(XP_MACOSX)
-+#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
-+ || defined(__NetBSD__) || defined(__OpenBSD__)
- // Specify the info we're looking for
-- int mib[4];
-- mib[0] = CTL_KERN;
-- mib[1] = KERN_PROC;
-- mib[2] = KERN_PROC_PID;
-- mib[3] = getpid();
-+ int mib[] = {
-+ CTL_KERN,
-+ KERN_PROC,
-+ KERN_PROC_PID,
-+ getpid(),
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
-+ sizeof(KINFO_PROC),
-+ 1,
-+#endif
-+ };
- size_t mibSize = sizeof(mib) / sizeof(int);
-
-- struct kinfo_proc info;
-+ KINFO_PROC info;
- size_t infoSize = sizeof(info);
- memset(&info, 0, infoSize);
-
-@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
- return NS_OK;
- }
-
-- if (info.kp_proc.p_flag & P_TRACED) {
-+ if (info.KP_FLAGS & P_TRACED) {
- *aResult = true;
- }
- #endif
diff --git a/www/firefox-esr/files/patch-bug1013882 b/www/firefox-esr/files/patch-bug1013882
index 86dc379fe50f..b3177989a39e 100644
--- a/www/firefox-esr/files/patch-bug1013882
+++ b/www/firefox-esr/files/patch-bug1013882
@@ -30,14 +30,14 @@ diff --git browser/installer/package-manifest.in browser/installer/package-manif
index b509fd4..195345c 100644
--- browser/installer/package-manifest.in
+++ browser/installer/package-manifest.in
-@@ -583,7 +583,7 @@
- @BINPATH@/components/MozKeyboard.js
- @BINPATH@/components/InputMethod.manifest
+@@ -608,7 +608,7 @@
+ @RESPATH@/components/MozKeyboard.js
+ @RESPATH@/components/InputMethod.manifest
-#ifdef MOZ_DEBUG
+#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
- @BINPATH@/components/TestInterfaceJS.js
- @BINPATH@/components/TestInterfaceJS.manifest
+ @RESPATH@/components/TestInterfaceJS.js
+ @RESPATH@/components/TestInterfaceJS.manifest
#endif
diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in
index 96dceab..3528ad6 100644
diff --git a/www/firefox-esr/files/patch-bug1015547 b/www/firefox-esr/files/patch-bug1015547
deleted file mode 100644
index ecb488c36e7f..000000000000
--- a/www/firefox-esr/files/patch-bug1015547
+++ /dev/null
@@ -1,95 +0,0 @@
-diff --git configure.in configure.in
-index 7bed45f..053de17 100644
---- configure.in
-+++ configure.in
-@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
- dnl ========================================================
- AC_PROG_GCC_TRADITIONAL
- AC_FUNC_MEMCMP
--AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
-+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
-
- dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
- AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
-diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
-index 0687344..ca3ff8b 100644
---- xpcom/base/nsUUIDGenerator.cpp
-+++ xpcom/base/nsUUIDGenerator.cpp
-@@ -15,6 +15,10 @@
-
- #include "nsUUIDGenerator.h"
-
-+#ifdef ANDROID
-+extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
-+#endif
-+
- using namespace mozilla;
-
- NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
-@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
- // We're a service, so we're guaranteed that Init() is not going
- // to be reentered while we're inside Init().
-
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- /* initialize random number generator using NSPR random noise */
- unsigned int seed;
-
-@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
- return NS_ERROR_FAILURE;
- #endif
-
--#endif /* non XP_WIN and non XP_MACOSX */
-+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
-
- return NS_OK;
- }
-@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
- * back to it; instead, we use the value returned when we called
- * initstate, since older glibc's have broken setstate() return values
- */
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- setstate(mState);
- #endif
-
-+#ifdef HAVE_ARC4RANDOM_BUF
-+ arc4random_buf(id, sizeof(nsID));
-+#else /* HAVE_ARC4RANDOM_BUF */
- size_t bytesLeft = sizeof(nsID);
- while (bytesLeft > 0) {
--#ifdef ANDROID
-+#ifdef HAVE_ARC4RANDOM
- long rval = arc4random();
- const size_t mRBytes = 4;
- #else
-@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
-
- bytesLeft -= toWrite;
- }
-+#endif /* HAVE_ARC4RANDOM_BUF */
-
- /* Put in the version */
- id->m2 &= 0x0fff;
-@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
- id->m3[0] &= 0x3f;
- id->m3[0] |= 0x80;
-
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- /* Restore the previous RNG state */
- setstate(mSavedState);
- #endif
-diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
-index 6a24212..68ed6f2 100644
---- xpcom/base/nsUUIDGenerator.h
-+++ xpcom/base/nsUUIDGenerator.h
-@@ -27,7 +27,7 @@ private:
- protected:
-
- mozilla::Mutex mLock;
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- char mState[128];
- char *mSavedState;
- uint8_t mRBytes;
diff --git a/www/firefox-esr/files/patch-bug1021171 b/www/firefox-esr/files/patch-bug1021171
deleted file mode 100644
index 9e663a6779e0..000000000000
--- a/www/firefox-esr/files/patch-bug1021171
+++ /dev/null
@@ -1,193 +0,0 @@
-commit dd19f59
-Author: Trevor Saunders <trev.saunders@gmail.com>
-Date: Fri Jun 6 15:31:30 2014 -0400
-
- bug 1021171 - don't return nulllptr in functions returning bool r=bz,waldo
----
- js/src/builtin/TypedObject.cpp | 32 ++++++++++++++++----------------
- js/src/frontend/BytecodeCompiler.cpp | 2 +-
- js/xpconnect/wrappers/XrayWrapper.cpp | 2 +-
- netwerk/ipc/NeckoParent.cpp | 2 +-
- 4 files changed, 19 insertions(+), 19 deletions(-)
-
-diff --git js/src/builtin/TypedObject.cpp js/src/builtin/TypedObject.cpp
-index 9e284b9..7a0a7fc 100644
---- js/src/builtin/TypedObject.cpp
-+++ js/src/builtin/TypedObject.cpp
-@@ -710,12 +710,12 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp)
- contents.append(")");
- RootedAtom stringRepr(cx, contents.finishAtom());
- if (!stringRepr)
-- return nullptr;
-+ return false;
-
- // Extract ArrayType.prototype
- RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal));
- if (!arrayTypePrototype)
-- return nullptr;
-+ return false;
-
- // Create the instance of ArrayType
- Rooted<UnsizedArrayTypeDescr *> obj(cx);
-@@ -728,7 +728,7 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().length,
- UndefinedHandleValue, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- args.rval().setObject(*obj);
- return true;
-@@ -762,7 +762,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!size.isValid()) {
- JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
- JSMSG_TYPEDOBJECT_TOO_BIG);
-- return nullptr;
-+ return false;
- }
-
- // Construct a canonical string `new ArrayType(<elementType>).dimension(N)`:
-@@ -775,7 +775,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- contents.append(")");
- RootedAtom stringRepr(cx, contents.finishAtom());
- if (!stringRepr)
-- return nullptr;
-+ return false;
-
- // Create the sized type object.
- Rooted<SizedArrayTypeDescr*> obj(cx);
-@@ -793,7 +793,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().length,
- lengthVal, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // Add `unsized` property, which is a link from the sized
- // array to the unsized array.
-@@ -801,7 +801,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().unsized,
- unsizedTypeDescrValue, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- args.rval().setObject(*obj);
- return true;
-@@ -1253,7 +1253,7 @@ DefineSimpleTypeDescr(JSContext *cx,
- Rooted<TypedProto*> proto(cx);
- proto = NewObjectWithProto<TypedProto>(cx, objProto, nullptr, TenuredObject);
- if (!proto)
-- return nullptr;
-+ return false;
- proto->initTypeDescrSlot(*descr);
- descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto));
-
-@@ -1358,14 +1358,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \
- if (!DefineSimpleTypeDescr<ScalarTypeDescr>(cx, global, module, constant_, \
- cx->names().name_)) \
-- return nullptr;
-+ return false;
- JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE)
- #undef BINARYDATA_SCALAR_DEFINE
-
- #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \
- if (!DefineSimpleTypeDescr<ReferenceTypeDescr>(cx, global, module, constant_, \
- cx->names().name_)) \
-- return nullptr;
-+ return false;
- JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE)
- #undef BINARYDATA_REFERENCE_DEFINE
-
-@@ -1375,14 +1375,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- arrayType = DefineMetaTypeDescr<ArrayMetaTypeDescr>(
- cx, global, module, TypedObjectModuleObject::ArrayTypePrototype);
- if (!arrayType)
-- return nullptr;
-+ return false;
-
- RootedValue arrayTypeValue(cx, ObjectValue(*arrayType));
- if (!JSObject::defineProperty(cx, module, cx->names().ArrayType,
- arrayTypeValue,
- nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // StructType.
-
-@@ -1390,14 +1390,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- structType = DefineMetaTypeDescr<StructMetaTypeDescr>(
- cx, global, module, TypedObjectModuleObject::StructTypePrototype);
- if (!structType)
-- return nullptr;
-+ return false;
-
- RootedValue structTypeValue(cx, ObjectValue(*structType));
- if (!JSObject::defineProperty(cx, module, cx->names().StructType,
- structTypeValue,
- nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // Everything is setup, install module on the global object:
- RootedValue moduleValue(cx, ObjectValue(*module));
-@@ -1407,7 +1407,7 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- nullptr, nullptr,
- 0))
- {
-- return nullptr;
-+ return false;
- }
-
- return module;
-@@ -2449,7 +2449,7 @@ TypedObject::constructUnsized(JSContext *cx, unsigned int argc, Value *vp)
- if (length < 0) {
- JS_ReportErrorNumber(cx, js_GetErrorMessage,
- nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS);
-- return nullptr;
-+ return false;
- }
- Rooted<TypedObject*> obj(cx, createZeroed(cx, callee, length));
- if (!obj)
-diff --git js/src/frontend/BytecodeCompiler.cpp js/src/frontend/BytecodeCompiler.cpp
-index 5aacc23..aed45ca 100644
---- js/src/frontend/BytecodeCompiler.cpp
-+++ js/src/frontend/BytecodeCompiler.cpp
-@@ -544,7 +544,7 @@ CompileFunctionBody(JSContext *cx, MutableHandleFunction fun, const ReadOnlyComp
-
- RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options));
- if (!sourceObject)
-- return nullptr;
-+ return false;
- ScriptSource* ss = sourceObject->source();
-
- SourceCompressionTask sct(cx);
-diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp
-index fd6458b..ab48770 100644
---- js/xpconnect/wrappers/XrayWrapper.cpp
-+++ js/xpconnect/wrappers/XrayWrapper.cpp
-@@ -363,7 +363,7 @@ public:
- {
- JSAutoCompartment ac(cx, target);
- if (!JS_GetClassPrototype(cx, key, protop))
-- return nullptr;
-+ return false;
- }
- return JS_WrapObject(cx, protop);
- }
-diff --git netwerk/ipc/NeckoParent.cpp netwerk/ipc/NeckoParent.cpp
-index 96dbb1d..ef3293b 100644
---- netwerk/ipc/NeckoParent.cpp
-+++ netwerk/ipc/NeckoParent.cpp
-@@ -365,7 +365,7 @@ NeckoParent::RecvPRtspChannelConstructor(
- RtspChannelParent* p = static_cast<RtspChannelParent*>(aActor);
- return p->Init(aConnectArgs);
- #else
-- return nullptr;
-+ return false;
- #endif
- }
-
diff --git a/www/firefox-esr/files/patch-bug1021761 b/www/firefox-esr/files/patch-bug1021761
index 1d0cde369c34..253327b733a7 100644
--- a/www/firefox-esr/files/patch-bug1021761
+++ b/www/firefox-esr/files/patch-bug1021761
@@ -218,12 +218,12 @@ index a962553..1f780f4 100644
assert(p);
pthread_mutex_unlock(&stm->mutex);
-@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
- return ERROR;
- }
- if (got > 0) {
-- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
-+ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+@@ -327,10 +374,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ b[i] *= stm->volume;
+ }
+ }
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
if (wrote == -EPIPE) {
- snd_pcm_recover(stm->pcm, wrote, 1);
- wrote = snd_pcm_writei(stm->pcm, p, got);
@@ -533,42 +533,51 @@ index a962553..1f780f4 100644
assert((nfds_t) r == stm->nfds);
r = pthread_cond_init(&stm->cond, NULL);
-@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm)
+ pthread_mutex_lock(&stm->mutex);
+ if (stm->pcm) {
+ if (stm->state == DRAINING) {
+- snd_pcm_drain(stm->pcm);
++ WRAP(snd_pcm_drain)(stm->pcm);
+ }
+ alsa_locked_pcm_close(stm->pcm);
+ stm->pcm = NULL;
+@@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
-+ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
- if (rv < 0) {
+- r = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (r < 0) {
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
-+ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
- if (rv < 0) {
+- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (r < 0) {
return CUBEB_ERROR;
}
-@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+@@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
/* get a pcm, disabling resampling, so we get a rate the
* hardware/dmix/pulse/etc. supports. */
-- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
-+ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
- if (rv < 0) {
+- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (r < 0) {
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_any(pcm, hw_params);
-+ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
- if (rv < 0) {
+- r = snd_pcm_hw_params_any(pcm, hw_params);
++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (r < 0) {
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
-+ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
- if (rv >= 0) {
+- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (r >= 0) {
/* There is a default rate: use it. */
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
@@ -578,9 +587,9 @@ index a962553..1f780f4 100644
/* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
*rate = 44100;
-- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
-+ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
- if (rv < 0) {
+- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (r < 0) {
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
return CUBEB_ERROR;
@@ -634,7 +643,7 @@ new file mode 100644
index 0000000..5e38e27
--- /dev/null
+++ media/libcubeb/src/cubeb_oss.c
-@@ -0,0 +1,397 @@
+@@ -0,0 +1,402 @@
+/*
+ * Copyright © 2014 Mozilla Foundation
+ *
@@ -1030,7 +1039,12 @@ index 0000000..5e38e27
+ .stream_start = oss_stream_start,
+ .stream_stop = oss_stream_stop,
+ .stream_get_position = oss_stream_get_position,
-+ .stream_get_latency = oss_stream_get_latency
++ .stream_get_latency = oss_stream_get_latency,
++ .stream_set_volume = oss_stream_set_volume,
++ .stream_set_panning = oss_stream_set_panning,
++ .stream_get_current_device = NULL,
++ .stream_device_destroy = NULL,
++ .stream_register_device_changed_callback = NULL
+};
diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
index 8b7a0dd..31212ce 100644
@@ -1056,36 +1070,33 @@ index 8b7a0dd..31212ce 100644
+CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index 991f03f..3d99eb5 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -26,9 +26,9 @@ ifdef JS_SHARED_LIBRARY
- LIBS += $(MOZ_JS_LIBS)
- endif
-
--ifdef MOZ_ALSA
-+ifdef MOZ_OSS
- LIBS += \
-- $(MOZ_ALSA_LIBS) \
-+ $(MOZ_OSS_LIBS) \
- $(NULL)
- endif
-
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -112,8 +112,8 @@ if CONFIG['JS_SHARED_LIBRARY']:
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['REALTIME_LIBS']
+
+-if CONFIG['MOZ_ALSA']:
+- OS_LIBS += CONFIG['MOZ_ALSA_LIBS']
++if CONFIG['MOZ_OSS']:
++ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
+ if CONFIG['MOZ_NATIVE_JPEG']:
+ OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index e191f13..4fb268a 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
- endif
- endif
-
--ifdef MOZ_ALSA
--EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
--endif
-+ifdef MOZ_OSS
-+EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
-+endif
-
- ifdef HAVE_CLOCK_MONOTONIC
- EXTRA_DSO_LDOPTS += $(REALTIME_LIBS)
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ if not CONFIG['MOZ_TREE_PIXMAN']:
+ OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS']
+
+-if CONFIG['MOZ_ALSA']:
+- OS_LIBS += CONFIG['MOZ_ALSA_LIBS']
++if CONFIG['MOZ_OSS']:
++ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
+ if CONFIG['HAVE_CLOCK_MONOTONIC']:
+ OS_LIBS += CONFIG['REALTIME_LIBS']
diff --git a/www/firefox-esr/files/patch-bug1026828 b/www/firefox-esr/files/patch-bug1026828
deleted file mode 100644
index 69e79f5ac560..000000000000
--- a/www/firefox-esr/files/patch-bug1026828
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git storage/src/moz.build storage/src/moz.build
-index 4cd2551..5c40536 100644
---- storage/src/moz.build
-+++ storage/src/moz.build
-@@ -50,11 +50,14 @@ FINAL_LIBRARY = 'storagecomps'
- # (such as NSS) might trigger an initialization of sqlite and allocation
- # of memory using the default allocator, prior to the storage service
- # registering its allocator, causing memory management failures (bug 938730).
-+# However, this is not an issue if both the jemalloc allocator and the default
-+# allocator are the same thing.
- #
- # Note: On Windows our sqlite build assumes we use jemalloc. If you disable
- # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef
- # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in.
--if CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_NATIVE_SQLITE']:
-+if CONFIG['MOZ_MEMORY'] and (not CONFIG['MOZ_NATIVE_SQLITE']
-+ or CONFIG['MOZ_NATIVE_JEMALLOC']):
- if CONFIG['OS_TARGET'] != 'Android':
- DEFINES['MOZ_STORAGE_MEMORY'] = True
-
diff --git a/www/firefox-esr/files/patch-bug1041268 b/www/firefox-esr/files/patch-bug1041268
new file mode 100644
index 000000000000..d4ab1a91395e
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1041268
@@ -0,0 +1,26 @@
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+index 97f69d3..77a50b3 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() {
+ return Create(DesktopCaptureOptions::CreateDefault());
+ }
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ ScreenCapturer* ScreenCapturer::CreateWithXDamage(
+ bool use_update_notifications) {
+ DesktopCaptureOptions options;
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+index a8d40a7..177a6c1 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer {
+ static ScreenCapturer* Create(const DesktopCaptureOptions& options);
+ static ScreenCapturer* Create();
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ // Creates platform-specific capturer and instructs it whether it should use
+ // X DAMAGE support.
+ static ScreenCapturer* CreateWithXDamage(bool use_x_damage);
diff --git a/www/firefox-esr/files/patch-bug1041381 b/www/firefox-esr/files/patch-bug1041381
deleted file mode 100644
index ef90b7b00c3f..000000000000
--- a/www/firefox-esr/files/patch-bug1041381
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git config/rules.mk config/rules.mk
-index 1dee8c3..4d67eda 100644
---- config/rules.mk
-+++ config/rules.mk
-@@ -822,6 +822,7 @@ endif
- ifdef DTRACE_PROBE_OBJ
- EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
- OBJS += $(DTRACE_PROBE_OBJ)
-+EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ)
- endif
-
- $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
diff --git a/www/firefox-esr/files/patch-bug1041795 b/www/firefox-esr/files/patch-bug1041795
deleted file mode 100644
index 3e92884412fb..000000000000
--- a/www/firefox-esr/files/patch-bug1041795
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git config/rules.mk config/rules.mk
-index 4d67eda..783942f 100644
---- config/rules.mk
-+++ config/rules.mk
-@@ -858,7 +858,7 @@ ifdef DTRACE_PROBE_OBJ
- ifndef DTRACE_LIB_DEPENDENT
- NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS))
- $(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS)
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
- endif
- endif
- endif
-@@ -876,7 +876,7 @@ ifndef INCREMENTAL_LINKER
- endif
- ifdef DTRACE_LIB_DEPENDENT
- ifndef XP_MACOSX
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
- endif
- $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
- @$(RM) $(DTRACE_PROBE_OBJ)
-diff --git js/src/Makefile.in js/src/Makefile.in
-index 28ca5e8..96793d7 100644
---- js/src/Makefile.in
-+++ js/src/Makefile.in
-@@ -342,7 +342,7 @@ endif
-
- ifdef HAVE_DTRACE
- $(CURDIR)/javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
-- dtrace -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
-+ dtrace -x nolibs -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
- sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
- -e '/const/!s/char \*/const char */g' \
- javascript-trace.h.in > javascript-trace.h
-diff --git probes/Makefile.in probes/Makefile.in
-index 6d18f34..deec83f 100644
---- probes/Makefile.in
-+++ probes/Makefile.in
-@@ -7,7 +7,7 @@ export:: $(DIST)/include/mozilla-trace.h
-
- # Replace _DTRACE_VERSION with INCLUDE_MOZILLA_DTRACE
- $(DIST)/include/mozilla-trace.h: mozilla-trace.d Makefile
-- dtrace -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp
-+ dtrace -x nolibs -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp
- sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
- mozilla-trace.h.tmp > $(DIST)/include/mozilla-trace.h
- rm mozilla-trace.h.tmp
diff --git a/www/firefox-esr/files/patch-bug1046224 b/www/firefox-esr/files/patch-bug1046224
deleted file mode 100644
index 50d268f8fabe..000000000000
--- a/www/firefox-esr/files/patch-bug1046224
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git configure.in configure.in
-index 1853029..559bd45 100644
---- configure.in
-+++ configure.in
-@@ -2651,7 +2651,7 @@ if test "$ac_cv_sockaddr_sa_len" = true ; then
- AC_DEFINE(HAVE_SA_LEN)
- fi
-
--AC_ARG_ENABLE(dtrace,
-+MOZ_ARG_ENABLE_BOOL(dtrace,
- [ --enable-dtrace build with dtrace support if available (default=no)],
- [enable_dtrace="yes"],)
- if test "x$enable_dtrace" = "xyes"; then
-diff --git js/src/configure.in js/src/configure.in
-index 134dfd3..682c1fb 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2153,7 +2153,7 @@ dnl Quota support
- MOZ_CHECK_HEADERS(sys/quota.h)
- MOZ_CHECK_HEADERS(linux/quota.h)
-
--AC_ARG_ENABLE(dtrace,
-+MOZ_ARG_ENABLE_BOOL(dtrace,
- [ --enable-dtrace build with dtrace support if available (default=no)],
- [enable_dtrace="yes"],)
- if test "x$enable_dtrace" = "xyes"; then
diff --git a/www/firefox-esr/files/patch-bug1061736 b/www/firefox-esr/files/patch-bug1061736
deleted file mode 100644
index 08f361b449bd..000000000000
--- a/www/firefox-esr/files/patch-bug1061736
+++ /dev/null
@@ -1,50 +0,0 @@
-commit a7add79
-Author: Gavin Sharp <gavin@gavinsharp.com>
-Date: Mon Oct 27 18:43:51 2014 -0700
-
- Bug 1061736: add DuckDuckGo as a search engine option in Firefox. r=dolske
----
- browser/locales/Makefile.in | 2 +-
- browser/locales/en-US/searchplugins/ddg.xml | 21 +++++++++++++++++++++
- 2 files changed, 22 insertions(+), 1 deletion(-)
-
-diff --git browser/locales/Makefile.in browser/locales/Makefile.in
-index eb3c30b..b172876 100644
---- browser/locales/Makefile.in
-+++ browser/locales/Makefile.in
-@@ -71,7 +71,7 @@ endif
- ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
- SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt))
- else
--SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt))
-+SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg
- endif
- SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
- SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES))
-diff --git browser/locales/en-US/searchplugins/ddg.xml browser/locales/en-US/searchplugins/ddg.xml
-new file mode 100644
-index 0000000..d68deb4
---- /dev/null
-+++ browser/locales/en-US/searchplugins/ddg.xml
-@@ -0,0 +1,21 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-+ <ShortName>DuckDuckGo</ShortName>
-+ <Description>Search DuckDuckGo</Description>
-+ <InputEncoding>UTF-8</InputEncoding>
-+ <Image height="16" width="16">data:image/icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11RgALs6oACbQ9wAj0v8AI9L/ACfQ9wAu0agANdUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzN4CNdL/oK/z//////////////////////+jsPv/BDXX/wAz0t4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyzvNSduD//////8jK/v+P+Lf/IbQL/17RPP+J3Y//wOKX//////9YeuX/ADLO8wAAAAAAAAAAAAAAAAAw091piOX/8/X9/1Fx5P9xhu//WOWZ/0W9Lv9Lwjn/J8BB/xyDAP9bdfL/9fP//2mI5v8AMNPdAAAAAAc610YRQ9f//////0Zr4P8AGdD/sb32////////////wrv//wAh1/8MPab/ACPc/05r4///////EkPX/wc610YANtWkrr/y/6S48P8AJ9L/AB3R/+/w/v///////////3+D7f8AQeL/AYTw/wFr5/8AMNb/p7Tv/6698v8AM9WkADLW//////8yXt//AC3V/wAw1/////////////z///8A0P7/AKb1/wWI7P8AuPf/AJ3w/zZW3P//////ADHV/wAx2P//////AzrZ/wAu1/84ZOL////////////e////AND//wC1+f8Atff/AZbv/wY62f8ELNf//////wAw1/8AMtn//////wAw2f8ALNn/kKrz////+//cwbH////////////R////Rcb8/wDO/f8A/P//AHzo//////8AMNj/ADXa//////8vXuL/ACna/4yq9///79T/jUkg/9i+r///////r2Q0/7Cozv8BKdr/AirY/zdZ4P//////ADTa/wI72tOuv/T/prr0/wAl2v+JqPb//7yW/+bUxv/9+/n////u//W+n/+Op/L/ADPd/wAv2v+ru/T/r7/0/wI72tMLQd1DEEjg//////9Cbef/ADng///////////////////////R3///AC3g/wAy3v9SeOn//////xFI4P8LQd1DAAAAAAM64PNmiuz/9/j//2mN7f/m7P3///////////9Cb+n/ACXd/wAt3v9rju3//////2iL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/P8J0vz/ELDz/xt85v8mSdj/JknY/yZJ2P8lStowJUjXYCZJ2P8nSdhwJErZryZK2f8oSNcgJUnajyZK2f8mStn/JkrZ/yZK2f8mStn/iJPA////////////////////////////0ff+/xjV/P8J0vz/Drn1/xiO6/8Yjuv/GI7r/xCw8/8Lyvr/CdL8/xmF6P8mStn/JkrZ/yVJ2o8oSNcgJkrZ/yRK2a8jStrfI0rZ3wAAAAAlSdq/Jkra/yZK2v8mStr/Jkra/yZK2v+xtsf///////////////////////////8o2Pz/CdL8/wvK+v8mStr/Jkra/yZK2v8mStr/Jkra/yZK2v8iW97/Jkra/yZK2v8mStr/JUnavwAAAAAjStnfI0ra3yZK2v8lSdq/AAAAACZH2O8mStr/Jkra/yZK2v8mStr/L1HY/9HR0f///////////////////////////yjY/P8J0vz/CdL8/xCw9P8QsPT/ELD0/xSf7/8ddeX/Jkra/yZK2v8mStr/Jkra/yZK2v8mR9jvAAAAACVJ2r8mStr/Jkvb/yVJ2r8AAAAAJkvb/yZL2/8mS9v/Jkvb/yZL2/9KZtL/4+Pj////////////////////////////4Pn//0fd/f8J0vz/CdL8/wnS/P8J0vz/CdL8/wnS/P8Lyvr/Fpfu/yJc3/8mS9v/Jkvb/yZL2/8AAAAAJUnavyZL2/8mS9z/JUncvwAAAAAmS9z/Jkvc/yZL3P8mS9z/Jkvc/26AyP/x8fH//////////////////////////////////////9H3/v/C9P7/o+7+/2fa+/8Oufb/CdL8/wnS/P8J0vz/CdL8/xiP7P8mS9z/Jkvc/wAAAAAlSdy/Jkvc/yZM3P8lTNy/AAAAACZJ2e8mTNz/Jkzc/yZM3P8mTNz/iJTB////////////qnth/5VaOf/x6eX///////////////////////Hp5f/x6eX/ydL2/yZM3P8kVN7/G37o/xKo8v8QsfT/HXbm/yZM3P8mSdnvAAAAACVM3L8mTNz/I0vc3yZJ2u8AAAAAJUzevyZM3f8mTN3/Jkzd/yZM3f+fqc3///////////+VWjn/v5yI/+re1///////////////////////jk8s/7iRe//J0vb/Jkzd/yZM3f8mTN3/Jkzd/yZM3f8mTN3/Jkzd/yVM3r8AAAAAI0vc3yNL3N8kTd2vJk3d/yhQ3yAlTd2PJk3d/yZN3f8mTd3/Jk3d/6St0v////////////Hp5f/q3tf///////////////////////////+xhm7/49PK/6Cx8P8mTd3/Jk3d/yZN3f8mTd3/Jk3d/yZN3f8mTd3/JU3djyhQ3yAmTd3/JE3drydN33AmTd7/J03fcCVK3zAmTd7/Jk3e/yZN3v8mTd7/pK7S///////Sp5r/////////////////////////////////////////////////T27k/yZN3v8mTd7/Jk3e/yZN3v8mTd7/Jk3e/yZN3v8lSt8wJ03fcCZN3v8nTd9wKFDfICZO3/8mTt3PAAAAACVN3r8mTt//Jk7f/yZO3/+EltX//////+fRyv/SqaD/59LO///////////////////////at63/vIBy/7Glxf8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8mTt//JU3evwAAAAAmTt3PJk7f/yhQ3yAAAAAAJE/dryZO3/8oUN9AKFDfQCZO3/8mTt//Jk7f/zhb2v/o6/T/////////////////////////////////////////////////XHrn/yZO3/8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8oUN9AKFDfQCZO3/8kT92vAAAAAAAAAAAoUN9AJk7g/yZO4M8AAAAAJk/hnyZO4P8mTuD/Jk7g/05v5v/k6fv//////////////////////////////////////3eR7P8mTuD/Jk7g/yZO4P8mTuD/Jk7g/yZO4P8mTuD/Jk/hnwAAAAAmTuDPJk7g/yhQ30AAAAAAAAAAAAAAAAAjT+GfJU/h/yVO4Y8gUN8QIk7gzyVP4f8lT+H/SWnW/0lp1v+bq+H/8fHx/////////////////6Cy8v9OcOb/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yJO4M8gUN8QJU7hjyVP4f8jT+GfAAAAAAAAAAAAAAAAAAAAACBQ3xAlTOHvJU/h/yVQ4mAgUN8QIk7hzyVP4f+ktOv///////////////////////H0/f9phur/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yVP4f8iTuHPIFDfECVQ4mAlT+H/JUzh7yBQ3xAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ3zAlUOLvJVDi/yVQ4mAgUN8QI1Din4mb2//J0/j/ydP4/6299P93ku3/M1vk/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/I1DinyBQ3xAlUOJgJVDi/yVQ4u8lUN8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAlUOLvJVDi/yVQ4o8AAAAAJFDjQCVQ4r8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDivyRQ40AAAAAAJVDijyVQ4v8lUOLvJVDkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAjUeTfJVHj/yNR5N8kUONAAAAAACVQ5DAmUuOAJVHivyNR5N8lUeP/JVHj/yNR5N8lUeK/JlLjgCVQ5DAAAAAAJFDjQCNR5N8lUeP/I1Hk3yVQ5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBQ3xAjUuSfJVHk/yVR5P8jUeTfJFLkcChQ5yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoUOcgJFLkcCNR5N8lUeT/JVHk/yNS5J8gUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUONAI1LknyVS5P8lUuT/JVLk/yVS5O8lUeS/JVHkvyVR5L8lUeS/JVLk7yVS5P8lUuT/JVLk/yRS468kUONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFDfECVS5GAjUuWfIlPlzyVS5f8lUuX/JVLl/yVS5f8iU+XPI1LlnyVS5GAgUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/ggBB/wgAEP4AAAB8AAAAPAAAADiAAAEYAAAAEQAAAIAAAAAAAAAAAgAAAEIAAABCAAAAQgAAAEIAAABCAAAAQAAAAAAAAAABAAAAiAAAABiAAAEcAAAAPAAAAD4AAAB/CAAQ/4IAQf/AfgP/8AAP//wAP/</Image>
-+ <Image height="26" width="65">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAYAAADovjFxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRTYyNzYzMzFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRTYyNzYzMjFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MDExNzQwNzIwNjgxMTg3MUZCQUIxMEI4RjU1NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3Jp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</Image>
-+ <Image height="52" width="130">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAYAAABGkOCVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4RTdBNDY4ODFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4RTdBNDY4NzFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTE3MzgzQ0I2QjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3Jp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</Image>
-+ <Url type="text/html" method="get" template="https://duckduckgo.com/">
-+ <Param name="q" value="{searchTerms}"/>
-+ <MozParam name="t" condition="purpose" purpose="contextmenu" value="ffcm"/>
-+ <MozParam name="t" condition="purpose" purpose="keyword" value="ffab"/>
-+ <MozParam name="t" condition="purpose" purpose="searchbar" value="ffsb"/>
-+ <MozParam name="t" condition="purpose" purpose="homepage" value="ffhp"/>
-+ <MozParam name="t" condition="purpose" purpose="newtab" value="ffnt"/>
-+ </Url>
-+ <Url type="application/x-suggestions+json" template="https://ac.duckduckgo.com/ac/">
-+ <Param name="q" value="{searchTerms}"/>
-+ <Param name="type" value="list"/>
-+ </Url>
-+</OpenSearchDescription>
diff --git a/www/firefox-esr/files/patch-bug1067377 b/www/firefox-esr/files/patch-bug1067377
deleted file mode 100644
index 898af08b7cab..000000000000
--- a/www/firefox-esr/files/patch-bug1067377
+++ /dev/null
@@ -1,78 +0,0 @@
-diff --git content/media/encoder/VP8TrackEncoder.cpp content/media/encoder/VP8TrackEncoder.cpp
-index 452821c..ede21c5 100644
---- content/media/encoder/VP8TrackEncoder.cpp
-+++ content/media/encoder/VP8TrackEncoder.cpp
-@@ -84,7 +84,7 @@ VP8TrackEncoder::Init(int32_t aWidth, int32_t aHeight, int32_t aDisplayWidth,
- // Creating a wrapper to the image - setting image data to NULL. Actual
- // pointer will be set in encode. Setting align to 1, as it is meaningless
- // (actual memory is not allocated).
-- vpx_img_wrap(mVPXImageWrapper, IMG_FMT_I420,
-+ vpx_img_wrap(mVPXImageWrapper, VPX_IMG_FMT_I420,
- mFrameWidth, mFrameHeight, 1, nullptr);
-
- config.g_w = mFrameWidth;
-@@ -239,9 +239,9 @@ void VP8TrackEncoder::PrepareMutedFrame()
- uint8_t *cb = mMuteFrame.Elements() + yPlaneSize;
- uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize;
-
-- mVPXImageWrapper->planes[PLANE_Y] = y;
-- mVPXImageWrapper->planes[PLANE_U] = cb;
-- mVPXImageWrapper->planes[PLANE_V] = cr;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth;
- mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth;
- mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
-@@ -297,9 +297,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
- const PlanarYCbCrImage::Data *data = yuv->GetData();
-
- if (isYUV420(data) && !data->mCbSkip) { // 420 planar
-- mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel;
-- mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel;
-- mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = data->mYChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = data->mCbChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = data->mCrChannel;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride;
- mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride;
- mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride;
-@@ -355,9 +355,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
- return NS_ERROR_NOT_IMPLEMENTED;
- }
-
-- mVPXImageWrapper->planes[PLANE_Y] = y;
-- mVPXImageWrapper->planes[PLANE_U] = cb;
-- mVPXImageWrapper->planes[PLANE_V] = cr;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth;
- mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth;
- mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
-diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-index d9c3a22..75195ae 100644
---- media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-+++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-@@ -180,7 +180,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
- // Creating a wrapper to the image - setting image data to NULL. Actual
- // pointer will be set in encode. Setting align to 1, as it is meaningless
- // (actual memory is not allocated).
-- raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height,
-+ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height,
- 1, NULL);
- // populate encoder configuration with default values
- if (vpx_codec_enc_config_default(vpx_codec_vp8_cx(), config_, 0)) {
-@@ -349,9 +349,9 @@ int VP8EncoderImpl::Encode(const I420VideoFrame& input_image,
- }
- // Image in vpx_image_t format.
- // Input image is const. VP8's raw image is not defined as const.
-- raw_->planes[PLANE_Y] = const_cast<uint8_t*>(input_image.buffer(kYPlane));
-- raw_->planes[PLANE_U] = const_cast<uint8_t*>(input_image.buffer(kUPlane));
-- raw_->planes[PLANE_V] = const_cast<uint8_t*>(input_image.buffer(kVPlane));
-+ raw_->planes[VPX_PLANE_Y] = const_cast<uint8_t*>(input_image.buffer(kYPlane));
-+ raw_->planes[VPX_PLANE_U] = const_cast<uint8_t*>(input_image.buffer(kUPlane));
-+ raw_->planes[VPX_PLANE_V] = const_cast<uint8_t*>(input_image.buffer(kVPlane));
- // TODO(mikhal): Stride should be set in initialization.
- raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane);
- raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane);
diff --git a/www/firefox-esr/files/patch-bug1073117 b/www/firefox-esr/files/patch-bug1073117
new file mode 100644
index 000000000000..7708023aee70
--- /dev/null
+++ b/www/firefox-esr/files/patch-bug1073117
@@ -0,0 +1,877 @@
+diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c
+index 34f22af..1b950ab 100644
+--- widget/gtk/gtk2drawing.c
++++ widget/gtk/gtk2drawing.c
+@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
++static gint
+ moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+ gint* focus_width, gint* focus_pad)
+ {
+@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
++static gint
+ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
+ {
+ static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
+diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c
+index 08a58d6..7fef6fa 100644
+--- widget/gtk/gtk3drawing.c
++++ widget/gtk/gtk3drawing.c
+@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget;
+ static style_prop_t style_prop_func;
+ static gboolean have_arrow_scaling;
+ static gboolean checkbox_check_state;
++static gboolean notebook_has_tab_gap;
+ static gboolean is_initialized;
+
+ #define ARROW_UP 0
+@@ -725,6 +726,14 @@ moz_gtk_init()
+ else
+ checkbox_check_state = GTK_STATE_FLAG_ACTIVE;
+
++ if(!gtk_check_version(3, 12, 0)) {
++ ensure_tab_widget();
++ gtk_widget_style_get(gTabWidget, "has-tab-gap", &notebook_has_tab_gap, NULL);
++ }
++ else {
++ notebook_has_tab_gap = TRUE;
++ }
++
+ /* Add style property to GtkEntry.
+ * Adding the style property to the normal GtkEntry class means that it
+ * will work without issues inside GtkComboBox and for Spinbuttons. */
+@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing)
+ gint
+ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
+ {
+- gboolean interior_focus;
+- gint focus_width = 0;
++ GtkBorder border;
++ GtkBorder padding;
++ GtkStyleContext *style;
+
+ ensure_entry_widget();
+- gtk_widget_style_get(gEntryWidget,
+- "interior-focus", &interior_focus,
+- "focus-line-width", &focus_width,
+- NULL);
+- if (interior_focus) {
+- GtkBorder border;
+- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget);
+- gtk_style_context_get_border(style, 0, &border);
+- *focus_h_width = border.left + focus_width;
+- *focus_v_width = border.top + focus_width;
+- } else {
+- *focus_h_width = focus_width;
+- *focus_v_width = focus_width;
+- }
+- return MOZ_GTK_SUCCESS;
+-}
+-
+-gint
+-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+- gint* focus_width, gint* focus_pad)
+-{
+- gtk_widget_style_get (widget,
+- "interior-focus", interior_focus,
+- "focus-line-width", focus_width,
+- "focus-padding", focus_pad,
+- NULL);
++ style = gtk_widget_get_style_context(gEntryWidget);
+
++ gtk_style_context_get_border(style, 0, &border);
++ gtk_style_context_get_padding(style, 0, &padding);
++ *focus_h_width = border.left + padding.left;
++ *focus_v_width = border.top + padding.top;
+ return MOZ_GTK_SUCCESS;
+ }
+
+@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
+-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
+-{
+- static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
+- GtkBorder *tmp_border;
+-
+- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL);
+-
+- if (tmp_border) {
+- *inner_border = *tmp_border;
+- gtk_border_free(tmp_border);
+- }
+- else
+- *inner_border = default_inner_border;
+-
+- return MOZ_GTK_SUCCESS;
+-}
+-
+ static gint
+ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gint x = rect->x, y=rect->y, width=rect->width, height=rect->height;
+
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
+ gtk_widget_set_direction(widget, direction);
+-
+- if (!interior_focus && state->focused) {
+- x += focus_width + focus_pad;
+- y += focus_width + focus_pad;
+- width -= 2 * (focus_width + focus_pad);
+- height -= 2 * (focus_width + focus_pad);
+- }
+-
++
+ gtk_style_context_save(style);
+ gtk_style_context_set_state(style, state_flags);
+
+@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ if (state->focused) {
+- if (interior_focus) {
+- GtkBorder border;
+- gtk_style_context_get_border(style, state_flags, &border);
+- x += border.left + focus_pad;
+- y += border.top + focus_pad;
+- width -= 2 * (border.left + focus_pad);
+- height -= 2 * (border.top + focus_pad);
+- } else {
+- x -= focus_width + focus_pad;
+- y -= focus_width + focus_pad;
+- width += 2 * (focus_width + focus_pad);
+- height += 2 * (focus_width + focus_pad);
+- }
+-
++ GtkBorder border;
++ gtk_style_context_get_border(style, state_flags, &border);
++ x += border.left;
++ y += border.top;
++ width -= (border.left + border.right);
++ height -= (border.top + border.bottom);
+ gtk_render_focus(style, cr, x, y, width, height);
+ }
+ gtk_style_context_restore(style);
+@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect,
+ GtkTextDirection direction,
+ gboolean ignore_focus)
+ {
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+ GtkStyleContext* style;
+ GtkBorder border;
++ GtkBorder padding = {0, 0, 0, 0};
+
+ style = gtk_widget_get_style_context(button);
+
+ /* This mirrors gtkbutton's child positioning */
+- moz_gtk_button_get_inner_border(button, &inner_border);
+- moz_gtk_widget_get_focus(button, &interior_focus,
+- &focus_width, &focus_pad);
+-
+- if (ignore_focus)
+- focus_width = focus_pad = 0;
+-
+ gtk_style_context_get_border(style, 0, &border);
++ if (!ignore_focus)
++ gtk_style_context_get_padding(style, 0, &padding);
+
+- inner_rect->x = rect->x + border.left + focus_width + focus_pad;
+- inner_rect->x += direction == GTK_TEXT_DIR_LTR ?
+- inner_border.left : inner_border.right;
+- inner_rect->y = rect->y + inner_border.top + border.top +
+- focus_width + focus_pad;
+- inner_rect->width = MAX(1, rect->width - inner_border.left -
+- inner_border.right - (border.left + focus_pad + focus_width) * 2);
+- inner_rect->height = MAX(1, rect->height - inner_border.top -
+- inner_border.bottom - (border.top + focus_pad + focus_width) * 2);
++ inner_rect->x = rect->x + border.left + padding.left;
++ inner_rect->y = rect->y + padding.top + border.top;
++ inner_rect->width = MAX(1, rect->width - padding.left -
++ padding.right - border.left * 2);
++ inner_rect->height = MAX(1, rect->height - padding.top -
++ padding.bottom - border.top * 2);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ {
+ gint x = rect->x, y = rect->y, width = rect->width, height = rect->height;
+ GtkStyleContext* style;
+- gboolean interior_focus;
+- gint focus_width;
+ int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE
+
+ gtk_widget_set_direction(widget, direction);
+
+ style = gtk_widget_get_style_context(widget);
+
+- gtk_widget_style_get(widget,
+- "interior-focus", &interior_focus,
+- "focus-line-width", &focus_width,
+- NULL);
+-
+ if (draw_focus_outline_only) {
+ // Inflate the given 'rect' with the focus outline size.
+ gint h, v;
+@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ /* This will get us the lit borders that focused textboxes enjoy on
+ * some themes. */
+ gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED);
+- if (!interior_focus) {
+- /* Indent the border a little bit if we have exterior focus
+- (this is what GTK does to draw native entries) */
+- x += focus_width;
+- y += focus_width;
+- width -= 2 * focus_width;
+- height -= 2 * focus_width;
+- }
+ }
+
+ if (state->disabled) {
+@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+ gtk_render_frame(style, cr, x, y, width, height);
+
+- if (state->focused && !state->disabled) {
+- if (!interior_focus) {
+- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height);
+- }
+- }
+ gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
+ GtkStyleContext* style;
+ GtkWidget *widget;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+
+ if (isradio) {
+ ensure_radiobutton_widget();
+@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+
+ style = gtk_widget_get_style_context(widget);
+ gtk_style_context_save(style);
+- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
+ gtk_style_context_set_state(style, state_flags);
+
+ /* this is for drawing a prelight box */
+@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+ rect->x, rect->y, rect->width, rect->height);
+ }
+
+- if (state->focused && !interior_focus) {
+- gtk_render_focus(style, cr,
+- rect->x, rect->y, rect->width, rect->height);
+- }
+ gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
+ {
+ GtkStyleContext *style;
+ GtkWidget *widget;
+- gboolean interior_focus;
+
+ if (!state->focused)
+ return MOZ_GTK_SUCCESS;
+@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+ gtk_widget_set_direction(widget, direction);
+
+- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL);
+- if (!interior_focus)
+- return MOZ_GTK_SUCCESS;
+-
+ gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
+ gtk_render_focus(style, cr,
+ rect->x, rect->y, rect->width, rect->height);
+@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void)
+ GtkStyleContext * style;
+
+ ensure_tab_widget();
++ if (!notebook_has_tab_gap)
++ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */
++
+ style = gtk_widget_get_style_context(gTabWidget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK);
+ gtk_style_context_get_border(style, 0, &border);
+@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+ ensure_tab_widget();
+ gtk_widget_set_direction(gTabWidget, direction);
+
+- style = gtk_widget_get_style_context(gTabWidget);
++ style = gtk_widget_get_style_context(gTabWidget);
+ gtk_style_context_save(style);
+ moz_gtk_tab_prepare_style_context(style, flags);
+
+@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+
+ focusRect = backRect = tabRect;
+
+- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) {
+- /* Only draw the tab */
+- gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y, tabRect.width, tabRect.height,
+- (flags & MOZ_GTK_TAB_BOTTOM) ?
+- GTK_POS_TOP : GTK_POS_BOTTOM );
+- } else {
+- /* Draw the tab and the gap
+- * We want the gap to be positioned exactly on the tabpanel top
+- * border; since tabbox.css may set a negative margin so that the tab
+- * frame rect already overlaps the tabpanel frame rect, we need to take
+- * that into account when drawing. To that effect, nsNativeThemeGTK
+- * passes us this negative margin (bmargin in the graphic below) in the
+- * lowest bits of |flags|. We use it to set gap_voffset, the distance
+- * between the top of the gap and the bottom of the tab (resp. the
+- * bottom of the gap and the top of the tab when we draw a bottom tab),
+- * while ensuring that the gap always touches the border of the tab,
+- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results
+- * with big negative or positive margins.
+- * Here is a graphical explanation in the case of top tabs:
+- * ___________________________
+- * / \
+- * | T A B |
+- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel
+- * : ^ bmargin : ^
+- * : | (-negative margin, : |
+- * bottom : v passed in flags) : | gap_height
+- * of -> :.............................: | (the size of the
+- * the tab . part of the gap . | tabpanel top border)
+- * . outside of the tab . v
+- * ----------------------------------------------
+- *
+- * To draw the gap, we use gtk_paint_box_gap(), see comment in
+- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall,
+- * which should suffice to ensure that the only visible border is the
+- * pierced one. If the tab is in the middle, we make the box_gap begin
+- * a bit to the left of the tab and end a bit to the right, adjusting
+- * the gap position so it still is under the tab, because we want the
+- * rendering of a gap in the middle of a tabpanel. This is the role of
+- * the gints gap_{l,r}_offset. On the contrary, if the tab is the
+- * first, we align the start border of the box_gap with the start
+- * border of the tab (left if LTR, right if RTL), by setting the
+- * appropriate offset to 0.*/
+- gint gap_loffset, gap_roffset, gap_voffset, gap_height;
+-
+- /* Get height needed by the gap */
+- gap_height = moz_gtk_get_tab_thickness();
+-
+- /* Extract gap_voffset from the first bits of flags */
+- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK;
+- if (gap_voffset > gap_height)
+- gap_voffset = gap_height;
+-
+- /* Set gap_{l,r}_offset to appropriate values */
+- gap_loffset = gap_roffset = 20; /* should be enough */
+- if (flags & MOZ_GTK_TAB_FIRST) {
+- if (direction == GTK_TEXT_DIR_RTL)
+- gap_roffset = initial_gap;
+- else
+- gap_loffset = initial_gap;
+- }
+-
+- if (flags & MOZ_GTK_TAB_BOTTOM) {
+- /* Draw the tab on bottom */
+- focusRect.y += gap_voffset;
+- focusRect.height -= gap_voffset;
+-
++ if (notebook_has_tab_gap) {
++ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) {
++ /* Only draw the tab */
+ gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y + gap_voffset, tabRect.width,
+- tabRect.height - gap_voffset, GTK_POS_TOP);
+-
+- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
+-
+- backRect.y += (gap_voffset - gap_height);
+- backRect.height = gap_height;
+-
+- /* Draw the gap; erase with background color before painting in
+- * case theme does not */
+- gtk_render_background(style, cr, backRect.x, backRect.y,
+- backRect.width, backRect.height);
+- cairo_save(cr);
+- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
+- cairo_clip(cr);
+-
+- gtk_render_frame_gap(style, cr,
+- tabRect.x - gap_loffset,
+- tabRect.y + gap_voffset - 3 * gap_height,
+- tabRect.width + gap_loffset + gap_roffset,
+- 3 * gap_height, GTK_POS_BOTTOM,
+- gap_loffset, gap_loffset + tabRect.width);
+- cairo_restore(cr);
++ tabRect.x, tabRect.y, tabRect.width, tabRect.height,
++ (flags & MOZ_GTK_TAB_BOTTOM) ?
++ GTK_POS_TOP : GTK_POS_BOTTOM );
+ } else {
+- /* Draw the tab on top */
+- focusRect.height -= gap_voffset;
+- gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y, tabRect.width,
+- tabRect.height - gap_voffset, GTK_POS_BOTTOM);
+-
+- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
+-
+- backRect.y += (tabRect.height - gap_voffset);
+- backRect.height = gap_height;
+-
+- /* Draw the gap; erase with background color before painting in
+- * case theme does not */
+- gtk_render_background(style, cr, backRect.x, backRect.y,
+- backRect.width, backRect.height);
+-
+- cairo_save(cr);
+- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
+- cairo_clip(cr);
+-
+- gtk_render_frame_gap(style, cr,
+- tabRect.x - gap_loffset,
+- tabRect.y + tabRect.height - gap_voffset,
+- tabRect.width + gap_loffset + gap_roffset,
+- 3 * gap_height, GTK_POS_TOP,
+- gap_loffset, gap_loffset + tabRect.width);
+- cairo_restore(cr);
++ /* Draw the tab and the gap
++ * We want the gap to be positioned exactly on the tabpanel top
++ * border; since tabbox.css may set a negative margin so that the tab
++ * frame rect already overlaps the tabpanel frame rect, we need to take
++ * that into account when drawing. To that effect, nsNativeThemeGTK
++ * passes us this negative margin (bmargin in the graphic below) in the
++ * lowest bits of |flags|. We use it to set gap_voffset, the distance
++ * between the top of the gap and the bottom of the tab (resp. the
++ * bottom of the gap and the top of the tab when we draw a bottom tab),
++ * while ensuring that the gap always touches the border of the tab,
++ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results
++ * with big negative or positive margins.
++ * Here is a graphical explanation in the case of top tabs:
++ * ___________________________
++ * / \
++ * | T A B |
++ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel
++ * : ^ bmargin : ^
++ * : | (-negative margin, : |
++ * bottom : v passed in flags) : | gap_height
++ * of -> :.............................: | (the size of the
++ * the tab . part of the gap . | tabpanel top border)
++ * . outside of the tab . v
++ * ----------------------------------------------
++ *
++ * To draw the gap, we use gtk_paint_box_gap(), see comment in
++ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall,
++ * which should suffice to ensure that the only visible border is the
++ * pierced one. If the tab is in the middle, we make the box_gap begin
++ * a bit to the left of the tab and end a bit to the right, adjusting
++ * the gap position so it still is under the tab, because we want the
++ * rendering of a gap in the middle of a tabpanel. This is the role of
++ * the gints gap_{l,r}_offset. On the contrary, if the tab is the
++ * first, we align the start border of the box_gap with the start
++ * border of the tab (left if LTR, right if RTL), by setting the
++ * appropriate offset to 0.*/
++ gint gap_loffset, gap_roffset, gap_voffset, gap_height;
++
++ /* Get height needed by the gap */
++ gap_height = moz_gtk_get_tab_thickness();
++
++ /* Extract gap_voffset from the first bits of flags */
++ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK;
++ if (gap_voffset > gap_height)
++ gap_voffset = gap_height;
++
++ /* Set gap_{l,r}_offset to appropriate values */
++ gap_loffset = gap_roffset = 20; /* should be enough */
++ if (flags & MOZ_GTK_TAB_FIRST) {
++ if (direction == GTK_TEXT_DIR_RTL)
++ gap_roffset = initial_gap;
++ else
++ gap_loffset = initial_gap;
++ }
++
++ if (flags & MOZ_GTK_TAB_BOTTOM) {
++ /* Draw the tab on bottom */
++ focusRect.y += gap_voffset;
++ focusRect.height -= gap_voffset;
++
++ gtk_render_extension(style, cr,
++ tabRect.x, tabRect.y + gap_voffset, tabRect.width,
++ tabRect.height - gap_voffset, GTK_POS_TOP);
++
++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
++
++ backRect.y += (gap_voffset - gap_height);
++ backRect.height = gap_height;
++
++ /* Draw the gap; erase with background color before painting in
++ * case theme does not */
++ gtk_render_background(style, cr, backRect.x, backRect.y,
++ backRect.width, backRect.height);
++ cairo_save(cr);
++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
++ cairo_clip(cr);
++
++ gtk_render_frame_gap(style, cr,
++ tabRect.x - gap_loffset,
++ tabRect.y + gap_voffset - 3 * gap_height,
++ tabRect.width + gap_loffset + gap_roffset,
++ 3 * gap_height, GTK_POS_BOTTOM,
++ gap_loffset, gap_loffset + tabRect.width);
++ cairo_restore(cr);
++ } else {
++ /* Draw the tab on top */
++ focusRect.height -= gap_voffset;
++ gtk_render_extension(style, cr,
++ tabRect.x, tabRect.y, tabRect.width,
++ tabRect.height - gap_voffset, GTK_POS_BOTTOM);
++
++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
++
++ backRect.y += (tabRect.height - gap_voffset);
++ backRect.height = gap_height;
++
++ /* Draw the gap; erase with background color before painting in
++ * case theme does not */
++ gtk_render_background(style, cr, backRect.x, backRect.y,
++ backRect.width, backRect.height);
++
++ cairo_save(cr);
++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
++ cairo_clip(cr);
++
++ gtk_render_frame_gap(style, cr,
++ tabRect.x - gap_loffset,
++ tabRect.y + tabRect.height - gap_voffset,
++ tabRect.width + gap_loffset + gap_roffset,
++ 3 * gap_height, GTK_POS_TOP,
++ gap_loffset, gap_loffset + tabRect.width);
++ cairo_restore(cr);
++ }
+ }
++ } else {
++ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height);
++ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height);
+ }
+
++ gtk_style_context_restore(style);
++
+ if (state->focused) {
+ /* Paint the focus ring */
+- GtkBorder border;
+- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border);
++ GtkBorder padding;
++
++ gtk_style_context_save(style);
++ moz_gtk_tab_prepare_style_context(style, flags);
+
+- focusRect.x += border.left;
+- focusRect.width -= (border.left + border.right);
+- focusRect.y += border.top;
+- focusRect.height -= (border.top + border.bottom);
++ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding);
++
++ focusRect.x += padding.left;
++ focusRect.width -= (padding.left + padding.right);
++ focusRect.y += padding.top;
++ focusRect.height -= (padding.top + padding.bottom);
+
+ gtk_render_focus(style, cr,
+ focusRect.x, focusRect.y, focusRect.width, focusRect.height);
++
++ gtk_style_context_restore(style);
+ }
+
+- gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ switch (widget) {
+ case MOZ_GTK_BUTTON:
+ {
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+ ensure_button_widget();
++ style = gtk_widget_get_style_context(gButtonWidget);
++
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget));
+
+ /* Don't add this padding in HTML, otherwise the buttons will
+ become too big and stuff the layout. */
+ if (!inhtml) {
+- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad);
+- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border);
+- *left += focus_width + focus_pad + inner_border.left;
+- *right += focus_width + focus_pad + inner_border.right;
+- *top += focus_width + focus_pad + inner_border.top;
+- *bottom += focus_width + focus_pad + inner_border.bottom;
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
+- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget),
+- left, top, right, bottom);
++ moz_gtk_add_style_border(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_ENTRY:
+@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ ensure_entry_widget();
+ style = gtk_widget_get_style_context(gEntryWidget);
+ moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++
++ /* Use the document padding in HTML
++ and GTK style padding in XUL. */
++ if (!inhtml) {
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++ }
++
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREEVIEW:
+@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ * assigned.
+ * That is why the following code is the same as for MOZ_GTK_BUTTON.
+ * */
+-
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
++ GtkStyleContext *style;
+
+ ensure_tree_header_cell_widget();
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget));
+
+- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad);
+- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border);
+- *left += focus_width + focus_pad + inner_border.left;
+- *right += focus_width + focus_pad + inner_border.right;
+- *top += focus_width + focus_pad + inner_border.top;
+- *bottom += focus_width + focus_pad + inner_border.bottom;
+-
+- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget),
+- left, top, right, bottom);
++ style = gtk_widget_get_style_context(gTreeHeaderCellWidget);
++
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ /* We need to account for the arrow on the dropdown, so text
+ * doesn't come too close to the arrow, or in some cases spill
+ * into the arrow. */
+- gboolean ignored_interior_focus, wide_separators;
+- gint focus_width, focus_pad, separator_width;
++ gboolean wide_separators;
++ gint separator_width;
+ GtkRequisition arrow_req;
+ GtkBorder border;
+
+ ensure_combo_box_widgets();
+
+- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
++ *left = *top = *right = *bottom =
++ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
++
++ style = gtk_widget_get_style_context(gComboBoxButtonWidget);
+
+ if (!inhtml) {
+- moz_gtk_widget_get_focus(gComboBoxButtonWidget,
+- &ignored_interior_focus,
+- &focus_width, &focus_pad);
+- *left += focus_width + focus_pad;
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
+- style = gtk_widget_get_style_context(gComboBoxButtonWidget);
+- gtk_style_context_get_border(style, 0, &border);
+-
+- *top = *left + border.top;
+- *left += border.left;
+-
+- *right = *left; *bottom = *top;
++ moz_gtk_add_style_border(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ ensure_frame_widget();
+ w = gFrameWidget;
+ break;
+- case MOZ_GTK_CHECKBUTTON_LABEL:
+- case MOZ_GTK_RADIOBUTTON_LABEL:
+- {
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- /* If the focus is interior, then the label has a border of
+- (focus_width + focus_pad). */
+- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) {
+- ensure_checkbox_widget();
+- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
+- &focus_width, &focus_pad);
+- }
+- else {
+- ensure_radiobutton_widget();
+- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
+- &focus_width, &focus_pad);
+- }
+-
+- if (interior_focus)
+- *left = *top = *right = *bottom = (focus_width + focus_pad);
+-
+- return MOZ_GTK_SUCCESS;
+- }
+-
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+ case MOZ_GTK_RADIOBUTTON_CONTAINER:
+ {
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- /* If the focus is _not_ interior, then the container has a border
+- of (focus_width + focus_pad). */
+ if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) {
+ ensure_checkbox_widget();
+- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
+- &focus_width, &focus_pad);
+ w = gCheckboxWidget;
+ } else {
+ ensure_radiobutton_widget();
+- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
+- &focus_width, &focus_pad);
+ w = gRadiobuttonWidget;
+ }
++ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+-
+- if (!interior_focus) {
+- *left += (focus_width + focus_pad);
+- *right += (focus_width + focus_pad);
+- *top += (focus_width + focus_pad);
+- *bottom += (focus_width + focus_pad);
+- }
+-
++ moz_gtk_add_style_border(style,
++ left, top, right, bottom);
++ moz_gtk_add_style_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ return MOZ_GTK_SUCCESS;
+ }
+ /* These widgets have no borders, since they are not containers. */
++ case MOZ_GTK_CHECKBUTTON_LABEL:
++ case MOZ_GTK_RADIOBUTTON_LABEL:
+ case MOZ_GTK_SPLITTER_HORIZONTAL:
+ case MOZ_GTK_SPLITTER_VERTICAL:
+ case MOZ_GTK_CHECKBUTTON:
+@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+ gtk_style_context_save(style);
+ moz_gtk_tab_prepare_style_context(style, flags);
+
+- // TODO add_style_border() should be replaced
+- // with focus-line-width and focus-padding
+- // see Bug 877605
+ *left = *top = *right = *bottom = 0;
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+
+ gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL);
+@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+ int initial_gap;
+ gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL);
+ if (direction == GTK_TEXT_DIR_RTL)
+- *right += initial_gap;
++ *right += initial_gap;
+ else
+- *left += initial_gap;
+- }
+-
+- // Top tabs have no bottom border, bottom tabs have no top border
+- if (flags & MOZ_GTK_TAB_BOTTOM) {
+- *top = 0;
+- } else {
+- *bottom = 0;
++ *left += initial_gap;
+ }
+
+ gtk_style_context_restore(style);
+diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h
+index 1938e8f..5f71cfd 100644
+--- widget/gtk/gtkdrawing.h
++++ widget/gtk/gtkdrawing.h
+@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing);
+ gint
+ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing);
+
+-/**
+- * Get the inner-border value for a GtkButton widget (button or tree header)
+- * widget: [IN] the widget to get the border value for
+- * inner_border: [OUT] the inner border
+- *
+- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
+- */
+-gint
+-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
+-
+ /** Get the extra size for the focus ring for outline:auto.
+ * widget: [IN] the widget to get the focus metrics for
+ * focus_h_width: [OUT] the horizontal width
+@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
+ gint
+ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width);
+
+-/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button.
+- * widget: [IN] the widget to get the focus metrics for
+- * interior_focus: [OUT] whether the focus is drawn around the
+- * label (TRUE) or around the whole container (FALSE)
+- * focus_width: [OUT] the width of the focus line
+- * focus_pad: [OUT] the padding between the focus line and children
+- *
+- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
+- */
+-gint
+-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+- gint* focus_width, gint* focus_pad);
+-
+ /** Get the horizontal padding for the menuitem widget or checkmenuitem widget.
+ * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem
+ *
+diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp
+index e5e1867..76d28e3 100644
+--- widget/gtk/nsNativeThemeGTK.cpp
++++ widget/gtk/nsNativeThemeGTK.cpp
+@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
+ return false;
+
+ gint gap_height = moz_gtk_get_tab_thickness();
++ if (!gap_height)
++ return false;
+
+ int32_t extra = gap_height - GetTabMarginPixels(aFrame);
+ if (extra <= 0)
diff --git a/www/firefox-esr/files/patch-bug1073709 b/www/firefox-esr/files/patch-bug1073709
deleted file mode 100644
index f011d7438ad0..000000000000
--- a/www/firefox-esr/files/patch-bug1073709
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git mfbt/Atomics.h mfbt/Atomics.h
-index 495a9d3..c7f7601 100644
---- mfbt/Atomics.h
-+++ mfbt/Atomics.h
-@@ -34,10 +34,12 @@
- * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
- * definitions for unspecialized std::atomic and causes linking errors.
- * Therefore, we require at least 4.7.0 for using libstdc++.
-+ *
-+ * libc++ <atomic> is only functional with clang.
- */
- # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
- # define MOZ_HAVE_CXX11_ATOMICS
--# elif MOZ_USING_LIBCXX
-+# elif MOZ_USING_LIBCXX && defined(__clang__)
- # define MOZ_HAVE_CXX11_ATOMICS
- # endif
- /*
diff --git a/www/firefox-esr/files/patch-bug1082199 b/www/firefox-esr/files/patch-bug1082199
deleted file mode 100644
index a10356adaa5b..000000000000
--- a/www/firefox-esr/files/patch-bug1082199
+++ /dev/null
@@ -1,26 +0,0 @@
-commit 258ec90
-Author: Guilherme Goncalves <guilherme.p.gonc@gmail.com>
-Date: Fri Oct 17 15:55:00 2014 +0200
-
- Bug 1082199 - Recompute stats in jemalloc_stats when using jemalloc3. r=glandium
----
- memory/build/mozjemalloc_compat.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git memory/build/mozjemalloc_compat.c memory/build/mozjemalloc_compat.c
-index 78bb13a..70265a7 100644
---- memory/build/mozjemalloc_compat.c
-+++ memory/build/mozjemalloc_compat.c
-@@ -68,6 +68,12 @@ jemalloc_stats_impl(jemalloc_stats_t *stats)
- size_t active, allocated, mapped, page, pdirty;
- size_t lg_chunk;
-
-+ // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in
-+ // src/ctl.c
-+ uint64_t epoch = 0;
-+ size_t esz = sizeof(epoch);
-+ int ret = je_(mallctl)("epoch", &epoch, &esz, &epoch, esz);
-+
- CTL_GET("arenas.narenas", narenas);
- CTL_GET("arenas.page", page);
- CTL_GET("stats.active", active);
diff --git a/www/firefox-esr/files/patch-bug1103858 b/www/firefox-esr/files/patch-bug1103858
deleted file mode 100644
index 16cfd9973a86..000000000000
--- a/www/firefox-esr/files/patch-bug1103858
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git configure.in configure.in
-index b2b45e7..dcfdfb7 100644
---- configure.in
-+++ configure.in
-@@ -8346,7 +8346,7 @@ case "$OS_TARGET" in
- NECKO_WIFI=1
- fi
- ;;
-- Darwin|FreeBSD|SunOS|WINNT)
-+ Darwin|DragonFly|FreeBSD|SunOS|WINNT)
- NECKO_WIFI=1
- ;;
- Linux)
-diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build
-index d4de063..3949380 100644
---- netwerk/wifi/moz.build
-+++ netwerk/wifi/moz.build
-@@ -35,7 +35,7 @@ if CONFIG['OS_ARCH'] == 'Darwin':
- UNIFIED_SOURCES += [
- 'osx_corewlan.mm',
- ]
--elif CONFIG['OS_ARCH'] == 'FreeBSD':
-+elif CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD'):
- UNIFIED_SOURCES += [
- 'nsWifiScannerFreeBSD.cpp',
- ]
-diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp
-index bdf171e..4185d69 100644
---- netwerk/wifi/nsWifiScannerFreeBSD.cpp
-+++ netwerk/wifi/nsWifiScannerFreeBSD.cpp
-@@ -13,7 +13,11 @@
- #include <sys/socket.h>
- #include <net/if.h>
- #include <net/if_media.h>
-+#ifdef __DragonFly__
-+#include <netproto/802_11/ieee80211_ioctl.h>
-+#else
- #include <net80211/ieee80211_ioctl.h>
-+#endif
-
- #include <ifaddrs.h>
- #include <string.h>
diff --git a/www/firefox-esr/files/patch-bug1125579 b/www/firefox-esr/files/patch-bug1125579
deleted file mode 100644
index 710e76fa1025..000000000000
--- a/www/firefox-esr/files/patch-bug1125579
+++ /dev/null
@@ -1,14 +0,0 @@
---- js/src/assembler/jit/ExecutableAllocator.h~
-+++ js/src/assembler/jit/ExecutableAllocator.h
-@@ -454,6 +454,11 @@ public:
- {
- User::IMB_Range(code, static_cast<char*>(code) + size);
- }
-+#elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_FREEBSD || WTF_OS_NETBSD)
-+ static void cacheFlush(void* code, size_t size)
-+ {
-+ __clear_cache(code, reinterpret_cast<char*>(code) + size);
-+ }
- #elif WTF_CPU_ARM_TRADITIONAL && WTF_OS_LINUX && WTF_COMPILER_RVCT
- static __asm void cacheFlush(void* code, size_t size);
- #elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_LINUX || WTF_OS_ANDROID) && WTF_COMPILER_GCC
diff --git a/www/firefox-esr/files/patch-bug1125580 b/www/firefox-esr/files/patch-bug1125580
deleted file mode 100644
index d07ff7782f23..000000000000
--- a/www/firefox-esr/files/patch-bug1125580
+++ /dev/null
@@ -1,11 +0,0 @@
---- js/src/jit/arm/Architecture-arm.cpp~
-+++ js/src/jit/arm/Architecture-arm.cpp
-@@ -17,7 +17,7 @@
-
- #define HWCAP_USE_HARDFP_ABI (1 << 28)
-
--#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR)
-+#if defined(__linux__) && !defined(ANDROID) && !defined(MOZ_B2G) && !defined(JS_ARM_SIMULATOR)
- #define HWCAP_ARMv7 (1 << 29)
- #include <asm/hwcap.h>
- #else
diff --git a/www/firefox-esr/files/patch-bug1130155 b/www/firefox-esr/files/patch-bug1130155
index 65864eed71c3..34584d42823f 100644
--- a/www/firefox-esr/files/patch-bug1130155
+++ b/www/firefox-esr/files/patch-bug1130155
@@ -82,7 +82,7 @@ index 9bbc129..e72944a 100644
/* This should never happen. */
if ((unsigned int) avail > stm->buffer_size) {
-@@ -355,17 +361,67 @@ alsa_refill_stream(cubeb_stream * stm)
+@@ -359,10 +365,11 @@ alsa_refill_stream(cubeb_stream * stm)
if (got < 0) {
pthread_mutex_unlock(&stm->mutex);
stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
@@ -90,15 +90,19 @@ index 9bbc129..e72944a 100644
return ERROR;
}
if (got > 0) {
-- snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+- snd_pcm_sframes_t wrote;
++ snd_pcm_sframes_t wrote, towrite = got;
+
+ if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) {
+ float * b = (float *) p;
+@@ -375,14 +382,62 @@ alsa_refill_stream(cubeb_stream * stm)
+ b[i] *= stm->volume;
+ }
+ }
+- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
- if (wrote == -EPIPE) {
- WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
-- }
-- assert(wrote >= 0 && wrote == got);
-- stm->write_position += wrote;
-- gettimeofday(&stm->last_activity, NULL);
-+ snd_pcm_sframes_t wrote, towrite = got;
+ for (;;) {
+ wrote = WRAP(snd_pcm_writei)(stm->pcm, p,
+ towrite > avail ? avail : towrite);
@@ -154,7 +158,10 @@ index 9bbc129..e72944a 100644
+ if (towrite == wrote)
+ break;
+ towrite -= wrote;
-+ }
+ }
+- assert(wrote >= 0 && wrote == got);
+- stm->write_position += wrote;
+- gettimeofday(&stm->last_activity, NULL);
}
if (got != avail) {
long buffer_fill = stm->buffer_size - (avail - got);
diff --git a/www/firefox/files/patch-bug1138845 b/www/firefox-esr/files/patch-bug1138845
index 12a9542f538f..12a9542f538f 100644
--- a/www/firefox/files/patch-bug1138845
+++ b/www/firefox-esr/files/patch-bug1138845
diff --git a/www/firefox/files/patch-bug1143686 b/www/firefox-esr/files/patch-bug1143686
index d4cc2834d67e..d4cc2834d67e 100644
--- a/www/firefox/files/patch-bug1143686
+++ b/www/firefox-esr/files/patch-bug1143686
diff --git a/www/firefox/files/patch-bug1144643 b/www/firefox-esr/files/patch-bug1144643
index fe8150ba182c..fe8150ba182c 100644
--- a/www/firefox/files/patch-bug1144643
+++ b/www/firefox-esr/files/patch-bug1144643
diff --git a/www/firefox-esr/files/patch-bug702179 b/www/firefox-esr/files/patch-bug702179
index d7b90a082519..d1aa293d2237 100644
--- a/www/firefox-esr/files/patch-bug702179
+++ b/www/firefox-esr/files/patch-bug702179
@@ -4,33 +4,21 @@ Date: Wed Nov 30 07:23:46 2011 +0800
Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium
---
- configure.in | 2 +-
- js/src/Makefile.in | 2 --
- 2 files changed, 1 insertion(+), 3 deletions(-)
+ js/src/Makefile.in | 3 ---
+ toolkit/library/moz.build | 5 -----
+ 2 files changed, 8 deletions(-)
-diff --git configure.in configure.in
-index 66549c1..75b848d 100644
---- configure.in
-+++ configure.in
-@@ -966,7 +966,7 @@ MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)'
- MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation
- MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)'
-
--MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)'
-+MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(DEPTH)/js/src)'
- MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)'
- MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'
- XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)'
diff --git js/src/Makefile.in js/src/Makefile.in
-index e28160a..28ca5e8 100644
+index 62bbfa0..90400cb 100644
--- js/src/Makefile.in
+++ js/src/Makefile.in
-@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
- STATIC_LIBRARY_NAME = js_static
- LIBS = $(NSPR_LIBS)
+@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1
+ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
+ EXTRA_LIBS += $(NSPR_LIBS)
-DIST_INSTALL = 1
+-NO_EXPAND_LIBS = 1
-
- ifdef JS_STANDALONE
- SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt)
- ifndef MOZ_NATIVE_ZLIB
+ ifdef JS_HAS_CTYPES
+ ifdef MOZ_NATIVE_FFI
+ LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS)
diff --git a/www/firefox-esr/files/patch-bug779713 b/www/firefox-esr/files/patch-bug779713
index e4643f4422cb..cbf73d463db0 100644
--- a/www/firefox-esr/files/patch-bug779713
+++ b/www/firefox-esr/files/patch-bug779713
@@ -47,7 +47,15 @@ diff --git mfbt/Attributes.h mfbt/Attributes.h
index d317766..ddb13da 100644
--- mfbt/Attributes.h
+++ mfbt/Attributes.h
-@@ -54,6 +54,9 @@
+@@ -50,6 +50,7 @@
+ * don't indicate support for them here, due to
+ * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug
+ */
++# define MOZ_HAVE_CXX11_ALIGNAS
+ # define MOZ_HAVE_NEVER_INLINE __declspec(noinline)
+ # define MOZ_HAVE_NORETURN __declspec(noreturn)
+ # ifdef __clang__
+@@ -70,6 +71,9 @@
# ifndef __has_extension
# define __has_extension __has_feature /* compatibility, for older versions of clang */
# endif
@@ -57,21 +65,13 @@ index d317766..ddb13da 100644
# if __has_extension(cxx_constexpr)
# define MOZ_HAVE_CXX11_CONSTEXPR
# endif
-@@ -75,6 +78,9 @@
+@@ -84,6 +88,9 @@
# endif
#elif defined(__GNUC__)
# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0)
+# define MOZ_HAVE_CXX11_ALIGNAS
+# endif
- # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0)
- # define MOZ_HAVE_CXX11_OVERRIDE
- # define MOZ_HAVE_CXX11_FINAL final
-@@ -96,6 +102,7 @@
- # define MOZ_HAVE_NORETURN __attribute__((noreturn))
- #elif defined(_MSC_VER)
- # if _MSC_VER >= 1800
-+# define MOZ_HAVE_CXX11_ALIGNAS
- # define MOZ_HAVE_CXX11_DELETE
+ # define MOZ_HAVE_CXX11_CONSTEXPR
+ # define MOZ_HAVE_EXPLICIT_CONVERSION
# endif
- # if _MSC_VER >= 1700
diff --git a/www/firefox-esr/files/patch-bug826985 b/www/firefox-esr/files/patch-bug826985
index 5f44e78051e2..4fb4dde7bd4d 100644
--- a/www/firefox-esr/files/patch-bug826985
+++ b/www/firefox-esr/files/patch-bug826985
@@ -51,18 +51,18 @@ index b483cd1..f1dd1f0 100644
# basic stuff for everything
'include_internal_video_render': 0,
'clang_use_chrome_plugins': 0,
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index b483cd1..f1dd1f0 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -7,6 +7,7 @@ LIBS = \
- $(NSPR_LIBS) \
- $(NSS_LIBS) \
- $(REALTIME_LIBS) \
-+ $(MOZ_LIBV4L2_LIBS) \
- $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
- $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \
- $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']:
+ 'js',
+ ]
+
++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS']
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['REALTIME_LIBS']
+
diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
index 239a292..bab496c 100644
--- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
@@ -145,35 +145,35 @@ index d46b5aa..e452223 100644
'targets': [
{
'target_name': 'video_capture_module',
-@@ -49,6 +52,16 @@
- }, { # include_internal_video_capture == 1
- 'conditions': [
- ['include_v4l2_video_capture==1', {
-+ 'conditions': [
-+ ['use_libv4l2==1', {
-+ 'defines': [
-+ 'HAVE_LIBV4L2',
-+ ],
-+ 'libraries': [
-+ '-lv4l2',
-+ ],
-+ }],
+@@ -69,6 +72,19 @@
+ 'linux/video_capture_linux.cc',
+ 'linux/video_capture_linux.h',
+ ],
++ 'conditions': [
++ ['use_libv4l2==1', {
++ 'defines': [
++ 'HAVE_LIBV4L2',
++ ],
++ 'cflags_mozilla': [
++ '$(MOZ_LIBV4L2_CFLAGS)',
+ ],
- 'include_dirs': [
- 'linux',
- ],
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
++ 'libraries': [
++ '-lv4l2',
++ ],
++ }],
++ ],
+ }], # linux
+ ['OS=="mac"', {
+ 'sources': [
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index 9c16ffa..1db3794 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -182,6 +182,10 @@ endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF
+ ]
- EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
+ OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS']
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS']
-+ifdef MOZ_LIBV4L2_LIBS
-+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
-+endif
-+
- ifdef MOZ_WEBRTC
- ifeq (WINNT,$(OS_TARGET))
- EXTRA_DSO_LDOPTS += \
diff --git a/www/firefox-esr/files/patch-bug847568 b/www/firefox-esr/files/patch-bug847568
index 1504654a4341..59bef6d9651a 100644
--- a/www/firefox-esr/files/patch-bug847568
+++ b/www/firefox-esr/files/patch-bug847568
@@ -4,7 +4,7 @@ diff --git config/Makefile.in config/Makefile.in
index 14bfc0d..5383399 100644
--- config/Makefile.in
+++ config/Makefile.in
-@@ -77,6 +77,8 @@ export:: $(export-preqs)
+@@ -75,6 +75,8 @@ export:: $(export-preqs)
-DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \
-DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \
-DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
@@ -17,7 +17,7 @@ diff --git config/system-headers config/system-headers
index 18e8703..bdc5f82 100644
--- config/system-headers
+++ config/system-headers
-@@ -1145,3 +1145,11 @@ unicode/utypes.h
+@@ -1357,3 +1357,11 @@ unicode/utypes.h
#endif
libutil.h
unwind.h
@@ -33,7 +33,7 @@ diff --git configure.in configure.in
index ac38f40..87536b7 100644
--- configure.in
+++ configure.in
-@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then
+@@ -7986,6 +7986,49 @@ if test "$USE_FC_FREETYPE"; then
fi
dnl ========================================================
@@ -46,16 +46,15 @@ index ac38f40..87536b7 100644
+MOZ_NATIVE_HARFBUZZ=)
+
+if test -n "$MOZ_NATIVE_HARFBUZZ"; then
-+ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.25)
++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34)
+fi
+
+AC_SUBST(MOZ_NATIVE_HARFBUZZ)
-+AC_SUBST(MOZ_HARFBUZZ_CFLAGS)
-+AC_SUBST(MOZ_HARFBUZZ_LIBS)
+
+dnl ========================================================
+dnl Check for graphite2
+dnl ========================================================
++
+MOZ_ARG_WITH_BOOL(system-graphite2,
+[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)],
+MOZ_NATIVE_GRAPHITE2=1,
@@ -79,27 +78,58 @@ index ac38f40..87536b7 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_GRAPHITE2)
-+AC_SUBST(MOZ_GRAPHITE2_CFLAGS)
-+AC_SUBST(MOZ_GRAPHITE2_LIBS)
+
+dnl ========================================================
dnl Check for pixman and cairo
dnl ========================================================
-diff --git content/base/src/moz.build content/base/src/moz.build
-index d4f6380..0ee55df 100644
---- content/base/src/moz.build
-+++ content/base/src/moz.build
-@@ -179,6 +179,9 @@ SOURCES += [
+diff --git dom/base/moz.build dom/base/moz.build
+index a660ba4..6b2f602 100644
+--- dom/base/moz.build
++++ dom/base/moz.build
+@@ -196,6 +196,9 @@ SOURCES += [
'nsObjectLoadingContent.cpp',
]
+if CONFIG['MOZ_NATIVE_HARFBUZZ']:
-+ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']]
++ SOURCES['nsContentUtils.cpp'].flags += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+
EXTRA_COMPONENTS += [
'contentAreaDropListener.js',
'contentAreaDropListener.manifest',
+diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh
+index f3d76ea..a9e7fb6 100644
+--- gfx/graphite2/moz-gr-update.sh
++++ gfx/graphite2/moz-gr-update.sh
+@@ -23,8 +23,14 @@ echo "\nSee" $0 "for update procedure.\n" >> gfx/graphite2/README.mozilla
+ find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+ find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+
++# closest tag/release to require for system version
++TAG=$(cd ../graphitedev/ && hg parents --template {latesttag})
++
++perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$TAG/ and tr/./,/ \
++ if /GR2_VERSION_REQUIRE/" configure.in
++
+ # summarize what's been touched
+-echo Updated to $CHANGESET.
++echo Updated to $CHANGESET \($TAG for --with-system-graphite2\)
+ echo Here is what changed in the gfx/graphite2 directory:
+ echo
+
+diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla
+index ca57d16..1ce21fe 100644
+--- gfx/harfbuzz/README-mozilla
++++ gfx/harfbuzz/README-mozilla
+@@ -21,3 +21,8 @@ In addition, the src/Makefile.in file here is NOT from upstream, nor is it
+ generated from src/Makefile.am (the original harfbuzz version); it is a mozilla-
+ specific makefile that is maintained by hand. It should only need updating when
+ new source files or exported headers are added in harfbuzz.
++
++The in-tree copy may be omitted during build by --with-system-harfbuzz.
++Make sure to keep pkg-config version check within configure.in in sync
++with checkout version or increment latest tag by one if it's not based
++on upstream release.
diff --git gfx/moz.build gfx/moz.build
index 519aa46..6929751 100644
--- gfx/moz.build
@@ -126,83 +156,87 @@ index 519aa46..6929751 100644
'ots/src',
'thebes',
'ipc',
-diff --git gfx/skia/Makefile.in gfx/skia/Makefile.in
-index ee0efb2..98e169d6f 100644
---- gfx/skia/Makefile.in
-+++ gfx/skia/Makefile.in
-@@ -15,6 +15,10 @@ ifeq (qt,$(MOZ_WIDGET_TOOLKIT))
- OS_CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(MOZ_PANGO_CFLAGS) $(CAIRO_FT_CFLAGS)
- endif
+diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py
+index 28fa6b5..240dced 100755
+--- gfx/skia/generate_mozbuild.py
++++ gfx/skia/generate_mozbuild.py
+@@ -140,6 +140,9 @@ if CONFIG['GNU_CXX']:
+ if not CONFIG['CLANG_CXX']:
+ CXXFLAGS += ['-Wno-logical-op']
-+ifdef MOZ_NATIVE_HARFBUZZ
-+OS_CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- include $(topsrcdir)/config/rules.mk
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff --git gfx/skia/moz.build gfx/skia/moz.build
+index 1d0c2f9..adb8941 100644
+--- gfx/skia/moz.build
++++ gfx/skia/moz.build
+@@ -968,6 +968,9 @@ if CONFIG['GNU_CXX']:
+ if not CONFIG['CLANG_CXX']:
+ CXXFLAGS += ['-Wno-logical-op']
- ifeq ($(CPU_ARCH)_$(GNU_CC),arm_1)
-diff --git gfx/thebes/Makefile.in gfx/thebes/Makefile.in
-index 45c36ae..79d32cf 100644
---- gfx/thebes/Makefile.in
-+++ gfx/thebes/Makefile.in
-@@ -13,6 +13,14 @@ DEFINES := $(filter-out -DUNICODE,$(DEFINES))
- CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)
- CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff --git gfx/thebes/moz.build gfx/thebes/moz.build
+index d5852fa..aeeab25 100644
+--- gfx/thebes/moz.build
++++ gfx/thebes/moz.build
+@@ -278,6 +278,12 @@ CXXFLAGS += CONFIG['TK_CFLAGS']
+ CFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CFLAGS += CONFIG['TK_CFLAGS']
-+ifdef MOZ_NATIVE_GRAPHITE2
-+CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- ifeq ($(MOZ_WIDGET_TOOLKIT),android)
- CXXFLAGS += $(CAIRO_FT_CFLAGS)
- endif
-diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in
-index f6b9f7c..60863f4 100644
---- intl/unicharutil/util/Makefile.in
-+++ intl/unicharutil/util/Makefile.in
-@@ -21,3 +21,7 @@ ifdef _MSC_VER
- OS_COMPILE_CXXFLAGS += -Zl
- OS_COMPILE_CFLAGS += -Zl
- endif
-+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in
-index 1cacbd7..f5d72bb 100644
---- netwerk/dns/Makefile.in
-+++ netwerk/dns/Makefile.in
-@@ -5,6 +5,10 @@
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
- include $(topsrcdir)/config/rules.mk
+diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build
+index d736943..41a931f 100644
+--- intl/unicharutil/util/moz.build
++++ intl/unicharutil/util/moz.build
+@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']:
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- # Generate the include file containing compact, static definitions
- # for effective TLD data.
- etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+ if CONFIG['ENABLE_INTL_API']:
+ CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+diff --git netwerk/dns/moz.build netwerk/dns/moz.build
+index 0b0717a..2e665c9 100644
+--- netwerk/dns/moz.build
++++ netwerk/dns/moz.build
+@@ -64,3 +64,6 @@ GENERATED_FILES = [
+ LOCAL_INCLUDES += [
+ '/netwerk/base',
+ ]
++
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index 67f0db9..d42137a 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN
- EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS)
- endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -187,6 +187,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ if not CONFIG['MOZ_TREE_PIXMAN']:
+ OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS']
-+ifdef MOZ_NATIVE_GRAPHITE2
-+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS)
-+endif
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS']
+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+EXTRA_DSO_LDOPTS += $(MOZ_HARFBUZZ_LIBS)
-+endif
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
+
- ifdef MOZ_DMD
- EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,dmd,$(DIST)/lib)
- endif
+ if CONFIG['MOZ_OSS']:
+ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
diff --git a/www/firefox-esr/files/patch-bug858919 b/www/firefox-esr/files/patch-bug858919
deleted file mode 100644
index 2354cd340145..000000000000
--- a/www/firefox-esr/files/patch-bug858919
+++ /dev/null
@@ -1,391 +0,0 @@
-commit a33d4f7
-Author: Martin Stransky <stransky@redhat.com>
-Date: Fri Nov 14 04:04:00 2014 +0100
-
- Bug 858919 - Add support for libnotify calls which was removed for new notification API. r=karlt
----
- toolkit/components/alerts/nsAlertsService.cpp | 10 +--
- toolkit/system/gnome/moz.build | 2 +
- toolkit/system/gnome/nsAlertsIconListener.cpp | 64 ++++++++++++------
- toolkit/system/gnome/nsAlertsIconListener.h | 89 ++++++++++++++++++++++++++
- toolkit/system/gnome/nsGnomeModule.cpp | 5 ++
- toolkit/system/gnome/nsSystemAlertsService.cpp | 54 ++++++++++++++++
- toolkit/system/gnome/nsSystemAlertsService.h | 27 ++++++++
- 7 files changed, 226 insertions(+), 25 deletions(-)
-
-diff --git toolkit/components/alerts/nsAlertsService.cpp toolkit/components/alerts/nsAlertsService.cpp
-index 93f4536..f8b5e07 100644
---- toolkit/components/alerts/nsAlertsService.cpp
-+++ toolkit/components/alerts/nsAlertsService.cpp
-@@ -100,9 +100,11 @@ NS_IMETHODIMP nsAlertsService::ShowAlertNotification(const nsAString & aImageUrl
- nsCOMPtr<nsIAlertsService> sysAlerts(do_GetService(NS_SYSTEMALERTSERVICE_CONTRACTID));
- nsresult rv;
- if (sysAlerts) {
-- return sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-- aAlertCookie, aAlertListener, aAlertName,
-- aBidi, aLang, IPC::Principal(aPrincipal));
-+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-+ aAlertCookie, aAlertListener, aAlertName,
-+ aBidi, aLang, IPC::Principal(aPrincipal));
-+ if (NS_SUCCEEDED(rv))
-+ return NS_OK;
- }
-
- if (!ShouldShowAlert()) {
-diff --git toolkit/system/gnome/moz.build toolkit/system/gnome/moz.build
-index c033f8b..9242209 100644
---- toolkit/system/gnome/moz.build
-+++ toolkit/system/gnome/moz.build
-@@ -5,7 +5,9 @@
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
- SOURCES += [
-+ 'nsAlertsIconListener.cpp',
- 'nsGnomeModule.cpp',
-+ 'nsSystemAlertsService.cpp',
- ]
-
- if CONFIG['MOZ_ENABLE_GCONF']:
-diff --git toolkit/system/gnome/nsAlertsIconListener.cpp toolkit/system/gnome/nsAlertsIconListener.cpp
-index f39335e..55f4356 100644
---- toolkit/system/gnome/nsAlertsIconListener.cpp
-+++ toolkit/system/gnome/nsAlertsIconListener.cpp
-@@ -51,6 +51,21 @@ static void notify_closed_marshal(GClosure* closure,
- NS_RELEASE(alert);
- }
-
-+static GdkPixbuf*
-+GetPixbufFromImgRequest(imgIRequest* aRequest)
-+{
-+ nsCOMPtr<imgIContainer> image;
-+ nsresult rv = aRequest->GetImage(getter_AddRefs(image));
-+ if (NS_FAILED(rv)) {
-+ return nullptr;
-+ }
-+
-+ nsCOMPtr<nsIImageToPixbuf> imgToPixbuf =
-+ do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1");
-+
-+ return imgToPixbuf->ConvertImageToPixbuf(image);
-+}
-+
- NS_IMPL_ISUPPORTS(nsAlertsIconListener, imgINotificationObserver,
- nsIObserver, nsISupportsWeakReference)
-
-@@ -106,47 +121,45 @@ nsAlertsIconListener::Notify(imgIRequest *aRequest, int32_t aType, const nsIntRe
- nsresult
- nsAlertsIconListener::OnStopRequest(imgIRequest* aRequest)
- {
-+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!");
-+
- uint32_t imgStatus = imgIRequest::STATUS_ERROR;
- nsresult rv = aRequest->GetImageStatus(&imgStatus);
- NS_ENSURE_SUCCESS(rv, rv);
- if (imgStatus == imgIRequest::STATUS_ERROR && !mLoadedFrame) {
- // We have an error getting the image. Display the notification with no icon.
- ShowAlert(nullptr);
-- }
-
-- if (mIconRequest) {
-+ // Cancel any pending request
- mIconRequest->Cancel(NS_BINDING_ABORTED);
- mIconRequest = nullptr;
- }
-+
- return NS_OK;
- }
-
- nsresult
- nsAlertsIconListener::OnStopFrame(imgIRequest* aRequest)
- {
-- if (aRequest != mIconRequest)
-- return NS_ERROR_FAILURE;
-+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!");
-
- if (mLoadedFrame)
- return NS_OK; // only use one frame
-
-- nsCOMPtr<imgIContainer> image;
-- nsresult rv = aRequest->GetImage(getter_AddRefs(image));
-- if (NS_FAILED(rv))
-- return rv;
--
-- nsCOMPtr<nsIImageToPixbuf> imgToPixbuf =
-- do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1");
--
-- GdkPixbuf* imagePixbuf = imgToPixbuf->ConvertImageToPixbuf(image);
-- if (!imagePixbuf)
-- return NS_ERROR_FAILURE;
-+ GdkPixbuf* imagePixbuf = GetPixbufFromImgRequest(aRequest);
-+ if (!imagePixbuf) {
-+ ShowAlert(nullptr);
-+ } else {
-+ ShowAlert(imagePixbuf);
-+ g_object_unref(imagePixbuf);
-+ }
-
-- ShowAlert(imagePixbuf);
-+ mLoadedFrame = true;
-
-- g_object_unref(imagePixbuf);
-+ // Cancel any pending request (multipart image loading/decoding for instance)
-+ mIconRequest->Cancel(NS_BINDING_ABORTED);
-+ mIconRequest = nullptr;
-
-- mLoadedFrame = true;
- return NS_OK;
- }
-
-@@ -180,6 +193,9 @@ nsAlertsIconListener::ShowAlert(GdkPixbuf* aPixbuf)
- mClosureHandler = g_signal_connect_closure(mNotification, "closed", closure, FALSE);
- gboolean result = notify_notification_show(mNotification, nullptr);
-
-+ if (result && mAlertListener)
-+ mAlertListener->Observe(nullptr, "alertshow", mAlertCookie.get());
-+
- return result ? NS_OK : NS_ERROR_FAILURE;
- }
-
-@@ -201,9 +217,15 @@ nsAlertsIconListener::StartRequest(const nsAString & aImageUrl)
- if (!il)
- return ShowAlert(nullptr);
-
-- return il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr,
-- this, nullptr, nsIRequest::LOAD_NORMAL, nullptr,
-- nullptr, getter_AddRefs(mIconRequest));
-+ nsresult rv = il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr,
-+ this, nullptr, nsIRequest::LOAD_NORMAL, nullptr,
-+ 0 /* use default */, getter_AddRefs(mIconRequest));
-+ if (NS_FAILED(rv))
-+ return rv;
-+
-+ mIconRequest->StartDecoding();
-+
-+ return NS_OK;
- }
-
- void
-diff --git toolkit/system/gnome/nsAlertsIconListener.h toolkit/system/gnome/nsAlertsIconListener.h
-new file mode 100644
-index 0000000..ac96db9
---- /dev/null
-+++ toolkit/system/gnome/nsAlertsIconListener.h
-@@ -0,0 +1,89 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#ifndef nsAlertsIconListener_h__
-+#define nsAlertsIconListener_h__
-+
-+#include "nsCOMPtr.h"
-+#include "imgINotificationObserver.h"
-+#include "nsStringAPI.h"
-+#include "nsIObserver.h"
-+#include "nsWeakReference.h"
-+
-+#include <gdk-pixbuf/gdk-pixbuf.h>
-+
-+class imgIRequest;
-+
-+struct NotifyNotification;
-+
-+class nsAlertsIconListener : public imgINotificationObserver,
-+ public nsIObserver,
-+ public nsSupportsWeakReference
-+{
-+public:
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_IMGINOTIFICATIONOBSERVER
-+ NS_DECL_NSIOBSERVER
-+
-+ nsAlertsIconListener();
-+
-+ nsresult InitAlertAsync(const nsAString & aImageUrl,
-+ const nsAString & aAlertTitle,
-+ const nsAString & aAlertText,
-+ bool aAlertTextClickable,
-+ const nsAString & aAlertCookie,
-+ nsIObserver * aAlertListener);
-+
-+ void SendCallback();
-+ void SendClosed();
-+
-+protected:
-+ virtual ~nsAlertsIconListener();
-+
-+ nsresult OnStopRequest(imgIRequest* aRequest);
-+ nsresult OnStopFrame(imgIRequest* aRequest);
-+
-+ /**
-+ * The only difference between libnotify.so.4 and libnotify.so.1 for these symbols
-+ * is that notify_notification_new takes three arguments in libnotify.so.4 and
-+ * four in libnotify.so.1.
-+ * Passing the fourth argument as NULL is binary compatible.
-+ */
-+ typedef void (*NotifyActionCallback)(NotifyNotification*, char*, gpointer);
-+ typedef bool (*notify_is_initted_t)(void);
-+ typedef bool (*notify_init_t)(const char*);
-+ typedef GList* (*notify_get_server_caps_t)(void);
-+ typedef NotifyNotification* (*notify_notification_new_t)(const char*, const char*, const char*, const char*);
-+ typedef bool (*notify_notification_show_t)(void*, char*);
-+ typedef void (*notify_notification_set_icon_from_pixbuf_t)(void*, GdkPixbuf*);
-+ typedef void (*notify_notification_add_action_t)(void*, const char*, const char*, NotifyActionCallback, gpointer, GFreeFunc);
-+
-+ nsCOMPtr<imgIRequest> mIconRequest;
-+ nsCString mAlertTitle;
-+ nsCString mAlertText;
-+
-+ nsCOMPtr<nsIObserver> mAlertListener;
-+ nsString mAlertCookie;
-+
-+ bool mLoadedFrame;
-+ bool mAlertHasAction;
-+
-+ static void* libNotifyHandle;
-+ static bool libNotifyNotAvail;
-+ static notify_is_initted_t notify_is_initted;
-+ static notify_init_t notify_init;
-+ static notify_get_server_caps_t notify_get_server_caps;
-+ static notify_notification_new_t notify_notification_new;
-+ static notify_notification_show_t notify_notification_show;
-+ static notify_notification_set_icon_from_pixbuf_t notify_notification_set_icon_from_pixbuf;
-+ static notify_notification_add_action_t notify_notification_add_action;
-+ NotifyNotification* mNotification;
-+ gulong mClosureHandler;
-+
-+ nsresult StartRequest(const nsAString & aImageUrl);
-+ nsresult ShowAlert(GdkPixbuf* aPixbuf);
-+};
-+
-+#endif
-diff --git toolkit/system/gnome/nsGnomeModule.cpp toolkit/system/gnome/nsGnomeModule.cpp
-index 5ccc8e5..f893893 100644
---- toolkit/system/gnome/nsGnomeModule.cpp
-+++ toolkit/system/gnome/nsGnomeModule.cpp
-@@ -22,6 +22,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init)
- NS_GENERIC_FACTORY_CONSTRUCTOR(nsGIOService)
- NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGSettingsService, Init)
- #endif
-+#include "nsSystemAlertsService.h"
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemAlertsService, Init)
-
- #ifdef MOZ_ENABLE_GCONF
- NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID);
-@@ -33,6 +35,7 @@ NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID);
- #endif
-+NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID);
-
- static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- #ifdef MOZ_ENABLE_GCONF
-@@ -45,6 +48,7 @@ static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor },
- { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor },
- #endif
-+ { &kNS_SYSTEMALERTSSERVICE_CID, false, nullptr, nsSystemAlertsServiceConstructor },
- { nullptr }
- };
-
-@@ -59,6 +63,7 @@ static const mozilla::Module::ContractIDEntry kGnomeContracts[] = {
- { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID },
- { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID },
- #endif
-+ { NS_SYSTEMALERTSERVICE_CONTRACTID, &kNS_SYSTEMALERTSSERVICE_CID },
- { nullptr }
- };
-
-diff --git toolkit/system/gnome/nsSystemAlertsService.cpp toolkit/system/gnome/nsSystemAlertsService.cpp
-new file mode 100644
-index 0000000..b91b402
---- /dev/null
-+++ toolkit/system/gnome/nsSystemAlertsService.cpp
-@@ -0,0 +1,53 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode:nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#include "nsXULAppAPI.h"
-+#include "nsSystemAlertsService.h"
-+#include "nsAlertsIconListener.h"
-+#include "nsAutoPtr.h"
-+
-+NS_IMPL_ADDREF(nsSystemAlertsService)
-+NS_IMPL_RELEASE(nsSystemAlertsService)
-+
-+NS_INTERFACE_MAP_BEGIN(nsSystemAlertsService)
-+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAlertsService)
-+ NS_INTERFACE_MAP_ENTRY(nsIAlertsService)
-+NS_INTERFACE_MAP_END_THREADSAFE
-+
-+nsSystemAlertsService::nsSystemAlertsService()
-+{
-+}
-+
-+nsSystemAlertsService::~nsSystemAlertsService()
-+{}
-+
-+nsresult
-+nsSystemAlertsService::Init()
-+{
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP nsSystemAlertsService::ShowAlertNotification(const nsAString & aImageUrl, const nsAString & aAlertTitle,
-+ const nsAString & aAlertText, bool aAlertTextClickable,
-+ const nsAString & aAlertCookie,
-+ nsIObserver * aAlertListener,
-+ const nsAString & aAlertName,
-+ const nsAString & aBidi,
-+ const nsAString & aLang,
-+ nsIPrincipal * aPrincipal)
-+{
-+ nsRefPtr<nsAlertsIconListener> alertListener = new nsAlertsIconListener();
-+ if (!alertListener)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+
-+ return alertListener->InitAlertAsync(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-+ aAlertCookie, aAlertListener);
-+}
-+
-+NS_IMETHODIMP nsSystemAlertsService::CloseAlert(const nsAString& aAlertName,
-+ nsIPrincipal* aPrincipal)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-diff --git toolkit/system/gnome/nsSystemAlertsService.h toolkit/system/gnome/nsSystemAlertsService.h
-new file mode 100644
-index 0000000..b0bd625
---- /dev/null
-+++ toolkit/system/gnome/nsSystemAlertsService.h
-@@ -0,0 +1,27 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#ifndef nsSystemAlertsService_h__
-+#define nsSystemAlertsService_h__
-+
-+#include "nsIAlertsService.h"
-+#include "nsCOMPtr.h"
-+
-+class nsSystemAlertsService : public nsIAlertsService
-+{
-+public:
-+ NS_DECL_NSIALERTSSERVICE
-+ NS_DECL_ISUPPORTS
-+
-+ nsSystemAlertsService();
-+
-+ nsresult Init();
-+
-+protected:
-+ virtual ~nsSystemAlertsService();
-+
-+};
-+
-+#endif /* nsSystemAlertsService_h__ */
diff --git a/www/firefox-esr/files/patch-bug961264 b/www/firefox-esr/files/patch-bug961264
deleted file mode 100644
index 94fd84ce5cb6..000000000000
--- a/www/firefox-esr/files/patch-bug961264
+++ /dev/null
@@ -1,266 +0,0 @@
-commit d099acd
-Author: Trevor Saunders <trev.saunders@gmail.com>
-Date: Fri Jan 17 15:08:00 2014 -0800
-
- Bug 961264 - Remove obsolete checks for gcc visibility stuff.
----
- configure.in | 115 +++-------------------------------------------------
- js/src/configure.in | 111 ++------------------------------------------------
- 2 files changed, 8 insertions(+), 218 deletions(-)
-
-diff --git configure.in configure.in
-index dfb8193..33d71b3 100644
---- configure.in
-+++ configure.in
-@@ -2507,118 +2507,15 @@ MOZ_CXX11
-
- AC_LANG_C
-
--dnl Check for .hidden assembler directive and visibility attribute.
--dnl Borrowed from glibc configure.in
-+dnl Setup default hidden visibility and wrapped system headers.
- dnl ===============================================================
- if test "$GNU_CC"; then
-- AC_CACHE_CHECK(for visibility(hidden) attribute,
-- ac_cv_visibility_hidden,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("hidden"))) = 1;
--EOF
-- ac_cv_visibility_hidden=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_hidden=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_hidden" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility(default) attribute,
-- ac_cv_visibility_default,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("default"))) = 1;
--EOF
-- ac_cv_visibility_default=no
-- if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_default=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_default" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility pragma support,
-- ac_cv_visibility_pragma,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
-- int foo_hidden = 1;
--#pragma GCC visibility push(default)
-- int foo_default = 1;
--EOF
-- ac_cv_visibility_pragma=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
-- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
-- ac_cv_visibility_pragma=yes
-- fi
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_pragma" = "yes"; then
-- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
-- ac_cv_have_visibility_class_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--struct __attribute__ ((visibility ("default"))) TestStruct {
-- static void Init();
--};
--__attribute__ ((visibility ("default"))) void TestFunc() {
-- TestStruct::Init();
--}
--EOF
-- ac_cv_have_visibility_class_bug=no
-- if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_class_bug=yes
-- else
-- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
-- ac_cv_have_visibility_class_bug=yes
-- fi
-- fi
-- rm -rf conftest.{c,S}
-- ])
--
-- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
-- ac_cv_have_visibility_builtin_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--#pragma GCC visibility push(default)
--#include <string.h>
--#pragma GCC visibility pop
--
--__attribute__ ((visibility ("default"))) void Func() {
-- char c[[100]];
-- memset(c, 0, sizeof(c));
--}
--EOF
-- ac_cv_have_visibility_builtin_bug=no
-- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_builtin_bug=yes
-- else
-- if test `grep -c "@PLT" conftest.S` = 0; then
-- ac_cv_visibility_builtin_bug=yes
-- fi
-- fi
-- rm -f conftest.{c,S}
-- ])
-- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
-- "$ac_cv_have_visibility_class_bug" = "no"; then
-- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-- WRAP_SYSTEM_INCLUDES=1
-- STL_FLAGS='-I$(DIST)/stl_wrappers'
-- WRAP_STL_INCLUDES=1
-- else
-- VISIBILITY_FLAGS='-fvisibility=hidden'
-- fi # have visibility pragma bug
-- fi # have visibility pragma
-- fi # have visibility(default) attribute
-- fi # have visibility(hidden) attribute
-+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
-+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
-+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-+ WRAP_SYSTEM_INCLUDES=1
-+ STL_FLAGS='-I$(DIST)/stl_wrappers'
-+ WRAP_STL_INCLUDES=1
- fi # GNU_CC
-
- # visibility hidden flag for Sun Studio on Solaris
-diff --git js/src/configure.in js/src/configure.in
-index bddd46d..d4b522e 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS
-
- MOZ_CXX11
-
--dnl Check for .hidden assembler directive and visibility attribute.
--dnl Borrowed from glibc configure.in
-+dnl Setup default hidden visibility and wrapped system headers.
- dnl ===============================================================
- if test "$GNU_CC"; then
-- AC_CACHE_CHECK(for visibility(hidden) attribute,
-- ac_cv_visibility_hidden,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("hidden"))) = 1;
--EOF
-- ac_cv_visibility_hidden=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_hidden=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_hidden" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility(default) attribute,
-- ac_cv_visibility_default,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("default"))) = 1;
--EOF
-- ac_cv_visibility_default=no
-- if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_default=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_default" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility pragma support,
-- ac_cv_visibility_pragma,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
-- int foo_hidden = 1;
--#pragma GCC visibility push(default)
-- int foo_default = 1;
--EOF
-- ac_cv_visibility_pragma=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
-- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
-- ac_cv_visibility_pragma=yes
-- fi
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_pragma" = "yes"; then
-- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
-- ac_cv_have_visibility_class_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--struct __attribute__ ((visibility ("default"))) TestStruct {
-- static void Init();
--};
--__attribute__ ((visibility ("default"))) void TestFunc() {
-- TestStruct::Init();
--}
--EOF
-- ac_cv_have_visibility_class_bug=no
-- if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_class_bug=yes
-- else
-- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
-- ac_cv_have_visibility_class_bug=yes
-- fi
-- fi
-- rm -rf conftest.{c,S}
-- ])
--
-- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
-- ac_cv_have_visibility_builtin_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--#pragma GCC visibility push(default)
--#include <string.h>
--#pragma GCC visibility pop
--
--__attribute__ ((visibility ("default"))) void Func() {
-- char c[[100]];
-- memset(c, 0, sizeof(c));
--}
--EOF
-- ac_cv_have_visibility_builtin_bug=no
-- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_builtin_bug=yes
-- else
-- if test `grep -c "@PLT" conftest.S` = 0; then
-- ac_cv_visibility_builtin_bug=yes
-- fi
-- fi
-- rm -f conftest.{c,S}
-- ])
-- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
-- "$ac_cv_have_visibility_class_bug" = "no"; then
-- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-- WRAP_SYSTEM_INCLUDES=1
-- else
-- VISIBILITY_FLAGS='-fvisibility=hidden'
-- fi # have visibility pragma bug
-- fi # have visibility pragma
-- fi # have visibility(default) attribute
-- fi # have visibility(hidden) attribute
-+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
-+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
-+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-+ WRAP_SYSTEM_INCLUDES=1
- fi # GNU_CC
-
- # visibility hidden flag for Sun Studio on Solaris
diff --git a/www/firefox-esr/files/patch-ijg-libjpeg b/www/firefox-esr/files/patch-ijg-libjpeg
index 406bb1627d6e..f3378046dd32 100644
--- a/www/firefox-esr/files/patch-ijg-libjpeg
+++ b/www/firefox-esr/files/patch-ijg-libjpeg
@@ -28,7 +28,7 @@ index 8fa8200..1d2a259 100644
-}
+#ifdef JCS_EXTENSIONS
- #if defined(IS_BIG_ENDIAN)
+ #if MOZ_BIG_ENDIAN
#define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB
#else
#define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX
@@ -51,26 +51,26 @@ index 8fa8200..1d2a259 100644
static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width);
-@@ -324,6 +340,7 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- case JCS_GRAYSCALE:
- case JCS_RGB:
- case JCS_YCbCr:
+@@ -367,6 +382,7 @@ nsJPEGDecoder::WriteInternal(const char*
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
+#ifdef JCS_EXTENSIONS
- // if we're not color managing we can decode directly to
- // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB
- if (mCMSMode != eCMSMode_All) {
-@@ -332,6 +349,9 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- } else {
- mInfo.out_color_space = JCS_RGB;
- }
+ // if we're not color managing we can decode directly to
+ // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB
+ if (mCMSMode != eCMSMode_All) {
+@@ -375,6 +391,9 @@ nsJPEGDecoder::WriteInternal(const char*
+ } else {
+ mInfo.out_color_space = JCS_RGB;
+ }
+#else
-+ mInfo.out_color_space = JCS_RGB;
++ mInfo.out_color_space = JCS_RGB;
+#endif
- break;
- case JCS_CMYK:
- case JCS_YCCK:
-@@ -399,6 +419,15 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- return; /* I/O suspension */
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
+@@ -433,6 +452,15 @@ nsJPEGDecoder::WriteInternal(const char*
+ return; // I/O suspension
}
+#ifndef JCS_EXTENSIONS
@@ -83,10 +83,10 @@ index 8fa8200..1d2a259 100644
+ }
+#endif
- /* If this is a progressive JPEG ... */
- mState = mInfo.buffered_image ? JPEG_DECOMPRESS_PROGRESSIVE : JPEG_DECOMPRESS_SEQUENTIAL;
-@@ -544,7 +573,11 @@ nsJPEGDecoder::OutputScanlines(bool* suspend)
- uint32_t *imageRow = ((uint32_t*)mImageData) +
+ // If this is a progressive JPEG ...
+ mState = mInfo.buffered_image ?
+@@ -605,7 +633,11 @@ nsJPEGDecoder::OutputScanlines(bool* sus
+ uint32_t* imageRow = ((uint32_t*)mImageData) +
(mInfo.output_scanline * mInfo.output_width);
+#ifdef JCS_EXTENSIONS
@@ -94,10 +94,10 @@ index 8fa8200..1d2a259 100644
+#else
+ if (mInfo.cconvert->color_convert == ycc_rgb_convert_argb) {
+#endif
- /* Special case: scanline will be directly converted into packed ARGB */
+ // Special case: scanline will be directly converted into packed ARGB
if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) {
- *suspend = true; /* suspend */
-@@ -854,6 +887,282 @@ term_source (j_decompress_ptr jd)
+ *suspend = true; // suspend
+@@ -920,6 +952,282 @@ term_source (j_decompress_ptr jd)
} // namespace mozilla
@@ -377,6 +377,6 @@ index 8fa8200..1d2a259 100644
+#endif
+
+
- /**************** Inverted CMYK -> RGB conversion **************/
- /*
- * Input is (Inverted) CMYK stored as 4 bytes per pixel.
+ ///*************** Inverted CMYK -> RGB conversion *************************
+ /// Input is (Inverted) CMYK stored as 4 bytes per pixel.
+ /// Output is RGB stored as 3 bytes per pixel.
diff --git a/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp b/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp
new file mode 100644
index 000000000000..530902b13393
--- /dev/null
+++ b/www/firefox-esr/files/patch-media-libstagefright-foundation-AString.cpp
@@ -0,0 +1,16 @@
+--- media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp~
++++ media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp
+@@ -23,6 +23,13 @@
+ #include "ADebug.h"
+ #include "AString.h"
+
++#ifdef __FreeBSD__
++# include <osreldate.h>
++# if __FreeBSD_version < 900506
++# undef tolower
++# endif
++#endif
++
+ namespace stagefright {
+
+ // static
diff --git a/www/firefox-esr/files/patch-system-openh264 b/www/firefox-esr/files/patch-system-openh264
new file mode 100644
index 000000000000..e694b28f436e
--- /dev/null
+++ b/www/firefox-esr/files/patch-system-openh264
@@ -0,0 +1,239 @@
+# Revert bug 1045209 to allow using absolute path
+
+diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp
+index 1dde3ac..12c88cf 100644
+--- dom/media/gmp/GMPChild.cpp
++++ dom/media/gmp/GMPChild.cpp
+@@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa
+ }
+ #endif
+
+- nsCOMPtr<nsIFile> parent;
+- rv = aFileBase->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return false;
+- }
+-
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
+- if (NS_FAILED(rv)) {
++ nsAutoString leafName;
++ if (NS_FAILED(aFileBase->GetLeafName(leafName))) {
+ return false;
+ }
+
+- aBaseName = Substring(parentLeafName,
++ aBaseName = Substring(leafName,
+ 4,
+- parentLeafName.Length() - 1);
++ leafName.Length() - 1);
+ return true;
+ }
+
+diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp
+index aa60acf..90878ca 100644
+--- dom/media/gmp/GMPParent.cpp
++++ dom/media/gmp/GMPParent.cpp
+@@ -90,23 +90,16 @@
+ mService = aService;
+ mDirectory = aPluginDir;
+
+- // aPluginDir is <profile-dir>/<gmp-plugin-id>/<version>
+- // where <gmp-plugin-id> should be gmp-gmpopenh264
+- nsCOMPtr<nsIFile> parent;
+- nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return rv;
+- }
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
++ nsAutoString leafname;
++ nsresult rv = aPluginDir->GetLeafName(leafname);
+ if (NS_FAILED(rv)) {
+ return rv;
+ }
+ LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this,
+- NS_LossyConvertUTF16toASCII(parentLeafName).get()));
++ NS_LossyConvertUTF16toASCII(leafname).get()));
+
+- MOZ_ASSERT(parentLeafName.Length() > 4);
+- mName = Substring(parentLeafName, 4);
++ MOZ_ASSERT(leafname.Length() > 4);
++ mName = Substring(leafname, 4);
+
+ return ReadGMPMetaData();
+ }
+diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm
+index 9593492..470384b 100644
+--- toolkit/modules/GMPInstallManager.jsm
++++ toolkit/modules/GMPInstallManager.jsm
+@@ -888,9 +889,7 @@
+ let gmpAddon = this._gmpAddon;
+ let installToDirPath = Cc["@mozilla.org/file/local;1"].
+ createInstance(Ci.nsIFile);
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- gmpAddon.id,
+- gmpAddon.version);
++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id);
+ installToDirPath.initWithPath(path);
+ log.info("install to directory path: " + installToDirPath.path);
+ let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path);
+@@ -885,10 +883,12 @@
+ // Success, set the prefs
+ let now = Math.round(Date.now() / 1000);
+ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id);
+- // Setting the version pref signals installation completion to consumers,
+- // if you need to set other prefs etc. do it before this.
++ // Setting the path pref signals installation completion to consumers,
++ // so set the version and potential other information they use first.
+ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version,
+ gmpAddon.id);
++ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH,
++ installToDirPath.path, gmpAddon.id);
+ this._deferred.resolve(extractedPaths);
+ }, err => {
+ this._deferred.reject(err);
+diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm
+index 1f3a0b1..93517be 100644
+--- toolkit/modules/GMPUtils.jsm
++++ toolkit/modules/GMPUtils.jsm
+@@ -70,6 +70,7 @@ this.GMPPrefs = {
+ KEY_EME_ENABLED: "media.eme.enabled",
+ KEY_PLUGIN_ENABLED: "media.{0}.enabled",
+ KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate",
++ KEY_PLUGIN_PATH: "media.{0}.path",
+ KEY_PLUGIN_VERSION: "media.{0}.version",
+ KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate",
+ KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible",
+diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm
+index 1f3a0b1..93517be 100644
+--- toolkit/mozapps/extensions/internal/GMPProvider.jsm
++++ toolkit/mozapps/extensions/internal/GMPProvider.jsm
+@@ -100,12 +100,11 @@
+ Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP",
+ "GMPWrapper(" +
+ this._plugin.id + ") ");
+- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
+- this._plugin.id),
++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id),
+ this.onPrefEnabledChanged, this);
+- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH,
+ this._plugin.id),
+- this.onPrefVersionChanged, this);
++ this.onPrefPathChanged, this);
+ if (this._plugin.isEME) {
+ Preferences.observe(GMPPrefs.KEY_EME_ENABLED,
+ this.onPrefEMEGlobalEnabledChanged, this);
+@@ -120,17 +119,14 @@
+ optionsType: AddonManager.OPTIONS_TYPE_INLINE,
+ get optionsURL() { return this._plugin.optionsURL; },
+
++
+ set gmpPath(aPath) { this._gmpPath = aPath; },
+ get gmpPath() {
+- if (!this._gmpPath && this.isInstalled) {
+- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
+- null, this._plugin.id));
++ if (!this._gmpPath) {
++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
+ }
+ return this._gmpPath;
+ },
+-
+ get id() { return this._plugin.id; },
+ get type() { return "plugin"; },
+ get isGMPlugin() { return true; },
+@@ -141,8 +137,13 @@
+ get description() { return this._plugin.description; },
+ get fullDescription() { return this._plugin.fullDescription; },
+
+- get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null,
+- this._plugin.id); },
++ get version() {
++ if (this.isInstalled) {
++ return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null,
++ this._plugin.id);
++ }
++ return null;
++ },
+
+ get isActive() { return !this.appDisabled && !this.userDisabled; },
+ get appDisabled() {
+@@ -289,24 +290,17 @@
+
+ get pluginMimeTypes() { return []; },
+ get pluginLibraries() {
+- if (this.isInstalled) {
+- let path = this.version;
+- return [path];
+- }
+- return [];
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length ? [OS.Path.basename(path)] : [];
+ },
+ get pluginFullpath() {
+- if (this.isInstalled) {
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- this.version);
+- return [path];
+- }
+- return [];
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length ? [path] : [];
+ },
+
+ get isInstalled() {
+- return this.version && this.version.length > 0;
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length > 0;
+ },
+
+ _handleEnabledChanged: function() {
+@@ -362,10 +356,10 @@
+ }
+ },
+
+- onPrefVersionChanged: function() {
++ onPrefPathChanged: function() {
+ AddonManagerPrivate.callAddonListeners("onUninstalling", this, false);
+ if (this._gmpPath) {
+- this._log.info("onPrefVersionChanged() - unregistering gmp directory " +
++ this._log.info("onPrefPathChanged() - unregistering gmp directory " +
+ this._gmpPath);
+ gmpService.removePluginDirectory(this._gmpPath);
+ }
+@@ -374,15 +368,10 @@
+ AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this,
+ null, false);
+ AddonManagerPrivate.callAddonListeners("onInstalling", this, false);
+- this._gmpPath = null;
+- if (this.isInstalled) {
+- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
+- null, this._plugin.id));
+- }
++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH,
++ null, this._plugin.id);
+ if (this._gmpPath && this.isActive) {
+- this._log.info("onPrefVersionChanged() - registering gmp directory " +
++ this._log.info("onPrefPathChanged() - registering gmp directory " +
+ this._gmpPath);
+ gmpService.addPluginDirectory(this._gmpPath);
+ }
+@@ -393,9 +382,9 @@
+ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
+ this._plugin.id),
+ this.onPrefEnabledChanged, this);
+- Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
++ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH,
+ this._plugin.id),
+- this.onPrefVersionChanged, this);
++ this.onPrefPathChanged, this);
+ if (this._plugin.isEME) {
+ Preferences.ignore(GMPPrefs.KEY_EME_ENABLED,
+ this.onPrefEMEGlobalEnabledChanged, this);
diff --git a/www/firefox-esr/files/patch-z-bug517422 b/www/firefox-esr/files/patch-z-bug517422
index 1c0f0dd2aab8..0137e4858cf8 100644
--- a/www/firefox-esr/files/patch-z-bug517422
+++ b/www/firefox-esr/files/patch-z-bug517422
@@ -4,7 +4,7 @@ diff --git config/Makefile.in config/Makefile.in
index 5383399..0410004 100644
--- config/Makefile.in
+++ config/Makefile.in
-@@ -79,6 +79,13 @@ export:: $(export-preqs)
+@@ -77,6 +77,14 @@ export:: $(export-preqs)
-DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
-DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \
-DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \
@@ -12,6 +12,7 @@ index 5383399..0410004 100644
+ -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \
+ -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \
+ -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \
++ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \
+ -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \
+ -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \
+ -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \
@@ -22,14 +23,17 @@ diff --git config/external/moz.build config/external/moz.build
index f67c5c7..eb909ce 100644
--- config/external/moz.build
+++ config/external/moz.build
-@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']:
- if not CONFIG['MOZ_NATIVE_BZ2']:
- external_dirs += ['modules/libbz2']
+@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']:
+ # There's no "native brotli" yet, but probably in the future...
+ external_dirs += ['modules/brotli']
-if CONFIG['MOZ_VORBIS']:
+if not CONFIG['MOZ_NATIVE_OGG']:
+ external_dirs += ['media/libogg']
+
++if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']:
++ external_dirs += ['media/libopus']
++
+if not CONFIG['MOZ_NATIVE_THEORA']:
+ external_dirs += ['media/libtheora']
+
@@ -40,12 +44,8 @@ index f67c5c7..eb909ce 100644
+if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']:
external_dirs += ['media/libtremor']
--if CONFIG['MOZ_OPUS']:
-+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']:
- external_dirs += ['media/libopus']
-
if CONFIG['MOZ_WEBM']:
-@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']:
+@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ
if not CONFIG['MOZ_NATIVE_PNG']:
external_dirs += ['media/libpng']
@@ -59,35 +59,35 @@ index f67c5c7..eb909ce 100644
'media/kiss_fft',
'media/libcubeb',
- 'media/libogg',
+- 'media/libopus',
- 'media/libtheora',
- 'media/libspeex_resampler',
+ 'media/libstagefright',
- 'media/libsoundtouch',
]
- PARALLEL_DIRS += ['../../' + i for i in external_dirs]
+ DIRS += ['../../' + i for i in external_dirs]
diff --git config/system-headers config/system-headers
index bef567c..9807c29 100644
--- config/system-headers
+++ config/system-headers
-@@ -1050,8 +1050,6 @@ X11/Xutil.h
- xpt_struct.h
- xpt_xdr.h
+@@ -1263,7 +1263,6 @@ X11/Xlocale.h
+ X11/Xos.h
+ X11/Xutil.h
zmouse.h
--speex/speex_resampler.h
-soundtouch/SoundTouch.h
#if MOZ_NATIVE_PNG==1
png.h
#endif
-@@ -1119,6 +1117,8 @@ ogg/ogg.h
+@@ -1325,6 +1324,7 @@ vorbis/codec.h
+ theora/theoradec.h
+ tremor/ivorbiscodec.h
+ speex/speex_resampler.h
++soundtouch/SoundTouch.h
+ ogg/ogg.h
ogg/os_types.h
nestegg/nestegg.h
- cubeb/cubeb.h
-+speex/speex_resampler.h
-+soundtouch/SoundTouch.h
- #endif
- gst/gst.h
- gst/app/gstappsink.h
-@@ -1155,3 +1155,29 @@ graphite2/Segment.h
+@@ -1365,3 +1365,35 @@ graphite2/Segment.h
harfbuzz/hb-ot.h
harfbuzz/hb.h
#endif
@@ -105,6 +105,12 @@ index bef567c..9807c29 100644
+#if MOZ_NATIVE_TREMOR==1
+tremor/ivorbiscodec.h
+#endif
++#if MOZ_NATIVE_CELT==1
++celt.h
++celt_header.h
++celt/celt.h
++celt/celt_header.h
++#endif
+#if MOZ_NATIVE_OPUS==1
+opus.h
+opus_multistream.h
@@ -121,7 +127,7 @@ diff --git configure.in configure.in
index 87db361..7947626 100644
--- configure.in
+++ configure.in
-@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
+@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" !
fi
dnl ========================================================
@@ -144,8 +150,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_OGG)
-+AC_SUBST(MOZ_OGG_CFLAGS)
-+AC_SUBST(MOZ_OGG_LIBS)
+
+dnl ========================================================
+dnl Check for libvorbis
@@ -161,8 +165,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_VORBIS)
-+AC_SUBST(MOZ_VORBIS_CFLAGS)
-+AC_SUBST(MOZ_VORBIS_LIBS)
+
+dnl ========================================================
+dnl Check for integer-only libvorbis aka tremor
@@ -178,17 +180,25 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_TREMOR)
-+AC_SUBST(MOZ_TREMOR_CFLAGS)
-+AC_SUBST(MOZ_TREMOR_LIBS)
+
+dnl ========================================================
- dnl = Disable Opus audio codec support
- dnl ========================================================
- MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
- MOZ_OPUS=1)
-
- dnl ========================================================
++dnl Check for libcelt
++dnl ========================================================
++
++MOZ_ARG_WITH_BOOL(system-celt,
++[ --with-system-celt Use system libcelt (located with pkgconfig)],
++MOZ_NATIVE_CELT=1,
++MOZ_NATIVE_CELT=)
++
++if test -n "$MOZ_NATIVE_CELT"; then
++ PKG_CHECK_MODULES(MOZ_CELT, celt)
++else
++ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus'
++fi
++
++AC_SUBST(MOZ_NATIVE_CELT)
++
++dnl ========================================================
+dnl Check for libopus
+dnl ========================================================
+
@@ -204,8 +214,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_OPUS)
-+AC_SUBST(MOZ_OPUS_CFLAGS)
-+AC_SUBST(MOZ_OPUS_LIBS)
+
+dnl ========================================================
+dnl Check for libtheora
@@ -221,8 +229,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_THEORA)
-+AC_SUBST(MOZ_THEORA_CFLAGS)
-+AC_SUBST(MOZ_THEORA_LIBS)
+
+dnl ========================================================
+dnl Check for libspeex resampler
@@ -238,8 +244,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_SPEEX)
-+AC_SUBST(MOZ_SPEEX_CFLAGS)
-+AC_SUBST(MOZ_SPEEX_LIBS)
+
+dnl ========================================================
+dnl Check for libsoundtouch
@@ -276,19 +280,17 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
-+AC_SUBST(MOZ_SOUNDTOUCH_CFLAGS)
-+AC_SUBST(MOZ_SOUNDTOUCH_LIBS)
+
+dnl ========================================================
dnl = Disable VP8 decoder support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(webm,
-diff --git content/media/AudioStream.h content/media/AudioStream.h
+diff --git dom/media/AudioStream.h dom/media/AudioStream.h
index 085676d..00c54fb 100644
---- content/media/AudioStream.h
-+++ content/media/AudioStream.h
-@@ -26,7 +26,7 @@ public:
- };
+--- dom/media/AudioStream.h
++++ dom/media/AudioStream.h
+@@ -17,7 +17,7 @@
+ #include "CubebUtils.h"
namespace soundtouch {
-class SoundTouch;
@@ -296,177 +298,265 @@ index 085676d..00c54fb 100644
}
namespace mozilla {
-diff --git content/media/Makefile.in content/media/Makefile.in
-index fd34449..c6c42c8 100644
---- content/media/Makefile.in
-+++ content/media/Makefile.in
-@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk
+diff --git dom/media/moz.build dom/media/moz.build
+index 7526cff..e0a0ca0 100644
+--- dom/media/moz.build
++++ dom/media/moz.build
+@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15':
+
+ CFLAGS += CONFIG['GSTREAMER_CFLAGS']
+ CXXFLAGS += CONFIG['GSTREAMER_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_OGG']:
++ CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_THEORA']:
++ CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_VORBIS']:
++ CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_TREMOR']:
++ CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_OPUS']:
++ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
++ CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS']
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 944744d..9a7c8c0 100644
+--- media/libcubeb/src/moz.build
++++ media/libcubeb/src/moz.build
+@@ -65,6 +65,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']:
- CFLAGS += $(GSTREAMER_CFLAGS)
- CXXFLAGS += $(GSTREAMER_CFLAGS)
-+
-+ifdef MOZ_NATIVE_OGG
-+CXXFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_THEORA
-+CXXFLAGS += $(MOZ_THEORA_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_VORBIS
-+CXXFLAGS += $(MOZ_VORBIS_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_TREMOR
-+CXXFLAGS += $(MOZ_TREMOR_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_OPUS
-+CXXFLAGS += $(MOZ_OPUS_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_SPEEX
-+CXXFLAGS += $(MOZ_SPEEX_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_SOUNDTOUCH
-+CXXFLAGS += $(MOZ_SOUNDTOUCH_CFLAGS)
-+endif
-diff --git media/libcubeb/src/Makefile.in media/libcubeb/src/Makefile.in
-index 4c14494..1cb98e2 100644
---- media/libcubeb/src/Makefile.in
-+++ media/libcubeb/src/Makefile.in
-@@ -9,3 +9,7 @@ CFLAGS += \
- $(MOZ_ALSA_CFLAGS) \
- $(MOZ_PULSEAUDIO_CFLAGS) \
- $(NULL)
-+
-+ifdef MOZ_NATIVE_SPEEX
-+CFLAGS += $(MOZ_SPEEX_CFLAGS)
-+endif
-diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libtheora/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/libtremor/Makefile.in media/libtremor/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libtremor/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/libvorbis/Makefile.in media/libvorbis/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libvorbis/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+ FINAL_LIBRARY = 'gkmedias'
+
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ SOURCES['cubeb_resampler.cpp'].flags += CONFIG['MOZ_SPEEX_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+ CFLAGS += [
+ '-I%s/%s' % (CONFIG['ANDROID_SOURCE'], d) for d in [
+diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA
+index 0833e4d..7ece97b 100644
+--- media/libogg/README_MOZILLA
++++ media/libogg/README_MOZILLA
+@@ -6,3 +6,6 @@ The svn revision number used was r17287.
+ The int-types.patch address a bug that config_types.h generated from
+ Linux platform can't be used on OpenSolaris directly see Mozilla bug
+ 449754
++
++The in-tree copy may be omitted during build by --with-system-ogg.
++Keep version in configure.in in sync on updates.
+diff --git media/libopus/README_MOZILLA media/libopus/README_MOZILLA
+index 2d85c9f..d3fb9f8 100644
+--- media/libopus/README_MOZILLA
++++ media/libopus/README_MOZILLA
+@@ -9,3 +9,6 @@ files after the copy step.
+ The upstream repository is https://git.xiph.org/opus.git
+
+ The git tag/revision used was v1.1.
++
++The in-tree copy may be omitted during build by --with-system-opus.
++So, keep its pkg-config version check within configure.in in sync on updates.
+diff --git media/libsoundtouch/README_MOZILLA media/libsoundtouch/README_MOZILLA
+index bfd4b1a..15b158d 100644
+--- media/libsoundtouch/README_MOZILLA
++++ media/libsoundtouch/README_MOZILLA
+@@ -6,3 +6,5 @@ The whole library is not used, only the relevant files are imported in the tree,
+ using the script `update.sh`. Some changes have been made to the files, using
+ the patch `moz-libsoundtouch.patch`. We also use a custom soundtouch_config.h.
+
++The in-tree copy may be omitted during build by --with-system-soundtouch.
++Keep version in configure.in in sync on updates.
+diff --git media/libspeex_resampler/README_MOZILLA media/libspeex_resampler/README_MOZILLA
+index 7f6b1bb..e830300 100644
+--- media/libspeex_resampler/README_MOZILLA
++++ media/libspeex_resampler/README_MOZILLA
+@@ -3,3 +3,6 @@ This source is from the Speex DSP library
+
+ It consists in the audio resampling code (resampler.c) and its header files
+ dependancies, imported into the tree using the update.sh script.
++
++The in-tree copy may be omitted during build by --with-system-speex.
++Keep version in configure.in in sync on updates.
+diff --git media/libtheora/README_MOZILLA media/libtheora/README_MOZILLA
+index d48dbfa..f08a2ed 100644
+--- media/libtheora/README_MOZILLA
++++ media/libtheora/README_MOZILLA
+@@ -3,3 +3,6 @@ using the update.sh script. The changes made were those applied by update.sh,
+ the addition/update of Makefile.in files for the Mozilla build system.
+
+ The subversion revision used was r17578.
++
++The in-tree copy may be omitted during build by --with-system-theora.
++Keep version in configure.in in sync on updates.
+diff --git media/libtheora/moz.build media/libtheora/moz.build
+index 14265b1..3069e99 100644
+--- media/libtheora/moz.build
++++ media/libtheora/moz.build
+@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']:
+ if CONFIG['OS_TARGET'] == 'Android':
+ DEFINES['__linux__'] = True
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/libtremor/README_MOZILLA media/libtremor/README_MOZILLA
+index ee67b53..3f34a09 100644
+--- media/libtremor/README_MOZILLA
++++ media/libtremor/README_MOZILLA
+@@ -5,3 +5,6 @@ Makefile.in files for the Mozilla build system.
+
+ The upstream release used was http://svn.xiph.org/trunk/Tremor/
+ The subversion revision used was r17547.
++
++The in-tree copy may be omitted during build by --with-system-tremor.
++Keep version in configure.in in sync on updates.
+diff --git media/libtremor/moz.build media/libtremor/moz.build
+index 31831ba..a03d576 100644
+--- media/libtremor/moz.build
++++ media/libtremor/moz.build
+@@ -6,3 +6,5 @@
+
+ DIRS += ['include/tremor', 'lib']
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/libvorbis/README_MOZILLA media/libvorbis/README_MOZILLA
+index 7c7454c..55baedd 100644
+--- media/libvorbis/README_MOZILLA
++++ media/libvorbis/README_MOZILLA
+@@ -8,3 +8,6 @@ https://svn.xiph.org/tags/vorbis/libvorbis-1.3.4@19059
+
+ Some files are renamed during the copy to prevent clashes with object
+ file names with other Mozilla libraries.
++
++The in-tree copy may be omitted during build by --with-system-vorbis.
++Keep version in configure.in in sync on updates.
+diff --git media/libvorbis/moz.build media/libvorbis/moz.build
+index 919b99e..cc776f7 100644
+--- media/libvorbis/moz.build
++++ media/libvorbis/moz.build
+@@ -55,3 +55,6 @@ FINAL_LIBRARY = 'gkmedias'
+ # Suppress warnings in third-party code.
+ if CONFIG['GNU_CC']:
+ CFLAGS += ['-Wno-uninitialized']
++
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index bbc971c..6ed7e41 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -48,6 +48,12 @@ LIBS += \
- $(NULL)
- endif
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']:
+ if CONFIG['MOZ_NATIVE_JPEG']:
+ OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+
++if CONFIG['MOZ_NATIVE_OPUS']:
++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS']
++
+ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS']
-+ifdef MOZ_NATIVE_OPUS
-+LIBS += \
-+ $(MOZ_OPUS_LIBS) \
-+ $(NULL)
-+endif
-+
- ifdef MOZ_NATIVE_LIBVPX
- LIBS += \
- $(MOZ_LIBVPX_LIBS) \
diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
index 00e77e7..55f48ab 100644
--- media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
+++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
-@@ -14,9 +14,9 @@
+@@ -17,18 +17,11 @@
'conditions': [
['build_with_mozilla==1', {
# Mozilla provides its own build of the opus library.
- 'include_dirs': [
- '/media/libopus/include',
-- ]
+- '/media/libopus/src',
+- '/media/libopus/celt',
+ 'cflags_mozilla': [
++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt',
+ '$(MOZ_OPUS_CFLAGS)',
-+ ],
++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src',
+ ],
+- 'direct_dependent_settings': {
+- 'include_dirs': [
+- '/media/libopus/include',
+- '/media/libopus/src',
+- '/media/libopus/celt',
+- ],
+- },
}, {
'dependencies': [
'<(DEPTH)/third_party/opus/opus.gyp:opus'
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
+index 00e77e7..55f48ab 100644
+--- media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
+@@ -84,19 +84,11 @@
+ ],
+ }],
+ ['build_with_mozilla==1', {
+- 'include_dirs': [
+- # Need Opus header files for the audio classifier.
+- '<(DEPTH)/../../../media/opus/celt',
+-# '<(DEPTH)/third_party/opus/src/src',
++ 'cflags_mozilla': [
++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt',
++ '$(MOZ_OPUS_CFLAGS)',
++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src',
+ ],
+- 'direct_dependent_settings': {
+- 'include_dirs': [
+- '../../../../../../media/opus/celt',
+- # Need Opus header files for the audio classifier.
+- '<(DEPTH)/../../../media/opus/celt',
+-# '<(DEPTH)/third_party/opus/src/src',
+- ],
+- },
+ }],
+ ],
+ 'sources': [
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index d42137a..695e75a8 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL
- EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS)
- endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']:
+ if CONFIG['MOZ_NATIVE_HUNSPELL']:
+ OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ OS_LIBS += CONFIG['MOZ_OGG_LIBS']
++
++if CONFIG['MOZ_NATIVE_THEORA']:
++ OS_LIBS += CONFIG['MOZ_THEORA_LIBS']
++
++if CONFIG['MOZ_NATIVE_VORBIS']:
++ OS_LIBS += CONFIG['MOZ_VORBIS_LIBS']
++
++if CONFIG['MOZ_NATIVE_TREMOR']:
++ OS_LIBS += CONFIG['MOZ_TREMOR_LIBS']
++
++if CONFIG['MOZ_NATIVE_CELT']:
++ OS_LIBS += CONFIG['MOZ_CELT_LIBS']
++
++if CONFIG['MOZ_NATIVE_OPUS']:
++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS']
++
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS']
++
++if CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
++ OS_LIBS += CONFIG['MOZ_SOUNDTOUCH_LIBS']
++
+ if CONFIG['MOZ_NATIVE_LIBEVENT']:
+ OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
-+ifdef MOZ_NATIVE_OGG
-+EXTRA_DSO_LDOPTS += $(MOZ_OGG_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_THEORA
-+EXTRA_DSO_LDOPTS += $(MOZ_THEORA_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_VORBIS
-+EXTRA_DSO_LDOPTS += $(MOZ_VORBIS_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_TREMOR
-+EXTRA_DSO_LDOPTS += $(MOZ_TREMOR_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_OPUS
-+EXTRA_DSO_LDOPTS += $(MOZ_OPUS_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_SPEEX
-+EXTRA_DSO_LDOPTS += $(MOZ_SPEEX_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_SOUNDTOUCH
-+EXTRA_DSO_LDOPTS += $(MOZ_SOUNDTOUCH_LIBS)
-+endif
-+
- ifdef MOZ_NATIVE_LIBEVENT
- EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS)
- endif
-diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp
+diff --git xpcom/build/XPCOMInit.cpp xpcom/build/XPCOMInit.cpp
index 2cf281e..6d7af0e 100644
---- xpcom/build/nsXPComInit.cpp
-+++ xpcom/build/nsXPComInit.cpp
-@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **)
+--- xpcom/build/XPCOMInit.cpp
++++ xpcom/build/XPCOMInit.cpp
+@@ -138,7 +138,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**);
#include "mozilla/VisualEventTracer.h"
#endif
@@ -476,17 +566,17 @@ index 2cf281e..6d7af0e 100644
#if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
#include "vpx_mem/vpx_mem.h"
#endif
-@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result,
- // this oddness.
- mozilla::SetICUMemoryFunctions();
+@@ -651,11 +653,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
+ // this oddness.
+ mozilla::SetICUMemoryFunctions();
+#ifndef MOZ_OGG_NO_MEM_REPORTING
- // Do the same for libogg.
- ogg_set_mem_functions(OggReporter::CountingMalloc,
- OggReporter::CountingCalloc,
- OggReporter::CountingRealloc,
- OggReporter::CountingFree);
+ // Do the same for libogg.
+ ogg_set_mem_functions(OggReporter::CountingMalloc,
+ OggReporter::CountingCalloc,
+ OggReporter::CountingRealloc,
+ OggReporter::CountingFree);
+#endif
#if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
- // And for VPX.
+ // And for VPX.
diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile
index 5b9791545b43..7a1f49df8bd6 100644
--- a/www/firefox-i18n/Makefile
+++ b/www/firefox-i18n/Makefile
@@ -2,10 +2,10 @@
# $FreeBSD$
PORTNAME= firefox-i18n
-PORTVERSION= 38.0.6
+PORTVERSION= 39.0
CATEGORIES= www
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
- MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi
+ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build6/linux-i686/xpi
PKGNAMEPREFIX=
DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/}
DIST_SUBDIR= xpi/${DISTNAME}
@@ -15,7 +15,7 @@ COMMENT= Localized interface for Firefox
EXTRACT_DEPENDS= zip:${PORTSDIR}/archivers/zip
-USES= zip:infozip gecko:firefox,38,build
+USES= zip:infozip gecko:firefox,39,build
USE_XPI= firefox linux-firefox
NO_ARCH= yes
diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo
index dc0ba7284f04..fc04dcb30bde 100644
--- a/www/firefox-i18n/distinfo
+++ b/www/firefox-i18n/distinfo
@@ -1,176 +1,176 @@
-SHA256 (xpi/firefox-i18n-38.0.6/ach.xpi) = ad03bf377edcae7b45510eb16a558d18f217ab7d13f11c1f4aeef436952ebfa4
-SIZE (xpi/firefox-i18n-38.0.6/ach.xpi) = 477966
-SHA256 (xpi/firefox-i18n-38.0.6/af.xpi) = 4a67a99198d01a1a35f57840826d331d4712e0dec4c9e990e9111d9301353130
-SIZE (xpi/firefox-i18n-38.0.6/af.xpi) = 483325
-SHA256 (xpi/firefox-i18n-38.0.6/an.xpi) = 986abe42419028e34b72b40ca2ffc04b43d649603c9be41ff08b29ad60f4c759
-SIZE (xpi/firefox-i18n-38.0.6/an.xpi) = 461421
-SHA256 (xpi/firefox-i18n-38.0.6/ar.xpi) = 6ce1cdb6d9f36569f8116dc02af552ecfdc5cdcd16a982ea3cf55f072db9a2d0
-SIZE (xpi/firefox-i18n-38.0.6/ar.xpi) = 516494
-SHA256 (xpi/firefox-i18n-38.0.6/as.xpi) = 3236019f46171baa694cdc8a51eb254ade7b9a258b9e62476b6ff4f356e9af0b
-SIZE (xpi/firefox-i18n-38.0.6/as.xpi) = 509573
-SHA256 (xpi/firefox-i18n-38.0.6/ast.xpi) = 00f59397ebd0cb4e2156e003d4cb60b27b78e9566f1bab35df44138f1b23d2f2
-SIZE (xpi/firefox-i18n-38.0.6/ast.xpi) = 397199
-SHA256 (xpi/firefox-i18n-38.0.6/az.xpi) = 5c2087ab6c45e2c0389d1536ec6a1754dbfa0eebb5b861acc813728b17b29ac9
-SIZE (xpi/firefox-i18n-38.0.6/az.xpi) = 489151
-SHA256 (xpi/firefox-i18n-38.0.6/be.xpi) = 61d28f0411eb230eb54aef1bb3c6f7ffe08328bf2e741f05287351119e9b39ec
-SIZE (xpi/firefox-i18n-38.0.6/be.xpi) = 441055
-SHA256 (xpi/firefox-i18n-38.0.6/bg.xpi) = 96c7741513bb4b8642282bb4decf14b658c774d578d904d07b58a8d57aab3612
-SIZE (xpi/firefox-i18n-38.0.6/bg.xpi) = 487818
-SHA256 (xpi/firefox-i18n-38.0.6/bn-BD.xpi) = 8c3110a71f7ceaea205893c0b288b136eeda4549911055a22d0c888d43ff1534
-SIZE (xpi/firefox-i18n-38.0.6/bn-BD.xpi) = 528687
-SHA256 (xpi/firefox-i18n-38.0.6/bn-IN.xpi) = 335c583bec0972452df86fca36cbb849fc4f46cb760440973c6344e8a4ee8b3e
-SIZE (xpi/firefox-i18n-38.0.6/bn-IN.xpi) = 527925
-SHA256 (xpi/firefox-i18n-38.0.6/br.xpi) = b570b15f0f18b17a490597a94e23bb2bb7c03fb1dd70aa871c64ef1c05336392
-SIZE (xpi/firefox-i18n-38.0.6/br.xpi) = 441959
-SHA256 (xpi/firefox-i18n-38.0.6/bs.xpi) = 991ba341335f56ab353410845c07177ce3eadbfdef0e10cb7c58f2d9f1930d96
-SIZE (xpi/firefox-i18n-38.0.6/bs.xpi) = 485304
-SHA256 (xpi/firefox-i18n-38.0.6/ca.xpi) = e02c04afea8d98fc8ded6f42903111d5a901fb33f6288819f91b77f7fad7abca
-SIZE (xpi/firefox-i18n-38.0.6/ca.xpi) = 458090
-SHA256 (xpi/firefox-i18n-38.0.6/cs.xpi) = cc320e6c1509064da1b8cc434b2bf9bc4612fdb08007350f5678e6998f5aac95
-SIZE (xpi/firefox-i18n-38.0.6/cs.xpi) = 446723
-SHA256 (xpi/firefox-i18n-38.0.6/cy.xpi) = f65d940cda171f64a0866f4752ae8f9b18e4476b03ab113897eb9ba0247cfcca
-SIZE (xpi/firefox-i18n-38.0.6/cy.xpi) = 444384
-SHA256 (xpi/firefox-i18n-38.0.6/da.xpi) = 3ab38b1b89c518f86538ab4d712bad207fe7626283447591bd1585b6b28520f3
-SIZE (xpi/firefox-i18n-38.0.6/da.xpi) = 450760
-SHA256 (xpi/firefox-i18n-38.0.6/de.xpi) = bc504b1e20bf363bf3986893b01010bb3219683ee7a388cb507f5fe484ca55bf
-SIZE (xpi/firefox-i18n-38.0.6/de.xpi) = 451627
-SHA256 (xpi/firefox-i18n-38.0.6/dsb.xpi) = fd7299b58486b248f202c18c60b58ac66fcc799dc04d2909fff1ee2321439d35
-SIZE (xpi/firefox-i18n-38.0.6/dsb.xpi) = 470920
-SHA256 (xpi/firefox-i18n-38.0.6/el.xpi) = 77fd49c032ec0ca8ac2f5f69b9fb2b16c5f81c94cace7454d7715328a6d77fb8
-SIZE (xpi/firefox-i18n-38.0.6/el.xpi) = 498368
-SHA256 (xpi/firefox-i18n-38.0.6/en-GB.xpi) = 08ac16196ad9457775ffeb9922cf9e999add5d166f77f14e1f17a393d5a77583
-SIZE (xpi/firefox-i18n-38.0.6/en-GB.xpi) = 437843
-SHA256 (xpi/firefox-i18n-38.0.6/en-US.xpi) = 0d12db115fd157afa712d7598543b843fcca54df6f5af1e802058d87b3d3f289
-SIZE (xpi/firefox-i18n-38.0.6/en-US.xpi) = 469717
-SHA256 (xpi/firefox-i18n-38.0.6/en-ZA.xpi) = 50453a3cdb2d35ff221d02c6d8c09e942dab3f26bc87d0c6f0754c8a38ae3822
-SIZE (xpi/firefox-i18n-38.0.6/en-ZA.xpi) = 439924
-SHA256 (xpi/firefox-i18n-38.0.6/eo.xpi) = b65484b22a62daea5add7b1aae6c623387d9dfde5b4d53b65005bfb6856c4923
-SIZE (xpi/firefox-i18n-38.0.6/eo.xpi) = 488369
-SHA256 (xpi/firefox-i18n-38.0.6/es-AR.xpi) = 7210a8fbce905a45dcb89900c12c5299a8c084474ca6373afc880e313a54ec65
-SIZE (xpi/firefox-i18n-38.0.6/es-AR.xpi) = 453982
-SHA256 (xpi/firefox-i18n-38.0.6/es-CL.xpi) = c9620fb8854c65d7f6c2f5786f4a16bbc0d587ea54f6599a12415396f6abf345
-SIZE (xpi/firefox-i18n-38.0.6/es-CL.xpi) = 384677
-SHA256 (xpi/firefox-i18n-38.0.6/es-ES.xpi) = c9f0499f5648eac4c130e2e199cf179eccae9825d787cf7b66c6e7e8ff2d1586
-SIZE (xpi/firefox-i18n-38.0.6/es-ES.xpi) = 374071
-SHA256 (xpi/firefox-i18n-38.0.6/es-MX.xpi) = be9bbd645ecbab53dd983ac5937758681ec290888eb58e321220ceb6e4f70699
-SIZE (xpi/firefox-i18n-38.0.6/es-MX.xpi) = 457048
-SHA256 (xpi/firefox-i18n-38.0.6/et.xpi) = 744e3f241869017b49dcd11143707989f206dbf20280da0c32b3069985e1f528
-SIZE (xpi/firefox-i18n-38.0.6/et.xpi) = 443227
-SHA256 (xpi/firefox-i18n-38.0.6/eu.xpi) = e25df9b0f74169e3875ef0ff1a4c44c6b99ab6f7c0a434f62fe84a3fa56daa1d
-SIZE (xpi/firefox-i18n-38.0.6/eu.xpi) = 466554
-SHA256 (xpi/firefox-i18n-38.0.6/fa.xpi) = 9149cfb8348a2ef24fa03e8df38eef85b823a064c0b12d0a9b0178b67928a1c0
-SIZE (xpi/firefox-i18n-38.0.6/fa.xpi) = 518281
-SHA256 (xpi/firefox-i18n-38.0.6/ff.xpi) = 5b83491ea0808483da19e1b72fea76be33eb0ba30bb96d2e087b880d26eb1642
-SIZE (xpi/firefox-i18n-38.0.6/ff.xpi) = 454586
-SHA256 (xpi/firefox-i18n-38.0.6/fi.xpi) = 4f96df107967f4c86680ff578114ff579a255e8819942ce10889b6575d75e37b
-SIZE (xpi/firefox-i18n-38.0.6/fi.xpi) = 444851
-SHA256 (xpi/firefox-i18n-38.0.6/fr.xpi) = 08409d4f3f9c0d5939baed76b280e56cd34293d5b43ac41b5349f3e097907125
-SIZE (xpi/firefox-i18n-38.0.6/fr.xpi) = 461400
-SHA256 (xpi/firefox-i18n-38.0.6/fy-NL.xpi) = 38e15ac51c475dc9d9e2920ee32d73f0c4ddfde3ad60918ad14b88f92605a543
-SIZE (xpi/firefox-i18n-38.0.6/fy-NL.xpi) = 455539
-SHA256 (xpi/firefox-i18n-38.0.6/ga-IE.xpi) = 5ce5484701d0a385e1bc788c7cd868371af34d6463c8de8d4a7b9775fc5cbd35
-SIZE (xpi/firefox-i18n-38.0.6/ga-IE.xpi) = 469621
-SHA256 (xpi/firefox-i18n-38.0.6/gd.xpi) = 11395a42abd6e115814d6a32e52378ee5b527ed4c24fb62b9e5f2e4f073864f7
-SIZE (xpi/firefox-i18n-38.0.6/gd.xpi) = 454614
-SHA256 (xpi/firefox-i18n-38.0.6/gl.xpi) = d1b26401fbb17762a077bd81f92ca5f43dbaa6a404c346c17ef171ec43758f58
-SIZE (xpi/firefox-i18n-38.0.6/gl.xpi) = 448923
-SHA256 (xpi/firefox-i18n-38.0.6/gu-IN.xpi) = b9e250ed62ee139dc793df6f5f29af4dba7492fe4d83ed07c95f6c8e1e0296bd
-SIZE (xpi/firefox-i18n-38.0.6/gu-IN.xpi) = 477978
-SHA256 (xpi/firefox-i18n-38.0.6/he.xpi) = 98fd16c813a98f7096b78867699b8620093154005d129c0d2e11817643b1baec
-SIZE (xpi/firefox-i18n-38.0.6/he.xpi) = 486784
-SHA256 (xpi/firefox-i18n-38.0.6/hi-IN.xpi) = 0cd3ccba2eb3c9dd6661e7f3232c66aac5a323aec72a8e15e942f3e9e949a57d
-SIZE (xpi/firefox-i18n-38.0.6/hi-IN.xpi) = 508165
-SHA256 (xpi/firefox-i18n-38.0.6/hr.xpi) = 5fea5c7a4ba74e21d4332ff8daeeaaef51886778bc404c8bfadc61220fd65fba
-SIZE (xpi/firefox-i18n-38.0.6/hr.xpi) = 478269
-SHA256 (xpi/firefox-i18n-38.0.6/hsb.xpi) = 99c285afb9db815cbda1f2a5a9cae9df769a36e268e7cf69806ed78fa9ff63f1
-SIZE (xpi/firefox-i18n-38.0.6/hsb.xpi) = 468716
-SHA256 (xpi/firefox-i18n-38.0.6/hu.xpi) = cb78a15e8cfcd7d280aff17bdf20d04ea103211045fc994e20cc9811a5cfc045
-SIZE (xpi/firefox-i18n-38.0.6/hu.xpi) = 453553
-SHA256 (xpi/firefox-i18n-38.0.6/hy-AM.xpi) = aeea11527c732548ea4b5b07ca9ef17aa97348dc60e25cfad6bd398459e75bd7
-SIZE (xpi/firefox-i18n-38.0.6/hy-AM.xpi) = 534262
-SHA256 (xpi/firefox-i18n-38.0.6/id.xpi) = c58a8f7246c9548f756b5c5567178a4fa8a9e56f201735cc60e4693dbd05ee19
-SIZE (xpi/firefox-i18n-38.0.6/id.xpi) = 431487
-SHA256 (xpi/firefox-i18n-38.0.6/is.xpi) = c99dd4ea2ecbea8ce28fa5abe5124fdf4f857bf6af614e9174978d8359c9244a
-SIZE (xpi/firefox-i18n-38.0.6/is.xpi) = 485131
-SHA256 (xpi/firefox-i18n-38.0.6/it.xpi) = 27636262046d9b27c3d4222d4bab4c6700bc728be1770ff5f3d067d83e22b6e7
-SIZE (xpi/firefox-i18n-38.0.6/it.xpi) = 368408
-SHA256 (xpi/firefox-i18n-38.0.6/ja.xpi) = 62051b473ee82ef5a9460ee4ce6045efe1b96cbc67bdee9747d6a642f724736a
-SIZE (xpi/firefox-i18n-38.0.6/ja.xpi) = 479113
-SHA256 (xpi/firefox-i18n-38.0.6/kk.xpi) = 9e47fc85b769d46b51d69c6baefc15f78263e3941e414f2513ccabe05fabd634
-SIZE (xpi/firefox-i18n-38.0.6/kk.xpi) = 503567
-SHA256 (xpi/firefox-i18n-38.0.6/km.xpi) = 5f174f400458fc099e0680e02ac70048fecd2ef5472cd9dba0f77c2ff1e8cda1
-SIZE (xpi/firefox-i18n-38.0.6/km.xpi) = 565672
-SHA256 (xpi/firefox-i18n-38.0.6/kn.xpi) = 067ebc125f3d970d1f058b5e6a4296e3382bde2ff045bacc39f96607591b3f66
-SIZE (xpi/firefox-i18n-38.0.6/kn.xpi) = 533463
-SHA256 (xpi/firefox-i18n-38.0.6/ko.xpi) = d2b04bc71e665511c5ad889ba1237a67c916bff88628a605d8522323973e3b62
-SIZE (xpi/firefox-i18n-38.0.6/ko.xpi) = 460853
-SHA256 (xpi/firefox-i18n-38.0.6/lij.xpi) = d1b0d22c8fc623971ff83c6041b33148ffc451504698f5300798805ede2e1f68
-SIZE (xpi/firefox-i18n-38.0.6/lij.xpi) = 444240
-SHA256 (xpi/firefox-i18n-38.0.6/lt.xpi) = 6c2a8b2b7960f17342ba9eb006bf72d30193e258e9e891a59ec5cd9bae98d1e6
-SIZE (xpi/firefox-i18n-38.0.6/lt.xpi) = 486450
-SHA256 (xpi/firefox-i18n-38.0.6/lv.xpi) = b6d7bd3f6461aa94b2f05dea855f4ea93e8cdce385b496da159348d97b6f9083
-SIZE (xpi/firefox-i18n-38.0.6/lv.xpi) = 467197
-SHA256 (xpi/firefox-i18n-38.0.6/mai.xpi) = 7aa1e27a38f970ce42a6f676d4b2f111fba7e1394ce4f09d8b8c72bf9a0b182e
-SIZE (xpi/firefox-i18n-38.0.6/mai.xpi) = 514662
-SHA256 (xpi/firefox-i18n-38.0.6/mk.xpi) = 1cdbbb79e8da9da9e6c340e3a03bf38a4ddb44a29d9eb5990b5838abc4748c3a
-SIZE (xpi/firefox-i18n-38.0.6/mk.xpi) = 529204
-SHA256 (xpi/firefox-i18n-38.0.6/ml.xpi) = 6c34207509307dd721fd117029062c63fee3dbf06d4dee46709a4aca3937a49a
-SIZE (xpi/firefox-i18n-38.0.6/ml.xpi) = 528918
-SHA256 (xpi/firefox-i18n-38.0.6/mr.xpi) = eea26382b292dd8c53f1a84b3f78c675ae8240f96f61d00b250cb4863b4e70af
-SIZE (xpi/firefox-i18n-38.0.6/mr.xpi) = 505960
-SHA256 (xpi/firefox-i18n-38.0.6/ms.xpi) = 36d29a890bff94d7a6940e386568b9ef6ad92d5d7f0cafe271983a8c7960fee0
-SIZE (xpi/firefox-i18n-38.0.6/ms.xpi) = 489871
-SHA256 (xpi/firefox-i18n-38.0.6/nb-NO.xpi) = 16a1180df801e875aa095b6d0daaf027b5673ba288f24d6f8775b1c16d153813
-SIZE (xpi/firefox-i18n-38.0.6/nb-NO.xpi) = 444174
-SHA256 (xpi/firefox-i18n-38.0.6/nl.xpi) = e867e26f49a49080b3fac318d99417d1ad6b208f56f60884e88db5e19a11b7a1
-SIZE (xpi/firefox-i18n-38.0.6/nl.xpi) = 443993
-SHA256 (xpi/firefox-i18n-38.0.6/nn-NO.xpi) = 2abffbac72b1b6e59d97caaa042ef3f91d4a1a3f91ecaf2d892228797c5b710a
-SIZE (xpi/firefox-i18n-38.0.6/nn-NO.xpi) = 438450
-SHA256 (xpi/firefox-i18n-38.0.6/or.xpi) = f73f7eaaf55a82f339acc2233c229dd9f0455b29ece08d6038b50f88dcfc6956
-SIZE (xpi/firefox-i18n-38.0.6/or.xpi) = 527047
-SHA256 (xpi/firefox-i18n-38.0.6/pa-IN.xpi) = aa5e54b73218401ea0270a1327d02abd78ea6e69f9ac035238cd0a604769ec88
-SIZE (xpi/firefox-i18n-38.0.6/pa-IN.xpi) = 493720
-SHA256 (xpi/firefox-i18n-38.0.6/pl.xpi) = 21c31bbe1c470d03b397449ba7398179699ec1eccaccc626802f858106526f2b
-SIZE (xpi/firefox-i18n-38.0.6/pl.xpi) = 406565
-SHA256 (xpi/firefox-i18n-38.0.6/pt-BR.xpi) = c2205e1e4df75550693da64b550a82ad1005f598b1dcd48067299358d6e94562
-SIZE (xpi/firefox-i18n-38.0.6/pt-BR.xpi) = 459808
-SHA256 (xpi/firefox-i18n-38.0.6/pt-PT.xpi) = 61b5d42ca06d79750d46206b6e30ace3d5044f32b330aa9167bd6c5732b43bfd
-SIZE (xpi/firefox-i18n-38.0.6/pt-PT.xpi) = 439973
-SHA256 (xpi/firefox-i18n-38.0.6/rm.xpi) = 30d2be77260bf38a2309b40998dd6e32221b680e7dd0ff7d0862c941fd2b026a
-SIZE (xpi/firefox-i18n-38.0.6/rm.xpi) = 446286
-SHA256 (xpi/firefox-i18n-38.0.6/ro.xpi) = 251fae3b096a4432a2d88cfe15d5b74a9228ffb5772c240fb0ea6555ff671b13
-SIZE (xpi/firefox-i18n-38.0.6/ro.xpi) = 494078
-SHA256 (xpi/firefox-i18n-38.0.6/ru.xpi) = 103c44712b30992296109adf2b0bdf192ed574a311b0f5ffcb688f78ac2e576e
-SIZE (xpi/firefox-i18n-38.0.6/ru.xpi) = 414416
-SHA256 (xpi/firefox-i18n-38.0.6/si.xpi) = eec65f71f9b13c5ceb7cd64bab48e840533ce4f26e4342b132a1e0874e695c79
-SIZE (xpi/firefox-i18n-38.0.6/si.xpi) = 537393
-SHA256 (xpi/firefox-i18n-38.0.6/sk.xpi) = 00ae369f2f03c1664e06a52f9b199252ff960d5ec7f1306a3e5d5978bc315e35
-SIZE (xpi/firefox-i18n-38.0.6/sk.xpi) = 469435
-SHA256 (xpi/firefox-i18n-38.0.6/sl.xpi) = cc82c94bb39d60062f33f97a6bf9a93f39f0c37a92cb3b9bf79d82481fd9b8d5
-SIZE (xpi/firefox-i18n-38.0.6/sl.xpi) = 441592
-SHA256 (xpi/firefox-i18n-38.0.6/son.xpi) = 30def4ba3ffa1fa527fb47049d340a0023f06fc7840816fdf6486d2525ff67d1
-SIZE (xpi/firefox-i18n-38.0.6/son.xpi) = 449266
-SHA256 (xpi/firefox-i18n-38.0.6/sq.xpi) = 67e5c36cf9b0f65b275f61e8c0195e554f2cb4238fbd23799d06cc2bb76f9c47
-SIZE (xpi/firefox-i18n-38.0.6/sq.xpi) = 486074
-SHA256 (xpi/firefox-i18n-38.0.6/sr.xpi) = 23e8175609b8bb888070fe021f0c9a8f11047116a09c3ab5e5977e39e99f2ec3
-SIZE (xpi/firefox-i18n-38.0.6/sr.xpi) = 479418
-SHA256 (xpi/firefox-i18n-38.0.6/sv-SE.xpi) = bb656fd49de6588498c13efa5f669d8f1cfdbf1fb8b9897d19bacfbca27c7ec4
-SIZE (xpi/firefox-i18n-38.0.6/sv-SE.xpi) = 452629
-SHA256 (xpi/firefox-i18n-38.0.6/ta.xpi) = 2ab44c9b48febe2ad0de250b14ced4eb6ab8048e1258e4fb3c026a31ebb3700d
-SIZE (xpi/firefox-i18n-38.0.6/ta.xpi) = 506606
-SHA256 (xpi/firefox-i18n-38.0.6/te.xpi) = 042e377434bf2d963973b35bb0ee0d0ad289129a1a18f66dfe25dc8b5666b10e
-SIZE (xpi/firefox-i18n-38.0.6/te.xpi) = 526249
-SHA256 (xpi/firefox-i18n-38.0.6/th.xpi) = e08aabc3c902acd5c760d17973f626e09333e9fbf1f29ab7af52fc357badccf9
-SIZE (xpi/firefox-i18n-38.0.6/th.xpi) = 534269
-SHA256 (xpi/firefox-i18n-38.0.6/tr.xpi) = e2df78f1a82a4bd93da352494f12148112f8bb0c499c7d4df7f000d1f41161ae
-SIZE (xpi/firefox-i18n-38.0.6/tr.xpi) = 481074
-SHA256 (xpi/firefox-i18n-38.0.6/uk.xpi) = 925aa49d1a9c3512c50b1d7034a805117b71c015b82a2e8430bae91f147f47bb
-SIZE (xpi/firefox-i18n-38.0.6/uk.xpi) = 493312
-SHA256 (xpi/firefox-i18n-38.0.6/vi.xpi) = 64e870c9f44263d0d76563602c70ed6ae714cdca10d6c42279f8a1d0b5845c4a
-SIZE (xpi/firefox-i18n-38.0.6/vi.xpi) = 467503
-SHA256 (xpi/firefox-i18n-38.0.6/xh.xpi) = a14fd8ae6cdaf3221ce90f9e4a91dc3b6081aa74a303ada92d8d60afc3d3c3dc
-SIZE (xpi/firefox-i18n-38.0.6/xh.xpi) = 450241
-SHA256 (xpi/firefox-i18n-38.0.6/zh-CN.xpi) = 98206ef4ef8b1da1894dfcc9fba6be38137132fece48ada1f6666082ed7dc563
-SIZE (xpi/firefox-i18n-38.0.6/zh-CN.xpi) = 488274
-SHA256 (xpi/firefox-i18n-38.0.6/zh-TW.xpi) = 43e5c886de9ee6c2a5a3e83e0cfac404b76583eaac634b04c2652e92ae81dc5d
-SIZE (xpi/firefox-i18n-38.0.6/zh-TW.xpi) = 467843
+SHA256 (xpi/firefox-i18n-39.0/ach.xpi) = c922e238ef7201cb0b0c2a9da00164c350b440a3d02c838daa45b17713bf3eab
+SIZE (xpi/firefox-i18n-39.0/ach.xpi) = 483041
+SHA256 (xpi/firefox-i18n-39.0/af.xpi) = 3653816368acb76e6773826db81c6473bdd923f7d61ca5ef24e9144d38c3752e
+SIZE (xpi/firefox-i18n-39.0/af.xpi) = 487310
+SHA256 (xpi/firefox-i18n-39.0/an.xpi) = c0bf2029255947a5c1fcb681fdb4ad0522a0b9941f5862046c45a70d04b68609
+SIZE (xpi/firefox-i18n-39.0/an.xpi) = 465359
+SHA256 (xpi/firefox-i18n-39.0/ar.xpi) = 1607562dafe4274ed7eb74e8d993baa70162c91de265bb2ac1dd8a63bdc1a3b3
+SIZE (xpi/firefox-i18n-39.0/ar.xpi) = 520323
+SHA256 (xpi/firefox-i18n-39.0/as.xpi) = 653ee076f738a7365dd75da4899032f31ac73451e9a2b26a1ec5e4621547f443
+SIZE (xpi/firefox-i18n-39.0/as.xpi) = 514544
+SHA256 (xpi/firefox-i18n-39.0/ast.xpi) = 1fde38dbd96c86bc523d8524472c0de157d58d07e963a1a9bb6794fb6db484d4
+SIZE (xpi/firefox-i18n-39.0/ast.xpi) = 387702
+SHA256 (xpi/firefox-i18n-39.0/az.xpi) = 6bdd0663efa56eebaa67edabee1630147b051181ad993c14241ba7a7b4ccaad0
+SIZE (xpi/firefox-i18n-39.0/az.xpi) = 494213
+SHA256 (xpi/firefox-i18n-39.0/be.xpi) = 8a2278c789a06cc5b27ccfff3731ed8c534529d67e9c5cc42a2e3b6d8613c858
+SIZE (xpi/firefox-i18n-39.0/be.xpi) = 445945
+SHA256 (xpi/firefox-i18n-39.0/bg.xpi) = 24d6285a03ee495b928be4f221f49af8a1f9a07f4ce5be14beff6ebc531f7687
+SIZE (xpi/firefox-i18n-39.0/bg.xpi) = 491422
+SHA256 (xpi/firefox-i18n-39.0/bn-BD.xpi) = 67d9759ac8d22b976ede194fd4c03b72411aa8bb7f733d13ea034119b0a086e5
+SIZE (xpi/firefox-i18n-39.0/bn-BD.xpi) = 533076
+SHA256 (xpi/firefox-i18n-39.0/bn-IN.xpi) = ec20ec3b29b5c7c8827fdbe78e7081ba20ae7d840ed7181b80bd983e19e26dc0
+SIZE (xpi/firefox-i18n-39.0/bn-IN.xpi) = 532548
+SHA256 (xpi/firefox-i18n-39.0/br.xpi) = b2cb99df9e051e3f625b99f8e929a2cddfea5252e41be0064d6ca3d782b1f592
+SIZE (xpi/firefox-i18n-39.0/br.xpi) = 445830
+SHA256 (xpi/firefox-i18n-39.0/bs.xpi) = 9b85eb51785eafdd7467baba89fec2ad72596e56ca7c955f809b23076467853e
+SIZE (xpi/firefox-i18n-39.0/bs.xpi) = 489604
+SHA256 (xpi/firefox-i18n-39.0/ca.xpi) = e4302b4babac9b90600ef142bf9d1060a596ac64f91481b23c4884d10f69183f
+SIZE (xpi/firefox-i18n-39.0/ca.xpi) = 461923
+SHA256 (xpi/firefox-i18n-39.0/cs.xpi) = 26de879be7e96d6c8020a46ba73049ed13344c1943ea0128ffdcce356cd02f95
+SIZE (xpi/firefox-i18n-39.0/cs.xpi) = 450723
+SHA256 (xpi/firefox-i18n-39.0/cy.xpi) = 91cb0a9d93c5214e0e42ec9fa19c318209635975f7da6849e0b3ccd3a95c5951
+SIZE (xpi/firefox-i18n-39.0/cy.xpi) = 448065
+SHA256 (xpi/firefox-i18n-39.0/da.xpi) = 64748e6b957775bb3ac42bb35f227c88092afb11afce62b425b4c0747fbe285f
+SIZE (xpi/firefox-i18n-39.0/da.xpi) = 454611
+SHA256 (xpi/firefox-i18n-39.0/de.xpi) = 56bb69de98fc46442e3aa2c09f95ebd0723f3c73fd890a013450c88225f9a80f
+SIZE (xpi/firefox-i18n-39.0/de.xpi) = 456189
+SHA256 (xpi/firefox-i18n-39.0/dsb.xpi) = 802fcc3a4a30b7b899bdceb5a45878b48da89a9048e4a295784c07b45198cd7a
+SIZE (xpi/firefox-i18n-39.0/dsb.xpi) = 474911
+SHA256 (xpi/firefox-i18n-39.0/el.xpi) = 22f7185683d08b186ca0022663f1c822b865683f913e8411ebd50408dc91bd2f
+SIZE (xpi/firefox-i18n-39.0/el.xpi) = 502653
+SHA256 (xpi/firefox-i18n-39.0/en-GB.xpi) = 2cf069f9da826329c5e5a22aadc4ea5a08ab0e25470b43c358e4ea14edebe88a
+SIZE (xpi/firefox-i18n-39.0/en-GB.xpi) = 441232
+SHA256 (xpi/firefox-i18n-39.0/en-US.xpi) = 0e89eb7cbe1fb84203d0217200dcea154a7422d1a7e6049f564796576a732762
+SIZE (xpi/firefox-i18n-39.0/en-US.xpi) = 473134
+SHA256 (xpi/firefox-i18n-39.0/en-ZA.xpi) = 73a7c02e116e86db894266147770124e6627a82c8a3cfe8e336526215fd50444
+SIZE (xpi/firefox-i18n-39.0/en-ZA.xpi) = 444467
+SHA256 (xpi/firefox-i18n-39.0/eo.xpi) = 972ddf4c1acffd1f46b7fe3d7926994a8be0bfccc8589466c26490cc97d06a3d
+SIZE (xpi/firefox-i18n-39.0/eo.xpi) = 489005
+SHA256 (xpi/firefox-i18n-39.0/es-AR.xpi) = 1f6fefebe9901763b950de6bbe6aa85bb948673d976f47814b907507274f0766
+SIZE (xpi/firefox-i18n-39.0/es-AR.xpi) = 457407
+SHA256 (xpi/firefox-i18n-39.0/es-CL.xpi) = 03bd03f60a298295a975252629c8ff9362430d15b650f5bcd82ce6604d0cf514
+SIZE (xpi/firefox-i18n-39.0/es-CL.xpi) = 386702
+SHA256 (xpi/firefox-i18n-39.0/es-ES.xpi) = a096fc6c58a2959bf8471830040351feddfac0555150af9409540cec10685afe
+SIZE (xpi/firefox-i18n-39.0/es-ES.xpi) = 376299
+SHA256 (xpi/firefox-i18n-39.0/es-MX.xpi) = 56793b19b75c7c1e9692f3b3d415e572439800e288f8e0227bcf690466a064fa
+SIZE (xpi/firefox-i18n-39.0/es-MX.xpi) = 462390
+SHA256 (xpi/firefox-i18n-39.0/et.xpi) = 0aaa0ccc0568456adbc0401acceb97983a7045405f4972058b60606fedc19c79
+SIZE (xpi/firefox-i18n-39.0/et.xpi) = 446725
+SHA256 (xpi/firefox-i18n-39.0/eu.xpi) = 7d04e5b11906f474d4096cb496514f8f370eada489739d31742128c7aaebcc91
+SIZE (xpi/firefox-i18n-39.0/eu.xpi) = 470410
+SHA256 (xpi/firefox-i18n-39.0/fa.xpi) = 605d95815fe0c77a4fc5df46d670d4e8e5b35924729a3a640210a0581d3330a1
+SIZE (xpi/firefox-i18n-39.0/fa.xpi) = 520579
+SHA256 (xpi/firefox-i18n-39.0/ff.xpi) = 30e3f30a775f38cb5663a707a1a85ee59f91007fbc229e47401a753702772d89
+SIZE (xpi/firefox-i18n-39.0/ff.xpi) = 459433
+SHA256 (xpi/firefox-i18n-39.0/fi.xpi) = 59d56595435d52e334cb3f388f711ced61075cf0026ba7d4e2cd04527d689ca7
+SIZE (xpi/firefox-i18n-39.0/fi.xpi) = 448585
+SHA256 (xpi/firefox-i18n-39.0/fr.xpi) = 59f1fc070ab7b7f65bab0c475f8fe894fa5c4e924d4f78b97cec8268d2359c41
+SIZE (xpi/firefox-i18n-39.0/fr.xpi) = 465588
+SHA256 (xpi/firefox-i18n-39.0/fy-NL.xpi) = 4812b3fae6bd6083fc0520487403c95f6104d7838e7edc450f05bce495832e3c
+SIZE (xpi/firefox-i18n-39.0/fy-NL.xpi) = 459611
+SHA256 (xpi/firefox-i18n-39.0/ga-IE.xpi) = 75f737af71ef7cb19ef4bcd99fa63c6c5d5b77b2d2b96c526b46faa375c2c6db
+SIZE (xpi/firefox-i18n-39.0/ga-IE.xpi) = 473547
+SHA256 (xpi/firefox-i18n-39.0/gd.xpi) = 792a7907e5eeb1486a404b9a3a8d88d7eecca87d87a2646d9a11cdaefe01a78c
+SIZE (xpi/firefox-i18n-39.0/gd.xpi) = 458521
+SHA256 (xpi/firefox-i18n-39.0/gl.xpi) = fa21c7bcc4989c6c0c0c459f46f7bd716cb7d19ad37861d57389177e7b1e143a
+SIZE (xpi/firefox-i18n-39.0/gl.xpi) = 453846
+SHA256 (xpi/firefox-i18n-39.0/gu-IN.xpi) = 189995f89fa441a743354e708d9e8a87d346625881ffaad7bff528de90ba1206
+SIZE (xpi/firefox-i18n-39.0/gu-IN.xpi) = 482866
+SHA256 (xpi/firefox-i18n-39.0/he.xpi) = 70984a01b309959bcbe1d693cba3d92b51a65c3e71535ec015c4b3f950a53f62
+SIZE (xpi/firefox-i18n-39.0/he.xpi) = 486474
+SHA256 (xpi/firefox-i18n-39.0/hi-IN.xpi) = a340651af88b6437a9c04e0c7186f928b730475550a383ac8387714f7a40f1a9
+SIZE (xpi/firefox-i18n-39.0/hi-IN.xpi) = 513451
+SHA256 (xpi/firefox-i18n-39.0/hr.xpi) = 48ab8729d65620b8ccb3e866a4d3eb57bb4e9d4e363491a0c61f1eea122e0c24
+SIZE (xpi/firefox-i18n-39.0/hr.xpi) = 482071
+SHA256 (xpi/firefox-i18n-39.0/hsb.xpi) = f87894bd9d003e9a62548ac82608dbb4b24f36eea8d776872c490a576b4c80e7
+SIZE (xpi/firefox-i18n-39.0/hsb.xpi) = 472665
+SHA256 (xpi/firefox-i18n-39.0/hu.xpi) = e1388ec88077f8a3111d8011b7e8e8773580a1e2b71d6432baff09fa08ee54a8
+SIZE (xpi/firefox-i18n-39.0/hu.xpi) = 457441
+SHA256 (xpi/firefox-i18n-39.0/hy-AM.xpi) = 1ab7dbb561103d9ac32e55c273ebf738480567a9882c9957f9e29829814dc766
+SIZE (xpi/firefox-i18n-39.0/hy-AM.xpi) = 538192
+SHA256 (xpi/firefox-i18n-39.0/id.xpi) = 41ec6c7ea5015d879600675359a21e160a6fc940e1ff634949c759a076da9c06
+SIZE (xpi/firefox-i18n-39.0/id.xpi) = 435240
+SHA256 (xpi/firefox-i18n-39.0/is.xpi) = 68651c22d74e0133a82eab94e8734bfded3bc219b1de7489180835573cb81ba6
+SIZE (xpi/firefox-i18n-39.0/is.xpi) = 488859
+SHA256 (xpi/firefox-i18n-39.0/it.xpi) = 7a681ca2928e3e2154ca190cc06d015144afffd9669b938410e8d48980a1c959
+SIZE (xpi/firefox-i18n-39.0/it.xpi) = 370614
+SHA256 (xpi/firefox-i18n-39.0/ja.xpi) = e510ba604a63b8cb6caf1e24500cb5cfb6a07a90ff22f111b501e847523ff2d0
+SIZE (xpi/firefox-i18n-39.0/ja.xpi) = 483150
+SHA256 (xpi/firefox-i18n-39.0/kk.xpi) = 5ff684dc2245de82a8edda2d02ee20dfbef7db6165060b20e6e3d229437968ef
+SIZE (xpi/firefox-i18n-39.0/kk.xpi) = 507527
+SHA256 (xpi/firefox-i18n-39.0/km.xpi) = 27d62503232240cd92508ce3d724f351d5ff8ad99a52d3cf962cf948829a9162
+SIZE (xpi/firefox-i18n-39.0/km.xpi) = 571219
+SHA256 (xpi/firefox-i18n-39.0/kn.xpi) = 342165fe3c5060bb15f6a889e4be80653731012be8d694e8ef817b447230cc46
+SIZE (xpi/firefox-i18n-39.0/kn.xpi) = 537653
+SHA256 (xpi/firefox-i18n-39.0/ko.xpi) = 348a8c4cd0f26b244fc2bc8467a8e6a8285bb7228e6deb6288fc7b464152ebe5
+SIZE (xpi/firefox-i18n-39.0/ko.xpi) = 465013
+SHA256 (xpi/firefox-i18n-39.0/lij.xpi) = 1870af5218e7223a83f935bbe58415e95a278dd1191db1c7b9f2e3446ae12285
+SIZE (xpi/firefox-i18n-39.0/lij.xpi) = 448691
+SHA256 (xpi/firefox-i18n-39.0/lt.xpi) = c49a0538443d77e1fbaf6660fdc15bc76181723af2f8b07af6579b408bc24370
+SIZE (xpi/firefox-i18n-39.0/lt.xpi) = 490579
+SHA256 (xpi/firefox-i18n-39.0/lv.xpi) = 8ac08b4ac3ae70dd7bbe090f0b0f984ebefef03c6d1d20cc4ba3527605c921be
+SIZE (xpi/firefox-i18n-39.0/lv.xpi) = 471166
+SHA256 (xpi/firefox-i18n-39.0/mai.xpi) = 561890d80e0162a7e2f3ba5e46ecc07f2ea681005f6f3bae6810fb8acf9408e0
+SIZE (xpi/firefox-i18n-39.0/mai.xpi) = 520123
+SHA256 (xpi/firefox-i18n-39.0/mk.xpi) = e91f81eb8b68e7a2af87d5c82577bc713e4c163a0a64b9a80a99ee6b0830dc56
+SIZE (xpi/firefox-i18n-39.0/mk.xpi) = 533582
+SHA256 (xpi/firefox-i18n-39.0/ml.xpi) = 9fecda84807976d1b320c0070b4f87eff5813f4965aec60e27df8f64e0f08622
+SIZE (xpi/firefox-i18n-39.0/ml.xpi) = 533592
+SHA256 (xpi/firefox-i18n-39.0/mr.xpi) = 511dcdbdb0d0fa919acf81879544d32e066e435bdda14a991f86d0c4999aae4c
+SIZE (xpi/firefox-i18n-39.0/mr.xpi) = 510890
+SHA256 (xpi/firefox-i18n-39.0/ms.xpi) = 29494a97c34ed72ca533bec56481eb1baf75d48cc956e13030ff573d4434476e
+SIZE (xpi/firefox-i18n-39.0/ms.xpi) = 494765
+SHA256 (xpi/firefox-i18n-39.0/nb-NO.xpi) = 4070b2df0eec4f1f2176c382759c1be4742a12313c01c3bd77ff80bfad0f7100
+SIZE (xpi/firefox-i18n-39.0/nb-NO.xpi) = 447825
+SHA256 (xpi/firefox-i18n-39.0/nl.xpi) = a99f7645bfb669f3a1e6d70ed6401f6492d1ac426757ca8c40683ecb3166ab19
+SIZE (xpi/firefox-i18n-39.0/nl.xpi) = 447540
+SHA256 (xpi/firefox-i18n-39.0/nn-NO.xpi) = 3481260f436473f8b4fa4116faece6a12472b022bd59e477bdec5d85edf211bd
+SIZE (xpi/firefox-i18n-39.0/nn-NO.xpi) = 442076
+SHA256 (xpi/firefox-i18n-39.0/or.xpi) = 0a0fdb72e6ee2481fd0f6057021a03dd8c150b428cce05029649f72c8c308cc1
+SIZE (xpi/firefox-i18n-39.0/or.xpi) = 532004
+SHA256 (xpi/firefox-i18n-39.0/pa-IN.xpi) = 4f1359b27b7131ddc944b5746adb2af2b5c319d19151447075db512359f7f084
+SIZE (xpi/firefox-i18n-39.0/pa-IN.xpi) = 497420
+SHA256 (xpi/firefox-i18n-39.0/pl.xpi) = ca291faf583e5b53d5ac607d6e0a6eec13fdedddbf1a003158edf75d475c007d
+SIZE (xpi/firefox-i18n-39.0/pl.xpi) = 408063
+SHA256 (xpi/firefox-i18n-39.0/pt-BR.xpi) = 55fbd2f5e4081394fa79b51935f809b5d5ed283f3c5d08597eb8aafdf1f012b4
+SIZE (xpi/firefox-i18n-39.0/pt-BR.xpi) = 463600
+SHA256 (xpi/firefox-i18n-39.0/pt-PT.xpi) = a41b6fc5b5791a596184b5226e3bb8d6185ad97a58bedcb8589afae849a6c40e
+SIZE (xpi/firefox-i18n-39.0/pt-PT.xpi) = 444720
+SHA256 (xpi/firefox-i18n-39.0/rm.xpi) = 451394fad795daae087c5bd2d80d9afdc1b0eae52b73a66f97cb3bae61e1419d
+SIZE (xpi/firefox-i18n-39.0/rm.xpi) = 449713
+SHA256 (xpi/firefox-i18n-39.0/ro.xpi) = a81a237f50f2aed3186029a1a63556d2ca6ed5c6b6b95c5b9137c94a88a1496c
+SIZE (xpi/firefox-i18n-39.0/ro.xpi) = 497997
+SHA256 (xpi/firefox-i18n-39.0/ru.xpi) = 5b3ccfb721175424e567da7071ad3a3fd4f7ac1aaddea5106cd57f306014e1c4
+SIZE (xpi/firefox-i18n-39.0/ru.xpi) = 417166
+SHA256 (xpi/firefox-i18n-39.0/si.xpi) = bc0f7a5bdd857cc7bccec42aeaa87ebb50f3e6be515b91c1465de602ec4ba907
+SIZE (xpi/firefox-i18n-39.0/si.xpi) = 542367
+SHA256 (xpi/firefox-i18n-39.0/sk.xpi) = 749217670c0ab1bc40c5cf19380185ad77a9ab95b130a7d47bd71f5110303073
+SIZE (xpi/firefox-i18n-39.0/sk.xpi) = 473458
+SHA256 (xpi/firefox-i18n-39.0/sl.xpi) = 3c5807b2e4a150dcd625e227fa09414ac6e35f81c02984727681ce70158fdc35
+SIZE (xpi/firefox-i18n-39.0/sl.xpi) = 445483
+SHA256 (xpi/firefox-i18n-39.0/son.xpi) = c23ee1f72b1bdbaa2e9ead73dd8513413ed775d1f10ff3d73d17f10e0eba8267
+SIZE (xpi/firefox-i18n-39.0/son.xpi) = 453638
+SHA256 (xpi/firefox-i18n-39.0/sq.xpi) = 570609619b1850037303663b9bc27e1670b1248bd054a93d9d671e32dc9e037a
+SIZE (xpi/firefox-i18n-39.0/sq.xpi) = 489758
+SHA256 (xpi/firefox-i18n-39.0/sr.xpi) = 0c559cc85f990b2759baf9cec96554e3e8c062ee5a0ab571e408aa888e6495b7
+SIZE (xpi/firefox-i18n-39.0/sr.xpi) = 483401
+SHA256 (xpi/firefox-i18n-39.0/sv-SE.xpi) = 88fa20f03e1c9f9ec7b8db45c1fbe3fd4eb89c10f52f0352b6e922352e986fa6
+SIZE (xpi/firefox-i18n-39.0/sv-SE.xpi) = 456397
+SHA256 (xpi/firefox-i18n-39.0/ta.xpi) = b1c71f7c30456bd20cc670cc976ca419257f15b01776be7095276d42e39f78ba
+SIZE (xpi/firefox-i18n-39.0/ta.xpi) = 511678
+SHA256 (xpi/firefox-i18n-39.0/te.xpi) = 245cbea46dbbe581a728262a3bff4bdad410fc447c1dfcfc5ab68825f0685d6b
+SIZE (xpi/firefox-i18n-39.0/te.xpi) = 531784
+SHA256 (xpi/firefox-i18n-39.0/th.xpi) = 1222f9eebb48c02abcac8e0f064e23bdb7b4c5288211816a51e598d2135aee90
+SIZE (xpi/firefox-i18n-39.0/th.xpi) = 539248
+SHA256 (xpi/firefox-i18n-39.0/tr.xpi) = 712b98ad2a0cf4b059554fe76d798a76ec3aa10ce2e95af0796dd9d46fa120b0
+SIZE (xpi/firefox-i18n-39.0/tr.xpi) = 484956
+SHA256 (xpi/firefox-i18n-39.0/uk.xpi) = 5b06984dc2d539dab5d3b83ec915b02a498d41185a2d3bfb7e465ef139fd605b
+SIZE (xpi/firefox-i18n-39.0/uk.xpi) = 498395
+SHA256 (xpi/firefox-i18n-39.0/vi.xpi) = a44f0486939c81e86e2aaf255cfe70d17e2ec42b8cc400ec2d699c3a1a951044
+SIZE (xpi/firefox-i18n-39.0/vi.xpi) = 471789
+SHA256 (xpi/firefox-i18n-39.0/xh.xpi) = 8d66c08160c6a2e3860bca6cc7d9c87b653c97c70994beb45bfc8fad9afb4f03
+SIZE (xpi/firefox-i18n-39.0/xh.xpi) = 454916
+SHA256 (xpi/firefox-i18n-39.0/zh-CN.xpi) = a7e959d6aba6f67b880b9ebcc1d1c2e253f01e079475191dc3eef978a9d9b2b5
+SIZE (xpi/firefox-i18n-39.0/zh-CN.xpi) = 492380
+SHA256 (xpi/firefox-i18n-39.0/zh-TW.xpi) = ec30c554c57aa27835723253f4c0dfc4fc75ca591f9a64fbd65f7622d7b212dd
+SIZE (xpi/firefox-i18n-39.0/zh-TW.xpi) = 471887
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 1dfc52139fc6..3ff38b79ecec 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -2,18 +2,18 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 38.0.6
+DISTVERSION= 39.0
DISTVERSIONSUFFIX=.source
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
- MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
+ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/source
MAINTAINER= gecko@FreeBSD.org
COMMENT= Web browser based on the browser portion of Mozilla
BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \
- nss>=3.18.1:${PORTSDIR}/security/nss \
+ nss>=3.19.2:${PORTSDIR}/security/nss \
libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \
cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \
soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \
@@ -32,7 +32,7 @@ BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \
LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l
USE_GECKO= gecko
-CONFLICTS= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.*
+CONFLICTS_INSTALL= firefox-esr-31.* firefox-esr-24.* firefox-esr-17.*
MOZ_PKGCONFIG_FILES= # empty
USE_MOZILLA= -opus
MOZILLA_NAME= Firefox
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index 8288af78302b..23af59ab8247 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-38.0.6.source.tar.bz2) = 379a83c45c606aa046bf543a95f806024089e8794ee3001efd1ba2f7067e2c4d
-SIZE (firefox-38.0.6.source.tar.bz2) = 180322743
+SHA256 (firefox-39.0.source.tar.bz2) = 7e25014deb926df9220c3ab40ac6816c13a04c4cf7bd89b08fc1743307df1096
+SIZE (firefox-39.0.source.tar.bz2) = 182881881
diff --git a/www/firefox/files/patch-bug1013882 b/www/firefox/files/patch-bug1013882
index b3177989a39e..53b7b0b52d56 100644
--- a/www/firefox/files/patch-bug1013882
+++ b/www/firefox/files/patch-bug1013882
@@ -17,14 +17,14 @@ diff --git b2g/installer/package-manifest.in b2g/installer/package-manifest.in
index 17d433c..0416187 100644
--- b2g/installer/package-manifest.in
+++ b2g/installer/package-manifest.in
-@@ -576,7 +576,7 @@
- @BINPATH@/components/MozKeyboard.js
- @BINPATH@/components/InputMethod.manifest
+@@ -660,7 +660,7 @@
+ @RESPATH@/components/EngineeringModeAPI.js
+ @RESPATH@/components/EngineeringModeService.js
-#ifdef MOZ_DEBUG
+#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
- @BINPATH@/components/TestInterfaceJS.js
- @BINPATH@/components/TestInterfaceJS.manifest
+ @RESPATH@/components/TestInterfaceJS.js
+ @RESPATH@/components/TestInterfaceJS.manifest
#endif
diff --git browser/installer/package-manifest.in browser/installer/package-manifest.in
index b509fd4..195345c 100644
diff --git a/www/firefox/files/patch-bug1073117 b/www/firefox/files/patch-bug1073117
index 7708023aee70..191aed376527 100644
--- a/www/firefox/files/patch-bug1073117
+++ b/www/firefox/files/patch-bug1073117
@@ -1,27 +1,18 @@
-diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c
-index 34f22af..1b950ab 100644
---- widget/gtk/gtk2drawing.c
-+++ widget/gtk/gtk2drawing.c
-@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
- return MOZ_GTK_SUCCESS;
- }
-
--gint
-+static gint
- moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
- gint* focus_width, gint* focus_pad)
- {
-@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
- return MOZ_GTK_SUCCESS;
- }
-
--gint
-+static gint
- moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
- {
- static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
+commit 27ead4e
+Author: Martin Stransky <stransky@redhat.com>
+Date: Thu Apr 30 01:31:00 2015 -0400
+
+ Bug 1073117 - Add support for has_tab_gap notebook style. r=karlt
+
+ --HG--
+ extra : rebase_source : 1755623794079eb9fa8b4c7a17bd07f6f10a0dfe
+---
+ widget/gtk/gtk3drawing.c | 289 +++++++++++++++++++++-------------------
+ widget/gtk/nsNativeThemeGTK.cpp | 2 +
+ 2 files changed, 153 insertions(+), 138 deletions(-)
+
diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c
-index 08a58d6..7fef6fa 100644
+index 7fef6fa..a691316 100644
--- widget/gtk/gtk3drawing.c
+++ widget/gtk/gtk3drawing.c
@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget;
@@ -47,263 +38,7 @@ index 08a58d6..7fef6fa 100644
/* Add style property to GtkEntry.
* Adding the style property to the normal GtkEntry class means that it
* will work without issues inside GtkComboBox and for Spinbuttons. */
-@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing)
- gint
- moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
- {
-- gboolean interior_focus;
-- gint focus_width = 0;
-+ GtkBorder border;
-+ GtkBorder padding;
-+ GtkStyleContext *style;
-
- ensure_entry_widget();
-- gtk_widget_style_get(gEntryWidget,
-- "interior-focus", &interior_focus,
-- "focus-line-width", &focus_width,
-- NULL);
-- if (interior_focus) {
-- GtkBorder border;
-- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget);
-- gtk_style_context_get_border(style, 0, &border);
-- *focus_h_width = border.left + focus_width;
-- *focus_v_width = border.top + focus_width;
-- } else {
-- *focus_h_width = focus_width;
-- *focus_v_width = focus_width;
-- }
-- return MOZ_GTK_SUCCESS;
--}
--
--gint
--moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
-- gint* focus_width, gint* focus_pad)
--{
-- gtk_widget_style_get (widget,
-- "interior-focus", interior_focus,
-- "focus-line-width", focus_width,
-- "focus-padding", focus_pad,
-- NULL);
-+ style = gtk_widget_get_style_context(gEntryWidget);
-
-+ gtk_style_context_get_border(style, 0, &border);
-+ gtk_style_context_get_padding(style, 0, &padding);
-+ *focus_h_width = border.left + padding.left;
-+ *focus_v_width = border.top + padding.top;
- return MOZ_GTK_SUCCESS;
- }
-
-@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
- return MOZ_GTK_SUCCESS;
- }
-
--gint
--moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
--{
-- static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
-- GtkBorder *tmp_border;
--
-- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL);
--
-- if (tmp_border) {
-- *inner_border = *tmp_border;
-- gtk_border_free(tmp_border);
-- }
-- else
-- *inner_border = default_inner_border;
--
-- return MOZ_GTK_SUCCESS;
--}
--
- static gint
- moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
- GtkWidgetState* state,
-@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
- GtkStyleContext* style = gtk_widget_get_style_context(widget);
- gint x = rect->x, y=rect->y, width=rect->width, height=rect->height;
-
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
--
-- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
- gtk_widget_set_direction(widget, direction);
--
-- if (!interior_focus && state->focused) {
-- x += focus_width + focus_pad;
-- y += focus_width + focus_pad;
-- width -= 2 * (focus_width + focus_pad);
-- height -= 2 * (focus_width + focus_pad);
-- }
--
-+
- gtk_style_context_save(style);
- gtk_style_context_set_state(style, state_flags);
-
-@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
- }
-
- if (state->focused) {
-- if (interior_focus) {
-- GtkBorder border;
-- gtk_style_context_get_border(style, state_flags, &border);
-- x += border.left + focus_pad;
-- y += border.top + focus_pad;
-- width -= 2 * (border.left + focus_pad);
-- height -= 2 * (border.top + focus_pad);
-- } else {
-- x -= focus_width + focus_pad;
-- y -= focus_width + focus_pad;
-- width += 2 * (focus_width + focus_pad);
-- height += 2 * (focus_width + focus_pad);
-- }
--
-+ GtkBorder border;
-+ gtk_style_context_get_border(style, state_flags, &border);
-+ x += border.left;
-+ y += border.top;
-+ width -= (border.left + border.right);
-+ height -= (border.top + border.bottom);
- gtk_render_focus(style, cr, x, y, width, height);
- }
- gtk_style_context_restore(style);
-@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect,
- GtkTextDirection direction,
- gboolean ignore_focus)
- {
-- GtkBorder inner_border;
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
- GtkStyleContext* style;
- GtkBorder border;
-+ GtkBorder padding = {0, 0, 0, 0};
-
- style = gtk_widget_get_style_context(button);
-
- /* This mirrors gtkbutton's child positioning */
-- moz_gtk_button_get_inner_border(button, &inner_border);
-- moz_gtk_widget_get_focus(button, &interior_focus,
-- &focus_width, &focus_pad);
--
-- if (ignore_focus)
-- focus_width = focus_pad = 0;
--
- gtk_style_context_get_border(style, 0, &border);
-+ if (!ignore_focus)
-+ gtk_style_context_get_padding(style, 0, &padding);
-
-- inner_rect->x = rect->x + border.left + focus_width + focus_pad;
-- inner_rect->x += direction == GTK_TEXT_DIR_LTR ?
-- inner_border.left : inner_border.right;
-- inner_rect->y = rect->y + inner_border.top + border.top +
-- focus_width + focus_pad;
-- inner_rect->width = MAX(1, rect->width - inner_border.left -
-- inner_border.right - (border.left + focus_pad + focus_width) * 2);
-- inner_rect->height = MAX(1, rect->height - inner_border.top -
-- inner_border.bottom - (border.top + focus_pad + focus_width) * 2);
-+ inner_rect->x = rect->x + border.left + padding.left;
-+ inner_rect->y = rect->y + padding.top + border.top;
-+ inner_rect->width = MAX(1, rect->width - padding.left -
-+ padding.right - border.left * 2);
-+ inner_rect->height = MAX(1, rect->height - padding.top -
-+ padding.bottom - border.top * 2);
-
- return MOZ_GTK_SUCCESS;
- }
-@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
- {
- gint x = rect->x, y = rect->y, width = rect->width, height = rect->height;
- GtkStyleContext* style;
-- gboolean interior_focus;
-- gint focus_width;
- int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE
-
- gtk_widget_set_direction(widget, direction);
-
- style = gtk_widget_get_style_context(widget);
-
-- gtk_widget_style_get(widget,
-- "interior-focus", &interior_focus,
-- "focus-line-width", &focus_width,
-- NULL);
--
- if (draw_focus_outline_only) {
- // Inflate the given 'rect' with the focus outline size.
- gint h, v;
-@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
- /* This will get us the lit borders that focused textboxes enjoy on
- * some themes. */
- gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED);
-- if (!interior_focus) {
-- /* Indent the border a little bit if we have exterior focus
-- (this is what GTK does to draw native entries) */
-- x += focus_width;
-- y += focus_width;
-- width -= 2 * focus_width;
-- height -= 2 * focus_width;
-- }
- }
-
- if (state->disabled) {
-@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
- }
- gtk_render_frame(style, cr, x, y, width, height);
-
-- if (state->focused && !state->disabled) {
-- if (!interior_focus) {
-- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height);
-- }
-- }
- gtk_style_context_restore(style);
-
- return MOZ_GTK_SUCCESS;
-@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
- GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
- GtkStyleContext* style;
- GtkWidget *widget;
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
-
- if (isradio) {
- ensure_radiobutton_widget();
-@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
-
- style = gtk_widget_get_style_context(widget);
- gtk_style_context_save(style);
-- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
- gtk_style_context_set_state(style, state_flags);
-
- /* this is for drawing a prelight box */
-@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
- rect->x, rect->y, rect->width, rect->height);
- }
-
-- if (state->focused && !interior_focus) {
-- gtk_render_focus(style, cr,
-- rect->x, rect->y, rect->width, rect->height);
-- }
- gtk_style_context_restore(style);
-
- return MOZ_GTK_SUCCESS;
-@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
- {
- GtkStyleContext *style;
- GtkWidget *widget;
-- gboolean interior_focus;
-
- if (!state->focused)
- return MOZ_GTK_SUCCESS;
-@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
- }
- gtk_widget_set_direction(widget, direction);
-
-- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL);
-- if (!interior_focus)
-- return MOZ_GTK_SUCCESS;
--
- gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
- gtk_render_focus(style, cr,
- rect->x, rect->y, rect->width, rect->height);
-@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void)
+@@ -2012,6 +2021,9 @@ moz_gtk_get_tab_thickness(void)
GtkStyleContext * style;
ensure_tab_widget();
@@ -313,7 +48,7 @@ index 08a58d6..7fef6fa 100644
style = gtk_widget_get_style_context(gTabWidget);
gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK);
gtk_style_context_get_border(style, 0, &border);
-@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -2057,7 +2069,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
ensure_tab_widget();
gtk_widget_set_direction(gTabWidget, direction);
@@ -322,7 +57,7 @@ index 08a58d6..7fef6fa 100644
gtk_style_context_save(style);
moz_gtk_tab_prepare_style_context(style, flags);
-@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -2074,143 +2086,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
focusRect = backRect = tabRect;
@@ -577,14 +312,14 @@ index 08a58d6..7fef6fa 100644
- GtkBorder border;
- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border);
+ GtkBorder padding;
-+
-+ gtk_style_context_save(style);
-+ moz_gtk_tab_prepare_style_context(style, flags);
- focusRect.x += border.left;
- focusRect.width -= (border.left + border.right);
- focusRect.y += border.top;
- focusRect.height -= (border.top + border.bottom);
++ gtk_style_context_save(style);
++ moz_gtk_tab_prepare_style_context(style, flags);
++
+ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding);
+
+ focusRect.x += padding.left;
@@ -602,195 +337,7 @@ index 08a58d6..7fef6fa 100644
return MOZ_GTK_SUCCESS;
}
-@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- switch (widget) {
- case MOZ_GTK_BUTTON:
- {
-- GtkBorder inner_border;
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
--
- ensure_button_widget();
-+ style = gtk_widget_get_style_context(gButtonWidget);
-+
- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget));
-
- /* Don't add this padding in HTML, otherwise the buttons will
- become too big and stuff the layout. */
- if (!inhtml) {
-- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad);
-- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border);
-- *left += focus_width + focus_pad + inner_border.left;
-- *right += focus_width + focus_pad + inner_border.right;
-- *top += focus_width + focus_pad + inner_border.top;
-- *bottom += focus_width + focus_pad + inner_border.bottom;
-+ moz_gtk_add_style_padding(style, left, top, right, bottom);
- }
-
-- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget),
-- left, top, right, bottom);
-+ moz_gtk_add_style_border(style, left, top, right, bottom);
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_ENTRY:
-@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- ensure_entry_widget();
- style = gtk_widget_get_style_context(gEntryWidget);
- moz_gtk_add_style_border(style, left, top, right, bottom);
-- moz_gtk_add_style_padding(style, left, top, right, bottom);
-+
-+ /* Use the document padding in HTML
-+ and GTK style padding in XUL. */
-+ if (!inhtml) {
-+ moz_gtk_add_style_padding(style, left, top, right, bottom);
-+ }
-+
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_TREEVIEW:
-@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- * assigned.
- * That is why the following code is the same as for MOZ_GTK_BUTTON.
- * */
--
-- GtkBorder inner_border;
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
-+ GtkStyleContext *style;
-
- ensure_tree_header_cell_widget();
- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget));
-
-- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad);
-- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border);
-- *left += focus_width + focus_pad + inner_border.left;
-- *right += focus_width + focus_pad + inner_border.right;
-- *top += focus_width + focus_pad + inner_border.top;
-- *bottom += focus_width + focus_pad + inner_border.bottom;
--
-- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget),
-- left, top, right, bottom);
-+ style = gtk_widget_get_style_context(gTreeHeaderCellWidget);
-+
-+ moz_gtk_add_style_border(style, left, top, right, bottom);
-+ moz_gtk_add_style_padding(style, left, top, right, bottom);
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_TREE_HEADER_SORTARROW:
-@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- /* We need to account for the arrow on the dropdown, so text
- * doesn't come too close to the arrow, or in some cases spill
- * into the arrow. */
-- gboolean ignored_interior_focus, wide_separators;
-- gint focus_width, focus_pad, separator_width;
-+ gboolean wide_separators;
-+ gint separator_width;
- GtkRequisition arrow_req;
- GtkBorder border;
-
- ensure_combo_box_widgets();
-
-- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
-+ *left = *top = *right = *bottom =
-+ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
-+
-+ style = gtk_widget_get_style_context(gComboBoxButtonWidget);
-
- if (!inhtml) {
-- moz_gtk_widget_get_focus(gComboBoxButtonWidget,
-- &ignored_interior_focus,
-- &focus_width, &focus_pad);
-- *left += focus_width + focus_pad;
-+ moz_gtk_add_style_padding(style, left, top, right, bottom);
- }
-
-- style = gtk_widget_get_style_context(gComboBoxButtonWidget);
-- gtk_style_context_get_border(style, 0, &border);
--
-- *top = *left + border.top;
-- *left += border.left;
--
-- *right = *left; *bottom = *top;
-+ moz_gtk_add_style_border(style, left, top, right, bottom);
-
- /* If there is no separator, don't try to count its width. */
- separator_width = 0;
-@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- ensure_frame_widget();
- w = gFrameWidget;
- break;
-- case MOZ_GTK_CHECKBUTTON_LABEL:
-- case MOZ_GTK_RADIOBUTTON_LABEL:
-- {
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
--
-- /* If the focus is interior, then the label has a border of
-- (focus_width + focus_pad). */
-- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) {
-- ensure_checkbox_widget();
-- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
-- &focus_width, &focus_pad);
-- }
-- else {
-- ensure_radiobutton_widget();
-- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
-- &focus_width, &focus_pad);
-- }
--
-- if (interior_focus)
-- *left = *top = *right = *bottom = (focus_width + focus_pad);
--
-- return MOZ_GTK_SUCCESS;
-- }
--
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
- case MOZ_GTK_RADIOBUTTON_CONTAINER:
- {
-- gboolean interior_focus;
-- gint focus_width, focus_pad;
--
-- /* If the focus is _not_ interior, then the container has a border
-- of (focus_width + focus_pad). */
- if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) {
- ensure_checkbox_widget();
-- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
-- &focus_width, &focus_pad);
- w = gCheckboxWidget;
- } else {
- ensure_radiobutton_widget();
-- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
-- &focus_width, &focus_pad);
- w = gRadiobuttonWidget;
- }
-+ style = gtk_widget_get_style_context(w);
-
- *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
--
-- if (!interior_focus) {
-- *left += (focus_width + focus_pad);
-- *right += (focus_width + focus_pad);
-- *top += (focus_width + focus_pad);
-- *bottom += (focus_width + focus_pad);
-- }
--
-+ moz_gtk_add_style_border(style,
-+ left, top, right, bottom);
-+ moz_gtk_add_style_padding(style,
-+ left, top, right, bottom);
- return MOZ_GTK_SUCCESS;
- }
- case MOZ_GTK_MENUPOPUP:
-@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
- return MOZ_GTK_SUCCESS;
- }
- /* These widgets have no borders, since they are not containers. */
-+ case MOZ_GTK_CHECKBUTTON_LABEL:
-+ case MOZ_GTK_RADIOBUTTON_LABEL:
- case MOZ_GTK_SPLITTER_HORIZONTAL:
- case MOZ_GTK_SPLITTER_VERTICAL:
- case MOZ_GTK_CHECKBUTTON:
-@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+@@ -2831,11 +2855,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
gtk_style_context_save(style);
moz_gtk_tab_prepare_style_context(style, flags);
@@ -802,7 +349,7 @@ index 08a58d6..7fef6fa 100644
moz_gtk_add_style_padding(style, left, top, right, bottom);
gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL);
-@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+@@ -2846,16 +2866,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
int initial_gap;
gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL);
if (direction == GTK_TEXT_DIR_RTL)
@@ -821,52 +368,11 @@ index 08a58d6..7fef6fa 100644
}
gtk_style_context_restore(style);
-diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h
-index 1938e8f..5f71cfd 100644
---- widget/gtk/gtkdrawing.h
-+++ widget/gtk/gtkdrawing.h
-@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing);
- gint
- moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing);
-
--/**
-- * Get the inner-border value for a GtkButton widget (button or tree header)
-- * widget: [IN] the widget to get the border value for
-- * inner_border: [OUT] the inner border
-- *
-- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
-- */
--gint
--moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
--
- /** Get the extra size for the focus ring for outline:auto.
- * widget: [IN] the widget to get the focus metrics for
- * focus_h_width: [OUT] the horizontal width
-@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
- gint
- moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width);
-
--/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button.
-- * widget: [IN] the widget to get the focus metrics for
-- * interior_focus: [OUT] whether the focus is drawn around the
-- * label (TRUE) or around the whole container (FALSE)
-- * focus_width: [OUT] the width of the focus line
-- * focus_pad: [OUT] the padding between the focus line and children
-- *
-- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
-- */
--gint
--moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
-- gint* focus_width, gint* focus_pad);
--
- /** Get the horizontal padding for the menuitem widget or checkmenuitem widget.
- * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem
- *
diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp
-index e5e1867..76d28e3 100644
+index 9dedd76..779eceb 100644
--- widget/gtk/nsNativeThemeGTK.cpp
+++ widget/gtk/nsNativeThemeGTK.cpp
-@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
+@@ -765,6 +765,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
return false;
gint gap_height = moz_gtk_get_tab_thickness();
diff --git a/www/firefox/files/patch-bug1143411 b/www/firefox/files/patch-bug1143411
deleted file mode 100644
index 6c14d2275543..000000000000
--- a/www/firefox/files/patch-bug1143411
+++ /dev/null
@@ -1,27 +0,0 @@
-https://bugzilla.mozilla.org/show_bug.cgi?id=1143411
-
-diff --git a/config/system-headers b/config/system-headers
---- config/system-headers
-+++ config/system-headers
-@@ -465,16 +465,17 @@ freetype/tttables.h
- freetype/t1tables.h
- freetype/ftlcdfil.h
- freetype/ftsizes.h
- freetype/ftadvanc.h
- freetype/ftbitmap.h
- freetype/ftxf86.h
- freetype.h
- ftcache.h
-+ftfntfmt.h
- ftglyph.h
- ftsynth.h
- ftoutln.h
- ttnameid.h
- tttables.h
- t1tables.h
- ftlcdfil.h
- ftsizes.h
-
-
-
-
diff --git a/www/firefox/files/patch-bug779713 b/www/firefox/files/patch-bug779713
index cbf73d463db0..82909e824d66 100644
--- a/www/firefox/files/patch-bug779713
+++ b/www/firefox/files/patch-bug779713
@@ -65,13 +65,11 @@ index d317766..ddb13da 100644
# if __has_extension(cxx_constexpr)
# define MOZ_HAVE_CXX11_CONSTEXPR
# endif
-@@ -84,6 +88,9 @@
- # endif
- #elif defined(__GNUC__)
+@@ -86,6 +90,7 @@
# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
-+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0)
+ # define MOZ_HAVE_CXX11_CONSTEXPR
+ # if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0)
+# define MOZ_HAVE_CXX11_ALIGNAS
-+# endif
- # define MOZ_HAVE_CXX11_CONSTEXPR
- # define MOZ_HAVE_EXPLICIT_CONVERSION
- # endif
+ # define MOZ_HAVE_CXX11_CONSTEXPR_IN_TEMPLATES
+ # endif
+ # define MOZ_HAVE_EXPLICIT_CONVERSION
diff --git a/www/firefox/files/patch-bug826985 b/www/firefox/files/patch-bug826985
index 4fb4dde7bd4d..b8cd0de206e4 100644
--- a/www/firefox/files/patch-bug826985
+++ b/www/firefox/files/patch-bug826985
@@ -17,10 +17,10 @@ diff --git config/system-headers config/system-headers
index 55e4cd1..76567b3 100644
--- config/system-headers
+++ config/system-headers
-@@ -635,6 +635,7 @@ libgnomevfs/gnome-vfs-mime-handlers.h
- libgnomevfs/gnome-vfs-mime-utils.h
- libgnomevfs/gnome-vfs-ops.h
- libgnomevfs/gnome-vfs-standard-callbacks.h
+@@ -627,6 +627,7 @@ libgnome/libgnome.h
+ libgnomeui/gnome-icon-lookup.h
+ libgnomeui/gnome-icon-theme.h
+ libgnomeui/gnome-ui-init.h
+libv4l2.h
lib$routines.h
limits
diff --git a/www/firefox/files/patch-system-openh264 b/www/firefox/files/patch-system-openh264
index e694b28f436e..9bf447c54abe 100644
--- a/www/firefox/files/patch-system-openh264
+++ b/www/firefox/files/patch-system-openh264
@@ -34,7 +34,7 @@ diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp
index aa60acf..90878ca 100644
--- dom/media/gmp/GMPParent.cpp
+++ dom/media/gmp/GMPParent.cpp
-@@ -90,23 +90,16 @@
+@@ -93,22 +93,15 @@
mService = aService;
mDirectory = aPluginDir;
@@ -42,19 +42,18 @@ index aa60acf..90878ca 100644
- // where <gmp-plugin-id> should be gmp-gmpopenh264
- nsCOMPtr<nsIFile> parent;
- nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent));
-- if (NS_FAILED(rv)) {
-- return rv;
-- }
-- nsAutoString parentLeafName;
-- rv = parent->GetLeafName(parentLeafName);
+ nsAutoString leafname;
+ nsresult rv = aPluginDir->GetLeafName(leafname);
if (NS_FAILED(rv)) {
return rv;
}
- LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this,
-- NS_LossyConvertUTF16toASCII(parentLeafName).get()));
-+ NS_LossyConvertUTF16toASCII(leafname).get()));
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
+- if (NS_FAILED(rv)) {
+- return rv;
+- }
+- LOGD("%s: for %s", __FUNCTION__, NS_LossyConvertUTF16toASCII(parentLeafName).get());
++ LOGD("%s: for %s", __FUNCTION__, NS_LossyConvertUTF16toASCII(leafname).get());
- MOZ_ASSERT(parentLeafName.Length() > 4);
- mName = Substring(parentLeafName, 4);
@@ -125,7 +124,7 @@ index 1f3a0b1..93517be 100644
if (this._plugin.isEME) {
Preferences.observe(GMPPrefs.KEY_EME_ENABLED,
this.onPrefEMEGlobalEnabledChanged, this);
-@@ -120,17 +119,14 @@
+@@ -134,17 +133,14 @@
optionsType: AddonManager.OPTIONS_TYPE_INLINE,
get optionsURL() { return this._plugin.optionsURL; },
@@ -143,9 +142,9 @@ index 1f3a0b1..93517be 100644
return this._gmpPath;
},
-
- get id() { return this._plugin.id; },
- get type() { return "plugin"; },
- get isGMPlugin() { return true; },
+ get missingKey() {
+ return this._plugin.missingKey;
+ },
@@ -141,8 +137,13 @@
get description() { return this._plugin.description; },
get fullDescription() { return this._plugin.fullDescription; },
diff --git a/www/libxul/Makefile b/www/libxul/Makefile
index abff4c6b7677..fc9b90ce6154 100644
--- a/www/libxul/Makefile
+++ b/www/libxul/Makefile
@@ -2,37 +2,36 @@
# $FreeBSD$
PORTNAME= libxul
-DISTVERSION= 31.7.0
-PORTREVISION= 1
+DISTVERSION= 38.1.0
CATEGORIES?= www devel
MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source \
- MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build2/source
+ MOZILLA/firefox/candidates/${DISTVERSION}esr-candidates/build1/source
DISTNAME= firefox-${DISTVERSION}esr.source
MAINTAINER?= gecko@FreeBSD.org
COMMENT?= Mozilla runtime package that can be used to bootstrap XUL+XPCOM apps
-BUILD_DEPENDS= nspr>=4.10.6:${PORTSDIR}/devel/nspr \
- nss>=3.16.2.3:${PORTSDIR}/security/nss \
+BUILD_DEPENDS= nspr>=4.10.8:${PORTSDIR}/devel/nspr \
+ nss>=3.19.2:${PORTSDIR}/security/nss \
libevent2>=2.0.21_2:${PORTSDIR}/devel/libevent2 \
cairo>=1.12.16_1,2:${PORTSDIR}/graphics/cairo \
soundtouch>=1.8.0:${PORTSDIR}/audio/soundtouch \
harfbuzz>=0.9.25:${PORTSDIR}/print/harfbuzz \
graphite2>=1.2.4:${PORTSDIR}/graphics/graphite2 \
- libvorbis>=1.3.5:${PORTSDIR}/audio/libvorbis \
- opus>=1.1:${PORTSDIR}/audio/opus \
+ libvorbis>=1.3.4:${PORTSDIR}/audio/libvorbis \
libvpx>=1.3.0:${PORTSDIR}/multimedia/libvpx \
- sqlite3>=3.8.4.2:${PORTSDIR}/databases/sqlite3 \
+ sqlite3>=3.8.9:${PORTSDIR}/databases/sqlite3 \
${PYTHON_PKGNAMEPREFIX}sqlite3>0:${PORTSDIR}/databases/py-sqlite3 \
v4l_compat>0:${PORTSDIR}/multimedia/v4l_compat \
autoconf-2.13:${PORTSDIR}/devel/autoconf213 \
zip:${PORTSDIR}/archivers/zip \
unzip:${PORTSDIR}/archivers/unzip
+# opus>=1.1:${PORTSDIR}/audio/opus \
LIB_DEPENDS= libv4l2.so:${PORTSDIR}/multimedia/libv4l
-WRKSRC= ${WRKDIR}/mozilla-esr31
-CONFLICTS= libxul-1.9.*
+WRKSRC= ${WRKDIR}/mozilla-esr38
+CONFLICTS_INSTALL= libxul-1.9.*
USE_QT5= # empty
QT_NONSTANDARD= yes
@@ -47,11 +46,16 @@ MOZ_OPTIONS?= --enable-application=xulrunner
USE_GECKO= gecko
CPE_PRODUCT= firefox_esr
MOZILLA_EXEC_NAME=xulrunner
-USE_MOZILLA= # empty
+USE_MOZILLA= -opus
MOZILLA_PLIST_DIRS= bin include lib share/idl libdata
MOZ_PKGCONFIG_FILES= libxul-embedding libxul mozilla-js \
mozilla-plugin
+OPTIONS_DEFAULT= GTK2
+
+OPTIONS_SINGLE+= TOOLKIT
+OPTIONS_SINGLE_TOOLKIT= GTK2 GTK3
+
.include "${.CURDIR}/../../www/firefox/Makefile.options"
.include <bsd.port.pre.mk>
@@ -67,6 +71,10 @@ RUN_DEPENDS+= alsa-lib>=1.0.27.2_1:${PORTSDIR}/audio/alsa-lib
RUN_DEPENDS+= gstreamer1-libav>=1.2.4_1:${PORTSDIR}/multimedia/gstreamer1-libav
.endif
+.if ${PORT_OPTIONS:MGTK3}
+BUILD_DEPENDS+= gtk3>=3.14.6:${PORTSDIR}/x11-toolkits/gtk30
+.endif
+
.if ${PORT_OPTIONS:MTEST}
BROKEN= stage-package fails with ValueError: no path specified
.endif
diff --git a/www/libxul/distinfo b/www/libxul/distinfo
index cdd6c531f1e3..d7587fa34ae9 100644
--- a/www/libxul/distinfo
+++ b/www/libxul/distinfo
@@ -1,2 +1,2 @@
-SHA256 (firefox-31.7.0esr.source.tar.bz2) = 8523c10ecb318f278a251d90e2161c07c7431796d4387fe9091dfa4e633474b6
-SIZE (firefox-31.7.0esr.source.tar.bz2) = 147772244
+SHA256 (firefox-38.1.0esr.source.tar.bz2) = 85eb5f916aa47a92cf50803dcb35e7fa3a9da29abf5fc91cbb6a70bbbc2618ff
+SIZE (firefox-38.1.0esr.source.tar.bz2) = 180392775
diff --git a/www/libxul/files/patch-bug1013675 b/www/libxul/files/patch-bug1013675
deleted file mode 100644
index eac435acf3d0..000000000000
--- a/www/libxul/files/patch-bug1013675
+++ /dev/null
@@ -1,88 +0,0 @@
-diff --git xpcom/base/nsDebugImpl.cpp xpcom/base/nsDebugImpl.cpp
-index 13a286f..293bd73 100644
---- xpcom/base/nsDebugImpl.cpp
-+++ xpcom/base/nsDebugImpl.cpp
-@@ -45,12 +45,43 @@
- #endif
- #endif
-
--#if defined(XP_MACOSX)
-+#if defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
-+ || defined(__NetBSD__) || defined(__OpenBSD__)
- #include <stdbool.h>
- #include <unistd.h>
-+#include <sys/param.h>
- #include <sys/sysctl.h>
- #endif
-
-+#if defined(__OpenBSD__)
-+#include <sys/proc.h>
-+#endif
-+
-+#if defined(__DragonFly__) || defined(__FreeBSD__)
-+#include <sys/user.h>
-+#endif
-+
-+#if defined(__NetBSD__)
-+#undef KERN_PROC
-+#define KERN_PROC KERN_PROC2
-+#define KINFO_PROC struct kinfo_proc2
-+#else
-+#define KINFO_PROC struct kinfo_proc
-+#endif
-+
-+#if defined(XP_MACOSX)
-+#define KP_FLAGS kp_proc.p_flag
-+#elif defined(__DragonFly__)
-+#define KP_FLAGS kp_flags
-+#elif defined(__FreeBSD__)
-+#define KP_FLAGS ki_flag
-+#elif defined(__OpenBSD__) && !defined(_P_TRACED)
-+#define KP_FLAGS p_psflags
-+#define P_TRACED PS_TRACED
-+#else
-+#define KP_FLAGS p_flag
-+#endif
-+
- #include "mozilla/mozalloc_abort.h"
-
- static void
-@@ -144,16 +175,22 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
-
- #if defined(XP_WIN)
- *aResult = ::IsDebuggerPresent();
--#elif defined(XP_MACOSX)
-+#elif defined(XP_MACOSX) || defined(__DragonFly__) || defined(__FreeBSD__) \
-+ || defined(__NetBSD__) || defined(__OpenBSD__)
- // Specify the info we're looking for
-- int mib[4];
-- mib[0] = CTL_KERN;
-- mib[1] = KERN_PROC;
-- mib[2] = KERN_PROC_PID;
-- mib[3] = getpid();
-+ int mib[] = {
-+ CTL_KERN,
-+ KERN_PROC,
-+ KERN_PROC_PID,
-+ getpid(),
-+#if defined(__NetBSD__) || defined(__OpenBSD__)
-+ sizeof(KINFO_PROC),
-+ 1,
-+#endif
-+ };
- size_t mibSize = sizeof(mib) / sizeof(int);
-
-- struct kinfo_proc info;
-+ KINFO_PROC info;
- size_t infoSize = sizeof(info);
- memset(&info, 0, infoSize);
-
-@@ -163,7 +200,7 @@ nsDebugImpl::GetIsDebuggerAttached(bool* aResult)
- return NS_OK;
- }
-
-- if (info.kp_proc.p_flag & P_TRACED) {
-+ if (info.KP_FLAGS & P_TRACED) {
- *aResult = true;
- }
- #endif
diff --git a/www/libxul/files/patch-bug1013882 b/www/libxul/files/patch-bug1013882
index 86dc379fe50f..b3177989a39e 100644
--- a/www/libxul/files/patch-bug1013882
+++ b/www/libxul/files/patch-bug1013882
@@ -30,14 +30,14 @@ diff --git browser/installer/package-manifest.in browser/installer/package-manif
index b509fd4..195345c 100644
--- browser/installer/package-manifest.in
+++ browser/installer/package-manifest.in
-@@ -583,7 +583,7 @@
- @BINPATH@/components/MozKeyboard.js
- @BINPATH@/components/InputMethod.manifest
+@@ -608,7 +608,7 @@
+ @RESPATH@/components/MozKeyboard.js
+ @RESPATH@/components/InputMethod.manifest
-#ifdef MOZ_DEBUG
+#if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
- @BINPATH@/components/TestInterfaceJS.js
- @BINPATH@/components/TestInterfaceJS.manifest
+ @RESPATH@/components/TestInterfaceJS.js
+ @RESPATH@/components/TestInterfaceJS.manifest
#endif
diff --git mobile/android/installer/Makefile.in mobile/android/installer/Makefile.in
index 96dceab..3528ad6 100644
diff --git a/www/libxul/files/patch-bug1015547 b/www/libxul/files/patch-bug1015547
deleted file mode 100644
index ecb488c36e7f..000000000000
--- a/www/libxul/files/patch-bug1015547
+++ /dev/null
@@ -1,95 +0,0 @@
-diff --git configure.in configure.in
-index 7bed45f..053de17 100644
---- configure.in
-+++ configure.in
-@@ -2950,7 +2950,7 @@ dnl Checks for library functions.
- dnl ========================================================
- AC_PROG_GCC_TRADITIONAL
- AC_FUNC_MEMCMP
--AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r)
-+AC_CHECK_FUNCS(stat64 lstat64 truncate64 statvfs64 statvfs statfs64 statfs getpagesize localtime_r arc4random arc4random_buf)
-
- dnl check for clock_gettime(), the CLOCK_MONOTONIC clock
- AC_CACHE_CHECK(for clock_gettime(CLOCK_MONOTONIC),
-diff --git xpcom/base/nsUUIDGenerator.cpp xpcom/base/nsUUIDGenerator.cpp
-index 0687344..ca3ff8b 100644
---- xpcom/base/nsUUIDGenerator.cpp
-+++ xpcom/base/nsUUIDGenerator.cpp
-@@ -15,6 +15,10 @@
-
- #include "nsUUIDGenerator.h"
-
-+#ifdef ANDROID
-+extern "C" NS_EXPORT void arc4random_buf(void *, size_t);
-+#endif
-+
- using namespace mozilla;
-
- NS_IMPL_ISUPPORTS1(nsUUIDGenerator, nsIUUIDGenerator)
-@@ -34,7 +38,7 @@ nsUUIDGenerator::Init()
- // We're a service, so we're guaranteed that Init() is not going
- // to be reentered while we're inside Init().
-
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- /* initialize random number generator using NSPR random noise */
- unsigned int seed;
-
-@@ -67,7 +71,7 @@ nsUUIDGenerator::Init()
- return NS_ERROR_FAILURE;
- #endif
-
--#endif /* non XP_WIN and non XP_MACOSX */
-+#endif /* non XP_WIN and non XP_MACOSX and non ARC4RANDOM */
-
- return NS_OK;
- }
-@@ -114,13 +118,16 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
- * back to it; instead, we use the value returned when we called
- * initstate, since older glibc's have broken setstate() return values
- */
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- setstate(mState);
- #endif
-
-+#ifdef HAVE_ARC4RANDOM_BUF
-+ arc4random_buf(id, sizeof(nsID));
-+#else /* HAVE_ARC4RANDOM_BUF */
- size_t bytesLeft = sizeof(nsID);
- while (bytesLeft > 0) {
--#ifdef ANDROID
-+#ifdef HAVE_ARC4RANDOM
- long rval = arc4random();
- const size_t mRBytes = 4;
- #else
-@@ -141,6 +148,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
-
- bytesLeft -= toWrite;
- }
-+#endif /* HAVE_ARC4RANDOM_BUF */
-
- /* Put in the version */
- id->m2 &= 0x0fff;
-@@ -150,7 +158,7 @@ nsUUIDGenerator::GenerateUUIDInPlace(nsID* id)
- id->m3[0] &= 0x3f;
- id->m3[0] |= 0x80;
-
--#ifndef ANDROID
-+#ifndef HAVE_ARC4RANDOM
- /* Restore the previous RNG state */
- setstate(mSavedState);
- #endif
-diff --git xpcom/base/nsUUIDGenerator.h xpcom/base/nsUUIDGenerator.h
-index 6a24212..68ed6f2 100644
---- xpcom/base/nsUUIDGenerator.h
-+++ xpcom/base/nsUUIDGenerator.h
-@@ -27,7 +27,7 @@ private:
- protected:
-
- mozilla::Mutex mLock;
--#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(ANDROID)
-+#if !defined(XP_WIN) && !defined(XP_MACOSX) && !defined(HAVE_ARC4RANDOM)
- char mState[128];
- char *mSavedState;
- uint8_t mRBytes;
diff --git a/www/libxul/files/patch-bug1021171 b/www/libxul/files/patch-bug1021171
deleted file mode 100644
index 9e663a6779e0..000000000000
--- a/www/libxul/files/patch-bug1021171
+++ /dev/null
@@ -1,193 +0,0 @@
-commit dd19f59
-Author: Trevor Saunders <trev.saunders@gmail.com>
-Date: Fri Jun 6 15:31:30 2014 -0400
-
- bug 1021171 - don't return nulllptr in functions returning bool r=bz,waldo
----
- js/src/builtin/TypedObject.cpp | 32 ++++++++++++++++----------------
- js/src/frontend/BytecodeCompiler.cpp | 2 +-
- js/xpconnect/wrappers/XrayWrapper.cpp | 2 +-
- netwerk/ipc/NeckoParent.cpp | 2 +-
- 4 files changed, 19 insertions(+), 19 deletions(-)
-
-diff --git js/src/builtin/TypedObject.cpp js/src/builtin/TypedObject.cpp
-index 9e284b9..7a0a7fc 100644
---- js/src/builtin/TypedObject.cpp
-+++ js/src/builtin/TypedObject.cpp
-@@ -710,12 +710,12 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp)
- contents.append(")");
- RootedAtom stringRepr(cx, contents.finishAtom());
- if (!stringRepr)
-- return nullptr;
-+ return false;
-
- // Extract ArrayType.prototype
- RootedObject arrayTypePrototype(cx, GetPrototype(cx, arrayTypeGlobal));
- if (!arrayTypePrototype)
-- return nullptr;
-+ return false;
-
- // Create the instance of ArrayType
- Rooted<UnsizedArrayTypeDescr *> obj(cx);
-@@ -728,7 +728,7 @@ ArrayMetaTypeDescr::construct(JSContext *cx, unsigned argc, Value *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().length,
- UndefinedHandleValue, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- args.rval().setObject(*obj);
- return true;
-@@ -762,7 +762,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!size.isValid()) {
- JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr,
- JSMSG_TYPEDOBJECT_TOO_BIG);
-- return nullptr;
-+ return false;
- }
-
- // Construct a canonical string `new ArrayType(<elementType>).dimension(N)`:
-@@ -775,7 +775,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- contents.append(")");
- RootedAtom stringRepr(cx, contents.finishAtom());
- if (!stringRepr)
-- return nullptr;
-+ return false;
-
- // Create the sized type object.
- Rooted<SizedArrayTypeDescr*> obj(cx);
-@@ -793,7 +793,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().length,
- lengthVal, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // Add `unsized` property, which is a link from the sized
- // array to the unsized array.
-@@ -801,7 +801,7 @@ UnsizedArrayTypeDescr::dimension(JSContext *cx, unsigned int argc, jsval *vp)
- if (!JSObject::defineProperty(cx, obj, cx->names().unsized,
- unsizedTypeDescrValue, nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- args.rval().setObject(*obj);
- return true;
-@@ -1253,7 +1253,7 @@ DefineSimpleTypeDescr(JSContext *cx,
- Rooted<TypedProto*> proto(cx);
- proto = NewObjectWithProto<TypedProto>(cx, objProto, nullptr, TenuredObject);
- if (!proto)
-- return nullptr;
-+ return false;
- proto->initTypeDescrSlot(*descr);
- descr->initReservedSlot(JS_DESCR_SLOT_TYPROTO, ObjectValue(*proto));
-
-@@ -1358,14 +1358,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- #define BINARYDATA_SCALAR_DEFINE(constant_, type_, name_) \
- if (!DefineSimpleTypeDescr<ScalarTypeDescr>(cx, global, module, constant_, \
- cx->names().name_)) \
-- return nullptr;
-+ return false;
- JS_FOR_EACH_SCALAR_TYPE_REPR(BINARYDATA_SCALAR_DEFINE)
- #undef BINARYDATA_SCALAR_DEFINE
-
- #define BINARYDATA_REFERENCE_DEFINE(constant_, type_, name_) \
- if (!DefineSimpleTypeDescr<ReferenceTypeDescr>(cx, global, module, constant_, \
- cx->names().name_)) \
-- return nullptr;
-+ return false;
- JS_FOR_EACH_REFERENCE_TYPE_REPR(BINARYDATA_REFERENCE_DEFINE)
- #undef BINARYDATA_REFERENCE_DEFINE
-
-@@ -1375,14 +1375,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- arrayType = DefineMetaTypeDescr<ArrayMetaTypeDescr>(
- cx, global, module, TypedObjectModuleObject::ArrayTypePrototype);
- if (!arrayType)
-- return nullptr;
-+ return false;
-
- RootedValue arrayTypeValue(cx, ObjectValue(*arrayType));
- if (!JSObject::defineProperty(cx, module, cx->names().ArrayType,
- arrayTypeValue,
- nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // StructType.
-
-@@ -1390,14 +1390,14 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- structType = DefineMetaTypeDescr<StructMetaTypeDescr>(
- cx, global, module, TypedObjectModuleObject::StructTypePrototype);
- if (!structType)
-- return nullptr;
-+ return false;
-
- RootedValue structTypeValue(cx, ObjectValue(*structType));
- if (!JSObject::defineProperty(cx, module, cx->names().StructType,
- structTypeValue,
- nullptr, nullptr,
- JSPROP_READONLY | JSPROP_PERMANENT))
-- return nullptr;
-+ return false;
-
- // Everything is setup, install module on the global object:
- RootedValue moduleValue(cx, ObjectValue(*module));
-@@ -1407,7 +1407,7 @@ GlobalObject::initTypedObjectModule(JSContext *cx, Handle<GlobalObject*> global)
- nullptr, nullptr,
- 0))
- {
-- return nullptr;
-+ return false;
- }
-
- return module;
-@@ -2449,7 +2449,7 @@ TypedObject::constructUnsized(JSContext *cx, unsigned int argc, Value *vp)
- if (length < 0) {
- JS_ReportErrorNumber(cx, js_GetErrorMessage,
- nullptr, JSMSG_TYPEDOBJECT_BAD_ARGS);
-- return nullptr;
-+ return false;
- }
- Rooted<TypedObject*> obj(cx, createZeroed(cx, callee, length));
- if (!obj)
-diff --git js/src/frontend/BytecodeCompiler.cpp js/src/frontend/BytecodeCompiler.cpp
-index 5aacc23..aed45ca 100644
---- js/src/frontend/BytecodeCompiler.cpp
-+++ js/src/frontend/BytecodeCompiler.cpp
-@@ -544,7 +544,7 @@ CompileFunctionBody(JSContext *cx, MutableHandleFunction fun, const ReadOnlyComp
-
- RootedScriptSource sourceObject(cx, CreateScriptSourceObject(cx, options));
- if (!sourceObject)
-- return nullptr;
-+ return false;
- ScriptSource* ss = sourceObject->source();
-
- SourceCompressionTask sct(cx);
-diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp
-index fd6458b..ab48770 100644
---- js/xpconnect/wrappers/XrayWrapper.cpp
-+++ js/xpconnect/wrappers/XrayWrapper.cpp
-@@ -363,7 +363,7 @@ public:
- {
- JSAutoCompartment ac(cx, target);
- if (!JS_GetClassPrototype(cx, key, protop))
-- return nullptr;
-+ return false;
- }
- return JS_WrapObject(cx, protop);
- }
-diff --git netwerk/ipc/NeckoParent.cpp netwerk/ipc/NeckoParent.cpp
-index 96dbb1d..ef3293b 100644
---- netwerk/ipc/NeckoParent.cpp
-+++ netwerk/ipc/NeckoParent.cpp
-@@ -365,7 +365,7 @@ NeckoParent::RecvPRtspChannelConstructor(
- RtspChannelParent* p = static_cast<RtspChannelParent*>(aActor);
- return p->Init(aConnectArgs);
- #else
-- return nullptr;
-+ return false;
- #endif
- }
-
diff --git a/www/libxul/files/patch-bug1021761 b/www/libxul/files/patch-bug1021761
index 1d0cde369c34..253327b733a7 100644
--- a/www/libxul/files/patch-bug1021761
+++ b/www/libxul/files/patch-bug1021761
@@ -218,12 +218,12 @@ index a962553..1f780f4 100644
assert(p);
pthread_mutex_unlock(&stm->mutex);
-@@ -313,10 +360,10 @@ alsa_refill_stream(cubeb_stream * stm)
- return ERROR;
- }
- if (got > 0) {
-- snd_pcm_sframes_t wrote = snd_pcm_writei(stm->pcm, p, got);
-+ snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+@@ -327,10 +374,10 @@ alsa_refill_stream(cubeb_stream * stm)
+ b[i] *= stm->volume;
+ }
+ }
+- wrote = snd_pcm_writei(stm->pcm, p, got);
++ wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
if (wrote == -EPIPE) {
- snd_pcm_recover(stm->pcm, wrote, 1);
- wrote = snd_pcm_writei(stm->pcm, p, got);
@@ -533,42 +533,51 @@ index a962553..1f780f4 100644
assert((nfds_t) r == stm->nfds);
r = pthread_cond_init(&stm->cond, NULL);
-@@ -937,12 +1043,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
+@@ -895,7 +1001,7 @@ alsa_stream_destroy(cubeb_stream * stm)
+ pthread_mutex_lock(&stm->mutex);
+ if (stm->pcm) {
+ if (stm->state == DRAINING) {
+- snd_pcm_drain(stm->pcm);
++ WRAP(snd_pcm_drain)(stm->pcm);
+ }
+ alsa_locked_pcm_close(stm->pcm);
+ stm->pcm = NULL;
+@@ -938,12 +1044,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels)
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_any(stm->pcm, hw_params);
-+ rv = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
- if (rv < 0) {
+- r = snd_pcm_hw_params_any(stm->pcm, hw_params);
++ r = WRAP(snd_pcm_hw_params_any)(stm->pcm, hw_params);
+ if (r < 0) {
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
-+ rv = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
- if (rv < 0) {
+- r = snd_pcm_hw_params_get_channels_max(hw_params, max_channels);
++ r = WRAP(snd_pcm_hw_params_get_channels_max)(hw_params, max_channels);
+ if (r < 0) {
return CUBEB_ERROR;
}
-@@ -962,34 +1068,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
+@@ -963,34 +1069,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) {
/* get a pcm, disabling resampling, so we get a rate the
* hardware/dmix/pulse/etc. supports. */
-- rv = snd_pcm_open(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
-+ rv = WRAP(snd_pcm_open)(&pcm, "", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
- if (rv < 0) {
+- r = snd_pcm_open(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
++ r = WRAP(snd_pcm_open)(&pcm, "default", SND_PCM_STREAM_PLAYBACK | SND_PCM_NO_AUTO_RESAMPLE, 0);
+ if (r < 0) {
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_any(pcm, hw_params);
-+ rv = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
- if (rv < 0) {
+- r = snd_pcm_hw_params_any(pcm, hw_params);
++ r = WRAP(snd_pcm_hw_params_any)(pcm, hw_params);
+ if (r < 0) {
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
return CUBEB_ERROR;
}
-- rv = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
-+ rv = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
- if (rv >= 0) {
+- r = snd_pcm_hw_params_get_rate(hw_params, rate, &dir);
++ r = WRAP(snd_pcm_hw_params_get_rate)(hw_params, rate, &dir);
+ if (r >= 0) {
/* There is a default rate: use it. */
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
@@ -578,9 +587,9 @@ index a962553..1f780f4 100644
/* Use a common rate, alsa may adjust it based on hw/etc. capabilities. */
*rate = 44100;
-- rv = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
-+ rv = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
- if (rv < 0) {
+- r = snd_pcm_hw_params_set_rate_near(pcm, hw_params, rate, NULL);
++ r = WRAP(snd_pcm_hw_params_set_rate_near)(pcm, hw_params, rate, NULL);
+ if (r < 0) {
- snd_pcm_close(pcm);
+ WRAP(snd_pcm_close)(pcm);
return CUBEB_ERROR;
@@ -634,7 +643,7 @@ new file mode 100644
index 0000000..5e38e27
--- /dev/null
+++ media/libcubeb/src/cubeb_oss.c
-@@ -0,0 +1,397 @@
+@@ -0,0 +1,402 @@
+/*
+ * Copyright © 2014 Mozilla Foundation
+ *
@@ -1030,7 +1039,12 @@ index 0000000..5e38e27
+ .stream_start = oss_stream_start,
+ .stream_stop = oss_stream_stop,
+ .stream_get_position = oss_stream_get_position,
-+ .stream_get_latency = oss_stream_get_latency
++ .stream_get_latency = oss_stream_get_latency,
++ .stream_set_volume = oss_stream_set_volume,
++ .stream_set_panning = oss_stream_set_panning,
++ .stream_get_current_device = NULL,
++ .stream_device_destroy = NULL,
++ .stream_register_device_changed_callback = NULL
+};
diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
index 8b7a0dd..31212ce 100644
@@ -1056,36 +1070,33 @@ index 8b7a0dd..31212ce 100644
+CFLAGS += CONFIG['MOZ_OSS_CFLAGS']
CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index 991f03f..3d99eb5 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -26,9 +26,9 @@ ifdef JS_SHARED_LIBRARY
- LIBS += $(MOZ_JS_LIBS)
- endif
-
--ifdef MOZ_ALSA
-+ifdef MOZ_OSS
- LIBS += \
-- $(MOZ_ALSA_LIBS) \
-+ $(MOZ_OSS_LIBS) \
- $(NULL)
- endif
-
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -112,8 +112,8 @@ if CONFIG['JS_SHARED_LIBRARY']:
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['REALTIME_LIBS']
+
+-if CONFIG['MOZ_ALSA']:
+- OS_LIBS += CONFIG['MOZ_ALSA_LIBS']
++if CONFIG['MOZ_OSS']:
++ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
+ if CONFIG['MOZ_NATIVE_JPEG']:
+ OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index e191f13..4fb268a 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -146,9 +146,9 @@ OS_LIBS += $(call EXPAND_LIBNAME,secur32
- endif
- endif
-
--ifdef MOZ_ALSA
--EXTRA_DSO_LDOPTS += $(MOZ_ALSA_LIBS)
--endif
-+ifdef MOZ_OSS
-+EXTRA_DSO_LDOPTS += $(MOZ_OSS_LIBS)
-+endif
-
- ifdef HAVE_CLOCK_MONOTONIC
- EXTRA_DSO_LDOPTS += $(REALTIME_LIBS)
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -234,8 +234,8 @@ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ if not CONFIG['MOZ_TREE_PIXMAN']:
+ OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS']
+
+-if CONFIG['MOZ_ALSA']:
+- OS_LIBS += CONFIG['MOZ_ALSA_LIBS']
++if CONFIG['MOZ_OSS']:
++ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
+ if CONFIG['HAVE_CLOCK_MONOTONIC']:
+ OS_LIBS += CONFIG['REALTIME_LIBS']
diff --git a/www/libxul/files/patch-bug1026828 b/www/libxul/files/patch-bug1026828
deleted file mode 100644
index 69e79f5ac560..000000000000
--- a/www/libxul/files/patch-bug1026828
+++ /dev/null
@@ -1,20 +0,0 @@
-diff --git storage/src/moz.build storage/src/moz.build
-index 4cd2551..5c40536 100644
---- storage/src/moz.build
-+++ storage/src/moz.build
-@@ -50,11 +50,14 @@ FINAL_LIBRARY = 'storagecomps'
- # (such as NSS) might trigger an initialization of sqlite and allocation
- # of memory using the default allocator, prior to the storage service
- # registering its allocator, causing memory management failures (bug 938730).
-+# However, this is not an issue if both the jemalloc allocator and the default
-+# allocator are the same thing.
- #
- # Note: On Windows our sqlite build assumes we use jemalloc. If you disable
- # MOZ_STORAGE_MEMORY on Windows, you will also need to change the "ifdef
- # MOZ_MEMORY" options in db/sqlite3/src/Makefile.in.
--if CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_NATIVE_SQLITE']:
-+if CONFIG['MOZ_MEMORY'] and (not CONFIG['MOZ_NATIVE_SQLITE']
-+ or CONFIG['MOZ_NATIVE_JEMALLOC']):
- if CONFIG['OS_TARGET'] != 'Android':
- DEFINES['MOZ_STORAGE_MEMORY'] = True
-
diff --git a/www/libxul/files/patch-bug1041268 b/www/libxul/files/patch-bug1041268
new file mode 100644
index 000000000000..d4ab1a91395e
--- /dev/null
+++ b/www/libxul/files/patch-bug1041268
@@ -0,0 +1,26 @@
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+index 97f69d3..77a50b3 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.cc
+@@ -18,7 +18,7 @@ ScreenCapturer* ScreenCapturer::Create() {
+ return Create(DesktopCaptureOptions::CreateDefault());
+ }
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ ScreenCapturer* ScreenCapturer::CreateWithXDamage(
+ bool use_update_notifications) {
+ DesktopCaptureOptions options;
+diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+index a8d40a7..177a6c1 100644
+--- media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
++++ media/webrtc/trunk/webrtc/modules/desktop_capture/screen_capturer.h
+@@ -74,7 +74,7 @@ class ScreenCapturer : public DesktopCapturer {
+ static ScreenCapturer* Create(const DesktopCaptureOptions& options);
+ static ScreenCapturer* Create();
+
+-#if defined(WEBRTC_LINUX)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ // Creates platform-specific capturer and instructs it whether it should use
+ // X DAMAGE support.
+ static ScreenCapturer* CreateWithXDamage(bool use_x_damage);
diff --git a/www/libxul/files/patch-bug1041381 b/www/libxul/files/patch-bug1041381
deleted file mode 100644
index ef90b7b00c3f..000000000000
--- a/www/libxul/files/patch-bug1041381
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git config/rules.mk config/rules.mk
-index 1dee8c3..4d67eda 100644
---- config/rules.mk
-+++ config/rules.mk
-@@ -822,6 +822,7 @@ endif
- ifdef DTRACE_PROBE_OBJ
- EXTRA_DEPS += $(DTRACE_PROBE_OBJ)
- OBJS += $(DTRACE_PROBE_OBJ)
-+EXCLUDED_OBJS += $(DTRACE_PROBE_OBJ)
- endif
-
- $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
diff --git a/www/libxul/files/patch-bug1041795 b/www/libxul/files/patch-bug1041795
deleted file mode 100644
index 3e92884412fb..000000000000
--- a/www/libxul/files/patch-bug1041795
+++ /dev/null
@@ -1,48 +0,0 @@
-diff --git config/rules.mk config/rules.mk
-index 4d67eda..783942f 100644
---- config/rules.mk
-+++ config/rules.mk
-@@ -858,7 +858,7 @@ ifdef DTRACE_PROBE_OBJ
- ifndef DTRACE_LIB_DEPENDENT
- NON_DTRACE_OBJS := $(filter-out $(DTRACE_PROBE_OBJ),$(OBJS))
- $(DTRACE_PROBE_OBJ): $(NON_DTRACE_OBJS)
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(NON_DTRACE_OBJS)
- endif
- endif
- endif
-@@ -876,7 +876,7 @@ ifndef INCREMENTAL_LINKER
- endif
- ifdef DTRACE_LIB_DEPENDENT
- ifndef XP_MACOSX
-- dtrace -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
-+ dtrace -x nolibs -G -C -s $(MOZILLA_DTRACE_SRC) -o $(DTRACE_PROBE_OBJ) $(shell $(EXPAND_LIBS) $(MOZILLA_PROBE_LIBS))
- endif
- $(EXPAND_MKSHLIB) $(SHLIB_LDSTARTFILE) $(OBJS) $(SUB_SHLOBJS) $(DTRACE_PROBE_OBJ) $(MOZILLA_PROBE_LIBS) $(RESFILE) $(LDFLAGS) $(WRAP_LDFLAGS) $(SHARED_LIBRARY_LIBS) $(EXTRA_DSO_LDOPTS) $(MOZ_GLUE_LDFLAGS) $(OS_LIBS) $(EXTRA_LIBS) $(DEF_FILE) $(SHLIB_LDENDFILE) $(if $(LIB_IS_C_ONLY),,$(STLPORT_LIBS))
- @$(RM) $(DTRACE_PROBE_OBJ)
-diff --git js/src/Makefile.in js/src/Makefile.in
-index 28ca5e8..96793d7 100644
---- js/src/Makefile.in
-+++ js/src/Makefile.in
-@@ -342,7 +342,7 @@ endif
-
- ifdef HAVE_DTRACE
- $(CURDIR)/javascript-trace.h: $(srcdir)/devtools/javascript-trace.d
-- dtrace -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
-+ dtrace -x nolibs -h -s $(srcdir)/devtools/javascript-trace.d -o javascript-trace.h.in
- sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
- -e '/const/!s/char \*/const char */g' \
- javascript-trace.h.in > javascript-trace.h
-diff --git probes/Makefile.in probes/Makefile.in
-index 6d18f34..deec83f 100644
---- probes/Makefile.in
-+++ probes/Makefile.in
-@@ -7,7 +7,7 @@ export:: $(DIST)/include/mozilla-trace.h
-
- # Replace _DTRACE_VERSION with INCLUDE_MOZILLA_DTRACE
- $(DIST)/include/mozilla-trace.h: mozilla-trace.d Makefile
-- dtrace -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp
-+ dtrace -x nolibs -h -s $(srcdir)/mozilla-trace.d -o mozilla-trace.h.tmp
- sed -e 's/if _DTRACE_VERSION/ifdef INCLUDE_MOZILLA_DTRACE/' \
- mozilla-trace.h.tmp > $(DIST)/include/mozilla-trace.h
- rm mozilla-trace.h.tmp
diff --git a/www/libxul/files/patch-bug1046224 b/www/libxul/files/patch-bug1046224
deleted file mode 100644
index 50d268f8fabe..000000000000
--- a/www/libxul/files/patch-bug1046224
+++ /dev/null
@@ -1,26 +0,0 @@
-diff --git configure.in configure.in
-index 1853029..559bd45 100644
---- configure.in
-+++ configure.in
-@@ -2651,7 +2651,7 @@ if test "$ac_cv_sockaddr_sa_len" = true ; then
- AC_DEFINE(HAVE_SA_LEN)
- fi
-
--AC_ARG_ENABLE(dtrace,
-+MOZ_ARG_ENABLE_BOOL(dtrace,
- [ --enable-dtrace build with dtrace support if available (default=no)],
- [enable_dtrace="yes"],)
- if test "x$enable_dtrace" = "xyes"; then
-diff --git js/src/configure.in js/src/configure.in
-index 134dfd3..682c1fb 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2153,7 +2153,7 @@ dnl Quota support
- MOZ_CHECK_HEADERS(sys/quota.h)
- MOZ_CHECK_HEADERS(linux/quota.h)
-
--AC_ARG_ENABLE(dtrace,
-+MOZ_ARG_ENABLE_BOOL(dtrace,
- [ --enable-dtrace build with dtrace support if available (default=no)],
- [enable_dtrace="yes"],)
- if test "x$enable_dtrace" = "xyes"; then
diff --git a/www/libxul/files/patch-bug1061736 b/www/libxul/files/patch-bug1061736
deleted file mode 100644
index 08f361b449bd..000000000000
--- a/www/libxul/files/patch-bug1061736
+++ /dev/null
@@ -1,50 +0,0 @@
-commit a7add79
-Author: Gavin Sharp <gavin@gavinsharp.com>
-Date: Mon Oct 27 18:43:51 2014 -0700
-
- Bug 1061736: add DuckDuckGo as a search engine option in Firefox. r=dolske
----
- browser/locales/Makefile.in | 2 +-
- browser/locales/en-US/searchplugins/ddg.xml | 21 +++++++++++++++++++++
- 2 files changed, 22 insertions(+), 1 deletion(-)
-
-diff --git browser/locales/Makefile.in browser/locales/Makefile.in
-index eb3c30b..b172876 100644
---- browser/locales/Makefile.in
-+++ browser/locales/Makefile.in
-@@ -71,7 +71,7 @@ endif
- ifeq ($(MOZ_WIDGET_TOOLKIT) $(DIST_SUBDIR),windows metro)
- SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/metrolist.txt))
- else
--SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt))
-+SEARCHPLUGINS_NAMES = $(shell cat $(call MERGE_FILE,/searchplugins/list.txt)) ddg
- endif
- SEARCHPLUGINS_PATH := $(FINAL_TARGET)/searchplugins
- SEARCHPLUGINS := $(addsuffix .xml,$(SEARCHPLUGINS_NAMES))
-diff --git browser/locales/en-US/searchplugins/ddg.xml browser/locales/en-US/searchplugins/ddg.xml
-new file mode 100644
-index 0000000..d68deb4
---- /dev/null
-+++ browser/locales/en-US/searchplugins/ddg.xml
-@@ -0,0 +1,21 @@
-+<?xml version="1.0" encoding="utf-8"?>
-+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
-+ <ShortName>DuckDuckGo</ShortName>
-+ <Description>Search DuckDuckGo</Description>
-+ <InputEncoding>UTF-8</InputEncoding>
-+ <Image height="16" width="16">data:image/icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATCwAAEwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA11RgALs6oACbQ9wAj0v8AI9L/ACfQ9wAu0agANdUYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzN4CNdL/oK/z//////////////////////+jsPv/BDXX/wAz0t4AAAAAAAAAAAAAAAAAAAAAAAAAAAAyzvNSduD//////8jK/v+P+Lf/IbQL/17RPP+J3Y//wOKX//////9YeuX/ADLO8wAAAAAAAAAAAAAAAAAw091piOX/8/X9/1Fx5P9xhu//WOWZ/0W9Lv9Lwjn/J8BB/xyDAP9bdfL/9fP//2mI5v8AMNPdAAAAAAc610YRQ9f//////0Zr4P8AGdD/sb32////////////wrv//wAh1/8MPab/ACPc/05r4///////EkPX/wc610YANtWkrr/y/6S48P8AJ9L/AB3R/+/w/v///////////3+D7f8AQeL/AYTw/wFr5/8AMNb/p7Tv/6698v8AM9WkADLW//////8yXt//AC3V/wAw1/////////////z///8A0P7/AKb1/wWI7P8AuPf/AJ3w/zZW3P//////ADHV/wAx2P//////AzrZ/wAu1/84ZOL////////////e////AND//wC1+f8Atff/AZbv/wY62f8ELNf//////wAw1/8AMtn//////wAw2f8ALNn/kKrz////+//cwbH////////////R////Rcb8/wDO/f8A/P//AHzo//////8AMNj/ADXa//////8vXuL/ACna/4yq9///79T/jUkg/9i+r///////r2Q0/7Cozv8BKdr/AirY/zdZ4P//////ADTa/wI72tOuv/T/prr0/wAl2v+JqPb//7yW/+bUxv/9+/n////u//W+n/+Op/L/ADPd/wAv2v+ru/T/r7/0/wI72tMLQd1DEEjg//////9Cbef/ADng///////////////////////R3///AC3g/wAy3v9SeOn//////xFI4P8LQd1DAAAAAAM64PNmiuz/9/j//2mN7f/m7P3///////////9Cb+n/ACXd/wAt3v9rju3//////2iL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/P8J0vz/ELDz/xt85v8mSdj/JknY/yZJ2P8lStowJUjXYCZJ2P8nSdhwJErZryZK2f8oSNcgJUnajyZK2f8mStn/JkrZ/yZK2f8mStn/iJPA////////////////////////////0ff+/xjV/P8J0vz/Drn1/xiO6/8Yjuv/GI7r/xCw8/8Lyvr/CdL8/xmF6P8mStn/JkrZ/yVJ2o8oSNcgJkrZ/yRK2a8jStrfI0rZ3wAAAAAlSdq/Jkra/yZK2v8mStr/Jkra/yZK2v+xtsf///////////////////////////8o2Pz/CdL8/wvK+v8mStr/Jkra/yZK2v8mStr/Jkra/yZK2v8iW97/Jkra/yZK2v8mStr/JUnavwAAAAAjStnfI0ra3yZK2v8lSdq/AAAAACZH2O8mStr/Jkra/yZK2v8mStr/L1HY/9HR0f///////////////////////////yjY/P8J0vz/CdL8/xCw9P8QsPT/ELD0/xSf7/8ddeX/Jkra/yZK2v8mStr/Jkra/yZK2v8mR9jvAAAAACVJ2r8mStr/Jkvb/yVJ2r8AAAAAJkvb/yZL2/8mS9v/Jkvb/yZL2/9KZtL/4+Pj////////////////////////////4Pn//0fd/f8J0vz/CdL8/wnS/P8J0vz/CdL8/wnS/P8Lyvr/Fpfu/yJc3/8mS9v/Jkvb/yZL2/8AAAAAJUnavyZL2/8mS9z/JUncvwAAAAAmS9z/Jkvc/yZL3P8mS9z/Jkvc/26AyP/x8fH//////////////////////////////////////9H3/v/C9P7/o+7+/2fa+/8Oufb/CdL8/wnS/P8J0vz/CdL8/xiP7P8mS9z/Jkvc/wAAAAAlSdy/Jkvc/yZM3P8lTNy/AAAAACZJ2e8mTNz/Jkzc/yZM3P8mTNz/iJTB////////////qnth/5VaOf/x6eX///////////////////////Hp5f/x6eX/ydL2/yZM3P8kVN7/G37o/xKo8v8QsfT/HXbm/yZM3P8mSdnvAAAAACVM3L8mTNz/I0vc3yZJ2u8AAAAAJUzevyZM3f8mTN3/Jkzd/yZM3f+fqc3///////////+VWjn/v5yI/+re1///////////////////////jk8s/7iRe//J0vb/Jkzd/yZM3f8mTN3/Jkzd/yZM3f8mTN3/Jkzd/yVM3r8AAAAAI0vc3yNL3N8kTd2vJk3d/yhQ3yAlTd2PJk3d/yZN3f8mTd3/Jk3d/6St0v////////////Hp5f/q3tf///////////////////////////+xhm7/49PK/6Cx8P8mTd3/Jk3d/yZN3f8mTd3/Jk3d/yZN3f8mTd3/JU3djyhQ3yAmTd3/JE3drydN33AmTd7/J03fcCVK3zAmTd7/Jk3e/yZN3v8mTd7/pK7S///////Sp5r/////////////////////////////////////////////////T27k/yZN3v8mTd7/Jk3e/yZN3v8mTd7/Jk3e/yZN3v8lSt8wJ03fcCZN3v8nTd9wKFDfICZO3/8mTt3PAAAAACVN3r8mTt//Jk7f/yZO3/+EltX//////+fRyv/SqaD/59LO///////////////////////at63/vIBy/7Glxf8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8mTt//JU3evwAAAAAmTt3PJk7f/yhQ3yAAAAAAJE/dryZO3/8oUN9AKFDfQCZO3/8mTt//Jk7f/zhb2v/o6/T/////////////////////////////////////////////////XHrn/yZO3/8mTt//Jk7f/yZO3/8mTt//Jk7f/yZO3/8oUN9AKFDfQCZO3/8kT92vAAAAAAAAAAAoUN9AJk7g/yZO4M8AAAAAJk/hnyZO4P8mTuD/Jk7g/05v5v/k6fv//////////////////////////////////////3eR7P8mTuD/Jk7g/yZO4P8mTuD/Jk7g/yZO4P8mTuD/Jk/hnwAAAAAmTuDPJk7g/yhQ30AAAAAAAAAAAAAAAAAjT+GfJU/h/yVO4Y8gUN8QIk7gzyVP4f8lT+H/SWnW/0lp1v+bq+H/8fHx/////////////////6Cy8v9OcOb/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yJO4M8gUN8QJU7hjyVP4f8jT+GfAAAAAAAAAAAAAAAAAAAAACBQ3xAlTOHvJU/h/yVQ4mAgUN8QIk7hzyVP4f+ktOv///////////////////////H0/f9phur/JU/h/yVP4f8lT+H/JU/h/yVP4f8lT+H/JU/h/yVP4f8iTuHPIFDfECVQ4mAlT+H/JUzh7yBQ3xAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ3zAlUOLvJVDi/yVQ4mAgUN8QI1Din4mb2//J0/j/ydP4/6299P93ku3/M1vk/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/I1DinyBQ3xAlUOJgJVDi/yVQ4u8lUN8wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAlUOLvJVDi/yVQ4o8AAAAAJFDjQCVQ4r8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDi/yVQ4v8lUOL/JVDivyRQ40AAAAAAJVDijyVQ4v8lUOLvJVDkMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACVQ5DAjUeTfJVHj/yNR5N8kUONAAAAAACVQ5DAmUuOAJVHivyNR5N8lUeP/JVHj/yNR5N8lUeK/JlLjgCVQ5DAAAAAAJFDjQCNR5N8lUeP/I1Hk3yVQ5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBQ3xAjUuSfJVHk/yVR5P8jUeTfJFLkcChQ5yAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoUOcgJFLkcCNR5N8lUeT/JVHk/yNS5J8gUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkUONAI1LknyVS5P8lUuT/JVLk/yVS5O8lUeS/JVHkvyVR5L8lUeS/JVLk7yVS5P8lUuT/JVLk/yRS468kUONAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIFDfECVS5GAjUuWfIlPlzyVS5f8lUuX/JVLl/yVS5f8iU+XPI1LlnyVS5GAgUN8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AA///AAD//AAAP/ggBB/wgAEP4AAAB8AAAAPAAAADiAAAEYAAAAEQAAAIAAAAAAAAAAAgAAAEIAAABCAAAAQgAAAEIAAABCAAAAQAAAAAAAAAABAAAAiAAAABiAAAEcAAAAPAAAAD4AAAB/CAAQ/4IAQf/AfgP/8AAP//wAP/</Image>
-+ <Image height="26" width="65">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAAAaCAYAAADovjFxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxRTYyNzYzMzFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxRTYyNzYzMjFBQUUxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDE4MDExNzQwNzIwNjgxMTg3MUZCQUIxMEI4RjU1NzYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3Jp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</Image>
-+ <Image height="52" width="130">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAAA0CAYAAABGkOCVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxNTg5QTM3RjNCMjA2ODExODIyQUVEOUNBRDIxQzhDMyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo4RTdBNDY4ODFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo4RTdBNDY4NzFBQUQxMUU0ODc3NTg3NjMyNDFCNzExQSIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M2IChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTE3MzgzQ0I2QjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTU4OUEzN0YzQjIwNjgxMTgyMkFFRDlDQUQyMUM4QzMiLz4gPC9yZGY6RGVzY3Jp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</Image>
-+ <Url type="text/html" method="get" template="https://duckduckgo.com/">
-+ <Param name="q" value="{searchTerms}"/>
-+ <MozParam name="t" condition="purpose" purpose="contextmenu" value="ffcm"/>
-+ <MozParam name="t" condition="purpose" purpose="keyword" value="ffab"/>
-+ <MozParam name="t" condition="purpose" purpose="searchbar" value="ffsb"/>
-+ <MozParam name="t" condition="purpose" purpose="homepage" value="ffhp"/>
-+ <MozParam name="t" condition="purpose" purpose="newtab" value="ffnt"/>
-+ </Url>
-+ <Url type="application/x-suggestions+json" template="https://ac.duckduckgo.com/ac/">
-+ <Param name="q" value="{searchTerms}"/>
-+ <Param name="type" value="list"/>
-+ </Url>
-+</OpenSearchDescription>
diff --git a/www/libxul/files/patch-bug1067377 b/www/libxul/files/patch-bug1067377
deleted file mode 100644
index 898af08b7cab..000000000000
--- a/www/libxul/files/patch-bug1067377
+++ /dev/null
@@ -1,78 +0,0 @@
-diff --git content/media/encoder/VP8TrackEncoder.cpp content/media/encoder/VP8TrackEncoder.cpp
-index 452821c..ede21c5 100644
---- content/media/encoder/VP8TrackEncoder.cpp
-+++ content/media/encoder/VP8TrackEncoder.cpp
-@@ -84,7 +84,7 @@ VP8TrackEncoder::Init(int32_t aWidth, int32_t aHeight, int32_t aDisplayWidth,
- // Creating a wrapper to the image - setting image data to NULL. Actual
- // pointer will be set in encode. Setting align to 1, as it is meaningless
- // (actual memory is not allocated).
-- vpx_img_wrap(mVPXImageWrapper, IMG_FMT_I420,
-+ vpx_img_wrap(mVPXImageWrapper, VPX_IMG_FMT_I420,
- mFrameWidth, mFrameHeight, 1, nullptr);
-
- config.g_w = mFrameWidth;
-@@ -239,9 +239,9 @@ void VP8TrackEncoder::PrepareMutedFrame()
- uint8_t *cb = mMuteFrame.Elements() + yPlaneSize;
- uint8_t *cr = mMuteFrame.Elements() + yPlaneSize + uvPlaneSize;
-
-- mVPXImageWrapper->planes[PLANE_Y] = y;
-- mVPXImageWrapper->planes[PLANE_U] = cb;
-- mVPXImageWrapper->planes[PLANE_V] = cr;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth;
- mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth;
- mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
-@@ -297,9 +297,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
- const PlanarYCbCrImage::Data *data = yuv->GetData();
-
- if (isYUV420(data) && !data->mCbSkip) { // 420 planar
-- mVPXImageWrapper->planes[PLANE_Y] = data->mYChannel;
-- mVPXImageWrapper->planes[PLANE_U] = data->mCbChannel;
-- mVPXImageWrapper->planes[PLANE_V] = data->mCrChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = data->mYChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = data->mCbChannel;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = data->mCrChannel;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = data->mYStride;
- mVPXImageWrapper->stride[VPX_PLANE_U] = data->mCbCrStride;
- mVPXImageWrapper->stride[VPX_PLANE_V] = data->mCbCrStride;
-@@ -355,9 +355,9 @@ nsresult VP8TrackEncoder::PrepareRawFrame(VideoChunk &aChunk)
- return NS_ERROR_NOT_IMPLEMENTED;
- }
-
-- mVPXImageWrapper->planes[PLANE_Y] = y;
-- mVPXImageWrapper->planes[PLANE_U] = cb;
-- mVPXImageWrapper->planes[PLANE_V] = cr;
-+ mVPXImageWrapper->planes[VPX_PLANE_Y] = y;
-+ mVPXImageWrapper->planes[VPX_PLANE_U] = cb;
-+ mVPXImageWrapper->planes[VPX_PLANE_V] = cr;
- mVPXImageWrapper->stride[VPX_PLANE_Y] = mFrameWidth;
- mVPXImageWrapper->stride[VPX_PLANE_U] = halfWidth;
- mVPXImageWrapper->stride[VPX_PLANE_V] = halfWidth;
-diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-index d9c3a22..75195ae 100644
---- media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-+++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8_impl.cc
-@@ -180,7 +180,7 @@ int VP8EncoderImpl::InitEncode(const VideoCodec* inst,
- // Creating a wrapper to the image - setting image data to NULL. Actual
- // pointer will be set in encode. Setting align to 1, as it is meaningless
- // (actual memory is not allocated).
-- raw_ = vpx_img_wrap(NULL, IMG_FMT_I420, codec_.width, codec_.height,
-+ raw_ = vpx_img_wrap(NULL, VPX_IMG_FMT_I420, codec_.width, codec_.height,
- 1, NULL);
- // populate encoder configuration with default values
- if (vpx_codec_enc_config_default(vpx_codec_vp8_cx(), config_, 0)) {
-@@ -349,9 +349,9 @@ int VP8EncoderImpl::Encode(const I420VideoFrame& input_image,
- }
- // Image in vpx_image_t format.
- // Input image is const. VP8's raw image is not defined as const.
-- raw_->planes[PLANE_Y] = const_cast<uint8_t*>(input_image.buffer(kYPlane));
-- raw_->planes[PLANE_U] = const_cast<uint8_t*>(input_image.buffer(kUPlane));
-- raw_->planes[PLANE_V] = const_cast<uint8_t*>(input_image.buffer(kVPlane));
-+ raw_->planes[VPX_PLANE_Y] = const_cast<uint8_t*>(input_image.buffer(kYPlane));
-+ raw_->planes[VPX_PLANE_U] = const_cast<uint8_t*>(input_image.buffer(kUPlane));
-+ raw_->planes[VPX_PLANE_V] = const_cast<uint8_t*>(input_image.buffer(kVPlane));
- // TODO(mikhal): Stride should be set in initialization.
- raw_->stride[VPX_PLANE_Y] = input_image.stride(kYPlane);
- raw_->stride[VPX_PLANE_U] = input_image.stride(kUPlane);
diff --git a/www/libxul/files/patch-bug1073117 b/www/libxul/files/patch-bug1073117
new file mode 100644
index 000000000000..7708023aee70
--- /dev/null
+++ b/www/libxul/files/patch-bug1073117
@@ -0,0 +1,877 @@
+diff --git widget/gtk/gtk2drawing.c widget/gtk/gtk2drawing.c
+index 34f22af..1b950ab 100644
+--- widget/gtk/gtk2drawing.c
++++ widget/gtk/gtk2drawing.c
+@@ -831,7 +831,7 @@ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
++static gint
+ moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+ gint* focus_width, gint* focus_pad)
+ {
+@@ -928,7 +928,7 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
++static gint
+ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
+ {
+ static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
+diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c
+index 08a58d6..7fef6fa 100644
+--- widget/gtk/gtk3drawing.c
++++ widget/gtk/gtk3drawing.c
+@@ -65,6 +65,7 @@ static GtkWidget* gScrolledWindowWidget;
+ static style_prop_t style_prop_func;
+ static gboolean have_arrow_scaling;
+ static gboolean checkbox_check_state;
++static gboolean notebook_has_tab_gap;
+ static gboolean is_initialized;
+
+ #define ARROW_UP 0
+@@ -725,6 +726,14 @@ moz_gtk_init()
+ else
+ checkbox_check_state = GTK_STATE_FLAG_ACTIVE;
+
++ if(!gtk_check_version(3, 12, 0)) {
++ ensure_tab_widget();
++ gtk_widget_style_get(gTabWidget, "has-tab-gap", &notebook_has_tab_gap, NULL);
++ }
++ else {
++ notebook_has_tab_gap = TRUE;
++ }
++
+ /* Add style property to GtkEntry.
+ * Adding the style property to the normal GtkEntry class means that it
+ * will work without issues inside GtkComboBox and for Spinbuttons. */
+@@ -762,37 +771,17 @@ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing)
+ gint
+ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width)
+ {
+- gboolean interior_focus;
+- gint focus_width = 0;
++ GtkBorder border;
++ GtkBorder padding;
++ GtkStyleContext *style;
+
+ ensure_entry_widget();
+- gtk_widget_style_get(gEntryWidget,
+- "interior-focus", &interior_focus,
+- "focus-line-width", &focus_width,
+- NULL);
+- if (interior_focus) {
+- GtkBorder border;
+- GtkStyleContext *style = gtk_widget_get_style_context(gEntryWidget);
+- gtk_style_context_get_border(style, 0, &border);
+- *focus_h_width = border.left + focus_width;
+- *focus_v_width = border.top + focus_width;
+- } else {
+- *focus_h_width = focus_width;
+- *focus_v_width = focus_width;
+- }
+- return MOZ_GTK_SUCCESS;
+-}
+-
+-gint
+-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+- gint* focus_width, gint* focus_pad)
+-{
+- gtk_widget_style_get (widget,
+- "interior-focus", interior_focus,
+- "focus-line-width", focus_width,
+- "focus-padding", focus_pad,
+- NULL);
++ style = gtk_widget_get_style_context(gEntryWidget);
+
++ gtk_style_context_get_border(style, 0, &border);
++ gtk_style_context_get_padding(style, 0, &padding);
++ *focus_h_width = border.left + padding.left;
++ *focus_v_width = border.top + padding.top;
+ return MOZ_GTK_SUCCESS;
+ }
+
+@@ -880,24 +860,6 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
+-gint
+-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border)
+-{
+- static const GtkBorder default_inner_border = { 1, 1, 1, 1 };
+- GtkBorder *tmp_border;
+-
+- gtk_widget_style_get (widget, "inner-border", &tmp_border, NULL);
+-
+- if (tmp_border) {
+- *inner_border = *tmp_border;
+- gtk_border_free(tmp_border);
+- }
+- else
+- *inner_border = default_inner_border;
+-
+- return MOZ_GTK_SUCCESS;
+-}
+-
+ static gint
+ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+@@ -908,19 +870,8 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gint x = rect->x, y=rect->y, width=rect->width, height=rect->height;
+
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
+ gtk_widget_set_direction(widget, direction);
+-
+- if (!interior_focus && state->focused) {
+- x += focus_width + focus_pad;
+- y += focus_width + focus_pad;
+- width -= 2 * (focus_width + focus_pad);
+- height -= 2 * (focus_width + focus_pad);
+- }
+-
++
+ gtk_style_context_save(style);
+ gtk_style_context_set_state(style, state_flags);
+
+@@ -953,20 +904,12 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ if (state->focused) {
+- if (interior_focus) {
+- GtkBorder border;
+- gtk_style_context_get_border(style, state_flags, &border);
+- x += border.left + focus_pad;
+- y += border.top + focus_pad;
+- width -= 2 * (border.left + focus_pad);
+- height -= 2 * (border.top + focus_pad);
+- } else {
+- x -= focus_width + focus_pad;
+- y -= focus_width + focus_pad;
+- width += 2 * (focus_width + focus_pad);
+- height += 2 * (focus_width + focus_pad);
+- }
+-
++ GtkBorder border;
++ gtk_style_context_get_border(style, state_flags, &border);
++ x += border.left;
++ y += border.top;
++ width -= (border.left + border.right);
++ height -= (border.top + border.bottom);
+ gtk_render_focus(style, cr, x, y, width, height);
+ }
+ gtk_style_context_restore(style);
+@@ -1056,33 +999,23 @@ calculate_button_inner_rect(GtkWidget* button, GdkRectangle* rect,
+ GtkTextDirection direction,
+ gboolean ignore_focus)
+ {
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+ GtkStyleContext* style;
+ GtkBorder border;
++ GtkBorder padding = {0, 0, 0, 0};
+
+ style = gtk_widget_get_style_context(button);
+
+ /* This mirrors gtkbutton's child positioning */
+- moz_gtk_button_get_inner_border(button, &inner_border);
+- moz_gtk_widget_get_focus(button, &interior_focus,
+- &focus_width, &focus_pad);
+-
+- if (ignore_focus)
+- focus_width = focus_pad = 0;
+-
+ gtk_style_context_get_border(style, 0, &border);
++ if (!ignore_focus)
++ gtk_style_context_get_padding(style, 0, &padding);
+
+- inner_rect->x = rect->x + border.left + focus_width + focus_pad;
+- inner_rect->x += direction == GTK_TEXT_DIR_LTR ?
+- inner_border.left : inner_border.right;
+- inner_rect->y = rect->y + inner_border.top + border.top +
+- focus_width + focus_pad;
+- inner_rect->width = MAX(1, rect->width - inner_border.left -
+- inner_border.right - (border.left + focus_pad + focus_width) * 2);
+- inner_rect->height = MAX(1, rect->height - inner_border.top -
+- inner_border.bottom - (border.top + focus_pad + focus_width) * 2);
++ inner_rect->x = rect->x + border.left + padding.left;
++ inner_rect->y = rect->y + padding.top + border.top;
++ inner_rect->width = MAX(1, rect->width - padding.left -
++ padding.right - border.left * 2);
++ inner_rect->height = MAX(1, rect->height - padding.top -
++ padding.bottom - border.top * 2);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -1457,19 +1390,12 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ {
+ gint x = rect->x, y = rect->y, width = rect->width, height = rect->height;
+ GtkStyleContext* style;
+- gboolean interior_focus;
+- gint focus_width;
+ int draw_focus_outline_only = state->depressed; // NS_THEME_FOCUS_OUTLINE
+
+ gtk_widget_set_direction(widget, direction);
+
+ style = gtk_widget_get_style_context(widget);
+
+- gtk_widget_style_get(widget,
+- "interior-focus", &interior_focus,
+- "focus-line-width", &focus_width,
+- NULL);
+-
+ if (draw_focus_outline_only) {
+ // Inflate the given 'rect' with the focus outline size.
+ gint h, v;
+@@ -1501,14 +1427,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ /* This will get us the lit borders that focused textboxes enjoy on
+ * some themes. */
+ gtk_style_context_set_state(style, GTK_STATE_FLAG_FOCUSED);
+- if (!interior_focus) {
+- /* Indent the border a little bit if we have exterior focus
+- (this is what GTK does to draw native entries) */
+- x += focus_width;
+- y += focus_width;
+- width -= 2 * focus_width;
+- height -= 2 * focus_width;
+- }
+ }
+
+ if (state->disabled) {
+@@ -1520,11 +1438,6 @@ moz_gtk_entry_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+ gtk_render_frame(style, cr, x, y, width, height);
+
+- if (state->focused && !state->disabled) {
+- if (!interior_focus) {
+- gtk_render_focus(style, cr, rect->x, rect->y, rect->width, rect->height);
+- }
+- }
+ gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+@@ -1829,8 +1742,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
+ GtkStyleContext* style;
+ GtkWidget *widget;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+
+ if (isradio) {
+ ensure_radiobutton_widget();
+@@ -1843,7 +1754,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+
+ style = gtk_widget_get_style_context(widget);
+ gtk_style_context_save(style);
+- moz_gtk_widget_get_focus(widget, &interior_focus, &focus_width, &focus_pad);
+ gtk_style_context_set_state(style, state_flags);
+
+ /* this is for drawing a prelight box */
+@@ -1852,10 +1762,6 @@ moz_gtk_container_paint(cairo_t *cr, GdkRectangle* rect,
+ rect->x, rect->y, rect->width, rect->height);
+ }
+
+- if (state->focused && !interior_focus) {
+- gtk_render_focus(style, cr,
+- rect->x, rect->y, rect->width, rect->height);
+- }
+ gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+@@ -1868,7 +1774,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
+ {
+ GtkStyleContext *style;
+ GtkWidget *widget;
+- gboolean interior_focus;
+
+ if (!state->focused)
+ return MOZ_GTK_SUCCESS;
+@@ -1889,10 +1794,6 @@ moz_gtk_toggle_label_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+ gtk_widget_set_direction(widget, direction);
+
+- gtk_widget_style_get(widget, "interior-focus", &interior_focus, NULL);
+- if (!interior_focus)
+- return MOZ_GTK_SUCCESS;
+-
+ gtk_style_context_set_state(style, GetStateFlagsFromGtkWidgetState(state));
+ gtk_render_focus(style, cr,
+ rect->x, rect->y, rect->width, rect->height);
+@@ -2105,6 +2015,9 @@ moz_gtk_get_tab_thickness(void)
+ GtkStyleContext * style;
+
+ ensure_tab_widget();
++ if (!notebook_has_tab_gap)
++ return 0; /* tabs do not overdraw the tabpanel border with "no gap" style */
++
+ style = gtk_widget_get_style_context(gTabWidget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_NOTEBOOK);
+ gtk_style_context_get_border(style, 0, &border);
+@@ -2150,7 +2063,7 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+ ensure_tab_widget();
+ gtk_widget_set_direction(gTabWidget, direction);
+
+- style = gtk_widget_get_style_context(gTabWidget);
++ style = gtk_widget_get_style_context(gTabWidget);
+ gtk_style_context_save(style);
+ moz_gtk_tab_prepare_style_context(style, flags);
+
+@@ -2167,143 +2080,155 @@ moz_gtk_tab_paint(cairo_t *cr, GdkRectangle* rect,
+
+ focusRect = backRect = tabRect;
+
+- if ((flags & MOZ_GTK_TAB_SELECTED) == 0) {
+- /* Only draw the tab */
+- gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y, tabRect.width, tabRect.height,
+- (flags & MOZ_GTK_TAB_BOTTOM) ?
+- GTK_POS_TOP : GTK_POS_BOTTOM );
+- } else {
+- /* Draw the tab and the gap
+- * We want the gap to be positioned exactly on the tabpanel top
+- * border; since tabbox.css may set a negative margin so that the tab
+- * frame rect already overlaps the tabpanel frame rect, we need to take
+- * that into account when drawing. To that effect, nsNativeThemeGTK
+- * passes us this negative margin (bmargin in the graphic below) in the
+- * lowest bits of |flags|. We use it to set gap_voffset, the distance
+- * between the top of the gap and the bottom of the tab (resp. the
+- * bottom of the gap and the top of the tab when we draw a bottom tab),
+- * while ensuring that the gap always touches the border of the tab,
+- * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results
+- * with big negative or positive margins.
+- * Here is a graphical explanation in the case of top tabs:
+- * ___________________________
+- * / \
+- * | T A B |
+- * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel
+- * : ^ bmargin : ^
+- * : | (-negative margin, : |
+- * bottom : v passed in flags) : | gap_height
+- * of -> :.............................: | (the size of the
+- * the tab . part of the gap . | tabpanel top border)
+- * . outside of the tab . v
+- * ----------------------------------------------
+- *
+- * To draw the gap, we use gtk_paint_box_gap(), see comment in
+- * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall,
+- * which should suffice to ensure that the only visible border is the
+- * pierced one. If the tab is in the middle, we make the box_gap begin
+- * a bit to the left of the tab and end a bit to the right, adjusting
+- * the gap position so it still is under the tab, because we want the
+- * rendering of a gap in the middle of a tabpanel. This is the role of
+- * the gints gap_{l,r}_offset. On the contrary, if the tab is the
+- * first, we align the start border of the box_gap with the start
+- * border of the tab (left if LTR, right if RTL), by setting the
+- * appropriate offset to 0.*/
+- gint gap_loffset, gap_roffset, gap_voffset, gap_height;
+-
+- /* Get height needed by the gap */
+- gap_height = moz_gtk_get_tab_thickness();
+-
+- /* Extract gap_voffset from the first bits of flags */
+- gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK;
+- if (gap_voffset > gap_height)
+- gap_voffset = gap_height;
+-
+- /* Set gap_{l,r}_offset to appropriate values */
+- gap_loffset = gap_roffset = 20; /* should be enough */
+- if (flags & MOZ_GTK_TAB_FIRST) {
+- if (direction == GTK_TEXT_DIR_RTL)
+- gap_roffset = initial_gap;
+- else
+- gap_loffset = initial_gap;
+- }
+-
+- if (flags & MOZ_GTK_TAB_BOTTOM) {
+- /* Draw the tab on bottom */
+- focusRect.y += gap_voffset;
+- focusRect.height -= gap_voffset;
+-
++ if (notebook_has_tab_gap) {
++ if ((flags & MOZ_GTK_TAB_SELECTED) == 0) {
++ /* Only draw the tab */
+ gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y + gap_voffset, tabRect.width,
+- tabRect.height - gap_voffset, GTK_POS_TOP);
+-
+- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
+-
+- backRect.y += (gap_voffset - gap_height);
+- backRect.height = gap_height;
+-
+- /* Draw the gap; erase with background color before painting in
+- * case theme does not */
+- gtk_render_background(style, cr, backRect.x, backRect.y,
+- backRect.width, backRect.height);
+- cairo_save(cr);
+- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
+- cairo_clip(cr);
+-
+- gtk_render_frame_gap(style, cr,
+- tabRect.x - gap_loffset,
+- tabRect.y + gap_voffset - 3 * gap_height,
+- tabRect.width + gap_loffset + gap_roffset,
+- 3 * gap_height, GTK_POS_BOTTOM,
+- gap_loffset, gap_loffset + tabRect.width);
+- cairo_restore(cr);
++ tabRect.x, tabRect.y, tabRect.width, tabRect.height,
++ (flags & MOZ_GTK_TAB_BOTTOM) ?
++ GTK_POS_TOP : GTK_POS_BOTTOM );
+ } else {
+- /* Draw the tab on top */
+- focusRect.height -= gap_voffset;
+- gtk_render_extension(style, cr,
+- tabRect.x, tabRect.y, tabRect.width,
+- tabRect.height - gap_voffset, GTK_POS_BOTTOM);
+-
+- gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
+-
+- backRect.y += (tabRect.height - gap_voffset);
+- backRect.height = gap_height;
+-
+- /* Draw the gap; erase with background color before painting in
+- * case theme does not */
+- gtk_render_background(style, cr, backRect.x, backRect.y,
+- backRect.width, backRect.height);
+-
+- cairo_save(cr);
+- cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
+- cairo_clip(cr);
+-
+- gtk_render_frame_gap(style, cr,
+- tabRect.x - gap_loffset,
+- tabRect.y + tabRect.height - gap_voffset,
+- tabRect.width + gap_loffset + gap_roffset,
+- 3 * gap_height, GTK_POS_TOP,
+- gap_loffset, gap_loffset + tabRect.width);
+- cairo_restore(cr);
++ /* Draw the tab and the gap
++ * We want the gap to be positioned exactly on the tabpanel top
++ * border; since tabbox.css may set a negative margin so that the tab
++ * frame rect already overlaps the tabpanel frame rect, we need to take
++ * that into account when drawing. To that effect, nsNativeThemeGTK
++ * passes us this negative margin (bmargin in the graphic below) in the
++ * lowest bits of |flags|. We use it to set gap_voffset, the distance
++ * between the top of the gap and the bottom of the tab (resp. the
++ * bottom of the gap and the top of the tab when we draw a bottom tab),
++ * while ensuring that the gap always touches the border of the tab,
++ * i.e. 0 <= gap_voffset <= gap_height, to avoid surprinsing results
++ * with big negative or positive margins.
++ * Here is a graphical explanation in the case of top tabs:
++ * ___________________________
++ * / \
++ * | T A B |
++ * ----------|. . . . . . . . . . . . . . .|----- top of tabpanel
++ * : ^ bmargin : ^
++ * : | (-negative margin, : |
++ * bottom : v passed in flags) : | gap_height
++ * of -> :.............................: | (the size of the
++ * the tab . part of the gap . | tabpanel top border)
++ * . outside of the tab . v
++ * ----------------------------------------------
++ *
++ * To draw the gap, we use gtk_paint_box_gap(), see comment in
++ * moz_gtk_tabpanels_paint(). This box_gap is made 3 * gap_height tall,
++ * which should suffice to ensure that the only visible border is the
++ * pierced one. If the tab is in the middle, we make the box_gap begin
++ * a bit to the left of the tab and end a bit to the right, adjusting
++ * the gap position so it still is under the tab, because we want the
++ * rendering of a gap in the middle of a tabpanel. This is the role of
++ * the gints gap_{l,r}_offset. On the contrary, if the tab is the
++ * first, we align the start border of the box_gap with the start
++ * border of the tab (left if LTR, right if RTL), by setting the
++ * appropriate offset to 0.*/
++ gint gap_loffset, gap_roffset, gap_voffset, gap_height;
++
++ /* Get height needed by the gap */
++ gap_height = moz_gtk_get_tab_thickness();
++
++ /* Extract gap_voffset from the first bits of flags */
++ gap_voffset = flags & MOZ_GTK_TAB_MARGIN_MASK;
++ if (gap_voffset > gap_height)
++ gap_voffset = gap_height;
++
++ /* Set gap_{l,r}_offset to appropriate values */
++ gap_loffset = gap_roffset = 20; /* should be enough */
++ if (flags & MOZ_GTK_TAB_FIRST) {
++ if (direction == GTK_TEXT_DIR_RTL)
++ gap_roffset = initial_gap;
++ else
++ gap_loffset = initial_gap;
++ }
++
++ if (flags & MOZ_GTK_TAB_BOTTOM) {
++ /* Draw the tab on bottom */
++ focusRect.y += gap_voffset;
++ focusRect.height -= gap_voffset;
++
++ gtk_render_extension(style, cr,
++ tabRect.x, tabRect.y + gap_voffset, tabRect.width,
++ tabRect.height - gap_voffset, GTK_POS_TOP);
++
++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
++
++ backRect.y += (gap_voffset - gap_height);
++ backRect.height = gap_height;
++
++ /* Draw the gap; erase with background color before painting in
++ * case theme does not */
++ gtk_render_background(style, cr, backRect.x, backRect.y,
++ backRect.width, backRect.height);
++ cairo_save(cr);
++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
++ cairo_clip(cr);
++
++ gtk_render_frame_gap(style, cr,
++ tabRect.x - gap_loffset,
++ tabRect.y + gap_voffset - 3 * gap_height,
++ tabRect.width + gap_loffset + gap_roffset,
++ 3 * gap_height, GTK_POS_BOTTOM,
++ gap_loffset, gap_loffset + tabRect.width);
++ cairo_restore(cr);
++ } else {
++ /* Draw the tab on top */
++ focusRect.height -= gap_voffset;
++ gtk_render_extension(style, cr,
++ tabRect.x, tabRect.y, tabRect.width,
++ tabRect.height - gap_voffset, GTK_POS_BOTTOM);
++
++ gtk_style_context_remove_region(style, GTK_STYLE_REGION_TAB);
++
++ backRect.y += (tabRect.height - gap_voffset);
++ backRect.height = gap_height;
++
++ /* Draw the gap; erase with background color before painting in
++ * case theme does not */
++ gtk_render_background(style, cr, backRect.x, backRect.y,
++ backRect.width, backRect.height);
++
++ cairo_save(cr);
++ cairo_rectangle(cr, backRect.x, backRect.y, backRect.width, backRect.height);
++ cairo_clip(cr);
++
++ gtk_render_frame_gap(style, cr,
++ tabRect.x - gap_loffset,
++ tabRect.y + tabRect.height - gap_voffset,
++ tabRect.width + gap_loffset + gap_roffset,
++ 3 * gap_height, GTK_POS_TOP,
++ gap_loffset, gap_loffset + tabRect.width);
++ cairo_restore(cr);
++ }
+ }
++ } else {
++ gtk_render_background(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height);
++ gtk_render_frame(style, cr, tabRect.x, tabRect.y, tabRect.width, tabRect.height);
+ }
+
++ gtk_style_context_restore(style);
++
+ if (state->focused) {
+ /* Paint the focus ring */
+- GtkBorder border;
+- gtk_style_context_get_border(style, GetStateFlagsFromGtkWidgetState(state), &border);
++ GtkBorder padding;
++
++ gtk_style_context_save(style);
++ moz_gtk_tab_prepare_style_context(style, flags);
+
+- focusRect.x += border.left;
+- focusRect.width -= (border.left + border.right);
+- focusRect.y += border.top;
+- focusRect.height -= (border.top + border.bottom);
++ gtk_style_context_get_padding(style, GetStateFlagsFromGtkWidgetState(state), &padding);
++
++ focusRect.x += padding.left;
++ focusRect.width -= (padding.left + padding.right);
++ focusRect.y += padding.top;
++ focusRect.height -= (padding.top + padding.bottom);
+
+ gtk_render_focus(style, cr,
+ focusRect.x, focusRect.y, focusRect.width, focusRect.height);
++
++ gtk_style_context_restore(style);
+ }
+
+- gtk_style_context_restore(style);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2684,26 +2609,18 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ switch (widget) {
+ case MOZ_GTK_BUTTON:
+ {
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+ ensure_button_widget();
++ style = gtk_widget_get_style_context(gButtonWidget);
++
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gButtonWidget));
+
+ /* Don't add this padding in HTML, otherwise the buttons will
+ become too big and stuff the layout. */
+ if (!inhtml) {
+- moz_gtk_widget_get_focus(gButtonWidget, &interior_focus, &focus_width, &focus_pad);
+- moz_gtk_button_get_inner_border(gButtonWidget, &inner_border);
+- *left += focus_width + focus_pad + inner_border.left;
+- *right += focus_width + focus_pad + inner_border.right;
+- *top += focus_width + focus_pad + inner_border.top;
+- *bottom += focus_width + focus_pad + inner_border.bottom;
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
+- moz_gtk_add_style_border(gtk_widget_get_style_context(gButtonWidget),
+- left, top, right, bottom);
++ moz_gtk_add_style_border(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_ENTRY:
+@@ -2717,7 +2610,13 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ ensure_entry_widget();
+ style = gtk_widget_get_style_context(gEntryWidget);
+ moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++
++ /* Use the document padding in HTML
++ and GTK style padding in XUL. */
++ if (!inhtml) {
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++ }
++
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREEVIEW:
+@@ -2737,23 +2636,15 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ * assigned.
+ * That is why the following code is the same as for MOZ_GTK_BUTTON.
+ * */
+-
+- GtkBorder inner_border;
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
++ GtkStyleContext *style;
+
+ ensure_tree_header_cell_widget();
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(gTreeHeaderCellWidget));
+
+- moz_gtk_widget_get_focus(gTreeHeaderCellWidget, &interior_focus, &focus_width, &focus_pad);
+- moz_gtk_button_get_inner_border(gTreeHeaderCellWidget, &inner_border);
+- *left += focus_width + focus_pad + inner_border.left;
+- *right += focus_width + focus_pad + inner_border.right;
+- *top += focus_width + focus_pad + inner_border.top;
+- *bottom += focus_width + focus_pad + inner_border.bottom;
+-
+- moz_gtk_add_style_border(gtk_widget_get_style_context(gTreeHeaderCellWidget),
+- left, top, right, bottom);
++ style = gtk_widget_get_style_context(gTreeHeaderCellWidget);
++
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2773,29 +2664,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ /* We need to account for the arrow on the dropdown, so text
+ * doesn't come too close to the arrow, or in some cases spill
+ * into the arrow. */
+- gboolean ignored_interior_focus, wide_separators;
+- gint focus_width, focus_pad, separator_width;
++ gboolean wide_separators;
++ gint separator_width;
+ GtkRequisition arrow_req;
+ GtkBorder border;
+
+ ensure_combo_box_widgets();
+
+- *left = gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
++ *left = *top = *right = *bottom =
++ gtk_container_get_border_width(GTK_CONTAINER(gComboBoxButtonWidget));
++
++ style = gtk_widget_get_style_context(gComboBoxButtonWidget);
+
+ if (!inhtml) {
+- moz_gtk_widget_get_focus(gComboBoxButtonWidget,
+- &ignored_interior_focus,
+- &focus_width, &focus_pad);
+- *left += focus_width + focus_pad;
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
+- style = gtk_widget_get_style_context(gComboBoxButtonWidget);
+- gtk_style_context_get_border(style, 0, &border);
+-
+- *top = *left + border.top;
+- *left += border.left;
+-
+- *right = *left; *bottom = *top;
++ moz_gtk_add_style_border(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2847,60 +2732,23 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ ensure_frame_widget();
+ w = gFrameWidget;
+ break;
+- case MOZ_GTK_CHECKBUTTON_LABEL:
+- case MOZ_GTK_RADIOBUTTON_LABEL:
+- {
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- /* If the focus is interior, then the label has a border of
+- (focus_width + focus_pad). */
+- if (widget == MOZ_GTK_CHECKBUTTON_LABEL) {
+- ensure_checkbox_widget();
+- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
+- &focus_width, &focus_pad);
+- }
+- else {
+- ensure_radiobutton_widget();
+- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
+- &focus_width, &focus_pad);
+- }
+-
+- if (interior_focus)
+- *left = *top = *right = *bottom = (focus_width + focus_pad);
+-
+- return MOZ_GTK_SUCCESS;
+- }
+-
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+ case MOZ_GTK_RADIOBUTTON_CONTAINER:
+ {
+- gboolean interior_focus;
+- gint focus_width, focus_pad;
+-
+- /* If the focus is _not_ interior, then the container has a border
+- of (focus_width + focus_pad). */
+ if (widget == MOZ_GTK_CHECKBUTTON_CONTAINER) {
+ ensure_checkbox_widget();
+- moz_gtk_widget_get_focus(gCheckboxWidget, &interior_focus,
+- &focus_width, &focus_pad);
+ w = gCheckboxWidget;
+ } else {
+ ensure_radiobutton_widget();
+- moz_gtk_widget_get_focus(gRadiobuttonWidget, &interior_focus,
+- &focus_width, &focus_pad);
+ w = gRadiobuttonWidget;
+ }
++ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+-
+- if (!interior_focus) {
+- *left += (focus_width + focus_pad);
+- *right += (focus_width + focus_pad);
+- *top += (focus_width + focus_pad);
+- *bottom += (focus_width + focus_pad);
+- }
+-
++ moz_gtk_add_style_border(style,
++ left, top, right, bottom);
++ moz_gtk_add_style_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2927,6 +2775,8 @@ moz_gtk_get_widget_border(GtkThemeWidgetType widget, gint* left, gint* top,
+ return MOZ_GTK_SUCCESS;
+ }
+ /* These widgets have no borders, since they are not containers. */
++ case MOZ_GTK_CHECKBUTTON_LABEL:
++ case MOZ_GTK_RADIOBUTTON_LABEL:
+ case MOZ_GTK_SPLITTER_HORIZONTAL:
+ case MOZ_GTK_SPLITTER_VERTICAL:
+ case MOZ_GTK_CHECKBUTTON:
+@@ -2975,11 +2849,7 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+ gtk_style_context_save(style);
+ moz_gtk_tab_prepare_style_context(style, flags);
+
+- // TODO add_style_border() should be replaced
+- // with focus-line-width and focus-padding
+- // see Bug 877605
+ *left = *top = *right = *bottom = 0;
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+
+ gtk_widget_style_get (gTabWidget, "tab-curvature", &tab_curvature, NULL);
+@@ -2990,16 +2860,9 @@ moz_gtk_get_tab_border(gint* left, gint* top, gint* right, gint* bottom,
+ int initial_gap;
+ gtk_widget_style_get (gTabWidget, "initial-gap", &initial_gap, NULL);
+ if (direction == GTK_TEXT_DIR_RTL)
+- *right += initial_gap;
++ *right += initial_gap;
+ else
+- *left += initial_gap;
+- }
+-
+- // Top tabs have no bottom border, bottom tabs have no top border
+- if (flags & MOZ_GTK_TAB_BOTTOM) {
+- *top = 0;
+- } else {
+- *bottom = 0;
++ *left += initial_gap;
+ }
+
+ gtk_style_context_restore(style);
+diff --git widget/gtk/gtkdrawing.h widget/gtk/gtkdrawing.h
+index 1938e8f..5f71cfd 100644
+--- widget/gtk/gtkdrawing.h
++++ widget/gtk/gtkdrawing.h
+@@ -293,16 +293,6 @@ moz_gtk_checkbox_get_metrics(gint* indicator_size, gint* indicator_spacing);
+ gint
+ moz_gtk_radio_get_metrics(gint* indicator_size, gint* indicator_spacing);
+
+-/**
+- * Get the inner-border value for a GtkButton widget (button or tree header)
+- * widget: [IN] the widget to get the border value for
+- * inner_border: [OUT] the inner border
+- *
+- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
+- */
+-gint
+-moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
+-
+ /** Get the extra size for the focus ring for outline:auto.
+ * widget: [IN] the widget to get the focus metrics for
+ * focus_h_width: [OUT] the horizontal width
+@@ -313,19 +303,6 @@ moz_gtk_button_get_inner_border(GtkWidget* widget, GtkBorder* inner_border);
+ gint
+ moz_gtk_get_focus_outline_size(gint* focus_h_width, gint* focus_v_width);
+
+-/** Get the focus metrics for a treeheadercell, button, checkbox, or radio button.
+- * widget: [IN] the widget to get the focus metrics for
+- * interior_focus: [OUT] whether the focus is drawn around the
+- * label (TRUE) or around the whole container (FALSE)
+- * focus_width: [OUT] the width of the focus line
+- * focus_pad: [OUT] the padding between the focus line and children
+- *
+- * returns: MOZ_GTK_SUCCESS if there was no error, an error code otherwise
+- */
+-gint
+-moz_gtk_widget_get_focus(GtkWidget* widget, gboolean* interior_focus,
+- gint* focus_width, gint* focus_pad);
+-
+ /** Get the horizontal padding for the menuitem widget or checkmenuitem widget.
+ * horizontal_padding: [OUT] The left and right padding of the menuitem or checkmenuitem
+ *
+diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp
+index e5e1867..76d28e3 100644
+--- widget/gtk/nsNativeThemeGTK.cpp
++++ widget/gtk/nsNativeThemeGTK.cpp
+@@ -761,6 +761,8 @@ nsNativeThemeGTK::GetExtraSizeForWidget(nsIFrame* aFrame, uint8_t aWidgetType,
+ return false;
+
+ gint gap_height = moz_gtk_get_tab_thickness();
++ if (!gap_height)
++ return false;
+
+ int32_t extra = gap_height - GetTabMarginPixels(aFrame);
+ if (extra <= 0)
diff --git a/www/libxul/files/patch-bug1073709 b/www/libxul/files/patch-bug1073709
deleted file mode 100644
index f011d7438ad0..000000000000
--- a/www/libxul/files/patch-bug1073709
+++ /dev/null
@@ -1,18 +0,0 @@
-diff --git mfbt/Atomics.h mfbt/Atomics.h
-index 495a9d3..c7f7601 100644
---- mfbt/Atomics.h
-+++ mfbt/Atomics.h
-@@ -34,10 +34,12 @@
- * loose typing of the atomic builtins. GCC 4.5 and 4.6 lacks inline
- * definitions for unspecialized std::atomic and causes linking errors.
- * Therefore, we require at least 4.7.0 for using libstdc++.
-+ *
-+ * libc++ <atomic> is only functional with clang.
- */
- # if MOZ_USING_LIBSTDCXX && MOZ_LIBSTDCXX_VERSION_AT_LEAST(4, 7, 0)
- # define MOZ_HAVE_CXX11_ATOMICS
--# elif MOZ_USING_LIBCXX
-+# elif MOZ_USING_LIBCXX && defined(__clang__)
- # define MOZ_HAVE_CXX11_ATOMICS
- # endif
- /*
diff --git a/www/libxul/files/patch-bug1082199 b/www/libxul/files/patch-bug1082199
deleted file mode 100644
index a10356adaa5b..000000000000
--- a/www/libxul/files/patch-bug1082199
+++ /dev/null
@@ -1,26 +0,0 @@
-commit 258ec90
-Author: Guilherme Goncalves <guilherme.p.gonc@gmail.com>
-Date: Fri Oct 17 15:55:00 2014 +0200
-
- Bug 1082199 - Recompute stats in jemalloc_stats when using jemalloc3. r=glandium
----
- memory/build/mozjemalloc_compat.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git memory/build/mozjemalloc_compat.c memory/build/mozjemalloc_compat.c
-index 78bb13a..70265a7 100644
---- memory/build/mozjemalloc_compat.c
-+++ memory/build/mozjemalloc_compat.c
-@@ -68,6 +68,12 @@ jemalloc_stats_impl(jemalloc_stats_t *stats)
- size_t active, allocated, mapped, page, pdirty;
- size_t lg_chunk;
-
-+ // Refresh jemalloc's stats by updating its epoch, see ctl_refresh in
-+ // src/ctl.c
-+ uint64_t epoch = 0;
-+ size_t esz = sizeof(epoch);
-+ int ret = je_(mallctl)("epoch", &epoch, &esz, &epoch, esz);
-+
- CTL_GET("arenas.narenas", narenas);
- CTL_GET("arenas.page", page);
- CTL_GET("stats.active", active);
diff --git a/www/libxul/files/patch-bug1103858 b/www/libxul/files/patch-bug1103858
deleted file mode 100644
index 16cfd9973a86..000000000000
--- a/www/libxul/files/patch-bug1103858
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git configure.in configure.in
-index b2b45e7..dcfdfb7 100644
---- configure.in
-+++ configure.in
-@@ -8346,7 +8346,7 @@ case "$OS_TARGET" in
- NECKO_WIFI=1
- fi
- ;;
-- Darwin|FreeBSD|SunOS|WINNT)
-+ Darwin|DragonFly|FreeBSD|SunOS|WINNT)
- NECKO_WIFI=1
- ;;
- Linux)
-diff --git netwerk/wifi/moz.build netwerk/wifi/moz.build
-index d4de063..3949380 100644
---- netwerk/wifi/moz.build
-+++ netwerk/wifi/moz.build
-@@ -35,7 +35,7 @@ if CONFIG['OS_ARCH'] == 'Darwin':
- UNIFIED_SOURCES += [
- 'osx_corewlan.mm',
- ]
--elif CONFIG['OS_ARCH'] == 'FreeBSD':
-+elif CONFIG['OS_ARCH'] in ('DragonFly', 'FreeBSD'):
- UNIFIED_SOURCES += [
- 'nsWifiScannerFreeBSD.cpp',
- ]
-diff --git netwerk/wifi/nsWifiScannerFreeBSD.cpp netwerk/wifi/nsWifiScannerFreeBSD.cpp
-index bdf171e..4185d69 100644
---- netwerk/wifi/nsWifiScannerFreeBSD.cpp
-+++ netwerk/wifi/nsWifiScannerFreeBSD.cpp
-@@ -13,7 +13,11 @@
- #include <sys/socket.h>
- #include <net/if.h>
- #include <net/if_media.h>
-+#ifdef __DragonFly__
-+#include <netproto/802_11/ieee80211_ioctl.h>
-+#else
- #include <net80211/ieee80211_ioctl.h>
-+#endif
-
- #include <ifaddrs.h>
- #include <string.h>
diff --git a/www/libxul/files/patch-bug1125579 b/www/libxul/files/patch-bug1125579
deleted file mode 100644
index 710e76fa1025..000000000000
--- a/www/libxul/files/patch-bug1125579
+++ /dev/null
@@ -1,14 +0,0 @@
---- js/src/assembler/jit/ExecutableAllocator.h~
-+++ js/src/assembler/jit/ExecutableAllocator.h
-@@ -454,6 +454,11 @@ public:
- {
- User::IMB_Range(code, static_cast<char*>(code) + size);
- }
-+#elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_FREEBSD || WTF_OS_NETBSD)
-+ static void cacheFlush(void* code, size_t size)
-+ {
-+ __clear_cache(code, reinterpret_cast<char*>(code) + size);
-+ }
- #elif WTF_CPU_ARM_TRADITIONAL && WTF_OS_LINUX && WTF_COMPILER_RVCT
- static __asm void cacheFlush(void* code, size_t size);
- #elif WTF_CPU_ARM_TRADITIONAL && (WTF_OS_LINUX || WTF_OS_ANDROID) && WTF_COMPILER_GCC
diff --git a/www/libxul/files/patch-bug1125580 b/www/libxul/files/patch-bug1125580
deleted file mode 100644
index d07ff7782f23..000000000000
--- a/www/libxul/files/patch-bug1125580
+++ /dev/null
@@ -1,11 +0,0 @@
---- js/src/jit/arm/Architecture-arm.cpp~
-+++ js/src/jit/arm/Architecture-arm.cpp
-@@ -17,7 +17,7 @@
-
- #define HWCAP_USE_HARDFP_ABI (1 << 28)
-
--#if !(defined(ANDROID) || defined(MOZ_B2G)) && !defined(JS_ARM_SIMULATOR)
-+#if defined(__linux__) && !defined(ANDROID) && !defined(MOZ_B2G) && !defined(JS_ARM_SIMULATOR)
- #define HWCAP_ARMv7 (1 << 29)
- #include <asm/hwcap.h>
- #else
diff --git a/www/libxul/files/patch-bug1130155 b/www/libxul/files/patch-bug1130155
index 65864eed71c3..34584d42823f 100644
--- a/www/libxul/files/patch-bug1130155
+++ b/www/libxul/files/patch-bug1130155
@@ -82,7 +82,7 @@ index 9bbc129..e72944a 100644
/* This should never happen. */
if ((unsigned int) avail > stm->buffer_size) {
-@@ -355,17 +361,67 @@ alsa_refill_stream(cubeb_stream * stm)
+@@ -359,10 +365,11 @@ alsa_refill_stream(cubeb_stream * stm)
if (got < 0) {
pthread_mutex_unlock(&stm->mutex);
stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
@@ -90,15 +90,19 @@ index 9bbc129..e72944a 100644
return ERROR;
}
if (got > 0) {
-- snd_pcm_sframes_t wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
+- snd_pcm_sframes_t wrote;
++ snd_pcm_sframes_t wrote, towrite = got;
+
+ if (stm->params.format == CUBEB_SAMPLE_FLOAT32NE) {
+ float * b = (float *) p;
+@@ -375,14 +382,62 @@ alsa_refill_stream(cubeb_stream * stm)
+ b[i] *= stm->volume;
+ }
+ }
+- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
- if (wrote == -EPIPE) {
- WRAP(snd_pcm_recover)(stm->pcm, wrote, 1);
- wrote = WRAP(snd_pcm_writei)(stm->pcm, p, got);
-- }
-- assert(wrote >= 0 && wrote == got);
-- stm->write_position += wrote;
-- gettimeofday(&stm->last_activity, NULL);
-+ snd_pcm_sframes_t wrote, towrite = got;
+ for (;;) {
+ wrote = WRAP(snd_pcm_writei)(stm->pcm, p,
+ towrite > avail ? avail : towrite);
@@ -154,7 +158,10 @@ index 9bbc129..e72944a 100644
+ if (towrite == wrote)
+ break;
+ towrite -= wrote;
-+ }
+ }
+- assert(wrote >= 0 && wrote == got);
+- stm->write_position += wrote;
+- gettimeofday(&stm->last_activity, NULL);
}
if (got != avail) {
long buffer_fill = stm->buffer_size - (avail - got);
diff --git a/www/libxul/files/patch-bug1138845 b/www/libxul/files/patch-bug1138845
new file mode 100644
index 000000000000..12a9542f538f
--- /dev/null
+++ b/www/libxul/files/patch-bug1138845
@@ -0,0 +1,134 @@
+commit 4b5b332
+Author: Mike Hommey <mh+mozilla@glandium.org>
+Date: Tue Mar 3 18:41:13 2015 +0900
+
+ Bug 1138845 - Don't require atk-bridge for gtk+3 builds. r=tbsaunde
+---
+ accessible/atk/Platform.cpp | 29 +++++++++++++++++++----------
+ config/system-headers | 1 -
+ configure.in | 2 +-
+ 3 files changed, 20 insertions(+), 12 deletions(-)
+
+diff --git accessible/atk/Platform.cpp accessible/atk/Platform.cpp
+index a2afd96..2ed5e0b 100644
+--- accessible/atk/Platform.cpp
++++ accessible/atk/Platform.cpp
+@@ -18,8 +18,9 @@
+ #include <dbus/dbus.h>
+ #endif
+ #include <gtk/gtk.h>
++
+ #if (MOZ_WIDGET_GTK == 3)
+-#include <atk-bridge.h>
++extern "C" __attribute__((weak,visibility("default"))) int atk_bridge_adaptor_init(int*, char **[]);
+ #endif
+
+ using namespace mozilla;
+@@ -46,7 +47,6 @@ static gulong sToplevel_hide_hook = 0;
+
+ GType g_atk_hyperlink_impl_type = G_TYPE_INVALID;
+
+-#if (MOZ_WIDGET_GTK == 2)
+ struct GnomeAccessibilityModule
+ {
+ const char *libName;
+@@ -67,11 +67,13 @@ static GnomeAccessibilityModule sAtkBridge = {
+ "gnome_accessibility_module_shutdown", nullptr
+ };
+
++#if (MOZ_WIDGET_GTK == 2)
+ static GnomeAccessibilityModule sGail = {
+ "libgail.so", nullptr,
+ "gnome_accessibility_module_init", nullptr,
+ "gnome_accessibility_module_shutdown", nullptr
+ };
++#endif
+
+ static nsresult
+ LoadGtkModule(GnomeAccessibilityModule& aModule)
+@@ -98,7 +100,11 @@ LoadGtkModule(GnomeAccessibilityModule& aModule)
+ else
+ subLen = loc2 - loc1;
+ nsAutoCString sub(Substring(libPath, loc1, subLen));
++#if (MOZ_WIDGET_GTK == 2)
+ sub.AppendLiteral("/gtk-2.0/modules/");
++#else
++ sub.AppendLiteral("/gtk-3.0/modules/");
++#endif
+ sub.Append(aModule.libName);
+ aModule.lib = PR_LoadLibrary(sub.get());
+ if (aModule.lib)
+@@ -123,7 +129,6 @@ LoadGtkModule(GnomeAccessibilityModule& aModule)
+ }
+ return NS_OK;
+ }
+-#endif // (MOZ_WIDGET_GTK == 2)
+
+ void
+ a11y::PlatformInit()
+@@ -175,14 +180,17 @@ a11y::PlatformInit()
+
+ // Init atk-bridge now
+ PR_SetEnv("NO_AT_BRIDGE=0");
+-#if (MOZ_WIDGET_GTK == 2)
+- rv = LoadGtkModule(sAtkBridge);
+- if (NS_SUCCEEDED(rv)) {
+- (*sAtkBridge.init)();
+- }
+-#else
+- atk_bridge_adaptor_init(nullptr, nullptr);
++#if (MOZ_WIDGET_GTK == 3)
++ if (atk_bridge_adaptor_init) {
++ atk_bridge_adaptor_init(nullptr, nullptr);
++ } else
+ #endif
++ {
++ nsresult rv = LoadGtkModule(sAtkBridge);
++ if (NS_SUCCEEDED(rv)) {
++ (*sAtkBridge.init)();
++ }
++ }
+
+ if (!sToplevel_event_hook_added) {
+ sToplevel_event_hook_added = true;
+@@ -210,7 +218,6 @@ a11y::PlatformShutdown()
+ sToplevel_hide_hook);
+ }
+
+-#if (MOZ_WIDGET_GTK == 2)
+ if (sAtkBridge.lib) {
+ // Do not shutdown/unload atk-bridge,
+ // an exit function registered will take care of it
+@@ -221,6 +228,7 @@ a11y::PlatformShutdown()
+ sAtkBridge.init = nullptr;
+ sAtkBridge.shutdown = nullptr;
+ }
++#if (MOZ_WIDGET_GTK == 2)
+ if (sGail.lib) {
+ // Do not shutdown gail because
+ // 1) Maybe it's not init-ed by us. e.g. GtkEmbed
+diff --git config/system-headers config/system-headers
+index 2c94a7d..cf01775 100644
+--- config/system-headers
++++ config/system-headers
+@@ -189,7 +189,6 @@ asm/signal.h
+ ASRegistry.h
+ assert.h
+ atk/atk.h
+-atk-bridge.h
+ atlcom.h
+ atlconv.h
+ atlctl.cpp
+diff --git configure.in configure.in
+index 0bd1eb7..f3b3365 100644
+--- configure.in
++++ configure.in
+@@ -4408,7 +4408,7 @@ fi
+
+ if test "$COMPILE_ENVIRONMENT"; then
+ if test "$MOZ_ENABLE_GTK3"; then
+- PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 atk-bridge-2.0 $GDK_PACKAGES)
++ PKG_CHECK_MODULES(MOZ_GTK3, gtk+-3.0 >= $GTK3_VERSION gtk+-unix-print-3.0 glib-2.0 gobject-2.0 $GDK_PACKAGES)
+ MOZ_GTK3_CFLAGS="-I${_topsrcdir}/widget/gtk/compat-gtk3 $MOZ_GTK3_CFLAGS"
+ dnl Contrary to MOZ_GTK2_LIBS, MOZ_GTK3_LIBS needs to be literally added to TK_LIBS instead
+ dnl of a make reference because of how TK_LIBS is mangled in toolkit/library/moz.build
diff --git a/www/libxul/files/patch-bug1143686 b/www/libxul/files/patch-bug1143686
new file mode 100644
index 000000000000..d4cc2834d67e
--- /dev/null
+++ b/www/libxul/files/patch-bug1143686
@@ -0,0 +1,46 @@
+commit e50e738
+Author: Martin Stransky <stransky@redhat.com>
+Date: Mon Mar 16 08:00:00 2015 -0400
+
+ Bug 1143686 - Gtk3 - Render scrollbar thumb with margin. r=karlt
+---
+ widget/gtk/gtk3drawing.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git widget/gtk/gtk3drawing.c widget/gtk/gtk3drawing.c
+index 17f46ab..08a58d6 100644
+--- widget/gtk/gtk3drawing.c
++++ widget/gtk/gtk3drawing.c
+@@ -1230,6 +1230,7 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget,
+ GtkStyleContext* style;
+ GtkScrollbar *scrollbar;
+ GtkAdjustment *adj;
++ GtkBorder margin;
+
+ ensure_scrollbar_widget();
+
+@@ -1239,15 +1240,20 @@ moz_gtk_scrollbar_thumb_paint(GtkThemeWidgetType widget,
+ scrollbar = GTK_SCROLLBAR(gVertScrollbarWidget);
+
+ gtk_widget_set_direction(GTK_WIDGET(scrollbar), direction);
+-
++
+ style = gtk_widget_get_style_context(GTK_WIDGET(scrollbar));
+ gtk_style_context_save(style);
+-
++
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_SLIDER);
+ gtk_style_context_set_state(style, state_flags);
+
+- gtk_render_slider(style, cr, rect->x, rect->y,
+- rect->width, rect->height,
++ gtk_style_context_get_margin (style, state_flags, &margin);
++
++ gtk_render_slider(style, cr,
++ rect->x + margin.left,
++ rect->y + margin.top,
++ rect->width - margin.left - margin.right,
++ rect->height - margin.top - margin.bottom,
+ (widget == MOZ_GTK_SCROLLBAR_THUMB_HORIZONTAL) ?
+ GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
+
diff --git a/www/libxul/files/patch-bug1144643 b/www/libxul/files/patch-bug1144643
new file mode 100644
index 000000000000..fe8150ba182c
--- /dev/null
+++ b/www/libxul/files/patch-bug1144643
@@ -0,0 +1,33 @@
+commit a0ccc19
+Author: Martin Stransky <stransky@redhat.com>
+Date: Wed Mar 18 07:14:00 2015 -0400
+
+ Bug 1144643 - Render tooltips as transparent on Gtk3. r=karlt
+
+ --HG--
+ extra : rebase_source : 23085532b27350ca71cbe18db071628388003f33
+---
+ widget/gtk/nsNativeThemeGTK.cpp | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git widget/gtk/nsNativeThemeGTK.cpp widget/gtk/nsNativeThemeGTK.cpp
+index e5e1867..26d13a5 100644
+--- widget/gtk/nsNativeThemeGTK.cpp
++++ widget/gtk/nsNativeThemeGTK.cpp
+@@ -1528,9 +1528,15 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+ case NS_THEME_MENUPOPUP:
+ case NS_THEME_WINDOW:
+ case NS_THEME_DIALOG:
+- // Tooltips use gtk_paint_flat_box().
++ return eOpaque;
++ // Tooltips use gtk_paint_flat_box() on Gtk2
++ // but are shaped on Gtk3
+ case NS_THEME_TOOLTIP:
++#if (MOZ_WIDGET_GTK == 2)
+ return eOpaque;
++#else
++ return eTransparent;
++#endif
+ }
+
+ return eUnknownTransparency;
diff --git a/www/libxul/files/patch-bug702179 b/www/libxul/files/patch-bug702179
index d7b90a082519..d1aa293d2237 100644
--- a/www/libxul/files/patch-bug702179
+++ b/www/libxul/files/patch-bug702179
@@ -4,33 +4,21 @@ Date: Wed Nov 30 07:23:46 2011 +0800
Bug 702179 dtrace probes are not installed on Solaris with static js lib r=glandium
---
- configure.in | 2 +-
- js/src/Makefile.in | 2 --
- 2 files changed, 1 insertion(+), 3 deletions(-)
+ js/src/Makefile.in | 3 ---
+ toolkit/library/moz.build | 5 -----
+ 2 files changed, 8 deletions(-)
-diff --git configure.in configure.in
-index 66549c1..75b848d 100644
---- configure.in
-+++ configure.in
-@@ -966,7 +966,7 @@ MOZ_BZ2_LIBS='$(call EXPAND_LIBNAME_PATH,bz2,$(DEPTH)/modules/libbz2/src)'
- MOZ_PNG_CFLAGS="-I$_objdir/dist/include" # needed for freetype compilation
- MOZ_PNG_LIBS='$(call EXPAND_LIBNAME_PATH,mozpng,$(DEPTH)/media/libpng)'
-
--MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(LIBXUL_DIST)/lib)'
-+MOZ_JS_STATIC_LIBS='$(call EXPAND_LIBNAME_PATH,js_static,$(DEPTH)/js/src)'
- MOZ_JS_SHARED_LIBS='$(call EXPAND_LIBNAME_PATH,mozjs,$(LIBXUL_DIST)/lib)'
- MOZ_FIX_LINK_PATHS='-Wl,-rpath-link,$(LIBXUL_DIST)/bin -Wl,-rpath-link,$(prefix)/lib'
- XPCOM_FROZEN_LDOPTS='$(call EXPAND_LIBNAME_PATH,xul mozalloc,$(LIBXUL_DIST)/bin)'
diff --git js/src/Makefile.in js/src/Makefile.in
-index e28160a..28ca5e8 100644
+index 62bbfa0..90400cb 100644
--- js/src/Makefile.in
+++ js/src/Makefile.in
-@@ -18,8 +18,6 @@ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
- STATIC_LIBRARY_NAME = js_static
- LIBS = $(NSPR_LIBS)
+@@ -17,9 +17,6 @@ TOPLEVEL_BUILD := 1
+ run_for_side_effects := $(shell echo 'MAKE: $(MAKE)')
+ EXTRA_LIBS += $(NSPR_LIBS)
-DIST_INSTALL = 1
+-NO_EXPAND_LIBS = 1
-
- ifdef JS_STANDALONE
- SHARED_LIBRARY_LIBS += $(call EXPAND_LIBNAME_PATH,mfbt,$(DEPTH)/mfbt)
- ifndef MOZ_NATIVE_ZLIB
+ ifdef JS_HAS_CTYPES
+ ifdef MOZ_NATIVE_FFI
+ LOCAL_INCLUDES = $(MOZ_FFI_CFLAGS)
diff --git a/www/libxul/files/patch-bug779713 b/www/libxul/files/patch-bug779713
index e4643f4422cb..cbf73d463db0 100644
--- a/www/libxul/files/patch-bug779713
+++ b/www/libxul/files/patch-bug779713
@@ -47,7 +47,15 @@ diff --git mfbt/Attributes.h mfbt/Attributes.h
index d317766..ddb13da 100644
--- mfbt/Attributes.h
+++ mfbt/Attributes.h
-@@ -54,6 +54,9 @@
+@@ -50,6 +50,7 @@
+ * don't indicate support for them here, due to
+ * http://stackoverflow.com/questions/20498142/visual-studio-2013-explicit-keyword-bug
+ */
++# define MOZ_HAVE_CXX11_ALIGNAS
+ # define MOZ_HAVE_NEVER_INLINE __declspec(noinline)
+ # define MOZ_HAVE_NORETURN __declspec(noreturn)
+ # ifdef __clang__
+@@ -70,6 +71,9 @@
# ifndef __has_extension
# define __has_extension __has_feature /* compatibility, for older versions of clang */
# endif
@@ -57,21 +65,13 @@ index d317766..ddb13da 100644
# if __has_extension(cxx_constexpr)
# define MOZ_HAVE_CXX11_CONSTEXPR
# endif
-@@ -75,6 +78,9 @@
+@@ -84,6 +88,9 @@
# endif
#elif defined(__GNUC__)
# if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L
+# if MOZ_GCC_VERSION_AT_LEAST(4, 8, 0)
+# define MOZ_HAVE_CXX11_ALIGNAS
+# endif
- # if MOZ_GCC_VERSION_AT_LEAST(4, 7, 0)
- # define MOZ_HAVE_CXX11_OVERRIDE
- # define MOZ_HAVE_CXX11_FINAL final
-@@ -96,6 +102,7 @@
- # define MOZ_HAVE_NORETURN __attribute__((noreturn))
- #elif defined(_MSC_VER)
- # if _MSC_VER >= 1800
-+# define MOZ_HAVE_CXX11_ALIGNAS
- # define MOZ_HAVE_CXX11_DELETE
+ # define MOZ_HAVE_CXX11_CONSTEXPR
+ # define MOZ_HAVE_EXPLICIT_CONVERSION
# endif
- # if _MSC_VER >= 1700
diff --git a/www/libxul/files/patch-bug826985 b/www/libxul/files/patch-bug826985
index 5f44e78051e2..4fb4dde7bd4d 100644
--- a/www/libxul/files/patch-bug826985
+++ b/www/libxul/files/patch-bug826985
@@ -51,18 +51,18 @@ index b483cd1..f1dd1f0 100644
# basic stuff for everything
'include_internal_video_render': 0,
'clang_use_chrome_plugins': 0,
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index b483cd1..f1dd1f0 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -7,6 +7,7 @@ LIBS = \
- $(NSPR_LIBS) \
- $(NSS_LIBS) \
- $(REALTIME_LIBS) \
-+ $(MOZ_LIBV4L2_LIBS) \
- $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
- $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \
- $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -122,6 +122,7 @@ if CONFIG['JS_SHARED_LIBRARY']:
+ 'js',
+ ]
+
++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS']
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['REALTIME_LIBS']
+
diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
index 239a292..bab496c 100644
--- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
@@ -145,35 +145,35 @@ index d46b5aa..e452223 100644
'targets': [
{
'target_name': 'video_capture_module',
-@@ -49,6 +52,16 @@
- }, { # include_internal_video_capture == 1
- 'conditions': [
- ['include_v4l2_video_capture==1', {
-+ 'conditions': [
-+ ['use_libv4l2==1', {
-+ 'defines': [
-+ 'HAVE_LIBV4L2',
-+ ],
-+ 'libraries': [
-+ '-lv4l2',
-+ ],
-+ }],
+@@ -69,6 +72,19 @@
+ 'linux/video_capture_linux.cc',
+ 'linux/video_capture_linux.h',
+ ],
++ 'conditions': [
++ ['use_libv4l2==1', {
++ 'defines': [
++ 'HAVE_LIBV4L2',
++ ],
++ 'cflags_mozilla': [
++ '$(MOZ_LIBV4L2_CFLAGS)',
+ ],
- 'include_dirs': [
- 'linux',
- ],
-diff --git toolkit/library/Makefile.in toolkit/library/Makefile.in
++ 'libraries': [
++ '-lv4l2',
++ ],
++ }],
++ ],
+ }], # linux
+ ['OS=="mac"', {
+ 'sources': [
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index 9c16ffa..1db3794 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -182,6 +182,10 @@ endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF
+ ]
- EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
+ OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
++OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS']
+ OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
+ OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS']
-+ifdef MOZ_LIBV4L2_LIBS
-+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
-+endif
-+
- ifdef MOZ_WEBRTC
- ifeq (WINNT,$(OS_TARGET))
- EXTRA_DSO_LDOPTS += \
diff --git a/www/libxul/files/patch-bug847568 b/www/libxul/files/patch-bug847568
index 1504654a4341..59bef6d9651a 100644
--- a/www/libxul/files/patch-bug847568
+++ b/www/libxul/files/patch-bug847568
@@ -4,7 +4,7 @@ diff --git config/Makefile.in config/Makefile.in
index 14bfc0d..5383399 100644
--- config/Makefile.in
+++ config/Makefile.in
-@@ -77,6 +77,8 @@ export:: $(export-preqs)
+@@ -75,6 +75,8 @@ export:: $(export-preqs)
-DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \
-DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \
-DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
@@ -17,7 +17,7 @@ diff --git config/system-headers config/system-headers
index 18e8703..bdc5f82 100644
--- config/system-headers
+++ config/system-headers
-@@ -1145,3 +1145,11 @@ unicode/utypes.h
+@@ -1357,3 +1357,11 @@ unicode/utypes.h
#endif
libutil.h
unwind.h
@@ -33,7 +33,7 @@ diff --git configure.in configure.in
index ac38f40..87536b7 100644
--- configure.in
+++ configure.in
-@@ -8032,6 +8032,52 @@ if test "$USE_FC_FREETYPE"; then
+@@ -7986,6 +7986,49 @@ if test "$USE_FC_FREETYPE"; then
fi
dnl ========================================================
@@ -46,16 +46,15 @@ index ac38f40..87536b7 100644
+MOZ_NATIVE_HARFBUZZ=)
+
+if test -n "$MOZ_NATIVE_HARFBUZZ"; then
-+ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.25)
++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 0.9.34)
+fi
+
+AC_SUBST(MOZ_NATIVE_HARFBUZZ)
-+AC_SUBST(MOZ_HARFBUZZ_CFLAGS)
-+AC_SUBST(MOZ_HARFBUZZ_LIBS)
+
+dnl ========================================================
+dnl Check for graphite2
+dnl ========================================================
++
+MOZ_ARG_WITH_BOOL(system-graphite2,
+[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)],
+MOZ_NATIVE_GRAPHITE2=1,
@@ -79,27 +78,58 @@ index ac38f40..87536b7 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_GRAPHITE2)
-+AC_SUBST(MOZ_GRAPHITE2_CFLAGS)
-+AC_SUBST(MOZ_GRAPHITE2_LIBS)
+
+dnl ========================================================
dnl Check for pixman and cairo
dnl ========================================================
-diff --git content/base/src/moz.build content/base/src/moz.build
-index d4f6380..0ee55df 100644
---- content/base/src/moz.build
-+++ content/base/src/moz.build
-@@ -179,6 +179,9 @@ SOURCES += [
+diff --git dom/base/moz.build dom/base/moz.build
+index a660ba4..6b2f602 100644
+--- dom/base/moz.build
++++ dom/base/moz.build
+@@ -196,6 +196,9 @@ SOURCES += [
'nsObjectLoadingContent.cpp',
]
+if CONFIG['MOZ_NATIVE_HARFBUZZ']:
-+ SOURCES['nsContentUtils.cpp'].flags += [CONFIG['MOZ_HARFBUZZ_CFLAGS']]
++ SOURCES['nsContentUtils.cpp'].flags += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+
EXTRA_COMPONENTS += [
'contentAreaDropListener.js',
'contentAreaDropListener.manifest',
+diff --git gfx/graphite2/moz-gr-update.sh gfx/graphite2/moz-gr-update.sh
+index f3d76ea..a9e7fb6 100644
+--- gfx/graphite2/moz-gr-update.sh
++++ gfx/graphite2/moz-gr-update.sh
+@@ -23,8 +23,14 @@ echo "\nSee" $0 "for update procedure.\n" >> gfx/graphite2/README.mozilla
+ find gfx/graphite2/ -name "*.cpp" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+ find gfx/graphite2/ -name "*.h" -exec perl -p -i -e "s/<cstdio>/<stdio.h>/;s/Windows.h/windows.h/;" {} \;
+
++# closest tag/release to require for system version
++TAG=$(cd ../graphitedev/ && hg parents --template {latesttag})
++
++perl -p -i -e "s/[0-9]+\,[0-9]+\,[0-9]+/$TAG/ and tr/./,/ \
++ if /GR2_VERSION_REQUIRE/" configure.in
++
+ # summarize what's been touched
+-echo Updated to $CHANGESET.
++echo Updated to $CHANGESET \($TAG for --with-system-graphite2\)
+ echo Here is what changed in the gfx/graphite2 directory:
+ echo
+
+diff --git gfx/harfbuzz/README-mozilla gfx/harfbuzz/README-mozilla
+index ca57d16..1ce21fe 100644
+--- gfx/harfbuzz/README-mozilla
++++ gfx/harfbuzz/README-mozilla
+@@ -21,3 +21,8 @@ In addition, the src/Makefile.in file here is NOT from upstream, nor is it
+ generated from src/Makefile.am (the original harfbuzz version); it is a mozilla-
+ specific makefile that is maintained by hand. It should only need updating when
+ new source files or exported headers are added in harfbuzz.
++
++The in-tree copy may be omitted during build by --with-system-harfbuzz.
++Make sure to keep pkg-config version check within configure.in in sync
++with checkout version or increment latest tag by one if it's not based
++on upstream release.
diff --git gfx/moz.build gfx/moz.build
index 519aa46..6929751 100644
--- gfx/moz.build
@@ -126,83 +156,87 @@ index 519aa46..6929751 100644
'ots/src',
'thebes',
'ipc',
-diff --git gfx/skia/Makefile.in gfx/skia/Makefile.in
-index ee0efb2..98e169d6f 100644
---- gfx/skia/Makefile.in
-+++ gfx/skia/Makefile.in
-@@ -15,6 +15,10 @@ ifeq (qt,$(MOZ_WIDGET_TOOLKIT))
- OS_CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(MOZ_PANGO_CFLAGS) $(CAIRO_FT_CFLAGS)
- endif
+diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py
+index 28fa6b5..240dced 100755
+--- gfx/skia/generate_mozbuild.py
++++ gfx/skia/generate_mozbuild.py
+@@ -140,6 +140,9 @@ if CONFIG['GNU_CXX']:
+ if not CONFIG['CLANG_CXX']:
+ CXXFLAGS += ['-Wno-logical-op']
-+ifdef MOZ_NATIVE_HARFBUZZ
-+OS_CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- include $(topsrcdir)/config/rules.mk
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff --git gfx/skia/moz.build gfx/skia/moz.build
+index 1d0c2f9..adb8941 100644
+--- gfx/skia/moz.build
++++ gfx/skia/moz.build
+@@ -968,6 +968,9 @@ if CONFIG['GNU_CXX']:
+ if not CONFIG['CLANG_CXX']:
+ CXXFLAGS += ['-Wno-logical-op']
- ifeq ($(CPU_ARCH)_$(GNU_CC),arm_1)
-diff --git gfx/thebes/Makefile.in gfx/thebes/Makefile.in
-index 45c36ae..79d32cf 100644
---- gfx/thebes/Makefile.in
-+++ gfx/thebes/Makefile.in
-@@ -13,6 +13,14 @@ DEFINES := $(filter-out -DUNICODE,$(DEFINES))
- CXXFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)
- CFLAGS += $(MOZ_CAIRO_CFLAGS) $(TK_CFLAGS)
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff --git gfx/thebes/moz.build gfx/thebes/moz.build
+index d5852fa..aeeab25 100644
+--- gfx/thebes/moz.build
++++ gfx/thebes/moz.build
+@@ -278,6 +278,12 @@ CXXFLAGS += CONFIG['TK_CFLAGS']
+ CFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CFLAGS += CONFIG['TK_CFLAGS']
-+ifdef MOZ_NATIVE_GRAPHITE2
-+CXXFLAGS += $(MOZ_GRAPHITE2_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- ifeq ($(MOZ_WIDGET_TOOLKIT),android)
- CXXFLAGS += $(CAIRO_FT_CFLAGS)
- endif
-diff --git intl/unicharutil/util/Makefile.in intl/unicharutil/util/Makefile.in
-index f6b9f7c..60863f4 100644
---- intl/unicharutil/util/Makefile.in
-+++ intl/unicharutil/util/Makefile.in
-@@ -21,3 +21,7 @@ ifdef _MSC_VER
- OS_COMPILE_CXXFLAGS += -Zl
- OS_COMPILE_CFLAGS += -Zl
- endif
-+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-diff --git netwerk/dns/Makefile.in netwerk/dns/Makefile.in
-index 1cacbd7..f5d72bb 100644
---- netwerk/dns/Makefile.in
-+++ netwerk/dns/Makefile.in
-@@ -5,6 +5,10 @@
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
- include $(topsrcdir)/config/rules.mk
+diff --git intl/unicharutil/util/moz.build intl/unicharutil/util/moz.build
+index d736943..41a931f 100644
+--- intl/unicharutil/util/moz.build
++++ intl/unicharutil/util/moz.build
+@@ -37,3 +37,6 @@ if CONFIG['_MSC_VER']:
-+ifdef MOZ_NATIVE_HARFBUZZ
-+CXXFLAGS += $(MOZ_HARFBUZZ_CFLAGS)
-+endif
-+
- # Generate the include file containing compact, static definitions
- # for effective TLD data.
- etld_data.inc: $(srcdir)/prepare_tlds.py $(srcdir)/effective_tld_names.dat
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+ if CONFIG['ENABLE_INTL_API']:
+ CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+diff --git netwerk/dns/moz.build netwerk/dns/moz.build
+index 0b0717a..2e665c9 100644
+--- netwerk/dns/moz.build
++++ netwerk/dns/moz.build
+@@ -64,3 +64,6 @@ GENERATED_FILES = [
+ LOCAL_INCLUDES += [
+ '/netwerk/base',
+ ]
++
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index 67f0db9..d42137a 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -89,6 +89,14 @@ ifndef MOZ_TREE_PIXMAN
- EXTRA_DSO_LDOPTS += $(MOZ_PIXMAN_LIBS)
- endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -187,6 +187,12 @@ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ if not CONFIG['MOZ_TREE_PIXMAN']:
+ OS_LIBS += CONFIG['MOZ_PIXMAN_LIBS']
-+ifdef MOZ_NATIVE_GRAPHITE2
-+EXTRA_DSO_LDOPTS += $(MOZ_GRAPHITE2_LIBS)
-+endif
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS']
+
-+ifdef MOZ_NATIVE_HARFBUZZ
-+EXTRA_DSO_LDOPTS += $(MOZ_HARFBUZZ_LIBS)
-+endif
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
+
- ifdef MOZ_DMD
- EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,dmd,$(DIST)/lib)
- endif
+ if CONFIG['MOZ_OSS']:
+ OS_LIBS += CONFIG['MOZ_OSS_LIBS']
+
diff --git a/www/libxul/files/patch-bug858919 b/www/libxul/files/patch-bug858919
deleted file mode 100644
index 2354cd340145..000000000000
--- a/www/libxul/files/patch-bug858919
+++ /dev/null
@@ -1,391 +0,0 @@
-commit a33d4f7
-Author: Martin Stransky <stransky@redhat.com>
-Date: Fri Nov 14 04:04:00 2014 +0100
-
- Bug 858919 - Add support for libnotify calls which was removed for new notification API. r=karlt
----
- toolkit/components/alerts/nsAlertsService.cpp | 10 +--
- toolkit/system/gnome/moz.build | 2 +
- toolkit/system/gnome/nsAlertsIconListener.cpp | 64 ++++++++++++------
- toolkit/system/gnome/nsAlertsIconListener.h | 89 ++++++++++++++++++++++++++
- toolkit/system/gnome/nsGnomeModule.cpp | 5 ++
- toolkit/system/gnome/nsSystemAlertsService.cpp | 54 ++++++++++++++++
- toolkit/system/gnome/nsSystemAlertsService.h | 27 ++++++++
- 7 files changed, 226 insertions(+), 25 deletions(-)
-
-diff --git toolkit/components/alerts/nsAlertsService.cpp toolkit/components/alerts/nsAlertsService.cpp
-index 93f4536..f8b5e07 100644
---- toolkit/components/alerts/nsAlertsService.cpp
-+++ toolkit/components/alerts/nsAlertsService.cpp
-@@ -100,9 +100,11 @@ NS_IMETHODIMP nsAlertsService::ShowAlertNotification(const nsAString & aImageUrl
- nsCOMPtr<nsIAlertsService> sysAlerts(do_GetService(NS_SYSTEMALERTSERVICE_CONTRACTID));
- nsresult rv;
- if (sysAlerts) {
-- return sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-- aAlertCookie, aAlertListener, aAlertName,
-- aBidi, aLang, IPC::Principal(aPrincipal));
-+ rv = sysAlerts->ShowAlertNotification(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-+ aAlertCookie, aAlertListener, aAlertName,
-+ aBidi, aLang, IPC::Principal(aPrincipal));
-+ if (NS_SUCCEEDED(rv))
-+ return NS_OK;
- }
-
- if (!ShouldShowAlert()) {
-diff --git toolkit/system/gnome/moz.build toolkit/system/gnome/moz.build
-index c033f8b..9242209 100644
---- toolkit/system/gnome/moz.build
-+++ toolkit/system/gnome/moz.build
-@@ -5,7 +5,9 @@
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
- SOURCES += [
-+ 'nsAlertsIconListener.cpp',
- 'nsGnomeModule.cpp',
-+ 'nsSystemAlertsService.cpp',
- ]
-
- if CONFIG['MOZ_ENABLE_GCONF']:
-diff --git toolkit/system/gnome/nsAlertsIconListener.cpp toolkit/system/gnome/nsAlertsIconListener.cpp
-index f39335e..55f4356 100644
---- toolkit/system/gnome/nsAlertsIconListener.cpp
-+++ toolkit/system/gnome/nsAlertsIconListener.cpp
-@@ -51,6 +51,21 @@ static void notify_closed_marshal(GClosure* closure,
- NS_RELEASE(alert);
- }
-
-+static GdkPixbuf*
-+GetPixbufFromImgRequest(imgIRequest* aRequest)
-+{
-+ nsCOMPtr<imgIContainer> image;
-+ nsresult rv = aRequest->GetImage(getter_AddRefs(image));
-+ if (NS_FAILED(rv)) {
-+ return nullptr;
-+ }
-+
-+ nsCOMPtr<nsIImageToPixbuf> imgToPixbuf =
-+ do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1");
-+
-+ return imgToPixbuf->ConvertImageToPixbuf(image);
-+}
-+
- NS_IMPL_ISUPPORTS(nsAlertsIconListener, imgINotificationObserver,
- nsIObserver, nsISupportsWeakReference)
-
-@@ -106,47 +121,45 @@ nsAlertsIconListener::Notify(imgIRequest *aRequest, int32_t aType, const nsIntRe
- nsresult
- nsAlertsIconListener::OnStopRequest(imgIRequest* aRequest)
- {
-+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!");
-+
- uint32_t imgStatus = imgIRequest::STATUS_ERROR;
- nsresult rv = aRequest->GetImageStatus(&imgStatus);
- NS_ENSURE_SUCCESS(rv, rv);
- if (imgStatus == imgIRequest::STATUS_ERROR && !mLoadedFrame) {
- // We have an error getting the image. Display the notification with no icon.
- ShowAlert(nullptr);
-- }
-
-- if (mIconRequest) {
-+ // Cancel any pending request
- mIconRequest->Cancel(NS_BINDING_ABORTED);
- mIconRequest = nullptr;
- }
-+
- return NS_OK;
- }
-
- nsresult
- nsAlertsIconListener::OnStopFrame(imgIRequest* aRequest)
- {
-- if (aRequest != mIconRequest)
-- return NS_ERROR_FAILURE;
-+ NS_ASSERTION(mIconRequest == aRequest, "aRequest does not match!");
-
- if (mLoadedFrame)
- return NS_OK; // only use one frame
-
-- nsCOMPtr<imgIContainer> image;
-- nsresult rv = aRequest->GetImage(getter_AddRefs(image));
-- if (NS_FAILED(rv))
-- return rv;
--
-- nsCOMPtr<nsIImageToPixbuf> imgToPixbuf =
-- do_GetService("@mozilla.org/widget/image-to-gdk-pixbuf;1");
--
-- GdkPixbuf* imagePixbuf = imgToPixbuf->ConvertImageToPixbuf(image);
-- if (!imagePixbuf)
-- return NS_ERROR_FAILURE;
-+ GdkPixbuf* imagePixbuf = GetPixbufFromImgRequest(aRequest);
-+ if (!imagePixbuf) {
-+ ShowAlert(nullptr);
-+ } else {
-+ ShowAlert(imagePixbuf);
-+ g_object_unref(imagePixbuf);
-+ }
-
-- ShowAlert(imagePixbuf);
-+ mLoadedFrame = true;
-
-- g_object_unref(imagePixbuf);
-+ // Cancel any pending request (multipart image loading/decoding for instance)
-+ mIconRequest->Cancel(NS_BINDING_ABORTED);
-+ mIconRequest = nullptr;
-
-- mLoadedFrame = true;
- return NS_OK;
- }
-
-@@ -180,6 +193,9 @@ nsAlertsIconListener::ShowAlert(GdkPixbuf* aPixbuf)
- mClosureHandler = g_signal_connect_closure(mNotification, "closed", closure, FALSE);
- gboolean result = notify_notification_show(mNotification, nullptr);
-
-+ if (result && mAlertListener)
-+ mAlertListener->Observe(nullptr, "alertshow", mAlertCookie.get());
-+
- return result ? NS_OK : NS_ERROR_FAILURE;
- }
-
-@@ -201,9 +217,15 @@ nsAlertsIconListener::StartRequest(const nsAString & aImageUrl)
- if (!il)
- return ShowAlert(nullptr);
-
-- return il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr,
-- this, nullptr, nsIRequest::LOAD_NORMAL, nullptr,
-- nullptr, getter_AddRefs(mIconRequest));
-+ nsresult rv = il->LoadImageXPCOM(imageUri, nullptr, nullptr, nullptr, nullptr,
-+ this, nullptr, nsIRequest::LOAD_NORMAL, nullptr,
-+ 0 /* use default */, getter_AddRefs(mIconRequest));
-+ if (NS_FAILED(rv))
-+ return rv;
-+
-+ mIconRequest->StartDecoding();
-+
-+ return NS_OK;
- }
-
- void
-diff --git toolkit/system/gnome/nsAlertsIconListener.h toolkit/system/gnome/nsAlertsIconListener.h
-new file mode 100644
-index 0000000..ac96db9
---- /dev/null
-+++ toolkit/system/gnome/nsAlertsIconListener.h
-@@ -0,0 +1,89 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#ifndef nsAlertsIconListener_h__
-+#define nsAlertsIconListener_h__
-+
-+#include "nsCOMPtr.h"
-+#include "imgINotificationObserver.h"
-+#include "nsStringAPI.h"
-+#include "nsIObserver.h"
-+#include "nsWeakReference.h"
-+
-+#include <gdk-pixbuf/gdk-pixbuf.h>
-+
-+class imgIRequest;
-+
-+struct NotifyNotification;
-+
-+class nsAlertsIconListener : public imgINotificationObserver,
-+ public nsIObserver,
-+ public nsSupportsWeakReference
-+{
-+public:
-+ NS_DECL_ISUPPORTS
-+ NS_DECL_IMGINOTIFICATIONOBSERVER
-+ NS_DECL_NSIOBSERVER
-+
-+ nsAlertsIconListener();
-+
-+ nsresult InitAlertAsync(const nsAString & aImageUrl,
-+ const nsAString & aAlertTitle,
-+ const nsAString & aAlertText,
-+ bool aAlertTextClickable,
-+ const nsAString & aAlertCookie,
-+ nsIObserver * aAlertListener);
-+
-+ void SendCallback();
-+ void SendClosed();
-+
-+protected:
-+ virtual ~nsAlertsIconListener();
-+
-+ nsresult OnStopRequest(imgIRequest* aRequest);
-+ nsresult OnStopFrame(imgIRequest* aRequest);
-+
-+ /**
-+ * The only difference between libnotify.so.4 and libnotify.so.1 for these symbols
-+ * is that notify_notification_new takes three arguments in libnotify.so.4 and
-+ * four in libnotify.so.1.
-+ * Passing the fourth argument as NULL is binary compatible.
-+ */
-+ typedef void (*NotifyActionCallback)(NotifyNotification*, char*, gpointer);
-+ typedef bool (*notify_is_initted_t)(void);
-+ typedef bool (*notify_init_t)(const char*);
-+ typedef GList* (*notify_get_server_caps_t)(void);
-+ typedef NotifyNotification* (*notify_notification_new_t)(const char*, const char*, const char*, const char*);
-+ typedef bool (*notify_notification_show_t)(void*, char*);
-+ typedef void (*notify_notification_set_icon_from_pixbuf_t)(void*, GdkPixbuf*);
-+ typedef void (*notify_notification_add_action_t)(void*, const char*, const char*, NotifyActionCallback, gpointer, GFreeFunc);
-+
-+ nsCOMPtr<imgIRequest> mIconRequest;
-+ nsCString mAlertTitle;
-+ nsCString mAlertText;
-+
-+ nsCOMPtr<nsIObserver> mAlertListener;
-+ nsString mAlertCookie;
-+
-+ bool mLoadedFrame;
-+ bool mAlertHasAction;
-+
-+ static void* libNotifyHandle;
-+ static bool libNotifyNotAvail;
-+ static notify_is_initted_t notify_is_initted;
-+ static notify_init_t notify_init;
-+ static notify_get_server_caps_t notify_get_server_caps;
-+ static notify_notification_new_t notify_notification_new;
-+ static notify_notification_show_t notify_notification_show;
-+ static notify_notification_set_icon_from_pixbuf_t notify_notification_set_icon_from_pixbuf;
-+ static notify_notification_add_action_t notify_notification_add_action;
-+ NotifyNotification* mNotification;
-+ gulong mClosureHandler;
-+
-+ nsresult StartRequest(const nsAString & aImageUrl);
-+ nsresult ShowAlert(GdkPixbuf* aPixbuf);
-+};
-+
-+#endif
-diff --git toolkit/system/gnome/nsGnomeModule.cpp toolkit/system/gnome/nsGnomeModule.cpp
-index 5ccc8e5..f893893 100644
---- toolkit/system/gnome/nsGnomeModule.cpp
-+++ toolkit/system/gnome/nsGnomeModule.cpp
-@@ -22,6 +22,8 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGnomeVFSService, Init)
- NS_GENERIC_FACTORY_CONSTRUCTOR(nsGIOService)
- NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsGSettingsService, Init)
- #endif
-+#include "nsSystemAlertsService.h"
-+NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsSystemAlertsService, Init)
-
- #ifdef MOZ_ENABLE_GCONF
- NS_DEFINE_NAMED_CID(NS_GCONFSERVICE_CID);
-@@ -33,6 +35,7 @@ NS_DEFINE_NAMED_CID(NS_GNOMEVFSSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GIOSERVICE_CID);
- NS_DEFINE_NAMED_CID(NS_GSETTINGSSERVICE_CID);
- #endif
-+NS_DEFINE_NAMED_CID(NS_SYSTEMALERTSSERVICE_CID);
-
- static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- #ifdef MOZ_ENABLE_GCONF
-@@ -45,6 +48,7 @@ static const mozilla::Module::CIDEntry kGnomeCIDs[] = {
- { &kNS_GIOSERVICE_CID, false, nullptr, nsGIOServiceConstructor },
- { &kNS_GSETTINGSSERVICE_CID, false, nullptr, nsGSettingsServiceConstructor },
- #endif
-+ { &kNS_SYSTEMALERTSSERVICE_CID, false, nullptr, nsSystemAlertsServiceConstructor },
- { nullptr }
- };
-
-@@ -59,6 +63,7 @@ static const mozilla::Module::ContractIDEntry kGnomeContracts[] = {
- { NS_GIOSERVICE_CONTRACTID, &kNS_GIOSERVICE_CID },
- { NS_GSETTINGSSERVICE_CONTRACTID, &kNS_GSETTINGSSERVICE_CID },
- #endif
-+ { NS_SYSTEMALERTSERVICE_CONTRACTID, &kNS_SYSTEMALERTSSERVICE_CID },
- { nullptr }
- };
-
-diff --git toolkit/system/gnome/nsSystemAlertsService.cpp toolkit/system/gnome/nsSystemAlertsService.cpp
-new file mode 100644
-index 0000000..b91b402
---- /dev/null
-+++ toolkit/system/gnome/nsSystemAlertsService.cpp
-@@ -0,0 +1,53 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode:nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#include "nsXULAppAPI.h"
-+#include "nsSystemAlertsService.h"
-+#include "nsAlertsIconListener.h"
-+#include "nsAutoPtr.h"
-+
-+NS_IMPL_ADDREF(nsSystemAlertsService)
-+NS_IMPL_RELEASE(nsSystemAlertsService)
-+
-+NS_INTERFACE_MAP_BEGIN(nsSystemAlertsService)
-+ NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIAlertsService)
-+ NS_INTERFACE_MAP_ENTRY(nsIAlertsService)
-+NS_INTERFACE_MAP_END_THREADSAFE
-+
-+nsSystemAlertsService::nsSystemAlertsService()
-+{
-+}
-+
-+nsSystemAlertsService::~nsSystemAlertsService()
-+{}
-+
-+nsresult
-+nsSystemAlertsService::Init()
-+{
-+ return NS_OK;
-+}
-+
-+NS_IMETHODIMP nsSystemAlertsService::ShowAlertNotification(const nsAString & aImageUrl, const nsAString & aAlertTitle,
-+ const nsAString & aAlertText, bool aAlertTextClickable,
-+ const nsAString & aAlertCookie,
-+ nsIObserver * aAlertListener,
-+ const nsAString & aAlertName,
-+ const nsAString & aBidi,
-+ const nsAString & aLang,
-+ nsIPrincipal * aPrincipal)
-+{
-+ nsRefPtr<nsAlertsIconListener> alertListener = new nsAlertsIconListener();
-+ if (!alertListener)
-+ return NS_ERROR_OUT_OF_MEMORY;
-+
-+ return alertListener->InitAlertAsync(aImageUrl, aAlertTitle, aAlertText, aAlertTextClickable,
-+ aAlertCookie, aAlertListener);
-+}
-+
-+NS_IMETHODIMP nsSystemAlertsService::CloseAlert(const nsAString& aAlertName,
-+ nsIPrincipal* aPrincipal)
-+{
-+ return NS_ERROR_NOT_IMPLEMENTED;
-+}
-diff --git toolkit/system/gnome/nsSystemAlertsService.h toolkit/system/gnome/nsSystemAlertsService.h
-new file mode 100644
-index 0000000..b0bd625
---- /dev/null
-+++ toolkit/system/gnome/nsSystemAlertsService.h
-@@ -0,0 +1,27 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* 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/. */
-+
-+#ifndef nsSystemAlertsService_h__
-+#define nsSystemAlertsService_h__
-+
-+#include "nsIAlertsService.h"
-+#include "nsCOMPtr.h"
-+
-+class nsSystemAlertsService : public nsIAlertsService
-+{
-+public:
-+ NS_DECL_NSIALERTSSERVICE
-+ NS_DECL_ISUPPORTS
-+
-+ nsSystemAlertsService();
-+
-+ nsresult Init();
-+
-+protected:
-+ virtual ~nsSystemAlertsService();
-+
-+};
-+
-+#endif /* nsSystemAlertsService_h__ */
diff --git a/www/libxul/files/patch-bug961264 b/www/libxul/files/patch-bug961264
deleted file mode 100644
index 94fd84ce5cb6..000000000000
--- a/www/libxul/files/patch-bug961264
+++ /dev/null
@@ -1,266 +0,0 @@
-commit d099acd
-Author: Trevor Saunders <trev.saunders@gmail.com>
-Date: Fri Jan 17 15:08:00 2014 -0800
-
- Bug 961264 - Remove obsolete checks for gcc visibility stuff.
----
- configure.in | 115 +++-------------------------------------------------
- js/src/configure.in | 111 ++------------------------------------------------
- 2 files changed, 8 insertions(+), 218 deletions(-)
-
-diff --git configure.in configure.in
-index dfb8193..33d71b3 100644
---- configure.in
-+++ configure.in
-@@ -2507,118 +2507,15 @@ MOZ_CXX11
-
- AC_LANG_C
-
--dnl Check for .hidden assembler directive and visibility attribute.
--dnl Borrowed from glibc configure.in
-+dnl Setup default hidden visibility and wrapped system headers.
- dnl ===============================================================
- if test "$GNU_CC"; then
-- AC_CACHE_CHECK(for visibility(hidden) attribute,
-- ac_cv_visibility_hidden,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("hidden"))) = 1;
--EOF
-- ac_cv_visibility_hidden=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_hidden=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_hidden" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility(default) attribute,
-- ac_cv_visibility_default,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("default"))) = 1;
--EOF
-- ac_cv_visibility_default=no
-- if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_default=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_default" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility pragma support,
-- ac_cv_visibility_pragma,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
-- int foo_hidden = 1;
--#pragma GCC visibility push(default)
-- int foo_default = 1;
--EOF
-- ac_cv_visibility_pragma=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
-- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
-- ac_cv_visibility_pragma=yes
-- fi
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_pragma" = "yes"; then
-- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
-- ac_cv_have_visibility_class_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--struct __attribute__ ((visibility ("default"))) TestStruct {
-- static void Init();
--};
--__attribute__ ((visibility ("default"))) void TestFunc() {
-- TestStruct::Init();
--}
--EOF
-- ac_cv_have_visibility_class_bug=no
-- if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_class_bug=yes
-- else
-- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
-- ac_cv_have_visibility_class_bug=yes
-- fi
-- fi
-- rm -rf conftest.{c,S}
-- ])
--
-- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
-- ac_cv_have_visibility_builtin_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--#pragma GCC visibility push(default)
--#include <string.h>
--#pragma GCC visibility pop
--
--__attribute__ ((visibility ("default"))) void Func() {
-- char c[[100]];
-- memset(c, 0, sizeof(c));
--}
--EOF
-- ac_cv_have_visibility_builtin_bug=no
-- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_builtin_bug=yes
-- else
-- if test `grep -c "@PLT" conftest.S` = 0; then
-- ac_cv_visibility_builtin_bug=yes
-- fi
-- fi
-- rm -f conftest.{c,S}
-- ])
-- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
-- "$ac_cv_have_visibility_class_bug" = "no"; then
-- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-- WRAP_SYSTEM_INCLUDES=1
-- STL_FLAGS='-I$(DIST)/stl_wrappers'
-- WRAP_STL_INCLUDES=1
-- else
-- VISIBILITY_FLAGS='-fvisibility=hidden'
-- fi # have visibility pragma bug
-- fi # have visibility pragma
-- fi # have visibility(default) attribute
-- fi # have visibility(hidden) attribute
-+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
-+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
-+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-+ WRAP_SYSTEM_INCLUDES=1
-+ STL_FLAGS='-I$(DIST)/stl_wrappers'
-+ WRAP_STL_INCLUDES=1
- fi # GNU_CC
-
- # visibility hidden flag for Sun Studio on Solaris
-diff --git js/src/configure.in js/src/configure.in
-index bddd46d..d4b522e 100644
---- js/src/configure.in
-+++ js/src/configure.in
-@@ -2077,116 +2077,13 @@ AC_LANG_CPLUSPLUS
-
- MOZ_CXX11
-
--dnl Check for .hidden assembler directive and visibility attribute.
--dnl Borrowed from glibc configure.in
-+dnl Setup default hidden visibility and wrapped system headers.
- dnl ===============================================================
- if test "$GNU_CC"; then
-- AC_CACHE_CHECK(for visibility(hidden) attribute,
-- ac_cv_visibility_hidden,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("hidden"))) = 1;
--EOF
-- ac_cv_visibility_hidden=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_hidden=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_hidden" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility(default) attribute,
-- ac_cv_visibility_default,
-- [cat > conftest.c <<EOF
-- int foo __attribute__ ((visibility ("default"))) = 1;
--EOF
-- ac_cv_visibility_default=no
-- if ${CC-cc} -fvisibility=hidden -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if ! egrep '\.(hidden|private_extern).*foo' conftest.s >/dev/null; then
-- ac_cv_visibility_default=yes
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_default" = "yes"; then
-- AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
--
-- AC_CACHE_CHECK(for visibility pragma support,
-- ac_cv_visibility_pragma,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
-- int foo_hidden = 1;
--#pragma GCC visibility push(default)
-- int foo_default = 1;
--EOF
-- ac_cv_visibility_pragma=no
-- if ${CC-cc} -Werror -S conftest.c -o conftest.s >/dev/null 2>&1; then
-- if egrep '\.(hidden|private_extern).*foo_hidden' conftest.s >/dev/null; then
-- if ! egrep '\.(hidden|private_extern).*foo_default' conftest.s > /dev/null; then
-- ac_cv_visibility_pragma=yes
-- fi
-- fi
-- fi
-- rm -f conftest.[cs]
-- ])
-- if test "$ac_cv_visibility_pragma" = "yes"; then
-- AC_CACHE_CHECK(For gcc visibility bug with class-level attributes (GCC bug 26905),
-- ac_cv_have_visibility_class_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--struct __attribute__ ((visibility ("default"))) TestStruct {
-- static void Init();
--};
--__attribute__ ((visibility ("default"))) void TestFunc() {
-- TestStruct::Init();
--}
--EOF
-- ac_cv_have_visibility_class_bug=no
-- if ! ${CXX-g++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_class_bug=yes
-- else
-- if test `egrep -c '@PLT|\\$stub' conftest.S` = 0; then
-- ac_cv_have_visibility_class_bug=yes
-- fi
-- fi
-- rm -rf conftest.{c,S}
-- ])
--
-- AC_CACHE_CHECK(For x86_64 gcc visibility bug with builtins (GCC bug 20297),
-- ac_cv_have_visibility_builtin_bug,
-- [cat > conftest.c <<EOF
--#pragma GCC visibility push(hidden)
--#pragma GCC visibility push(default)
--#include <string.h>
--#pragma GCC visibility pop
--
--__attribute__ ((visibility ("default"))) void Func() {
-- char c[[100]];
-- memset(c, 0, sizeof(c));
--}
--EOF
-- ac_cv_have_visibility_builtin_bug=no
-- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
-- ac_cv_have_visibility_builtin_bug=yes
-- else
-- if test `grep -c "@PLT" conftest.S` = 0; then
-- ac_cv_visibility_builtin_bug=yes
-- fi
-- fi
-- rm -f conftest.{c,S}
-- ])
-- if test "$ac_cv_have_visibility_builtin_bug" = "no" -a \
-- "$ac_cv_have_visibility_class_bug" = "no"; then
-- VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-- WRAP_SYSTEM_INCLUDES=1
-- else
-- VISIBILITY_FLAGS='-fvisibility=hidden'
-- fi # have visibility pragma bug
-- fi # have visibility pragma
-- fi # have visibility(default) attribute
-- fi # have visibility(hidden) attribute
-+ AC_DEFINE(HAVE_VISIBILITY_HIDDEN_ATTRIBUTE)
-+ AC_DEFINE(HAVE_VISIBILITY_ATTRIBUTE)
-+ VISIBILITY_FLAGS='-I$(DIST)/system_wrappers -include $(topsrcdir)/config/gcc_hidden.h'
-+ WRAP_SYSTEM_INCLUDES=1
- fi # GNU_CC
-
- # visibility hidden flag for Sun Studio on Solaris
diff --git a/www/libxul/files/patch-ijg-libjpeg b/www/libxul/files/patch-ijg-libjpeg
index 406bb1627d6e..f3378046dd32 100644
--- a/www/libxul/files/patch-ijg-libjpeg
+++ b/www/libxul/files/patch-ijg-libjpeg
@@ -28,7 +28,7 @@ index 8fa8200..1d2a259 100644
-}
+#ifdef JCS_EXTENSIONS
- #if defined(IS_BIG_ENDIAN)
+ #if MOZ_BIG_ENDIAN
#define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB
#else
#define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX
@@ -51,26 +51,26 @@ index 8fa8200..1d2a259 100644
static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width);
-@@ -324,6 +340,7 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- case JCS_GRAYSCALE:
- case JCS_RGB:
- case JCS_YCbCr:
+@@ -367,6 +382,7 @@ nsJPEGDecoder::WriteInternal(const char*
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
+#ifdef JCS_EXTENSIONS
- // if we're not color managing we can decode directly to
- // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB
- if (mCMSMode != eCMSMode_All) {
-@@ -332,6 +349,9 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- } else {
- mInfo.out_color_space = JCS_RGB;
- }
+ // if we're not color managing we can decode directly to
+ // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB
+ if (mCMSMode != eCMSMode_All) {
+@@ -375,6 +391,9 @@ nsJPEGDecoder::WriteInternal(const char*
+ } else {
+ mInfo.out_color_space = JCS_RGB;
+ }
+#else
-+ mInfo.out_color_space = JCS_RGB;
++ mInfo.out_color_space = JCS_RGB;
+#endif
- break;
- case JCS_CMYK:
- case JCS_YCCK:
-@@ -399,6 +419,15 @@ nsJPEGDecoder::WriteInternal(const char *aBuffer, uint32_t aCount)
- return; /* I/O suspension */
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
+@@ -433,6 +452,15 @@ nsJPEGDecoder::WriteInternal(const char*
+ return; // I/O suspension
}
+#ifndef JCS_EXTENSIONS
@@ -83,10 +83,10 @@ index 8fa8200..1d2a259 100644
+ }
+#endif
- /* If this is a progressive JPEG ... */
- mState = mInfo.buffered_image ? JPEG_DECOMPRESS_PROGRESSIVE : JPEG_DECOMPRESS_SEQUENTIAL;
-@@ -544,7 +573,11 @@ nsJPEGDecoder::OutputScanlines(bool* suspend)
- uint32_t *imageRow = ((uint32_t*)mImageData) +
+ // If this is a progressive JPEG ...
+ mState = mInfo.buffered_image ?
+@@ -605,7 +633,11 @@ nsJPEGDecoder::OutputScanlines(bool* sus
+ uint32_t* imageRow = ((uint32_t*)mImageData) +
(mInfo.output_scanline * mInfo.output_width);
+#ifdef JCS_EXTENSIONS
@@ -94,10 +94,10 @@ index 8fa8200..1d2a259 100644
+#else
+ if (mInfo.cconvert->color_convert == ycc_rgb_convert_argb) {
+#endif
- /* Special case: scanline will be directly converted into packed ARGB */
+ // Special case: scanline will be directly converted into packed ARGB
if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) {
- *suspend = true; /* suspend */
-@@ -854,6 +887,282 @@ term_source (j_decompress_ptr jd)
+ *suspend = true; // suspend
+@@ -920,6 +952,282 @@ term_source (j_decompress_ptr jd)
} // namespace mozilla
@@ -377,6 +377,6 @@ index 8fa8200..1d2a259 100644
+#endif
+
+
- /**************** Inverted CMYK -> RGB conversion **************/
- /*
- * Input is (Inverted) CMYK stored as 4 bytes per pixel.
+ ///*************** Inverted CMYK -> RGB conversion *************************
+ /// Input is (Inverted) CMYK stored as 4 bytes per pixel.
+ /// Output is RGB stored as 3 bytes per pixel.
diff --git a/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp b/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp
new file mode 100644
index 000000000000..530902b13393
--- /dev/null
+++ b/www/libxul/files/patch-media-libstagefright-foundation-AString.cpp
@@ -0,0 +1,16 @@
+--- media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp~
++++ media/libstagefright/frameworks/av/media/libstagefright/foundation/AString.cpp
+@@ -23,6 +23,13 @@
+ #include "ADebug.h"
+ #include "AString.h"
+
++#ifdef __FreeBSD__
++# include <osreldate.h>
++# if __FreeBSD_version < 900506
++# undef tolower
++# endif
++#endif
++
+ namespace stagefright {
+
+ // static
diff --git a/www/libxul/files/patch-system-openh264 b/www/libxul/files/patch-system-openh264
new file mode 100644
index 000000000000..e694b28f436e
--- /dev/null
+++ b/www/libxul/files/patch-system-openh264
@@ -0,0 +1,239 @@
+# Revert bug 1045209 to allow using absolute path
+
+diff --git dom/media/gmp/GMPChild.cpp dom/media/gmp/GMPChild.cpp
+index 1dde3ac..12c88cf 100644
+--- dom/media/gmp/GMPChild.cpp
++++ dom/media/gmp/GMPChild.cpp
+@@ -76,21 +76,14 @@ GetFileBase(const std::string& aPluginPa
+ }
+ #endif
+
+- nsCOMPtr<nsIFile> parent;
+- rv = aFileBase->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return false;
+- }
+-
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
+- if (NS_FAILED(rv)) {
++ nsAutoString leafName;
++ if (NS_FAILED(aFileBase->GetLeafName(leafName))) {
+ return false;
+ }
+
+- aBaseName = Substring(parentLeafName,
++ aBaseName = Substring(leafName,
+ 4,
+- parentLeafName.Length() - 1);
++ leafName.Length() - 1);
+ return true;
+ }
+
+diff --git dom/media/gmp/GMPParent.cpp dom/media/gmp/GMPParent.cpp
+index aa60acf..90878ca 100644
+--- dom/media/gmp/GMPParent.cpp
++++ dom/media/gmp/GMPParent.cpp
+@@ -90,23 +90,16 @@
+ mService = aService;
+ mDirectory = aPluginDir;
+
+- // aPluginDir is <profile-dir>/<gmp-plugin-id>/<version>
+- // where <gmp-plugin-id> should be gmp-gmpopenh264
+- nsCOMPtr<nsIFile> parent;
+- nsresult rv = aPluginDir->GetParent(getter_AddRefs(parent));
+- if (NS_FAILED(rv)) {
+- return rv;
+- }
+- nsAutoString parentLeafName;
+- rv = parent->GetLeafName(parentLeafName);
++ nsAutoString leafname;
++ nsresult rv = aPluginDir->GetLeafName(leafname);
+ if (NS_FAILED(rv)) {
+ return rv;
+ }
+ LOGD(("%s::%s: %p for %s", __CLASS__, __FUNCTION__, this,
+- NS_LossyConvertUTF16toASCII(parentLeafName).get()));
++ NS_LossyConvertUTF16toASCII(leafname).get()));
+
+- MOZ_ASSERT(parentLeafName.Length() > 4);
+- mName = Substring(parentLeafName, 4);
++ MOZ_ASSERT(leafname.Length() > 4);
++ mName = Substring(leafname, 4);
+
+ return ReadGMPMetaData();
+ }
+diff --git toolkit/modules/GMPInstallManager.jsm toolkit/modules/GMPInstallManager.jsm
+index 9593492..470384b 100644
+--- toolkit/modules/GMPInstallManager.jsm
++++ toolkit/modules/GMPInstallManager.jsm
+@@ -888,9 +889,7 @@
+ let gmpAddon = this._gmpAddon;
+ let installToDirPath = Cc["@mozilla.org/file/local;1"].
+ createInstance(Ci.nsIFile);
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- gmpAddon.id,
+- gmpAddon.version);
++ let path = OS.Path.join(OS.Constants.Path.profileDir, gmpAddon.id);
+ installToDirPath.initWithPath(path);
+ log.info("install to directory path: " + installToDirPath.path);
+ let gmpInstaller = new GMPExtractor(zipPath, installToDirPath.path);
+@@ -885,10 +883,12 @@
+ // Success, set the prefs
+ let now = Math.round(Date.now() / 1000);
+ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_LAST_UPDATE, now, gmpAddon.id);
+- // Setting the version pref signals installation completion to consumers,
+- // if you need to set other prefs etc. do it before this.
++ // Setting the path pref signals installation completion to consumers,
++ // so set the version and potential other information they use first.
+ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_VERSION, gmpAddon.version,
+ gmpAddon.id);
++ GMPPrefs.set(GMPPrefs.KEY_PLUGIN_PATH,
++ installToDirPath.path, gmpAddon.id);
+ this._deferred.resolve(extractedPaths);
+ }, err => {
+ this._deferred.reject(err);
+diff --git toolkit/modules/GMPUtils.jsm toolkit/modules/GMPUtils.jsm
+index 1f3a0b1..93517be 100644
+--- toolkit/modules/GMPUtils.jsm
++++ toolkit/modules/GMPUtils.jsm
+@@ -70,6 +70,7 @@ this.GMPPrefs = {
+ KEY_EME_ENABLED: "media.eme.enabled",
+ KEY_PLUGIN_ENABLED: "media.{0}.enabled",
+ KEY_PLUGIN_LAST_UPDATE: "media.{0}.lastUpdate",
++ KEY_PLUGIN_PATH: "media.{0}.path",
+ KEY_PLUGIN_VERSION: "media.{0}.version",
+ KEY_PLUGIN_AUTOUPDATE: "media.{0}.autoupdate",
+ KEY_PLUGIN_FORCEVISIBLE: "media.{0}.forcevisible",
+diff --git toolkit/mozapps/extensions/internal/GMPProvider.jsm toolkit/mozapps/extensions/internal/GMPProvider.jsm
+index 1f3a0b1..93517be 100644
+--- toolkit/mozapps/extensions/internal/GMPProvider.jsm
++++ toolkit/mozapps/extensions/internal/GMPProvider.jsm
+@@ -100,12 +100,11 @@
+ Log.repository.getLoggerWithMessagePrefix("Toolkit.GMP",
+ "GMPWrapper(" +
+ this._plugin.id + ") ");
+- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
+- this._plugin.id),
++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED, this._plugin.id),
+ this.onPrefEnabledChanged, this);
+- Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
++ Preferences.observe(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH,
+ this._plugin.id),
+- this.onPrefVersionChanged, this);
++ this.onPrefPathChanged, this);
+ if (this._plugin.isEME) {
+ Preferences.observe(GMPPrefs.KEY_EME_ENABLED,
+ this.onPrefEMEGlobalEnabledChanged, this);
+@@ -120,17 +119,14 @@
+ optionsType: AddonManager.OPTIONS_TYPE_INLINE,
+ get optionsURL() { return this._plugin.optionsURL; },
+
++
+ set gmpPath(aPath) { this._gmpPath = aPath; },
+ get gmpPath() {
+- if (!this._gmpPath && this.isInstalled) {
+- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
+- null, this._plugin.id));
++ if (!this._gmpPath) {
++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
+ }
+ return this._gmpPath;
+ },
+-
+ get id() { return this._plugin.id; },
+ get type() { return "plugin"; },
+ get isGMPlugin() { return true; },
+@@ -141,8 +137,13 @@
+ get description() { return this._plugin.description; },
+ get fullDescription() { return this._plugin.fullDescription; },
+
+- get version() { return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null,
+- this._plugin.id); },
++ get version() {
++ if (this.isInstalled) {
++ return GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION, null,
++ this._plugin.id);
++ }
++ return null;
++ },
+
+ get isActive() { return !this.appDisabled && !this.userDisabled; },
+ get appDisabled() {
+@@ -289,24 +290,17 @@
+
+ get pluginMimeTypes() { return []; },
+ get pluginLibraries() {
+- if (this.isInstalled) {
+- let path = this.version;
+- return [path];
+- }
+- return [];
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length ? [OS.Path.basename(path)] : [];
+ },
+ get pluginFullpath() {
+- if (this.isInstalled) {
+- let path = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- this.version);
+- return [path];
+- }
+- return [];
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length ? [path] : [];
+ },
+
+ get isInstalled() {
+- return this.version && this.version.length > 0;
++ let path = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH, null, this._plugin.id);
++ return path && path.length > 0;
+ },
+
+ _handleEnabledChanged: function() {
+@@ -362,10 +356,10 @@
+ }
+ },
+
+- onPrefVersionChanged: function() {
++ onPrefPathChanged: function() {
+ AddonManagerPrivate.callAddonListeners("onUninstalling", this, false);
+ if (this._gmpPath) {
+- this._log.info("onPrefVersionChanged() - unregistering gmp directory " +
++ this._log.info("onPrefPathChanged() - unregistering gmp directory " +
+ this._gmpPath);
+ gmpService.removePluginDirectory(this._gmpPath);
+ }
+@@ -374,15 +368,10 @@
+ AddonManagerPrivate.callInstallListeners("onExternalInstall", null, this,
+ null, false);
+ AddonManagerPrivate.callAddonListeners("onInstalling", this, false);
+- this._gmpPath = null;
+- if (this.isInstalled) {
+- this._gmpPath = OS.Path.join(OS.Constants.Path.profileDir,
+- this._plugin.id,
+- GMPPrefs.get(GMPPrefs.KEY_PLUGIN_VERSION,
+- null, this._plugin.id));
+- }
++ this._gmpPath = GMPPrefs.get(GMPPrefs.KEY_PLUGIN_PATH,
++ null, this._plugin.id);
+ if (this._gmpPath && this.isActive) {
+- this._log.info("onPrefVersionChanged() - registering gmp directory " +
++ this._log.info("onPrefPathChanged() - registering gmp directory " +
+ this._gmpPath);
+ gmpService.addPluginDirectory(this._gmpPath);
+ }
+@@ -393,9 +382,9 @@
+ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_ENABLED,
+ this._plugin.id),
+ this.onPrefEnabledChanged, this);
+- Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_VERSION,
++ Preferences.ignore(GMPPrefs.getPrefKey(GMPPrefs.KEY_PLUGIN_PATH,
+ this._plugin.id),
+- this.onPrefVersionChanged, this);
++ this.onPrefPathChanged, this);
+ if (this._plugin.isEME) {
+ Preferences.ignore(GMPPrefs.KEY_EME_ENABLED,
+ this.onPrefEMEGlobalEnabledChanged, this);
diff --git a/www/libxul/files/patch-z-bug517422 b/www/libxul/files/patch-z-bug517422
index 1c0f0dd2aab8..0137e4858cf8 100644
--- a/www/libxul/files/patch-z-bug517422
+++ b/www/libxul/files/patch-z-bug517422
@@ -4,7 +4,7 @@ diff --git config/Makefile.in config/Makefile.in
index 5383399..0410004 100644
--- config/Makefile.in
+++ config/Makefile.in
-@@ -79,6 +79,13 @@ export:: $(export-preqs)
+@@ -77,6 +77,14 @@ export:: $(export-preqs)
-DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
-DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \
-DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \
@@ -12,6 +12,7 @@ index 5383399..0410004 100644
+ -DMOZ_NATIVE_THEORA=$(MOZ_NATIVE_THEORA) \
+ -DMOZ_NATIVE_VORBIS=$(MOZ_NATIVE_VORBIS) \
+ -DMOZ_NATIVE_TREMOR=$(MOZ_NATIVE_TREMOR) \
++ -DMOZ_NATIVE_CELT=$(MOZ_NATIVE_CELT) \
+ -DMOZ_NATIVE_OPUS=$(MOZ_NATIVE_OPUS) \
+ -DMOZ_NATIVE_SPEEX=$(MOZ_NATIVE_SPEEX) \
+ -DMOZ_NATIVE_SOUNDTOUCH=$(MOZ_NATIVE_SOUNDTOUCH) \
@@ -22,14 +23,17 @@ diff --git config/external/moz.build config/external/moz.build
index f67c5c7..eb909ce 100644
--- config/external/moz.build
+++ config/external/moz.build
-@@ -15,13 +15,19 @@ if CONFIG['MOZ_UPDATER']:
- if not CONFIG['MOZ_NATIVE_BZ2']:
- external_dirs += ['modules/libbz2']
+@@ -19,10 +19,19 @@ if CONFIG['MOZ_UPDATER']:
+ # There's no "native brotli" yet, but probably in the future...
+ external_dirs += ['modules/brotli']
-if CONFIG['MOZ_VORBIS']:
+if not CONFIG['MOZ_NATIVE_OGG']:
+ external_dirs += ['media/libogg']
+
++if not CONFIG['MOZ_NATIVE_CELT'] or not CONFIG['MOZ_NATIVE_OPUS']:
++ external_dirs += ['media/libopus']
++
+if not CONFIG['MOZ_NATIVE_THEORA']:
+ external_dirs += ['media/libtheora']
+
@@ -40,12 +44,8 @@ index f67c5c7..eb909ce 100644
+if CONFIG['MOZ_TREMOR'] and not CONFIG['MOZ_NATIVE_TREMOR']:
external_dirs += ['media/libtremor']
--if CONFIG['MOZ_OPUS']:
-+if CONFIG['MOZ_OPUS'] and not CONFIG['MOZ_NATIVE_OPUS']:
- external_dirs += ['media/libopus']
-
if CONFIG['MOZ_WEBM']:
-@@ -36,13 +42,15 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ_NATIVE_LIBVPX']:
+@@ -37,15 +46,16 @@ if CONFIG['MOZ_VPX'] and not CONFIG['MOZ
if not CONFIG['MOZ_NATIVE_PNG']:
external_dirs += ['media/libpng']
@@ -59,35 +59,35 @@ index f67c5c7..eb909ce 100644
'media/kiss_fft',
'media/libcubeb',
- 'media/libogg',
+- 'media/libopus',
- 'media/libtheora',
- 'media/libspeex_resampler',
+ 'media/libstagefright',
- 'media/libsoundtouch',
]
- PARALLEL_DIRS += ['../../' + i for i in external_dirs]
+ DIRS += ['../../' + i for i in external_dirs]
diff --git config/system-headers config/system-headers
index bef567c..9807c29 100644
--- config/system-headers
+++ config/system-headers
-@@ -1050,8 +1050,6 @@ X11/Xutil.h
- xpt_struct.h
- xpt_xdr.h
+@@ -1263,7 +1263,6 @@ X11/Xlocale.h
+ X11/Xos.h
+ X11/Xutil.h
zmouse.h
--speex/speex_resampler.h
-soundtouch/SoundTouch.h
#if MOZ_NATIVE_PNG==1
png.h
#endif
-@@ -1119,6 +1117,8 @@ ogg/ogg.h
+@@ -1325,6 +1324,7 @@ vorbis/codec.h
+ theora/theoradec.h
+ tremor/ivorbiscodec.h
+ speex/speex_resampler.h
++soundtouch/SoundTouch.h
+ ogg/ogg.h
ogg/os_types.h
nestegg/nestegg.h
- cubeb/cubeb.h
-+speex/speex_resampler.h
-+soundtouch/SoundTouch.h
- #endif
- gst/gst.h
- gst/app/gstappsink.h
-@@ -1155,3 +1155,29 @@ graphite2/Segment.h
+@@ -1365,3 +1365,35 @@ graphite2/Segment.h
harfbuzz/hb-ot.h
harfbuzz/hb.h
#endif
@@ -105,6 +105,12 @@ index bef567c..9807c29 100644
+#if MOZ_NATIVE_TREMOR==1
+tremor/ivorbiscodec.h
+#endif
++#if MOZ_NATIVE_CELT==1
++celt.h
++celt_header.h
++celt/celt.h
++celt/celt_header.h
++#endif
+#if MOZ_NATIVE_OPUS==1
+opus.h
+opus_multistream.h
@@ -121,7 +127,7 @@ diff --git configure.in configure.in
index 87db361..7947626 100644
--- configure.in
+++ configure.in
-@@ -5211,6 +5211,63 @@ if test "${ac_cv_c_attribute_aligned}" != "0"; then
+@@ -5223,6 +5223,157 @@ if test "${ac_cv_c_attribute_aligned}" !
fi
dnl ========================================================
@@ -144,8 +150,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_OGG)
-+AC_SUBST(MOZ_OGG_CFLAGS)
-+AC_SUBST(MOZ_OGG_LIBS)
+
+dnl ========================================================
+dnl Check for libvorbis
@@ -161,8 +165,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_VORBIS)
-+AC_SUBST(MOZ_VORBIS_CFLAGS)
-+AC_SUBST(MOZ_VORBIS_LIBS)
+
+dnl ========================================================
+dnl Check for integer-only libvorbis aka tremor
@@ -178,17 +180,25 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_TREMOR)
-+AC_SUBST(MOZ_TREMOR_CFLAGS)
-+AC_SUBST(MOZ_TREMOR_LIBS)
+
+dnl ========================================================
- dnl = Disable Opus audio codec support
- dnl ========================================================
- MOZ_ARG_DISABLE_BOOL(opus,
-@@ -5219,6 +5274,97 @@ MOZ_ARG_DISABLE_BOOL(opus,
- MOZ_OPUS=1)
-
- dnl ========================================================
++dnl Check for libcelt
++dnl ========================================================
++
++MOZ_ARG_WITH_BOOL(system-celt,
++[ --with-system-celt Use system libcelt (located with pkgconfig)],
++MOZ_NATIVE_CELT=1,
++MOZ_NATIVE_CELT=)
++
++if test -n "$MOZ_NATIVE_CELT"; then
++ PKG_CHECK_MODULES(MOZ_CELT, celt)
++else
++ MOZ_CELT_CFLAGS='-I$(topsrcdir)/media/libopus'
++fi
++
++AC_SUBST(MOZ_NATIVE_CELT)
++
++dnl ========================================================
+dnl Check for libopus
+dnl ========================================================
+
@@ -204,8 +214,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_OPUS)
-+AC_SUBST(MOZ_OPUS_CFLAGS)
-+AC_SUBST(MOZ_OPUS_LIBS)
+
+dnl ========================================================
+dnl Check for libtheora
@@ -221,8 +229,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_THEORA)
-+AC_SUBST(MOZ_THEORA_CFLAGS)
-+AC_SUBST(MOZ_THEORA_LIBS)
+
+dnl ========================================================
+dnl Check for libspeex resampler
@@ -238,8 +244,6 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_SPEEX)
-+AC_SUBST(MOZ_SPEEX_CFLAGS)
-+AC_SUBST(MOZ_SPEEX_LIBS)
+
+dnl ========================================================
+dnl Check for libsoundtouch
@@ -276,19 +280,17 @@ index 87db361..7947626 100644
+fi
+
+AC_SUBST(MOZ_NATIVE_SOUNDTOUCH)
-+AC_SUBST(MOZ_SOUNDTOUCH_CFLAGS)
-+AC_SUBST(MOZ_SOUNDTOUCH_LIBS)
+
+dnl ========================================================
dnl = Disable VP8 decoder support
dnl ========================================================
MOZ_ARG_DISABLE_BOOL(webm,
-diff --git content/media/AudioStream.h content/media/AudioStream.h
+diff --git dom/media/AudioStream.h dom/media/AudioStream.h
index 085676d..00c54fb 100644
---- content/media/AudioStream.h
-+++ content/media/AudioStream.h
-@@ -26,7 +26,7 @@ public:
- };
+--- dom/media/AudioStream.h
++++ dom/media/AudioStream.h
+@@ -17,7 +17,7 @@
+ #include "CubebUtils.h"
namespace soundtouch {
-class SoundTouch;
@@ -296,177 +298,265 @@ index 085676d..00c54fb 100644
}
namespace mozilla {
-diff --git content/media/Makefile.in content/media/Makefile.in
-index fd34449..c6c42c8 100644
---- content/media/Makefile.in
-+++ content/media/Makefile.in
-@@ -6,3 +6,31 @@ include $(topsrcdir)/config/rules.mk
+diff --git dom/media/moz.build dom/media/moz.build
+index 7526cff..e0a0ca0 100644
+--- dom/media/moz.build
++++ dom/media/moz.build
+@@ -212,3 +212,24 @@ if CONFIG['ANDROID_VERSION'] > '15':
+
+ CFLAGS += CONFIG['GSTREAMER_CFLAGS']
+ CXXFLAGS += CONFIG['GSTREAMER_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_OGG']:
++ CXXFLAGS += CONFIG['MOZ_OGG_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_THEORA']:
++ CXXFLAGS += CONFIG['MOZ_THEORA_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_VORBIS']:
++ CXXFLAGS += CONFIG['MOZ_VORBIS_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_TREMOR']:
++ CXXFLAGS += CONFIG['MOZ_TREMOR_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_OPUS']:
++ CXXFLAGS += CONFIG['MOZ_OPUS_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ CXXFLAGS += CONFIG['MOZ_SPEEX_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
++ CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS']
+diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build
+index 944744d..9a7c8c0 100644
+--- media/libcubeb/src/moz.build
++++ media/libcubeb/src/moz.build
+@@ -65,6 +65,9 @@ if CONFIG['GKMEDIAS_SHARED_LIBRARY']:
- CFLAGS += $(GSTREAMER_CFLAGS)
- CXXFLAGS += $(GSTREAMER_CFLAGS)
-+
-+ifdef MOZ_NATIVE_OGG
-+CXXFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_THEORA
-+CXXFLAGS += $(MOZ_THEORA_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_VORBIS
-+CXXFLAGS += $(MOZ_VORBIS_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_TREMOR
-+CXXFLAGS += $(MOZ_TREMOR_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_OPUS
-+CXXFLAGS += $(MOZ_OPUS_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_SPEEX
-+CXXFLAGS += $(MOZ_SPEEX_CFLAGS)
-+endif
-+
-+ifdef MOZ_NATIVE_SOUNDTOUCH
-+CXXFLAGS += $(MOZ_SOUNDTOUCH_CFLAGS)
-+endif
-diff --git media/libcubeb/src/Makefile.in media/libcubeb/src/Makefile.in
-index 4c14494..1cb98e2 100644
---- media/libcubeb/src/Makefile.in
-+++ media/libcubeb/src/Makefile.in
-@@ -9,3 +9,7 @@ CFLAGS += \
- $(MOZ_ALSA_CFLAGS) \
- $(MOZ_PULSEAUDIO_CFLAGS) \
- $(NULL)
-+
-+ifdef MOZ_NATIVE_SPEEX
-+CFLAGS += $(MOZ_SPEEX_CFLAGS)
-+endif
-diff --git media/libtheora/Makefile.in media/libtheora/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libtheora/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/libtremor/Makefile.in media/libtremor/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libtremor/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/libvorbis/Makefile.in media/libvorbis/Makefile.in
-new file mode 100644
-index 0000000..1f02dc0
---- /dev/null
-+++ media/libvorbis/Makefile.in
-@@ -0,0 +1,9 @@
-+# 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/.
-+
-+include $(topsrcdir)/config/rules.mk
-+
-+ifdef MOZ_NATIVE_OGG
-+CFLAGS += $(MOZ_OGG_CFLAGS)
-+endif
-diff --git media/webrtc/signaling/test/Makefile.in media/webrtc/signaling/test/Makefile.in
+ FINAL_LIBRARY = 'gkmedias'
+
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ SOURCES['cubeb_resampler.cpp'].flags += CONFIG['MOZ_SPEEX_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
+ CFLAGS += [
+ '-I%s/%s' % (CONFIG['ANDROID_SOURCE'], d) for d in [
+diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA
+index 0833e4d..7ece97b 100644
+--- media/libogg/README_MOZILLA
++++ media/libogg/README_MOZILLA
+@@ -6,3 +6,6 @@ The svn revision number used was r17287.
+ The int-types.patch address a bug that config_types.h generated from
+ Linux platform can't be used on OpenSolaris directly see Mozilla bug
+ 449754
++
++The in-tree copy may be omitted during build by --with-system-ogg.
++Keep version in configure.in in sync on updates.
+diff --git media/libopus/README_MOZILLA media/libopus/README_MOZILLA
+index 2d85c9f..d3fb9f8 100644
+--- media/libopus/README_MOZILLA
++++ media/libopus/README_MOZILLA
+@@ -9,3 +9,6 @@ files after the copy step.
+ The upstream repository is https://git.xiph.org/opus.git
+
+ The git tag/revision used was v1.1.
++
++The in-tree copy may be omitted during build by --with-system-opus.
++So, keep its pkg-config version check within configure.in in sync on updates.
+diff --git media/libsoundtouch/README_MOZILLA media/libsoundtouch/README_MOZILLA
+index bfd4b1a..15b158d 100644
+--- media/libsoundtouch/README_MOZILLA
++++ media/libsoundtouch/README_MOZILLA
+@@ -6,3 +6,5 @@ The whole library is not used, only the relevant files are imported in the tree,
+ using the script `update.sh`. Some changes have been made to the files, using
+ the patch `moz-libsoundtouch.patch`. We also use a custom soundtouch_config.h.
+
++The in-tree copy may be omitted during build by --with-system-soundtouch.
++Keep version in configure.in in sync on updates.
+diff --git media/libspeex_resampler/README_MOZILLA media/libspeex_resampler/README_MOZILLA
+index 7f6b1bb..e830300 100644
+--- media/libspeex_resampler/README_MOZILLA
++++ media/libspeex_resampler/README_MOZILLA
+@@ -3,3 +3,6 @@ This source is from the Speex DSP library
+
+ It consists in the audio resampling code (resampler.c) and its header files
+ dependancies, imported into the tree using the update.sh script.
++
++The in-tree copy may be omitted during build by --with-system-speex.
++Keep version in configure.in in sync on updates.
+diff --git media/libtheora/README_MOZILLA media/libtheora/README_MOZILLA
+index d48dbfa..f08a2ed 100644
+--- media/libtheora/README_MOZILLA
++++ media/libtheora/README_MOZILLA
+@@ -3,3 +3,6 @@ using the update.sh script. The changes made were those applied by update.sh,
+ the addition/update of Makefile.in files for the Mozilla build system.
+
+ The subversion revision used was r17578.
++
++The in-tree copy may be omitted during build by --with-system-theora.
++Keep version in configure.in in sync on updates.
+diff --git media/libtheora/moz.build media/libtheora/moz.build
+index 14265b1..3069e99 100644
+--- media/libtheora/moz.build
++++ media/libtheora/moz.build
+@@ -93,3 +93,5 @@ if CONFIG['GNU_AS']:
+ if CONFIG['OS_TARGET'] == 'Android':
+ DEFINES['__linux__'] = True
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/libtremor/README_MOZILLA media/libtremor/README_MOZILLA
+index ee67b53..3f34a09 100644
+--- media/libtremor/README_MOZILLA
++++ media/libtremor/README_MOZILLA
+@@ -5,3 +5,6 @@ Makefile.in files for the Mozilla build system.
+
+ The upstream release used was http://svn.xiph.org/trunk/Tremor/
+ The subversion revision used was r17547.
++
++The in-tree copy may be omitted during build by --with-system-tremor.
++Keep version in configure.in in sync on updates.
+diff --git media/libtremor/moz.build media/libtremor/moz.build
+index 31831ba..a03d576 100644
+--- media/libtremor/moz.build
++++ media/libtremor/moz.build
+@@ -6,3 +6,5 @@
+
+ DIRS += ['include/tremor', 'lib']
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/libvorbis/README_MOZILLA media/libvorbis/README_MOZILLA
+index 7c7454c..55baedd 100644
+--- media/libvorbis/README_MOZILLA
++++ media/libvorbis/README_MOZILLA
+@@ -8,3 +8,6 @@ https://svn.xiph.org/tags/vorbis/libvorbis-1.3.4@19059
+
+ Some files are renamed during the copy to prevent clashes with object
+ file names with other Mozilla libraries.
++
++The in-tree copy may be omitted during build by --with-system-vorbis.
++Keep version in configure.in in sync on updates.
+diff --git media/libvorbis/moz.build media/libvorbis/moz.build
+index 919b99e..cc776f7 100644
+--- media/libvorbis/moz.build
++++ media/libvorbis/moz.build
+@@ -55,3 +55,6 @@ FINAL_LIBRARY = 'gkmedias'
+ # Suppress warnings in third-party code.
+ if CONFIG['GNU_CC']:
+ CFLAGS += ['-Wno-uninitialized']
++
++if CONFIG['MOZ_NATIVE_OGG']:
++ CFLAGS += CONFIG['MOZ_OGG_CFLAGS']
+diff --git media/webrtc/signaling/test/moz.build media/webrtc/signaling/test/moz.build
index bbc971c..6ed7e41 100644
---- media/webrtc/signaling/test/Makefile.in
-+++ media/webrtc/signaling/test/Makefile.in
-@@ -48,6 +48,12 @@ LIBS += \
- $(NULL)
- endif
+--- media/webrtc/signaling/test/moz.build
++++ media/webrtc/signaling/test/moz.build
+@@ -127,6 +127,9 @@ if CONFIG['MOZ_ALSA']:
+ if CONFIG['MOZ_NATIVE_JPEG']:
+ OS_LIBS += CONFIG['MOZ_JPEG_LIBS']
+
++if CONFIG['MOZ_NATIVE_OPUS']:
++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS']
++
+ if CONFIG['MOZ_NATIVE_LIBVPX']:
+ OS_LIBS += CONFIG['MOZ_LIBVPX_LIBS']
-+ifdef MOZ_NATIVE_OPUS
-+LIBS += \
-+ $(MOZ_OPUS_LIBS) \
-+ $(NULL)
-+endif
-+
- ifdef MOZ_NATIVE_LIBVPX
- LIBS += \
- $(MOZ_LIBVPX_LIBS) \
diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
index 00e77e7..55f48ab 100644
--- media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
+++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi
-@@ -14,9 +14,9 @@
+@@ -17,18 +17,11 @@
'conditions': [
['build_with_mozilla==1', {
# Mozilla provides its own build of the opus library.
- 'include_dirs': [
- '/media/libopus/include',
-- ]
+- '/media/libopus/src',
+- '/media/libopus/celt',
+ 'cflags_mozilla': [
++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt',
+ '$(MOZ_OPUS_CFLAGS)',
-+ ],
++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src',
+ ],
+- 'direct_dependent_settings': {
+- 'include_dirs': [
+- '/media/libopus/include',
+- '/media/libopus/src',
+- '/media/libopus/celt',
+- ],
+- },
}, {
'dependencies': [
'<(DEPTH)/third_party/opus/opus.gyp:opus'
-diff --git toolkit/library/libxul.mk toolkit/library/libxul.mk
+diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
+index 00e77e7..55f48ab 100644
+--- media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi
+@@ -84,19 +84,11 @@
+ ],
+ }],
+ ['build_with_mozilla==1', {
+- 'include_dirs': [
+- # Need Opus header files for the audio classifier.
+- '<(DEPTH)/../../../media/opus/celt',
+-# '<(DEPTH)/third_party/opus/src/src',
++ 'cflags_mozilla': [
++ '$(filter -I%, $(MOZ_CELT_CFLAGS))/celt',
++ '$(MOZ_OPUS_CFLAGS)',
++ '$(filter -I%, $(MOZ_OPUS_CFLAGS))/../src',
+ ],
+- 'direct_dependent_settings': {
+- 'include_dirs': [
+- '../../../../../../media/opus/celt',
+- # Need Opus header files for the audio classifier.
+- '<(DEPTH)/../../../media/opus/celt',
+-# '<(DEPTH)/third_party/opus/src/src',
+- ],
+- },
+ }],
+ ],
+ 'sources': [
+diff --git toolkit/library/moz.build toolkit/library/moz.build
index d42137a..695e75a8 100644
---- toolkit/library/libxul.mk
-+++ toolkit/library/libxul.mk
-@@ -77,6 +77,34 @@ ifdef MOZ_NATIVE_HUNSPELL
- EXTRA_DSO_LDOPTS += $(MOZ_HUNSPELL_LIBS)
- endif
+--- toolkit/library/moz.build
++++ toolkit/library/moz.build
+@@ -178,6 +178,30 @@ if CONFIG['MOZ_NATIVE_PNG']:
+ if CONFIG['MOZ_NATIVE_HUNSPELL']:
+ OS_LIBS += CONFIG['MOZ_HUNSPELL_LIBS']
+
++if CONFIG['MOZ_NATIVE_OGG']:
++ OS_LIBS += CONFIG['MOZ_OGG_LIBS']
++
++if CONFIG['MOZ_NATIVE_THEORA']:
++ OS_LIBS += CONFIG['MOZ_THEORA_LIBS']
++
++if CONFIG['MOZ_NATIVE_VORBIS']:
++ OS_LIBS += CONFIG['MOZ_VORBIS_LIBS']
++
++if CONFIG['MOZ_NATIVE_TREMOR']:
++ OS_LIBS += CONFIG['MOZ_TREMOR_LIBS']
++
++if CONFIG['MOZ_NATIVE_CELT']:
++ OS_LIBS += CONFIG['MOZ_CELT_LIBS']
++
++if CONFIG['MOZ_NATIVE_OPUS']:
++ OS_LIBS += CONFIG['MOZ_OPUS_LIBS']
++
++if CONFIG['MOZ_NATIVE_SPEEX']:
++ OS_LIBS += CONFIG['MOZ_SPEEX_LIBS']
++
++if CONFIG['MOZ_NATIVE_SOUNDTOUCH']:
++ OS_LIBS += CONFIG['MOZ_SOUNDTOUCH_LIBS']
++
+ if CONFIG['MOZ_NATIVE_LIBEVENT']:
+ OS_LIBS += CONFIG['MOZ_LIBEVENT_LIBS']
-+ifdef MOZ_NATIVE_OGG
-+EXTRA_DSO_LDOPTS += $(MOZ_OGG_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_THEORA
-+EXTRA_DSO_LDOPTS += $(MOZ_THEORA_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_VORBIS
-+EXTRA_DSO_LDOPTS += $(MOZ_VORBIS_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_TREMOR
-+EXTRA_DSO_LDOPTS += $(MOZ_TREMOR_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_OPUS
-+EXTRA_DSO_LDOPTS += $(MOZ_OPUS_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_SPEEX
-+EXTRA_DSO_LDOPTS += $(MOZ_SPEEX_LIBS)
-+endif
-+
-+ifdef MOZ_NATIVE_SOUNDTOUCH
-+EXTRA_DSO_LDOPTS += $(MOZ_SOUNDTOUCH_LIBS)
-+endif
-+
- ifdef MOZ_NATIVE_LIBEVENT
- EXTRA_DSO_LDOPTS += $(MOZ_LIBEVENT_LIBS)
- endif
-diff --git xpcom/build/nsXPComInit.cpp xpcom/build/nsXPComInit.cpp
+diff --git xpcom/build/XPCOMInit.cpp xpcom/build/XPCOMInit.cpp
index 2cf281e..6d7af0e 100644
---- xpcom/build/nsXPComInit.cpp
-+++ xpcom/build/nsXPComInit.cpp
-@@ -130,7 +130,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports *, REFNSIID, void **)
+--- xpcom/build/XPCOMInit.cpp
++++ xpcom/build/XPCOMInit.cpp
+@@ -138,7 +138,9 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**);
#include "mozilla/VisualEventTracer.h"
#endif
@@ -476,17 +566,17 @@ index 2cf281e..6d7af0e 100644
#if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
#include "vpx_mem/vpx_mem.h"
#endif
-@@ -571,11 +573,13 @@ NS_InitXPCOM2(nsIServiceManager* *result,
- // this oddness.
- mozilla::SetICUMemoryFunctions();
+@@ -651,11 +653,13 @@ NS_InitXPCOM2(nsIServiceManager** aResult,
+ // this oddness.
+ mozilla::SetICUMemoryFunctions();
+#ifndef MOZ_OGG_NO_MEM_REPORTING
- // Do the same for libogg.
- ogg_set_mem_functions(OggReporter::CountingMalloc,
- OggReporter::CountingCalloc,
- OggReporter::CountingRealloc,
- OggReporter::CountingFree);
+ // Do the same for libogg.
+ ogg_set_mem_functions(OggReporter::CountingMalloc,
+ OggReporter::CountingCalloc,
+ OggReporter::CountingRealloc,
+ OggReporter::CountingFree);
+#endif
#if defined(MOZ_VPX) && !defined(MOZ_VPX_NO_MEM_REPORTING)
- // And for VPX.
+ // And for VPX.
diff --git a/www/linux-firefox/Makefile b/www/linux-firefox/Makefile
index 32ce4e53f501..481c1e59b071 100644
--- a/www/linux-firefox/Makefile
+++ b/www/linux-firefox/Makefile
@@ -2,11 +2,11 @@
# $FreeBSD$
PORTNAME= firefox
-DISTVERSION= 38.0.6
+DISTVERSION= 39.0
PORTEPOCH= 1
CATEGORIES= www ipv6
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/linux-i686/en-US \
- MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/linux-i686/en-US
+ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build6/linux-i686/en-US
MAINTAINER= gecko@FreeBSD.org
COMMENT= Web browser based on the browser portion of Mozilla
diff --git a/www/linux-firefox/distinfo b/www/linux-firefox/distinfo
index 284f44527526..f89033ca556a 100644
--- a/www/linux-firefox/distinfo
+++ b/www/linux-firefox/distinfo
@@ -1,5 +1,5 @@
-SHA256 (firefox-38.0.6.tar.bz2) = b4a61d14618514678279ebdeec148e6d99dd2557cb47d0a387d42bbe7711dc51
-SIZE (firefox-38.0.6.tar.bz2) = 47706918
+SHA256 (firefox-39.0.tar.bz2) = b612185276ec1e3f60165ee274854c0244611b27076a29ca899d6e84a93e0983
+SIZE (firefox-39.0.tar.bz2) = 48620957
SHA256 (glib2-2.22.2-2.fc12.i686.rpm) = e3b459c245ec14e7248e9de4b506963a4773407f3e58835db5070d0ed02ecc99
SIZE (glib2-2.22.2-2.fc12.i686.rpm) = 1162908
SHA256 (gtk2-2.18.3-19.fc12.i686.rpm) = aea9cf7ffe9c8dae0faa2bf3d2aa1b2117c55dce03da72dcce8c268279ec0a4b
diff --git a/www/linux-firefox/pkg-plist b/www/linux-firefox/pkg-plist
index 4db6d8502b1e..1d93cce48d2d 100644
--- a/www/linux-firefox/pkg-plist
+++ b/www/linux-firefox/pkg-plist
@@ -45,7 +45,6 @@ lib/%%APP_NAME%%/libfreebl3.so
%%GTK218%%lib/%%APP_NAME%%/libgio-2.0.so.0
%%GTK218%%lib/%%APP_NAME%%/libglib-2.0.so.0
%%GTK218%%lib/%%APP_NAME%%/libgtk-x11-2.0.so.0
-lib/%%APP_NAME%%/libmozalloc.so
lib/%%APP_NAME%%/libmozsqlite3.so
lib/%%APP_NAME%%/libnspr4.so
lib/%%APP_NAME%%/libnss3.so