From 25e5dba654e00f4b1b94ccf9fc3b3502a97dfc4a Mon Sep 17 00:00:00 2001 From: jbeich Date: Tue, 6 Mar 2018 00:56:50 +0000 Subject: [PATCH] www/firefox: update to 60.0 - Drop libv4l support to reduce maintenance Changes: https://www.mozilla.org/firefox/60.0/releasenotes/ PR: 226476 Tested by: tobik Security: 5aefc41e-d304-4ec8-8c82-824f84f08244 MFH: 2018Q2 --- Mk/Uses/gecko.mk | 4 +- Mk/bsd.gecko.mk | 2 +- www/firefox-i18n/Makefile | 4 +- www/firefox-i18n/Makefile.lang | 5 +- www/firefox-i18n/Makefile.option | 2 + www/firefox-i18n/distinfo | 392 ++++++------ www/firefox/Makefile | 24 +- www/firefox/distinfo | 6 +- www/firefox/files/patch-bug1021761 | 6 +- www/firefox/files/patch-bug1418162 | 58 ++ www/firefox/files/patch-bug1433747 | 24 - www/firefox/files/patch-bug1438678 | 1000 +++++++++++++++++++++++++++++ www/firefox/files/patch-bug1442791 | 33 + www/firefox/files/patch-bug1444074 | 34 - www/firefox/files/patch-bug1444083 | 17 - www/firefox/files/patch-bug826985 | 171 ----- www/firefox/files/patch-z-bug1436911 | 1162 ++++++++++++++++++++++++++++++++++ www/firefox/files/patch-z-bug517422 | 24 +- 18 files changed, 2490 insertions(+), 478 deletions(-) create mode 100644 www/firefox/files/patch-bug1418162 delete mode 100644 www/firefox/files/patch-bug1433747 create mode 100644 www/firefox/files/patch-bug1438678 create mode 100644 www/firefox/files/patch-bug1442791 delete mode 100644 www/firefox/files/patch-bug1444074 delete mode 100644 www/firefox/files/patch-bug1444083 delete mode 100644 www/firefox/files/patch-bug826985 create mode 100644 www/firefox/files/patch-z-bug1436911 diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk index d07d0a07c4fe..9df59c251201 100644 --- a/Mk/Uses/gecko.mk +++ b/Mk/Uses/gecko.mk @@ -37,12 +37,12 @@ RUN_DEPENDS+= libxul>=45:www/libxul .elif ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 52 -_GECKO_VERSIONS= 52 59 +_GECKO_VERSIONS= 52 60 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 52_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr -59_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox +60_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null diff --git a/Mk/bsd.gecko.mk b/Mk/bsd.gecko.mk index 555135a7e7b4..b4c33ff5e8be 100644 --- a/Mk/bsd.gecko.mk +++ b/Mk/bsd.gecko.mk @@ -379,7 +379,7 @@ post-patch-SNDIO-on: .endif .if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54 -BUILD_DEPENDS+= ${RUST_PORT:T}>=1.22.1:${RUST_PORT} +BUILD_DEPENDS+= ${RUST_PORT:T}>=1.24:${RUST_PORT} RUST_PORT?= lang/rust . if ${MOZILLA_VER:R:R} < 54 MOZ_OPTIONS+= --enable-rust diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile index 03accc7fa82b..edaed427569c 100644 --- a/www/firefox-i18n/Makefile +++ b/www/firefox-i18n/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 59.0.1 +PORTVERSION= 60.0b5 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi @@ -15,7 +15,7 @@ COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:archivers/zip -USES= zip:infozip gecko:firefox,59,build +USES= zip:infozip gecko:firefox,60,build USE_XPI= firefox NO_ARCH= yes diff --git a/www/firefox-i18n/Makefile.lang b/www/firefox-i18n/Makefile.lang index a73f94452926..25b432860d28 100644 --- a/www/firefox-i18n/Makefile.lang +++ b/www/firefox-i18n/Makefile.lang @@ -6,7 +6,7 @@ FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cak \ es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn \ gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja ka kab \ kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl \ - nn-NO or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ + nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) @@ -225,6 +225,9 @@ FIREFOX_I18N+= nl .if ${PORT_OPTIONS:MLANG_NN} FIREFOX_I18N+= nn-NO .endif +.if ${PORT_OPTIONS:MLANG_OC} +FIREFOX_I18N+= oc +.endif .if ${PORT_OPTIONS:MLANG_OR} FIREFOX_I18N+= or .endif diff --git a/www/firefox-i18n/Makefile.option b/www/firefox-i18n/Makefile.option index 082aa76465ba..49e0d6f4adc6 100644 --- a/www/firefox-i18n/Makefile.option +++ b/www/firefox-i18n/Makefile.option @@ -73,6 +73,7 @@ OPTIONS_DEFINE= LANG_ACH \ LANG_NE \ LANG_NL \ LANG_NN \ + LANG_OC \ LANG_OR \ LANG_PA \ LANG_PL \ @@ -122,6 +123,7 @@ LANG_LIJ_DESC?= Ligurian (Genoa) language support LANG_MS_DESC?= Malay language support LANG_MY_DESC?= Burmese language support LANG_NE_DESC?= Nepali language support +LANG_OC_DESC?= Occitan (lengadocian) language support LANG_SW_DESC?= Swahili language support LANG_UR_DESC?= Urdu (Pakistan) language support LANG_UZ_DESC?= Uzbek language support diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo index 422a967c02a8..4d25558fc7b2 100644 --- a/www/firefox-i18n/distinfo +++ b/www/firefox-i18n/distinfo @@ -1,195 +1,197 @@ -TIMESTAMP = 1521151925 -SHA256 (xpi/firefox-i18n-59.0.1/ach.xpi) = ecd1ba29435dd19943d2bdd38af4d65de1499e2a237e6d3a79288b9d141bb56a -SIZE (xpi/firefox-i18n-59.0.1/ach.xpi) = 439227 -SHA256 (xpi/firefox-i18n-59.0.1/af.xpi) = 917d879386cf361976fc0ee7bd1c0e0595066b4d4ce69aeb5f22f4ab3ababf6d -SIZE (xpi/firefox-i18n-59.0.1/af.xpi) = 436731 -SHA256 (xpi/firefox-i18n-59.0.1/an.xpi) = 7b0201eb9da4606f27381d684a15b5684a2db3251e7e97c27e3bc1ee2f109fbe -SIZE (xpi/firefox-i18n-59.0.1/an.xpi) = 463405 -SHA256 (xpi/firefox-i18n-59.0.1/ar.xpi) = 0674aa88c32b67c70d089bcf2798f9b5e407cb660da2cd3ddd8809da25be1692 -SIZE (xpi/firefox-i18n-59.0.1/ar.xpi) = 486633 -SHA256 (xpi/firefox-i18n-59.0.1/as.xpi) = d413a03fb978ee2eabaf120522fd673d1ce428b8ee6cfc0fc07a31bef26609f5 -SIZE (xpi/firefox-i18n-59.0.1/as.xpi) = 483301 -SHA256 (xpi/firefox-i18n-59.0.1/ast.xpi) = 956449e1fded28144ab8e318bc1a5f3567cef659d02a7a962cf61aa0b64d54a0 -SIZE (xpi/firefox-i18n-59.0.1/ast.xpi) = 454342 -SHA256 (xpi/firefox-i18n-59.0.1/az.xpi) = 257266c1a8a8498722eacb20dc37ccdea9da50a3069762f756f0539c235e6a1d -SIZE (xpi/firefox-i18n-59.0.1/az.xpi) = 464270 -SHA256 (xpi/firefox-i18n-59.0.1/be.xpi) = a83112c8d36c659ef733a47fc40e64d9015ed70e213814954d5761633c2cf30b -SIZE (xpi/firefox-i18n-59.0.1/be.xpi) = 517059 -SHA256 (xpi/firefox-i18n-59.0.1/bg.xpi) = 303749c1af03c5eb5304135849513f066d4ed2b276667edafe63405a85fa4a84 -SIZE (xpi/firefox-i18n-59.0.1/bg.xpi) = 508613 -SHA256 (xpi/firefox-i18n-59.0.1/bn-BD.xpi) = 13cc00f1bcb4feb573f2d2e68e556af4e01e3240c038b2e3b4b03ee6befc8f85 -SIZE (xpi/firefox-i18n-59.0.1/bn-BD.xpi) = 526352 -SHA256 (xpi/firefox-i18n-59.0.1/bn-IN.xpi) = 9075e2b278805451b4b52456ee954cea22740ceb63b82304b22cefd0b82b6848 -SIZE (xpi/firefox-i18n-59.0.1/bn-IN.xpi) = 510797 -SHA256 (xpi/firefox-i18n-59.0.1/br.xpi) = 74a20a0dbff85f72af70fa988990c7deadf38ba034c0706500538debf3545e84 -SIZE (xpi/firefox-i18n-59.0.1/br.xpi) = 451719 -SHA256 (xpi/firefox-i18n-59.0.1/bs.xpi) = 28f0a46f87dfebda97dafdc299164d6b24379019a82c458e68dfa3e8363faf03 -SIZE (xpi/firefox-i18n-59.0.1/bs.xpi) = 457859 -SHA256 (xpi/firefox-i18n-59.0.1/ca.xpi) = 97953e7ef3bdbadb386ef306d8be8f5ec28f9c012e48f9875855c25c044dc270 -SIZE (xpi/firefox-i18n-59.0.1/ca.xpi) = 464912 -SHA256 (xpi/firefox-i18n-59.0.1/cak.xpi) = fc12b006bf3f2f4d476c89f227b03ff59b51c81e4c3c0726e3cdb3016d0997bd -SIZE (xpi/firefox-i18n-59.0.1/cak.xpi) = 475234 -SHA256 (xpi/firefox-i18n-59.0.1/cs.xpi) = 63e37c027b27207ea3d3651d7b712ba4e2d661d4e5286e1a6ec8bb4469c3c30b -SIZE (xpi/firefox-i18n-59.0.1/cs.xpi) = 471575 -SHA256 (xpi/firefox-i18n-59.0.1/cy.xpi) = 357962244e13fea93e88bf486099b5c4cc117bf324ba8933d11a4f5fff61f852 -SIZE (xpi/firefox-i18n-59.0.1/cy.xpi) = 454433 -SHA256 (xpi/firefox-i18n-59.0.1/da.xpi) = a15f383e39f4b11e0fe014063224145f45429ae8b51d731db872e1b52b4ad749 -SIZE (xpi/firefox-i18n-59.0.1/da.xpi) = 446949 -SHA256 (xpi/firefox-i18n-59.0.1/de.xpi) = aa1d03f9aada0f5d575a021ea0944fce026a34a8ecf03a5b18077e2dcd7797a1 -SIZE (xpi/firefox-i18n-59.0.1/de.xpi) = 466273 -SHA256 (xpi/firefox-i18n-59.0.1/dsb.xpi) = 572b856c971bf7d99867fb462039f698dc5f068a49f3b564d7dd732d6b1d758d -SIZE (xpi/firefox-i18n-59.0.1/dsb.xpi) = 478975 -SHA256 (xpi/firefox-i18n-59.0.1/el.xpi) = 7378eed475cccfe541c65f8634ff24e8dc3bc62553b396e9f68da5821b417bed -SIZE (xpi/firefox-i18n-59.0.1/el.xpi) = 531408 -SHA256 (xpi/firefox-i18n-59.0.1/en-GB.xpi) = 92d00ee7eed2c099d3588227ba1ca172371f07b388fc866d20e4a3c22e7d3cc2 -SIZE (xpi/firefox-i18n-59.0.1/en-GB.xpi) = 434300 -SHA256 (xpi/firefox-i18n-59.0.1/en-US.xpi) = 6b78a5ba462f877fe1d64c9bf2e8db3e4426e66aaa5ad3151f8a429d46e988e0 -SIZE (xpi/firefox-i18n-59.0.1/en-US.xpi) = 432749 -SHA256 (xpi/firefox-i18n-59.0.1/en-ZA.xpi) = d084a136f8358f2c0709b983ceebded40cedb2249ef438a8ec1e1fb5e358e7ff -SIZE (xpi/firefox-i18n-59.0.1/en-ZA.xpi) = 427365 -SHA256 (xpi/firefox-i18n-59.0.1/eo.xpi) = 7bee8c904213fbfc33b2a8ddcace8d63b85fee996b753a49d7d77cc85152086a -SIZE (xpi/firefox-i18n-59.0.1/eo.xpi) = 453367 -SHA256 (xpi/firefox-i18n-59.0.1/es-AR.xpi) = 1835efdc6145a47e0d4fe94bcd5eb5904c0435d2d09c8673eaa981521a529ce6 -SIZE (xpi/firefox-i18n-59.0.1/es-AR.xpi) = 461797 -SHA256 (xpi/firefox-i18n-59.0.1/es-CL.xpi) = e8a31cb6715335f811565ba00dff5580e04139981344fd3ec91f92c028cdafa4 -SIZE (xpi/firefox-i18n-59.0.1/es-CL.xpi) = 464654 -SHA256 (xpi/firefox-i18n-59.0.1/es-ES.xpi) = bfb6038c30d18faa11490750ae19ecccbf61dfd25f8172792e99321e619230ad -SIZE (xpi/firefox-i18n-59.0.1/es-ES.xpi) = 348463 -SHA256 (xpi/firefox-i18n-59.0.1/es-MX.xpi) = f92ea0e49ed3e052228a84685cde361f7ddb222bca6c7d50ecbee013994df910 -SIZE (xpi/firefox-i18n-59.0.1/es-MX.xpi) = 466313 -SHA256 (xpi/firefox-i18n-59.0.1/et.xpi) = 0abf3c5686c301775ad9ffa6411c219d2d4d620589ff930ec1714123f48f6881 -SIZE (xpi/firefox-i18n-59.0.1/et.xpi) = 445394 -SHA256 (xpi/firefox-i18n-59.0.1/eu.xpi) = 1df512fac2219dd3decd48ea5aa7c5af6ba1eb65348d122020afaf237a04b238 -SIZE (xpi/firefox-i18n-59.0.1/eu.xpi) = 455236 -SHA256 (xpi/firefox-i18n-59.0.1/fa.xpi) = 83cf18e8fc6599b0f4fd3a4991ab01b99da4ecb65708c92848749cf2a7ef0867 -SIZE (xpi/firefox-i18n-59.0.1/fa.xpi) = 508098 -SHA256 (xpi/firefox-i18n-59.0.1/ff.xpi) = 1f90aa31ca2b9b93fe80a25a03d5a304c30cdcba9c77cf10bd1a4eff43bd0a91 -SIZE (xpi/firefox-i18n-59.0.1/ff.xpi) = 455026 -SHA256 (xpi/firefox-i18n-59.0.1/fi.xpi) = af9fb470144b4d524d27f683116bf40388b37e8a88266a53fc17d22978f88dd1 -SIZE (xpi/firefox-i18n-59.0.1/fi.xpi) = 445182 -SHA256 (xpi/firefox-i18n-59.0.1/fr.xpi) = 0df0b098a41723f4e950dc0e88d041ee89efdc984cb317c250f63cf0bb9d12a7 -SIZE (xpi/firefox-i18n-59.0.1/fr.xpi) = 473593 -SHA256 (xpi/firefox-i18n-59.0.1/fy-NL.xpi) = dbe46d9218b4b2ad83e678d2ab70422e779bde1b6254b10006d621a59a5af30b -SIZE (xpi/firefox-i18n-59.0.1/fy-NL.xpi) = 462918 -SHA256 (xpi/firefox-i18n-59.0.1/ga-IE.xpi) = 7efe47e0b58eb6acab98a7846a8100ead9e12666524cc90c63dc2a87ab1dd34c -SIZE (xpi/firefox-i18n-59.0.1/ga-IE.xpi) = 471909 -SHA256 (xpi/firefox-i18n-59.0.1/gd.xpi) = e72f3c50f114e2a697baafbf427e2a0372d74e73186925051f9a2a3647e80c91 -SIZE (xpi/firefox-i18n-59.0.1/gd.xpi) = 461297 -SHA256 (xpi/firefox-i18n-59.0.1/gl.xpi) = d6f18916ce2ac2cc9f15c9a05fc0f83bbbe2d092fbd06d1b46b7101cf0aae03b -SIZE (xpi/firefox-i18n-59.0.1/gl.xpi) = 441615 -SHA256 (xpi/firefox-i18n-59.0.1/gn.xpi) = 861f7023de8630e2d0daf69b333cf212d84c3389044eea500655729197a5457b -SIZE (xpi/firefox-i18n-59.0.1/gn.xpi) = 469397 -SHA256 (xpi/firefox-i18n-59.0.1/gu-IN.xpi) = fbbf3b4eb0527a01e6182128e1153d9ecafda1ecf0b6c48456c087a532281127 -SIZE (xpi/firefox-i18n-59.0.1/gu-IN.xpi) = 521804 -SHA256 (xpi/firefox-i18n-59.0.1/he.xpi) = ab2d7b59c2a6d09438efa7f712dc1a636e15f3e6da52fc00e9de3ce4fb2baa28 -SIZE (xpi/firefox-i18n-59.0.1/he.xpi) = 472771 -SHA256 (xpi/firefox-i18n-59.0.1/hi-IN.xpi) = b3fb9886a427a4b1849326ed94528bb157489fa778cb82eae724e7d91df59732 -SIZE (xpi/firefox-i18n-59.0.1/hi-IN.xpi) = 524280 -SHA256 (xpi/firefox-i18n-59.0.1/hr.xpi) = 3ad1dc76bc9afcc5ad7cf4e2f53c005d4861b79d00fb080c6487585e72a5380f -SIZE (xpi/firefox-i18n-59.0.1/hr.xpi) = 459978 -SHA256 (xpi/firefox-i18n-59.0.1/hsb.xpi) = 9cded87c1ee19a762f545efee71894db30ca66c35cacf8fc5cbe38207700be90 -SIZE (xpi/firefox-i18n-59.0.1/hsb.xpi) = 475941 -SHA256 (xpi/firefox-i18n-59.0.1/hu.xpi) = 072c5d90e274deb3d0398445561b78bbf4dee1ee03f0c0ecbdeaf4e2968727dd -SIZE (xpi/firefox-i18n-59.0.1/hu.xpi) = 476896 -SHA256 (xpi/firefox-i18n-59.0.1/hy-AM.xpi) = aa34c99ecc61ed34ff627d3fe77c4f1b8b0ff7eebf0cdec0d0ae28960547379e -SIZE (xpi/firefox-i18n-59.0.1/hy-AM.xpi) = 508168 -SHA256 (xpi/firefox-i18n-59.0.1/ia.xpi) = 1d52d87927398bb31f7f454aa9dc9114520b81145620b80b672132c5b67b31f6 -SIZE (xpi/firefox-i18n-59.0.1/ia.xpi) = 448829 -SHA256 (xpi/firefox-i18n-59.0.1/id.xpi) = c74e45cabffb0bce1e2c0b4a79d552f4b74d5307a1fb40e62ae9e213b1bbde1e -SIZE (xpi/firefox-i18n-59.0.1/id.xpi) = 441952 -SHA256 (xpi/firefox-i18n-59.0.1/is.xpi) = 305edff9a994bf7bc3be53223db00e5a893caeb8d9e9175eea60c5bd41a923ab -SIZE (xpi/firefox-i18n-59.0.1/is.xpi) = 451373 -SHA256 (xpi/firefox-i18n-59.0.1/it.xpi) = e282a584bc092d31839c277a471858715b616288c28255420bf41663af806dac -SIZE (xpi/firefox-i18n-59.0.1/it.xpi) = 342524 -SHA256 (xpi/firefox-i18n-59.0.1/ja.xpi) = a69ec46ff61841ef415e252be752ca9ec343d1cf30a73ac9c0e63598bf1d8fe7 -SIZE (xpi/firefox-i18n-59.0.1/ja.xpi) = 508147 -SHA256 (xpi/firefox-i18n-59.0.1/ka.xpi) = c06ba278e86d214a55cc582da20c2f277986d4e52e99fedee5cd19f4a7f5b3f1 -SIZE (xpi/firefox-i18n-59.0.1/ka.xpi) = 492569 -SHA256 (xpi/firefox-i18n-59.0.1/kab.xpi) = 5bba366b527907301a54817fd3c95d4d6617c9169cf20cf94b5292825dd8ca23 -SIZE (xpi/firefox-i18n-59.0.1/kab.xpi) = 461841 -SHA256 (xpi/firefox-i18n-59.0.1/kk.xpi) = 06c927cb3919d60bcb595b8e7690148613215ab92eb345a3775b856e5590b2cf -SIZE (xpi/firefox-i18n-59.0.1/kk.xpi) = 517584 -SHA256 (xpi/firefox-i18n-59.0.1/km.xpi) = 10a185cf715bccb9cf2c00a15384e6feb7df2adfadcf144751bee4d03496c9c5 -SIZE (xpi/firefox-i18n-59.0.1/km.xpi) = 526359 -SHA256 (xpi/firefox-i18n-59.0.1/kn.xpi) = 36a5d63ccbce763756d1aa145339794315e9ddd653420fe2fb1256b017da7b98 -SIZE (xpi/firefox-i18n-59.0.1/kn.xpi) = 527879 -SHA256 (xpi/firefox-i18n-59.0.1/ko.xpi) = f3b83409bd4d742ef6c6c5cfd0d8d463bf1cdd21608f8439f2f86901e95b5b4d -SIZE (xpi/firefox-i18n-59.0.1/ko.xpi) = 487661 -SHA256 (xpi/firefox-i18n-59.0.1/lij.xpi) = 62f4d6631b60b420954f1a7c42b5cc383801548c5780bf7badb67f1f0b4c7fb2 -SIZE (xpi/firefox-i18n-59.0.1/lij.xpi) = 446606 -SHA256 (xpi/firefox-i18n-59.0.1/lt.xpi) = 3c28029fb78c90726cf6dca3a22f80e45d855ad16aee431c008e0bf08fb77ce4 -SIZE (xpi/firefox-i18n-59.0.1/lt.xpi) = 475142 -SHA256 (xpi/firefox-i18n-59.0.1/lv.xpi) = b618edf282a60d6a64dac68f796d45cd8fe79dc497176b5c821907eb50720e47 -SIZE (xpi/firefox-i18n-59.0.1/lv.xpi) = 463655 -SHA256 (xpi/firefox-i18n-59.0.1/mai.xpi) = b622a93edf7341d11a23df83d155b86f45a4af769f2ff45996701431c36707e2 -SIZE (xpi/firefox-i18n-59.0.1/mai.xpi) = 499910 -SHA256 (xpi/firefox-i18n-59.0.1/mk.xpi) = 996df991c2945d7591c9b90633e83eef72be4533ab55e3ba48745232b0e83430 -SIZE (xpi/firefox-i18n-59.0.1/mk.xpi) = 484075 -SHA256 (xpi/firefox-i18n-59.0.1/ml.xpi) = fe75a2f4885b7c4538a7447a650de9f338169549e5451d1e5fe2a70d6c26cfa1 -SIZE (xpi/firefox-i18n-59.0.1/ml.xpi) = 539735 -SHA256 (xpi/firefox-i18n-59.0.1/mr.xpi) = 9f9a053dda0e1a7f15dd2bb5564582d6c10f465b20d9165210c487f1816e52a8 -SIZE (xpi/firefox-i18n-59.0.1/mr.xpi) = 517962 -SHA256 (xpi/firefox-i18n-59.0.1/ms.xpi) = 1a40eb19a6f607434d5180474925ab903bd0d8e12c5861713b3de574fda2673d -SIZE (xpi/firefox-i18n-59.0.1/ms.xpi) = 450075 -SHA256 (xpi/firefox-i18n-59.0.1/my.xpi) = 7b0a1e894808bb4f17d6012ba978b180dd0f4825733e357d63708f2298fdb278 -SIZE (xpi/firefox-i18n-59.0.1/my.xpi) = 511894 -SHA256 (xpi/firefox-i18n-59.0.1/nb-NO.xpi) = 390904624102a0c5c1be82712954a57ee628a170361a57fda0e5e6dd5e4b9f56 -SIZE (xpi/firefox-i18n-59.0.1/nb-NO.xpi) = 450277 -SHA256 (xpi/firefox-i18n-59.0.1/ne-NP.xpi) = 4acaaa5ee3746176dd1349ea51d47b99cbd965d8aff21b44169235b5798e6d04 -SIZE (xpi/firefox-i18n-59.0.1/ne-NP.xpi) = 509177 -SHA256 (xpi/firefox-i18n-59.0.1/nl.xpi) = 938f70cd0452f87ca4da3f1ed17802aad48e581b8fe7cb214f9c579bb647b795 -SIZE (xpi/firefox-i18n-59.0.1/nl.xpi) = 458128 -SHA256 (xpi/firefox-i18n-59.0.1/nn-NO.xpi) = eeeea6999c44df8e6657e65e07c96f741bef6530b8198f79547c36867ad3e694 -SIZE (xpi/firefox-i18n-59.0.1/nn-NO.xpi) = 451471 -SHA256 (xpi/firefox-i18n-59.0.1/or.xpi) = de8adc3a0a20bc650739a1a39c55140c0b5f5f5a078a6a2414a7602561bfd798 -SIZE (xpi/firefox-i18n-59.0.1/or.xpi) = 493181 -SHA256 (xpi/firefox-i18n-59.0.1/pa-IN.xpi) = 682e548375a925583d723ffb9889a5ffbaa049ed2d2fe33cbb17dbd50ad263f4 -SIZE (xpi/firefox-i18n-59.0.1/pa-IN.xpi) = 492420 -SHA256 (xpi/firefox-i18n-59.0.1/pl.xpi) = 694b181873f7667a6720e3f6023bae756e8a0ed55fb4fd395b5be80db786f6b4 -SIZE (xpi/firefox-i18n-59.0.1/pl.xpi) = 358511 -SHA256 (xpi/firefox-i18n-59.0.1/pt-BR.xpi) = 1f1177c60948d15d7d86a374dbfb44bfdce462dbb5496bcd01499cf8b17f9130 -SIZE (xpi/firefox-i18n-59.0.1/pt-BR.xpi) = 455916 -SHA256 (xpi/firefox-i18n-59.0.1/pt-PT.xpi) = f85995c2b7f847dd9cd6325daf7436882e659a4e984b342e081058517f388908 -SIZE (xpi/firefox-i18n-59.0.1/pt-PT.xpi) = 459331 -SHA256 (xpi/firefox-i18n-59.0.1/rm.xpi) = e0a9c8c617d804eab0bc8530f15d1d8ae5e47147a23cb010a9c1f5eb5cd8d892 -SIZE (xpi/firefox-i18n-59.0.1/rm.xpi) = 449757 -SHA256 (xpi/firefox-i18n-59.0.1/ro.xpi) = 479b2ebbda57bafda0a34f29cc3e65a9a73db76967579d59c228bb03f0aca4f6 -SIZE (xpi/firefox-i18n-59.0.1/ro.xpi) = 453403 -SHA256 (xpi/firefox-i18n-59.0.1/ru.xpi) = 1be7524ab110feaa15dcbcc4ecdcf3399604b2fe79f41c82b1a68bea9e7b77bb -SIZE (xpi/firefox-i18n-59.0.1/ru.xpi) = 526523 -SHA256 (xpi/firefox-i18n-59.0.1/si.xpi) = 2d32228ebf6a6b79a20a18eed4091d8131b923fd127eeae01f677c157766840b -SIZE (xpi/firefox-i18n-59.0.1/si.xpi) = 492588 -SHA256 (xpi/firefox-i18n-59.0.1/sk.xpi) = 0b99e28c1b337008ac3d4a3c7b629cf71aaaad9c3f30e48f50603becb3064a06 -SIZE (xpi/firefox-i18n-59.0.1/sk.xpi) = 480814 -SHA256 (xpi/firefox-i18n-59.0.1/sl.xpi) = 18aa40a2cf30fe967c034ee2e084be6309ad848379c8eceb137381b308d6e297 -SIZE (xpi/firefox-i18n-59.0.1/sl.xpi) = 458825 -SHA256 (xpi/firefox-i18n-59.0.1/son.xpi) = 8162c10692ed8723f2c47ba322770335ec821550ec3031ea4b67b99b560466e7 -SIZE (xpi/firefox-i18n-59.0.1/son.xpi) = 446399 -SHA256 (xpi/firefox-i18n-59.0.1/sq.xpi) = 5882a6234a746ef9bb23b405ec15d8e74083598924eabeba3f18a6bc681cdce4 -SIZE (xpi/firefox-i18n-59.0.1/sq.xpi) = 464463 -SHA256 (xpi/firefox-i18n-59.0.1/sr.xpi) = 2ec1aa0c85ebd456a560f1e34a65183eef4f7d3105c69c779e83c9ca91e0a442 -SIZE (xpi/firefox-i18n-59.0.1/sr.xpi) = 486178 -SHA256 (xpi/firefox-i18n-59.0.1/sv-SE.xpi) = 0913865b4c5edd6cb0006b1c2149463b6a0ff22870cf6c1c2b6cf55f7b7f76d4 -SIZE (xpi/firefox-i18n-59.0.1/sv-SE.xpi) = 458660 -SHA256 (xpi/firefox-i18n-59.0.1/ta.xpi) = 92300249eac9468ab15a5a81a2bb5ca7b96ed4d0ede1aa52659ceb50bfcb041b -SIZE (xpi/firefox-i18n-59.0.1/ta.xpi) = 512843 -SHA256 (xpi/firefox-i18n-59.0.1/te.xpi) = a3d972a645fefa7e1860f043a85c5c5e00e9b6c46712cd3f98b7db006d98258e -SIZE (xpi/firefox-i18n-59.0.1/te.xpi) = 527083 -SHA256 (xpi/firefox-i18n-59.0.1/th.xpi) = 8e0f5c8eeb12f185aaeddf244363034fe0b8e14f875be5892b68f0fd6530d135 -SIZE (xpi/firefox-i18n-59.0.1/th.xpi) = 498544 -SHA256 (xpi/firefox-i18n-59.0.1/tr.xpi) = 3cbb4cdea0c2001f94cff5078e730e02ce03370eaef1645be60c892ba284be5f -SIZE (xpi/firefox-i18n-59.0.1/tr.xpi) = 463594 -SHA256 (xpi/firefox-i18n-59.0.1/uk.xpi) = d7c86d1f09df639dfc2f3c487cb9d8eabca02efa848371a5e1e7ca1406561de3 -SIZE (xpi/firefox-i18n-59.0.1/uk.xpi) = 516926 -SHA256 (xpi/firefox-i18n-59.0.1/ur.xpi) = c893dd6cd191a2fded4d0c372c9a089528dffaaeeead193ad4080a3f5f21fe90 -SIZE (xpi/firefox-i18n-59.0.1/ur.xpi) = 507380 -SHA256 (xpi/firefox-i18n-59.0.1/uz.xpi) = d1b3e43d2850f9da05d92e1f3b933c54e716db163d462c62adac4395e78c6c7b -SIZE (xpi/firefox-i18n-59.0.1/uz.xpi) = 456923 -SHA256 (xpi/firefox-i18n-59.0.1/vi.xpi) = bfa5f3a23b29349cee54a85538c0eadb7f838cb50788c1927b7aa5d39d061bc2 -SIZE (xpi/firefox-i18n-59.0.1/vi.xpi) = 470069 -SHA256 (xpi/firefox-i18n-59.0.1/xh.xpi) = 6d8bfed15e2b48a7969de06f43fac314e3d0af99c4d24b8b86eacd26a03b3fca -SIZE (xpi/firefox-i18n-59.0.1/xh.xpi) = 460771 -SHA256 (xpi/firefox-i18n-59.0.1/zh-CN.xpi) = 95d5129eb1211c25516a8ac3f3a5463ec087583c12acf6546aa2915bdf86b463 -SIZE (xpi/firefox-i18n-59.0.1/zh-CN.xpi) = 483449 -SHA256 (xpi/firefox-i18n-59.0.1/zh-TW.xpi) = e95d71b32bb94f8c75a8ec9cd042b5a2f4ba61be4f31195aba8eccea0443d6ec -SIZE (xpi/firefox-i18n-59.0.1/zh-TW.xpi) = 477089 +TIMESTAMP = 1520629428 +SHA256 (xpi/firefox-i18n-60.0b5/ach.xpi) = b7cf5a7782fe5ea3dfb2b0b84fbbddf1073baa5c761f693bda8b6210f9764ab4 +SIZE (xpi/firefox-i18n-60.0b5/ach.xpi) = 448286 +SHA256 (xpi/firefox-i18n-60.0b5/af.xpi) = 4a681f2f1d50ae82c9e4800837191b535183339ee2548b6210dd6359a3579f17 +SIZE (xpi/firefox-i18n-60.0b5/af.xpi) = 445111 +SHA256 (xpi/firefox-i18n-60.0b5/an.xpi) = 1e276b80b69be1b4ca0c29f2ee4be04be2087d5ef5e9a61f9f654513065d25b0 +SIZE (xpi/firefox-i18n-60.0b5/an.xpi) = 471885 +SHA256 (xpi/firefox-i18n-60.0b5/ar.xpi) = f7075ce587819a86ddc67560326ae87173b11d80c0797a7ef7211059155f9a4a +SIZE (xpi/firefox-i18n-60.0b5/ar.xpi) = 496781 +SHA256 (xpi/firefox-i18n-60.0b5/as.xpi) = ea88703b732fc5d38b6d6faa24d0ca200b804ab6452f38f94bc22a790bd74b6f +SIZE (xpi/firefox-i18n-60.0b5/as.xpi) = 488768 +SHA256 (xpi/firefox-i18n-60.0b5/ast.xpi) = 9a9a8862d04cd734056703a7a37d75ae47812a91ac882b36b65d1eab1cc830bb +SIZE (xpi/firefox-i18n-60.0b5/ast.xpi) = 463358 +SHA256 (xpi/firefox-i18n-60.0b5/az.xpi) = 441509188e6802473385abf007dc0054eab8fa8a3ae967fd9552d004a5de62f6 +SIZE (xpi/firefox-i18n-60.0b5/az.xpi) = 474971 +SHA256 (xpi/firefox-i18n-60.0b5/be.xpi) = 2964abfae0dc5e5426ca3f76fec4bc8d4c84a5d458143ec4476e2f8c9d64d974 +SIZE (xpi/firefox-i18n-60.0b5/be.xpi) = 527011 +SHA256 (xpi/firefox-i18n-60.0b5/bg.xpi) = 7e8d92eafddee1219ae10252a28364f42b5552e0b12d55baeea278434956bc6a +SIZE (xpi/firefox-i18n-60.0b5/bg.xpi) = 519364 +SHA256 (xpi/firefox-i18n-60.0b5/bn-BD.xpi) = fad38c9616ae78fe05ff15086ea71edaba85158e663012b385956f465f31ed29 +SIZE (xpi/firefox-i18n-60.0b5/bn-BD.xpi) = 535934 +SHA256 (xpi/firefox-i18n-60.0b5/bn-IN.xpi) = b1249a21dc0dad013129c94704bb21738a48750f57b2f0be59b7272c6e054cea +SIZE (xpi/firefox-i18n-60.0b5/bn-IN.xpi) = 521685 +SHA256 (xpi/firefox-i18n-60.0b5/br.xpi) = 43285a9247553958c7da682c19c6199a09103a9bff78c0afda2933eba2c71456 +SIZE (xpi/firefox-i18n-60.0b5/br.xpi) = 461123 +SHA256 (xpi/firefox-i18n-60.0b5/bs.xpi) = ac7da15b195864c924742deaf88cb164de5144365c38b44408c23e0d06831ec1 +SIZE (xpi/firefox-i18n-60.0b5/bs.xpi) = 467820 +SHA256 (xpi/firefox-i18n-60.0b5/ca.xpi) = 58104f74da3a9d65f8965b8593197a8c91c9b2425fac7df2887e565b41f57793 +SIZE (xpi/firefox-i18n-60.0b5/ca.xpi) = 475143 +SHA256 (xpi/firefox-i18n-60.0b5/cak.xpi) = 926e65519dd0a13e3f9182dbee519e992dbe2b44fb1a625e37a6652edb5e5120 +SIZE (xpi/firefox-i18n-60.0b5/cak.xpi) = 484300 +SHA256 (xpi/firefox-i18n-60.0b5/cs.xpi) = bc87e9e0e3e41e6a9e887eeedc3781501e5fbd17ee9b8f848a57622f2a1bf164 +SIZE (xpi/firefox-i18n-60.0b5/cs.xpi) = 479914 +SHA256 (xpi/firefox-i18n-60.0b5/cy.xpi) = 91df18438c912e179c24962d21b85757cb27865366f07a994596296873261168 +SIZE (xpi/firefox-i18n-60.0b5/cy.xpi) = 464789 +SHA256 (xpi/firefox-i18n-60.0b5/da.xpi) = 1ae9c916f511d15c2db512567324cb4c78ad841b5b6eb1a6b81491e09fdc029b +SIZE (xpi/firefox-i18n-60.0b5/da.xpi) = 457543 +SHA256 (xpi/firefox-i18n-60.0b5/de.xpi) = a7adb54c9e14f8d10be9199173b999b3a1511a8fe694bc5e769ea50a58a5ac3c +SIZE (xpi/firefox-i18n-60.0b5/de.xpi) = 477424 +SHA256 (xpi/firefox-i18n-60.0b5/dsb.xpi) = 7d8157914b32dabe94c9170677ece16adf2d07bba6a23be0ab2146116f097c61 +SIZE (xpi/firefox-i18n-60.0b5/dsb.xpi) = 487485 +SHA256 (xpi/firefox-i18n-60.0b5/el.xpi) = 333154f0cf1bac6cb3b7e11534425c7fd1094fe8b9ac9b6c6285f712ad41b748 +SIZE (xpi/firefox-i18n-60.0b5/el.xpi) = 542988 +SHA256 (xpi/firefox-i18n-60.0b5/en-GB.xpi) = b1cb2f212ecf473a7d42457bee772d5e45f7c3c778e65db6a42523761ef57f04 +SIZE (xpi/firefox-i18n-60.0b5/en-GB.xpi) = 444252 +SHA256 (xpi/firefox-i18n-60.0b5/en-US.xpi) = a9cc08dd5aed430a2dec6679e92a3f9b048a078c7a5006fd33d831f8e6db72b8 +SIZE (xpi/firefox-i18n-60.0b5/en-US.xpi) = 439229 +SHA256 (xpi/firefox-i18n-60.0b5/en-ZA.xpi) = 16ef865f91de2cbed7d674d800db09aba33ca4508b38c53cd3e14eccaaadaa3f +SIZE (xpi/firefox-i18n-60.0b5/en-ZA.xpi) = 433955 +SHA256 (xpi/firefox-i18n-60.0b5/eo.xpi) = 85090f769b791a0fef7ec13c84c2af7abee2b107af476b6950921f4fef1f450d +SIZE (xpi/firefox-i18n-60.0b5/eo.xpi) = 462259 +SHA256 (xpi/firefox-i18n-60.0b5/es-AR.xpi) = 51e60414a0d07f4a43a32ba0d1023b0b5cfdba1d4fefc8e91a8cbb4ca74d5dee +SIZE (xpi/firefox-i18n-60.0b5/es-AR.xpi) = 472921 +SHA256 (xpi/firefox-i18n-60.0b5/es-CL.xpi) = 97007a7ef53291e22be4cb3c8b496d26c8468d616e3f9242ca26937930ae4647 +SIZE (xpi/firefox-i18n-60.0b5/es-CL.xpi) = 475773 +SHA256 (xpi/firefox-i18n-60.0b5/es-ES.xpi) = da6cdb1eb11d98745e7aa4ebb2c782523e528dec3036babb4d2c9523cbcd5195 +SIZE (xpi/firefox-i18n-60.0b5/es-ES.xpi) = 398018 +SHA256 (xpi/firefox-i18n-60.0b5/es-MX.xpi) = e2989a87730f2f8f1a1ebcebb68c19af299e7e93c996ca2137d21b04ab7ce6e4 +SIZE (xpi/firefox-i18n-60.0b5/es-MX.xpi) = 476894 +SHA256 (xpi/firefox-i18n-60.0b5/et.xpi) = d88ca2f58c51403b83efc86ae86518eab8b6bd97457a5d3b9c707dc51b4dab0d +SIZE (xpi/firefox-i18n-60.0b5/et.xpi) = 457630 +SHA256 (xpi/firefox-i18n-60.0b5/eu.xpi) = f9b29ea85d04b736fb4900fd1b8cb27be5430abcfc2bd6b40a6e3cea14eb7f25 +SIZE (xpi/firefox-i18n-60.0b5/eu.xpi) = 463833 +SHA256 (xpi/firefox-i18n-60.0b5/fa.xpi) = bc9db6a6019e7c28b2678d55de93e137f286f4465bea77945c1bc6f8be75bb01 +SIZE (xpi/firefox-i18n-60.0b5/fa.xpi) = 518992 +SHA256 (xpi/firefox-i18n-60.0b5/ff.xpi) = fcda0e781e7c3e330d0177f57a67cbc0ce0032b4fca832de2d1ed8c3f975f0a7 +SIZE (xpi/firefox-i18n-60.0b5/ff.xpi) = 464894 +SHA256 (xpi/firefox-i18n-60.0b5/fi.xpi) = 1afd02a57647e4e4735b2d4a5b954e931a7afaaff4666578b7631f360203ba45 +SIZE (xpi/firefox-i18n-60.0b5/fi.xpi) = 455914 +SHA256 (xpi/firefox-i18n-60.0b5/fr.xpi) = bb53a99a0e8dd6bfcd7278f431f3e87d90d7ec31d3a6e05e656f1947ddb287a0 +SIZE (xpi/firefox-i18n-60.0b5/fr.xpi) = 484331 +SHA256 (xpi/firefox-i18n-60.0b5/fy-NL.xpi) = 6bd3b918ae762d320fbc79e331e547af3bc2c70561aa3486d06521da252c40e8 +SIZE (xpi/firefox-i18n-60.0b5/fy-NL.xpi) = 472863 +SHA256 (xpi/firefox-i18n-60.0b5/ga-IE.xpi) = ef86d1dee9496d5d45cdce85856089d0be14914ab34f9262f30b5aaf9e484597 +SIZE (xpi/firefox-i18n-60.0b5/ga-IE.xpi) = 481965 +SHA256 (xpi/firefox-i18n-60.0b5/gd.xpi) = 93c2f11e334c3a53279306a1ba60657421e7bcd09fb814e803eee0117d8d604d +SIZE (xpi/firefox-i18n-60.0b5/gd.xpi) = 473021 +SHA256 (xpi/firefox-i18n-60.0b5/gl.xpi) = 6732198d6ef592cb901fa6433681e4cd8ebd4b97f80d7a3ef5e9679874893220 +SIZE (xpi/firefox-i18n-60.0b5/gl.xpi) = 451630 +SHA256 (xpi/firefox-i18n-60.0b5/gn.xpi) = b2b5ef8c8d8157459c79a1e085259329f18b6277276e28da69ee81557264c2fb +SIZE (xpi/firefox-i18n-60.0b5/gn.xpi) = 481098 +SHA256 (xpi/firefox-i18n-60.0b5/gu-IN.xpi) = e551c9f5cde21ae01d63495a0330a15bef33c21dbf2de4cff8a65b43919b9026 +SIZE (xpi/firefox-i18n-60.0b5/gu-IN.xpi) = 532920 +SHA256 (xpi/firefox-i18n-60.0b5/he.xpi) = 4987b389973dcc614a27ddf7edbb6866f21fa061a0992ae43d6875a1d0ca1117 +SIZE (xpi/firefox-i18n-60.0b5/he.xpi) = 483088 +SHA256 (xpi/firefox-i18n-60.0b5/hi-IN.xpi) = ff63fe8dfdb2f8b2e08d3167f8d6bb753837d43a8bd4abeade4848eb232b4e72 +SIZE (xpi/firefox-i18n-60.0b5/hi-IN.xpi) = 535068 +SHA256 (xpi/firefox-i18n-60.0b5/hr.xpi) = 85d36cded0c606a92f85c9bb528b1490c1ce155ce4d6d371b202ccce81d3dc86 +SIZE (xpi/firefox-i18n-60.0b5/hr.xpi) = 470247 +SHA256 (xpi/firefox-i18n-60.0b5/hsb.xpi) = f4a0766dc42066315111441b9197967b0f0553cc4f0ee85755cbc0b20fbe05c8 +SIZE (xpi/firefox-i18n-60.0b5/hsb.xpi) = 485230 +SHA256 (xpi/firefox-i18n-60.0b5/hu.xpi) = b5c586021c4a52006592d61f9c63d5f7edb8804509e583a1e124d77bf7732a07 +SIZE (xpi/firefox-i18n-60.0b5/hu.xpi) = 486386 +SHA256 (xpi/firefox-i18n-60.0b5/hy-AM.xpi) = 9d6f1f8c02fa19037446162faf7ab60f473db31c66da493c54554db26e2c2154 +SIZE (xpi/firefox-i18n-60.0b5/hy-AM.xpi) = 519060 +SHA256 (xpi/firefox-i18n-60.0b5/ia.xpi) = f152ebfe70485089bda5c43113fdb62fcc33d4a334854aa462f8de262d3f4694 +SIZE (xpi/firefox-i18n-60.0b5/ia.xpi) = 459829 +SHA256 (xpi/firefox-i18n-60.0b5/id.xpi) = 00d0687dc816591de008f67af1368e9074ec0bc09367a87baaba740561d50c88 +SIZE (xpi/firefox-i18n-60.0b5/id.xpi) = 451635 +SHA256 (xpi/firefox-i18n-60.0b5/is.xpi) = 0fcb3442d9797806530e1ad8f4cb4ecc66decd2184ccfa059e42823693365aac +SIZE (xpi/firefox-i18n-60.0b5/is.xpi) = 462146 +SHA256 (xpi/firefox-i18n-60.0b5/it.xpi) = 3a0b2be033eb754f89c606494a926fc2dbb29ce9b0e5ae9befcfdb06564124e4 +SIZE (xpi/firefox-i18n-60.0b5/it.xpi) = 349832 +SHA256 (xpi/firefox-i18n-60.0b5/ja.xpi) = 1b0bf234562fb1e10b5aabec4bd06a65cce5f2e0b0764eeb5ba0fe23b3c9ab43 +SIZE (xpi/firefox-i18n-60.0b5/ja.xpi) = 518987 +SHA256 (xpi/firefox-i18n-60.0b5/ka.xpi) = 7680a934f46841c0640626de1803cf524fef8af1d5e7c6bf65d040b73624c66e +SIZE (xpi/firefox-i18n-60.0b5/ka.xpi) = 502445 +SHA256 (xpi/firefox-i18n-60.0b5/kab.xpi) = 253ae20877f17cc405b4dbcf1ab83e8722e9385583203ecc63de7dc1ffa8acfb +SIZE (xpi/firefox-i18n-60.0b5/kab.xpi) = 470984 +SHA256 (xpi/firefox-i18n-60.0b5/kk.xpi) = 469145f8141ef31b8c26d26e0dab49fdc8cc2f213219618fdc8146a42af6657d +SIZE (xpi/firefox-i18n-60.0b5/kk.xpi) = 528100 +SHA256 (xpi/firefox-i18n-60.0b5/km.xpi) = c43bdfb638df2390c9d482f49c488c2f7e49711ca32285d20fb8f97003c83094 +SIZE (xpi/firefox-i18n-60.0b5/km.xpi) = 535561 +SHA256 (xpi/firefox-i18n-60.0b5/kn.xpi) = 5e550ea930289a8b6e9492f7127c412250a7b98676f6763210aad2a8e4821369 +SIZE (xpi/firefox-i18n-60.0b5/kn.xpi) = 535720 +SHA256 (xpi/firefox-i18n-60.0b5/ko.xpi) = 4c4d583a94b5d6b986b0ada70bebf77dec103f35e216c429822748e6623ec92a +SIZE (xpi/firefox-i18n-60.0b5/ko.xpi) = 495624 +SHA256 (xpi/firefox-i18n-60.0b5/lij.xpi) = df7ccc944c53e4670f56d7cec12e3ce3acfa98893ba1e845a878e66705f3258d +SIZE (xpi/firefox-i18n-60.0b5/lij.xpi) = 458698 +SHA256 (xpi/firefox-i18n-60.0b5/lt.xpi) = 8c361d81e4d1acf876e002ad7512c58d8905802352c815c6e752b1ebda67c750 +SIZE (xpi/firefox-i18n-60.0b5/lt.xpi) = 483935 +SHA256 (xpi/firefox-i18n-60.0b5/lv.xpi) = e09c12f9ef45f5b5dd37458cc3e866fe5c3465a56030f4eb897722be66244f16 +SIZE (xpi/firefox-i18n-60.0b5/lv.xpi) = 474182 +SHA256 (xpi/firefox-i18n-60.0b5/mai.xpi) = 16336213becc43dfd2f54e6e7a5d116568da95c0c01978da1c830bba9243cc0b +SIZE (xpi/firefox-i18n-60.0b5/mai.xpi) = 506308 +SHA256 (xpi/firefox-i18n-60.0b5/mk.xpi) = 14a6e7fb692d452f4dc306a6d198090dafc209a0ad4ca0c75760158547d93d26 +SIZE (xpi/firefox-i18n-60.0b5/mk.xpi) = 471743 +SHA256 (xpi/firefox-i18n-60.0b5/ml.xpi) = f5ce2ac9dda600a7e07ed4a3e27ab08db1f026535dedf13bd3623212a928509c +SIZE (xpi/firefox-i18n-60.0b5/ml.xpi) = 548989 +SHA256 (xpi/firefox-i18n-60.0b5/mr.xpi) = 9fc3f147376f31c17f22d7844a11ffb3ef50b45f59eefc236e1128cd06a0e589 +SIZE (xpi/firefox-i18n-60.0b5/mr.xpi) = 529031 +SHA256 (xpi/firefox-i18n-60.0b5/ms.xpi) = 50903f02e2364eb78131d3dc8bcfcb03ae9936b18460f3389b1c8553701f117a +SIZE (xpi/firefox-i18n-60.0b5/ms.xpi) = 459172 +SHA256 (xpi/firefox-i18n-60.0b5/my.xpi) = 2dcaaf4ebd56548a802e4b57b76171b64d44fd0aa857356d18b34060eb26d2be +SIZE (xpi/firefox-i18n-60.0b5/my.xpi) = 521497 +SHA256 (xpi/firefox-i18n-60.0b5/nb-NO.xpi) = 14470345bf6515d9d0faa5e28862a0deef41d74e9c6f6d7d8644e595b5d7f5c1 +SIZE (xpi/firefox-i18n-60.0b5/nb-NO.xpi) = 458957 +SHA256 (xpi/firefox-i18n-60.0b5/ne-NP.xpi) = 098122a1473bdfd589334fc1e292b7e547082e360cf8c1044bbab491a85a4a6d +SIZE (xpi/firefox-i18n-60.0b5/ne-NP.xpi) = 506098 +SHA256 (xpi/firefox-i18n-60.0b5/nl.xpi) = bc578a51f18bd31bfaa2a67746ae1d67c603a837526e715216fbf72502a0ef2c +SIZE (xpi/firefox-i18n-60.0b5/nl.xpi) = 465843 +SHA256 (xpi/firefox-i18n-60.0b5/nn-NO.xpi) = 538e75a3bb7548a54b63fd36b50e45a4e7cf6d0d6aa1b5e5ef6e766388e28d9a +SIZE (xpi/firefox-i18n-60.0b5/nn-NO.xpi) = 460193 +SHA256 (xpi/firefox-i18n-60.0b5/oc.xpi) = 010f9524fddfceaa188e3ff39a3bb2d77a03e8dd4b468dec015a60228de7c757 +SIZE (xpi/firefox-i18n-60.0b5/oc.xpi) = 476425 +SHA256 (xpi/firefox-i18n-60.0b5/or.xpi) = 4e9ea3006d3f0317b8c7274f60b776e017762f6abb7476dbaf7d83c822ac1834 +SIZE (xpi/firefox-i18n-60.0b5/or.xpi) = 499272 +SHA256 (xpi/firefox-i18n-60.0b5/pa-IN.xpi) = 8ce08219356e56cd7d065a8660e1780025ceeabdc1e2bbdcde4688fe50895aae +SIZE (xpi/firefox-i18n-60.0b5/pa-IN.xpi) = 502588 +SHA256 (xpi/firefox-i18n-60.0b5/pl.xpi) = b80a206b5b6325145ca5aac78f99781657f8f8e58b3101b41313333f5a1a82b7 +SIZE (xpi/firefox-i18n-60.0b5/pl.xpi) = 369871 +SHA256 (xpi/firefox-i18n-60.0b5/pt-BR.xpi) = a28e0096598fdd7cb36e79d1c796100a86eca620f5c3e59816d151a7997c98b2 +SIZE (xpi/firefox-i18n-60.0b5/pt-BR.xpi) = 464670 +SHA256 (xpi/firefox-i18n-60.0b5/pt-PT.xpi) = eb44de0a3a7737eda483c9ac47bb7414d3e070c5f0579dae047d51dd9a06b849 +SIZE (xpi/firefox-i18n-60.0b5/pt-PT.xpi) = 468502 +SHA256 (xpi/firefox-i18n-60.0b5/rm.xpi) = 07f8d2a499a0ebbd99a83df293342d3ffe8927fc59731a67de1276b3d6002a93 +SIZE (xpi/firefox-i18n-60.0b5/rm.xpi) = 460291 +SHA256 (xpi/firefox-i18n-60.0b5/ro.xpi) = 788f3c9ab08d8df1ab5a71e64c7d7ee5e8152e4cd172a9af28d4feb33c9435fe +SIZE (xpi/firefox-i18n-60.0b5/ro.xpi) = 465519 +SHA256 (xpi/firefox-i18n-60.0b5/ru.xpi) = 72b7d6b81c118b4c20c936cc12b74be163226eb25cd2bf44008785fcdd3cd36d +SIZE (xpi/firefox-i18n-60.0b5/ru.xpi) = 537214 +SHA256 (xpi/firefox-i18n-60.0b5/si.xpi) = 6c69973c78a4dc6a5e0a3c0e9ca954926b1dffccbac7b539c760e8a206fce855 +SIZE (xpi/firefox-i18n-60.0b5/si.xpi) = 500594 +SHA256 (xpi/firefox-i18n-60.0b5/sk.xpi) = 338d9a0e847194aad995b41cfbf491aa83de3dcb4ec6440018ad3ed0f453a226 +SIZE (xpi/firefox-i18n-60.0b5/sk.xpi) = 489623 +SHA256 (xpi/firefox-i18n-60.0b5/sl.xpi) = d4f6a41b6e47ebd2776d6b4d3544f08adb15dd2a674bfb9b995238d0aea49dbe +SIZE (xpi/firefox-i18n-60.0b5/sl.xpi) = 468030 +SHA256 (xpi/firefox-i18n-60.0b5/son.xpi) = 52dd556656c7b3c4654cd812166a3b54c75ae003352406d9db3a34a47ea8f431 +SIZE (xpi/firefox-i18n-60.0b5/son.xpi) = 454713 +SHA256 (xpi/firefox-i18n-60.0b5/sq.xpi) = 28c25be76f6ad202f6e1bc5135d719083189c2e012ae58633e8be544a1fc93ed +SIZE (xpi/firefox-i18n-60.0b5/sq.xpi) = 473747 +SHA256 (xpi/firefox-i18n-60.0b5/sr.xpi) = c5dfda1cd4d78162338792d66f33d97d10fcc6c81b846fabcff225bd76d5df80 +SIZE (xpi/firefox-i18n-60.0b5/sr.xpi) = 495757 +SHA256 (xpi/firefox-i18n-60.0b5/sv-SE.xpi) = 43e9e615944a4eedebbf7b9213d4779d49f92c9d5b84e3b9004ae482d6b22324 +SIZE (xpi/firefox-i18n-60.0b5/sv-SE.xpi) = 467363 +SHA256 (xpi/firefox-i18n-60.0b5/ta.xpi) = d155e354747e3137b3f9aa57bdabbc08e5bc52600356cf236218f090a94870a9 +SIZE (xpi/firefox-i18n-60.0b5/ta.xpi) = 523844 +SHA256 (xpi/firefox-i18n-60.0b5/te.xpi) = e7cb950c258f7d7dc3bd37c3960c5074e75f30ff3b84fa6ca7ed30f604a1d56e +SIZE (xpi/firefox-i18n-60.0b5/te.xpi) = 537295 +SHA256 (xpi/firefox-i18n-60.0b5/th.xpi) = a9542adea2505a78bc194855a2908ceec369b3875c6ee04627154a4318746626 +SIZE (xpi/firefox-i18n-60.0b5/th.xpi) = 509139 +SHA256 (xpi/firefox-i18n-60.0b5/tr.xpi) = 79315bfa5a79d4bedb0d7aaba2a6134dc2d2f39223d1523175cd3ee6de54522e +SIZE (xpi/firefox-i18n-60.0b5/tr.xpi) = 474040 +SHA256 (xpi/firefox-i18n-60.0b5/uk.xpi) = 61d0872effa759f2df1f5496aff3e1d0d758884820864e4adcf6d49502b72019 +SIZE (xpi/firefox-i18n-60.0b5/uk.xpi) = 526896 +SHA256 (xpi/firefox-i18n-60.0b5/ur.xpi) = 3ce6bfa9a9575d08d46259de93d043c5f847f011f15d99e1fb6d598705a5c78a +SIZE (xpi/firefox-i18n-60.0b5/ur.xpi) = 516998 +SHA256 (xpi/firefox-i18n-60.0b5/uz.xpi) = e865bf0cc7e82df1220d0f31e814835f0da139241988decac02536319310056d +SIZE (xpi/firefox-i18n-60.0b5/uz.xpi) = 466306 +SHA256 (xpi/firefox-i18n-60.0b5/vi.xpi) = b171eae7d5b851e81ad18ba3d82284ef0f962c6a2c48789093fb2222527c85e9 +SIZE (xpi/firefox-i18n-60.0b5/vi.xpi) = 480589 +SHA256 (xpi/firefox-i18n-60.0b5/xh.xpi) = 0950710c50a284084b5bf1fc48a48c68c0c3dc0a84e272a288a8eb49ccac34fe +SIZE (xpi/firefox-i18n-60.0b5/xh.xpi) = 468364 +SHA256 (xpi/firefox-i18n-60.0b5/zh-CN.xpi) = 6bc8b8a69c1684deb0659f1ad50e0e1c29f8c1e5a2089fcf0c64163123f5518a +SIZE (xpi/firefox-i18n-60.0b5/zh-CN.xpi) = 492222 +SHA256 (xpi/firefox-i18n-60.0b5/zh-TW.xpi) = ce50ce7772e774502f0ac85f93820653dd8c9c2c707975d6423ddbb1a3b2e189 +SIZE (xpi/firefox-i18n-60.0b5/zh-TW.xpi) = 489618 diff --git a/www/firefox/Makefile b/www/firefox/Makefile index 405e64b6e5e5..1cae63ac0120 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -2,27 +2,27 @@ # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 59.0.1 +DISTVERSION= 60.0b6 PORTEPOCH= 1 CATEGORIES= www ipv6 -MASTER_SITES= https://hg.mozilla.org/releases/mozilla-release/archive/ -DISTNAME= ${MASTER_SITES:M*hg*:S,/archive/,,:T}-3db9e3d52b17563efca181ccbb50deb8660c59ae -DISTFILES= ${DISTNAME:C/.*-//}${EXTRACT_SUFX} -DIST_SUBDIR= firefox +MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source +DISTNAME= ${PORTNAME}-${PORTVERSION:R} +DISTFILES= ${DISTNAME}${PORTVERSION:E}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla -BUILD_DEPENDS= nspr>=4.18:devel/nspr \ - nss>=3.35:security/nss \ +BUILD_DEPENDS= nspr>=4.19:devel/nspr \ + nss>=3.36: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 \ 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 \ @@ -30,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 71d66767c09d..7ab4743e860e 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1521151925 -SHA256 (firefox/3db9e3d52b17563efca181ccbb50deb8660c59ae.tar.bz2) = 06201e824d2460f100312518524d20ec53186f6437a1932d7b78157c78416ed3 -SIZE (firefox/3db9e3d52b17563efca181ccbb50deb8660c59ae.tar.bz2) = 304965726 +TIMESTAMP = 1521738065 +SHA256 (firefox-60.0b6.source.tar.xz) = 35689c1d0dd0d75e8884409c86cb3c5f22b673ae7fe8bce31bef9fff3a5bff7f +SIZE (firefox-60.0b6.source.tar.xz) = 267954052 diff --git a/www/firefox/files/patch-bug1021761 b/www/firefox/files/patch-bug1021761 index f0764a8c4b22..d2cddd428791 100644 --- a/www/firefox/files/patch-bug1021761 +++ b/www/firefox/files/patch-bug1021761 @@ -1198,9 +1198,9 @@ 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 toolkit/library/moz.build toolkit/library/moz.build index a61c689c83c3..7764df6f8a6b 100644 --- toolkit/library/moz.build diff --git a/www/firefox/files/patch-bug1418162 b/www/firefox/files/patch-bug1418162 new file mode 100644 index 000000000000..b454e74c438a --- /dev/null +++ b/www/firefox/files/patch-bug1418162 @@ -0,0 +1,58 @@ +commit b2ebb8d82be2 +Author: Tom Ritter +Date: Mon Feb 19 09:43:27 2018 -0600 + + Bug 1418162 Use a build constant to determine update channel, and update ESR equation for 60 r?gijs,Build + + Previously we used Services.appinfo.defaultUpdateChannel to determine if we were on ESR + and if so, we would assert to make sure the ESR equation hadn't changed. But that method + is a footgun. We could use UpdateUtils.getUpdateChannel, but for our purposes here, the + compile-time constant will work just as well. + + If it's set correctly, for Mozilla, we will perform our assert check. If it's not set to + esr (e.g. for Tor), they'll skip the assert. They probably want to control their user agent + themselves anyway. + + MozReview-Commit-ID: DLnWSEpCVJ6 +--- + .../resistfingerprinting/nsRFPService.cpp | 21 +++++++-------------- + 1 file changed, 7 insertions(+), 14 deletions(-) + +diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp +index aeb3cb6b3539..1fd6a6e8fe8d 100644 +--- toolkit/components/resistfingerprinting/nsRFPService.cpp ++++ toolkit/components/resistfingerprinting/nsRFPService.cpp +@@ -606,26 +606,19 @@ nsRFPService::GetSpoofedUserAgent(nsACString &userAgent) + uint32_t firefoxVersion = appVersion.ToInteger(&rv); + NS_ENSURE_SUCCESS(rv, rv); + +- // Starting from Firefox 10, Firefox ESR was released once every seven +- // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. +- // We infer the last and closest ESR version based on this rule. +- nsCOMPtr runtime = +- do_GetService("@mozilla.org/xre/runtime;1", &rv); +- NS_ENSURE_SUCCESS(rv, rv); +- +- nsAutoCString updateChannel; +- rv = runtime->GetDefaultUpdateChannel(updateChannel); +- NS_ENSURE_SUCCESS(rv, rv); +- + // If we are running in Firefox ESR, determine whether the formula of ESR + // version has changed. Once changed, we must update the formula in this + // function. +- if (updateChannel.EqualsLiteral("esr")) { +- MOZ_ASSERT(((firefoxVersion % 7) == 3), ++ if (!strcmp(NS_STRINGIFY(MOZ_UPDATE_CHANNEL), "esr")) { ++ MOZ_ASSERT(((firefoxVersion % 7) == 4), + "Please udpate ESR version formula in nsRFPService.cpp"); + } + +- uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7); ++ // Starting from Firefox 10, Firefox ESR was released once every seven ++ // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. ++ // Except we used 60 as an ESR instead of 59. ++ // We infer the last and closest ESR version based on this rule. ++ uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 4) % 7); + userAgent.Assign(nsPrintfCString( + "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0", + SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion)); diff --git a/www/firefox/files/patch-bug1433747 b/www/firefox/files/patch-bug1433747 deleted file mode 100644 index 1a3b8737e8c3..000000000000 --- a/www/firefox/files/patch-bug1433747 +++ /dev/null @@ -1,24 +0,0 @@ -Apply simd@cf87865a998a to unbreak -C target-cpu with Rust >= 1.24 - -diff --git third_party/rust/simd/.cargo-checksum.json third_party/rust/simd/.cargo-checksum.json -index 65f31b0560e6..f16d0dd4fd61 100644 ---- third_party/rust/simd/.cargo-checksum.json -+++ third_party/rust/simd/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"efe3006b13a13261a3dec3d37dc1d8cb53950f3803c420069231803374949937","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} -\ No newline at end of file -+{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"3bcb3f391ad5f16f0a6da0bc1301329beb478ad6265bd3b2c9c124fc2e6198e5","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} -\ No newline at end of file -diff --git third_party/rust/simd/src/x86/avx2.rs third_party/rust/simd/src/x86/avx2.rs -index fa92e3b60786..e86a33d3b5bb 100644 ---- third_party/rust/simd/src/x86/avx2.rs -+++ third_party/rust/simd/src/x86/avx2.rs -@@ -42,7 +42,7 @@ extern "platform-intrinsic" { - fn x86_mm256_packus_epi32(x: i32x8, y: i32x8) -> u16x16; - fn x86_mm256_permutevar8x32_epi32(x: i32x8, y: i32x8) -> i32x8; - fn x86_mm256_permutevar8x32_ps(x: f32x8, y: i32x8) -> f32x8; -- fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u8x32; -+ fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u64x4; - fn x86_mm256_shuffle_epi8(x: i8x32, y: i8x32) -> i8x32; - fn x86_mm256_sign_epi8(x: i8x32, y: i8x32) -> i8x32; - fn x86_mm256_sign_epi16(x: i16x16, y: i16x16) -> i16x16; diff --git a/www/firefox/files/patch-bug1438678 b/www/firefox/files/patch-bug1438678 new file mode 100644 index 000000000000..47e8dec9ad5b --- /dev/null +++ b/www/firefox/files/patch-bug1438678 @@ -0,0 +1,1000 @@ +commit 68124009fc5a +Author: Nicholas Nethercote +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-bug1442791 b/www/firefox/files/patch-bug1442791 new file mode 100644 index 000000000000..fe097d8375d2 --- /dev/null +++ b/www/firefox/files/patch-bug1442791 @@ -0,0 +1,33 @@ +Build Linux version of GetExecutablePathImpl() on other Unix systems + +ANGLE system_utils* are unused in Gecko. +https://searchfox.org/mozilla-central/search?regexp=true&q=\bGetExecutable%28Path%7CDirectory%29\B + +diff --git gfx/angle/targets/angle_common/moz.build gfx/angle/targets/angle_common/moz.build +index bd4b743ec0dd..3c0dbfae491a 100644 +--- gfx/angle/targets/angle_common/moz.build ++++ gfx/angle/targets/angle_common/moz.build +@@ -118,17 +118,17 @@ SOURCES += [ + '../../checkout/src/common/uniform_type_info_autogen.cpp', + '../../checkout/src/common/utilities.cpp', + ] +-if CONFIG['OS_ARCH'] == 'Darwin': ++if CONFIG['OS_ARCH'] == 'WINNT': + SOURCES += [ +- '../../checkout/src/common/system_utils_mac.cpp', ++ '../../checkout/src/common/system_utils_win.cpp', + ] +-if CONFIG['OS_ARCH'] == 'Linux': ++elif CONFIG['OS_ARCH'] == 'Darwin': + SOURCES += [ +- '../../checkout/src/common/system_utils_linux.cpp', ++ '../../checkout/src/common/system_utils_mac.cpp', + ] +-if CONFIG['OS_ARCH'] == 'WINNT': ++else: # Android, Linux, BSDs, etc. + SOURCES += [ +- '../../checkout/src/common/system_utils_win.cpp', ++ '../../checkout/src/common/system_utils_linux.cpp', + ] + # + #LDFLAGS += [ diff --git a/www/firefox/files/patch-bug1444074 b/www/firefox/files/patch-bug1444074 deleted file mode 100644 index bdb45963a40c..000000000000 --- a/www/firefox/files/patch-bug1444074 +++ /dev/null @@ -1,34 +0,0 @@ -Enable full-duplex by default for all platforms - -diff --git modules/libpref/init/all.js modules/libpref/init/all.js -index a152e4944e95..322d009da739 100644 ---- modules/libpref/init/all.js -+++ modules/libpref/init/all.js -@@ -557,25 +557,18 @@ pref("media.getusermedia.agc", 3); // kAgcAdaptiveDigital - // capture_delay: Adjustments for OS-specific input delay (lower bound) - // playout_delay: Adjustments for OS-specific AudioStream+cubeb+output delay (lower bound) - // full_duplex: enable cubeb full-duplex capture/playback -+pref("media.navigator.audio.full_duplex", true); - #if defined(XP_MACOSX) - pref("media.peerconnection.capture_delay", 50); --pref("media.navigator.audio.full_duplex", true); - #elif defined(XP_WIN) - pref("media.peerconnection.capture_delay", 50); --pref("media.navigator.audio.full_duplex", true); - #elif defined(ANDROID) - pref("media.peerconnection.capture_delay", 100); --pref("media.navigator.audio.full_duplex", true); - pref("media.navigator.hardware.vp8_encode.acceleration_enabled", true); - pref("media.navigator.hardware.vp8_encode.acceleration_remote_enabled", true); - pref("media.navigator.hardware.vp8_decode.acceleration_enabled", false); --#elif defined(XP_LINUX) || defined(MOZ_SNDIO) --pref("media.peerconnection.capture_delay", 70); --pref("media.navigator.audio.full_duplex", true); - #else --// *BSD, others - merely a guess for now --pref("media.peerconnection.capture_delay", 50); --pref("media.navigator.audio.full_duplex", false); -+pref("media.peerconnection.capture_delay", 70); - #endif - // Use MediaDataDecoder API for WebRTC, this includes hardware acceleration for - // decoding. 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