From b218d110e246f2863917004f0034558d3c7b255b Mon Sep 17 00:00:00 2001 From: Jan Beich Date: Mon, 7 May 2018 20:33:22 +0000 Subject: [PATCH] MFH: r468751 r468754 r468985 r469332 www/firefox: update to 60.0 - Add U2F support, required by Web Authentication [1] - Drop libv4l support to reduce maintenance Changes: https://www.mozilla.org/firefox/60.0/releasenotes/ PR: 226476 Tested by: tobik, jrm, D. Ebdrup, lwhsu Submitted by: Greg V [1] Security: 5aefc41e-d304-4ec8-8c82-824f84f08244 Approved by: ports-secteam blanket Differential Revision: https://reviews.freebsd.org/D15186 --- Mk/Uses/gecko.mk | 4 +- Mk/bsd.gecko.mk | 2 +- www/firefox-i18n/Makefile | 7 +- 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-bug1375074 | 82 + www/firefox/files/patch-bug1433747 | 24 - www/firefox/files/patch-bug1438678 | 1000 + www/firefox/files/patch-bug1442583 | 39 + www/firefox/files/patch-bug1444083 | 17 - www/firefox/files/patch-bug1444798 | 14 +- www/firefox/files/patch-bug1445907 | 75 + www/firefox/files/patch-bug1447359 | 45 + www/firefox/files/patch-bug1447925 | 447 - www/firefox/files/patch-bug1451292 | 33 + www/firefox/files/patch-bug1452041 | 28 - www/firefox/files/patch-bug1456556 | 22 + www/firefox/files/patch-bug826985 | 171 - www/firefox/files/patch-u2f-hid-rs62 | 31339 +++++++++++++++++++++++++ www/firefox/files/patch-z-bug1436911 | 1162 + www/firefox/files/patch-z-bug517422 | 28 +- www/firefox/pkg-message | 1 - 26 files changed, 34301 insertions(+), 1136 deletions(-) create mode 100644 www/firefox/files/patch-bug1375074 delete mode 100644 www/firefox/files/patch-bug1433747 create mode 100644 www/firefox/files/patch-bug1438678 create mode 100644 www/firefox/files/patch-bug1442583 delete mode 100644 www/firefox/files/patch-bug1444083 create mode 100644 www/firefox/files/patch-bug1445907 create mode 100644 www/firefox/files/patch-bug1447359 delete mode 100644 www/firefox/files/patch-bug1447925 create mode 100644 www/firefox/files/patch-bug1451292 delete mode 100644 www/firefox/files/patch-bug1452041 create mode 100644 www/firefox/files/patch-bug1456556 delete mode 100644 www/firefox/files/patch-bug826985 create mode 100644 www/firefox/files/patch-u2f-hid-rs62 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 448e01d4a99b..edc1c0a613a6 100644 --- a/www/firefox-i18n/Makefile +++ b/www/firefox-i18n/Makefile @@ -2,10 +2,11 @@ # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 59.0.3 +PORTVERSION= 60.0 +PORTREVISION= 1 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build2/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} @@ -15,7 +16,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 6797519cec4c..2b67a9b2206d 100644 --- a/www/firefox-i18n/distinfo +++ b/www/firefox-i18n/distinfo @@ -1,195 +1,197 @@ -TIMESTAMP = 1523300563 -SHA256 (xpi/firefox-i18n-59.0.3/ach.xpi) = 06dd753f88bf6be664f5a5dc4de06a8df27848c054477655c33a9fe2dd280353 -SIZE (xpi/firefox-i18n-59.0.3/ach.xpi) = 439227 -SHA256 (xpi/firefox-i18n-59.0.3/af.xpi) = 68a33f07bb31865fa37240eea364b483e9810055263bdb8e042e601f1dca81dd -SIZE (xpi/firefox-i18n-59.0.3/af.xpi) = 436731 -SHA256 (xpi/firefox-i18n-59.0.3/an.xpi) = f83f8613fd4d1de4a2e43781f26319b875a25c453d92fc7c45ab9f8ac5dd334e -SIZE (xpi/firefox-i18n-59.0.3/an.xpi) = 463405 -SHA256 (xpi/firefox-i18n-59.0.3/ar.xpi) = a52c055d47e2b9a82f839afb92d3e08999ac7b1dd0811c685ded4ec1f9cdf8b9 -SIZE (xpi/firefox-i18n-59.0.3/ar.xpi) = 486633 -SHA256 (xpi/firefox-i18n-59.0.3/as.xpi) = 257b2ae2d7e184e1a32bc50f329b723281513c8bbefb0ff377cec9d1384e6e55 -SIZE (xpi/firefox-i18n-59.0.3/as.xpi) = 483301 -SHA256 (xpi/firefox-i18n-59.0.3/ast.xpi) = c4d019603fd3ce9f54e6be434b6899956f4638e7421eb871cae40581e2a2b0f5 -SIZE (xpi/firefox-i18n-59.0.3/ast.xpi) = 454343 -SHA256 (xpi/firefox-i18n-59.0.3/az.xpi) = 8ad6d99cc19af9aa30edcc8f82d0d3996c2eef084174f273c5b4aecc231fe676 -SIZE (xpi/firefox-i18n-59.0.3/az.xpi) = 464270 -SHA256 (xpi/firefox-i18n-59.0.3/be.xpi) = 6cbc8c62d376f9aa19481ef9c2e910ade525f0a9e4e49e129be26561b980627d -SIZE (xpi/firefox-i18n-59.0.3/be.xpi) = 517059 -SHA256 (xpi/firefox-i18n-59.0.3/bg.xpi) = 63d4200f9c90a00aaa8bdf8f9344e89aade1c7fbf2a896a5f0bc886f1de488a9 -SIZE (xpi/firefox-i18n-59.0.3/bg.xpi) = 508613 -SHA256 (xpi/firefox-i18n-59.0.3/bn-BD.xpi) = 64106dc208f0c6101c8674f3745f950a18c6e9cbf0a558b871bbcef56bea931f -SIZE (xpi/firefox-i18n-59.0.3/bn-BD.xpi) = 526352 -SHA256 (xpi/firefox-i18n-59.0.3/bn-IN.xpi) = 644eea832e118992cf7f1d80534222840056693bc76c181a825bbb3d2afc642b -SIZE (xpi/firefox-i18n-59.0.3/bn-IN.xpi) = 510797 -SHA256 (xpi/firefox-i18n-59.0.3/br.xpi) = 013a5fcbc73528684b740d57b6da6960f6c340f74f6d942cdcef0b9f3d719562 -SIZE (xpi/firefox-i18n-59.0.3/br.xpi) = 451719 -SHA256 (xpi/firefox-i18n-59.0.3/bs.xpi) = bd7ea4447a8f58954fc560390085ae5ef706b97c9fbb8d502664322173adde7c -SIZE (xpi/firefox-i18n-59.0.3/bs.xpi) = 457859 -SHA256 (xpi/firefox-i18n-59.0.3/ca.xpi) = e75450e9d595cc4bbccd42e9b667f11f52b3e2a68f3a1640d29bec22c34eee02 -SIZE (xpi/firefox-i18n-59.0.3/ca.xpi) = 464912 -SHA256 (xpi/firefox-i18n-59.0.3/cak.xpi) = d46b1c72a8e235649ba7c084fff07f647912220aa39e2294e1bda8062b38b2fc -SIZE (xpi/firefox-i18n-59.0.3/cak.xpi) = 475234 -SHA256 (xpi/firefox-i18n-59.0.3/cs.xpi) = 8d3f598dd3202ac83e248f57d698d9984b4505c7dc8626416557999519ac28ca -SIZE (xpi/firefox-i18n-59.0.3/cs.xpi) = 471575 -SHA256 (xpi/firefox-i18n-59.0.3/cy.xpi) = d4428b881f7065f7620857e8bdd5ac7939b655d725db33b2d5130b116595d650 -SIZE (xpi/firefox-i18n-59.0.3/cy.xpi) = 454433 -SHA256 (xpi/firefox-i18n-59.0.3/da.xpi) = 6ab8ffc013234f75a9ee3e07a8637c167ba270d899e943ee2a11b732353da72c -SIZE (xpi/firefox-i18n-59.0.3/da.xpi) = 446949 -SHA256 (xpi/firefox-i18n-59.0.3/de.xpi) = db7755056efbdba6389e21b27a5d073773a21d5bccc2a84a2cad2a69304548bf -SIZE (xpi/firefox-i18n-59.0.3/de.xpi) = 466273 -SHA256 (xpi/firefox-i18n-59.0.3/dsb.xpi) = 6b1beb2d308760c144db97907b6aa82520cbf57c6758724237fb667672ae202f -SIZE (xpi/firefox-i18n-59.0.3/dsb.xpi) = 478975 -SHA256 (xpi/firefox-i18n-59.0.3/el.xpi) = a5924bcc22cab458fadf536d3b3e98722e334258b2dabfad361e5cfdd3841efa -SIZE (xpi/firefox-i18n-59.0.3/el.xpi) = 531408 -SHA256 (xpi/firefox-i18n-59.0.3/en-GB.xpi) = 6e158b8913687702e5dd5c2c5eeed87fddb05bfecc5532abdae746d0f5ca7cfd -SIZE (xpi/firefox-i18n-59.0.3/en-GB.xpi) = 434300 -SHA256 (xpi/firefox-i18n-59.0.3/en-US.xpi) = 6689da05ad8576f85451123cd830d417259fab9d95900b10da196264df94fec3 -SIZE (xpi/firefox-i18n-59.0.3/en-US.xpi) = 432750 -SHA256 (xpi/firefox-i18n-59.0.3/en-ZA.xpi) = ff13ae647fd1008a4b75417186c11c4f745786c943523cd5033453f172e3795e -SIZE (xpi/firefox-i18n-59.0.3/en-ZA.xpi) = 427366 -SHA256 (xpi/firefox-i18n-59.0.3/eo.xpi) = e653e6a9da80065bc14141e7b0aa222d08024ace9569a4dcdefd6f40fe0af01c -SIZE (xpi/firefox-i18n-59.0.3/eo.xpi) = 453366 -SHA256 (xpi/firefox-i18n-59.0.3/es-AR.xpi) = a2f3f188a13f48cee71f07da1c293cc8a0d8afdfdccce5278333eb41cb84b0a2 -SIZE (xpi/firefox-i18n-59.0.3/es-AR.xpi) = 461799 -SHA256 (xpi/firefox-i18n-59.0.3/es-CL.xpi) = e392ef67e5b186f04e8b35578a3025df37ed6862b175356cbd549117fee542f8 -SIZE (xpi/firefox-i18n-59.0.3/es-CL.xpi) = 464655 -SHA256 (xpi/firefox-i18n-59.0.3/es-ES.xpi) = 76daa3775e21047d2dea9374e595b76ba5b4e385035852ae23e8b6a5b6c50b96 -SIZE (xpi/firefox-i18n-59.0.3/es-ES.xpi) = 348464 -SHA256 (xpi/firefox-i18n-59.0.3/es-MX.xpi) = 38740927f69592fc9b4d3dbc02e7a3a55a2854781a429ff3579bdc9c088ae15d -SIZE (xpi/firefox-i18n-59.0.3/es-MX.xpi) = 466313 -SHA256 (xpi/firefox-i18n-59.0.3/et.xpi) = d0e661fbeb119eecbca79faf0049c64a80a5ddd0d2348029b458248a85012831 -SIZE (xpi/firefox-i18n-59.0.3/et.xpi) = 445395 -SHA256 (xpi/firefox-i18n-59.0.3/eu.xpi) = 6d577aa1cd4144e041d3b4c1ff3f89373d9f17a36f64d62f07abf3b65e980062 -SIZE (xpi/firefox-i18n-59.0.3/eu.xpi) = 455237 -SHA256 (xpi/firefox-i18n-59.0.3/fa.xpi) = 781d14437c3c35ab61bf6c13634c9fa72ad7b61875961b15c35d79d71383627d -SIZE (xpi/firefox-i18n-59.0.3/fa.xpi) = 508099 -SHA256 (xpi/firefox-i18n-59.0.3/ff.xpi) = 72cffb096c9efd8c3f4a19238e79dc1dcd785cbaaa01f801cb4696a6a15c9b18 -SIZE (xpi/firefox-i18n-59.0.3/ff.xpi) = 455026 -SHA256 (xpi/firefox-i18n-59.0.3/fi.xpi) = cf31fb8bea5f461ca4d1a7c36d6179aa9325aa67814868286039795fbcf105c8 -SIZE (xpi/firefox-i18n-59.0.3/fi.xpi) = 445183 -SHA256 (xpi/firefox-i18n-59.0.3/fr.xpi) = c7a0f75967675295cff14826efc9cc92a813ade46d6e2a10f417d6ce9255556e -SIZE (xpi/firefox-i18n-59.0.3/fr.xpi) = 473593 -SHA256 (xpi/firefox-i18n-59.0.3/fy-NL.xpi) = 6946e20c0e87847fd53fb5413df656412b0736d1efe42ef22e930533cf7de8f5 -SIZE (xpi/firefox-i18n-59.0.3/fy-NL.xpi) = 462919 -SHA256 (xpi/firefox-i18n-59.0.3/ga-IE.xpi) = 084d26f17b9cbdb87d7e69bb0ea3d1d839de7a89627cbd9b5cded45d1b8fb97b -SIZE (xpi/firefox-i18n-59.0.3/ga-IE.xpi) = 471909 -SHA256 (xpi/firefox-i18n-59.0.3/gd.xpi) = 4f70d89eef94f99c12b8cc9d6cfa95ba6cdb19d0e9ec34378b613a8c8334398b -SIZE (xpi/firefox-i18n-59.0.3/gd.xpi) = 461298 -SHA256 (xpi/firefox-i18n-59.0.3/gl.xpi) = c0d7da2c88c05bcda0945c586957ed1c16114270c53bcdc7c9c757519a0b377a -SIZE (xpi/firefox-i18n-59.0.3/gl.xpi) = 441615 -SHA256 (xpi/firefox-i18n-59.0.3/gn.xpi) = df391c9810555bbdbb90567d339301c0ad74adb88ea32525d97f450562bde577 -SIZE (xpi/firefox-i18n-59.0.3/gn.xpi) = 469398 -SHA256 (xpi/firefox-i18n-59.0.3/gu-IN.xpi) = 2f12ae01fa832a36de3d38c7f3889044e792300dd7eed24c82ad7cd78ca7dfc0 -SIZE (xpi/firefox-i18n-59.0.3/gu-IN.xpi) = 521805 -SHA256 (xpi/firefox-i18n-59.0.3/he.xpi) = 317ffd3182c7648e69040f5a3f376311853effe9fab1bc2b5ae358b96d02f88d -SIZE (xpi/firefox-i18n-59.0.3/he.xpi) = 472771 -SHA256 (xpi/firefox-i18n-59.0.3/hi-IN.xpi) = c7e790e3b4a68dd5f1b728effd78fccb7c620f304176e819f439bc832cb6f18a -SIZE (xpi/firefox-i18n-59.0.3/hi-IN.xpi) = 524280 -SHA256 (xpi/firefox-i18n-59.0.3/hr.xpi) = af04dc06275e503bb67e1a9055c46499bd6bc36a8152e8d55e8725ebbba8cdd6 -SIZE (xpi/firefox-i18n-59.0.3/hr.xpi) = 459978 -SHA256 (xpi/firefox-i18n-59.0.3/hsb.xpi) = 69e05c75c04e18d5f0c80a2d4e8294d9e57ffefec73e2320d40ab0636fa55943 -SIZE (xpi/firefox-i18n-59.0.3/hsb.xpi) = 475941 -SHA256 (xpi/firefox-i18n-59.0.3/hu.xpi) = 3ce07eb573c5c3deaa84dc769390303a5560752ceade43cb393b59800008eea7 -SIZE (xpi/firefox-i18n-59.0.3/hu.xpi) = 476897 -SHA256 (xpi/firefox-i18n-59.0.3/hy-AM.xpi) = 472fc9816562ec89a73ddab93639a7230e7896ed9be668d8aab403aa32497d37 -SIZE (xpi/firefox-i18n-59.0.3/hy-AM.xpi) = 508168 -SHA256 (xpi/firefox-i18n-59.0.3/ia.xpi) = 1df302fd1f242f6afe09a374d5f5849f0f6f68fbb5324deae27d88d5b991f694 -SIZE (xpi/firefox-i18n-59.0.3/ia.xpi) = 448830 -SHA256 (xpi/firefox-i18n-59.0.3/id.xpi) = 621affe22e7de3305dcf92c48ff6ff6ea00ace40027b576cbee07d3f24064b39 -SIZE (xpi/firefox-i18n-59.0.3/id.xpi) = 441953 -SHA256 (xpi/firefox-i18n-59.0.3/is.xpi) = ee4eec709f3628c74723c0f2dc36d129494bdeec650408f53ab713fe4852e675 -SIZE (xpi/firefox-i18n-59.0.3/is.xpi) = 451373 -SHA256 (xpi/firefox-i18n-59.0.3/it.xpi) = 62b0fab1268410250fdaa3efbb224af67562b4fd06cf5398a4b2f83a9bf8fae8 -SIZE (xpi/firefox-i18n-59.0.3/it.xpi) = 342524 -SHA256 (xpi/firefox-i18n-59.0.3/ja.xpi) = 2690d105dcfe2f336b0b2e6eed421b6724920860f18b6cbab5cfd6a3233bd7c8 -SIZE (xpi/firefox-i18n-59.0.3/ja.xpi) = 508147 -SHA256 (xpi/firefox-i18n-59.0.3/ka.xpi) = 35493638aebddca2525c484c0fee3019363a678539539a3c7622838d229ddf5c -SIZE (xpi/firefox-i18n-59.0.3/ka.xpi) = 492569 -SHA256 (xpi/firefox-i18n-59.0.3/kab.xpi) = 6a6f00374b8467238d6ab6a859bf08e6b94d82e89abe8d0044f3c43bd3b3f3c2 -SIZE (xpi/firefox-i18n-59.0.3/kab.xpi) = 461840 -SHA256 (xpi/firefox-i18n-59.0.3/kk.xpi) = 3ba09badbdbcabe972f5fa9663b0c6026911755f1865d357612362547670e58f -SIZE (xpi/firefox-i18n-59.0.3/kk.xpi) = 517585 -SHA256 (xpi/firefox-i18n-59.0.3/km.xpi) = ff01a1481e27d3b30d5fb4989d5343e3a5d68598a7dff9b3ba53a797ea50eefe -SIZE (xpi/firefox-i18n-59.0.3/km.xpi) = 526359 -SHA256 (xpi/firefox-i18n-59.0.3/kn.xpi) = adb9e3ccc561ee6251f998224438e287a059002693c32dd5f10d67abd365c75e -SIZE (xpi/firefox-i18n-59.0.3/kn.xpi) = 527879 -SHA256 (xpi/firefox-i18n-59.0.3/ko.xpi) = 5c64386aa45b42da7440c97ecf2dc54e90fccabd48b4370e545a92bd33951d3e -SIZE (xpi/firefox-i18n-59.0.3/ko.xpi) = 487661 -SHA256 (xpi/firefox-i18n-59.0.3/lij.xpi) = 0ee0b05d4938b8a30b22bfbfe2252bffe66a4dd7413160e0c96a687362b83ebf -SIZE (xpi/firefox-i18n-59.0.3/lij.xpi) = 446606 -SHA256 (xpi/firefox-i18n-59.0.3/lt.xpi) = 628562e4eba12a848729991d397816fcaa5212e386a092e73573d5f4b26f3ef2 -SIZE (xpi/firefox-i18n-59.0.3/lt.xpi) = 475143 -SHA256 (xpi/firefox-i18n-59.0.3/lv.xpi) = 2ac502baba7b61fae56c1238c88bc0fed9e1ad946016c4e5abac7b26d0c5e8ef -SIZE (xpi/firefox-i18n-59.0.3/lv.xpi) = 463655 -SHA256 (xpi/firefox-i18n-59.0.3/mai.xpi) = 8bbcd4a2ee41e02f57bc71de7ef95cf8cca38f1f762b5f67467bfc48f38f198b -SIZE (xpi/firefox-i18n-59.0.3/mai.xpi) = 499910 -SHA256 (xpi/firefox-i18n-59.0.3/mk.xpi) = 3d1c93031fb4ee9b017305f33d7990a6cae03371260375c9b92bea608e4134e9 -SIZE (xpi/firefox-i18n-59.0.3/mk.xpi) = 484076 -SHA256 (xpi/firefox-i18n-59.0.3/ml.xpi) = 826338ba6e1793c8712a52026bde36a1545e96d297f2672cb263c5b3e895e819 -SIZE (xpi/firefox-i18n-59.0.3/ml.xpi) = 539736 -SHA256 (xpi/firefox-i18n-59.0.3/mr.xpi) = 19f22284997f83f3898513d28ff77248564bcad5f251663be305e9794a83df85 -SIZE (xpi/firefox-i18n-59.0.3/mr.xpi) = 517961 -SHA256 (xpi/firefox-i18n-59.0.3/ms.xpi) = 198d6644796e1b0d2202541aca0bdd3ac8571575b061142b424d40a698f5a6a3 -SIZE (xpi/firefox-i18n-59.0.3/ms.xpi) = 450076 -SHA256 (xpi/firefox-i18n-59.0.3/my.xpi) = c74d46816b58fda85c297d9fad7daaf0f7f5d09167c5439c805081065b260732 -SIZE (xpi/firefox-i18n-59.0.3/my.xpi) = 511894 -SHA256 (xpi/firefox-i18n-59.0.3/nb-NO.xpi) = a54871fbb9632c1f086537a60a9a5eee04a6c74928e7b8905c8b7dd3a0141438 -SIZE (xpi/firefox-i18n-59.0.3/nb-NO.xpi) = 450276 -SHA256 (xpi/firefox-i18n-59.0.3/ne-NP.xpi) = f9ac85b3bb0e3ad2e1ed69722e33670989bd21ff7c729c5580b420a8d90096bc -SIZE (xpi/firefox-i18n-59.0.3/ne-NP.xpi) = 509177 -SHA256 (xpi/firefox-i18n-59.0.3/nl.xpi) = c6eb222bd0f876ad03517388dc91f48e1e31b2374e047368af756e5ab18c2f7b -SIZE (xpi/firefox-i18n-59.0.3/nl.xpi) = 458129 -SHA256 (xpi/firefox-i18n-59.0.3/nn-NO.xpi) = 623def8c8b87cb6283de5cc1e7453eae31eca83c1c1b30f8ea71d9bd8c6d71ed -SIZE (xpi/firefox-i18n-59.0.3/nn-NO.xpi) = 451471 -SHA256 (xpi/firefox-i18n-59.0.3/or.xpi) = f30b95af5fd94ac73986643f349140dc4adc1a652b10a3cd6effa05d4f75e724 -SIZE (xpi/firefox-i18n-59.0.3/or.xpi) = 493181 -SHA256 (xpi/firefox-i18n-59.0.3/pa-IN.xpi) = 05f0fd798185c7dcbf1fd90b046a57f07fc768b307cfc6d647da52b1109c95dc -SIZE (xpi/firefox-i18n-59.0.3/pa-IN.xpi) = 492420 -SHA256 (xpi/firefox-i18n-59.0.3/pl.xpi) = 483be94d1dadcde125440abfaea67569207a288a1e3b389500fcf5365c56b463 -SIZE (xpi/firefox-i18n-59.0.3/pl.xpi) = 358511 -SHA256 (xpi/firefox-i18n-59.0.3/pt-BR.xpi) = 71b725304ff312cef9792c0163970288dea1739669ea275836f5c10685fc827c -SIZE (xpi/firefox-i18n-59.0.3/pt-BR.xpi) = 455916 -SHA256 (xpi/firefox-i18n-59.0.3/pt-PT.xpi) = 929fb40a32904905f8cce947dcf5824128706e8edf257cb9b4655042dd9e7f91 -SIZE (xpi/firefox-i18n-59.0.3/pt-PT.xpi) = 459332 -SHA256 (xpi/firefox-i18n-59.0.3/rm.xpi) = 6d1d9e6725aa0c9fecf6a1f110b74c384bdd99517ecaf9070983d8b4ab620aa7 -SIZE (xpi/firefox-i18n-59.0.3/rm.xpi) = 449757 -SHA256 (xpi/firefox-i18n-59.0.3/ro.xpi) = 9a5c32830bd2d96a1203a97c0129526f55f76adf7d6c671af861ef3dee76f776 -SIZE (xpi/firefox-i18n-59.0.3/ro.xpi) = 453403 -SHA256 (xpi/firefox-i18n-59.0.3/ru.xpi) = 7f2935b9d0ad57e718adc56bc15f76063b12ca75de633439ed318006ba903f7b -SIZE (xpi/firefox-i18n-59.0.3/ru.xpi) = 526523 -SHA256 (xpi/firefox-i18n-59.0.3/si.xpi) = 0c7c34a39a10e3937b1ba88eaa1806a378bd60bb4409c1223e946d2ae60454b1 -SIZE (xpi/firefox-i18n-59.0.3/si.xpi) = 492588 -SHA256 (xpi/firefox-i18n-59.0.3/sk.xpi) = 2f437d36423bcbe759414275707d56cc966f653bb908e5a9d27642a4c9e2774c -SIZE (xpi/firefox-i18n-59.0.3/sk.xpi) = 480814 -SHA256 (xpi/firefox-i18n-59.0.3/sl.xpi) = d7d37ff69c626984d2afa6598a51d0c7c7b0d97a986ee043522e00447734916e -SIZE (xpi/firefox-i18n-59.0.3/sl.xpi) = 458825 -SHA256 (xpi/firefox-i18n-59.0.3/son.xpi) = c2f95dfeff2b70e5037ddd21fcce03fa149a9d88e578aa6ed1105d2407c1f134 -SIZE (xpi/firefox-i18n-59.0.3/son.xpi) = 446400 -SHA256 (xpi/firefox-i18n-59.0.3/sq.xpi) = 10ecd6c1e5cba90243792f25cf095d560b04599c25ef4949e8e388cbe27194cb -SIZE (xpi/firefox-i18n-59.0.3/sq.xpi) = 464463 -SHA256 (xpi/firefox-i18n-59.0.3/sr.xpi) = 922eccb1b2494fbbb21a6fe167c7c662f1a02a97ea0f65e717439de5105d1254 -SIZE (xpi/firefox-i18n-59.0.3/sr.xpi) = 486178 -SHA256 (xpi/firefox-i18n-59.0.3/sv-SE.xpi) = 2868e85661001cdeb5614cb0614cf3f57633c5b209de25985807931ce9852b72 -SIZE (xpi/firefox-i18n-59.0.3/sv-SE.xpi) = 458660 -SHA256 (xpi/firefox-i18n-59.0.3/ta.xpi) = e3a4daaec520c6e77847d08ad55e8aa8621fe42b56c2718a9dc45bae87804f15 -SIZE (xpi/firefox-i18n-59.0.3/ta.xpi) = 512843 -SHA256 (xpi/firefox-i18n-59.0.3/te.xpi) = 56b6d302449c85b303731345800b47fc1de35d3cfeb6dccb378c48bc069fbc64 -SIZE (xpi/firefox-i18n-59.0.3/te.xpi) = 527083 -SHA256 (xpi/firefox-i18n-59.0.3/th.xpi) = abd934377157ba71fecfa920b2883fde7ba7168575af768bdcb19356ea5f1174 -SIZE (xpi/firefox-i18n-59.0.3/th.xpi) = 498544 -SHA256 (xpi/firefox-i18n-59.0.3/tr.xpi) = 285ef8a6d8669ac9d5b6f2e2ae55b36bb2bb21d8230df405f0489714539fe391 -SIZE (xpi/firefox-i18n-59.0.3/tr.xpi) = 463594 -SHA256 (xpi/firefox-i18n-59.0.3/uk.xpi) = ab3add6611225fd7b65e0e1481e15cae1f5ae98bf058587f64f7f5db40b42d8d -SIZE (xpi/firefox-i18n-59.0.3/uk.xpi) = 516926 -SHA256 (xpi/firefox-i18n-59.0.3/ur.xpi) = 2ca831b51bfefcd70ed32b9c0490ac4e0c20e590e3d56bf0d466f9ca0773dae3 -SIZE (xpi/firefox-i18n-59.0.3/ur.xpi) = 507380 -SHA256 (xpi/firefox-i18n-59.0.3/uz.xpi) = aa8862d2b3bec4e9d0382e683b109b14f927093ad053133ba0b2ea6d7ee9236e -SIZE (xpi/firefox-i18n-59.0.3/uz.xpi) = 456924 -SHA256 (xpi/firefox-i18n-59.0.3/vi.xpi) = 3e25ecc2252c6c747bd339d4ddf55ba45660792126e1f99f0ff393aeec89b70a -SIZE (xpi/firefox-i18n-59.0.3/vi.xpi) = 470070 -SHA256 (xpi/firefox-i18n-59.0.3/xh.xpi) = ab168a5ff1b17c16a675710d8d69ac7213f1e36aa83ea36bd4aae437110c1242 -SIZE (xpi/firefox-i18n-59.0.3/xh.xpi) = 460772 -SHA256 (xpi/firefox-i18n-59.0.3/zh-CN.xpi) = b718831aa3a6fe3457b2afb6c7da092eec5c377b9a08a8061373f488bb0168a1 -SIZE (xpi/firefox-i18n-59.0.3/zh-CN.xpi) = 483449 -SHA256 (xpi/firefox-i18n-59.0.3/zh-TW.xpi) = eaabaa366bbe19fbd48a81c67c69ec949004a065ae217aea284dffefe92ad4ef -SIZE (xpi/firefox-i18n-59.0.3/zh-TW.xpi) = 477089 +TIMESTAMP = 1525366747 +SHA256 (xpi/firefox-i18n-60.0/ach.xpi) = 53d7cc8122d01405ff1e81cd59b99c534416c1a1e1740dd0536bbb608699bd48 +SIZE (xpi/firefox-i18n-60.0/ach.xpi) = 496060 +SHA256 (xpi/firefox-i18n-60.0/af.xpi) = 3c78e0128289c2a3ecefddbbb5488cb6324828606ef46ce083d3f9a39b9ad10e +SIZE (xpi/firefox-i18n-60.0/af.xpi) = 486533 +SHA256 (xpi/firefox-i18n-60.0/an.xpi) = 6ccafad26ff3dcb004eaa409d74b4edfe1a25d9802c7e195990ee23f2af780a4 +SIZE (xpi/firefox-i18n-60.0/an.xpi) = 519732 +SHA256 (xpi/firefox-i18n-60.0/ar.xpi) = 00349c780c191d8155af51dc725ea85a6288bc8a873d1d868e26a59c7491673f +SIZE (xpi/firefox-i18n-60.0/ar.xpi) = 546957 +SHA256 (xpi/firefox-i18n-60.0/as.xpi) = c54a2447f53163d087e7b30f4fd602efcbb77c3ef91a4102539f5df9cae4fcc8 +SIZE (xpi/firefox-i18n-60.0/as.xpi) = 529947 +SHA256 (xpi/firefox-i18n-60.0/ast.xpi) = 88d92a5714da612d52ff0b27165f285ba46ce384ddbdb835c0f6bf3bf939dd96 +SIZE (xpi/firefox-i18n-60.0/ast.xpi) = 507866 +SHA256 (xpi/firefox-i18n-60.0/az.xpi) = 4112937fafee628dc80007aba16b1173bc57d9a01155a5efe1fb0fadc7db79d7 +SIZE (xpi/firefox-i18n-60.0/az.xpi) = 523975 +SHA256 (xpi/firefox-i18n-60.0/be.xpi) = 746627277957930f0a8053c2efc742390fae80d8f087d47b213f188dd2264e09 +SIZE (xpi/firefox-i18n-60.0/be.xpi) = 579944 +SHA256 (xpi/firefox-i18n-60.0/bg.xpi) = b415ea936d517c061d0ebcf42e000ed13943c78ae188c20dc5d65c297670b7cd +SIZE (xpi/firefox-i18n-60.0/bg.xpi) = 573075 +SHA256 (xpi/firefox-i18n-60.0/bn-BD.xpi) = 179a1e8909f34bce3907d11140b467743e2c69a33374a7ef4f9db8dd36979520 +SIZE (xpi/firefox-i18n-60.0/bn-BD.xpi) = 589638 +SHA256 (xpi/firefox-i18n-60.0/bn-IN.xpi) = acea49db1052b5342929bb9f36131315820c1e94f9f9e0a4051644796d215bd9 +SIZE (xpi/firefox-i18n-60.0/bn-IN.xpi) = 570084 +SHA256 (xpi/firefox-i18n-60.0/br.xpi) = c5e18d9645a9f665a736c43ac4faa828728a145f3353b92b23949998d4fc2576 +SIZE (xpi/firefox-i18n-60.0/br.xpi) = 511252 +SHA256 (xpi/firefox-i18n-60.0/bs.xpi) = 67a2a2f68c8e9a6291750e0732c9532c314f8281777432372016b0d0fc3a90bd +SIZE (xpi/firefox-i18n-60.0/bs.xpi) = 513930 +SHA256 (xpi/firefox-i18n-60.0/ca.xpi) = bef4db01eb89d19a9e39a878d63c40346ce1eca72d4b4d47494ded1218842a3b +SIZE (xpi/firefox-i18n-60.0/ca.xpi) = 524485 +SHA256 (xpi/firefox-i18n-60.0/cak.xpi) = 8cd1a8564d4198c5827e04da24cdb684501818e62a610adfcb9001aa345934c6 +SIZE (xpi/firefox-i18n-60.0/cak.xpi) = 535507 +SHA256 (xpi/firefox-i18n-60.0/cs.xpi) = 356b5cf598d3cd435f891d1c734ff69477bb1a1260f6875b7127b55186c4cc0a +SIZE (xpi/firefox-i18n-60.0/cs.xpi) = 531020 +SHA256 (xpi/firefox-i18n-60.0/cy.xpi) = c4c9fc4017deb822cec90d20f214d6266e535e8f2e176dde95adb9e5541e2e50 +SIZE (xpi/firefox-i18n-60.0/cy.xpi) = 515865 +SHA256 (xpi/firefox-i18n-60.0/da.xpi) = be63221fc0247b234b13ae5f6d56ceab4bda666fc51d45ecca7f56a5827387b3 +SIZE (xpi/firefox-i18n-60.0/da.xpi) = 509983 +SHA256 (xpi/firefox-i18n-60.0/de.xpi) = 9ce175158ab0bcf2595d23558806e1ebe2e61d7e5794fa86c2e8e55b6fce0d59 +SIZE (xpi/firefox-i18n-60.0/de.xpi) = 525692 +SHA256 (xpi/firefox-i18n-60.0/dsb.xpi) = b9a8979417bafa03b161840e85b28f320fe2bc05d9a39243c67fcabc9588390e +SIZE (xpi/firefox-i18n-60.0/dsb.xpi) = 538745 +SHA256 (xpi/firefox-i18n-60.0/el.xpi) = b91bf759b261a3ae93f1fa12b46e429297b59e77975b1a0e023336540efbde51 +SIZE (xpi/firefox-i18n-60.0/el.xpi) = 592911 +SHA256 (xpi/firefox-i18n-60.0/en-GB.xpi) = 0e95284c878250498a1655136e39b5080aa0860b2784b2e9062222cda4922607 +SIZE (xpi/firefox-i18n-60.0/en-GB.xpi) = 490907 +SHA256 (xpi/firefox-i18n-60.0/en-US.xpi) = 303cb12f5dd7f14381050082d4408ee8354dd17c85ede7c8ecb9d86302230f8b +SIZE (xpi/firefox-i18n-60.0/en-US.xpi) = 472383 +SHA256 (xpi/firefox-i18n-60.0/en-ZA.xpi) = f04e1036bb18a910fb6eb82235c55919975405982829af81bf55a28b80a3a3d7 +SIZE (xpi/firefox-i18n-60.0/en-ZA.xpi) = 473893 +SHA256 (xpi/firefox-i18n-60.0/eo.xpi) = 2186dc82ada5a005af9f32c3804d27f430120f90c85aa81ab1fff62ef2f5ee19 +SIZE (xpi/firefox-i18n-60.0/eo.xpi) = 510486 +SHA256 (xpi/firefox-i18n-60.0/es-AR.xpi) = f8937590a4970febf434643f88b0c3b8dde9c8b487537e22be36fac85b82bfb9 +SIZE (xpi/firefox-i18n-60.0/es-AR.xpi) = 523825 +SHA256 (xpi/firefox-i18n-60.0/es-CL.xpi) = 72c7ff06f70d9c91e674ff4c5d5d5516d6bf94e6f537251360eae95b6031288d +SIZE (xpi/firefox-i18n-60.0/es-CL.xpi) = 526509 +SHA256 (xpi/firefox-i18n-60.0/es-ES.xpi) = 773edf9dd30c54aa7c635a061aecf4293397ee0bfe4a4ccd5456a7e848e11b2d +SIZE (xpi/firefox-i18n-60.0/es-ES.xpi) = 459145 +SHA256 (xpi/firefox-i18n-60.0/es-MX.xpi) = 15979a5de10cd774f9f0a3f2bd75120fcba0ddcdcee0e6a16827c4951b3de7c9 +SIZE (xpi/firefox-i18n-60.0/es-MX.xpi) = 527837 +SHA256 (xpi/firefox-i18n-60.0/et.xpi) = 486f6e09edf17a28592cca6cc1023ab6df0851a3579ad269158de9ea1736f798 +SIZE (xpi/firefox-i18n-60.0/et.xpi) = 504177 +SHA256 (xpi/firefox-i18n-60.0/eu.xpi) = aaa5de02e9f28d90638cf777986f240252d5573a4823630eb53b7f98e50b1520 +SIZE (xpi/firefox-i18n-60.0/eu.xpi) = 510932 +SHA256 (xpi/firefox-i18n-60.0/fa.xpi) = f1755e375399918d1ae5f96615ec35acf3e724706885f94807d1091072f98d94 +SIZE (xpi/firefox-i18n-60.0/fa.xpi) = 565492 +SHA256 (xpi/firefox-i18n-60.0/ff.xpi) = a948f479a0d09c6b8cd2315f4ce96a8e9039aae5d560eaf6e23a547426796867 +SIZE (xpi/firefox-i18n-60.0/ff.xpi) = 511431 +SHA256 (xpi/firefox-i18n-60.0/fi.xpi) = 341c660264866ee2dfd9f51e702aaf47752345747dd886b827c1fdb4dac88731 +SIZE (xpi/firefox-i18n-60.0/fi.xpi) = 505404 +SHA256 (xpi/firefox-i18n-60.0/fr.xpi) = 6a10513550ca1a215db66180b8de1901d12a9294d123c49ed3dffb671642f8a6 +SIZE (xpi/firefox-i18n-60.0/fr.xpi) = 535240 +SHA256 (xpi/firefox-i18n-60.0/fy-NL.xpi) = f5d1819926c65bef009d9f733bedc59fd611637b57625fb36d5578980d311a07 +SIZE (xpi/firefox-i18n-60.0/fy-NL.xpi) = 523737 +SHA256 (xpi/firefox-i18n-60.0/ga-IE.xpi) = d48d35bae701f7751da67f62c06e66fe7fb88e50f9a53058f1dacdeb93243f41 +SIZE (xpi/firefox-i18n-60.0/ga-IE.xpi) = 526201 +SHA256 (xpi/firefox-i18n-60.0/gd.xpi) = cf0e1ad45addf7385ae8b06588774b97c24f13c19bd6ab8a0ac092ad446eebed +SIZE (xpi/firefox-i18n-60.0/gd.xpi) = 520094 +SHA256 (xpi/firefox-i18n-60.0/gl.xpi) = b3d5f733d8b0054117c6699b869af92364c0635894ccceb1fd10a56bf88dec76 +SIZE (xpi/firefox-i18n-60.0/gl.xpi) = 496596 +SHA256 (xpi/firefox-i18n-60.0/gn.xpi) = 79049bd1ad1352d4821b56a21f8c938dc3f949a247f22ebd0be6238dedac8d16 +SIZE (xpi/firefox-i18n-60.0/gn.xpi) = 532445 +SHA256 (xpi/firefox-i18n-60.0/gu-IN.xpi) = d8867ddf68b99170e91bfc2a5d95822f72dd628227304d197e9c8b5594510c9f +SIZE (xpi/firefox-i18n-60.0/gu-IN.xpi) = 589477 +SHA256 (xpi/firefox-i18n-60.0/he.xpi) = efe697d5cc2489773084126fd9a09a1a326045c4d0bfb6dab879bf3f440bbb03 +SIZE (xpi/firefox-i18n-60.0/he.xpi) = 535208 +SHA256 (xpi/firefox-i18n-60.0/hi-IN.xpi) = cdde1b852744e0584b66aacf193c09b49891093147daa459ded7c586a9ae9216 +SIZE (xpi/firefox-i18n-60.0/hi-IN.xpi) = 590081 +SHA256 (xpi/firefox-i18n-60.0/hr.xpi) = e58a06aef947fef842813be2ad931ef02c57348e7f3fd405d73ebd05ac0ec4c7 +SIZE (xpi/firefox-i18n-60.0/hr.xpi) = 515190 +SHA256 (xpi/firefox-i18n-60.0/hsb.xpi) = 35efa8fe9d6a89a6fcc3178154c7912aa7b2b2be02cd9b926008c04f9e1b40fa +SIZE (xpi/firefox-i18n-60.0/hsb.xpi) = 536278 +SHA256 (xpi/firefox-i18n-60.0/hu.xpi) = 95e0ed5ea210dae542ebfdc9387d9bae4fde53c38f1be1d052e81bcd1afb043b +SIZE (xpi/firefox-i18n-60.0/hu.xpi) = 537586 +SHA256 (xpi/firefox-i18n-60.0/hy-AM.xpi) = 8e7b6ae85cb24a5a116d79b62282affaa9caad20284d2c784b7c0bf9ff54c257 +SIZE (xpi/firefox-i18n-60.0/hy-AM.xpi) = 568631 +SHA256 (xpi/firefox-i18n-60.0/ia.xpi) = 1268720677549267ea5d19b5632de38973922e4c72cf90910dd4234b3a514ffb +SIZE (xpi/firefox-i18n-60.0/ia.xpi) = 509952 +SHA256 (xpi/firefox-i18n-60.0/id.xpi) = 9ca9220d62f26530af4c5bdca44d0a5691130f77a6cefb3f8c5cb8ffce8f07c6 +SIZE (xpi/firefox-i18n-60.0/id.xpi) = 501456 +SHA256 (xpi/firefox-i18n-60.0/is.xpi) = 7ecdab2c648c439e93dacbe5aa37b25a4d42122dd62ff1784323c2a56edce473 +SIZE (xpi/firefox-i18n-60.0/is.xpi) = 512502 +SHA256 (xpi/firefox-i18n-60.0/it.xpi) = 4bdf67ee507fcf3c1e8cd16a22b7cf7c8bd2c7b9ab169b881588ccf7ebcd381b +SIZE (xpi/firefox-i18n-60.0/it.xpi) = 398258 +SHA256 (xpi/firefox-i18n-60.0/ja.xpi) = cea38dd41f439d52aebbb7133c83c655e5a7cda7b9244ca697605f5fb6e75bfd +SIZE (xpi/firefox-i18n-60.0/ja.xpi) = 571236 +SHA256 (xpi/firefox-i18n-60.0/ka.xpi) = d2d92cf67836a2d42cad40e08ec8093882085112f8e8c21f74241448bedf4155 +SIZE (xpi/firefox-i18n-60.0/ka.xpi) = 556067 +SHA256 (xpi/firefox-i18n-60.0/kab.xpi) = bbfb9a2a5b9375df9d82509a5b064c499013d1f02ea464dddb3b553bb776ec5a +SIZE (xpi/firefox-i18n-60.0/kab.xpi) = 519620 +SHA256 (xpi/firefox-i18n-60.0/kk.xpi) = c5c54c15910c2254180d72c10fa8ff1429c43625cbaaca0ab42e266ec850acbe +SIZE (xpi/firefox-i18n-60.0/kk.xpi) = 582208 +SHA256 (xpi/firefox-i18n-60.0/km.xpi) = 3506f2c645ad501fa133df2ca8af5e84458e641860e490ab297f3d3d2335b312 +SIZE (xpi/firefox-i18n-60.0/km.xpi) = 582334 +SHA256 (xpi/firefox-i18n-60.0/kn.xpi) = 0b084c1ad201d15851d8a6acc40b9bac020119175ec1edc390d39a7535abab13 +SIZE (xpi/firefox-i18n-60.0/kn.xpi) = 585100 +SHA256 (xpi/firefox-i18n-60.0/ko.xpi) = d450910b7e256a8599e4432ac49f758d7dd7b7b7ab74a1b0e1cd0c9717d79d1f +SIZE (xpi/firefox-i18n-60.0/ko.xpi) = 547048 +SHA256 (xpi/firefox-i18n-60.0/lij.xpi) = 7d47c90c77289f09f8356b5f42746f75dbd7a52efbacb056f832f980b7331083 +SIZE (xpi/firefox-i18n-60.0/lij.xpi) = 512398 +SHA256 (xpi/firefox-i18n-60.0/lt.xpi) = d614b06a18a7e59683733a21781a851879c31e46b0d345ec6efd49b774210a7d +SIZE (xpi/firefox-i18n-60.0/lt.xpi) = 535634 +SHA256 (xpi/firefox-i18n-60.0/lv.xpi) = 8f68a8ac9d8f7f7d1edcf1d59c8da5254efd1074ddb1e2038424bddb5a413e5d +SIZE (xpi/firefox-i18n-60.0/lv.xpi) = 525636 +SHA256 (xpi/firefox-i18n-60.0/mai.xpi) = 8331bda59001d53abeaf86dfbe649799077963ab4955a66b5caef11fb75894d5 +SIZE (xpi/firefox-i18n-60.0/mai.xpi) = 548470 +SHA256 (xpi/firefox-i18n-60.0/mk.xpi) = 81db9c67e886c57cc2d807bf977686ef4d03cabd4ac8e57eadbe7c68c683434b +SIZE (xpi/firefox-i18n-60.0/mk.xpi) = 513024 +SHA256 (xpi/firefox-i18n-60.0/ml.xpi) = 1a570596e6d9eebfd1b8e03d3d59ef300e977ac204fe707e333b0e389d3ba9cc +SIZE (xpi/firefox-i18n-60.0/ml.xpi) = 598200 +SHA256 (xpi/firefox-i18n-60.0/mr.xpi) = a1d26997a43b90384c97315f86aa8f1ef4af5c126fe6ba02310a21aa399fcfcc +SIZE (xpi/firefox-i18n-60.0/mr.xpi) = 578337 +SHA256 (xpi/firefox-i18n-60.0/ms.xpi) = 522bd4cf7016c2fe181f2a04a5661fd174152973e12a29447bb5d29054a76e16 +SIZE (xpi/firefox-i18n-60.0/ms.xpi) = 508782 +SHA256 (xpi/firefox-i18n-60.0/my.xpi) = 6e61fcd5a98e827db607622d185642ca34e81f84aa83c31508931681899d09a8 +SIZE (xpi/firefox-i18n-60.0/my.xpi) = 569576 +SHA256 (xpi/firefox-i18n-60.0/nb-NO.xpi) = 1f66db8430715fc22690ca5f002f5c60878725dc716131e9ab31bc2e90db0109 +SIZE (xpi/firefox-i18n-60.0/nb-NO.xpi) = 509096 +SHA256 (xpi/firefox-i18n-60.0/ne-NP.xpi) = 9b2827ca22212a947db237c11c94a69b207b4ca3786944f4fdefeaddd1741acb +SIZE (xpi/firefox-i18n-60.0/ne-NP.xpi) = 554576 +SHA256 (xpi/firefox-i18n-60.0/nl.xpi) = 3e7b4623d9390f6bac75368750561adc2599cf19c6a904c764947997bd161f53 +SIZE (xpi/firefox-i18n-60.0/nl.xpi) = 516657 +SHA256 (xpi/firefox-i18n-60.0/nn-NO.xpi) = 06fb56a442e7e1b0907e28617e98401ff88112d6af204a2af779e784ea81f079 +SIZE (xpi/firefox-i18n-60.0/nn-NO.xpi) = 510618 +SHA256 (xpi/firefox-i18n-60.0/oc.xpi) = ad506d782a522c982dfd200057c5adadf9fb28c39c133657713b6e5513454156 +SIZE (xpi/firefox-i18n-60.0/oc.xpi) = 526210 +SHA256 (xpi/firefox-i18n-60.0/or.xpi) = 8537d758630c17f66a3af3d4959e15a864eb34bf9988da6f2f0ffc8526712966 +SIZE (xpi/firefox-i18n-60.0/or.xpi) = 540093 +SHA256 (xpi/firefox-i18n-60.0/pa-IN.xpi) = 246cf5f518f27404e0eb71e4956c098ffd8f5c7cb0797d0be0510a4cda32f69a +SIZE (xpi/firefox-i18n-60.0/pa-IN.xpi) = 557089 +SHA256 (xpi/firefox-i18n-60.0/pl.xpi) = 5b191c59e194d40b2ff9e373fee2031d117c05e5ea95b5f3bb113b7bf971edc1 +SIZE (xpi/firefox-i18n-60.0/pl.xpi) = 418188 +SHA256 (xpi/firefox-i18n-60.0/pt-BR.xpi) = cd8bdb0b980942000164e9a5fc6a8774ce0976621f04e4500522789292b4186c +SIZE (xpi/firefox-i18n-60.0/pt-BR.xpi) = 513937 +SHA256 (xpi/firefox-i18n-60.0/pt-PT.xpi) = 3795f1b2f5507f2509a2039ab826cc0c8e96218be5a31ef4017b11f2a9fbed22 +SIZE (xpi/firefox-i18n-60.0/pt-PT.xpi) = 518541 +SHA256 (xpi/firefox-i18n-60.0/rm.xpi) = 6a2dfac8512656a10ad4cad870a8ec54f6c3edcb5812cb421498ca06155bd8ab +SIZE (xpi/firefox-i18n-60.0/rm.xpi) = 505265 +SHA256 (xpi/firefox-i18n-60.0/ro.xpi) = 30164759886d12cac01539ee433272d217b4e227cab16a3466d6ef47ba6f2418 +SIZE (xpi/firefox-i18n-60.0/ro.xpi) = 513282 +SHA256 (xpi/firefox-i18n-60.0/ru.xpi) = b91ea5ab5bc12b81c366f5b797ce922753d956e75488f8ae071b3a19fa0006fb +SIZE (xpi/firefox-i18n-60.0/ru.xpi) = 590510 +SHA256 (xpi/firefox-i18n-60.0/si.xpi) = 5c3dc73d7f3d10f039208ad3e5e480c28b0d6e168b4467771d06c024310b53c0 +SIZE (xpi/firefox-i18n-60.0/si.xpi) = 544796 +SHA256 (xpi/firefox-i18n-60.0/sk.xpi) = 170e764c2d7842ace3ea10a37a28403ab30092cd010b673053c1366b9d566e2b +SIZE (xpi/firefox-i18n-60.0/sk.xpi) = 540922 +SHA256 (xpi/firefox-i18n-60.0/sl.xpi) = fb819360b31a983242564c49e0398f13f7faecb0f037a8c643e46912b7cfce63 +SIZE (xpi/firefox-i18n-60.0/sl.xpi) = 518574 +SHA256 (xpi/firefox-i18n-60.0/son.xpi) = f7c55f44f07c88e3cde1fed96144185f81554f430632e730d45527ab602c6c51 +SIZE (xpi/firefox-i18n-60.0/son.xpi) = 496914 +SHA256 (xpi/firefox-i18n-60.0/sq.xpi) = 73a47afd344801f2b1af6db49ffe10a99576914416d30e2f69ef4c84345f6224 +SIZE (xpi/firefox-i18n-60.0/sq.xpi) = 520493 +SHA256 (xpi/firefox-i18n-60.0/sr.xpi) = cb3ccfd9a3a8c8256fec8a91dbcca334e2e64b6b36d1c49b3d76ee9133af8bd8 +SIZE (xpi/firefox-i18n-60.0/sr.xpi) = 547995 +SHA256 (xpi/firefox-i18n-60.0/sv-SE.xpi) = 2e5f2209f4263b4defb52edf93c81c45b142dc4f85d4eef5ef7a5df0dfb4a81c +SIZE (xpi/firefox-i18n-60.0/sv-SE.xpi) = 517847 +SHA256 (xpi/firefox-i18n-60.0/ta.xpi) = 6acdcf05d2a55fd7803fb5674b5abada51f89811192d66af1b24bd006d195241 +SIZE (xpi/firefox-i18n-60.0/ta.xpi) = 577139 +SHA256 (xpi/firefox-i18n-60.0/te.xpi) = 8dcc7ed11b9c096904810797153115d507395a8ef01025bc3fb2c53098f02fc4 +SIZE (xpi/firefox-i18n-60.0/te.xpi) = 590183 +SHA256 (xpi/firefox-i18n-60.0/th.xpi) = 3edcbbc2364ecaa1eff5fecee810a201d86bf3dbd81d0916b7b8a94e31aeaa3e +SIZE (xpi/firefox-i18n-60.0/th.xpi) = 562036 +SHA256 (xpi/firefox-i18n-60.0/tr.xpi) = 1cdb5564ec294ffd7d85a8eeb50b749f9d6bce19a585cfb29098cf8e091d5247 +SIZE (xpi/firefox-i18n-60.0/tr.xpi) = 525033 +SHA256 (xpi/firefox-i18n-60.0/uk.xpi) = 2318e5a4bc46540633aa7ea71e3c4da7e0d006fafa8292adaf1ac0baa3927129 +SIZE (xpi/firefox-i18n-60.0/uk.xpi) = 580145 +SHA256 (xpi/firefox-i18n-60.0/ur.xpi) = e0c4f2d2c0a3f478295d0beaaf129e7df286f503601f4530df7ce3194b26763a +SIZE (xpi/firefox-i18n-60.0/ur.xpi) = 562602 +SHA256 (xpi/firefox-i18n-60.0/uz.xpi) = fa358c25b4ee8036d1a10916349b4608d669323d3973fed93e93f2ccc5eae344 +SIZE (xpi/firefox-i18n-60.0/uz.xpi) = 512909 +SHA256 (xpi/firefox-i18n-60.0/vi.xpi) = f34a3c5924999c54e7f79b8237346b6482a745141d9fd2c2d07325c156c8fb34 +SIZE (xpi/firefox-i18n-60.0/vi.xpi) = 527412 +SHA256 (xpi/firefox-i18n-60.0/xh.xpi) = d9cc10826a4bc1e554d81813bdefb7d19ea67d0ba8ce1cccceadae0ea12f4a6c +SIZE (xpi/firefox-i18n-60.0/xh.xpi) = 511081 +SHA256 (xpi/firefox-i18n-60.0/zh-CN.xpi) = c3fff9c7562cd4e76526a2546cbe1ffc75404ff1ab5f8bfb8f871b4bf6118dc2 +SIZE (xpi/firefox-i18n-60.0/zh-CN.xpi) = 542804 +SHA256 (xpi/firefox-i18n-60.0/zh-TW.xpi) = fc807d2d6d2db96229d34f5c0594cd97e948508448ea205f6afc1a1f9b615f23 +SIZE (xpi/firefox-i18n-60.0/zh-TW.xpi) = 541119 diff --git a/www/firefox/Makefile b/www/firefox/Makefile index faaa2eaf9756..3256200350f7 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -2,28 +2,27 @@ # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 59.0.3 +DISTVERSION= 60.0 +PORTREVISION= 2 PORTEPOCH= 1 CATEGORIES= www ipv6 -MASTER_SITES= https://hg.mozilla.org/releases/mozilla-release/archive/ -MASTER_SITES+= LOCAL/${DIST_SUBDIR}/jbeich -DISTNAME= ${MASTER_SITES:M*hg*:S,/archive/,,:T}-6b51784853e47e091d213d421a19cb623af718f0 -DISTFILES= ${DISTNAME:C/.*-//}${EXTRACT_SUFX} -DIST_SUBDIR= firefox +MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source +DISTFILES= ${DISTNAME}.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 b413ad4f2984..237e9bbc1584 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1523300563 -SHA256 (firefox/6b51784853e47e091d213d421a19cb623af718f0.tar.bz2) = 9f607fd192a30dab38fa63bd1be174a3e72e3a8f8e7d354c5a4b6d285c23942b -SIZE (firefox/6b51784853e47e091d213d421a19cb623af718f0.tar.bz2) = 304955566 +TIMESTAMP = 1525366747 +SHA256 (firefox-60.0.source.tar.xz) = 4bc4fd997e6239f53e16a70b04f197791e5c5d09367e2916bcfe4a427999f842 +SIZE (firefox-60.0.source.tar.xz) = 266717500 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 - Paul Adenot - David Richards - Sebastien Alaiwan -+Evgeniy Vodolazskiy - KO Myung-Hun - Haakon Sporsheim - Alex Chronopoulos -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 +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 +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 + Paul Adenot + David Richards + Sebastien Alaiwan ++Evgeniy Vodolazskiy + KO Myung-Hun + Haakon Sporsheim + Alex Chronopoulos +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-bug1375074 b/www/firefox/files/patch-bug1375074 new file mode 100644 index 000000000000..cede1e474e22 --- /dev/null +++ b/www/firefox/files/patch-bug1375074 @@ -0,0 +1,82 @@ +commit fc25eb4380d0 +Author: Lars T Hansen +Date: Wed Feb 28 13:57:52 2018 +0100 + + Bug 1375074 - Save and restore non-volatile x28 on ARM64 for generated unboxed object constructor. r=sstangl + + --HG-- + extra : rebase_source : 4a2824b23cf7453d07c962123f780c0ff2fd5292 + extra : source : dec6ab6522a4eb4b3c2defc5078b38ed904f3383 +--- + js/src/jit-test/tests/bug1375074.js | 18 ++++++++++++++++++ + js/src/vm/UnboxedObject.cpp | 25 ++++++++++++++++++++++++- + 2 files changed, 42 insertions(+), 1 deletion(-) + +diff --git js/src/jit-test/tests/bug1375074.js js/src/jit-test/tests/bug1375074.js +new file mode 100644 +index 0000000000000..8bf01d96903fc +--- /dev/null ++++ js/src/jit-test/tests/bug1375074.js +@@ -0,0 +1,18 @@ ++// This forces the VM to start creating unboxed objects and thus stresses a ++// particular path into generated code for a specialized unboxed object ++// constructor. ++ ++var K = 2000; // 2000 should be plenty ++var s = "["; ++var i; ++for ( i=0; i < K-1; i++ ) ++ s = s + `{"i":${i}},`; ++s += `{"i":${i}}]`; ++var v = JSON.parse(s); ++ ++assertEq(v.length == K, true); ++ ++for ( i=0; i < K; i++) { ++ assertEq(v[i] instanceof Object, true); ++ assertEq(v[i].i, i); ++} +diff --git js/src/vm/UnboxedObject.cpp js/src/vm/UnboxedObject.cpp +index c8c178965c488..5badf328ede4f 100644 +--- js/src/vm/UnboxedObject.cpp ++++ js/src/vm/UnboxedObject.cpp +@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) + #endif + + #ifdef JS_CODEGEN_ARM64 +- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. ++ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for ++ // addressing. The register we use for PSP may however also be used by ++ // calling code, and it is nonvolatile, so save it. Do this as a special ++ // case first because the generic save/restore code needs the PSP to be ++ // initialized already. ++ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); ++ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); ++ ++ // Initialize the PSP from the SP. + masm.initStackPtr(); + #endif + +@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) + masm.pop(ScratchDoubleReg); + masm.PopRegsInMask(savedNonVolatileRegisters); + ++#ifdef JS_CODEGEN_ARM64 ++ // Now restore the value that was in the PSP register on entry, and return. ++ ++ // Obtain the correct SP from the PSP. ++ masm.Mov(sp, PseudoStackPointer64); ++ ++ // Restore the saved value of the PSP register, this value is whatever the ++ // caller had saved in it, not any actual SP value, and it must not be ++ // overwritten subsequently. ++ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); ++ ++ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. ++ masm.Ret(vixl::lr); ++#else + masm.abiret(); ++#endif + + masm.bind(&failureStoreOther); + 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 +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(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(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 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(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(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(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 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& aExt + + if (!CrashReporter::IsDummy()) { + PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe); +-# if defined(MOZ_SANDBOX) +- mSandboxBroker.AddHandleToShare(reinterpret_cast(h)); +-# endif // defined(MOZ_SANDBOX) + mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast(h)); + std::string hStr = std::to_string(h); + cmdLine.AppendLooseValue(UTF8ToWide(hStr)); +@@ -1043,6 +1040,11 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector& 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* gEarlyDomPrefs; + + /* static */ already_AddRefed +@@ -3081,11 +3081,130 @@ NS_IMPL_ISUPPORTS(Preferences, + nsISupportsWeakReference) + + /* static */ void +-Preferences::SetEarlyPreferences(const nsTArray* 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(mozilla::Move(*aDomPrefs)); ++ MOZ_ASSERT(!gEarlyDomPrefs); ++ gEarlyDomPrefs = new InfallibleTArray(); ++ ++ 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(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* aSettings); +- static void SetEarlyPreferences(const nsTArray* aSettings); + static void SetLatePreferences(const nsTArray* 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::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4); ++ return mozilla::jni::Method::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-bug1442583 b/www/firefox/files/patch-bug1442583 new file mode 100644 index 000000000000..ca2aa7057396 --- /dev/null +++ b/www/firefox/files/patch-bug1442583 @@ -0,0 +1,39 @@ +commit 7371a080accd +Author: Lars T Hansen +Date: Mon Mar 5 09:55:28 2018 +0100 + + Bug 1442583 - Properly initialize ARM64 icache flushing machinery. r=sstangl + + --HG-- + extra : rebase_source : 73b5921da1fa0a19d6072e35d09bd7b528bb6bfc + extra : intermediate-source : 19516efbbf6750ba04e11c7099586d5be2fe818f + extra : source : 4316cc82d6302edf839a4af6fcb815f0ffa9f65c +--- + js/src/jit/ProcessExecutableMemory.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git js/src/jit/ProcessExecutableMemory.cpp js/src/jit/ProcessExecutableMemory.cpp +index e763a9d68dc17..8a6d50b6a7845 100644 +--- js/src/jit/ProcessExecutableMemory.cpp ++++ js/src/jit/ProcessExecutableMemory.cpp +@@ -20,6 +20,9 @@ + #include "jsutil.h" + + #include "gc/Memory.h" ++#ifdef JS_CODEGEN_ARM64 ++# include "jit/arm64/vixl/Cpu-vixl.h" ++#endif + #include "threading/LockGuard.h" + #include "threading/Mutex.h" + #include "util/Windows.h" +@@ -621,6 +624,10 @@ js::jit::DeallocateExecutableMemory(void* addr, size_t bytes) + bool + js::jit::InitProcessExecutableMemory() + { ++#ifdef JS_CODEGEN_ARM64 ++ // Initialize instruction cache flushing. ++ vixl::CPU::SetUp(); ++#endif + return execMemory.init(); + } + 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 dropdowns (more than 40 options) - pref("dom.forms.selectSearch", false); - // Allow for webpages to provide custom styling for