FreeBSD Bugzilla – Attachment 192488 Details for
Bug 226476
www/firefox: update to 60.0
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
beta12
ff60.diff (text/plain), 169.54 KB, created by
Jan Beich
on 2018-04-13 13:01:18 UTC
(
hide
)
Description:
beta12
Filename:
MIME Type:
Creator:
Jan Beich
Created:
2018-04-13 13:01:18 UTC
Size:
169.54 KB
patch
obsolete
>From 411b48d6dbc4e3a8b3874a0e8e7d1d82c4e80b63 Mon Sep 17 00:00:00 2001 >From: Jan Beich <jbeich@FreeBSD.org> >Date: Tue, 6 Mar 2018 00:56:50 +0000 >Subject: [PATCH] www/firefox: update to 60.0 > >- Drop libv4l support to reduce maintenance > >Changes: https://www.mozilla.org/firefox/60.0/releasenotes/ >PR: 226476 >Tested by: tobik, jrm >Security: 5aefc41e-d304-4ec8-8c82-824f84f08244 >MFH: 2018Q2 >--- > Mk/Uses/gecko.mk | 4 +- > Mk/bsd.gecko.mk | 2 +- > www/firefox-i18n/Makefile | 4 +- > www/firefox-i18n/Makefile.lang | 5 +- > www/firefox-i18n/Makefile.option | 2 + > www/firefox-i18n/distinfo | 392 ++++----- > www/firefox/Makefile | 27 +- > www/firefox/distinfo | 6 +- > www/firefox/files/patch-bug1021761 | 465 ++++++----- > www/firefox/files/patch-bug1418162 | 58 ++ > www/firefox/files/patch-bug1433747 | 24 - > www/firefox/files/patch-bug1438678 | 1000 ++++++++++++++++++++++ > www/firefox/files/patch-bug1444083 | 17 - > www/firefox/files/patch-bug1444798 | 14 +- > www/firefox/files/patch-bug826985 | 171 ---- > www/firefox/files/patch-z-bug1436911 | 1162 ++++++++++++++++++++++++++ > www/firefox/files/patch-z-bug517422 | 28 +- > 17 files changed, 2722 insertions(+), 659 deletions(-) > create mode 100644 www/firefox/files/patch-bug1418162 > delete mode 100644 www/firefox/files/patch-bug1433747 > create mode 100644 www/firefox/files/patch-bug1438678 > delete mode 100644 www/firefox/files/patch-bug1444083 > delete mode 100644 www/firefox/files/patch-bug826985 > create mode 100644 www/firefox/files/patch-z-bug1436911 > >diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk >index d07d0a07c4fe..9df59c251201 100644 >--- a/Mk/Uses/gecko.mk >+++ b/Mk/Uses/gecko.mk >@@ -37,12 +37,12 @@ RUN_DEPENDS+= libxul>=45:www/libxul > .elif ${gecko_ARGS:Mfirefox} > > _GECKO_DEFAULT_VERSION= 52 >-_GECKO_VERSIONS= 52 59 >+_GECKO_VERSIONS= 52 60 > _GECKO_TYPE= firefox > > # Dependence lines for different Firefox versions > 52_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr >-59_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox >+60_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox > > .if exists(${LOCALBASE}/bin/firefox) > _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null >diff --git a/Mk/bsd.gecko.mk b/Mk/bsd.gecko.mk >index 555135a7e7b4..b4c33ff5e8be 100644 >--- a/Mk/bsd.gecko.mk >+++ b/Mk/bsd.gecko.mk >@@ -379,7 +379,7 @@ post-patch-SNDIO-on: > .endif > > .if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54 >-BUILD_DEPENDS+= ${RUST_PORT:T}>=1.22.1:${RUST_PORT} >+BUILD_DEPENDS+= ${RUST_PORT:T}>=1.24:${RUST_PORT} > RUST_PORT?= lang/rust > . if ${MOZILLA_VER:R:R} < 54 > MOZ_OPTIONS+= --enable-rust >diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile >index 276564d29a09..ad3c97067036 100644 >--- a/www/firefox-i18n/Makefile >+++ b/www/firefox-i18n/Makefile >@@ -2,7 +2,7 @@ > # $FreeBSD$ > > PORTNAME= firefox-i18n >-PORTVERSION= 59.0.2 >+PORTVERSION= 60.0b12 > CATEGORIES= www > MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ > MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi >@@ -15,7 +15,7 @@ COMMENT= Localized interface for Firefox > > EXTRACT_DEPENDS= zip:archivers/zip > >-USES= zip:infozip gecko:firefox,59,build >+USES= zip:infozip gecko:firefox,60,build > USE_XPI= firefox > > NO_ARCH= yes >diff --git a/www/firefox-i18n/Makefile.lang b/www/firefox-i18n/Makefile.lang >index a73f94452926..25b432860d28 100644 >--- a/www/firefox-i18n/Makefile.lang >+++ b/www/firefox-i18n/Makefile.lang >@@ -6,7 +6,7 @@ FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cak \ > es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn \ > gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja ka kab \ > kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl \ >- nn-NO or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ >+ nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ > sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW > > .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) >@@ -225,6 +225,9 @@ FIREFOX_I18N+= nl > .if ${PORT_OPTIONS:MLANG_NN} > FIREFOX_I18N+= nn-NO > .endif >+.if ${PORT_OPTIONS:MLANG_OC} >+FIREFOX_I18N+= oc >+.endif > .if ${PORT_OPTIONS:MLANG_OR} > FIREFOX_I18N+= or > .endif >diff --git a/www/firefox-i18n/Makefile.option b/www/firefox-i18n/Makefile.option >index 082aa76465ba..49e0d6f4adc6 100644 >--- a/www/firefox-i18n/Makefile.option >+++ b/www/firefox-i18n/Makefile.option >@@ -73,6 +73,7 @@ OPTIONS_DEFINE= LANG_ACH \ > LANG_NE \ > LANG_NL \ > LANG_NN \ >+ LANG_OC \ > LANG_OR \ > LANG_PA \ > LANG_PL \ >@@ -122,6 +123,7 @@ LANG_LIJ_DESC?= Ligurian (Genoa) language support > LANG_MS_DESC?= Malay language support > LANG_MY_DESC?= Burmese language support > LANG_NE_DESC?= Nepali language support >+LANG_OC_DESC?= Occitan (lengadocian) language support > LANG_SW_DESC?= Swahili language support > LANG_UR_DESC?= Urdu (Pakistan) language support > LANG_UZ_DESC?= Uzbek language support >diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo >index 1fa30bf8439f..50540b1593ea 100644 >--- a/www/firefox-i18n/distinfo >+++ b/www/firefox-i18n/distinfo >@@ -1,195 +1,197 @@ >-TIMESTAMP = 1521751601 >-SHA256 (xpi/firefox-i18n-59.0.2/ach.xpi) = d4fd5f94e6463049826f854f66589984854042c997f977049d4f8a990698eb53 >-SIZE (xpi/firefox-i18n-59.0.2/ach.xpi) = 439227 >-SHA256 (xpi/firefox-i18n-59.0.2/af.xpi) = faca2b8efbef96c1f8362ba5b7f0b39ed76fce2e77028abfc9c1ecad4fc95ac6 >-SIZE (xpi/firefox-i18n-59.0.2/af.xpi) = 436731 >-SHA256 (xpi/firefox-i18n-59.0.2/an.xpi) = e39ea62741370620936c43c84adc34eb63618108633b2840909ec9365588d76b >-SIZE (xpi/firefox-i18n-59.0.2/an.xpi) = 463405 >-SHA256 (xpi/firefox-i18n-59.0.2/ar.xpi) = 732cf91f7e5f8c21798ccf5ed7647afd7a3d64147393da23d6d5df97409685d3 >-SIZE (xpi/firefox-i18n-59.0.2/ar.xpi) = 486633 >-SHA256 (xpi/firefox-i18n-59.0.2/as.xpi) = a862f49f7045e8a10411007486401f134c38e3a0fce9f6f3331bf18783f1541c >-SIZE (xpi/firefox-i18n-59.0.2/as.xpi) = 483301 >-SHA256 (xpi/firefox-i18n-59.0.2/ast.xpi) = 43cb3a6e8aea1f876722508a6ed1c456fd313c129a93b0d49827d37752b320be >-SIZE (xpi/firefox-i18n-59.0.2/ast.xpi) = 454343 >-SHA256 (xpi/firefox-i18n-59.0.2/az.xpi) = 7f09f746bb2afcb8d82c76e3919607b7fc2f8a6c7ac65221134d2b713f610493 >-SIZE (xpi/firefox-i18n-59.0.2/az.xpi) = 464270 >-SHA256 (xpi/firefox-i18n-59.0.2/be.xpi) = 0c9d0500a9f85997334283a015528b2a2a3c86dbd604571206a5522d01811802 >-SIZE (xpi/firefox-i18n-59.0.2/be.xpi) = 517059 >-SHA256 (xpi/firefox-i18n-59.0.2/bg.xpi) = 6ce855064e22750088cd09d61fd3d77cd3a2cd2b286e8603df9d02386dd4985d >-SIZE (xpi/firefox-i18n-59.0.2/bg.xpi) = 508613 >-SHA256 (xpi/firefox-i18n-59.0.2/bn-BD.xpi) = 860f9e8d7a7c7e8c35acde03a35f9f94182bd4172e0cfebc43d09a5057f54265 >-SIZE (xpi/firefox-i18n-59.0.2/bn-BD.xpi) = 526352 >-SHA256 (xpi/firefox-i18n-59.0.2/bn-IN.xpi) = 11cc8e9eeabb0171125939ff050fe736581df2957fa96fc54ba0f5c5c6f91e12 >-SIZE (xpi/firefox-i18n-59.0.2/bn-IN.xpi) = 510797 >-SHA256 (xpi/firefox-i18n-59.0.2/br.xpi) = 0d5068e3ac9293da71a2bfc3566e6cbe52273741cc9e82d5514b7334a6ed0e4c >-SIZE (xpi/firefox-i18n-59.0.2/br.xpi) = 451719 >-SHA256 (xpi/firefox-i18n-59.0.2/bs.xpi) = 291a4f8e85977a8eb93ab52ae7caa857caf7998f1c561baa534ab8a3958411c6 >-SIZE (xpi/firefox-i18n-59.0.2/bs.xpi) = 457859 >-SHA256 (xpi/firefox-i18n-59.0.2/ca.xpi) = 5cbec24877869340fd52eab4af21acdb0e30a298ad9e9d97b899a5a0223be1c4 >-SIZE (xpi/firefox-i18n-59.0.2/ca.xpi) = 464912 >-SHA256 (xpi/firefox-i18n-59.0.2/cak.xpi) = 935960adb4cd204153f1790397ce3b8793151a6d9b1f5bf38630b7a274b36bfe >-SIZE (xpi/firefox-i18n-59.0.2/cak.xpi) = 475234 >-SHA256 (xpi/firefox-i18n-59.0.2/cs.xpi) = 266664866deaff544d47ffb90ada91c0d270fb563a1ef67baad86c175d88b606 >-SIZE (xpi/firefox-i18n-59.0.2/cs.xpi) = 471575 >-SHA256 (xpi/firefox-i18n-59.0.2/cy.xpi) = 73ed7ec234a6e197688ec0fd7809d3bf24d6f6f6f8aad9e47bb10bc600d8918b >-SIZE (xpi/firefox-i18n-59.0.2/cy.xpi) = 454433 >-SHA256 (xpi/firefox-i18n-59.0.2/da.xpi) = db17d7492e07c2c825572353a1407242180e0b53d399b48579d5f1e53ec8d11e >-SIZE (xpi/firefox-i18n-59.0.2/da.xpi) = 446948 >-SHA256 (xpi/firefox-i18n-59.0.2/de.xpi) = 4e02cf24936162334435ecf99a9b1abefeebda06b34a75e527c6328502c1fcff >-SIZE (xpi/firefox-i18n-59.0.2/de.xpi) = 466272 >-SHA256 (xpi/firefox-i18n-59.0.2/dsb.xpi) = 91ef3e6bac7be38155e5f957756f21761bf548a2216e2588721bf59a10792f14 >-SIZE (xpi/firefox-i18n-59.0.2/dsb.xpi) = 478974 >-SHA256 (xpi/firefox-i18n-59.0.2/el.xpi) = c3457ea19f44ebbd2bcf34403c19d483edee46bdf2fa2de3ad78bb7ee2510f62 >-SIZE (xpi/firefox-i18n-59.0.2/el.xpi) = 531408 >-SHA256 (xpi/firefox-i18n-59.0.2/en-GB.xpi) = 4920efb507cfee37e39b705b5bda6b1716eb491274f9df5be505e2a65c4d8fd7 >-SIZE (xpi/firefox-i18n-59.0.2/en-GB.xpi) = 434300 >-SHA256 (xpi/firefox-i18n-59.0.2/en-US.xpi) = c2b1533bb3c2b75c60662225017795905a2f3f28989d6098bdd7b6757ae3bff7 >-SIZE (xpi/firefox-i18n-59.0.2/en-US.xpi) = 432749 >-SHA256 (xpi/firefox-i18n-59.0.2/en-ZA.xpi) = d3655db524f7eaee1f6c735efe1697bc183776adb85edaaa4b93bfdaf8861924 >-SIZE (xpi/firefox-i18n-59.0.2/en-ZA.xpi) = 427365 >-SHA256 (xpi/firefox-i18n-59.0.2/eo.xpi) = ca5d2cfd209a5c90521fe4fb014c1d3835b4bf11fd74f9e3c30ec57ada7e4655 >-SIZE (xpi/firefox-i18n-59.0.2/eo.xpi) = 453366 >-SHA256 (xpi/firefox-i18n-59.0.2/es-AR.xpi) = 9322e35d7dac234c334a9b65347344b4ec47df1bd415d0c715ff310edcae3aea >-SIZE (xpi/firefox-i18n-59.0.2/es-AR.xpi) = 461797 >-SHA256 (xpi/firefox-i18n-59.0.2/es-CL.xpi) = 28b312de9234e3654ef5105777d195c6dcbd58107978407b4ff69ebabc75d4bc >-SIZE (xpi/firefox-i18n-59.0.2/es-CL.xpi) = 464654 >-SHA256 (xpi/firefox-i18n-59.0.2/es-ES.xpi) = 3bf4c6c0de74e5eb1202f5dd6cea420b38b1210289f4d8ed78d54095e9241846 >-SIZE (xpi/firefox-i18n-59.0.2/es-ES.xpi) = 348463 >-SHA256 (xpi/firefox-i18n-59.0.2/es-MX.xpi) = 065e7bb9c94c38eb7d18f674a51076c6356e9c201ab647bc8a9f88d6bc24b934 >-SIZE (xpi/firefox-i18n-59.0.2/es-MX.xpi) = 466313 >-SHA256 (xpi/firefox-i18n-59.0.2/et.xpi) = f19a1382ee7616d9c0bad256ec10b7dab3c4b5c2395f6cb306f242eb8ce99eb5 >-SIZE (xpi/firefox-i18n-59.0.2/et.xpi) = 445394 >-SHA256 (xpi/firefox-i18n-59.0.2/eu.xpi) = b28fd08c3a6f923e4cd469ecf8ba58e6a323a754733f13144716e31ef86d002e >-SIZE (xpi/firefox-i18n-59.0.2/eu.xpi) = 455236 >-SHA256 (xpi/firefox-i18n-59.0.2/fa.xpi) = 0cecfc780e5d5fd00e9bdba9b4b23b1c5da34b520636417cd7636a679bbc50f4 >-SIZE (xpi/firefox-i18n-59.0.2/fa.xpi) = 508098 >-SHA256 (xpi/firefox-i18n-59.0.2/ff.xpi) = 74ae886495cc10e62cf64eb6d0a90111e79a90f95fe365402b19c1c0d0dc8a7a >-SIZE (xpi/firefox-i18n-59.0.2/ff.xpi) = 455027 >-SHA256 (xpi/firefox-i18n-59.0.2/fi.xpi) = a3a0291633b412eedd3e93e1e6726b74d181203a4c057a8a31db0981f2abd449 >-SIZE (xpi/firefox-i18n-59.0.2/fi.xpi) = 445182 >-SHA256 (xpi/firefox-i18n-59.0.2/fr.xpi) = 17bfbbe27944608489b08a3abfa414cce964eecd03b9c341f29d5f125062298d >-SIZE (xpi/firefox-i18n-59.0.2/fr.xpi) = 473593 >-SHA256 (xpi/firefox-i18n-59.0.2/fy-NL.xpi) = 61cdf4a594632ad0ae2f4cc224b61c3822b81784f6145f9632461f4f596f4b34 >-SIZE (xpi/firefox-i18n-59.0.2/fy-NL.xpi) = 462918 >-SHA256 (xpi/firefox-i18n-59.0.2/ga-IE.xpi) = cbfcfb995c91ca794714a881cd12701d01ae3830ff518477c4b1235380052de1 >-SIZE (xpi/firefox-i18n-59.0.2/ga-IE.xpi) = 471909 >-SHA256 (xpi/firefox-i18n-59.0.2/gd.xpi) = 65f578cf7a0c58592d75b7f85c2a3b1c847810ffc623ae3bdc6f8517d8e33c41 >-SIZE (xpi/firefox-i18n-59.0.2/gd.xpi) = 461297 >-SHA256 (xpi/firefox-i18n-59.0.2/gl.xpi) = 9a3e6621a25ba77291bc3e78f539680eb679929d810d8ff51cbb4db21f4622bb >-SIZE (xpi/firefox-i18n-59.0.2/gl.xpi) = 441615 >-SHA256 (xpi/firefox-i18n-59.0.2/gn.xpi) = 3f44a6af5e7d75e283514e0a73f1a30a2e35865086bcfb4f47a76cc957f8265d >-SIZE (xpi/firefox-i18n-59.0.2/gn.xpi) = 469397 >-SHA256 (xpi/firefox-i18n-59.0.2/gu-IN.xpi) = 105229e5f047d917f277c13d72ee50e981c92cecd8a342608c15245b28d4d303 >-SIZE (xpi/firefox-i18n-59.0.2/gu-IN.xpi) = 521804 >-SHA256 (xpi/firefox-i18n-59.0.2/he.xpi) = a1a5744ce47eaa193278f697a5bf267cccd01777d8e4d7c7433bd7bfe1ddd132 >-SIZE (xpi/firefox-i18n-59.0.2/he.xpi) = 472771 >-SHA256 (xpi/firefox-i18n-59.0.2/hi-IN.xpi) = b51b0aac6319414c1a49858f180949a07c999c866c63e619818505727ebca52d >-SIZE (xpi/firefox-i18n-59.0.2/hi-IN.xpi) = 524279 >-SHA256 (xpi/firefox-i18n-59.0.2/hr.xpi) = bde5da8ad592142500f36757d3327129a6343dc52fb7c63b4edb1138b290ac80 >-SIZE (xpi/firefox-i18n-59.0.2/hr.xpi) = 459978 >-SHA256 (xpi/firefox-i18n-59.0.2/hsb.xpi) = 84354abb5b8d735061284a8357dbf80ad0ab4d49618af82074d6b8cd7990339a >-SIZE (xpi/firefox-i18n-59.0.2/hsb.xpi) = 475940 >-SHA256 (xpi/firefox-i18n-59.0.2/hu.xpi) = a8c1ceb1fdd231acd78d91a67b79f4a0932842322b76a5cb6e495c8901b83823 >-SIZE (xpi/firefox-i18n-59.0.2/hu.xpi) = 476896 >-SHA256 (xpi/firefox-i18n-59.0.2/hy-AM.xpi) = afbcfa2bb1f5201a832978eb3ec66ac779107606ee21e7ed21b118887e982a70 >-SIZE (xpi/firefox-i18n-59.0.2/hy-AM.xpi) = 508167 >-SHA256 (xpi/firefox-i18n-59.0.2/ia.xpi) = 8272d2de413ef02c0ae56633c1814004d4b33893853e2914c01cdd46c9427c32 >-SIZE (xpi/firefox-i18n-59.0.2/ia.xpi) = 448829 >-SHA256 (xpi/firefox-i18n-59.0.2/id.xpi) = 083e9ed9646f3dcf558e44b65ddd9fd56bdcf8fe19c35e81de20fb5132854589 >-SIZE (xpi/firefox-i18n-59.0.2/id.xpi) = 441952 >-SHA256 (xpi/firefox-i18n-59.0.2/is.xpi) = 091504efc4de1c554bde2d11e4d547deb03355384776594fb794a818c0b09dd5 >-SIZE (xpi/firefox-i18n-59.0.2/is.xpi) = 451373 >-SHA256 (xpi/firefox-i18n-59.0.2/it.xpi) = aa5807fbc05cccb0ff71504b7669908744aa61d8e6080fc8a0ccdec015d43f3e >-SIZE (xpi/firefox-i18n-59.0.2/it.xpi) = 342524 >-SHA256 (xpi/firefox-i18n-59.0.2/ja.xpi) = eb713392349af7ed2383b59463554ee0b2ded2a4f8b5292de5481c056f271bc2 >-SIZE (xpi/firefox-i18n-59.0.2/ja.xpi) = 508148 >-SHA256 (xpi/firefox-i18n-59.0.2/ka.xpi) = 7cc0bfa96e5a2b5203c78a123cf293f9150bf080cb901a97991658047902bacd >-SIZE (xpi/firefox-i18n-59.0.2/ka.xpi) = 492569 >-SHA256 (xpi/firefox-i18n-59.0.2/kab.xpi) = f1ba41b49e0ff467b549d406d5554235251d75b91eca0eac193172eeb4a8c5ef >-SIZE (xpi/firefox-i18n-59.0.2/kab.xpi) = 461840 >-SHA256 (xpi/firefox-i18n-59.0.2/kk.xpi) = ecddec11fcc909fb2bc520da8b4ffe573fde85a29f25b4c4ea72e15d014ebba3 >-SIZE (xpi/firefox-i18n-59.0.2/kk.xpi) = 517583 >-SHA256 (xpi/firefox-i18n-59.0.2/km.xpi) = d70ef8dad857d4f7b99d508495b3f717d6a27d7b2aa96788c51af4d5e875cd7e >-SIZE (xpi/firefox-i18n-59.0.2/km.xpi) = 526359 >-SHA256 (xpi/firefox-i18n-59.0.2/kn.xpi) = 7cadd99b0d23cf4f673ef76c0a5beab1ca6a4e9f41b686ca23c752aa2570c794 >-SIZE (xpi/firefox-i18n-59.0.2/kn.xpi) = 527879 >-SHA256 (xpi/firefox-i18n-59.0.2/ko.xpi) = f7e418dbb3b98023b080814c52bf2bed020b764420084158161c1cc68baab87b >-SIZE (xpi/firefox-i18n-59.0.2/ko.xpi) = 487661 >-SHA256 (xpi/firefox-i18n-59.0.2/lij.xpi) = d47c2eb90d25be6fbc4f2880659902713495c7cfdfd31cf3d23166e584061dbd >-SIZE (xpi/firefox-i18n-59.0.2/lij.xpi) = 446606 >-SHA256 (xpi/firefox-i18n-59.0.2/lt.xpi) = e6620d3f8b4a8e479d45bf572e3897be1edc0493735fa599c86abfe8d32bdcba >-SIZE (xpi/firefox-i18n-59.0.2/lt.xpi) = 475142 >-SHA256 (xpi/firefox-i18n-59.0.2/lv.xpi) = 2a549953373041fa8e36ae40ad913cbadd7af5a08555c5c6dc60459aedae2987 >-SIZE (xpi/firefox-i18n-59.0.2/lv.xpi) = 463655 >-SHA256 (xpi/firefox-i18n-59.0.2/mai.xpi) = 6903c60c5eccd3e3ba29315aae1406b48841b9396be3927899d6bce6955546b9 >-SIZE (xpi/firefox-i18n-59.0.2/mai.xpi) = 499910 >-SHA256 (xpi/firefox-i18n-59.0.2/mk.xpi) = f5e80c52b4474f88460329cf8642287a96c7dd61bd03f70d5acb3cac0e25ec4f >-SIZE (xpi/firefox-i18n-59.0.2/mk.xpi) = 484076 >-SHA256 (xpi/firefox-i18n-59.0.2/ml.xpi) = 29a1db58dce400dd16fb13cd424bdba0f097d9eee2e2e701f8acc0366bc7e473 >-SIZE (xpi/firefox-i18n-59.0.2/ml.xpi) = 539735 >-SHA256 (xpi/firefox-i18n-59.0.2/mr.xpi) = a4be8ab4e2417c4056c92146a549afe8665071ba777d4252669c67c9ed6f242b >-SIZE (xpi/firefox-i18n-59.0.2/mr.xpi) = 517961 >-SHA256 (xpi/firefox-i18n-59.0.2/ms.xpi) = 354f738c0df3f4568c52cd70f4b0c59bea2764fef283a0d552b9d209dbf6c3f4 >-SIZE (xpi/firefox-i18n-59.0.2/ms.xpi) = 450075 >-SHA256 (xpi/firefox-i18n-59.0.2/my.xpi) = 97ade42f8ec1ac2c698e1777ce10a1c4abadef1e2987a3da4df50c64fe1ba758 >-SIZE (xpi/firefox-i18n-59.0.2/my.xpi) = 511894 >-SHA256 (xpi/firefox-i18n-59.0.2/nb-NO.xpi) = 9f45d75e5ad7fa288b3794661ba2eeba2eb857c11d6bd200324ee1c2188a5467 >-SIZE (xpi/firefox-i18n-59.0.2/nb-NO.xpi) = 450276 >-SHA256 (xpi/firefox-i18n-59.0.2/ne-NP.xpi) = 023e578ee98db7f1549011b600430a5800e89b75d8ef172719041fba4ecca633 >-SIZE (xpi/firefox-i18n-59.0.2/ne-NP.xpi) = 509177 >-SHA256 (xpi/firefox-i18n-59.0.2/nl.xpi) = 65384c5e4d3f36257f6f0793f311be4a50333ec67fff877a1aac01b9c403868f >-SIZE (xpi/firefox-i18n-59.0.2/nl.xpi) = 458128 >-SHA256 (xpi/firefox-i18n-59.0.2/nn-NO.xpi) = d583ae5e1ec6dff31adc76bd243db1c05c390adb7e757bb3be823370141d6e81 >-SIZE (xpi/firefox-i18n-59.0.2/nn-NO.xpi) = 451470 >-SHA256 (xpi/firefox-i18n-59.0.2/or.xpi) = 64bead2c33ccc197348ecdaeae4bc2b16d947e2d17fa3e83fff9eece9fdc3109 >-SIZE (xpi/firefox-i18n-59.0.2/or.xpi) = 493181 >-SHA256 (xpi/firefox-i18n-59.0.2/pa-IN.xpi) = 504d8e4a3e3c485ab03fce76636de738dd3bd5ab75e5c52bebbe74634972686e >-SIZE (xpi/firefox-i18n-59.0.2/pa-IN.xpi) = 492420 >-SHA256 (xpi/firefox-i18n-59.0.2/pl.xpi) = e34d92a38abdd251bf110b64c3c2bbf70ddefdc3d32ef50a6545dd3d8c8022e6 >-SIZE (xpi/firefox-i18n-59.0.2/pl.xpi) = 358511 >-SHA256 (xpi/firefox-i18n-59.0.2/pt-BR.xpi) = cd0e1e1fb5063fd9a82940506777fd5a9447df36f46f604026b1a4987e65b8e4 >-SIZE (xpi/firefox-i18n-59.0.2/pt-BR.xpi) = 455916 >-SHA256 (xpi/firefox-i18n-59.0.2/pt-PT.xpi) = ab480af25495f57649c19cf54668bab1e209b60d07654907e13010b26503506a >-SIZE (xpi/firefox-i18n-59.0.2/pt-PT.xpi) = 459331 >-SHA256 (xpi/firefox-i18n-59.0.2/rm.xpi) = bd4918a2b0ce184da481fde4d6030991096defd8486a49deec07ccd94dd11990 >-SIZE (xpi/firefox-i18n-59.0.2/rm.xpi) = 449757 >-SHA256 (xpi/firefox-i18n-59.0.2/ro.xpi) = cd6ff4632e846c0d982faccbda31ee379dc002c16a11e119de1b35543bb9f912 >-SIZE (xpi/firefox-i18n-59.0.2/ro.xpi) = 453403 >-SHA256 (xpi/firefox-i18n-59.0.2/ru.xpi) = 2554a16e953fe70e923778fac94aff135cec1dc83177b8d01c3062a27da3b8d6 >-SIZE (xpi/firefox-i18n-59.0.2/ru.xpi) = 526523 >-SHA256 (xpi/firefox-i18n-59.0.2/si.xpi) = 5a34546cefac845cb6131382cb04771ae20f18a6eb6c058cab582419cc9324e9 >-SIZE (xpi/firefox-i18n-59.0.2/si.xpi) = 492588 >-SHA256 (xpi/firefox-i18n-59.0.2/sk.xpi) = 34f7705c36c88f20ba2bcafd09b6ada3c90ae5d71acd4b7747ac60cce70c222c >-SIZE (xpi/firefox-i18n-59.0.2/sk.xpi) = 480813 >-SHA256 (xpi/firefox-i18n-59.0.2/sl.xpi) = 19d8af678cd2874a37bc5f5836e030d0e04c64de5f3cab994f25dc27c48048ae >-SIZE (xpi/firefox-i18n-59.0.2/sl.xpi) = 458824 >-SHA256 (xpi/firefox-i18n-59.0.2/son.xpi) = f6d897f43b61d7b476cf0bbdfaa9bb09c97e1b923ed93ebaa45796da17d5815a >-SIZE (xpi/firefox-i18n-59.0.2/son.xpi) = 446400 >-SHA256 (xpi/firefox-i18n-59.0.2/sq.xpi) = dd0fa029de2d70ac4982d2ec5d904a8543126198080ae8a45b1037100dfc1454 >-SIZE (xpi/firefox-i18n-59.0.2/sq.xpi) = 464463 >-SHA256 (xpi/firefox-i18n-59.0.2/sr.xpi) = ff0e506cfde1150867113f1fadf49a075c7b39ec1273254fd1c825c7aa3fc61d >-SIZE (xpi/firefox-i18n-59.0.2/sr.xpi) = 486178 >-SHA256 (xpi/firefox-i18n-59.0.2/sv-SE.xpi) = 0062281cc43f2b132663a690eaaaac8c483196daed5fc1c8f1de02b59005ad70 >-SIZE (xpi/firefox-i18n-59.0.2/sv-SE.xpi) = 458659 >-SHA256 (xpi/firefox-i18n-59.0.2/ta.xpi) = 12d92d14cdb6aba7228cf634da62ba2ebca3210ed4db9119f4ba2d7c9c8296fc >-SIZE (xpi/firefox-i18n-59.0.2/ta.xpi) = 512843 >-SHA256 (xpi/firefox-i18n-59.0.2/te.xpi) = 7026e14f3760b906048d45d25eaa73d0f2a657614eb07ba3a567803b4daf2bfe >-SIZE (xpi/firefox-i18n-59.0.2/te.xpi) = 527083 >-SHA256 (xpi/firefox-i18n-59.0.2/th.xpi) = 226efaa18781edc8c5ffec902c2a00047d3a0796507c9799134a5fe0517b2cc9 >-SIZE (xpi/firefox-i18n-59.0.2/th.xpi) = 498544 >-SHA256 (xpi/firefox-i18n-59.0.2/tr.xpi) = a39db56a64511ced3451aac4cb6d6dad6e3d49f7a60e074742b08a492a04580c >-SIZE (xpi/firefox-i18n-59.0.2/tr.xpi) = 463593 >-SHA256 (xpi/firefox-i18n-59.0.2/uk.xpi) = f4b96792dbca4b8de74dccce1b51d5c4e6d0cd2509ef2573c1f992f37dd71c32 >-SIZE (xpi/firefox-i18n-59.0.2/uk.xpi) = 516926 >-SHA256 (xpi/firefox-i18n-59.0.2/ur.xpi) = 06eea9f0bde0e5d3299e59d76cbc486a5a9e4d36f6ee9e262b2199bb45967b59 >-SIZE (xpi/firefox-i18n-59.0.2/ur.xpi) = 507379 >-SHA256 (xpi/firefox-i18n-59.0.2/uz.xpi) = 16f3a699afa42f645c0276b53be27d93f35f21f20289206431be0da811e3fe34 >-SIZE (xpi/firefox-i18n-59.0.2/uz.xpi) = 456923 >-SHA256 (xpi/firefox-i18n-59.0.2/vi.xpi) = b1abb414442450d836094dcae26268c61608102e31d745b717efdc92e05fd760 >-SIZE (xpi/firefox-i18n-59.0.2/vi.xpi) = 470069 >-SHA256 (xpi/firefox-i18n-59.0.2/xh.xpi) = 7de47e610d82ec7ed7a57d830ef20c4a113770fdc659f19c47c17f4465a9e83b >-SIZE (xpi/firefox-i18n-59.0.2/xh.xpi) = 460772 >-SHA256 (xpi/firefox-i18n-59.0.2/zh-CN.xpi) = 1e30757d37bb8f13bec733e302e393204bc5f9c9b859465252b25ae053e87b27 >-SIZE (xpi/firefox-i18n-59.0.2/zh-CN.xpi) = 483449 >-SHA256 (xpi/firefox-i18n-59.0.2/zh-TW.xpi) = 5d852b837ce85c5a7bb4a4e95655bba83ca3e428a20b252c023125cc55e538a4 >-SIZE (xpi/firefox-i18n-59.0.2/zh-TW.xpi) = 477089 >+TIMESTAMP = 1523564700 >+SHA256 (xpi/firefox-i18n-60.0b12/ach.xpi) = eb0275dc9dbe466ea34d4f492462aec7d25626ec6cf965bd0b344634120e232d >+SIZE (xpi/firefox-i18n-60.0b12/ach.xpi) = 495264 >+SHA256 (xpi/firefox-i18n-60.0b12/af.xpi) = 8ed6b5a5cd2bc33e49b03e450eea8de83a18c82c74b1f10984d59ce5af92af5d >+SIZE (xpi/firefox-i18n-60.0b12/af.xpi) = 485755 >+SHA256 (xpi/firefox-i18n-60.0b12/an.xpi) = 127d18c9cc6c174637fe104ab6a3a35b117c2084c5a3e7f671f3273efe6c3d87 >+SIZE (xpi/firefox-i18n-60.0b12/an.xpi) = 518899 >+SHA256 (xpi/firefox-i18n-60.0b12/ar.xpi) = 55f5cb4c8e4abc08d18711df475557545a479e01e87aaaa8ffa352f17bd8f39a >+SIZE (xpi/firefox-i18n-60.0b12/ar.xpi) = 546105 >+SHA256 (xpi/firefox-i18n-60.0b12/as.xpi) = 07ac1970345845fd22f9797a60dbe9b876569a6a60cbca80ccacf7e7bb8478a1 >+SIZE (xpi/firefox-i18n-60.0b12/as.xpi) = 529488 >+SHA256 (xpi/firefox-i18n-60.0b12/ast.xpi) = 3514982d520a43fe390af2c02c1047c501d7be00094aacf5b43a0a91c8505e51 >+SIZE (xpi/firefox-i18n-60.0b12/ast.xpi) = 506992 >+SHA256 (xpi/firefox-i18n-60.0b12/az.xpi) = 9145185db74b0b764cc72e20737564da86f5412768729b4890e869f1fb937611 >+SIZE (xpi/firefox-i18n-60.0b12/az.xpi) = 520378 >+SHA256 (xpi/firefox-i18n-60.0b12/be.xpi) = 0e7eb6efd3a1e31867ee9c6d67d158b38f6013eaaf031bccbcc6771cc93d8a76 >+SIZE (xpi/firefox-i18n-60.0b12/be.xpi) = 578595 >+SHA256 (xpi/firefox-i18n-60.0b12/bg.xpi) = df7b4ee4b4c4e4156fa68236bac876551b1b52c35d5839926879244257578139 >+SIZE (xpi/firefox-i18n-60.0b12/bg.xpi) = 568202 >+SHA256 (xpi/firefox-i18n-60.0b12/bn-BD.xpi) = a8dcc12789cb50fe72fe9a4d07594793be936bf10f2215c2a62b287a8dac173a >+SIZE (xpi/firefox-i18n-60.0b12/bn-BD.xpi) = 586620 >+SHA256 (xpi/firefox-i18n-60.0b12/bn-IN.xpi) = 0fbe5a3f4c2cb2bb2a4fdefa65a7807bf94ebe617546400e8f3e4bec860be554 >+SIZE (xpi/firefox-i18n-60.0b12/bn-IN.xpi) = 569235 >+SHA256 (xpi/firefox-i18n-60.0b12/br.xpi) = f5d02a20037bc68750f31d517c73e9f0d2a624f8385502beacfa8e78322ee873 >+SIZE (xpi/firefox-i18n-60.0b12/br.xpi) = 510409 >+SHA256 (xpi/firefox-i18n-60.0b12/bs.xpi) = e418e0f96889dfc5df0d63c9acf3eb3f7776d4bf607430376450524094cbcd7c >+SIZE (xpi/firefox-i18n-60.0b12/bs.xpi) = 513133 >+SHA256 (xpi/firefox-i18n-60.0b12/ca.xpi) = 2ca4e3e2504f90f76e18824635c85a341a66e872cc52f689a915c15e0fb5b41a >+SIZE (xpi/firefox-i18n-60.0b12/ca.xpi) = 523679 >+SHA256 (xpi/firefox-i18n-60.0b12/cak.xpi) = 9dae5c8091819d68a4a02aed3a7c3c666f1e151a71e674efb83a117ec171c343 >+SIZE (xpi/firefox-i18n-60.0b12/cak.xpi) = 533312 >+SHA256 (xpi/firefox-i18n-60.0b12/cs.xpi) = 7d49e420d807c79bb90f470660b2014ff1bede25db46293fbe70c8ff475d34f8 >+SIZE (xpi/firefox-i18n-60.0b12/cs.xpi) = 529821 >+SHA256 (xpi/firefox-i18n-60.0b12/cy.xpi) = e9a05276fd4f11bc9e07d1af85cfe98ad1d1ed98398182cae6a67de6e2689919 >+SIZE (xpi/firefox-i18n-60.0b12/cy.xpi) = 514701 >+SHA256 (xpi/firefox-i18n-60.0b12/da.xpi) = c545cf0d38330af607cdd949ae704e73ce2a009187264040f2f9cf912d14fca3 >+SIZE (xpi/firefox-i18n-60.0b12/da.xpi) = 501549 >+SHA256 (xpi/firefox-i18n-60.0b12/de.xpi) = 9881f5339770218e602dc2b5a9e6d6b823f733d71067f7048893eff7baedf7e0 >+SIZE (xpi/firefox-i18n-60.0b12/de.xpi) = 521919 >+SHA256 (xpi/firefox-i18n-60.0b12/dsb.xpi) = e2a098c2f96c73198a9ef2313a1f29d127850f85edc453b78ef394f1511c57ae >+SIZE (xpi/firefox-i18n-60.0b12/dsb.xpi) = 537772 >+SHA256 (xpi/firefox-i18n-60.0b12/el.xpi) = bc4b1a51c4f18477468613250d57772fc1f0ee2e04bd7b64c955923a7f54e586 >+SIZE (xpi/firefox-i18n-60.0b12/el.xpi) = 590682 >+SHA256 (xpi/firefox-i18n-60.0b12/en-GB.xpi) = 0ffae8109ad0b10fb47ce4cebcf781f59af0c713ead0757399015ba931168946 >+SIZE (xpi/firefox-i18n-60.0b12/en-GB.xpi) = 490139 >+SHA256 (xpi/firefox-i18n-60.0b12/en-US.xpi) = 111352725063d9216e56e8712b3844e2faa94f99dc761dbd09dd9f968a81245f >+SIZE (xpi/firefox-i18n-60.0b12/en-US.xpi) = 472098 >+SHA256 (xpi/firefox-i18n-60.0b12/en-ZA.xpi) = 6778029d6e58f6a946fc8142bec8774846e80107b064c066b9356c4ff7214694 >+SIZE (xpi/firefox-i18n-60.0b12/en-ZA.xpi) = 473354 >+SHA256 (xpi/firefox-i18n-60.0b12/eo.xpi) = 822d61d7fa96599f120b75ee8fabd7c271e002191a5743a6408005728f6252de >+SIZE (xpi/firefox-i18n-60.0b12/eo.xpi) = 507600 >+SHA256 (xpi/firefox-i18n-60.0b12/es-AR.xpi) = 7bc9ea632b7ac33a8667d422d26d3ad136977339dc91767ebe882cd5c7e1e36c >+SIZE (xpi/firefox-i18n-60.0b12/es-AR.xpi) = 522639 >+SHA256 (xpi/firefox-i18n-60.0b12/es-CL.xpi) = f914054524387113170d95d21ba0427757deec24ea45451d948d1cdc1735d759 >+SIZE (xpi/firefox-i18n-60.0b12/es-CL.xpi) = 525288 >+SHA256 (xpi/firefox-i18n-60.0b12/es-ES.xpi) = 5cc277231eb85d0983441fe3b4c7796613ca5727d64e9a9a1d667a8c71fbb70d >+SIZE (xpi/firefox-i18n-60.0b12/es-ES.xpi) = 455094 >+SHA256 (xpi/firefox-i18n-60.0b12/es-MX.xpi) = 4cca2bb21c8dea5959f6becfe712ba5f133b9e6e7d0ac8cf136637d82e58c855 >+SIZE (xpi/firefox-i18n-60.0b12/es-MX.xpi) = 523253 >+SHA256 (xpi/firefox-i18n-60.0b12/et.xpi) = bed41d6bca2b59050e6ccb4e6e8da62cf6d2d2449f23d3487c2ffcaa4fee75ff >+SIZE (xpi/firefox-i18n-60.0b12/et.xpi) = 503401 >+SHA256 (xpi/firefox-i18n-60.0b12/eu.xpi) = 00f40a6a8cbde8c4782e5ef8e8a169de2331261279eb7f9a69f31a84d5a68f27 >+SIZE (xpi/firefox-i18n-60.0b12/eu.xpi) = 510093 >+SHA256 (xpi/firefox-i18n-60.0b12/fa.xpi) = ddabcbee074bbd5c079ee3194339982c5eb5dc5acf99205cda168856fbf63b7f >+SIZE (xpi/firefox-i18n-60.0b12/fa.xpi) = 564727 >+SHA256 (xpi/firefox-i18n-60.0b12/ff.xpi) = 524fd91c007ca5eb5822765a0e78b78201715c2106a2f02f278f5c5ce2aeaa41 >+SIZE (xpi/firefox-i18n-60.0b12/ff.xpi) = 510722 >+SHA256 (xpi/firefox-i18n-60.0b12/fi.xpi) = d219b17ea1efe8183755f980ce38e2d8e4c121b49ce6d29e2c1a85f07c8fd1e9 >+SIZE (xpi/firefox-i18n-60.0b12/fi.xpi) = 503907 >+SHA256 (xpi/firefox-i18n-60.0b12/fr.xpi) = b2ab253dc22abc6e0395e1b58b0ac829a29280a887fc8744bf5c2b9816ca5f7e >+SIZE (xpi/firefox-i18n-60.0b12/fr.xpi) = 532669 >+SHA256 (xpi/firefox-i18n-60.0b12/fy-NL.xpi) = 9c2517677f5a8a6a80aa86f1eb88c6d64125e972961c5674907d72aabc4b0e22 >+SIZE (xpi/firefox-i18n-60.0b12/fy-NL.xpi) = 522496 >+SHA256 (xpi/firefox-i18n-60.0b12/ga-IE.xpi) = f65cb9277665b84f56fc48fc2ca9855e37872e4b0212ffb570dcb5b1470dda27 >+SIZE (xpi/firefox-i18n-60.0b12/ga-IE.xpi) = 525360 >+SHA256 (xpi/firefox-i18n-60.0b12/gd.xpi) = 5c6804b80adca0b2ce2090931a61420ff64d78d1931a8651866ac08ce3047c7c >+SIZE (xpi/firefox-i18n-60.0b12/gd.xpi) = 519251 >+SHA256 (xpi/firefox-i18n-60.0b12/gl.xpi) = b7f7e696a68592ccaf0729a343d9dc6ce918187e18aca1e56f980c50a21e1b51 >+SIZE (xpi/firefox-i18n-60.0b12/gl.xpi) = 493683 >+SHA256 (xpi/firefox-i18n-60.0b12/gn.xpi) = 59e05d58df7315ea3706f826894b7fbf36a66e9af6b6e1b1d6cba96620a30998 >+SIZE (xpi/firefox-i18n-60.0b12/gn.xpi) = 531219 >+SHA256 (xpi/firefox-i18n-60.0b12/gu-IN.xpi) = 3e1c615e20902070aa0e96d0b5ce2d062c7e34292d6f07eda39ae46b6351d801 >+SIZE (xpi/firefox-i18n-60.0b12/gu-IN.xpi) = 585580 >+SHA256 (xpi/firefox-i18n-60.0b12/he.xpi) = debd5ddf0d3772c04475d2883b4383494c3503d42bdb6ae4506c6f3e82c055e2 >+SIZE (xpi/firefox-i18n-60.0b12/he.xpi) = 530855 >+SHA256 (xpi/firefox-i18n-60.0b12/hi-IN.xpi) = 7c0825d7fce0ce4f0592c8915a8592b7245ab9eadd7078646d56ab2ac9aa95f6 >+SIZE (xpi/firefox-i18n-60.0b12/hi-IN.xpi) = 586673 >+SHA256 (xpi/firefox-i18n-60.0b12/hr.xpi) = b8332af2debb06b9caa3bc2134e09b4e02ad71845fc82eca4968c33ba3dbc333 >+SIZE (xpi/firefox-i18n-60.0b12/hr.xpi) = 514377 >+SHA256 (xpi/firefox-i18n-60.0b12/hsb.xpi) = cb1ee0411910204934078575422836a1c70e7486aab4f7fa1afa2afe567e968e >+SIZE (xpi/firefox-i18n-60.0b12/hsb.xpi) = 535351 >+SHA256 (xpi/firefox-i18n-60.0b12/hu.xpi) = 557c21926e12f53aa596513f21a3503f5e066274225eb28e25eca5831b87e24f >+SIZE (xpi/firefox-i18n-60.0b12/hu.xpi) = 536407 >+SHA256 (xpi/firefox-i18n-60.0b12/hy-AM.xpi) = d8691c31c8de33caac328162508f6c60f340c43f71d0ebe2b384f762a3f265e9 >+SIZE (xpi/firefox-i18n-60.0b12/hy-AM.xpi) = 567575 >+SHA256 (xpi/firefox-i18n-60.0b12/ia.xpi) = 8d6f56763adccb060c7cfc2d7c54ba46777e96bc74f7e9faed549c2730a8893e >+SIZE (xpi/firefox-i18n-60.0b12/ia.xpi) = 508828 >+SHA256 (xpi/firefox-i18n-60.0b12/id.xpi) = 0cdf253f87e34a98fe5dde08fa65d6a4c4ce48c325d919a06fa2de3e193601f0 >+SIZE (xpi/firefox-i18n-60.0b12/id.xpi) = 496436 >+SHA256 (xpi/firefox-i18n-60.0b12/is.xpi) = 499220c637d51988980c26436f760683e3e41f072518d4a9332ed5060e0448fc >+SIZE (xpi/firefox-i18n-60.0b12/is.xpi) = 510788 >+SHA256 (xpi/firefox-i18n-60.0b12/it.xpi) = b1d52bc5ab6263f085419d29e2e0484cb7233d9186ac3bd62728b92159a7b60d >+SIZE (xpi/firefox-i18n-60.0b12/it.xpi) = 396703 >+SHA256 (xpi/firefox-i18n-60.0b12/ja.xpi) = bcc67ce6be31a8beac9e3c17d76d5af2b2366166019e0902477a2550d189f5f7 >+SIZE (xpi/firefox-i18n-60.0b12/ja.xpi) = 566344 >+SHA256 (xpi/firefox-i18n-60.0b12/ka.xpi) = ca236d3d28f72f5f4bb12952d4c0353b990450454157a474101ae583b264bc94 >+SIZE (xpi/firefox-i18n-60.0b12/ka.xpi) = 554854 >+SHA256 (xpi/firefox-i18n-60.0b12/kab.xpi) = da58b9b8c1fe94509051d792fff971dd4cbe884726f33e627edd72155156481e >+SIZE (xpi/firefox-i18n-60.0b12/kab.xpi) = 518712 >+SHA256 (xpi/firefox-i18n-60.0b12/kk.xpi) = adc45ac369d5c54f65b64b53385762f43cbe622577d90a3375182ada65236af0 >+SIZE (xpi/firefox-i18n-60.0b12/kk.xpi) = 578898 >+SHA256 (xpi/firefox-i18n-60.0b12/km.xpi) = e32d79412b83983ebefa4f39ede5350d7b0eb17df6c1eb073d1ac81878f5598b >+SIZE (xpi/firefox-i18n-60.0b12/km.xpi) = 581504 >+SHA256 (xpi/firefox-i18n-60.0b12/kn.xpi) = 89c3cffad23a4800fe1b1b2ad3508563838df9e964c1f575d504090e66bca914 >+SIZE (xpi/firefox-i18n-60.0b12/kn.xpi) = 584186 >+SHA256 (xpi/firefox-i18n-60.0b12/ko.xpi) = 635be553aa465ac88ffaa41e77b560d335047cb74ef711dc392f31571321572b >+SIZE (xpi/firefox-i18n-60.0b12/ko.xpi) = 543864 >+SHA256 (xpi/firefox-i18n-60.0b12/lij.xpi) = 099947a8eb4119e278eba867292ca1830625be2d6c6f1b5304ff7d500588aa14 >+SIZE (xpi/firefox-i18n-60.0b12/lij.xpi) = 511281 >+SHA256 (xpi/firefox-i18n-60.0b12/lt.xpi) = e09da551a408d22e957bfb7d57d1be94c632e96a1f54d20f76f621a7e832434f >+SIZE (xpi/firefox-i18n-60.0b12/lt.xpi) = 532412 >+SHA256 (xpi/firefox-i18n-60.0b12/lv.xpi) = fa1bd71110cae2b9a8a9bc2078f3d99511ca8863c663352d5d8215246c58476f >+SIZE (xpi/firefox-i18n-60.0b12/lv.xpi) = 524804 >+SHA256 (xpi/firefox-i18n-60.0b12/mai.xpi) = ffe4737322485104dbdb88f00afcc54dece9ebda91906f95e72b3b63e1c5e132 >+SIZE (xpi/firefox-i18n-60.0b12/mai.xpi) = 548124 >+SHA256 (xpi/firefox-i18n-60.0b12/mk.xpi) = c04a74839a6452ecfc2e8abd9f261298fadcd2c77921e2833c565c1d8251821c >+SIZE (xpi/firefox-i18n-60.0b12/mk.xpi) = 512585 >+SHA256 (xpi/firefox-i18n-60.0b12/ml.xpi) = e2a3169bde66d9c8939e48feaacc34aa4cce75d2a4e6581a19680ba5df107dc7 >+SIZE (xpi/firefox-i18n-60.0b12/ml.xpi) = 597317 >+SHA256 (xpi/firefox-i18n-60.0b12/mr.xpi) = d4f543c75380d7353677aae21118e075d9315c93a849488c851d85ec8c98a504 >+SIZE (xpi/firefox-i18n-60.0b12/mr.xpi) = 577510 >+SHA256 (xpi/firefox-i18n-60.0b12/ms.xpi) = cb5285902674663453253bc9fb8f4dccc43b96d9716b13b5a736913b6dfc5b6d >+SIZE (xpi/firefox-i18n-60.0b12/ms.xpi) = 507829 >+SHA256 (xpi/firefox-i18n-60.0b12/my.xpi) = 8512a220bd0ae5bad608b27a31720077be38f0116249789311aef513a6edd460 >+SIZE (xpi/firefox-i18n-60.0b12/my.xpi) = 568745 >+SHA256 (xpi/firefox-i18n-60.0b12/nb-NO.xpi) = 81174130339708128f8bfc0ecd211bd56a82ba2dcae572dc4a9804346e44a096 >+SIZE (xpi/firefox-i18n-60.0b12/nb-NO.xpi) = 507873 >+SHA256 (xpi/firefox-i18n-60.0b12/ne-NP.xpi) = c0414e8f733f06a8ee7a228258cdcfbf977d8169c73ba18f88c4faeace381c87 >+SIZE (xpi/firefox-i18n-60.0b12/ne-NP.xpi) = 553650 >+SHA256 (xpi/firefox-i18n-60.0b12/nl.xpi) = 68ea51e2190a47a4a7c6b7d410579d03cc470325949a5dea5211fc07e15d7acf >+SIZE (xpi/firefox-i18n-60.0b12/nl.xpi) = 514758 >+SHA256 (xpi/firefox-i18n-60.0b12/nn-NO.xpi) = 4c0987647c2a07022611607b09934648b7482a0aa396dc74256633ee5b0723d6 >+SIZE (xpi/firefox-i18n-60.0b12/nn-NO.xpi) = 508785 >+SHA256 (xpi/firefox-i18n-60.0b12/oc.xpi) = 947ce552e7e1272e4aeb6780016fb73446dd009f250e08b9790864454856233f >+SIZE (xpi/firefox-i18n-60.0b12/oc.xpi) = 524072 >+SHA256 (xpi/firefox-i18n-60.0b12/or.xpi) = 7b0765e412e1175f76e958a676f50c6d1d8ab87caa90363d005ee502034ff849 >+SIZE (xpi/firefox-i18n-60.0b12/or.xpi) = 539631 >+SHA256 (xpi/firefox-i18n-60.0b12/pa-IN.xpi) = bbd44be2d95a2bd076047e2fb32f1c0f6c7d858190f3d29f89371ce700b9c186 >+SIZE (xpi/firefox-i18n-60.0b12/pa-IN.xpi) = 551189 >+SHA256 (xpi/firefox-i18n-60.0b12/pl.xpi) = 469081ef835650bd250474ff30551d60faada08f3f7ebb7ff2a988fea6adda67 >+SIZE (xpi/firefox-i18n-60.0b12/pl.xpi) = 414843 >+SHA256 (xpi/firefox-i18n-60.0b12/pt-BR.xpi) = 2057e5e86ad7ed50b8375d9ad5b4ce410aa5d2502b348b8dd1bc2f0ebc952115 >+SIZE (xpi/firefox-i18n-60.0b12/pt-BR.xpi) = 513155 >+SHA256 (xpi/firefox-i18n-60.0b12/pt-PT.xpi) = aa69dd505639b8b31e9b7608cb5a57e271c67aa2b6fcb93300af6f41e4d70b36 >+SIZE (xpi/firefox-i18n-60.0b12/pt-PT.xpi) = 517459 >+SHA256 (xpi/firefox-i18n-60.0b12/rm.xpi) = 2debd11a4f49b95bef8f6d876a3fc68fef6a86faaf9fa91afe8623bd57d255a0 >+SIZE (xpi/firefox-i18n-60.0b12/rm.xpi) = 504467 >+SHA256 (xpi/firefox-i18n-60.0b12/ro.xpi) = 46fe276aed3cee517d385d0dedcd55afecc06632a5d133a05dd217116db94e5e >+SIZE (xpi/firefox-i18n-60.0b12/ro.xpi) = 511962 >+SHA256 (xpi/firefox-i18n-60.0b12/ru.xpi) = cc5796d905b7eb58f0620421b336e1b07a2073af0e9fbcad285e7ad43d9c9b8c >+SIZE (xpi/firefox-i18n-60.0b12/ru.xpi) = 588199 >+SHA256 (xpi/firefox-i18n-60.0b12/si.xpi) = a0387dc2d8a670e20fc4e87b8f64864077c0afffea066a82f6bd8785a5e81c65 >+SIZE (xpi/firefox-i18n-60.0b12/si.xpi) = 544117 >+SHA256 (xpi/firefox-i18n-60.0b12/sk.xpi) = 080e3c86e56f12fde3f578d901e5f8d94fdaedd1eb239b3bec080242b2ce2fbd >+SIZE (xpi/firefox-i18n-60.0b12/sk.xpi) = 537940 >+SHA256 (xpi/firefox-i18n-60.0b12/sl.xpi) = 0cfd44f86deeb85665d21688076cc9b12081900e607a486b82b68e0355cc0868 >+SIZE (xpi/firefox-i18n-60.0b12/sl.xpi) = 514729 >+SHA256 (xpi/firefox-i18n-60.0b12/son.xpi) = 36f54dfc8405a2a0a4d271d98055b92fccf5ac3e085c47d09128be47c1aa5d59 >+SIZE (xpi/firefox-i18n-60.0b12/son.xpi) = 496054 >+SHA256 (xpi/firefox-i18n-60.0b12/sq.xpi) = 4abbe0c817c473cc32e8ea84182e11ea215276aee355d650c344f3496b2acd79 >+SIZE (xpi/firefox-i18n-60.0b12/sq.xpi) = 519631 >+SHA256 (xpi/firefox-i18n-60.0b12/sr.xpi) = 2eb45d422246b8b8f02eba19baddb90d7cfc596933f5ada048a6fc260ac49678 >+SIZE (xpi/firefox-i18n-60.0b12/sr.xpi) = 546784 >+SHA256 (xpi/firefox-i18n-60.0b12/sv-SE.xpi) = 4fd0d7b68a5956f6bb4c12d8b45605ba5e4ac9ea3467993e32ee07191544c353 >+SIZE (xpi/firefox-i18n-60.0b12/sv-SE.xpi) = 515846 >+SHA256 (xpi/firefox-i18n-60.0b12/ta.xpi) = 9b93d35afc8126cf2434b2bb72a92e5ff1f1855b6fe4d019dddf74fe27c4b9e3 >+SIZE (xpi/firefox-i18n-60.0b12/ta.xpi) = 572413 >+SHA256 (xpi/firefox-i18n-60.0b12/te.xpi) = c297db02cf724d0f1500a8a59273878f47abab713fad86d3359e8609dc2e0052 >+SIZE (xpi/firefox-i18n-60.0b12/te.xpi) = 588324 >+SHA256 (xpi/firefox-i18n-60.0b12/th.xpi) = f5d19a073ee824805d22015b23be82cefe64e81f556e61e2676b742b37a4e901 >+SIZE (xpi/firefox-i18n-60.0b12/th.xpi) = 559792 >+SHA256 (xpi/firefox-i18n-60.0b12/tr.xpi) = 6000688caf19f8744107b419cb6436f1a59bdea873abb5cfb3a4f31c8f8fb1be >+SIZE (xpi/firefox-i18n-60.0b12/tr.xpi) = 523888 >+SHA256 (xpi/firefox-i18n-60.0b12/uk.xpi) = 143d58d29e46588b409cbf4623fa5beda8b691a6b77b6eddbdafe47fc0a443aa >+SIZE (xpi/firefox-i18n-60.0b12/uk.xpi) = 578924 >+SHA256 (xpi/firefox-i18n-60.0b12/ur.xpi) = 7a2ef4f02b1720938962226e6c267b2902f6413b5ec4cd378c2aa96bde6a413d >+SIZE (xpi/firefox-i18n-60.0b12/ur.xpi) = 561995 >+SHA256 (xpi/firefox-i18n-60.0b12/uz.xpi) = f5e2f25734862433b8cfd2aca802a237efd80b9490a436371146d09cf27f7be1 >+SIZE (xpi/firefox-i18n-60.0b12/uz.xpi) = 508608 >+SHA256 (xpi/firefox-i18n-60.0b12/vi.xpi) = ffc8fd7f604bcfce12aa945dc66ef15e944b27a2738eb1b0eded84aada3d7f1e >+SIZE (xpi/firefox-i18n-60.0b12/vi.xpi) = 526682 >+SHA256 (xpi/firefox-i18n-60.0b12/xh.xpi) = 908a459c6100afbeb414fa4a14809474837274a888c357ad1afe6503e981ed31 >+SIZE (xpi/firefox-i18n-60.0b12/xh.xpi) = 510246 >+SHA256 (xpi/firefox-i18n-60.0b12/zh-CN.xpi) = dada2525fb8c325596eedc032ded65f4abc689fb0f0b0eb2d0406c4fa0221933 >+SIZE (xpi/firefox-i18n-60.0b12/zh-CN.xpi) = 541637 >+SHA256 (xpi/firefox-i18n-60.0b12/zh-TW.xpi) = 21476675d26ade3846c2329a14c9ab525c16c1cdbc8269a704f0676c2682b0f1 >+SIZE (xpi/firefox-i18n-60.0b12/zh-TW.xpi) = 539937 >diff --git a/www/firefox/Makefile b/www/firefox/Makefile >index 5feb16109a16..997093966811 100644 >--- a/www/firefox/Makefile >+++ b/www/firefox/Makefile >@@ -2,28 +2,27 @@ > # $FreeBSD$ > > PORTNAME= firefox >-DISTVERSION= 59.0.2 >-PORTREVISION= 4 >+DISTVERSION= 60.0b12 > PORTEPOCH= 1 > CATEGORIES= www ipv6 >-MASTER_SITES= https://hg.mozilla.org/releases/mozilla-release/archive/ >-DISTNAME= ${MASTER_SITES:M*hg*:S,/archive/,,:T}-239e434d6d2b8e1e2b697c3416d1e96d48fe98e5 >-DISTFILES= ${DISTNAME:C/.*-//}${EXTRACT_SUFX} >-DIST_SUBDIR= firefox >+MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ >+ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source >+DISTNAME= ${PORTNAME}-${PORTVERSION:R} >+DISTFILES= ${DISTNAME}${PORTVERSION:E}.source${EXTRACT_SUFX} > > MAINTAINER= gecko@FreeBSD.org > COMMENT= Web browser based on the browser portion of Mozilla > >-BUILD_DEPENDS= nspr>=4.18:devel/nspr \ >- nss>=3.35:security/nss \ >+BUILD_DEPENDS= nspr>=4.19:devel/nspr \ >+ nss>=3.36.1:security/nss \ > icu>=59.1,1:devel/icu \ > libevent>=2.1.8:devel/libevent \ >- harfbuzz>=1.7.4:print/harfbuzz \ >- graphite2>=1.3.10:graphics/graphite2 \ >+ harfbuzz>=1.7.6:print/harfbuzz \ >+ graphite2>=1.3.11:graphics/graphite2 \ > png>=1.6.34:graphics/png \ >- libvorbis>=1.3.5,3:audio/libvorbis \ >+ libvorbis>=1.3.6,3:audio/libvorbis \ > libvpx>=1.5.0:multimedia/libvpx \ >- sqlite3>=3.21.0:databases/sqlite3 \ >+ sqlite3>=3.22.0:databases/sqlite3 \ > ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ > v4l_compat>0:multimedia/v4l_compat \ > autoconf-2.13:devel/autoconf213 \ >@@ -31,15 +30,13 @@ BUILD_DEPENDS= nspr>=4.18:devel/nspr \ > zip:archivers/zip > # soundtouch>=1.9.0:audio/soundtouch \ > >-LIB_DEPENDS= libv4l2.so:multimedia/libv4l >- > USE_GECKO= gecko > CONFLICTS_INSTALL= firefox-esr > MOZ_PKGCONFIG_FILES= # empty > USE_MOZILLA= -cairo -soundtouch > > USE_GL= gl >-USES= tar:bz2 >+USES= tar:xz > > FIREFOX_ICON= ${MOZILLA}.png > FIREFOX_ICON_SRC= ${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png >diff --git a/www/firefox/distinfo b/www/firefox/distinfo >index 4a8d566f65cb..abbc74eb1674 100644 >--- a/www/firefox/distinfo >+++ b/www/firefox/distinfo >@@ -1,3 +1,3 @@ >-TIMESTAMP = 1521751601 >-SHA256 (firefox/239e434d6d2b8e1e2b697c3416d1e96d48fe98e5.tar.bz2) = 5b7382ac0697e2abce5e2873878069a47fff5f3a5eeec4c3a0186598a1592833 >-SIZE (firefox/239e434d6d2b8e1e2b697c3416d1e96d48fe98e5.tar.bz2) = 304965099 >+TIMESTAMP = 1523564700 >+SHA256 (firefox-60.0b12.source.tar.xz) = 296c80075131b4076941fcbdd74b36bffd94ba9206d5950b4aa03ba3ac86810e >+SIZE (firefox-60.0b12.source.tar.xz) = 270813524 >diff --git a/www/firefox/files/patch-bug1021761 b/www/firefox/files/patch-bug1021761 >index f0764a8c4b22..245f4fd8695a 100644 >--- a/www/firefox/files/patch-bug1021761 >+++ b/www/firefox/files/patch-bug1021761 >@@ -1,150 +1,28 @@ >-diff --git build/moz.configure/old.configure build/moz.configure/old.configure >-index cd6c37cf4c7c..e98dc7973a6a 100644 >---- build/moz.configure/old.configure >-+++ build/moz.configure/old.configure >-@@ -275,6 +275,7 @@ def old_configure_options(*options): >- '--with-nspr-prefix', >- '--with-nss-exec-prefix', >- '--with-nss-prefix', >-+ '--with-oss', >- '--with-pthreads', >- '--with-qemu-exe', >- '--with-sixgill', >-diff --git old-configure.in old-configure.in >-index dff46614635e..dbbfdb76ab78 100644 >---- old-configure.in >-+++ old-configure.in >-@@ -3128,6 +3128,67 @@ AC_DEFINE(MOZ_WEBM_ENCODER) >- AC_SUBST(MOZ_WEBM_ENCODER) >- >- dnl ================================== >-+dnl = Check OSS availability >-+dnl ================================== >-+ >-+dnl If using Linux, Solaris or BSDs, ensure that OSS is available >-+case "$OS_TARGET" in >-+Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) >-+ MOZ_OSS=1 >-+ ;; >-+esac >-+ >-+MOZ_ARG_WITH_STRING(oss, >-+[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], >-+ OSSPREFIX=$withval) >-+ >-+if test -n "$OSSPREFIX"; then >-+ if test "$OSSPREFIX" != "no"; then >-+ MOZ_OSS=1 >-+ else >-+ MOZ_OSS= >-+ fi >-+fi >-+ >-+_SAVE_CFLAGS=$CFLAGS >-+_SAVE_LIBS=$LIBS >-+if test -n "$MOZ_OSS"; then >-+ dnl Prefer 4Front implementation >-+ AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) >-+ if test "$OSSPREFIX" != "yes"; then >-+ oss_conf=${OSSPREFIX%/usr}/etc/oss.conf >-+ if test -f "$oss_conf"; then >-+ . "$oss_conf" >-+ else >-+ OSSLIBDIR=$OSSPREFIX/lib/oss >-+ fi >-+ if test -d "$OSSLIBDIR"; then >-+ MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" >-+ fi >-+ fi >-+ AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) >-+ >-+ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" >-+ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) >-+ >-+ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ >-+ "$ac_cv_header_soundcard_h" != "yes"; then >-+ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --without-oss.]) >-+ fi >-+ >-+ dnl Assume NetBSD implementation over SunAudio >-+ AC_CHECK_LIB(ossaudio, _oss_ioctl, >-+ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") >-+ MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) >-+fi >-+CFLAGS=$_SAVE_CFLAGS >-+LIBS=$_SAVE_LIBS >-+ >-+AC_SUBST(MOZ_OSS) >-+AC_SUBST_LIST(MOZ_OSS_CFLAGS) >-+AC_SUBST_LIST(MOZ_OSS_LIBS) >-+ >-+dnl ================================== >- dnl = Check alsa availability on Linux >- dnl ================================== >- >-diff --git dom/media/CubebUtils.cpp dom/media/CubebUtils.cpp >-index e10e07e06ade..1fd561bea113 100644 >---- dom/media/CubebUtils.cpp >-+++ dom/media/CubebUtils.cpp >-@@ -71,7 +71,8 @@ const char* AUDIOSTREAM_BACKEND_ID_STR[] = { >- "sndio", >- "opensl", >- "audiotrack", >-- "kai" >-+ "kai", >-+ "oss", >- }; >- /* Index for failures to create an audio stream the first time. */ >- const int CUBEB_BACKEND_INIT_FAILURE_FIRST = >-diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS >-index 0fde65baad34..f8663c43b475 100644 >---- media/libcubeb/AUTHORS >-+++ media/libcubeb/AUTHORS >-@@ -4,6 +4,7 @@ Michael Wu <mwu@mozilla.com> >- Paul Adenot <paul@paul.cx> >- David Richards <drichards@mozilla.com> >- Sebastien Alaiwan <sebastien.alaiwan@gmail.com> >-+Evgeniy Vodolazskiy <waterlaz@gmail.com> >- KO Myung-Hun <komh@chollian.net> >- Haakon Sporsheim <haakon.sporsheim@telenordigital.com> >- Alex Chronopoulos <achronop@gmail.com> >-diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c >-index 57bcb4c13652..68be024f4a68 100644 >---- media/libcubeb/src/cubeb.c >-+++ media/libcubeb/src/cubeb.c >-@@ -54,6 +54,9 @@ int audiotrack_init(cubeb ** context, char const * context_name); >- #if defined(USE_KAI) >- int kai_init(cubeb ** context, char const * context_name); >- #endif >-+#if defined(USE_OSS) >-+int oss_init(cubeb ** context, char const * context_name); >-+#endif >- >- static int >- validate_stream_params(cubeb_stream_params * input_stream_params, >-@@ -155,6 +158,10 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam >- #if defined(USE_KAI) >- init_oneshot = kai_init; >- #endif >-+ } else if (!strcmp(backend_name, "oss")) { >-+#if defined(USE_OSS) >-+ init_oneshot = oss_init; >-+#endif >- } else { >- /* Already set */ >- } >-@@ -196,6 +203,9 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam >- #if defined(USE_KAI) >- kai_init, >- #endif >-+#if defined(USE_OSS) >-+ oss_init, >-+#endif >- }; >- int i; >+commit f9bcf9c81c4a >+Author: Evgeniy Vodolazskiy <waterlaz@gmail.com> >+Date: Tue Sep 9 14:38:00 2014 -0700 >+ >+ Bug 1021761 - Make ALSA optional on Linux, allowing fallback to another backend. r=kinetik r=glandium >+--- >+ media/libcubeb/gtest/moz.build | 1 - >+ media/libcubeb/src/cubeb_alsa.c | 228 +++++++++++++++++++++++++++++----------- >+ toolkit/library/moz.build | 3 - >+ 3 files changed, 168 insertions(+), 64 deletions(-) >+ >+diff --git media/libcubeb/gtest/moz.build media/libcubeb/gtest/moz.build >+index 558130188c2e..0cf157d41903 100644 >+--- media/libcubeb/gtest/moz.build >++++ media/libcubeb/gtest/moz.build >+@@ -72,7 +72,6 @@ elif CONFIG['OS_TARGET'] == 'OpenBSD': >+ 'sndio', >+ ] >+ else: >+- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] >+ OS_LIBS += CONFIG['MOZ_PULSEAUDIO_LIBS'] > >+ if CONFIG['CC_TYPE'] in ('clang', 'gcc'): > diff --git media/libcubeb/src/cubeb_alsa.c media/libcubeb/src/cubeb_alsa.c >-index 05ad27fef53b..3ea78e994f59 100644 >+index bfd4d8f199d4..213c1eaa3d07 100644 > --- media/libcubeb/src/cubeb_alsa.c > +++ media/libcubeb/src/cubeb_alsa.c > @@ -12,6 +12,7 @@ >@@ -217,7 +95,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > }; > > enum stream_state { >-@@ -243,8 +292,8 @@ set_timeout(struct timeval * timeout, unsigned int ms) >+@@ -245,8 +294,8 @@ set_timeout(struct timeval * timeout, unsigned int ms) > static void > stream_buffer_decrement(cubeb_stream * stm, long count) > { >@@ -228,7 +106,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > stm->bufframes -= count; > } > >-@@ -276,9 +325,9 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -278,9 +327,9 @@ alsa_process_stream(cubeb_stream * stm) > /* Call _poll_descriptors_revents() even if we don't use it > to let underlying plugins clear null events. Otherwise poll() > may wake up again and again, producing unnecessary CPU usage. */ >@@ -240,7 +118,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > > /* Got null event? Bail and wait for another wakeup. */ > if (avail == 0) { >-@@ -301,7 +350,7 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -303,7 +352,7 @@ alsa_process_stream(cubeb_stream * stm) > // TODO: should it be marked as DRAINING? > } > >@@ -249,7 +127,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > > if (got < 0) { > avail = got; // the error handler below will recover us >-@@ -345,7 +394,7 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -347,7 +396,7 @@ alsa_process_stream(cubeb_stream * stm) > (!stm->other_stream || stm->other_stream->bufframes > 0)) { > long got = avail - stm->bufframes; > void * other_buffer = stm->other_stream ? stm->other_stream->buffer : NULL; >@@ -258,7 +136,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > > /* Correct read size to the other stream available frames */ > if (stm->other_stream && got > (snd_pcm_sframes_t) stm->other_stream->bufframes) { >-@@ -372,8 +421,8 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -374,8 +423,8 @@ alsa_process_stream(cubeb_stream * stm) > long drain_frames = avail - stm->bufframes; > double drain_time = (double) drain_frames / stm->params.rate; > >@@ -269,7 +147,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > stm->bufframes = avail; > > /* Mark as draining, unless we're waiting for capture */ >-@@ -400,7 +449,7 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -402,7 +451,7 @@ alsa_process_stream(cubeb_stream * stm) > } > } > >@@ -278,7 +156,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (wrote < 0) { > avail = wrote; // the error handler below will recover us > } else { >-@@ -413,13 +462,13 @@ alsa_process_stream(cubeb_stream * stm) >+@@ -415,13 +464,13 @@ alsa_process_stream(cubeb_stream * stm) > > /* Got some error? Let's try to recover the stream. */ > if (avail < 0) { >@@ -295,7 +173,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > } > } > >-@@ -535,26 +584,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) >+@@ -537,26 +586,26 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) > > slave_def = NULL; > >@@ -327,7 +205,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -563,7 +612,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) >+@@ -565,7 +614,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) > if (r < 0 || r > (int) sizeof(node_name)) { > break; > } >@@ -336,7 +214,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -572,7 +621,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) >+@@ -574,7 +623,7 @@ get_slave_pcm_node(snd_config_t * lconf, snd_config_t * root_pcm) > } while (0); > > if (slave_def) { >@@ -345,7 +223,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > } > > return NULL; >-@@ -595,22 +644,22 @@ init_local_config_with_workaround(char const * pcm_name) >+@@ -597,22 +646,22 @@ init_local_config_with_workaround(char const * pcm_name) > > lconf = NULL; > >@@ -372,7 +250,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -619,7 +668,7 @@ init_local_config_with_workaround(char const * pcm_name) >+@@ -621,7 +670,7 @@ init_local_config_with_workaround(char const * pcm_name) > if (r < 0 || r > (int) sizeof(node_name)) { > break; > } >@@ -381,7 +259,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -630,12 +679,12 @@ init_local_config_with_workaround(char const * pcm_name) >+@@ -632,12 +681,12 @@ init_local_config_with_workaround(char const * pcm_name) > } > > /* Fetch the PCM node's type, and bail out if it's not the PulseAudio plugin. */ >@@ -396,7 +274,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -646,18 +695,18 @@ init_local_config_with_workaround(char const * pcm_name) >+@@ -648,18 +697,18 @@ init_local_config_with_workaround(char const * pcm_name) > > /* Don't clobber an explicit existing handle_underrun value, set it only > if it doesn't already exist. */ >@@ -418,7 +296,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > break; > } >-@@ -665,7 +714,7 @@ init_local_config_with_workaround(char const * pcm_name) >+@@ -667,7 +716,7 @@ init_local_config_with_workaround(char const * pcm_name) > return lconf; > } while (0); > >@@ -427,7 +305,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > > return NULL; > } >-@@ -677,9 +726,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, char const * pcm_name, snd_pcm_stream_t s >+@@ -679,9 +728,9 @@ alsa_locked_pcm_open(snd_pcm_t ** pcm, char const * pcm_name, snd_pcm_stream_t s > > pthread_mutex_lock(&cubeb_alsa_mutex); > if (local_config) { >@@ -439,7 +317,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > } > pthread_mutex_unlock(&cubeb_alsa_mutex); > >-@@ -692,7 +741,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) >+@@ -694,7 +743,7 @@ alsa_locked_pcm_close(snd_pcm_t * pcm) > int r; > > pthread_mutex_lock(&cubeb_alsa_mutex); >@@ -448,7 +326,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > pthread_mutex_unlock(&cubeb_alsa_mutex); > > return r; >-@@ -755,12 +804,65 @@ alsa_init(cubeb ** context, char const * context_name) >+@@ -757,12 +806,65 @@ alsa_init(cubeb ** context, char const * context_name) > pthread_attr_t attr; > snd_pcm_t * dummy; > >@@ -515,7 +393,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > cubeb_alsa_error_handler_set = 1; > } > pthread_mutex_unlock(&cubeb_alsa_mutex); >-@@ -768,6 +870,8 @@ alsa_init(cubeb ** context, char const * context_name) >+@@ -770,6 +872,8 @@ alsa_init(cubeb ** context, char const * context_name) > ctx = calloc(1, sizeof(*ctx)); > assert(ctx); > >@@ -524,7 +402,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > ctx->ops = &alsa_ops; > > r = pthread_mutex_init(&ctx->mutex, NULL); >-@@ -817,7 +921,7 @@ alsa_init(cubeb ** context, char const * context_name) >+@@ -819,7 +923,7 @@ alsa_init(cubeb ** context, char const * context_name) > config fails with EINVAL, the PA PCM is too old for this workaround. */ > if (r == -EINVAL) { > pthread_mutex_lock(&cubeb_alsa_mutex); >@@ -533,7 +411,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > pthread_mutex_unlock(&cubeb_alsa_mutex); > ctx->local_config = NULL; > } else if (r >= 0) { >-@@ -857,9 +961,13 @@ alsa_destroy(cubeb * ctx) >+@@ -859,9 +963,13 @@ alsa_destroy(cubeb * ctx) > pthread_mutex_destroy(&ctx->mutex); > free(ctx->fds); > >@@ -548,7 +426,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > pthread_mutex_unlock(&cubeb_alsa_mutex); > } > >-@@ -939,7 +1047,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream >+@@ -948,7 +1056,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream > return CUBEB_ERROR; > } > >@@ -557,7 +435,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > assert(r == 0); > > latency_us = latency_frames * 1e6 / stm->params.rate; >-@@ -952,7 +1060,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream >+@@ -961,7 +1069,7 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream > latency_us = latency_us < min_latency ? min_latency: latency_us; > } > >@@ -566,7 +444,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > stm->params.channels, stm->params.rate, 1, > latency_us); > if (r < 0) { >-@@ -960,20 +1068,20 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream >+@@ -969,20 +1077,20 @@ alsa_stream_init_single(cubeb * ctx, cubeb_stream ** stream, char const * stream > return CUBEB_ERROR_INVALID_FORMAT; > } > >@@ -591,7 +469,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > assert((nfds_t) r == stm->nfds); > > if (alsa_register_stream(ctx, stm) != 0) { >-@@ -1048,7 +1156,7 @@ alsa_stream_destroy(cubeb_stream * stm) >+@@ -1054,7 +1162,7 @@ alsa_stream_destroy(cubeb_stream * stm) > pthread_mutex_lock(&stm->mutex); > if (stm->pcm) { > if (stm->state == DRAINING) { >@@ -600,7 +478,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > } > alsa_locked_pcm_close(stm->pcm); > stm->pcm = NULL; >-@@ -1094,12 +1202,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) >+@@ -1100,12 +1208,12 @@ alsa_get_max_channel_count(cubeb * ctx, uint32_t * max_channels) > > assert(stm); > >@@ -615,7 +493,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > if (r < 0) { > return CUBEB_ERROR; > } >-@@ -1120,34 +1228,34 @@ alsa_get_preferred_sample_rate(cubeb * ctx, uint32_t * rate) { >+@@ -1126,34 +1234,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. */ >@@ -658,7 +536,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > > return CUBEB_OK; > } >-@@ -1180,10 +1288,10 @@ alsa_stream_start(cubeb_stream * stm) >+@@ -1186,10 +1294,10 @@ alsa_stream_start(cubeb_stream * stm) > pthread_mutex_lock(&stm->mutex); > /* Capture pcm must be started after initial setup/recover */ > if (stm->stream_type == SND_PCM_STREAM_CAPTURE && >@@ -672,7 +550,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > gettimeofday(&stm->last_activity, NULL); > pthread_mutex_unlock(&stm->mutex); > >-@@ -1223,7 +1331,7 @@ alsa_stream_stop(cubeb_stream * stm) >+@@ -1229,7 +1337,7 @@ alsa_stream_stop(cubeb_stream * stm) > pthread_mutex_unlock(&ctx->mutex); > > pthread_mutex_lock(&stm->mutex); >@@ -681,7 +559,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > pthread_mutex_unlock(&stm->mutex); > > return CUBEB_OK; >-@@ -1239,8 +1347,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) >+@@ -1245,8 +1353,8 @@ alsa_stream_get_position(cubeb_stream * stm, uint64_t * position) > pthread_mutex_lock(&stm->mutex); > > delay = -1; >@@ -692,7 +570,7 @@ index 05ad27fef53b..3ea78e994f59 100644 > *position = stm->last_position; > pthread_mutex_unlock(&stm->mutex); > return CUBEB_OK; >-@@ -1265,7 +1373,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) >+@@ -1271,7 +1379,7 @@ alsa_stream_get_latency(cubeb_stream * stm, uint32_t * latency) > snd_pcm_sframes_t delay; > /* This function returns the delay in frames until a frame written using > snd_pcm_writei is sent to the DAC. The DAC delay should be < 1ms anyways. */ >@@ -701,12 +579,117 @@ index 05ad27fef53b..3ea78e994f59 100644 > return CUBEB_ERROR; > } > >+diff --git toolkit/library/moz.build toolkit/library/moz.build >+index b0df6b98b91f..e06592daa265 100644 >+--- toolkit/library/moz.build >++++ toolkit/library/moz.build >+@@ -247,9 +247,6 @@ if CONFIG['MOZ_SYSTEM_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['HAVE_CLOCK_MONOTONIC']: >+ OS_LIBS += CONFIG['REALTIME_LIBS'] >+ >+ >+commit 161bcd671217 >+Author: Evgeniy Vodolazskiy <waterlaz@gmail.com> >+Date: Wed Sep 3 10:47:00 2014 -0700 >+ >+ Bug 1021761 - Add OSS backend to libcubeb, default but last on Linux. r=kinetik r=glandium >+--- >+ build/moz.configure/old.configure | 1 + >+ dom/media/CubebUtils.cpp | 3 +- >+ media/libcubeb/AUTHORS | 1 + >+ media/libcubeb/src/cubeb.c | 10 + >+ media/libcubeb/src/cubeb_oss.c | 453 ++++++++++++++++++++++++++++++++++++++ >+ media/libcubeb/src/moz.build | 7 + >+ media/libcubeb/update.sh | 1 + >+ old-configure.in | 62 ++++++ >+ toolkit/library/moz.build | 3 + >+ 9 files changed, 540 insertions(+), 1 deletion(-) >+ >+diff --git build/moz.configure/old.configure build/moz.configure/old.configure >+index 17d0c5bf3420..3e6dbc16ca14 100644 >+--- build/moz.configure/old.configure >++++ build/moz.configure/old.configure >+@@ -262,6 +262,7 @@ def old_configure_options(*options): >+ '--with-nspr-prefix', >+ '--with-nss-exec-prefix', >+ '--with-nss-prefix', >++ '--with-oss', >+ '--with-pthreads', >+ '--with-qemu-exe', >+ '--with-sixgill', >+diff --git dom/media/CubebUtils.cpp dom/media/CubebUtils.cpp >+index 88063ed3a4d6..8613f86dbd16 100644 >+--- dom/media/CubebUtils.cpp >++++ dom/media/CubebUtils.cpp >+@@ -149,7 +149,8 @@ const char* AUDIOSTREAM_BACKEND_ID_STR[] = { >+ "sndio", >+ "opensl", >+ "audiotrack", >+- "kai" >++ "kai", >++ "oss", >+ }; >+ /* Index for failures to create an audio stream the first time. */ >+ const int CUBEB_BACKEND_INIT_FAILURE_FIRST = >+diff --git media/libcubeb/AUTHORS media/libcubeb/AUTHORS >+index f0f9595227f2..e7e7048190ab 100644 >+--- media/libcubeb/AUTHORS >++++ media/libcubeb/AUTHORS >+@@ -4,6 +4,7 @@ Michael Wu <mwu@mozilla.com> >+ Paul Adenot <paul@paul.cx> >+ David Richards <drichards@mozilla.com> >+ Sebastien Alaiwan <sebastien.alaiwan@gmail.com> >++Evgeniy Vodolazskiy <waterlaz@gmail.com> >+ KO Myung-Hun <komh@chollian.net> >+ Haakon Sporsheim <haakon.sporsheim@telenordigital.com> >+ Alex Chronopoulos <achronop@gmail.com> >+diff --git media/libcubeb/src/cubeb.c media/libcubeb/src/cubeb.c >+index bb35e0ce349f..e523d94108a3 100644 >+--- media/libcubeb/src/cubeb.c >++++ media/libcubeb/src/cubeb.c >+@@ -60,6 +60,9 @@ int audiotrack_init(cubeb ** context, char const * context_name); >+ #if defined(USE_KAI) >+ int kai_init(cubeb ** context, char const * context_name); >+ #endif >++#if defined(USE_OSS) >++int oss_init(cubeb ** context, char const * context_name); >++#endif >+ >+ static int >+ validate_stream_params(cubeb_stream_params * input_stream_params, >+@@ -159,6 +162,10 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam >+ } else if (!strcmp(backend_name, "kai")) { >+ #if defined(USE_KAI) >+ init_oneshot = kai_init; >++#endif >++ } else if (!strcmp(backend_name, "oss")) { >++#if defined(USE_OSS) >++ init_oneshot = oss_init; >+ #endif >+ } else { >+ /* Already set */ >+@@ -203,6 +210,9 @@ cubeb_init(cubeb ** context, char const * context_name, char const * backend_nam >+ #endif >+ #if defined(USE_KAI) >+ kai_init, >++#endif >++#if defined(USE_OSS) >++ oss_init, >+ #endif >+ }; >+ int i; > diff --git media/libcubeb/src/cubeb_oss.c media/libcubeb/src/cubeb_oss.c > new file mode 100644 >-index 000000000000..7b0b4f37dbe4 >+index 000000000000..7d96168b9ea6 > --- /dev/null > +++ media/libcubeb/src/cubeb_oss.c >-@@ -0,0 +1,445 @@ >+@@ -0,0 +1,454 @@ > +/* > + * Copyright © 2014 Mozilla Foundation > + * >@@ -743,11 +726,13 @@ index 000000000000..7b0b4f37dbe4 > +}; > + > +struct cubeb_stream { >++ /* Note: Must match cubeb_stream layout in cubeb.c. */ > + cubeb * context; >++ void * user_ptr; >++ /**/ > + > + cubeb_data_callback data_callback; > + cubeb_state_callback state_callback; >-+ void * user_ptr; > + float volume; > + float panning; > + >@@ -976,6 +961,11 @@ index 000000000000..7b0b4f37dbe4 > + return CUBEB_ERROR_DEVICE_UNAVAILABLE; > + } > + >++ if ((input_stream_params && input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) || >++ (output_stream_params && output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK)) { >++ return CUBEB_ERROR_NOT_SUPPORTED; >++ } >++ > + if ((stream->fd = open(CUBEB_OSS_DEFAULT_OUTPUT, O_WRONLY)) == -1) { > + free(stream); > + return CUBEB_ERROR; >@@ -1137,12 +1127,14 @@ index 000000000000..7b0b4f37dbe4 > + .get_min_latency = oss_get_min_latency, > + .get_preferred_sample_rate = oss_get_preferred_sample_rate, > + .get_preferred_channel_layout = NULL, >-+ .destroy = oss_destroy, > + .enumerate_devices = NULL, >++ .device_collection_destroy = NULL, >++ .destroy = oss_destroy, > + .stream_init = oss_stream_init, > + .stream_destroy = oss_stream_destroy, > + .stream_start = oss_stream_start, > + .stream_stop = oss_stream_stop, >++ .stream_reset_default_device = NULL, > + .stream_get_position = oss_stream_get_position, > + .stream_get_latency = oss_stream_get_latency, > + .stream_set_volume = oss_stream_set_volume, >@@ -1153,10 +1145,10 @@ index 000000000000..7b0b4f37dbe4 > + .register_device_collection_changed = NULL > +}; > diff --git media/libcubeb/src/moz.build media/libcubeb/src/moz.build >-index fc9c79198e30..57d039d5a0f2 100644 >+index e1fea30ca417..a5b1100f1014 100644 > --- media/libcubeb/src/moz.build > +++ media/libcubeb/src/moz.build >-@@ -20,6 +20,12 @@ if CONFIG['MOZ_ALSA']: >+@@ -23,6 +23,12 @@ if CONFIG['MOZ_ALSA']: > ] > DEFINES['USE_ALSA'] = True > >@@ -1169,28 +1161,16 @@ index fc9c79198e30..57d039d5a0f2 100644 > if CONFIG['MOZ_PULSEAUDIO'] or CONFIG['MOZ_JACK']: > SOURCES += [ > 'cubeb_resampler.cpp', >-@@ -92,6 +98,7 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk': >- '%' + '%s/system/media/wilhelm/include' % CONFIG['ANDROID_SOURCE'], >- ] >+@@ -88,6 +94,7 @@ if CONFIG['OS_TARGET'] == 'Android': >+ FINAL_LIBRARY = 'gkmedias' > >-+CFLAGS += CONFIG['MOZ_OSS_CFLAGS'] > CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] >++CFLAGS += CONFIG['MOZ_OSS_CFLAGS'] > CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] > >-diff --git media/libcubeb/gtest/moz.build media/libcubeb/gtest/moz.build >-index e99968648554..efbbbf779e11 100644 >---- media/libcubeb/gtest/moz.build >-+++ media/libcubeb/gtest/moz.build >-@@ -71,7 +71,6 @@ elif CONFIG['OS_TARGET'] == 'OpenBSD': >- 'sndio', >- ] >- else: >-- OS_LIBS += CONFIG['MOZ_ALSA_LIBS'] >- OS_LIBS += CONFIG['MOZ_PULSEAUDIO_LIBS'] >- >- if CONFIG['GNU_CXX']: >+ # We allow warnings for third-party code that can be updated from upstream. > diff --git media/libcubeb/update.sh media/libcubeb/update.sh >-index b139b8f497fd..d1f8a223c6d8 100755 >+index 0bb6345c9fa9..78a102dc47cb 100755 > --- media/libcubeb/update.sh > +++ media/libcubeb/update.sh > @@ -20,6 +20,7 @@ cp $1/src/cubeb_log.h src >@@ -1198,21 +1178,92 @@ index b139b8f497fd..d1f8a223c6d8 100755 > cp $1/src/cubeb_mixer.h src > cp $1/src/cubeb_opensl.c src > +cp $1/src/cubeb_oss.c src >- cp $1/src/cubeb_osx_run_loop.h src >- cp $1/src/cubeb_panner.cpp src >- cp $1/src/cubeb_panner.h src >+ cp $1/src/cubeb-jni.cpp src >+ cp $1/src/cubeb-jni.h src >+ cp $1/src/android/cubeb-output-latency.h src/android >+diff --git old-configure.in old-configure.in >+index 28e1a9e48d61..edacedcf6e5d 100644 >+--- old-configure.in >++++ old-configure.in >+@@ -2598,6 +2598,67 @@ MOZ_WEBM_ENCODER=1 >+ AC_DEFINE(MOZ_WEBM_ENCODER) >+ AC_SUBST(MOZ_WEBM_ENCODER) >+ >++dnl ================================== >++dnl = Check OSS availability >++dnl ================================== >++ >++dnl If using Linux, Solaris or BSDs, ensure that OSS is available >++case "$OS_TARGET" in >++Linux|SunOS|DragonFly|FreeBSD|NetBSD|GNU/kFreeBSD) >++ MOZ_OSS=1 >++ ;; >++esac >++ >++MOZ_ARG_WITH_STRING(oss, >++[ --with-oss[=PFX] Enable OpenSoundSystem support [installed at prefix PFX]], >++ OSSPREFIX=$withval) >++ >++if test -n "$OSSPREFIX"; then >++ if test "$OSSPREFIX" != "no"; then >++ MOZ_OSS=1 >++ else >++ MOZ_OSS= >++ fi >++fi >++ >++_SAVE_CFLAGS=$CFLAGS >++_SAVE_LIBS=$LIBS >++if test -n "$MOZ_OSS"; then >++ dnl Prefer 4Front implementation >++ AC_MSG_CHECKING([MOZ_OSS_CFLAGS]) >++ if test "$OSSPREFIX" != "yes"; then >++ oss_conf=${OSSPREFIX%/usr}/etc/oss.conf >++ if test -f "$oss_conf"; then >++ . "$oss_conf" >++ else >++ OSSLIBDIR=$OSSPREFIX/lib/oss >++ fi >++ if test -d "$OSSLIBDIR"; then >++ MOZ_OSS_CFLAGS="$MOZ_OSS_CFLAGS -I$OSSLIBDIR/include" >++ fi >++ fi >++ AC_MSG_RESULT([$MOZ_OSS_CFLAGS]) >++ >++ CFLAGS="$CFLAGS $MOZ_OSS_CFLAGS" >++ MOZ_CHECK_HEADERS(sys/soundcard.h soundcard.h) >++ >++ if test "$ac_cv_header_sys_soundcard_h" != "yes" -a \ >++ "$ac_cv_header_soundcard_h" != "yes"; then >++ AC_MSG_ERROR([Need OSS for Ogg, Wave or WebM decoding on $OS_TARGET. Disable with --without-oss.]) >++ fi >++ >++ dnl Assume NetBSD implementation over SunAudio >++ AC_CHECK_LIB(ossaudio, _oss_ioctl, >++ [AC_DEFINE_UNQUOTED(CUBEB_OSS_DEFAULT_OUTPUT, "/dev/sound") >++ MOZ_OSS_LIBS="$MOZ_OSS_LIBS -lossaudio"]) >++fi >++CFLAGS=$_SAVE_CFLAGS >++LIBS=$_SAVE_LIBS >++ >++AC_SUBST(MOZ_OSS) >++AC_SUBST_LIST(MOZ_OSS_CFLAGS) >++AC_SUBST_LIST(MOZ_OSS_LIBS) >++ >+ dnl ================================== >+ dnl = Check alsa availability on Linux >+ dnl ================================== > diff --git toolkit/library/moz.build toolkit/library/moz.build >-index a61c689c83c3..7764df6f8a6b 100644 >+index e06592daa265..ce016b96c2bc 100644 > --- toolkit/library/moz.build > +++ toolkit/library/moz.build >-@@ -242,8 +242,8 @@ if CONFIG['MOZ_SYSTEM_LIBVPX']: >+@@ -247,6 +247,9 @@ if CONFIG['MOZ_SYSTEM_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/files/patch-bug1418162 b/www/firefox/files/patch-bug1418162 >new file mode 100644 >index 000000000000..b454e74c438a >--- /dev/null >+++ b/www/firefox/files/patch-bug1418162 >@@ -0,0 +1,58 @@ >+commit b2ebb8d82be2 >+Author: Tom Ritter <tom@mozilla.com> >+Date: Mon Feb 19 09:43:27 2018 -0600 >+ >+ Bug 1418162 Use a build constant to determine update channel, and update ESR equation for 60 r?gijs,Build >+ >+ Previously we used Services.appinfo.defaultUpdateChannel to determine if we were on ESR >+ and if so, we would assert to make sure the ESR equation hadn't changed. But that method >+ is a footgun. We could use UpdateUtils.getUpdateChannel, but for our purposes here, the >+ compile-time constant will work just as well. >+ >+ If it's set correctly, for Mozilla, we will perform our assert check. If it's not set to >+ esr (e.g. for Tor), they'll skip the assert. They probably want to control their user agent >+ themselves anyway. >+ >+ MozReview-Commit-ID: DLnWSEpCVJ6 >+--- >+ .../resistfingerprinting/nsRFPService.cpp | 21 +++++++-------------- >+ 1 file changed, 7 insertions(+), 14 deletions(-) >+ >+diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp >+index aeb3cb6b3539..1fd6a6e8fe8d 100644 >+--- toolkit/components/resistfingerprinting/nsRFPService.cpp >++++ toolkit/components/resistfingerprinting/nsRFPService.cpp >+@@ -606,26 +606,19 @@ nsRFPService::GetSpoofedUserAgent(nsACString &userAgent) >+ uint32_t firefoxVersion = appVersion.ToInteger(&rv); >+ NS_ENSURE_SUCCESS(rv, rv); >+ >+- // Starting from Firefox 10, Firefox ESR was released once every seven >+- // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. >+- // We infer the last and closest ESR version based on this rule. >+- nsCOMPtr<nsIXULRuntime> runtime = >+- do_GetService("@mozilla.org/xre/runtime;1", &rv); >+- NS_ENSURE_SUCCESS(rv, rv); >+- >+- nsAutoCString updateChannel; >+- rv = runtime->GetDefaultUpdateChannel(updateChannel); >+- NS_ENSURE_SUCCESS(rv, rv); >+- >+ // If we are running in Firefox ESR, determine whether the formula of ESR >+ // version has changed. Once changed, we must update the formula in this >+ // function. >+- if (updateChannel.EqualsLiteral("esr")) { >+- MOZ_ASSERT(((firefoxVersion % 7) == 3), >++ if (!strcmp(NS_STRINGIFY(MOZ_UPDATE_CHANNEL), "esr")) { >++ MOZ_ASSERT(((firefoxVersion % 7) == 4), >+ "Please udpate ESR version formula in nsRFPService.cpp"); >+ } >+ >+- uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7); >++ // Starting from Firefox 10, Firefox ESR was released once every seven >++ // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. >++ // Except we used 60 as an ESR instead of 59. >++ // We infer the last and closest ESR version based on this rule. >++ uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 4) % 7); >+ userAgent.Assign(nsPrintfCString( >+ "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0", >+ SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion)); >diff --git a/www/firefox/files/patch-bug1433747 b/www/firefox/files/patch-bug1433747 >deleted file mode 100644 >index 1a3b8737e8c3..000000000000 >--- a/www/firefox/files/patch-bug1433747 >+++ /dev/null >@@ -1,24 +0,0 @@ >-Apply simd@cf87865a998a to unbreak -C target-cpu with Rust >= 1.24 >- >-diff --git third_party/rust/simd/.cargo-checksum.json third_party/rust/simd/.cargo-checksum.json >-index 65f31b0560e6..f16d0dd4fd61 100644 >---- third_party/rust/simd/.cargo-checksum.json >-+++ third_party/rust/simd/.cargo-checksum.json >-@@ -1 +1 @@ >--{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"efe3006b13a13261a3dec3d37dc1d8cb53950f3803c420069231803374949937","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} >-\ No newline at end of file >-+{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"3bcb3f391ad5f16f0a6da0bc1301329beb478ad6265bd3b2c9c124fc2e6198e5","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} >-\ No newline at end of file >-diff --git third_party/rust/simd/src/x86/avx2.rs third_party/rust/simd/src/x86/avx2.rs >-index fa92e3b60786..e86a33d3b5bb 100644 >---- third_party/rust/simd/src/x86/avx2.rs >-+++ third_party/rust/simd/src/x86/avx2.rs >-@@ -42,7 +42,7 @@ extern "platform-intrinsic" { >- fn x86_mm256_packus_epi32(x: i32x8, y: i32x8) -> u16x16; >- fn x86_mm256_permutevar8x32_epi32(x: i32x8, y: i32x8) -> i32x8; >- fn x86_mm256_permutevar8x32_ps(x: f32x8, y: i32x8) -> f32x8; >-- fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u8x32; >-+ fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u64x4; >- fn x86_mm256_shuffle_epi8(x: i8x32, y: i8x32) -> i8x32; >- fn x86_mm256_sign_epi8(x: i8x32, y: i8x32) -> i8x32; >- fn x86_mm256_sign_epi16(x: i16x16, y: i16x16) -> i16x16; >diff --git a/www/firefox/files/patch-bug1438678 b/www/firefox/files/patch-bug1438678 >new file mode 100644 >index 000000000000..47e8dec9ad5b >--- /dev/null >+++ b/www/firefox/files/patch-bug1438678 >@@ -0,0 +1,1000 @@ >+commit 68124009fc5a >+Author: Nicholas Nethercote <nnethercote@mozilla.com> >+Date: Fri Feb 16 17:54:16 2018 +1100 >+ >+ Bug 1438678 - Pass early prefs via shared memory instead of the command line. r=bobowen,jld,glandium. >+ >+ This patch replaces the large -intPrefs/-boolPrefs/-stringPrefs flags with >+ a short-lived, anonymous, shared memory segment that is used to pass the early >+ prefs. >+ >+ Removing the bloat from the command line is nice, but more important is the >+ fact that this will let us pass more prefs at content process start-up, which >+ will allow us to remove the early/late prefs split (bug 1436911). >+ >+ Although this mechanism is only used for prefs, it's conceivable that it could >+ be used for other data that must be received very early by children, and for >+ which the command line isn't ideal. >+ >+ Notable details: >+ >+ - Much of the patch deals with the various platform-specific ways of passing >+ handles/fds to children. >+ >+ - Linux and Mac: we use a fixed fd (8) in combination with the new >+ GeckoChildProcessHost::AddFdToRemap() function (which ensures the child >+ won't close the fd). >+ >+ - Android: like Linux and Mac, but the handles get passed via "parcels" and >+ we use the new SetPrefsFd() function instead of the fixed fd. >+ >+ - Windows: there is no need to duplicate the handle because Windows handles >+ are system-wide. But we do use the new >+ GeckoChildProcessHost::AddHandleToShare() function to add it to the list of >+ inheritable handles. We also ensure that list is processed on all paths >+ (MOZ_SANDBOX with sandbox, MOZ_SANDBOX without sandbox, non-MOZ_SANDBOX) so >+ that the handles are marked as inheritable. The handle is passed via the >+ -prefsHandle flag. >+ >+ The -prefsLen flag is used on all platforms to indicate the size of the >+ shared memory segment. >+ >+ - The patch also moves the serialization/deserialization of the prefs in/out of >+ the shared memory into libpref, which is a better spot for it. (This means >+ Preferences::MustSendToContentProcesses() can be removed.) >+ >+ MozReview-Commit-ID: 8fREEBiYFvc >+ >+ --HG-- >+ extra : rebase_source : 7e4c8ebdbcd7d74d6bd2ab3c9e75a6a17dbd8dfe >+--- >+ dom/ipc/ContentParent.cpp | 91 +++++++------- >+ dom/ipc/ContentProcess.cpp | 121 ++++++++++--------- >+ dom/ipc/ContentProcess.h | 5 + >+ ipc/chromium/src/base/process_util_win.cc | 4 + >+ ipc/glue/GeckoChildProcessHost.cpp | 36 +++--- >+ ipc/glue/GeckoChildProcessHost.h | 10 ++ >+ .../org/mozilla/gecko/process/IChildProcess.aidl | 3 +- >+ .../main/java/org/mozilla/gecko/GeckoThread.java | 13 +- >+ .../org/mozilla/gecko/mozglue/GeckoLoader.java | 2 +- >+ .../mozilla/gecko/process/GeckoProcessManager.java | 19 +-- >+ .../gecko/process/GeckoServiceChildProcess.java | 4 +- >+ modules/libpref/Preferences.cpp | 134 +++++++++++++++++++-- >+ modules/libpref/Preferences.h | 17 +-- >+ mozglue/android/APKOpen.cpp | 4 +- >+ toolkit/xre/Bootstrap.cpp | 4 +- >+ toolkit/xre/Bootstrap.h | 2 +- >+ toolkit/xre/nsEmbedFunctions.cpp | 3 +- >+ widget/android/GeneratedJNIWrappers.cpp | 4 +- >+ widget/android/GeneratedJNIWrappers.h | 5 +- >+ xpcom/build/nsXULAppAPI.h | 2 +- >+ 20 files changed, 318 insertions(+), 165 deletions(-) >+ >+diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp >+index e27f3eedc1b1..60be7005354b 100644 >+--- dom/ipc/ContentParent.cpp >++++ dom/ipc/ContentParent.cpp >+@@ -7,6 +7,7 @@ >+ #include "mozilla/DebugOnly.h" >+ >+ #include "base/basictypes.h" >++#include "base/shared_memory.h" >+ >+ #include "ContentParent.h" >+ #include "TabParent.h" >+@@ -1998,61 +1999,56 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR >+ extraArgs.push_back(idStr); >+ extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser"); >+ >+- nsAutoCStringN<1024> boolPrefs; >+- nsAutoCStringN<1024> intPrefs; >+- nsAutoCStringN<1024> stringPrefs; >++ // Prefs information is passed via anonymous shared memory to avoid bloating >++ // the command line. >+ >+- size_t prefsLen; >+- ContentPrefs::GetEarlyPrefs(&prefsLen); >++ // Serialize the early prefs. >++ nsAutoCStringN<1024> prefs; >++ Preferences::SerializeEarlyPreferences(prefs); >+ >+- for (unsigned int i = 0; i < prefsLen; i++) { >+- const char* prefName = ContentPrefs::GetEarlyPref(i); >+- MOZ_ASSERT(i == 0 || strcmp(prefName, ContentPrefs::GetEarlyPref(i - 1)) > 0, >+- "Content process preferences should be sorted alphabetically."); >+- >+- if (!Preferences::MustSendToContentProcesses(prefName)) { >+- continue; >+- } >+- >+- switch (Preferences::GetType(prefName)) { >+- case nsIPrefBranch::PREF_INT: >+- intPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); >+- break; >+- case nsIPrefBranch::PREF_BOOL: >+- boolPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); >+- break; >+- case nsIPrefBranch::PREF_STRING: { >+- nsAutoCString value; >+- Preferences::GetCString(prefName, value); >+- stringPrefs.Append(nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); >+- } >+- break; >+- case nsIPrefBranch::PREF_INVALID: >+- break; >+- default: >+- printf("preference type: %x\n", Preferences::GetType(prefName)); >+- MOZ_CRASH(); >+- } >++ // Set up the shared memory. >++ base::SharedMemory shm; >++ if (!shm.Create("", /* read_only */ false, /* open_existing */ false, >++ prefs.Length())) { >++ NS_ERROR("failed to create shared memory in the parent"); >++ MarkAsDead(); >++ return false; >++ } >++ if (!shm.Map(prefs.Length())) { >++ NS_ERROR("failed to map shared memory in the parent"); >++ MarkAsDead(); >++ return false; >+ } >+ >+- nsCString schedulerPrefs = Scheduler::GetPrefs(); >++ // Copy the serialized prefs into the shared memory. >++ memcpy(static_cast<char*>(shm.memory()), prefs.get(), prefs.Length()); >+ >+- // Only do these ones if they're non-empty. >+- if (!intPrefs.IsEmpty()) { >+- extraArgs.push_back("-intPrefs"); >+- extraArgs.push_back(intPrefs.get()); >+- } >+- if (!boolPrefs.IsEmpty()) { >+- extraArgs.push_back("-boolPrefs"); >+- extraArgs.push_back(boolPrefs.get()); >+- } >+- if (!stringPrefs.IsEmpty()) { >+- extraArgs.push_back("-stringPrefs"); >+- extraArgs.push_back(stringPrefs.get()); >+- } >++#if defined(XP_WIN) >++ // Record the handle as to-be-shared, and pass it via a command flag. This >++ // works because Windows handles are system-wide. >++ HANDLE prefsHandle = shm.handle(); >++ mSubprocess->AddHandleToShare(prefsHandle); >++ extraArgs.push_back("-prefsHandle"); >++ extraArgs.push_back( >++ nsPrintfCString("%zu", reinterpret_cast<uintptr_t>(prefsHandle)).get()); >++#else >++ // In contrast, Unix fds are per-process. So remap the fd to a fixed one that >++ // will be used in the child. >++ // XXX: bug 1440207 is about improving how fixed fds are used. >++ // >++ // Note: on Android, AddFdToRemap() sets up the fd to be passed via a Parcel, >++ // and the fixed fd isn't used. However, we still need to mark it for >++ // remapping so it doesn't get closed in the child. >++ mSubprocess->AddFdToRemap(shm.handle().fd, kPrefsFileDescriptor); >++#endif >++ >++ // Pass the length via a command flag. >++ extraArgs.push_back("-prefsLen"); >++ extraArgs.push_back(nsPrintfCString("%zu", uintptr_t(prefs.Length())).get()); >+ >+ // Scheduler prefs need to be handled differently because the scheduler needs >+ // to start up in the content process before the normal preferences service. >++ nsCString schedulerPrefs = Scheduler::GetPrefs(); >+ extraArgs.push_back("-schedulerPrefs"); >+ extraArgs.push_back(schedulerPrefs.get()); >+ >+@@ -2061,6 +2057,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR >+ } >+ >+ if (!mSubprocess->LaunchAndWaitForProcessHandle(extraArgs)) { >++ NS_ERROR("failed to launch child in the parent"); >+ MarkAsDead(); >+ return false; >+ } >+diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp >+index e3c1f16910c6..2441c8cb9224 100644 >+--- dom/ipc/ContentProcess.cpp >++++ dom/ipc/ContentProcess.cpp >+@@ -8,6 +8,8 @@ >+ >+ #include "ContentProcess.h" >+ #include "ContentPrefs.h" >++#include "base/shared_memory.h" >++#include "mozilla/Preferences.h" >+ #include "mozilla/Scheduler.h" >+ >+ #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX) >+@@ -15,7 +17,6 @@ >+ #endif >+ >+ #if (defined(XP_WIN) || defined(XP_MACOSX)) && defined(MOZ_CONTENT_SANDBOX) >+-#include "mozilla/Preferences.h" >+ #include "mozilla/SandboxSettings.h" >+ #include "nsAppDirectoryServiceDefs.h" >+ #include "nsDirectoryService.h" >+@@ -81,6 +82,16 @@ SetUpSandboxEnvironment() >+ } >+ #endif >+ >++#ifdef ANDROID >++static int gPrefsFd = -1; >++ >++void >++SetPrefsFd(int aFd) >++{ >++ gPrefsFd = aFd; >++} >++#endif >++ >+ bool >+ ContentProcess::Init(int aArgc, char* aArgv[]) >+ { >+@@ -88,9 +99,10 @@ ContentProcess::Init(int aArgc, char* aArgv[]) >+ bool foundAppdir = false; >+ bool foundChildID = false; >+ bool foundIsForBrowser = false; >+- bool foundIntPrefs = false; >+- bool foundBoolPrefs = false; >+- bool foundStringPrefs = false; >++#ifdef XP_WIN >++ bool foundPrefsHandle = false; >++#endif >++ bool foundPrefsLen = false; >+ bool foundSchedulerPrefs = false; >+ >+ uint64_t childID; >+@@ -103,7 +115,8 @@ ContentProcess::Init(int aArgc, char* aArgv[]) >+ #endif >+ >+ char* schedulerPrefs = nullptr; >+- InfallibleTArray<Pref> prefsArray; >++ base::SharedMemoryHandle prefsHandle = base::SharedMemory::NULLHandle(); >++ size_t prefsLen = 0; >+ for (int idx = aArgc; idx > 0; idx--) { >+ if (!aArgv[idx]) { >+ continue; >+@@ -134,54 +147,24 @@ ContentProcess::Init(int aArgc, char* aArgv[]) >+ } >+ isForBrowser = strcmp(aArgv[idx], "-notForBrowser"); >+ foundIsForBrowser = true; >+- } else if (!strcmp(aArgv[idx], "-intPrefs")) { >+- char* str = aArgv[idx + 1]; >+- while (*str) { >+- int32_t index = strtol(str, &str, 10); >+- MOZ_ASSERT(str[0] == ':'); >+- str++; >+- MaybePrefValue value(PrefValue(static_cast<int32_t>(strtol(str, &str, 10)))); >+- MOZ_ASSERT(str[0] == '|'); >+- str++; >+- // XXX: we assume these values as default values, which may not be >+- // true. We also assume they are unlocked. Fortunately, these prefs >+- // get reset properly by the first IPC message. >+- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, value, MaybePrefValue()); >+- prefsArray.AppendElement(pref); >+- } >+- foundIntPrefs = true; >+- } else if (!strcmp(aArgv[idx], "-boolPrefs")) { >++#ifdef XP_WIN >++ } else if (!strcmp(aArgv[idx], "-prefsHandle")) { >+ char* str = aArgv[idx + 1]; >+- while (*str) { >+- int32_t index = strtol(str, &str, 10); >+- MOZ_ASSERT(str[0] == ':'); >+- str++; >+- MaybePrefValue value(PrefValue(!!strtol(str, &str, 10))); >+- MOZ_ASSERT(str[0] == '|'); >+- str++; >+- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, value, MaybePrefValue()); >+- prefsArray.AppendElement(pref); >+- } >+- foundBoolPrefs = true; >+- } else if (!strcmp(aArgv[idx], "-stringPrefs")) { >++ MOZ_ASSERT(str[0] != '\0'); >++ // ContentParent uses %zu to print a word-sized unsigned integer. So even >++ // though strtoull() returns a long long int, it will fit in a uintptr_t. >++ prefsHandle = reinterpret_cast<HANDLE>(strtoull(str, &str, 10)); >++ MOZ_ASSERT(str[0] == '\0'); >++ foundPrefsHandle = true; >++#endif >++ } else if (!strcmp(aArgv[idx], "-prefsLen")) { >+ char* str = aArgv[idx + 1]; >+- while (*str) { >+- int32_t index = strtol(str, &str, 10); >+- MOZ_ASSERT(str[0] == ':'); >+- str++; >+- int32_t length = strtol(str, &str, 10); >+- MOZ_ASSERT(str[0] == ';'); >+- str++; >+- MaybePrefValue value(PrefValue(nsCString(str, length))); >+- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, value, MaybePrefValue()); >+- prefsArray.AppendElement(pref); >+- str += length + 1; >+- MOZ_ASSERT(*(str - 1) == '|'); >+- } >+- foundStringPrefs = true; >++ MOZ_ASSERT(str[0] != '\0'); >++ // ContentParent uses %zu to print a word-sized unsigned integer. So even >++ // though strtoull() returns a long long int, it will fit in a uintptr_t. >++ prefsLen = strtoull(str, &str, 10); >++ MOZ_ASSERT(str[0] == '\0'); >++ foundPrefsLen = true; >+ } else if (!strcmp(aArgv[idx], "-schedulerPrefs")) { >+ schedulerPrefs = aArgv[idx + 1]; >+ foundSchedulerPrefs = true; >+@@ -209,21 +192,43 @@ ContentProcess::Init(int aArgc, char* aArgv[]) >+ bool allFound = foundAppdir >+ && foundChildID >+ && foundIsForBrowser >+- && foundIntPrefs >+- && foundBoolPrefs >+- && foundStringPrefs >+- && foundSchedulerPrefs; >+- >++ && foundPrefsLen >++ && foundSchedulerPrefs >++#ifdef XP_WIN >++ && foundPrefsHandle >++#endif >+ #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX) >+- allFound &= foundProfile; >++ && foundProfile >+ #endif >++ && true; >+ >+ if (allFound) { >+ break; >+ } >+ } >+ >+- Preferences::SetEarlyPreferences(&prefsArray); >++#ifdef ANDROID >++ // Android is different; get the FD via gPrefsFd instead of a fixed fd. >++ MOZ_RELEASE_ASSERT(gPrefsFd != -1); >++ prefsHandle = base::FileDescriptor(gPrefsFd, /* auto_close */ true); >++#elif XP_UNIX >++ prefsHandle = base::FileDescriptor(kPrefsFileDescriptor, >++ /* auto_close */ true); >++#endif >++ >++ // Set up early prefs from the shared memory. >++ base::SharedMemory shm; >++ if (!shm.SetHandle(prefsHandle, /* read_only */ true)) { >++ NS_ERROR("failed to open shared memory in the child"); >++ return false; >++ } >++ if (!shm.Map(prefsLen)) { >++ NS_ERROR("failed to map shared memory in the child"); >++ return false; >++ } >++ Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()), >++ prefsLen); >++ >+ Scheduler::SetPrefs(schedulerPrefs); >+ mContent.Init(IOThreadChild::message_loop(), >+ ParentPid(), >+diff --git dom/ipc/ContentProcess.h dom/ipc/ContentProcess.h >+index a3854c761e10..6582c94da496 100644 >+--- dom/ipc/ContentProcess.h >++++ dom/ipc/ContentProcess.h >+@@ -49,6 +49,11 @@ private: >+ DISALLOW_EVIL_CONSTRUCTORS(ContentProcess); >+ }; >+ >++#ifdef ANDROID >++// Android doesn't use -prefsHandle, it gets that FD another way. >++void SetPrefsFd(int aFd); >++#endif >++ >+ } // namespace dom >+ } // namespace mozilla >+ >+diff --git ipc/chromium/src/base/process_util_win.cc ipc/chromium/src/base/process_util_win.cc >+index 3ed54cd744ac..46667985cd71 100644 >+--- ipc/chromium/src/base/process_util_win.cc >++++ ipc/chromium/src/base/process_util_win.cc >+@@ -354,6 +354,10 @@ bool LaunchApp(const std::wstring& cmdline, >+ LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL; >+ std::vector<HANDLE> handlesToInherit; >+ for (HANDLE h : options.handles_to_inherit) { >++ if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) == 0) { >++ MOZ_DIAGNOSTIC_ASSERT(false, "SetHandleInformation failed"); >++ return false; >++ } >+ handlesToInherit.push_back(h); >+ } >+ >+diff --git ipc/glue/GeckoChildProcessHost.cpp ipc/glue/GeckoChildProcessHost.cpp >+index d18ed9edd4ca..3be1c51d10bb 100644 >+--- ipc/glue/GeckoChildProcessHost.cpp >++++ ipc/glue/GeckoChildProcessHost.cpp >+@@ -1030,9 +1030,6 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt >+ >+ if (!CrashReporter::IsDummy()) { >+ PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe); >+-# if defined(MOZ_SANDBOX) >+- mSandboxBroker.AddHandleToShare(reinterpret_cast<HANDLE>(h)); >+-# endif // defined(MOZ_SANDBOX) >+ mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast<HANDLE>(h)); >+ std::string hStr = std::to_string(h); >+ cmdLine.AppendLooseValue(UTF8ToWide(hStr)); >+@@ -1043,6 +1040,11 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt >+ >+ # if defined(MOZ_SANDBOX) >+ if (shouldSandboxCurrentProcess) { >++ // Mark the handles to inherit as inheritable. >++ for (HANDLE h : mLaunchOptions->handles_to_inherit) { >++ mSandboxBroker.AddHandleToShare(h); >++ } >++ >+ if (mSandboxBroker.LaunchApp(cmdLine.program().c_str(), >+ cmdLine.command_line_string().c_str(), >+ mLaunchOptions->env_map, >+@@ -1180,7 +1182,7 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type, >+ const base::file_handle_mapping_vector& fds_to_remap, >+ ProcessHandle* process_handle) >+ { >+- MOZ_ASSERT((fds_to_remap.size() > 0) && (fds_to_remap.size() <= 3)); >++ MOZ_RELEASE_ASSERT((2 <= fds_to_remap.size()) && (fds_to_remap.size() <= 4)); >+ JNIEnv* const env = mozilla::jni::GetEnvForThread(); >+ MOZ_ASSERT(env); >+ >+@@ -1189,21 +1191,25 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type, >+ for (int ix = 0; ix < argvSize; ix++) { >+ jargs->SetElement(ix, jni::StringParam(argv[ix].c_str(), env)); >+ } >+- base::file_handle_mapping_vector::const_iterator it = fds_to_remap.begin(); >+- int32_t ipcFd = it->first; >+- it++; >+- // If the Crash Reporter is disabled, there will not be a second file descriptor. >++ >++ // XXX: this processing depends entirely on the internals of >++ // ContentParent::LaunchSubprocess() >++ // GeckoChildProcessHost::PerformAsyncLaunchInternal(), and the order in >++ // which they append to fds_to_remap. There must be a better way to do it. >++ // See bug 1440207. >++ int32_t prefsFd = fds_to_remap[0].first; >++ int32_t ipcFd = fds_to_remap[1].first; >+ int32_t crashFd = -1; >+ int32_t crashAnnotationFd = -1; >+- if (it != fds_to_remap.end() && !CrashReporter::IsDummy()) { >+- crashFd = it->first; >+- it++; >++ if (fds_to_remap.size() == 3) { >++ crashAnnotationFd = fds_to_remap[2].first; >+ } >+- if (it != fds_to_remap.end()) { >+- crashAnnotationFd = it->first; >+- it++; >++ if (fds_to_remap.size() == 4) { >++ crashFd = fds_to_remap[2].first; >++ crashAnnotationFd = fds_to_remap[3].first; >+ } >+- int32_t handle = java::GeckoProcessManager::Start(type, jargs, ipcFd, crashFd, crashAnnotationFd); >++ >++ int32_t handle = java::GeckoProcessManager::Start(type, jargs, prefsFd, ipcFd, crashFd, crashAnnotationFd); >+ >+ if (process_handle) { >+ *process_handle = handle; >+diff --git ipc/glue/GeckoChildProcessHost.h ipc/glue/GeckoChildProcessHost.h >+index 631c42066bc7..0345e221abcc 100644 >+--- ipc/glue/GeckoChildProcessHost.h >++++ ipc/glue/GeckoChildProcessHost.h >+@@ -103,6 +103,16 @@ public: >+ } >+ #endif >+ >++#ifdef XP_WIN >++ void AddHandleToShare(HANDLE aHandle) { >++ mLaunchOptions->handles_to_inherit.push_back(aHandle); >++ } >++#else >++ void AddFdToRemap(int aSrcFd, int aDstFd) { >++ mLaunchOptions->fds_to_remap.push_back(std::make_pair(aSrcFd, aDstFd)); >++ } >++#endif >++ >+ /** >+ * Must run on the IO thread. Cause the OS process to exit and >+ * ensure its OS resources are cleaned up. >+diff --git mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl >+index ba26ae1ba06b..a2535f44c72b 100644 >+--- mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl >++++ mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl >+@@ -12,6 +12,7 @@ import android.os.ParcelFileDescriptor; >+ interface IChildProcess { >+ int getPid(); >+ boolean start(in IProcessManager procMan, in String[] args, in Bundle extras, >+- in ParcelFileDescriptor ipcPfd, in ParcelFileDescriptor crashReporterPfd, >++ in ParcelFileDescriptor prefsPfd, in ParcelFileDescriptor ipcPfd, >++ in ParcelFileDescriptor crashReporterPfd, >+ in ParcelFileDescriptor crashAnnotationPfd); >+ } >+diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java >+index dfabfd05daf0..8311920afeec 100644 >+--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java >++++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java >+@@ -128,6 +128,7 @@ public class GeckoThread extends Thread { >+ public static final int FLAG_PRELOAD_CHILD = 2; // Preload child during main thread start. >+ >+ private static final String EXTRA_ARGS = "args"; >++ private static final String EXTRA_PREFS_FD = "prefsFd"; >+ private static final String EXTRA_IPC_FD = "ipcFd"; >+ private static final String EXTRA_CRASH_FD = "crashFd"; >+ private static final String EXTRA_CRASH_ANNOTATION_FD = "crashAnnotationFd"; >+@@ -149,7 +150,8 @@ public class GeckoThread extends Thread { >+ >+ private synchronized boolean init(final GeckoProfile profile, final String[] args, >+ final Bundle extras, final int flags, >+- final int ipcFd, final int crashFd, >++ final int prefsFd, final int ipcFd, >++ final int crashFd, >+ final int crashAnnotationFd) { >+ ThreadUtils.assertOnUiThread(); >+ uiThreadId = android.os.Process.myTid(); >+@@ -163,6 +165,7 @@ public class GeckoThread extends Thread { >+ mFlags = flags; >+ >+ mExtras = (extras != null) ? new Bundle(extras) : new Bundle(3); >++ mExtras.putInt(EXTRA_PREFS_FD, prefsFd); >+ mExtras.putInt(EXTRA_IPC_FD, ipcFd); >+ mExtras.putInt(EXTRA_CRASH_FD, crashFd); >+ mExtras.putInt(EXTRA_CRASH_ANNOTATION_FD, crashAnnotationFd); >+@@ -174,15 +177,16 @@ public class GeckoThread extends Thread { >+ >+ public static boolean initMainProcess(final GeckoProfile profile, final String[] args, >+ final Bundle extras, final int flags) { >+- return INSTANCE.init(profile, args, extras, flags, >++ return INSTANCE.init(profile, args, extras, flags, /* fd */ -1, >+ /* fd */ -1, /* fd */ -1, /* fd */ -1); >+ } >+ >+ public static boolean initChildProcess(final String[] args, final Bundle extras, >+- final int ipcFd, final int crashFd, >++ final int prefsFd, final int ipcFd, >++ final int crashFd, >+ final int crashAnnotationFd) { >+ return INSTANCE.init(/* profile */ null, args, extras, /* flags */ 0, >+- ipcFd, crashFd, crashAnnotationFd); >++ prefsFd, ipcFd, crashFd, crashAnnotationFd); >+ } >+ >+ private static boolean canUseProfile(final Context context, final GeckoProfile profile, >+@@ -442,6 +446,7 @@ public class GeckoThread extends Thread { >+ >+ // And go. >+ GeckoLoader.nativeRun(args, >++ mExtras.getInt(EXTRA_PREFS_FD, -1), >+ mExtras.getInt(EXTRA_IPC_FD, -1), >+ mExtras.getInt(EXTRA_CRASH_FD, -1), >+ mExtras.getInt(EXTRA_CRASH_ANNOTATION_FD, -1)); >+diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java >+index b1830fd86945..ac128b651e7b 100644 >+--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java >++++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java >+@@ -463,7 +463,7 @@ public final class GeckoLoader { >+ public static native boolean verifyCRCs(String apkName); >+ >+ // These methods are implemented in mozglue/android/APKOpen.cpp >+- public static native void nativeRun(String[] args, int ipcFd, int crashFd, int crashAnnotationFd); >++ public static native void nativeRun(String[] args, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd); >+ private static native void loadGeckoLibsNative(String apkName); >+ private static native void loadSQLiteLibsNative(String apkName); >+ private static native void loadNSSLibsNative(String apkName); >+diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java >+index b762e1c9a3eb..dba329ba8f92 100644 >+--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java >++++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java >+@@ -169,14 +169,14 @@ public final class GeckoProcessManager extends IProcessManager.Stub { >+ >+ @WrapForJNI >+ private static int start(final String type, final String[] args, >+- final int ipcFd, final int crashFd, >+- final int crashAnnotationFd) { >+- return INSTANCE.start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ false); >++ final int prefsFd, final int ipcFd, >++ final int crashFd, final int crashAnnotationFd) { >++ return INSTANCE.start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ false); >+ } >+ >+- private int start(final String type, final String[] args, final int ipcFd, >+- final int crashFd, final int crashAnnotationFd, >+- final boolean retry) { >++ private int start(final String type, final String[] args, final int prefsFd, >++ final int ipcFd, final int crashFd, >++ final int crashAnnotationFd, final boolean retry) { >+ final ChildConnection connection = getConnection(type); >+ final IChildProcess child = connection.bind(); >+ if (child == null) { >+@@ -184,10 +184,12 @@ public final class GeckoProcessManager extends IProcessManager.Stub { >+ } >+ >+ final Bundle extras = GeckoThread.getActiveExtras(); >++ final ParcelFileDescriptor prefsPfd; >+ final ParcelFileDescriptor ipcPfd; >+ final ParcelFileDescriptor crashPfd; >+ final ParcelFileDescriptor crashAnnotationPfd; >+ try { >++ prefsPfd = ParcelFileDescriptor.fromFd(prefsFd); >+ ipcPfd = ParcelFileDescriptor.fromFd(ipcFd); >+ crashPfd = (crashFd >= 0) ? ParcelFileDescriptor.fromFd(crashFd) : null; >+ crashAnnotationPfd = (crashAnnotationFd >= 0) ? ParcelFileDescriptor.fromFd(crashAnnotationFd) : null; >+@@ -198,7 +200,8 @@ public final class GeckoProcessManager extends IProcessManager.Stub { >+ >+ boolean started = false; >+ try { >+- started = child.start(this, args, extras, ipcPfd, crashPfd, crashAnnotationPfd); >++ started = child.start(this, args, extras, prefsPfd, ipcPfd, crashPfd, >++ crashAnnotationPfd); >+ } catch (final RemoteException e) { >+ } >+ >+@@ -209,7 +212,7 @@ public final class GeckoProcessManager extends IProcessManager.Stub { >+ } >+ Log.w(LOGTAG, "Attempting to kill running child " + type); >+ connection.unbind(); >+- return start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ true); >++ return start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ true); >+ } >+ >+ try { >+diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java >+index f1f6ce109fda..6dc19813fc10 100644 >+--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java >++++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java >+@@ -63,6 +63,7 @@ public class GeckoServiceChildProcess extends Service { >+ public boolean start(final IProcessManager procMan, >+ final String[] args, >+ final Bundle extras, >++ final ParcelFileDescriptor prefsPfd, >+ final ParcelFileDescriptor ipcPfd, >+ final ParcelFileDescriptor crashReporterPfd, >+ final ParcelFileDescriptor crashAnnotationPfd) { >+@@ -74,6 +75,7 @@ public class GeckoServiceChildProcess extends Service { >+ sProcessManager = procMan; >+ } >+ >++ final int prefsFd = prefsPfd.detachFd(); >+ final int ipcFd = ipcPfd.detachFd(); >+ final int crashReporterFd = crashReporterPfd != null ? >+ crashReporterPfd.detachFd() : -1; >+@@ -83,7 +85,7 @@ public class GeckoServiceChildProcess extends Service { >+ ThreadUtils.postToUiThread(new Runnable() { >+ @Override >+ public void run() { >+- if (GeckoThread.initChildProcess(args, extras, ipcFd, crashReporterFd, >++ if (GeckoThread.initChildProcess(args, extras, prefsFd, ipcFd, crashReporterFd, >+ crashAnnotationFd)) { >+ GeckoThread.launch(); >+ } >+diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp >+index 330ed4a09b54..b884591c9271 100644 >+--- modules/libpref/Preferences.cpp >++++ modules/libpref/Preferences.cpp >+@@ -2920,7 +2920,7 @@ public: >+ >+ } // namespace >+ >+-// A list of prefs sent early from the parent, via the command line. >++// A list of prefs sent early from the parent, via shared memory. >+ static InfallibleTArray<dom::Pref>* gEarlyDomPrefs; >+ >+ /* static */ already_AddRefed<Preferences> >+@@ -3081,11 +3081,130 @@ NS_IMPL_ISUPPORTS(Preferences, >+ nsISupportsWeakReference) >+ >+ /* static */ void >+-Preferences::SetEarlyPreferences(const nsTArray<dom::Pref>* aDomPrefs) >++Preferences::SerializeEarlyPreferences(nsCString& aStr) >++{ >++ MOZ_RELEASE_ASSERT(InitStaticMembers()); >++ >++ nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs; >++ size_t numEarlyPrefs; >++ dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs); >++ >++ for (unsigned int i = 0; i < numEarlyPrefs; i++) { >++ const char* prefName = dom::ContentPrefs::GetEarlyPref(i); >++ MOZ_ASSERT_IF(i > 0, >++ strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0); >++ >++ Pref* pref = pref_HashTableLookup(prefName); >++ if (!pref || !pref->MustSendToContentProcesses()) { >++ continue; >++ } >++ >++ switch (pref->Type()) { >++ case PrefType::Bool: >++ boolPrefs.Append( >++ nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); >++ break; >++ case PrefType::Int: >++ intPrefs.Append( >++ nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); >++ break; >++ case PrefType::String: { >++ nsAutoCString value; >++ Preferences::GetCString(prefName, value); >++ stringPrefs.Append( >++ nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); >++ } break; >++ case PrefType::None: >++ break; >++ default: >++ printf_stderr("preference type: %d\n", int(pref->Type())); >++ MOZ_CRASH(); >++ } >++ } >++ >++ aStr.Truncate(); >++ aStr.Append(boolPrefs); >++ aStr.Append('\n'); >++ aStr.Append(intPrefs); >++ aStr.Append('\n'); >++ aStr.Append(stringPrefs); >++ aStr.Append('\n'); >++ aStr.Append('\0'); >++} >++ >++/* static */ void >++Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen) >+ { >+ MOZ_ASSERT(!XRE_IsParentProcess()); >+ >+- gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(mozilla::Move(*aDomPrefs)); >++ MOZ_ASSERT(!gEarlyDomPrefs); >++ gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(); >++ >++ char* p = aStr; >++ >++ // XXX: we assume these pref values are default values, which may not be >++ // true. We also assume they are unlocked. Fortunately, these prefs get reset >++ // properly by the first IPC message. >++ >++ // Get the bool prefs. >++ while (*p != '\n') { >++ int32_t index = strtol(p, &p, 10); >++ MOZ_ASSERT(p[0] == ':'); >++ p++; >++ int v = strtol(p, &p, 10); >++ MOZ_ASSERT(v == 0 || v == 1); >++ dom::MaybePrefValue value(dom::PrefValue(!!v)); >++ MOZ_ASSERT(p[0] == '|'); >++ p++; >++ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >++ /* isLocked */ false, >++ value, >++ dom::MaybePrefValue()); >++ gEarlyDomPrefs->AppendElement(pref); >++ } >++ p++; >++ >++ // Get the int prefs. >++ while (*p != '\n') { >++ int32_t index = strtol(p, &p, 10); >++ MOZ_ASSERT(p[0] == ':'); >++ p++; >++ dom::MaybePrefValue value( >++ dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10)))); >++ MOZ_ASSERT(p[0] == '|'); >++ p++; >++ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >++ /* isLocked */ false, >++ value, >++ dom::MaybePrefValue()); >++ gEarlyDomPrefs->AppendElement(pref); >++ } >++ p++; >++ >++ // Get the string prefs. >++ while (*p != '\n') { >++ int32_t index = strtol(p, &p, 10); >++ MOZ_ASSERT(p[0] == ':'); >++ p++; >++ int32_t length = strtol(p, &p, 10); >++ MOZ_ASSERT(p[0] == ';'); >++ p++; >++ dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length))); >++ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >++ /* isLocked */ false, >++ value, >++ dom::MaybePrefValue()); >++ gEarlyDomPrefs->AppendElement(pref); >++ p += length + 1; >++ MOZ_ASSERT(*(p - 1) == '|'); >++ } >++ p++; >++ >++ MOZ_ASSERT(*p == '\0'); >++ >++ // We finished parsing on a '\0'. That should be the last char in the shared >++ // memory. >++ MOZ_ASSERT(aStr + aStrLen - 1 == p); >+ >+ #ifdef DEBUG >+ MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet); >+@@ -4298,15 +4417,6 @@ Preferences::HasUserValue(const char* aPrefName) >+ return pref && pref->HasUserValue(); >+ } >+ >+-/* static */ bool >+-Preferences::MustSendToContentProcesses(const char* aPrefName) >+-{ >+- NS_ENSURE_TRUE(InitStaticMembers(), false); >+- >+- Pref* pref = pref_HashTableLookup(aPrefName); >+- return pref && pref->MustSendToContentProcesses(); >+-} >+- >+ /* static */ int32_t >+ Preferences::GetType(const char* aPrefName) >+ { >+diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h >+index 1cb825ecbfe5..c149db62b525 100644 >+--- modules/libpref/Preferences.h >++++ modules/libpref/Preferences.h >+@@ -41,6 +41,11 @@ class PrefValue; >+ >+ struct PrefsSizes; >+ >++#ifdef XP_UNIX >++// XXX: bug 1440207 is about improving how fixed fds such as this are used. >++static const int kPrefsFileDescriptor = 8; >++#endif >++ >+ // Keep this in sync with PrefType in parser/src/lib.rs. >+ enum class PrefValueKind : uint8_t >+ { >+@@ -230,9 +235,6 @@ public: >+ // Whether the pref has a user value or not. >+ static bool HasUserValue(const char* aPref); >+ >+- // Must the pref be sent to content processes when they start? >+- static bool MustSendToContentProcesses(const char* aPref); >+- >+ // Adds/Removes the observer for the root pref branch. See nsIPrefBranch.idl >+ // for details. >+ static nsresult AddStrongObserver(nsIObserver* aObserver, const char* aPref); >+@@ -328,11 +330,12 @@ public: >+ >+ // When a content process is created these methods are used to pass prefs in >+ // bulk from the parent process. "Early" preferences are ones that are needed >+- // very early on in the content process's lifetime; they are passed via the >+- // command line. "Late" preferences are the remainder, which are passed via >+- // IPC message. >++ // very early on in the content process's lifetime; they are passed via a >++ // special shared memory segment. "Late" preferences are the remainder, which >++ // are passed via a standard IPC message. >++ static void SerializeEarlyPreferences(nsCString& aStr); >++ static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen); >+ static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings); >+- static void SetEarlyPreferences(const nsTArray<dom::Pref>* aSettings); >+ static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings); >+ >+ // When a single pref is changed in the parent process, these methods are >+diff --git mozglue/android/APKOpen.cpp mozglue/android/APKOpen.cpp >+index 5f1ef55b605e..b57192488725 100644 >+--- mozglue/android/APKOpen.cpp >++++ mozglue/android/APKOpen.cpp >+@@ -392,7 +392,7 @@ FreeArgv(char** argv, int argc) >+ } >+ >+ extern "C" APKOPEN_EXPORT void MOZ_JNICALL >+-Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int ipcFd, int crashFd, int crashAnnotationFd) >++Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd) >+ { >+ int argc = 0; >+ char** argv = CreateArgvFromObjectArray(jenv, jargs, &argc); >+@@ -407,7 +407,7 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jo >+ gBootstrap->GeckoStart(jenv, argv, argc, sAppData); >+ ElfLoader::Singleton.ExpectShutdown(true); >+ } else { >+- gBootstrap->XRE_SetAndroidChildFds(jenv, ipcFd, crashFd, crashAnnotationFd); >++ gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd, crashAnnotationFd); >+ gBootstrap->XRE_SetProcessType(argv[argc - 1]); >+ >+ XREChildData childData; >+diff --git toolkit/xre/Bootstrap.cpp toolkit/xre/Bootstrap.cpp >+index 5688519822a9..7e857969a4fb 100644 >+--- toolkit/xre/Bootstrap.cpp >++++ toolkit/xre/Bootstrap.cpp >+@@ -78,8 +78,8 @@ public: >+ ::GeckoStart(aEnv, argv, argc, aAppData); >+ } >+ >+- virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override { >+- ::XRE_SetAndroidChildFds(aEnv, aIPCFd, aCrashFd, aCrashAnnotationFd); >++ virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override { >++ ::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd, aCrashAnnotationFd); >+ } >+ #endif >+ >+diff --git toolkit/xre/Bootstrap.h toolkit/xre/Bootstrap.h >+index 686d0a38e324..77adcef80e1f 100644 >+--- toolkit/xre/Bootstrap.h >++++ toolkit/xre/Bootstrap.h >+@@ -113,7 +113,7 @@ public: >+ #ifdef MOZ_WIDGET_ANDROID >+ virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0; >+ >+- virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0; >++ virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0; >+ #endif >+ >+ #ifdef LIBFUZZER >+diff --git toolkit/xre/nsEmbedFunctions.cpp toolkit/xre/nsEmbedFunctions.cpp >+index 53bd2bc2eb47..83184e97ba92 100644 >+--- toolkit/xre/nsEmbedFunctions.cpp >++++ toolkit/xre/nsEmbedFunctions.cpp >+@@ -243,9 +243,10 @@ GeckoProcessType sChildProcessType = GeckoProcessType_Default; >+ >+ #if defined(MOZ_WIDGET_ANDROID) >+ void >+-XRE_SetAndroidChildFds (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd) >++XRE_SetAndroidChildFds (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd) >+ { >+ mozilla::jni::SetGeckoThreadEnv(env); >++ mozilla::dom::SetPrefsFd(prefsFd); >+ IPC::Channel::SetClientChannelFd(ipcFd); >+ CrashReporter::SetNotificationPipeForChild(crashFd); >+ CrashReporter::SetCrashAnnotationPipeForChild(crashAnnotationFd); >+diff --git widget/android/GeneratedJNIWrappers.cpp widget/android/GeneratedJNIWrappers.cpp >+index e3f6af0cc575..4165df59f0e8 100644 >+--- widget/android/GeneratedJNIWrappers.cpp >++++ widget/android/GeneratedJNIWrappers.cpp >+@@ -2355,9 +2355,9 @@ constexpr char GeckoProcessManager::GetEditableParent_t::signature[]; >+ constexpr char GeckoProcessManager::Start_t::name[]; >+ constexpr char GeckoProcessManager::Start_t::signature[]; >+ >+-auto GeckoProcessManager::Start(mozilla::jni::String::Param a0, mozilla::jni::ObjectArray::Param a1, int32_t a2, int32_t a3, int32_t a4) -> int32_t >++auto GeckoProcessManager::Start(mozilla::jni::String::Param a0, mozilla::jni::ObjectArray::Param a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5) -> int32_t >+ { >+- return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4); >++ return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4, a5); >+ } >+ >+ const char GeckoServiceChildProcess::name[] = >+diff --git widget/android/GeneratedJNIWrappers.h widget/android/GeneratedJNIWrappers.h >+index ece79ac94a71..228affa1e550 100644 >+--- widget/android/GeneratedJNIWrappers.h >++++ widget/android/GeneratedJNIWrappers.h >+@@ -6696,10 +6696,11 @@ public: >+ mozilla::jni::ObjectArray::Param, >+ int32_t, >+ int32_t, >++ int32_t, >+ int32_t> Args; >+ static constexpr char name[] = "start"; >+ static constexpr char signature[] = >+- "(Ljava/lang/String;[Ljava/lang/String;III)I"; >++ "(Ljava/lang/String;[Ljava/lang/String;IIII)I"; >+ static const bool isStatic = true; >+ static const mozilla::jni::ExceptionMode exceptionMode = >+ mozilla::jni::ExceptionMode::ABORT; >+@@ -6709,7 +6710,7 @@ public: >+ mozilla::jni::DispatchTarget::CURRENT; >+ }; >+ >+- static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t) -> int32_t; >++ static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t, int32_t) -> int32_t; >+ >+ static const mozilla::jni::CallingThread callingThread = >+ mozilla::jni::CallingThread::ANY; >+diff --git xpcom/build/nsXULAppAPI.h xpcom/build/nsXULAppAPI.h >+index 94f6daf864c9..d6ac10d51d76 100644 >+--- xpcom/build/nsXULAppAPI.h >++++ xpcom/build/nsXULAppAPI.h >+@@ -398,7 +398,7 @@ XRE_API(const char*, >+ >+ #if defined(MOZ_WIDGET_ANDROID) >+ XRE_API(void, >+- XRE_SetAndroidChildFds, (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd)) >++ XRE_SetAndroidChildFds, (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)) >+ #endif // defined(MOZ_WIDGET_ANDROID) >+ >+ XRE_API(void, >diff --git a/www/firefox/files/patch-bug1444083 b/www/firefox/files/patch-bug1444083 >deleted file mode 100644 >index 9163fe84acb6..000000000000 >--- a/www/firefox/files/patch-bug1444083 >+++ /dev/null >@@ -1,17 +0,0 @@ >-Disable custom styling for <select> and <option> on Tier3 as well >- >-diff --git modules/libpref/init/all.js modules/libpref/init/all.js >-index 322d009da739..06e2fd7f664a 100644 >---- modules/libpref/init/all.js >-+++ modules/libpref/init/all.js >-@@ -1359,8 +1359,8 @@ pref("dom.forms.autocomplete.formautofill", false); >- // Enable search in <select> dropdowns (more than 40 options) >- pref("dom.forms.selectSearch", false); >- // Allow for webpages to provide custom styling for <select> >--// popups. Disabled on Linux due to bug 1338283. >--#ifdef XP_LINUX >-+// popups. Disabled on GTK due to bug 1338283. >-+#ifdef MOZ_WIDGET_GTK >- pref("dom.forms.select.customstyling", false); >- #else >- pref("dom.forms.select.customstyling", true); >diff --git a/www/firefox/files/patch-bug1444798 b/www/firefox/files/patch-bug1444798 >index c326fea1709f..2268bc9d4484 100644 >--- a/www/firefox/files/patch-bug1444798 >+++ b/www/firefox/files/patch-bug1444798 >@@ -11,7 +11,7 @@ diff --git gfx/webrender_bindings/src/bindings.rs gfx/webrender_bindings/src/bin > index 8517d7dd33e5..cf885ee713f3 100644 > --- gfx/webrender_bindings/src/bindings.rs > +++ gfx/webrender_bindings/src/bindings.rs >-@@ -290,8 +290,8 @@ struct WrExternalImage { >+@@ -312,8 +312,8 @@ struct WrExternalImage { > size: usize, > } > >@@ -22,17 +22,17 @@ index 8517d7dd33e5..cf885ee713f3 100644 > > #[repr(C)] > pub struct WrExternalImageHandler { >-@@ -305,8 +305,8 @@ impl ExternalImageHandler for WrExternalImageHandler { >+@@ -327,7 +327,8 @@ impl ExternalImageHandler for WrExternalImageHandler { > id: ExternalImageId, > channel_index: u8) > -> ExternalImage { > - let image = (self.lock_func)(self.external_image_obj, id.into(), channel_index); >- >++ > + let image = unsafe { (self.lock_func)(self.external_image_obj, id.into(), channel_index) }; >- match image.image_type { >- WrExternalImageType::NativeTexture => { >- ExternalImage { >-@@ -341,7 +341,9 @@ impl ExternalImageHandler for WrExternalImageHandler { >+ ExternalImage { >+ uv: TexelRect::new(image.u0, image.v0, image.u1, image.v1), >+ source: match image.image_type { >+@@ -341,7 +342,9 @@ impl ExternalImageHandler for WrExternalImageHandler { > fn unlock(&mut self, > id: ExternalImageId, > channel_index: u8) { >diff --git a/www/firefox/files/patch-bug826985 b/www/firefox/files/patch-bug826985 >deleted file mode 100644 >index 69a51707c051..000000000000 >--- a/www/firefox/files/patch-bug826985 >+++ /dev/null >@@ -1,171 +0,0 @@ >-commit 8024d93 >-Author: Henrik Gulbrandsen <henrik@gulbra.net> >-Date: Fri Jan 4 13:49:22 2013 +0100 >- >- Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux. >---- >- config/system-headers | 1 + >- old-configure.in | 7 +++++++ >- media/webrtc/signaling/test/Makefile.in | 1 + >- .../modules/video_capture/linux/device_info_linux.cc | 17 +++++++++++++++++ >- .../modules/video_capture/linux/video_capture_linux.cc | 16 +++++++++++++++- >- .../webrtc/modules/video_capture/video_capture.gypi | 11 +++++++++++ >- toolkit/library/Makefile.in | 1 + >- 6 files changed, 52 insertions(+), 1 deletion(-) >- >-diff --git config/system-headers.mozbuild config/system-headers.mozbuild >-index e02d381a12e9..7620b4d00623 100644 >---- config/system-headers.mozbuild >-+++ config/system-headers.mozbuild >-@@ -428,6 +428,7 @@ system_headers = [ >- 'libgnomeui/gnome-icon-theme.h', >- 'libgnomeui/gnome-ui-init.h', >- 'libutil.h', >-+ 'libv4l2.h', >- 'limits.h', >- 'link.h', >- 'linux/ioprio.h', >-diff --git old-configure.in configure.in >-index 55e4cd1..76567b3 100644 >---- old-configure.in >-+++ old-configure.in >-@@ -2558,6 +2558,9 @@ if test -n "$MOZ_WEBRTC"; then >- if test -n "$MOZ_X11"; then >- MOZ_WEBRTC_X11_LIBS="-lXext -lXdamage -lXfixes -lXcomposite" >- fi >-+ >-+ dnl with libv4l2 we can support more cameras >-+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) >- else >- MOZ_SYNTH_PICO= >- fi >-diff --git build/gyp.mozbuild build/gyp.mozbuild >-index b483cd1..f1dd1f0 100644 >---- build/gyp.mozbuild >-+++ build/gyp.mozbuild >-@@ -11,6 +11,7 @@ gyp_vars = { >- 'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0, >- 'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0, >- 'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0, >-+ 'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0, >- # basic stuff for everything >- 'include_internal_video_render': 0, >- 'clang_use_chrome_plugins': 0, >-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 >-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc >-@@ -25,6 +25,9 @@ >- #else >- #include <linux/videodev2.h> >- #endif >-+#ifdef HAVE_LIBV4L2 >-+#include <libv4l2.h> >-+#endif >- >- #include "webrtc/system_wrappers/interface/ref_count.h" >- #include "webrtc/system_wrappers/interface/trace.h" >-@@ -34,6 +37,15 @@ >- #define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) ) >- #endif >- >-+#ifdef HAVE_LIBV4L2 >-+#define open v4l2_open >-+#define close v4l2_close >-+#define dup v4l2_dup >-+#define ioctl v4l2_ioctl >-+#define mmap v4l2_mmap >-+#define munmap v4l2_munmap >-+#endif >-+ >- namespace webrtc >- { >- namespace videocapturemodule >-@@ -274,6 +286,11 @@ int32_t DeviceInfoLinux::GetDeviceName( >- memset(deviceNameUTF8, 0, deviceNameLength); >- memcpy(cameraName, cap.card, sizeof(cap.card)); >- >-+ if (cameraName[0] == '\0') >-+ { >-+ sprintf(cameraName, "Camera at /dev/video%d", deviceNumber); >-+ } >-+ >- if (deviceNameLength >= strlen(cameraName)) >- { >- memcpy(deviceNameUTF8, cameraName, strlen(cameraName)); >-diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc >-index 12df1b3..e9863ba 100644 >---- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc >-+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc >-@@ -25,6 +25,9 @@ >- #else >- #include <linux/videodev2.h> >- #endif >-+#ifdef HAVE_LIBV4L2 >-+#include <libv4l2.h> >-+#endif >- >- #include <new> >- >-@@ -32,6 +35,15 @@ >- #include "webrtc/modules/video_capture/linux/video_capture_linux.h" >- #include "webrtc/system_wrappers/include/critical_section_wrapper.h" >- #include "webrtc/system_wrappers/include/trace.h" >-+ >-+#ifdef HAVE_LIBV4L2 >-+#define open v4l2_open >-+#define close v4l2_close >-+#define dup v4l2_dup >-+#define ioctl v4l2_ioctl >-+#define mmap v4l2_mmap >-+#define munmap v4l2_munmap >-+#endif >- >- namespace webrtc { >- namespace videocapturemodule { >-diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi >-index d46b5aa..e452223 100644 >---- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi >-+++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi >-@@ -7,6 +7,9 @@ >- # be found in the AUTHORS file in the root of the source tree. >- >- { >-+ 'variables': { >-+ 'use_libv4l2%': 0, >-+ }, >- 'targets': [ >- { >- 'target_name': 'video_capture_module', >-@@ -76,6 +76,19 @@ >- 'linux/video_capture_linux.cc', >- 'linux/video_capture_linux.h', >- ], >-+ 'conditions': [ >-+ ['use_libv4l2==1', { >-+ 'defines': [ >-+ 'HAVE_LIBV4L2', >-+ ], >-+ 'cflags_mozilla': [ >-+ '$(MOZ_LIBV4L2_CFLAGS)', >-+ ], >-+ 'libraries': [ >-+ '-lv4l2', >-+ ], >-+ }], >-+ ], >- }], >- ['OS=="mac"', { >- 'sources': [ >-diff --git toolkit/library/moz.build toolkit/library/moz.build >-index 9c16ffa..1db3794 100644 >---- toolkit/library/moz.build >-+++ toolkit/library/moz.build >-@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF >- ] >- >- 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'] >- >diff --git a/www/firefox/files/patch-z-bug1436911 b/www/firefox/files/patch-z-bug1436911 >new file mode 100644 >index 000000000000..9b338d644358 >--- /dev/null >+++ b/www/firefox/files/patch-z-bug1436911 >@@ -0,0 +1,1162 @@ >+commit 6b81d0b99f20 >+Author: Nicholas Nethercote <nnethercote@mozilla.com> >+Date: Thu Mar 8 15:47:24 2018 +1100 >+ >+ Bug 1436911 - Avoid the early/late prefs split. r=glandium >+ >+ All prefs that need to be sent to a new content process are now put into the >+ shared memory segment, and they are identified by the pref name instead of an >+ index into a list. The old IPC used at process startup (in XPCOMInitData) is >+ removed. >+ >+ Benefits: >+ >+ - It removes the need for the early prefs list >+ (dom/ipc/ContentProcesses.{h,cpp}) and the associated checking, which is ugly >+ and often trips people up (e.g. bug 1432979, bug 1439406). >+ >+ - Using prefnames instead of indices fixes some fragility (fixing bug 1419432). >+ >+ - It fixes the problem of early prefs being installed as unlocked default >+ values even if they are locked and/or have user values. >+ >+ MozReview-Commit-ID: FRIzHF8Tjd >+--- >+ dom/ipc/ContentChild.cpp | 2 - >+ dom/ipc/ContentParent.cpp | 4 +- >+ dom/ipc/ContentPrefs.cpp | 357 ------------------------------ >+ dom/ipc/ContentPrefs.h | 27 --- >+ dom/ipc/ContentProcess.cpp | 5 +- >+ dom/ipc/PContent.ipdl | 7 +- >+ dom/ipc/moz.build | 2 - >+ layout/style/nsCSSProps.h | 2 +- >+ modules/libpref/Preferences.cpp | 470 ++++++++++++++++++++++------------------ >+ modules/libpref/Preferences.h | 15 +- >+ 10 files changed, 278 insertions(+), 613 deletions(-) >+ >+diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp >+index f61ab07b81e2..af1ef9cf4c7e 100644 >+--- dom/ipc/ContentChild.cpp >++++ dom/ipc/ContentChild.cpp >+@@ -1185,8 +1185,6 @@ void >+ ContentChild::InitXPCOM(const XPCOMInitData& aXPCOMInit, >+ const mozilla::dom::ipc::StructuredCloneData& aInitialData) >+ { >+- Preferences::SetLatePreferences(&aXPCOMInit.prefs()); >+- >+ // Do this as early as possible to get the parent process to initialize the >+ // background thread since we'll likely need database information very soon. >+ BackgroundChild::Startup(); >+diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp >+index 208bb47a970b..4ce5c6bf23d5 100644 >+--- dom/ipc/ContentParent.cpp >++++ dom/ipc/ContentParent.cpp >+@@ -197,7 +197,6 @@ >+ >+ #include "nsLayoutStylesheetCache.h" >+ >+-#include "ContentPrefs.h" >+ #include "mozilla/Sprintf.h" >+ >+ #ifdef MOZ_WEBRTC >+@@ -2009,7 +2008,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR >+ >+ // Serialize the early prefs. >+ nsAutoCStringN<1024> prefs; >+- Preferences::SerializeEarlyPreferences(prefs); >++ Preferences::SerializePreferences(prefs); >+ >+ // Set up the shared memory. >+ base::SharedMemory shm; >+@@ -2228,7 +2227,6 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority) >+ >+ XPCOMInitData xpcomInit; >+ >+- Preferences::GetPreferences(&xpcomInit.prefs()); >+ nsCOMPtr<nsIIOService> io(do_GetIOService()); >+ MOZ_ASSERT(io, "No IO service?"); >+ DebugOnly<nsresult> rv = io->GetOffline(&xpcomInit.isOffline()); >+diff --git dom/ipc/ContentPrefs.cpp dom/ipc/ContentPrefs.cpp >+deleted file mode 100644 >+index 808b797d9bee..000000000000 >+--- dom/ipc/ContentPrefs.cpp >++++ /dev/null >+@@ -1,360 +0,0 @@ >+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+-/* vim: set ts=8 sts=2 et sw=2 tw=80: */ >+-/* 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 "ContentPrefs.h" >+- >+-/****************************************************************************** >+- * >+- * DO NOT ADD PREFS TO THIS LIST WITHOUT DOM PEER REVIEW >+- * >+- * This is the list of preferences that are sent to the content process on >+- * startup. Only prefs that are required immediately upon startup should be >+- * listed here. The first IPC message received in the content process will >+- * contain all the other prefs. Prefs should only be listed here if they must be >+- * read before the first IPC message is received. >+- * >+- ******************************************************************************/ >+- >+-const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = { >+- "accessibility.monoaudio.enable", >+- "accessibility.mouse_focuses_formcontrol", >+- "accessibility.tabfocus_applies_to_xul", >+- "app.update.channel", >+- "browser.autofocus", >+- "browser.dom.window.dump.enabled", >+- "browser.sessionhistory.max_entries", >+- "browser.sessionhistory.max_total_viewers", >+-#if defined(NIGHTLY_BUILD) || defined(DEBUG) >+- "browser.startup.record", >+-#endif >+-#if defined(ANDROID) >+- "consoleservice.logcat", >+-#endif >+- "content.cors.disable", >+- "content.cors.no_private_data", >+- "content.notify.backoffcount", >+- "content.notify.interval", >+- "content.notify.ontimer", >+- "content.sink.enable_perf_mode", >+- "content.sink.event_probe_rate", >+- "content.sink.initial_perf_time", >+- "content.sink.interactive_deflect_count", >+- "content.sink.interactive_parse_time", >+- "content.sink.interactive_time", >+- "content.sink.pending_event_mode", >+- "content.sink.perf_deflect_count", >+- "content.sink.perf_parse_time", >+- "device.storage.prompt.testing", >+- "device.storage.writable.name", >+- "devtools.enabled", >+- "dom.allow_XUL_XBL_for_file", >+- "dom.allow_cut_copy", >+- "dom.animations-api.core.enabled", >+- "dom.animations-api.element-animate.enabled", >+- "dom.animations-api.pending-member.enabled", >+- "dom.enable_frame_timing", >+- "dom.enable_performance", >+- "dom.enable_performance_navigation_timing", >+- "dom.enable_resource_timing", >+- "dom.event.handling-user-input-time-limit", >+- "dom.event.touch.coalescing.enabled", >+- "dom.forms.autocomplete.formautofill", >+- "dom.forms.inputmode", >+- "dom.input.skip_cursor_move_for_same_value_set", >+- "dom.ipc.processPriorityManager.backgroundGracePeriodMS", >+- "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS", >+- "dom.ipc.useNativeEventProcessing.content", >+- "dom.max_chrome_script_run_time", >+- "dom.max_ext_content_script_run_time", >+- "dom.max_script_run_time", >+- "dom.mozBrowserFramesEnabled", >+- "dom.performance.enable_notify_performance_timing", >+- "dom.performance.enable_user_timing_logging", >+- "dom.placeholder.show_on_focus", >+- "dom.requestIdleCallback.enabled", >+- "dom.script_loader.bytecode_cache.enabled", >+- "dom.script_loader.bytecode_cache.strategy", >+- "dom.storage.testing", >+- "dom.url.encode_decode_hash", >+- "dom.url.getters_decode_hash", >+- "dom.use_watchdog", >+- "dom.vibrator.enabled", >+- "dom.vibrator.max_vibrate_list_len", >+- "dom.vibrator.max_vibrate_ms", >+- "dom.webcomponents.customelements.enabled", >+- "dom.webcomponents.shadowdom.enabled", >+- "focusmanager.testmode", >+- "font.size.inflation.disabledInMasterProcess", >+- "font.size.inflation.emPerLine", >+- "font.size.inflation.forceEnabled", >+- "font.size.inflation.lineThreshold", >+- "font.size.inflation.mappingIntercept", >+- "font.size.inflation.maxRatio", >+- "font.size.inflation.minTwips", >+- "font.size.systemFontScale", >+- "full-screen-api.allow-trusted-requests-only", >+- "full-screen-api.enabled", >+- "full-screen-api.unprefix.enabled", >+-#ifdef FUZZING >+- "fuzzing.enabled", >+-#endif >+- "gfx.font_rendering.opentype_svg.enabled", >+- "hangmonitor.timeout", >+- "html5.flushtimer.initialdelay", >+- "html5.flushtimer.subsequentdelay", >+- "html5.offmainthread", >+- "intl.charset.fallback.tld", >+- "intl.charset.fallback.utf8_for_file", >+- "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition", >+- "javascript.enabled", >+- "javascript.options.array_prototype_values", >+- "javascript.options.asmjs", >+- "javascript.options.asyncstack", >+- "javascript.options.baselinejit", >+- "javascript.options.baselinejit.threshold", >+- "javascript.options.baselinejit.unsafe_eager_compilation", >+- "javascript.options.discardSystemSource", >+- "javascript.options.dump_stack_on_debuggee_would_run", >+- "javascript.options.gczeal", >+- "javascript.options.gczeal.frequency", >+- "javascript.options.ion", >+- "javascript.options.ion.offthread_compilation", >+- "javascript.options.ion.threshold", >+- "javascript.options.ion.unsafe_eager_compilation", >+- "javascript.options.jit.full_debug_checks", >+- "javascript.options.native_regexp", >+- "javascript.options.parallel_parsing", >+- "javascript.options.shared_memory", >+- "javascript.options.spectre.index_masking", >+- "javascript.options.spectre.jit_to_C++_calls", >+- "javascript.options.spectre.object_mitigations.barriers", >+- "javascript.options.spectre.object_mitigations.misc", >+- "javascript.options.spectre.string_mitigations", >+- "javascript.options.spectre.value_masking", >+- "javascript.options.streams", >+- "javascript.options.strict", >+- "javascript.options.strict.debug", >+- "javascript.options.throw_on_asmjs_validation_failure", >+- "javascript.options.throw_on_debuggee_would_run", >+- "javascript.options.wasm", >+- "javascript.options.wasm_baselinejit", >+- "javascript.options.wasm_ionjit", >+- "javascript.options.werror", >+- "javascript.use_us_english_locale", >+- "jsloader.shareGlobal", >+- "layout.css.all-shorthand.enabled", >+- "layout.css.background-blend-mode.enabled", >+- "layout.css.box-decoration-break.enabled", >+- "layout.css.color-adjust.enabled", >+- "layout.css.column-span.enabled", >+- "layout.css.contain.enabled", >+- "layout.css.control-characters.visible", >+- "layout.css.emulate-moz-box-with-flex", >+- "layout.css.expensive-style-struct-assertions.enabled", >+- "layout.css.float-logical-values.enabled", >+- "layout.css.font-display.enabled", >+- "layout.css.font-variations.enabled", >+- "layout.css.frames-timing.enabled", >+- "layout.css.getBoxQuads.enabled", >+- "layout.css.grid-template-subgrid-value.enabled", >+- "layout.css.grid.enabled", >+- "layout.css.image-orientation.enabled", >+- "layout.css.individual-transform.enabled", >+- "layout.css.initial-letter.enabled", >+- "layout.css.isolation.enabled", >+- "layout.css.mix-blend-mode.enabled", >+- "layout.css.moz-document.content.enabled", >+- "layout.css.osx-font-smoothing.enabled", >+- "layout.css.overflow-clip-box.enabled", >+- "layout.css.overscroll-behavior.enabled", >+- "layout.css.prefixes.animations", >+- "layout.css.prefixes.border-image", >+- "layout.css.prefixes.box-sizing", >+- "layout.css.prefixes.device-pixel-ratio-webkit", >+- "layout.css.prefixes.font-features", >+- "layout.css.prefixes.gradients", >+- "layout.css.prefixes.transforms", >+- "layout.css.prefixes.transitions", >+- "layout.css.prefixes.webkit", >+- "layout.css.scope-pseudo.enabled", >+- "layout.css.scoped-style.enabled", >+- "layout.css.scroll-behavior.property-enabled", >+- "layout.css.scroll-snap.enabled", >+-#ifdef MOZ_STYLO >+- "layout.css.servo.chrome.enabled", >+- "layout.css.servo.enabled", >+-#endif >+- "layout.css.shape-outside.enabled", >+- "layout.css.text-align-unsafe-value.enabled", >+- "layout.css.text-combine-upright-digits.enabled", >+- "layout.css.text-combine-upright.enabled", >+- "layout.css.text-justify.enabled", >+- "layout.css.touch_action.enabled", >+- "layout.css.visited_links_enabled", >+- "layout.idle_period.required_quiescent_frames", >+- "layout.idle_period.time_limit", >+- "layout.interruptible-reflow.enabled", >+- "mathml.disabled", >+- "media.audio-max-decode-error", >+- "media.cache_readahead_limit", >+- "media.cache_resume_threshold", >+- "media.cache_size", >+- "media.clearkey.persistent-license.enabled", >+- "media.cubeb.backend", >+- "media.cubeb.sandbox", >+- "media.cubeb_latency_msg_frames", >+- "media.cubeb_latency_playback_ms", >+- "media.decoder-doctor.wmf-disabled-is-failure", >+- "media.decoder.recycle.enabled", >+- "media.decoder.skip-to-next-key-frame.enabled", >+- "media.dormant-on-pause-timeout-ms", >+- "media.eme.audio.blank", >+- "media.eme.chromium-api.video-shmems", >+- "media.eme.enabled", >+- "media.eme.video.blank", >+- "media.ffmpeg.enabled", >+- "media.ffmpeg.low-latency.enabled", >+- "media.ffvpx.enabled", >+- "media.ffvpx.low-latency.enabled", >+- "media.flac.enabled", >+- "media.forcestereo.enabled", >+- "media.gmp.decoder.enabled", >+- "media.gmp.insecure.allow", >+- "media.gpu-process-decoder", >+- "media.hls.enabled", >+- "media.libavcodec.allow-obsolete", >+- "media.memory_cache_max_size", >+- "media.memory_caches_combined_limit_kb", >+- "media.memory_caches_combined_limit_pc_sysmem", >+- "media.mp4.enabled", >+- "media.navigator.mediadatadecoder_enabled", >+- "media.ogg.enabled", >+- "media.ogg.flac.enabled", >+- "media.playback.warnings-as-errors", >+- "media.playback.warnings-as-errors.stagefright-vs-rust", >+- "media.resampling.enabled", >+- "media.resume-bkgnd-video-on-tabhover", >+- "media.ruin-av-sync.enabled", >+- "media.rust.mp4parser", >+- "media.rust.test_mode", >+- "media.seamless-looping", >+- "media.suspend-bkgnd-video.delay-ms", >+- "media.suspend-bkgnd-video.enabled", >+- "media.use-blank-decoder", >+- "media.video-max-decode-error", >+- "media.video_stats.enabled", >+- "media.videocontrols.lock-video-orientation", >+- "media.volume_scale", >+- "media.webspeech.recognition.enable", >+- "media.webspeech.recognition.force_enable", >+- "media.webspeech.synth.force_global_queue", >+- "media.webspeech.test.enable", >+- "media.webspeech.test.fake_fsm_events", >+- "media.webspeech.test.fake_recognition_service", >+- "media.wmf.allow-unsupported-resolutions", >+- "media.wmf.enabled", >+- "media.wmf.skip-blacklist", >+- "media.wmf.vp9.enabled", >+- "network.IDN.blacklist_chars", >+- "network.IDN.restriction_profile", >+- "network.IDN.use_whitelist", >+- "network.IDN_show_punycode", >+- "network.buffer.cache.count", >+- "network.buffer.cache.size", >+- "network.captive-portal-service.enabled", >+- "network.cookie.cookieBehavior", >+- "network.cookie.lifetimePolicy", >+- "network.dns.disablePrefetch", >+- "network.dns.disablePrefetchFromHTTPS", >+- "network.http.tailing.enabled", >+- "network.jar.block-remote-files", >+- "network.loadinfo.skip_type_assertion", >+- "network.notify.changed", >+- "network.offline-mirrors-connectivity", >+- "network.protocol-handler.external.jar", >+- "network.proxy.type", >+- "network.security.ports.banned", >+- "network.security.ports.banned.override", >+- "network.standard-url.enable-rust", >+- "network.standard-url.max-length", >+- "network.standard-url.punycode-host", >+- "network.sts.max_time_for_events_between_two_polls", >+- "network.sts.max_time_for_pr_close_during_shutdown", >+- "network.tcp.keepalive.enabled", >+- "network.tcp.keepalive.idle_time", >+- "network.tcp.keepalive.probe_count", >+- "network.tcp.keepalive.retry_interval", >+- "network.tcp.sendbuffer", >+- "nglayout.debug.invalidation", >+- "privacy.donottrackheader.enabled", >+- "privacy.firstparty.isolate", >+- "privacy.firstparty.isolate.restrict_opener_access", >+- "privacy.reduceTimerPrecision", >+- "privacy.resistFingerprinting", >+- "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", >+- "privacy.resistFingerprinting.reduceTimerPrecision.jitter", >+- "privacy.resistFingerprinting.reduceTimerPrecision.microseconds", >+- "privacy.resistFingerprinting.target_video_res", >+- "privacy.resistFingerprinting.video_dropped_ratio", >+- "privacy.resistFingerprinting.video_frames_per_sec", >+- "privacy.trackingprotection.lower_network_priority", >+- "privacy.window.maxInnerHeight", >+- "privacy.window.maxInnerWidth", >+- "security.csp.enable", >+- "security.data_uri.block_toplevel_data_uri_navigations", >+- "security.data_uri.unique_opaque_origin", >+- "security.fileuri.strict_origin_policy", >+- "security.mixed_content.block_active_content", >+- "security.mixed_content.block_display_content", >+- "security.mixed_content.block_object_subrequest", >+- "security.mixed_content.hsts_priming_cache_timeout", >+- "security.mixed_content.send_hsts_priming", >+- "security.mixed_content.upgrade_display_content", >+- "security.mixed_content.use_hsts", >+- "security.sandbox.content.level", >+- "security.sandbox.content.tempDirSuffix", >+- "security.sandbox.logging.enabled", >+- "security.sandbox.mac.track.violations", >+- "security.sandbox.windows.log.stackTraceDepth", >+- "svg.disabled", >+- "svg.display-lists.hit-testing.enabled", >+- "svg.display-lists.painting.enabled", >+- "svg.new-getBBox.enabled", >+- "svg.path-caching.enabled", >+- "svg.transform-box.enabled", >+- "toolkit.asyncshutdown.crash_timeout", >+- "toolkit.asyncshutdown.log", >+- "toolkit.osfile.log", >+- "toolkit.osfile.log.redirect", >+- "toolkit.telemetry.enabled", >+- "toolkit.telemetry.idleTimeout", >+- "toolkit.telemetry.initDelay", >+- "toolkit.telemetry.log.dump", >+- "toolkit.telemetry.log.level", >+- "toolkit.telemetry.minSubsessionLength", >+- "toolkit.telemetry.scheduler.idleTickInterval", >+- "toolkit.telemetry.scheduler.tickInterval", >+- "toolkit.telemetry.testing.overridePreRelease", >+- "toolkit.telemetry.unified", >+- "ui.key.menuAccessKeyFocuses", >+- "ui.popup.disable_autohide", >+- "ui.use_activity_cursor", >+- "view_source.editor.external", >+- "zoom.maxPercent", >+- "zoom.minPercent" >+-}; >+- >+-const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount) >+-{ >+- *aCount = ArrayLength(ContentPrefs::gEarlyPrefs); >+- return gEarlyPrefs; >+-} >+- >+-const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex) >+-{ >+- MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs)); >+- return gEarlyPrefs[aIndex]; >+-} >+diff --git dom/ipc/ContentPrefs.h dom/ipc/ContentPrefs.h >+deleted file mode 100644 >+index 72ce8d236c11..000000000000 >+--- dom/ipc/ContentPrefs.h >++++ /dev/null >+@@ -1,27 +0,0 @@ >+-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ >+-/* vim: set ts=8 sts=2 et sw=2 tw=80: */ >+-/* 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 mozilla_dom_ContentPrefs_h >+-#define mozilla_dom_ContentPrefs_h >+- >+-// See the comment in ContentPrefs.cpp for more information. >+- >+-namespace mozilla { >+-namespace dom { >+- >+-class ContentPrefs { >+-public: >+- static const char** GetEarlyPrefs(size_t* aCount); >+- static const char* GetEarlyPref(size_t aIndex); >+- >+-private: >+- static const char* gEarlyPrefs[]; >+-}; >+- >+-} >+-} >+- >+-#endif >+diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp >+index 2441c8cb9224..c00283dc5084 100644 >+--- dom/ipc/ContentProcess.cpp >++++ dom/ipc/ContentProcess.cpp >+@@ -7,7 +7,6 @@ >+ #include "mozilla/ipc/IOThreadChild.h" >+ >+ #include "ContentProcess.h" >+-#include "ContentPrefs.h" >+ #include "base/shared_memory.h" >+ #include "mozilla/Preferences.h" >+ #include "mozilla/Scheduler.h" >+@@ -226,8 +225,8 @@ ContentProcess::Init(int aArgc, char* aArgv[]) >+ NS_ERROR("failed to map shared memory in the child"); >+ return false; >+ } >+- Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()), >+- prefsLen); >++ Preferences::DeserializePreferences(static_cast<char*>(shm.memory()), >++ prefsLen); >+ >+ Scheduler::SetPrefs(schedulerPrefs); >+ mContent.Init(IOThreadChild::message_loop(), >+diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl >+index 5d077976569a..fb967ffc53a9 100644 >+--- dom/ipc/PContent.ipdl >++++ dom/ipc/PContent.ipdl >+@@ -155,6 +155,12 @@ union MaybePrefValue { >+ null_t; >+ }; >+ >++// This serialization form mirrors that used in mozilla::Pref in >++// Preferences.cpp. The two should be kept in sync, e.g. if something is added >++// to one it should also be added to the other. >++// >++// Note: there is no need to pass the isSticky attribute because that's an >++// immutable attribute obtained from file at startup. >+ struct Pref { >+ nsCString name; >+ bool isLocked; >+@@ -273,7 +279,6 @@ struct XPCOMInitData >+ ClipboardCapabilities clipboardCaps; >+ DomainPolicyClone domainPolicy; >+ OptionalURIParams userContentSheetURL; >+- Pref[] prefs; >+ GfxVarUpdate[] gfxNonDefaultVarUpdates; >+ ContentDeviceData contentDeviceData; >+ GfxInfoFeatureStatus[] gfxFeatureStatus; >+diff --git dom/ipc/moz.build dom/ipc/moz.build >+index 3c5541c7791b..5e92a0d52b5d 100644 >+--- dom/ipc/moz.build >++++ dom/ipc/moz.build >+@@ -26,7 +26,6 @@ EXPORTS.mozilla.dom += [ >+ 'ContentBridgeParent.h', >+ 'ContentChild.h', >+ 'ContentParent.h', >+- 'ContentPrefs.h', >+ 'ContentProcess.h', >+ 'ContentProcessHost.h', >+ 'ContentProcessManager.h', >+@@ -59,7 +58,6 @@ UNIFIED_SOURCES += [ >+ 'ContentBridgeChild.cpp', >+ 'ContentBridgeParent.cpp', >+ 'ContentParent.cpp', >+- 'ContentPrefs.cpp', >+ 'ContentProcess.cpp', >+ 'ContentProcessHost.cpp', >+ 'ContentProcessManager.cpp', >+diff --git layout/style/nsCSSProps.h layout/style/nsCSSProps.h >+index dce44bf61b35..80288336a08b 100644 >+--- layout/style/nsCSSProps.h >++++ layout/style/nsCSSProps.h >+@@ -645,7 +645,7 @@ public: >+ // In the child process, assert that we're not trying to parse stylesheets >+ // before we've gotten all our prefs. >+ MOZ_ASSERT_IF(!XRE_IsParentProcess(), >+- mozilla::Preferences::AreAllPrefsSetInContentProcess()); >++ mozilla::Preferences::ArePrefsInitedInContentProcess()); >+ return gPropertyEnabled[aProperty]; >+ } >+ >+diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp >+index fe780686f2eb..488095f49236 100644 >+--- modules/libpref/Preferences.cpp >++++ modules/libpref/Preferences.cpp >+@@ -15,7 +15,6 @@ >+ #include "mozilla/ArenaAllocator.h" >+ #include "mozilla/ArrayUtils.h" >+ #include "mozilla/Attributes.h" >+-#include "mozilla/dom/ContentPrefs.h" >+ #include "mozilla/dom/PContent.h" >+ #include "mozilla/HashFunctions.h" >+ #include "mozilla/Logging.h" >+@@ -131,6 +130,29 @@ enum class PrefType : uint8_t >+ Bool = 3, >+ }; >+ >++// This is used for pref names and string pref values. We encode the string >++// length, then a '/', then the string chars. This encoding means there are no >++// special chars that are forbidden or require escaping. >++static void >++SerializeAndAppendString(const char* aChars, nsCString& aStr) >++{ >++ aStr.AppendInt(uint32_t(strlen(aChars))); >++ aStr.Append('/'); >++ aStr.Append(aChars); >++} >++ >++static char* >++DeserializeString(char* aChars, nsCString& aStr) >++{ >++ char* p = aChars; >++ uint32_t length = strtol(p, &p, 10); >++ MOZ_ASSERT(p[0] == '/'); >++ p++; // move past the '/' >++ aStr.Assign(p, length); >++ p += length; // move past the string itself >++ return p; >++} >++ >+ // Keep this in sync with PrefValue in prefs_parser/src/lib.rs. >+ union PrefValue { >+ const char* mStringVal; >+@@ -223,6 +245,64 @@ union PrefValue { >+ MOZ_CRASH(); >+ } >+ } >++ >++ void SerializeAndAppend(PrefType aType, nsCString& aStr) >++ { >++ switch (aType) { >++ case PrefType::Bool: >++ aStr.Append(mBoolVal ? 'T' : 'F'); >++ break; >++ >++ case PrefType::Int: >++ aStr.AppendInt(mIntVal); >++ break; >++ >++ case PrefType::String: { >++ SerializeAndAppendString(mStringVal, aStr); >++ break; >++ } >++ >++ case PrefType::None: >++ default: >++ MOZ_CRASH(); >++ } >++ } >++ >++ static char* Deserialize(PrefType aType, >++ char* aStr, >++ dom::MaybePrefValue* aDomValue) >++ { >++ char* p = aStr; >++ >++ switch (aType) { >++ case PrefType::Bool: >++ if (*p == 'T') { >++ *aDomValue = true; >++ } else if (*p == 'F') { >++ *aDomValue = false; >++ } else { >++ *aDomValue = false; >++ NS_ERROR("bad bool pref value"); >++ } >++ p++; >++ return p; >++ >++ case PrefType::Int: { >++ *aDomValue = int32_t(strtol(p, &p, 10)); >++ return p; >++ } >++ >++ case PrefType::String: { >++ nsCString str; >++ p = DeserializeString(p, str); >++ *aDomValue = str; >++ return p; >++ } >++ >++ default: >++ MOZ_CRASH(); >++ } >++ } >+ }; >+ >+ #ifdef DEBUG >+@@ -694,6 +774,159 @@ public: >+ return false; >+ } >+ >++ // Prefs are serialized in a manner that mirrors dom::Pref. The two should be >++ // kept in sync. E.g. if something is added to one it should also be added to >++ // the other. (It would be nice to be able to use the code generated from >++ // IPDL for serializing dom::Pref here instead of writing by hand this >++ // serialization/deserialization. Unfortunately, that generated code is >++ // difficult to use directly, outside of the IPDL IPC code.) >++ // >++ // The grammar for the serialized prefs has the following form. >++ // >++ // <pref> = <type> <locked> ':' <name> ':' <value>? ':' <value>? '\n' >++ // <type> = 'B' | 'I' | 'S' >++ // <locked> = 'L' | '-' >++ // <name> = <string-value> >++ // <value> = <bool-value> | <int-value> | <string-value> >++ // <bool-value> = 'T' | 'F' >++ // <int-value> = an integer literal accepted by strtol() >++ // <string-value> = <int-value> '/' <chars> >++ // <chars> = any char sequence of length dictated by the preceding >++ // <int-value>. >++ // >++ // No whitespace is tolerated between tokens. <type> must match the types of >++ // the values. >++ // >++ // The serialization is text-based, rather than binary, for the following >++ // reasons. >++ // >++ // - The size difference wouldn't be much different between text-based and >++ // binary. Most of the space is for strings (pref names and string pref >++ // values), which would be the same in both styles. And other differences >++ // would be minimal, e.g. small integers are shorter in text but long >++ // integers are longer in text. >++ // >++ // - Likewise, speed differences should be negligible. >++ // >++ // - It's much easier to debug a text-based serialization. E.g. you can >++ // print it and inspect it easily in a debugger. >++ // >++ // Examples of unlocked boolean prefs: >++ // - "B-:8/my.bool1:F:T\n" >++ // - "B-:8/my.bool2:F:\n" >++ // - "B-:8/my.bool3::T\n" >++ // >++ // Examples of locked integer prefs: >++ // - "IL:7/my.int1:0:1\n" >++ // - "IL:7/my.int2:123:\n" >++ // - "IL:7/my.int3::-99\n" >++ // >++ // Examples of unlocked string prefs: >++ // - "S-:10/my.string1:3/abc:4/wxyz\n" >++ // - "S-:10/my.string2:5/1.234:\n" >++ // - "S-:10/my.string3::7/string!\n" >++ >++ void SerializeAndAppend(nsCString& aStr) >++ { >++ switch (Type()) { >++ case PrefType::Bool: >++ aStr.Append('B'); >++ break; >++ >++ case PrefType::Int: >++ aStr.Append('I'); >++ break; >++ >++ case PrefType::String: { >++ aStr.Append('S'); >++ break; >++ } >++ >++ case PrefType::None: >++ default: >++ MOZ_CRASH(); >++ } >++ >++ aStr.Append(mIsLocked ? 'L' : '-'); >++ aStr.Append(':'); >++ >++ SerializeAndAppendString(mName, aStr); >++ aStr.Append(':'); >++ >++ if (mHasDefaultValue) { >++ mDefaultValue.SerializeAndAppend(Type(), aStr); >++ } >++ aStr.Append(':'); >++ >++ if (mHasUserValue) { >++ mUserValue.SerializeAndAppend(Type(), aStr); >++ } >++ aStr.Append('\n'); >++ } >++ >++ static char* Deserialize(char* aStr, dom::Pref* aDomPref) >++ { >++ char* p = aStr; >++ >++ // The type. >++ PrefType type; >++ if (*p == 'B') { >++ type = PrefType::Bool; >++ } else if (*p == 'I') { >++ type = PrefType::Int; >++ } else if (*p == 'S') { >++ type = PrefType::String; >++ } else { >++ NS_ERROR("bad pref type"); >++ type = PrefType::None; >++ } >++ p++; // move past the type char >++ >++ // Locked? >++ bool isLocked; >++ if (*p == 'L') { >++ isLocked = true; >++ } else if (*p == '-') { >++ isLocked = false; >++ } else { >++ NS_ERROR("bad pref locked status"); >++ isLocked = false; >++ } >++ p++; // move past the isLocked char >++ >++ MOZ_ASSERT(*p == ':'); >++ p++; // move past the ':' >++ >++ // The pref name. >++ nsCString name; >++ p = DeserializeString(p, name); >++ >++ MOZ_ASSERT(*p == ':'); >++ p++; // move past the ':' preceding the default value >++ >++ dom::MaybePrefValue maybeDefaultValue; >++ if (*p != ':') { >++ dom::PrefValue defaultValue; >++ p = PrefValue::Deserialize(type, p, &maybeDefaultValue); >++ } >++ >++ MOZ_ASSERT(*p == ':'); >++ p++; // move past the ':' between the default and user values >++ >++ dom::MaybePrefValue maybeUserValue; >++ if (*p != '\n') { >++ dom::PrefValue userValue; >++ p = PrefValue::Deserialize(type, p, &maybeUserValue); >++ } >++ >++ MOZ_ASSERT(*p == '\n'); >++ p++; // move past the '\n' following the user value >++ >++ *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue); >++ >++ return p; >++ } >++ >+ void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes) >+ { >+ // Note: mName is allocated in gPrefNameArena, measured elsewhere. >+@@ -880,41 +1113,9 @@ pref_savePrefs() >+ >+ #ifdef DEBUG >+ >+-// For content processes, what prefs have been initialized? >+-enum class ContentProcessPhase >+-{ >+- eNoPrefsSet, >+- eEarlyPrefsSet, >+- eEarlyAndLatePrefsSet, >+-}; >+- >+ // Note that this never changes in the parent process, and is only read in >+ // content processes. >+-static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet; >+- >+-struct StringComparator >+-{ >+- const char* mPrefName; >+- >+- explicit StringComparator(const char* aPrefName) >+- : mPrefName(aPrefName) >+- { >+- } >+- >+- int operator()(const char* aPrefName) const >+- { >+- return strcmp(mPrefName, aPrefName); >+- } >+-}; >+- >+-static bool >+-IsEarlyPref(const char* aPrefName) >+-{ >+- size_t prefsLen; >+- size_t found; >+- const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen); >+- return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found); >+-} >++static bool gContentProcessPrefsAreInited = false; >+ >+ #endif // DEBUG >+ >+@@ -923,23 +1124,7 @@ pref_HashTableLookupInner(const char* aPrefName) >+ { >+ MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal()); >+ >+-#ifdef DEBUG >+- if (!XRE_IsParentProcess()) { >+- if (gPhase == ContentProcessPhase::eNoPrefsSet) { >+- MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set", >+- aPrefName); >+- } >+- >+- if (gPhase == ContentProcessPhase::eEarlyPrefsSet && >+- !IsEarlyPref(aPrefName)) { >+- // If you hit this crash, you have an early access of a non-early pref. >+- // Consider moving the access later or add the pref to the whitelist of >+- // early prefs in ContentPrefs.cpp and get review from a DOM peer. >+- MOZ_CRASH_UNSAFE_PRINTF( >+- "accessing non-early pref %s before late prefs are set", aPrefName); >+- } >+- } >+-#endif >++ MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited); >+ >+ return static_cast<PrefEntry*>(gHashTable->Search(aPrefName)); >+ } >+@@ -2932,8 +3117,8 @@ public: >+ >+ } // namespace >+ >+-// A list of prefs sent early from the parent, via shared memory. >+-static InfallibleTArray<dom::Pref>* gEarlyDomPrefs; >++// A list of changed prefs sent from the parent via shared memory. >++static InfallibleTArray<dom::Pref>* gChangedDomPrefs; >+ >+ static const char kTelemetryPref[] = "toolkit.telemetry.enabled"; >+ static const char kChannelPref[] = "app.update.channel"; >+@@ -3050,12 +3235,12 @@ Preferences::GetInstanceForService() >+ } >+ >+ if (!XRE_IsParentProcess()) { >+- MOZ_ASSERT(gEarlyDomPrefs); >+- for (unsigned int i = 0; i < gEarlyDomPrefs->Length(); i++) { >+- Preferences::SetPreference(gEarlyDomPrefs->ElementAt(i)); >++ MOZ_ASSERT(gChangedDomPrefs); >++ for (unsigned int i = 0; i < gChangedDomPrefs->Length(); i++) { >++ Preferences::SetPreference(gChangedDomPrefs->ElementAt(i)); >+ } >+- delete gEarlyDomPrefs; >+- gEarlyDomPrefs = nullptr; >++ delete gChangedDomPrefs; >++ gChangedDomPrefs = nullptr; >+ >+ } else { >+ // Check if there is a deployment configuration file. If so, set up the >+@@ -3179,149 +3364,44 @@ NS_IMPL_ISUPPORTS(Preferences, >+ nsISupportsWeakReference) >+ >+ /* static */ void >+-Preferences::SerializeEarlyPreferences(nsCString& aStr) >++Preferences::SerializePreferences(nsCString& aStr) >+ { >+ MOZ_RELEASE_ASSERT(InitStaticMembers()); >+ >+- nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs; >+- size_t numEarlyPrefs; >+- dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs); >+- >+- for (unsigned int i = 0; i < numEarlyPrefs; i++) { >+- const char* prefName = dom::ContentPrefs::GetEarlyPref(i); >+- MOZ_ASSERT_IF(i > 0, >+- strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0); >+- >+- Pref* pref = pref_HashTableLookup(prefName); >+- if (!pref || !pref->MustSendToContentProcesses()) { >+- continue; >+- } >++ aStr.Truncate(); >+ >+- switch (pref->Type()) { >+- case PrefType::Bool: >+- boolPrefs.Append( >+- nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); >+- break; >+- case PrefType::Int: >+- intPrefs.Append( >+- nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); >+- break; >+- case PrefType::String: { >+- nsAutoCString value; >+- Preferences::GetCString(prefName, value); >+- stringPrefs.Append( >+- nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); >+- } break; >+- case PrefType::None: >+- break; >+- default: >+- printf_stderr("preference type: %d\n", int(pref->Type())); >+- MOZ_CRASH(); >++ for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { >++ Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref; >++ if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) { >++ pref->SerializeAndAppend(aStr); >+ } >+ } >+ >+- aStr.Truncate(); >+- aStr.Append(boolPrefs); >+- aStr.Append('\n'); >+- aStr.Append(intPrefs); >+- aStr.Append('\n'); >+- aStr.Append(stringPrefs); >+- aStr.Append('\n'); >+ aStr.Append('\0'); >+ } >+ >+ /* static */ void >+-Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen) >++Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen) >+ { >+ MOZ_ASSERT(!XRE_IsParentProcess()); >+ >+- MOZ_ASSERT(!gEarlyDomPrefs); >+- gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(); >++ MOZ_ASSERT(!gChangedDomPrefs); >++ gChangedDomPrefs = new InfallibleTArray<dom::Pref>(); >+ >+ char* p = aStr; >+- >+- // XXX: we assume these pref values are default values, which may not be >+- // true. We also assume they are unlocked. Fortunately, these prefs get reset >+- // properly by the first IPC message. >+- >+- // Get the bool prefs. >+- while (*p != '\n') { >+- int32_t index = strtol(p, &p, 10); >+- MOZ_ASSERT(p[0] == ':'); >+- p++; >+- int v = strtol(p, &p, 10); >+- MOZ_ASSERT(v == 0 || v == 1); >+- dom::MaybePrefValue value(dom::PrefValue(!!v)); >+- MOZ_ASSERT(p[0] == '|'); >+- p++; >+- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, >+- value, >+- dom::MaybePrefValue()); >+- gEarlyDomPrefs->AppendElement(pref); >+- } >+- p++; >+- >+- // Get the int prefs. >+- while (*p != '\n') { >+- int32_t index = strtol(p, &p, 10); >+- MOZ_ASSERT(p[0] == ':'); >+- p++; >+- dom::MaybePrefValue value( >+- dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10)))); >+- MOZ_ASSERT(p[0] == '|'); >+- p++; >+- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, >+- value, >+- dom::MaybePrefValue()); >+- gEarlyDomPrefs->AppendElement(pref); >+- } >+- p++; >+- >+- // Get the string prefs. >+- while (*p != '\n') { >+- int32_t index = strtol(p, &p, 10); >+- MOZ_ASSERT(p[0] == ':'); >+- p++; >+- int32_t length = strtol(p, &p, 10); >+- MOZ_ASSERT(p[0] == ';'); >+- p++; >+- dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length))); >+- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), >+- /* isLocked */ false, >+- value, >+- dom::MaybePrefValue()); >+- gEarlyDomPrefs->AppendElement(pref); >+- p += length + 1; >+- MOZ_ASSERT(*(p - 1) == '|'); >+- } >+- p++; >+- >+- MOZ_ASSERT(*p == '\0'); >++ while (*p != '\0') { >++ dom::Pref pref; >++ p = Pref::Deserialize(p, &pref); >++ gChangedDomPrefs->AppendElement(pref); >++ } >+ >+ // We finished parsing on a '\0'. That should be the last char in the shared >+- // memory. >+- MOZ_ASSERT(aStr + aStrLen - 1 == p); >+- >+-#ifdef DEBUG >+- MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet); >+- gPhase = ContentProcessPhase::eEarlyPrefsSet; >+-#endif >+-} >+- >+-/* static */ void >+-Preferences::SetLatePreferences(const nsTArray<dom::Pref>* aDomPrefs) >+-{ >+- MOZ_ASSERT(!XRE_IsParentProcess()); >+- >+- for (unsigned int i = 0; i < aDomPrefs->Length(); i++) { >+- Preferences::SetPreference(aDomPrefs->ElementAt(i)); >+- } >++ // memory. (aPrefsLen includes the '\0'.) >++ MOZ_ASSERT(p == aStr + aPrefsLen - 1); >+ >+ #ifdef DEBUG >+- MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet); >+- gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet; >++ MOZ_ASSERT(!gContentProcessPrefsAreInited); >++ gContentProcessPrefsAreInited = true; >+ #endif >+ } >+ >+@@ -3558,36 +3638,12 @@ Preferences::GetPreference(dom::Pref* aDomPref) >+ } >+ } >+ >+-void >+-Preferences::GetPreferences(InfallibleTArray<dom::Pref>* aDomPrefs) >+-{ >+- MOZ_ASSERT(XRE_IsParentProcess()); >+- MOZ_ASSERT(NS_IsMainThread()); >+- >+- aDomPrefs->SetCapacity(gHashTable->EntryCount()); >+- for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { >+- Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref; >+- >+- if (!pref->MustSendToContentProcesses()) { >+- // The pref value hasn't changed since it was initialized at startup. >+- // Don't bother sending it, because the content process will initialize >+- // it the same way. >+- continue; >+- } >+- >+- if (pref->HasAdvisablySizedValues()) { >+- dom::Pref* setting = aDomPrefs->AppendElement(); >+- pref->ToDomPref(setting); >+- } >+- } >+-} >+- >+ #ifdef DEBUG >+ bool >+-Preferences::AreAllPrefsSetInContentProcess() >++Preferences::ArePrefsInitedInContentProcess() >+ { >+ MOZ_ASSERT(!XRE_IsParentProcess()); >+- return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet; >++ return gContentProcessPrefsAreInited; >+ } >+ #endif >+ >+diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h >+index 0d976483daae..901425b5b663 100644 >+--- modules/libpref/Preferences.h >++++ modules/libpref/Preferences.h >+@@ -328,15 +328,10 @@ public: >+ const char* aPref, >+ float aDefault = 0.0f); >+ >+- // When a content process is created these methods are used to pass prefs in >+- // bulk from the parent process. "Early" preferences are ones that are needed >+- // very early on in the content process's lifetime; they are passed via a >+- // special shared memory segment. "Late" preferences are the remainder, which >+- // are passed via a standard IPC message. >+- static void SerializeEarlyPreferences(nsCString& aStr); >+- static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen); >+- static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings); >+- static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings); >++ // When a content process is created these methods are used to pass changed >++ // prefs in bulk from the parent process, via shared memory. >++ static void SerializePreferences(nsCString& aStr); >++ static void DeserializePreferences(char* aStr, size_t aPrefsLen); >+ >+ // When a single pref is changed in the parent process, these methods are >+ // used to pass the update to content processes. >+@@ -344,7 +339,7 @@ public: >+ static void SetPreference(const dom::Pref& aPref); >+ >+ #ifdef DEBUG >+- static bool AreAllPrefsSetInContentProcess(); >++ static bool ArePrefsInitedInContentProcess(); >+ #endif >+ >+ static void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf, >diff --git a/www/firefox/files/patch-z-bug517422 b/www/firefox/files/patch-z-bug517422 >index a3ce1fe5b450..9b041089be3f 100644 >--- a/www/firefox/files/patch-z-bug517422 >+++ b/www/firefox/files/patch-z-bug517422 >@@ -160,7 +160,7 @@ diff --git dom/media/moz.build dom/media/moz.build > index 86b051c58d33..fb6186dce78b 100644 > --- dom/media/moz.build > +++ dom/media/moz.build >-@@ -318,6 +318,21 @@ if CONFIG['MOZ_WEBRTC']: >+@@ -326,6 +326,21 @@ if CONFIG['MOZ_WEBRTC']: > > DEFINES['MOZILLA_INTERNAL_API'] = True > >@@ -179,16 +179,16 @@ index 86b051c58d33..fb6186dce78b 100644 > +if CONFIG['MOZ_SYSTEM_SOUNDTOUCH']: > + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] > + >- if CONFIG['MOZ_ANDROID_HLS_SUPPORT'] and CONFIG['MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE']: >+ if CONFIG['MOZ_ANDROID_HLS_SUPPORT']: > DEFINES['MOZ_ANDROID_HLS_SUPPORT'] = True > > diff --git dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp > index 078f6ea5ef60..c600db067539 100644 > --- dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp > +++ dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp >-@@ -11,9 +11,13 @@ >- #include "prmem.h" >- #include "prlink.h" >+@@ -15,9 +15,13 @@ >+ #include <windows.h> >+ #endif > > +#ifdef MOZ_SYSTEM_SOUNDTOUCH > +#include "nsXPCOMPrivate.h" // for XUL_DLL >@@ -200,7 +200,7 @@ index 078f6ea5ef60..c600db067539 100644 > > namespace mozilla { > >-@@ -54,6 +58,12 @@ FFVPXRuntimeLinker::Init() >+@@ -64,6 +68,12 @@ FFVPXRuntimeLinker::Init() > > sLinkStatus = LinkStatus_FAILED; > >@@ -212,13 +212,13 @@ index 078f6ea5ef60..c600db067539 100644 > +#else > // We retrieve the path of the lgpllibs library as this is where mozavcodec > // and mozavutil libs are located. >- char* lgpllibsname = PR_GetLibraryName(nullptr, "lgpllibs"); >-@@ -64,6 +74,7 @@ FFVPXRuntimeLinker::Init() >- PR_GetLibraryFilePathname(lgpllibsname, >- (PRFuncPtr)&soundtouch::SoundTouch::getVersionId); >- PR_FreeLibraryName(lgpllibsname); >+ PathString lgpllibsname = GetLibraryName(nullptr, "lgpllibs"); >+@@ -73,6 +83,7 @@ FFVPXRuntimeLinker::Init() >+ PathString path = >+ GetLibraryFilePathname(lgpllibsname.get(), >+ (PRFuncPtr)&soundtouch::SoundTouch::getVersionId); > +#endif >- if (!path) { >+ if (path.IsEmpty()) { > return false; > } > diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA >@@ -342,7 +342,7 @@ index b614eef85c89..85f9099dba4d 100644 > +MOZ_SYSTEM_OGG=) > + > +if test -n "$MOZ_SYSTEM_OGG"; then >-+ PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.3.0) >++ PKG_CHECK_MODULES(MOZ_OGG, ogg >= 1.3.3) > + > + _SAVE_LIBS=$LIBS > + LIBS="$LIBS $MOZ_OGG_LIBS" >@@ -363,7 +363,7 @@ index b614eef85c89..85f9099dba4d 100644 > +MOZ_SYSTEM_VORBIS=) > + > +if test -n "$MOZ_SYSTEM_VORBIS"; then >-+ PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.5) >++ PKG_CHECK_MODULES(MOZ_VORBIS, vorbis vorbisenc >= 1.3.6) > +fi > + > +AC_SUBST(MOZ_SYSTEM_VORBIS)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 226476
:
191341
|
191460
|
191546
|
191556
|
191654
|
191746
|
191780
|
191860
|
191963
|
192155
|
192238
|
192374
|
192488
|
192576
|
192684
Working