diff options
author | Jan Beich <jbeich@FreeBSD.org> | 2018-06-25 22:36:12 +0000 |
---|---|---|
committer | Jan Beich <jbeich@FreeBSD.org> | 2018-06-25 22:36:12 +0000 |
commit | bc8335f2ef0cabe0c4e45c88b517039e001bf526 (patch) | |
tree | d3a9ca03375b00398a2c1275d592b41af178ab8f | |
parent | 28ece62a29ad29fb0384b2b2da7c4a7a74c99de8 (diff) | |
download | ports-bc8335f2ef0cabe0c4e45c88b517039e001bf526.tar.gz ports-bc8335f2ef0cabe0c4e45c88b517039e001bf526.zip |
MFH: r468159 r472727 r472730 r473076
www/firefox: update to 61.0
- Drop DTRACE option, as it no longer builds
https://bugzilla.mozilla.org/show_bug.cgi?id=1448659
https://bugzilla.mozilla.org/show_bug.cgi?id=702179#c33
- Stop using system hunspell per
https://bugzilla.mozilla.org/show_bug.cgi?id=1460600
Changes: https://www.mozilla.org/firefox/61.0/releasenotes/
PR: 227850
Security: cd81806c-26e7-4d4a-8425-02724a2f48af
Approved by: ports-secteam blanket
Differential Revision: https://reviews.freebsd.org/D15227
Notes
Notes:
svn path=/branches/2018Q2/; revision=473354
-rw-r--r-- | Mk/Uses/gecko.mk | 4 | ||||
-rw-r--r-- | Mk/bsd.gecko.mk | 5 | ||||
-rw-r--r-- | www/firefox-i18n/Makefile | 7 | ||||
-rw-r--r-- | www/firefox-i18n/distinfo | 394 | ||||
-rw-r--r-- | www/firefox/Makefile | 13 | ||||
-rw-r--r-- | www/firefox/distinfo | 6 | ||||
-rw-r--r-- | www/firefox/files/patch-addon-search | 8 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1021761 | 13 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1375074 | 82 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1411481 | 85 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1438678 | 1000 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1442583 | 39 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1444798 | 45 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1445907 | 75 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1447359 | 45 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1451292 | 33 | ||||
-rw-r--r-- | www/firefox/files/patch-bug1456556 | 22 | ||||
-rw-r--r-- | www/firefox/files/patch-bug702179 | 12 | ||||
-rw-r--r-- | www/firefox/files/patch-dom_media_flac_FlacDecoder.cpp | 6 | ||||
-rw-r--r-- | www/firefox/files/patch-u2f-hid-rs62 | 290 | ||||
-rw-r--r-- | www/firefox/files/patch-z-bug1436911 | 1162 | ||||
-rw-r--r-- | www/firefox/files/patch-z-bug517422 | 8 |
22 files changed, 249 insertions, 3105 deletions
diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk index 9df59c251201..18d167e70a2f 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 60 +_GECKO_VERSIONS= 52 61 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 52_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr -60_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox +61_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 b4c33ff5e8be..6bef0740511c 100644 --- a/Mk/bsd.gecko.mk +++ b/Mk/bsd.gecko.mk @@ -111,6 +111,11 @@ BUILD_DEPENDS+= llvm${MESA_LLVM_VER}>0:devel/llvm${MESA_LLVM_VER} MOZ_EXPORT+= LLVM_CONFIG=llvm-config${MESA_LLVM_VER} .endif +.if ${MOZILLA_VER:R:R} >= 61 +BUILD_DEPENDS+= ${LOCALBASE}/bin/python${PYTHON3_DEFAULT}:lang/python${PYTHON3_DEFAULT:S/.//g} +MOZ_EXPORT+= PYTHON3="${LOCALBASE}/bin/python${PYTHON3_DEFAULT}" +.endif + .if ${OPSYS} == FreeBSD && ${OSREL} == 11.1 LLD_UNSAFE= yes .endif diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile index 290aad183601..69f345f42faa 100644 --- a/www/firefox-i18n/Makefile +++ b/www/firefox-i18n/Makefile @@ -2,10 +2,11 @@ # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 60.0.2 +PORTVERSION= 61.0 +PORTREVISION= 1 CATEGORIES= www MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi + MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build3/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} @@ -15,7 +16,7 @@ COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:archivers/zip -USES= zip:infozip gecko:firefox,60,build +USES= zip:infozip gecko:firefox,61,build USE_XPI= firefox NO_ARCH= yes diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo index 8967f0de7081..1e4176a97233 100644 --- a/www/firefox-i18n/distinfo +++ b/www/firefox-i18n/distinfo @@ -1,197 +1,197 @@ -TIMESTAMP = 1528228087 -SHA256 (xpi/firefox-i18n-60.0.2/ach.xpi) = 3264cdac77964c001d27c1da36d280702c6e28bb9caedf06a7a57d2d034f5097 -SIZE (xpi/firefox-i18n-60.0.2/ach.xpi) = 496058 -SHA256 (xpi/firefox-i18n-60.0.2/af.xpi) = 46c49276255243becdddff6102bea42c4860cc3c008d4b01f8d95b91812cdfca -SIZE (xpi/firefox-i18n-60.0.2/af.xpi) = 486534 -SHA256 (xpi/firefox-i18n-60.0.2/an.xpi) = 037f8ec9d96f019059d8131eff4ab06fff8ecc657f98ea231b1e5e7bae730880 -SIZE (xpi/firefox-i18n-60.0.2/an.xpi) = 519729 -SHA256 (xpi/firefox-i18n-60.0.2/ar.xpi) = cda7d8d114da54e4ecd6a5781795ab590c3510c59ab74d1c8343a2834489fa73 -SIZE (xpi/firefox-i18n-60.0.2/ar.xpi) = 546953 -SHA256 (xpi/firefox-i18n-60.0.2/as.xpi) = b978d40a6ebe0ec9ae07fe9d0b2a24c181422c1c09939255f7984a4b153b9a26 -SIZE (xpi/firefox-i18n-60.0.2/as.xpi) = 529953 -SHA256 (xpi/firefox-i18n-60.0.2/ast.xpi) = 5be044c2ea120e039e73a33c334314ce488bc12f0d0d5605a86320a023ed3ea3 -SIZE (xpi/firefox-i18n-60.0.2/ast.xpi) = 507870 -SHA256 (xpi/firefox-i18n-60.0.2/az.xpi) = c692cc2f12e4df1b5e45a5070766e8c5cf468aeb3315180228defdc5704e61d1 -SIZE (xpi/firefox-i18n-60.0.2/az.xpi) = 523974 -SHA256 (xpi/firefox-i18n-60.0.2/be.xpi) = cc291a855dcb454f114b40c7673db18dd7c0b2962a3c11ff9c0a986e3231eaa6 -SIZE (xpi/firefox-i18n-60.0.2/be.xpi) = 579945 -SHA256 (xpi/firefox-i18n-60.0.2/bg.xpi) = 62178b8aa781941a3de9d11e597092d479f682b5c6738de010110a3b9a9a42d8 -SIZE (xpi/firefox-i18n-60.0.2/bg.xpi) = 573080 -SHA256 (xpi/firefox-i18n-60.0.2/bn-BD.xpi) = cbd8950fdab635e864c10a5358d0495210effd6160a62b9599b093338dc67a16 -SIZE (xpi/firefox-i18n-60.0.2/bn-BD.xpi) = 589638 -SHA256 (xpi/firefox-i18n-60.0.2/bn-IN.xpi) = 026b702fdec8e922e71e6a9198d42de7a615d47d9ce47d8a58fdc8c0ee4ffe5a -SIZE (xpi/firefox-i18n-60.0.2/bn-IN.xpi) = 570083 -SHA256 (xpi/firefox-i18n-60.0.2/br.xpi) = acd17442b0918ddadaa324223b70cc240e3e5f9377ee1bf966cecb6f1bd124cf -SIZE (xpi/firefox-i18n-60.0.2/br.xpi) = 511252 -SHA256 (xpi/firefox-i18n-60.0.2/bs.xpi) = 6fc982720e171f8c4e1b06eed294735a6514e3e54bb9ada39cca697315afb48f -SIZE (xpi/firefox-i18n-60.0.2/bs.xpi) = 513936 -SHA256 (xpi/firefox-i18n-60.0.2/ca.xpi) = 41f425b998c4f37c2e506d24e06ab692597d5d5f191c1042cef42b53b164377e -SIZE (xpi/firefox-i18n-60.0.2/ca.xpi) = 524484 -SHA256 (xpi/firefox-i18n-60.0.2/cak.xpi) = e511a882edb4fe78c5759c716cc5313875dde60dcb144cb19f1ff2d3dd97478d -SIZE (xpi/firefox-i18n-60.0.2/cak.xpi) = 535516 -SHA256 (xpi/firefox-i18n-60.0.2/cs.xpi) = 5bd65f390119dcd6f09be4c71a158187e3d0ce3aa775b17459c4b57b6931877b -SIZE (xpi/firefox-i18n-60.0.2/cs.xpi) = 531015 -SHA256 (xpi/firefox-i18n-60.0.2/cy.xpi) = e2c989a044c9a4af5ec60676d1e2f652d3bea657d0b51f91fe763458781d6279 -SIZE (xpi/firefox-i18n-60.0.2/cy.xpi) = 515864 -SHA256 (xpi/firefox-i18n-60.0.2/da.xpi) = fe33cf6e6b118cbd56af791fce6b57640af600f3ed483ff71b3dace8c3ec378a -SIZE (xpi/firefox-i18n-60.0.2/da.xpi) = 509975 -SHA256 (xpi/firefox-i18n-60.0.2/de.xpi) = eda7bc1cd123f24b57ce6d0fcfca3e6c0954c71a32ef610ae62dfe8ae8477140 -SIZE (xpi/firefox-i18n-60.0.2/de.xpi) = 525689 -SHA256 (xpi/firefox-i18n-60.0.2/dsb.xpi) = 73daa18ad8e7a42c781242a506587fed18158f0bf1f9f2e7e9c2c8fa4916b4a3 -SIZE (xpi/firefox-i18n-60.0.2/dsb.xpi) = 538745 -SHA256 (xpi/firefox-i18n-60.0.2/el.xpi) = c447405287531c915afde8ca535b1b812b29a4a15b8aa1bb562b26276801a371 -SIZE (xpi/firefox-i18n-60.0.2/el.xpi) = 592917 -SHA256 (xpi/firefox-i18n-60.0.2/en-GB.xpi) = fe02706b63725e0ef67d23cecae9e0a592c1b0c8bb0050773954f142793ef0d4 -SIZE (xpi/firefox-i18n-60.0.2/en-GB.xpi) = 490903 -SHA256 (xpi/firefox-i18n-60.0.2/en-US.xpi) = 3a012162ccef7068fd5b16117ede3eb8c151e99635e83c031a37f1989565f16b -SIZE (xpi/firefox-i18n-60.0.2/en-US.xpi) = 472384 -SHA256 (xpi/firefox-i18n-60.0.2/en-ZA.xpi) = 0df9291489150fa400c0927b770f5a94e7d3ad641ea59ac720cbf006f3c58e50 -SIZE (xpi/firefox-i18n-60.0.2/en-ZA.xpi) = 473896 -SHA256 (xpi/firefox-i18n-60.0.2/eo.xpi) = 05cc1895271e735fa0d4e73c0cc792de6d7bea63034777fd7facd3e45d0630da -SIZE (xpi/firefox-i18n-60.0.2/eo.xpi) = 510494 -SHA256 (xpi/firefox-i18n-60.0.2/es-AR.xpi) = 005ee9da32ea33d4f420ecbcd8add9cf2ab5bf332b0a7699ecab4ee67331a564 -SIZE (xpi/firefox-i18n-60.0.2/es-AR.xpi) = 523819 -SHA256 (xpi/firefox-i18n-60.0.2/es-CL.xpi) = f76adcbda565019c183d8a4ecb38a911a7fca78b7db158a5a1fa5402627e0566 -SIZE (xpi/firefox-i18n-60.0.2/es-CL.xpi) = 526509 -SHA256 (xpi/firefox-i18n-60.0.2/es-ES.xpi) = 76b7ab024878427cf6ea87b9a74632c667b4cdcf03bdc899f95bb802dfc304d6 -SIZE (xpi/firefox-i18n-60.0.2/es-ES.xpi) = 459139 -SHA256 (xpi/firefox-i18n-60.0.2/es-MX.xpi) = 2829924eee326add8b7f9f9dffd6a42f54e26bb573307d7655f74dff3fa4df43 -SIZE (xpi/firefox-i18n-60.0.2/es-MX.xpi) = 527838 -SHA256 (xpi/firefox-i18n-60.0.2/et.xpi) = d9f0ff92b02ae4b6674432c191950fce9d5b85307b3dd4a7b818b6c73a701271 -SIZE (xpi/firefox-i18n-60.0.2/et.xpi) = 504174 -SHA256 (xpi/firefox-i18n-60.0.2/eu.xpi) = a80e87f4151defb992312fcd143890c6b86cf5067222a2742257f12eb81fb067 -SIZE (xpi/firefox-i18n-60.0.2/eu.xpi) = 510932 -SHA256 (xpi/firefox-i18n-60.0.2/fa.xpi) = 0bf0337cbd82f45f141eeae5433b4b77da449e3077fc0b32c9a3dc511da47f93 -SIZE (xpi/firefox-i18n-60.0.2/fa.xpi) = 565489 -SHA256 (xpi/firefox-i18n-60.0.2/ff.xpi) = bcf099ecd8ad1544e7d084417d6c876f6629b2689a194d7b38a0988a528e5d15 -SIZE (xpi/firefox-i18n-60.0.2/ff.xpi) = 511432 -SHA256 (xpi/firefox-i18n-60.0.2/fi.xpi) = 657ad94dfd99269ada99636ebf7a7ee9bb7364bdcabaede2f6305bd793793f92 -SIZE (xpi/firefox-i18n-60.0.2/fi.xpi) = 505404 -SHA256 (xpi/firefox-i18n-60.0.2/fr.xpi) = 6c13eaf3cbd4ef845be167f40509e6bb1b6732a3a8f0b7dac8a4b27bb1fb5244 -SIZE (xpi/firefox-i18n-60.0.2/fr.xpi) = 535238 -SHA256 (xpi/firefox-i18n-60.0.2/fy-NL.xpi) = 2def398c510f0417922c6155a47b532a2604794aff25dfaa1a64927e5112e69c -SIZE (xpi/firefox-i18n-60.0.2/fy-NL.xpi) = 523736 -SHA256 (xpi/firefox-i18n-60.0.2/ga-IE.xpi) = a07e724a94de27dcd7efad3b518519eb2dc8fce2e6c6ad82c49d7340f1aae654 -SIZE (xpi/firefox-i18n-60.0.2/ga-IE.xpi) = 526199 -SHA256 (xpi/firefox-i18n-60.0.2/gd.xpi) = f9f60f239d7091ac4fe4e8797fe66a2cf8f1998229439b64f02d12189fc56ed8 -SIZE (xpi/firefox-i18n-60.0.2/gd.xpi) = 520093 -SHA256 (xpi/firefox-i18n-60.0.2/gl.xpi) = 8dbe92bf6e56417998bb581600f33abdc9ced8015a2f5b5404ad16331377d469 -SIZE (xpi/firefox-i18n-60.0.2/gl.xpi) = 496593 -SHA256 (xpi/firefox-i18n-60.0.2/gn.xpi) = 2f8f02fbff9dcafe6e97f56e3bb4cd30dab599cfeac5aa08176ddf115e93c230 -SIZE (xpi/firefox-i18n-60.0.2/gn.xpi) = 532439 -SHA256 (xpi/firefox-i18n-60.0.2/gu-IN.xpi) = 0d5ccd4b83d3bc510f48466b647956d356da98b2873bf324e0449f795418b83c -SIZE (xpi/firefox-i18n-60.0.2/gu-IN.xpi) = 589483 -SHA256 (xpi/firefox-i18n-60.0.2/he.xpi) = ec0799c68a0f054ec30fdf9f7b698517b12d960235dabcbfd6ea828e38647cee -SIZE (xpi/firefox-i18n-60.0.2/he.xpi) = 535211 -SHA256 (xpi/firefox-i18n-60.0.2/hi-IN.xpi) = 3fd33dabf5a465fba7983553ba89d7189cb156132bd2060932b11f1bc3efbabf -SIZE (xpi/firefox-i18n-60.0.2/hi-IN.xpi) = 590076 -SHA256 (xpi/firefox-i18n-60.0.2/hr.xpi) = be54a7a81d3d2aecd5bda7266034f2c41dd2271ca41c4a59dfc2d95ef8ef6876 -SIZE (xpi/firefox-i18n-60.0.2/hr.xpi) = 515186 -SHA256 (xpi/firefox-i18n-60.0.2/hsb.xpi) = c552a2302b5832c953db367475d9eb292e75ef3f1319e034ade05e6e5ef1f15b -SIZE (xpi/firefox-i18n-60.0.2/hsb.xpi) = 536278 -SHA256 (xpi/firefox-i18n-60.0.2/hu.xpi) = 61bb78d4604bb4f4fee525751486e6e5612c285565bb7e42f6e3b388a9dbbe31 -SIZE (xpi/firefox-i18n-60.0.2/hu.xpi) = 537587 -SHA256 (xpi/firefox-i18n-60.0.2/hy-AM.xpi) = 54deba7f2a00e48cadd99208472e467f1f78a678db91ba3fbb8ffe2d925f5dda -SIZE (xpi/firefox-i18n-60.0.2/hy-AM.xpi) = 568629 -SHA256 (xpi/firefox-i18n-60.0.2/ia.xpi) = c69a5c604f90f239a6c78de43b1f7884a5f553eaa49211f81cf76b1c256638f0 -SIZE (xpi/firefox-i18n-60.0.2/ia.xpi) = 509951 -SHA256 (xpi/firefox-i18n-60.0.2/id.xpi) = f7fb19719341975e08328270ba1f4933d589fb4d2798ef9a00965828aba55227 -SIZE (xpi/firefox-i18n-60.0.2/id.xpi) = 501449 -SHA256 (xpi/firefox-i18n-60.0.2/is.xpi) = 0164a3686761abf0be0a1d8f773762031222e22362152865c4e38ac306b0cdd3 -SIZE (xpi/firefox-i18n-60.0.2/is.xpi) = 512502 -SHA256 (xpi/firefox-i18n-60.0.2/it.xpi) = 02b80d059ae403c04b2e130f521b1d80ea71f505cfe4dbd120ea218a84bedeb0 -SIZE (xpi/firefox-i18n-60.0.2/it.xpi) = 398263 -SHA256 (xpi/firefox-i18n-60.0.2/ja.xpi) = dcb3446a228a3cde462264e0ba39c606aea4dc711919e6c7d5dae252ecdd5a67 -SIZE (xpi/firefox-i18n-60.0.2/ja.xpi) = 571244 -SHA256 (xpi/firefox-i18n-60.0.2/ka.xpi) = fcfe7fc9d2cff0399e369eaf1d8bb5d8adb73773d095858bbefd2758d69f7f27 -SIZE (xpi/firefox-i18n-60.0.2/ka.xpi) = 556072 -SHA256 (xpi/firefox-i18n-60.0.2/kab.xpi) = 049404f2dcb4d32ddcce2b36739b4301b69586906defa775fc6500c8fad678ac -SIZE (xpi/firefox-i18n-60.0.2/kab.xpi) = 519624 -SHA256 (xpi/firefox-i18n-60.0.2/kk.xpi) = ed233b274feec630f92c432ea9adf7624548c628308724aa4046baa51a9d6004 -SIZE (xpi/firefox-i18n-60.0.2/kk.xpi) = 582205 -SHA256 (xpi/firefox-i18n-60.0.2/km.xpi) = a67c04fb6437227a68ab8083491119fc0931dc8b397d605b92f804f9f2f4c710 -SIZE (xpi/firefox-i18n-60.0.2/km.xpi) = 582332 -SHA256 (xpi/firefox-i18n-60.0.2/kn.xpi) = 3427d552400dde0e3d73019cdf6d3ff7e0235d8ea0e9647b90da923c60365924 -SIZE (xpi/firefox-i18n-60.0.2/kn.xpi) = 585098 -SHA256 (xpi/firefox-i18n-60.0.2/ko.xpi) = 22eed6eba57f8cb38bda67e8a90e7bff5668f2e596869bc5a1c60c24453733d3 -SIZE (xpi/firefox-i18n-60.0.2/ko.xpi) = 547056 -SHA256 (xpi/firefox-i18n-60.0.2/lij.xpi) = d1d4e0d940eb4a19ea6ba8f4dd883c4e365d9f1ac7dfe90160764278fec29119 -SIZE (xpi/firefox-i18n-60.0.2/lij.xpi) = 512397 -SHA256 (xpi/firefox-i18n-60.0.2/lt.xpi) = 5d7a35f2890260978d0d7110e73ae2109bb3703d6cd65d36048e66e77062c7fe -SIZE (xpi/firefox-i18n-60.0.2/lt.xpi) = 535632 -SHA256 (xpi/firefox-i18n-60.0.2/lv.xpi) = 462e8d28b118e601f8eaadf7ee495fceac969e1110debe2e0b12f4afdc5b1834 -SIZE (xpi/firefox-i18n-60.0.2/lv.xpi) = 525636 -SHA256 (xpi/firefox-i18n-60.0.2/mai.xpi) = 66e8e472fcdd9532a8401a4a9bb7293fcfab4535e6129e62d0aba974753d0c0c -SIZE (xpi/firefox-i18n-60.0.2/mai.xpi) = 548471 -SHA256 (xpi/firefox-i18n-60.0.2/mk.xpi) = d752302445ac0f14496e4230c1c094d2b78fef42f3272914c3a52b72fb8dc4d3 -SIZE (xpi/firefox-i18n-60.0.2/mk.xpi) = 513025 -SHA256 (xpi/firefox-i18n-60.0.2/ml.xpi) = 0652ddfd12240e1a7a258835b6b72af06856d541c99c6a0d2275dca9157674e5 -SIZE (xpi/firefox-i18n-60.0.2/ml.xpi) = 598198 -SHA256 (xpi/firefox-i18n-60.0.2/mr.xpi) = 2a05310d226bd5be71ede145c898eeb1c2e135aefa0245254201266e0595b969 -SIZE (xpi/firefox-i18n-60.0.2/mr.xpi) = 578337 -SHA256 (xpi/firefox-i18n-60.0.2/ms.xpi) = 877a6de579035a20ff32075e5d4d36079af06c0f307428ecf508c39d2af9aab7 -SIZE (xpi/firefox-i18n-60.0.2/ms.xpi) = 508781 -SHA256 (xpi/firefox-i18n-60.0.2/my.xpi) = 6702089f2b5560f7774f6abd432cbaeb8a3364f4897dde19a158efa647bd7a0d -SIZE (xpi/firefox-i18n-60.0.2/my.xpi) = 569572 -SHA256 (xpi/firefox-i18n-60.0.2/nb-NO.xpi) = 773f9a9843c79f34bfa459829b8c9cd3546b544dccefde0e7c468098de47f383 -SIZE (xpi/firefox-i18n-60.0.2/nb-NO.xpi) = 509104 -SHA256 (xpi/firefox-i18n-60.0.2/ne-NP.xpi) = d3e33d855d4e0d0d89fda9c4cd6b1322348059e2ec378d522904f40e81a3f763 -SIZE (xpi/firefox-i18n-60.0.2/ne-NP.xpi) = 554577 -SHA256 (xpi/firefox-i18n-60.0.2/nl.xpi) = 4f419acfd5824b75e6be4a8a95645ff6bc8798fe3e54c740f8652ca7836ef539 -SIZE (xpi/firefox-i18n-60.0.2/nl.xpi) = 516653 -SHA256 (xpi/firefox-i18n-60.0.2/nn-NO.xpi) = 29aa2f24e4bdd67c58d17caecd8b2c7d81bb0bbdc682d76487614621561f1085 -SIZE (xpi/firefox-i18n-60.0.2/nn-NO.xpi) = 510621 -SHA256 (xpi/firefox-i18n-60.0.2/oc.xpi) = ec8836cd689ebb864cb994dfaee342dbcf9a5f2423f0f399ffbc1c6a118d2a7d -SIZE (xpi/firefox-i18n-60.0.2/oc.xpi) = 526207 -SHA256 (xpi/firefox-i18n-60.0.2/or.xpi) = 9da7b23e12d90aeed04e637772a0b8a3f75d7d6dd8d7cfcfc5d60a99f8d2fd19 -SIZE (xpi/firefox-i18n-60.0.2/or.xpi) = 540089 -SHA256 (xpi/firefox-i18n-60.0.2/pa-IN.xpi) = 77432ae4cf8faa53fb3aaa51749547b63205d301cc9b3cbb17cf8837589554da -SIZE (xpi/firefox-i18n-60.0.2/pa-IN.xpi) = 557086 -SHA256 (xpi/firefox-i18n-60.0.2/pl.xpi) = 6c120bfcc19c4b68b21adffdda876eec2e928509eb0441bc0f6290098e3f333c -SIZE (xpi/firefox-i18n-60.0.2/pl.xpi) = 418192 -SHA256 (xpi/firefox-i18n-60.0.2/pt-BR.xpi) = aa3613bea650524dbb7f5dd7114759df3581479602a64f57f520e267582d4987 -SIZE (xpi/firefox-i18n-60.0.2/pt-BR.xpi) = 513944 -SHA256 (xpi/firefox-i18n-60.0.2/pt-PT.xpi) = 67f4f4e4b1bf773cbe5712042fe99af140d85da9366126aa39c59798bb1dd0cf -SIZE (xpi/firefox-i18n-60.0.2/pt-PT.xpi) = 518540 -SHA256 (xpi/firefox-i18n-60.0.2/rm.xpi) = 569994da2a6f808a8d6c533b76487e19088d60085a043afb273c0cdb0f598685 -SIZE (xpi/firefox-i18n-60.0.2/rm.xpi) = 505263 -SHA256 (xpi/firefox-i18n-60.0.2/ro.xpi) = 5a97e49719592a6d5ef0f829947afb54e2e4449a89a354bcb0bced8e6594fde5 -SIZE (xpi/firefox-i18n-60.0.2/ro.xpi) = 513283 -SHA256 (xpi/firefox-i18n-60.0.2/ru.xpi) = 2ea09073bf39fd18f2257176c71044c8fb9eda6c9e7fedab8c23316f5167d9fb -SIZE (xpi/firefox-i18n-60.0.2/ru.xpi) = 590511 -SHA256 (xpi/firefox-i18n-60.0.2/si.xpi) = 200e788abd768d1ea478a341a2b9ed56b44097b36cde8d9b1818157d30c96cec -SIZE (xpi/firefox-i18n-60.0.2/si.xpi) = 544795 -SHA256 (xpi/firefox-i18n-60.0.2/sk.xpi) = f396351241475b099f7924ee78bc156be5213323789e88f013608d908b0df8f6 -SIZE (xpi/firefox-i18n-60.0.2/sk.xpi) = 540928 -SHA256 (xpi/firefox-i18n-60.0.2/sl.xpi) = b10e2296960aa0a98aaf6fecfd08ce64e223e8f7aec169b1a94d628b2c8348c1 -SIZE (xpi/firefox-i18n-60.0.2/sl.xpi) = 518573 -SHA256 (xpi/firefox-i18n-60.0.2/son.xpi) = a63256b85d637d60086cfff632957c44c45ba53c843634f252e42601d54e7abd -SIZE (xpi/firefox-i18n-60.0.2/son.xpi) = 496920 -SHA256 (xpi/firefox-i18n-60.0.2/sq.xpi) = e8b0fe2f702f3c1858adc19521a4a661275df80664303934c79e14839843f067 -SIZE (xpi/firefox-i18n-60.0.2/sq.xpi) = 520487 -SHA256 (xpi/firefox-i18n-60.0.2/sr.xpi) = 6a4e20050e2b4416ebaa35a32fe5e3ed7ac2191bbf0a5cfa7d5e1e046c1c8dfc -SIZE (xpi/firefox-i18n-60.0.2/sr.xpi) = 547998 -SHA256 (xpi/firefox-i18n-60.0.2/sv-SE.xpi) = 942d86553fe7224497e497464537fecf8de2f5fd9819330821e05b7968a4ebd2 -SIZE (xpi/firefox-i18n-60.0.2/sv-SE.xpi) = 517850 -SHA256 (xpi/firefox-i18n-60.0.2/ta.xpi) = 8c03cea19a64a176f135b6de774740292f93cfdfff262440900b3e8117b789b9 -SIZE (xpi/firefox-i18n-60.0.2/ta.xpi) = 577139 -SHA256 (xpi/firefox-i18n-60.0.2/te.xpi) = ea6dbd7a2f4379f8c980d5bdba84cfd2bcc91b81243e01d2770dd8dc238fca82 -SIZE (xpi/firefox-i18n-60.0.2/te.xpi) = 590179 -SHA256 (xpi/firefox-i18n-60.0.2/th.xpi) = be48a1f68ce337997b6b5cc5f14a44ea53c8a6f9f5fcb9bd4f037e83a5e27f3f -SIZE (xpi/firefox-i18n-60.0.2/th.xpi) = 562042 -SHA256 (xpi/firefox-i18n-60.0.2/tr.xpi) = 114102a3af7a638d2a988c97c47f95631fe9c795770db1238e8329226e6c5087 -SIZE (xpi/firefox-i18n-60.0.2/tr.xpi) = 525034 -SHA256 (xpi/firefox-i18n-60.0.2/uk.xpi) = c72bd318699dcef64d285a970850f1b2953c263033bec419a89b86d06a000ce0 -SIZE (xpi/firefox-i18n-60.0.2/uk.xpi) = 580148 -SHA256 (xpi/firefox-i18n-60.0.2/ur.xpi) = b336ad7af245f94e221d96648a0eafd186c9b0aafabdca13d9495a5a2f0f7cea -SIZE (xpi/firefox-i18n-60.0.2/ur.xpi) = 562604 -SHA256 (xpi/firefox-i18n-60.0.2/uz.xpi) = 72c1d09b935e26dd3838c8121527a768cd3518e0010452be062bd7459b84e944 -SIZE (xpi/firefox-i18n-60.0.2/uz.xpi) = 512908 -SHA256 (xpi/firefox-i18n-60.0.2/vi.xpi) = 8598e67bf41d660c443b62b1feccd8fc4904026bd26304278057028028096822 -SIZE (xpi/firefox-i18n-60.0.2/vi.xpi) = 527412 -SHA256 (xpi/firefox-i18n-60.0.2/xh.xpi) = 4fb78a9f7515ab7e3a1d1c7329a53dd91e090312ffbec6c9141454da8e24a000 -SIZE (xpi/firefox-i18n-60.0.2/xh.xpi) = 511086 -SHA256 (xpi/firefox-i18n-60.0.2/zh-CN.xpi) = 8dccc0a7ec90bd42c0beb420d8572fa591afc3deb949fdbb68a610c53949159d -SIZE (xpi/firefox-i18n-60.0.2/zh-CN.xpi) = 542797 -SHA256 (xpi/firefox-i18n-60.0.2/zh-TW.xpi) = f0d1047fcf359865b99a44f873e210cf5adcde8a9f577cb6e5c517f2bcfa84bb -SIZE (xpi/firefox-i18n-60.0.2/zh-TW.xpi) = 541123 +TIMESTAMP = 1529611471 +SHA256 (xpi/firefox-i18n-61.0/ach.xpi) = 81376263077a639a0df7dc4f160354043298590782ea7d70c42a789df50f1a32 +SIZE (xpi/firefox-i18n-61.0/ach.xpi) = 468310 +SHA256 (xpi/firefox-i18n-61.0/af.xpi) = 84340ef11e67bae138d932fdcce967affa5966a0c5ab01f2cc03d6f68298f2aa +SIZE (xpi/firefox-i18n-61.0/af.xpi) = 458272 +SHA256 (xpi/firefox-i18n-61.0/an.xpi) = 7493be648f7def011e18f6c75290c6def9fac3f3ab4950b4b12b588e212f4a77 +SIZE (xpi/firefox-i18n-61.0/an.xpi) = 492775 +SHA256 (xpi/firefox-i18n-61.0/ar.xpi) = ea4596b8811ae7e7f59f501cb3227232812bd53f3def103ad2bf549cb79d2abb +SIZE (xpi/firefox-i18n-61.0/ar.xpi) = 514910 +SHA256 (xpi/firefox-i18n-61.0/as.xpi) = 4540af01013705c0aea6741a0e213f4874afcb14e34e90a150b19c94e38bfe0a +SIZE (xpi/firefox-i18n-61.0/as.xpi) = 498320 +SHA256 (xpi/firefox-i18n-61.0/ast.xpi) = 6d18813b2e05fe16f66f9f0c82a8e08a3a6fa2890be393c80c301110dd81d800 +SIZE (xpi/firefox-i18n-61.0/ast.xpi) = 478587 +SHA256 (xpi/firefox-i18n-61.0/az.xpi) = e7c42a5364a722e5f6f2351a038ff8c6d70742da71669019810d5537d36f0e39 +SIZE (xpi/firefox-i18n-61.0/az.xpi) = 494290 +SHA256 (xpi/firefox-i18n-61.0/be.xpi) = 0ebf8acad8a81680c135a3c5e2a323cba2207e13edeff400305e492f2c24fe05 +SIZE (xpi/firefox-i18n-61.0/be.xpi) = 550840 +SHA256 (xpi/firefox-i18n-61.0/bg.xpi) = 4ece264c89c8255c74bf65c6a5d25a44af37609e25cc64217c21179accdeaffc +SIZE (xpi/firefox-i18n-61.0/bg.xpi) = 541823 +SHA256 (xpi/firefox-i18n-61.0/bn-BD.xpi) = 8357eee0afe8a67521b2273ef931bf216b06aa3b47add5a11534727080b8cbea +SIZE (xpi/firefox-i18n-61.0/bn-BD.xpi) = 556536 +SHA256 (xpi/firefox-i18n-61.0/bn-IN.xpi) = dce2996cd26162637f4f9a7a8bca61e8d4b8499175231da3580a482c66b91b4c +SIZE (xpi/firefox-i18n-61.0/bn-IN.xpi) = 535412 +SHA256 (xpi/firefox-i18n-61.0/br.xpi) = 338862ca53012668fd5da30e81ae15f4f9255731110ef3c844154b71e3e8931b +SIZE (xpi/firefox-i18n-61.0/br.xpi) = 486576 +SHA256 (xpi/firefox-i18n-61.0/bs.xpi) = da9600f62ef968b429a5d437e48f84308ced217516a3b80949e396b09bd155d5 +SIZE (xpi/firefox-i18n-61.0/bs.xpi) = 489134 +SHA256 (xpi/firefox-i18n-61.0/ca.xpi) = 2afdf45e104400f8c154aeaef8b6099f06fa1ee00cd77353422b8782c80493d5 +SIZE (xpi/firefox-i18n-61.0/ca.xpi) = 497520 +SHA256 (xpi/firefox-i18n-61.0/cak.xpi) = 2dae7c9fbff7b95e02246020518f044c97efdb25264523041fc305bc515dd787 +SIZE (xpi/firefox-i18n-61.0/cak.xpi) = 509328 +SHA256 (xpi/firefox-i18n-61.0/cs.xpi) = 859aeb9a8927fb6dbc5a29a91492989bc5a60204fbc3f8f01ad2009f89d636f9 +SIZE (xpi/firefox-i18n-61.0/cs.xpi) = 502598 +SHA256 (xpi/firefox-i18n-61.0/cy.xpi) = 6769521271903468ecd9065b418646c32cb36b617b4f628bcbd6d6e72081b879 +SIZE (xpi/firefox-i18n-61.0/cy.xpi) = 490416 +SHA256 (xpi/firefox-i18n-61.0/da.xpi) = da9c71cc15f0fbbb272500aba824ac485fcde321e969b50e533dd71b2c5f89d6 +SIZE (xpi/firefox-i18n-61.0/da.xpi) = 483618 +SHA256 (xpi/firefox-i18n-61.0/de.xpi) = da95616a965a18506033d090ea51cd5875114523ba66587ea8d9e4ca06182e1a +SIZE (xpi/firefox-i18n-61.0/de.xpi) = 502283 +SHA256 (xpi/firefox-i18n-61.0/dsb.xpi) = 4522ccd3e85a2a6c8d823ff598c4d2cf1161ad3e51d15fd93b0a5d114eec5b45 +SIZE (xpi/firefox-i18n-61.0/dsb.xpi) = 512451 +SHA256 (xpi/firefox-i18n-61.0/el.xpi) = b87c388daaac4a811a82ff1e1318f4655e9ba80798ba82c00bc5eb813ace1556 +SIZE (xpi/firefox-i18n-61.0/el.xpi) = 559691 +SHA256 (xpi/firefox-i18n-61.0/en-GB.xpi) = c4dde8f507afcbd75466d1d16049227b5b8889e5713607c728f1ba914b0a808e +SIZE (xpi/firefox-i18n-61.0/en-GB.xpi) = 464875 +SHA256 (xpi/firefox-i18n-61.0/en-US.xpi) = ca833b1e4bf09a9876394daa81a49f3b314accd9a0491266beefed7c61479be7 +SIZE (xpi/firefox-i18n-61.0/en-US.xpi) = 456419 +SHA256 (xpi/firefox-i18n-61.0/en-ZA.xpi) = f703ceee50033cbabaad718fbb0740e569e73f61ddc1df6394a458e084864fb2 +SIZE (xpi/firefox-i18n-61.0/en-ZA.xpi) = 446640 +SHA256 (xpi/firefox-i18n-61.0/eo.xpi) = df73ab6175e45dc0b17b735ce299bcb6702b1b61aa3fdf5f37b59394ef171447 +SIZE (xpi/firefox-i18n-61.0/eo.xpi) = 484754 +SHA256 (xpi/firefox-i18n-61.0/es-AR.xpi) = d1724db8da185cad11a8809f3ef77876818eef8ad3231e84018461ef1b874134 +SIZE (xpi/firefox-i18n-61.0/es-AR.xpi) = 498191 +SHA256 (xpi/firefox-i18n-61.0/es-CL.xpi) = d1cf80c4cf7a1acd1f5cdac6ebb9510e23653370bea12e1db6e5c5e60bb41605 +SIZE (xpi/firefox-i18n-61.0/es-CL.xpi) = 500855 +SHA256 (xpi/firefox-i18n-61.0/es-ES.xpi) = a0ab6bc595321debd89c552873d02ffbe52da1e2e23fb0bf9e7ed6c78bf03054 +SIZE (xpi/firefox-i18n-61.0/es-ES.xpi) = 435902 +SHA256 (xpi/firefox-i18n-61.0/es-MX.xpi) = 22b801bc0b8a9df2da8db24a631927f1a7811c39fa20d2f8411312c3e302e566 +SIZE (xpi/firefox-i18n-61.0/es-MX.xpi) = 500950 +SHA256 (xpi/firefox-i18n-61.0/et.xpi) = e4475907568d860b7a22c9e5bac2cb0b8eccb554969dc0302999b2bd3ccc51ea +SIZE (xpi/firefox-i18n-61.0/et.xpi) = 477548 +SHA256 (xpi/firefox-i18n-61.0/eu.xpi) = 0c4571b60b88b12f61fdc05f14b6f1b8f45b52287cb9eac8ab963562a7d958ef +SIZE (xpi/firefox-i18n-61.0/eu.xpi) = 488816 +SHA256 (xpi/firefox-i18n-61.0/fa.xpi) = 01facb4effc8c42f898f0e1f76c2ca73e04b4ec506f6837a4572df0195de54fc +SIZE (xpi/firefox-i18n-61.0/fa.xpi) = 537569 +SHA256 (xpi/firefox-i18n-61.0/ff.xpi) = cbb3fbd66dd978a48e206b8c346b04ad444f67afb596846295057d21e36282cd +SIZE (xpi/firefox-i18n-61.0/ff.xpi) = 483849 +SHA256 (xpi/firefox-i18n-61.0/fi.xpi) = 1276c23a9a6f10b7c4aac59c9e491970e195df109a5de36ebc60cf94915e2780 +SIZE (xpi/firefox-i18n-61.0/fi.xpi) = 479928 +SHA256 (xpi/firefox-i18n-61.0/fr.xpi) = db066b4e73c962aaeb3c8756d30e929d333b1aa67c313c9851e09b841895835e +SIZE (xpi/firefox-i18n-61.0/fr.xpi) = 507141 +SHA256 (xpi/firefox-i18n-61.0/fy-NL.xpi) = 05cd67ee6422fe7ed089541d90f73a3baf88fa8e9653bf2eb1de4f60d3442112 +SIZE (xpi/firefox-i18n-61.0/fy-NL.xpi) = 497986 +SHA256 (xpi/firefox-i18n-61.0/ga-IE.xpi) = 54438b167939fcf94622f98190d13c8a3fd77aec22cbf087223b434452315e7f +SIZE (xpi/firefox-i18n-61.0/ga-IE.xpi) = 495804 +SHA256 (xpi/firefox-i18n-61.0/gd.xpi) = 392b336d0494d5e364c31e12042eda32627ef40b77930602de4c1d306a1aa0d3 +SIZE (xpi/firefox-i18n-61.0/gd.xpi) = 497600 +SHA256 (xpi/firefox-i18n-61.0/gl.xpi) = ce90b2726134c1f4de19e0238dc23b110ad20065f216a33498f282c94657ec12 +SIZE (xpi/firefox-i18n-61.0/gl.xpi) = 471910 +SHA256 (xpi/firefox-i18n-61.0/gn.xpi) = c21270be60c8300c5975bea228d5941504cc8d81757b5392d11b90c0ca353750 +SIZE (xpi/firefox-i18n-61.0/gn.xpi) = 506405 +SHA256 (xpi/firefox-i18n-61.0/gu-IN.xpi) = ef4d075fc8b462b1fd7a0aee53432614e521421f52cd0e90cbbe88ea8e39421b +SIZE (xpi/firefox-i18n-61.0/gu-IN.xpi) = 557292 +SHA256 (xpi/firefox-i18n-61.0/he.xpi) = dce20732f2e5dfba243a9bf96c1956c3a0449fd81f4cacc43c350db32fabc96f +SIZE (xpi/firefox-i18n-61.0/he.xpi) = 505560 +SHA256 (xpi/firefox-i18n-61.0/hi-IN.xpi) = 1b8d7033480b6c2bffec3ce76c073a85142eca8ee6f9ede547207ca33d8f55a9 +SIZE (xpi/firefox-i18n-61.0/hi-IN.xpi) = 559344 +SHA256 (xpi/firefox-i18n-61.0/hr.xpi) = a8a99bd1415e01764e4f317701f4e09377276da6db93e10e6e0ed9fb4885a7b1 +SIZE (xpi/firefox-i18n-61.0/hr.xpi) = 486049 +SHA256 (xpi/firefox-i18n-61.0/hsb.xpi) = ed9b9e3792757ef4ff7422e946bc78e84c9a0f1f8e69db03bb242c8c970de163 +SIZE (xpi/firefox-i18n-61.0/hsb.xpi) = 510213 +SHA256 (xpi/firefox-i18n-61.0/hu.xpi) = fd4018acb9730d98d1f3023539b6d00bde237eb9ea303cb311e88775821c8068 +SIZE (xpi/firefox-i18n-61.0/hu.xpi) = 511142 +SHA256 (xpi/firefox-i18n-61.0/hy-AM.xpi) = 4b4f55569b4f0b521365ed18edff1aa6ca06470c4abe5ef93b33956d1d9748de +SIZE (xpi/firefox-i18n-61.0/hy-AM.xpi) = 537817 +SHA256 (xpi/firefox-i18n-61.0/ia.xpi) = 16bae2d1c4cba9467a7d1845617f085ab5954db4ac813d18eb480ddcf8305074 +SIZE (xpi/firefox-i18n-61.0/ia.xpi) = 483841 +SHA256 (xpi/firefox-i18n-61.0/id.xpi) = 8cd75a88cb666e0fa816211dfb943b1c3d0bd71f1fae997b6b8e4021f9ebd43b +SIZE (xpi/firefox-i18n-61.0/id.xpi) = 476114 +SHA256 (xpi/firefox-i18n-61.0/is.xpi) = f2592d68efd9f0ed4b030b326233d777016916be9b9f61f7feaf47f29e58c427 +SIZE (xpi/firefox-i18n-61.0/is.xpi) = 482660 +SHA256 (xpi/firefox-i18n-61.0/it.xpi) = 2439855ef019a354d3dd2506a4b26603b622bc35d4fae982906285f4227cd9b2 +SIZE (xpi/firefox-i18n-61.0/it.xpi) = 372491 +SHA256 (xpi/firefox-i18n-61.0/ja.xpi) = c62496c7da43cfd521cba7a243baba3b8d8e45515cf1729a8c757168ab37ee26 +SIZE (xpi/firefox-i18n-61.0/ja.xpi) = 538255 +SHA256 (xpi/firefox-i18n-61.0/ka.xpi) = 6beeb507141d9d39a947044dcd7d0ee3e7adb9e1d4a556b0477a16bfa8863d54 +SIZE (xpi/firefox-i18n-61.0/ka.xpi) = 525917 +SHA256 (xpi/firefox-i18n-61.0/kab.xpi) = c588f1f693a12e51f47ede13dcdb392d1fa8f64f0644848f06b1fd7c6859b1bd +SIZE (xpi/firefox-i18n-61.0/kab.xpi) = 495572 +SHA256 (xpi/firefox-i18n-61.0/kk.xpi) = b2baab1a55bc5b3340ae6155deed01448aae08136427fdf210356f27dc42cc97 +SIZE (xpi/firefox-i18n-61.0/kk.xpi) = 553678 +SHA256 (xpi/firefox-i18n-61.0/km.xpi) = fd1a3292d73db55c3f8021188c687a6f0a90fef05305f5ad917b55ff0c189be1 +SIZE (xpi/firefox-i18n-61.0/km.xpi) = 547196 +SHA256 (xpi/firefox-i18n-61.0/kn.xpi) = d8c0e96648022e617dd8cd21a053bfa45c56ec23cc7ab6fbfdbbfb80a5f1dce0 +SIZE (xpi/firefox-i18n-61.0/kn.xpi) = 552584 +SHA256 (xpi/firefox-i18n-61.0/ko.xpi) = cc0b42757564e1b80aa46c296d9ad55aac50a730ec66a76c2b9ca7be9e77b3cf +SIZE (xpi/firefox-i18n-61.0/ko.xpi) = 519815 +SHA256 (xpi/firefox-i18n-61.0/lij.xpi) = d5b731cf3a145b590d16af59ea08bcc27438adda449df0cf1ac468ea55e1fee3 +SIZE (xpi/firefox-i18n-61.0/lij.xpi) = 486946 +SHA256 (xpi/firefox-i18n-61.0/lt.xpi) = c823dfbed5d34e1e296b698e66843be873f292db54e8748ce28e36d54bceed49 +SIZE (xpi/firefox-i18n-61.0/lt.xpi) = 509389 +SHA256 (xpi/firefox-i18n-61.0/lv.xpi) = e01c5cc2770dfbe0b4b0d35dc8ee2062907a0597a94555a7b93e9164f57b9ed7 +SIZE (xpi/firefox-i18n-61.0/lv.xpi) = 497550 +SHA256 (xpi/firefox-i18n-61.0/mai.xpi) = 74bea0ab796797620a6e121513dc2f32114dd23969d57cf3298f10a3f471a0fa +SIZE (xpi/firefox-i18n-61.0/mai.xpi) = 518902 +SHA256 (xpi/firefox-i18n-61.0/mk.xpi) = 5b1e3a476a683378e6d1af350761435219398c6c9dc7f0bfc52efb6836e6996d +SIZE (xpi/firefox-i18n-61.0/mk.xpi) = 480671 +SHA256 (xpi/firefox-i18n-61.0/ml.xpi) = e691c980d0bf89a99e445d7f726e4d5d1242aae16f940405331f8d8d48de42bc +SIZE (xpi/firefox-i18n-61.0/ml.xpi) = 562458 +SHA256 (xpi/firefox-i18n-61.0/mr.xpi) = 70c37eeddb05e6503fe381118bfb488a1368e18240125e2b947617c8a9d4c108 +SIZE (xpi/firefox-i18n-61.0/mr.xpi) = 547455 +SHA256 (xpi/firefox-i18n-61.0/ms.xpi) = f18d1a9224486c1952119f882460fbf6d32606c69afcac862c9069a4f9fdfc38 +SIZE (xpi/firefox-i18n-61.0/ms.xpi) = 483502 +SHA256 (xpi/firefox-i18n-61.0/my.xpi) = 725958f542984c594e783fd151306e8340fbacfd05a7795ae8ce346704a89829 +SIZE (xpi/firefox-i18n-61.0/my.xpi) = 536699 +SHA256 (xpi/firefox-i18n-61.0/nb-NO.xpi) = 144367fb12f0b92d46854c8b8add994be91069df2f8e05ee1287c1c57f9315be +SIZE (xpi/firefox-i18n-61.0/nb-NO.xpi) = 483523 +SHA256 (xpi/firefox-i18n-61.0/ne-NP.xpi) = 3fa7706969e2a0ee3a3c6531714a3c085157ca0f1c19964519de4c974add261c +SIZE (xpi/firefox-i18n-61.0/ne-NP.xpi) = 523520 +SHA256 (xpi/firefox-i18n-61.0/nl.xpi) = f313dd641aab012f93f06278f8da94a70cf42b84e8d2a4ba827d663a960f4126 +SIZE (xpi/firefox-i18n-61.0/nl.xpi) = 489004 +SHA256 (xpi/firefox-i18n-61.0/nn-NO.xpi) = ec35e052f38863addfdca5a4b5a4b25f78f6ac59e9655b03f53b9b9741778a27 +SIZE (xpi/firefox-i18n-61.0/nn-NO.xpi) = 483561 +SHA256 (xpi/firefox-i18n-61.0/oc.xpi) = 659e90d2d1b02a91dab2fd33e531ca35a8ae0d3d37f1e6c53fe7e109f85571a5 +SIZE (xpi/firefox-i18n-61.0/oc.xpi) = 499691 +SHA256 (xpi/firefox-i18n-61.0/or.xpi) = e3c0ce3575adcb20ef60d44abb4051e23d560f2994b0a337a9bec0dbb50b9b45 +SIZE (xpi/firefox-i18n-61.0/or.xpi) = 508181 +SHA256 (xpi/firefox-i18n-61.0/pa-IN.xpi) = 534701f536ce6d665a38152cb9e0209e67383e1cedc71e28e953aa878325b96c +SIZE (xpi/firefox-i18n-61.0/pa-IN.xpi) = 524500 +SHA256 (xpi/firefox-i18n-61.0/pl.xpi) = e97e4800c799baf4f176807e2892995c7c684672e660c5277158b1467589a9d6 +SIZE (xpi/firefox-i18n-61.0/pl.xpi) = 390903 +SHA256 (xpi/firefox-i18n-61.0/pt-BR.xpi) = 76afbe14524ca84c6af851fe1567434237cde207f4f3ab138e8078677f00ce9c +SIZE (xpi/firefox-i18n-61.0/pt-BR.xpi) = 485997 +SHA256 (xpi/firefox-i18n-61.0/pt-PT.xpi) = 7402fa24d7cd719e917e5ff07d88ab955c65960e085440b553c45aa178821e86 +SIZE (xpi/firefox-i18n-61.0/pt-PT.xpi) = 492101 +SHA256 (xpi/firefox-i18n-61.0/rm.xpi) = 3fb1389619e3e0efd2882507434c5683f04abd3aaa54d5f8113240aed3de86bf +SIZE (xpi/firefox-i18n-61.0/rm.xpi) = 483856 +SHA256 (xpi/firefox-i18n-61.0/ro.xpi) = 365dfa4198bbb355706ab405473a350ec971efaed324049f230cdf631c9c9d39 +SIZE (xpi/firefox-i18n-61.0/ro.xpi) = 486748 +SHA256 (xpi/firefox-i18n-61.0/ru.xpi) = 8c2fbba9144750e55791792c8d17d248ade6a3d6a61c727cfe4f4c69c698102b +SIZE (xpi/firefox-i18n-61.0/ru.xpi) = 561631 +SHA256 (xpi/firefox-i18n-61.0/si.xpi) = 7ba7ee23ee35aabf8068024f7198522ac8bf3780720d63444a9fc3f4919754b9 +SIZE (xpi/firefox-i18n-61.0/si.xpi) = 511499 +SHA256 (xpi/firefox-i18n-61.0/sk.xpi) = 47f6258d2051edfb85e698169ccb646a009eee52c44c7f11240c7f7e68be0c48 +SIZE (xpi/firefox-i18n-61.0/sk.xpi) = 514226 +SHA256 (xpi/firefox-i18n-61.0/sl.xpi) = 2c1cf7d3dd8c8db029d06ec63d3a2d1c58f4747ae2dcdc55d1d44cf2e5f2ebb9 +SIZE (xpi/firefox-i18n-61.0/sl.xpi) = 490324 +SHA256 (xpi/firefox-i18n-61.0/son.xpi) = c9fa033ea4bcd3aca38807dc4f52cef7820ebc1e918b30d195491889eb6a4e6c +SIZE (xpi/firefox-i18n-61.0/son.xpi) = 468634 +SHA256 (xpi/firefox-i18n-61.0/sq.xpi) = 4ba0eab56da8a68961dfb8d333dc26f6253d8fa9b5ef773f11396a16ba7cad7a +SIZE (xpi/firefox-i18n-61.0/sq.xpi) = 496569 +SHA256 (xpi/firefox-i18n-61.0/sr.xpi) = 03b2bf62131a59bf6064a9d2190e7d1c14bac55f92e33e48335913acc6cfcd75 +SIZE (xpi/firefox-i18n-61.0/sr.xpi) = 519559 +SHA256 (xpi/firefox-i18n-61.0/sv-SE.xpi) = 6dc7695eed1cdf0e02064560675a30b6e9cca2caad290f7b46d00f3078a99993 +SIZE (xpi/firefox-i18n-61.0/sv-SE.xpi) = 491596 +SHA256 (xpi/firefox-i18n-61.0/ta.xpi) = 72d64bcbc53d2e437c2872f26659c64a82139a7303504b9bdac3ac01ebde1df7 +SIZE (xpi/firefox-i18n-61.0/ta.xpi) = 541866 +SHA256 (xpi/firefox-i18n-61.0/te.xpi) = d1a2e661a450680e56bc07a6dc9bf9502558a66b6689cd0841b8fc8ad37fe457 +SIZE (xpi/firefox-i18n-61.0/te.xpi) = 558635 +SHA256 (xpi/firefox-i18n-61.0/th.xpi) = d219719dd56d23e702bb4e6fc589b50f5f18734722b857ebbd44f49b14f2f99f +SIZE (xpi/firefox-i18n-61.0/th.xpi) = 531112 +SHA256 (xpi/firefox-i18n-61.0/tr.xpi) = 07a4d63c033e8234e07e29be35ebf3f9ab8ac8e376e7f8882f8e5fd2eb8c9b9d +SIZE (xpi/firefox-i18n-61.0/tr.xpi) = 498506 +SHA256 (xpi/firefox-i18n-61.0/uk.xpi) = 4b44592b37c40e12dc636af6422d16327697074fcb74cee3e9bd0f631506a3e5 +SIZE (xpi/firefox-i18n-61.0/uk.xpi) = 553596 +SHA256 (xpi/firefox-i18n-61.0/ur.xpi) = 076380f4698146423286e9f2f742fbbaead2a225651335b0b8bb86c31ef135bc +SIZE (xpi/firefox-i18n-61.0/ur.xpi) = 531611 +SHA256 (xpi/firefox-i18n-61.0/uz.xpi) = fc8da974458213e019261281def322df32f225f4e3099cad5aff38bdc0e77e27 +SIZE (xpi/firefox-i18n-61.0/uz.xpi) = 482058 +SHA256 (xpi/firefox-i18n-61.0/vi.xpi) = b38ee1b09a1f539f9e5eb73ba2a01f99fb98b8896d70295bd90b442a78d8a546 +SIZE (xpi/firefox-i18n-61.0/vi.xpi) = 500409 +SHA256 (xpi/firefox-i18n-61.0/xh.xpi) = e88fea87214959b23a2cb79f2775bb82c8d5d72dd045298ca66b46a698c06e61 +SIZE (xpi/firefox-i18n-61.0/xh.xpi) = 481792 +SHA256 (xpi/firefox-i18n-61.0/zh-CN.xpi) = 3b39e97e9837005e58584101e8048137f2580bd4bcab4688232d75c2f5d9a992 +SIZE (xpi/firefox-i18n-61.0/zh-CN.xpi) = 514392 +SHA256 (xpi/firefox-i18n-61.0/zh-TW.xpi) = 9e3ec5dff511c992c84b6961f77f65428bbe60e6999c4c85aea778eb815984e5 +SIZE (xpi/firefox-i18n-61.0/zh-TW.xpi) = 513542 diff --git a/www/firefox/Makefile b/www/firefox/Makefile index 93233bc1acaa..c9671c303eb4 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -2,18 +2,19 @@ # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 60.0.2 +DISTVERSION= 61.0 +PORTREVISION= 1 PORTEPOCH= 1 CATEGORIES= www ipv6 MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ - MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source + MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build3/source DISTFILES= ${DISTNAME}.source${EXTRACT_SUFX} MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla BUILD_DEPENDS= nspr>=4.19:devel/nspr \ - nss>=3.36.1:security/nss \ + nss>=3.37.3:security/nss \ icu>=59.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ harfbuzz>=1.7.6:print/harfbuzz \ @@ -21,7 +22,7 @@ BUILD_DEPENDS= nspr>=4.19:devel/nspr \ png>=1.6.34:graphics/png \ libvorbis>=1.3.6,3:audio/libvorbis \ libvpx>=1.5.0:multimedia/libvpx \ - sqlite3>=3.22.0:databases/sqlite3 \ + sqlite3>=3.23.1:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ @@ -32,7 +33,7 @@ BUILD_DEPENDS= nspr>=4.19:devel/nspr \ USE_GECKO= gecko CONFLICTS_INSTALL= firefox-esr MOZ_PKGCONFIG_FILES= # empty -USE_MOZILLA= -cairo -soundtouch +USE_MOZILLA= -cairo -hunspell -soundtouch USE_GL= gl USES= tar:xz @@ -43,7 +44,7 @@ FIREFOX_DESKTOP= ${MOZSRC}/taskcluster/docker/${MOZILLA}-snap/${MOZILLA}.desktop MOZ_OPTIONS= --enable-application=browser \ --enable-official-branding -OPTIONS_EXCLUDE= BUNDLED_CAIRO +OPTIONS_EXCLUDE= BUNDLED_CAIRO DTRACE .include "${.CURDIR}/../../www/firefox/Makefile.options" diff --git a/www/firefox/distinfo b/www/firefox/distinfo index 9c34d3790496..b3f9bde54345 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1528228087 -SHA256 (firefox-60.0.2.source.tar.xz) = 764566a06b71164e7fd20b2b0e6b08a71b4ccd4d6fd61867eb08011a551f6725 -SIZE (firefox-60.0.2.source.tar.xz) = 271930220 +TIMESTAMP = 1529611471 +SHA256 (firefox-61.0.source.tar.xz) = 3453e8ac7c602390bda0d34a4a636e0d65fd89d9ae69f7aa1740926715c42268 +SIZE (firefox-61.0.source.tar.xz) = 266932956 diff --git a/www/firefox/files/patch-addon-search b/www/firefox/files/patch-addon-search index 06e95a2e04ce..1894f1aa9029 100644 --- a/www/firefox/files/patch-addon-search +++ b/www/firefox/files/patch-addon-search @@ -40,11 +40,11 @@ index f70fd8d7e3bd8..81e8cd7764fdf 100644 if (file.url) { addon.sourceURI = NetUtil.newURI(file.url); } -diff --git toolkit/mozapps/extensions/internal/XPIProvider.jsm toolkit/mozapps/extensions/internal/XPIProvider.jsm +diff --git toolkit/mozapps/extensions/internal/XPIDatabase.jsm toolkit/mozapps/extensions/internal/XPIDatabase.jsm index f70fd8d7e3bd8..81e8cd7764fdf 100644 ---- toolkit/mozapps/extensions/internal/XPIProvider.jsm -+++ toolkit/mozapps/extensions/internal/XPIProvider.jsm -@@ -4974,7 +4974,7 @@ AddonInternal.prototype = { +--- toolkit/mozapps/extensions/internal/XPIDatabase.jsm ++++ toolkit/mozapps/extensions/internal/XPIDatabase.jsm +@@ -355,7 +355,7 @@ class AddonInternal { // Something is causing errors in here try { for (let platform of this.targetPlatforms) { diff --git a/www/firefox/files/patch-bug1021761 b/www/firefox/files/patch-bug1021761 index 245f4fd8695a..ea33870116e5 100644 --- a/www/firefox/files/patch-bug1021761 +++ b/www/firefox/files/patch-bug1021761 @@ -689,7 +689,7 @@ new file mode 100644 index 000000000000..7d96168b9ea6 --- /dev/null +++ media/libcubeb/src/cubeb_oss.c -@@ -0,0 +1,454 @@ +@@ -0,0 +1,453 @@ +/* + * Copyright © 2014 Mozilla Foundation + * @@ -1126,7 +1126,6 @@ index 000000000000..7d96168b9ea6 + .get_max_channel_count = oss_get_max_channel_count, + .get_min_latency = oss_get_min_latency, + .get_preferred_sample_rate = oss_get_preferred_sample_rate, -+ .get_preferred_channel_layout = NULL, + .enumerate_devices = NULL, + .device_collection_destroy = NULL, + .destroy = oss_destroy, @@ -1161,10 +1160,10 @@ index e1fea30ca417..a5b1100f1014 100644 if CONFIG['MOZ_PULSEAUDIO'] or CONFIG['MOZ_JACK']: SOURCES += [ 'cubeb_resampler.cpp', -@@ -88,6 +94,7 @@ if CONFIG['OS_TARGET'] == 'Android': - FINAL_LIBRARY = 'gkmedias' +@@ -89,6 +95,7 @@ FINAL_LIBRARY = 'gkmedias' CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] + CFLAGS += CONFIG['MOZ_JACK_CFLAGS'] +CFLAGS += CONFIG['MOZ_OSS_CFLAGS'] CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] @@ -1250,9 +1249,9 @@ index 28e1a9e48d61..edacedcf6e5d 100644 +AC_SUBST_LIST(MOZ_OSS_CFLAGS) +AC_SUBST_LIST(MOZ_OSS_LIBS) + - dnl ================================== - dnl = Check alsa availability on Linux - dnl ================================== + dnl ======================================================== + dnl NegotiateAuth + dnl ======================================================== diff --git toolkit/library/moz.build toolkit/library/moz.build index e06592daa265..ce016b96c2bc 100644 --- toolkit/library/moz.build diff --git a/www/firefox/files/patch-bug1375074 b/www/firefox/files/patch-bug1375074 deleted file mode 100644 index cede1e474e22..000000000000 --- a/www/firefox/files/patch-bug1375074 +++ /dev/null @@ -1,82 +0,0 @@ -commit fc25eb4380d0 -Author: Lars T Hansen <lhansen@mozilla.com> -Date: Wed Feb 28 13:57:52 2018 +0100 - - Bug 1375074 - Save and restore non-volatile x28 on ARM64 for generated unboxed object constructor. r=sstangl - - --HG-- - extra : rebase_source : 4a2824b23cf7453d07c962123f780c0ff2fd5292 - extra : source : dec6ab6522a4eb4b3c2defc5078b38ed904f3383 ---- - js/src/jit-test/tests/bug1375074.js | 18 ++++++++++++++++++ - js/src/vm/UnboxedObject.cpp | 25 ++++++++++++++++++++++++- - 2 files changed, 42 insertions(+), 1 deletion(-) - -diff --git js/src/jit-test/tests/bug1375074.js js/src/jit-test/tests/bug1375074.js -new file mode 100644 -index 0000000000000..8bf01d96903fc ---- /dev/null -+++ js/src/jit-test/tests/bug1375074.js -@@ -0,0 +1,18 @@ -+// This forces the VM to start creating unboxed objects and thus stresses a -+// particular path into generated code for a specialized unboxed object -+// constructor. -+ -+var K = 2000; // 2000 should be plenty -+var s = "["; -+var i; -+for ( i=0; i < K-1; i++ ) -+ s = s + `{"i":${i}},`; -+s += `{"i":${i}}]`; -+var v = JSON.parse(s); -+ -+assertEq(v.length == K, true); -+ -+for ( i=0; i < K; i++) { -+ assertEq(v[i] instanceof Object, true); -+ assertEq(v[i].i, i); -+} -diff --git js/src/vm/UnboxedObject.cpp js/src/vm/UnboxedObject.cpp -index c8c178965c488..5badf328ede4f 100644 ---- js/src/vm/UnboxedObject.cpp -+++ js/src/vm/UnboxedObject.cpp -@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) - #endif - - #ifdef JS_CODEGEN_ARM64 -- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. -+ // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for -+ // addressing. The register we use for PSP may however also be used by -+ // calling code, and it is nonvolatile, so save it. Do this as a special -+ // case first because the generic save/restore code needs the PSP to be -+ // initialized already. -+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); -+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); -+ -+ // Initialize the PSP from the SP. - masm.initStackPtr(); - #endif - -@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group) - masm.pop(ScratchDoubleReg); - masm.PopRegsInMask(savedNonVolatileRegisters); - -+#ifdef JS_CODEGEN_ARM64 -+ // Now restore the value that was in the PSP register on entry, and return. -+ -+ // Obtain the correct SP from the PSP. -+ masm.Mov(sp, PseudoStackPointer64); -+ -+ // Restore the saved value of the PSP register, this value is whatever the -+ // caller had saved in it, not any actual SP value, and it must not be -+ // overwritten subsequently. -+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); -+ -+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. -+ masm.Ret(vixl::lr); -+#else - masm.abiret(); -+#endif - - masm.bind(&failureStoreOther); - diff --git a/www/firefox/files/patch-bug1411481 b/www/firefox/files/patch-bug1411481 deleted file mode 100644 index d8e9992e264b..000000000000 --- a/www/firefox/files/patch-bug1411481 +++ /dev/null @@ -1,85 +0,0 @@ -commit 57a55d1c2d33 -Author: sotaro <sotaro.ikeda.g@gmail.com> -Date: Wed Mar 21 08:59:38 2018 +0900 - - Bug 1411481- Enable SkiaGL canvas usage on Mac r=jrmuizel ---- - dom/canvas/CanvasRenderingContext2D.cpp | 3 ++- - gfx/thebes/gfxPlatform.cpp | 3 ++- - gfx/thebes/gfxPlatform.h | 2 +- - gfx/thebes/gfxWindowsPlatform.cpp | 7 +++++++ - gfx/thebes/gfxWindowsPlatform.h | 2 ++ - 5 files changed, 14 insertions(+), 3 deletions(-) - -diff --git dom/canvas/CanvasRenderingContext2D.cpp dom/canvas/CanvasRenderingContext2D.cpp -index ef3f868bdbf7..8666564b4d0c 100644 ---- dom/canvas/CanvasRenderingContext2D.cpp -+++ dom/canvas/CanvasRenderingContext2D.cpp -@@ -1438,7 +1438,8 @@ CanvasRenderingContext2D::AllowOpenGLCanvas() const - // HTMLCanvasElement::GetCompositorBackendType would return LAYERS_NONE - // as well, so it wouldn't help much. - -- return (mCompositorBackend == LayersBackend::LAYERS_OPENGL) && -+ return (mCompositorBackend == LayersBackend::LAYERS_OPENGL || -+ mCompositorBackend == LayersBackend::LAYERS_WR) && - gfxPlatform::GetPlatform()->AllowOpenGLCanvas(); - } - -diff --git gfx/thebes/gfxPlatform.cpp gfx/thebes/gfxPlatform.cpp -index b9beea68d8c5..82635f9ab3ce 100644 ---- gfx/thebes/gfxPlatform.cpp -+++ gfx/thebes/gfxPlatform.cpp -@@ -1386,7 +1386,8 @@ bool gfxPlatform::AllowOpenGLCanvas() - // so we let content process always assume correct compositor backend. - // The callers have to do the right thing. - bool correctBackend = !XRE_IsParentProcess() || -- ((mCompositorBackend == LayersBackend::LAYERS_OPENGL) && -+ ((mCompositorBackend == LayersBackend::LAYERS_OPENGL || -+ mCompositorBackend == LayersBackend::LAYERS_WR) && - (GetContentBackendFor(mCompositorBackend) == BackendType::SKIA)); - - if (gfxPrefs::CanvasAzureAccelerated() && correctBackend) { -diff --git gfx/thebes/gfxPlatform.h gfx/thebes/gfxPlatform.h -index c988eb1168a8..3bbf2b763f26 100644 ---- gfx/thebes/gfxPlatform.h -+++ gfx/thebes/gfxPlatform.h -@@ -286,7 +286,7 @@ public: - /// asking for it, we will examine the commands in the first few seconds - /// of the canvas usage, and potentially change to accelerated or - /// non-accelerated canvas. -- bool AllowOpenGLCanvas(); -+ virtual bool AllowOpenGLCanvas(); - virtual void InitializeSkiaCacheLimits(); - - static bool AsyncPanZoomEnabled(); -diff --git gfx/thebes/gfxWindowsPlatform.cpp gfx/thebes/gfxWindowsPlatform.cpp -index 9ba6f40c6cc0..4d65791d075f 100644 ---- gfx/thebes/gfxWindowsPlatform.cpp -+++ gfx/thebes/gfxWindowsPlatform.cpp -@@ -509,6 +509,13 @@ gfxWindowsPlatform::UpdateRenderMode() - } - } - -+bool -+gfxWindowsPlatform::AllowOpenGLCanvas() -+{ -+ // OpenGL canvas is not supported on windows -+ return false; -+} -+ - mozilla::gfx::BackendType - gfxWindowsPlatform::GetContentBackendFor(mozilla::layers::LayersBackend aLayers) - { -diff --git gfx/thebes/gfxWindowsPlatform.h gfx/thebes/gfxWindowsPlatform.h -index 47048de8f5f5..47ec0e9e5547 100644 ---- gfx/thebes/gfxWindowsPlatform.h -+++ gfx/thebes/gfxWindowsPlatform.h -@@ -174,6 +174,8 @@ public: - void SchedulePaintIfDeviceReset() override; - void CheckForContentOnlyDeviceReset(); - -+ bool AllowOpenGLCanvas() override; -+ - mozilla::gfx::BackendType GetContentBackendFor(mozilla::layers::LayersBackend aLayers) override; - - mozilla::gfx::BackendType GetPreferredCanvasBackend() override; diff --git a/www/firefox/files/patch-bug1438678 b/www/firefox/files/patch-bug1438678 deleted file mode 100644 index 47e8dec9ad5b..000000000000 --- a/www/firefox/files/patch-bug1438678 +++ /dev/null @@ -1,1000 +0,0 @@ -commit 68124009fc5a -Author: Nicholas Nethercote <nnethercote@mozilla.com> -Date: Fri Feb 16 17:54:16 2018 +1100 - - Bug 1438678 - Pass early prefs via shared memory instead of the command line. r=bobowen,jld,glandium. - - This patch replaces the large -intPrefs/-boolPrefs/-stringPrefs flags with - a short-lived, anonymous, shared memory segment that is used to pass the early - prefs. - - Removing the bloat from the command line is nice, but more important is the - fact that this will let us pass more prefs at content process start-up, which - will allow us to remove the early/late prefs split (bug 1436911). - - Although this mechanism is only used for prefs, it's conceivable that it could - be used for other data that must be received very early by children, and for - which the command line isn't ideal. - - Notable details: - - - Much of the patch deals with the various platform-specific ways of passing - handles/fds to children. - - - Linux and Mac: we use a fixed fd (8) in combination with the new - GeckoChildProcessHost::AddFdToRemap() function (which ensures the child - won't close the fd). - - - Android: like Linux and Mac, but the handles get passed via "parcels" and - we use the new SetPrefsFd() function instead of the fixed fd. - - - Windows: there is no need to duplicate the handle because Windows handles - are system-wide. But we do use the new - GeckoChildProcessHost::AddHandleToShare() function to add it to the list of - inheritable handles. We also ensure that list is processed on all paths - (MOZ_SANDBOX with sandbox, MOZ_SANDBOX without sandbox, non-MOZ_SANDBOX) so - that the handles are marked as inheritable. The handle is passed via the - -prefsHandle flag. - - The -prefsLen flag is used on all platforms to indicate the size of the - shared memory segment. - - - The patch also moves the serialization/deserialization of the prefs in/out of - the shared memory into libpref, which is a better spot for it. (This means - Preferences::MustSendToContentProcesses() can be removed.) - - MozReview-Commit-ID: 8fREEBiYFvc - - --HG-- - extra : rebase_source : 7e4c8ebdbcd7d74d6bd2ab3c9e75a6a17dbd8dfe ---- - dom/ipc/ContentParent.cpp | 91 +++++++------- - dom/ipc/ContentProcess.cpp | 121 ++++++++++--------- - dom/ipc/ContentProcess.h | 5 + - ipc/chromium/src/base/process_util_win.cc | 4 + - ipc/glue/GeckoChildProcessHost.cpp | 36 +++--- - ipc/glue/GeckoChildProcessHost.h | 10 ++ - .../org/mozilla/gecko/process/IChildProcess.aidl | 3 +- - .../main/java/org/mozilla/gecko/GeckoThread.java | 13 +- - .../org/mozilla/gecko/mozglue/GeckoLoader.java | 2 +- - .../mozilla/gecko/process/GeckoProcessManager.java | 19 +-- - .../gecko/process/GeckoServiceChildProcess.java | 4 +- - modules/libpref/Preferences.cpp | 134 +++++++++++++++++++-- - modules/libpref/Preferences.h | 17 +-- - mozglue/android/APKOpen.cpp | 4 +- - toolkit/xre/Bootstrap.cpp | 4 +- - toolkit/xre/Bootstrap.h | 2 +- - toolkit/xre/nsEmbedFunctions.cpp | 3 +- - widget/android/GeneratedJNIWrappers.cpp | 4 +- - widget/android/GeneratedJNIWrappers.h | 5 +- - xpcom/build/nsXULAppAPI.h | 2 +- - 20 files changed, 318 insertions(+), 165 deletions(-) - -diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp -index e27f3eedc1b1..60be7005354b 100644 ---- dom/ipc/ContentParent.cpp -+++ dom/ipc/ContentParent.cpp -@@ -7,6 +7,7 @@ - #include "mozilla/DebugOnly.h" - - #include "base/basictypes.h" -+#include "base/shared_memory.h" - - #include "ContentParent.h" - #include "TabParent.h" -@@ -1998,61 +1999,56 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR - extraArgs.push_back(idStr); - extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser"); - -- nsAutoCStringN<1024> boolPrefs; -- nsAutoCStringN<1024> intPrefs; -- nsAutoCStringN<1024> stringPrefs; -+ // Prefs information is passed via anonymous shared memory to avoid bloating -+ // the command line. - -- size_t prefsLen; -- ContentPrefs::GetEarlyPrefs(&prefsLen); -+ // Serialize the early prefs. -+ nsAutoCStringN<1024> prefs; -+ Preferences::SerializeEarlyPreferences(prefs); - -- for (unsigned int i = 0; i < prefsLen; i++) { -- const char* prefName = ContentPrefs::GetEarlyPref(i); -- MOZ_ASSERT(i == 0 || strcmp(prefName, ContentPrefs::GetEarlyPref(i - 1)) > 0, -- "Content process preferences should be sorted alphabetically."); -- -- if (!Preferences::MustSendToContentProcesses(prefName)) { -- continue; -- } -- -- switch (Preferences::GetType(prefName)) { -- case nsIPrefBranch::PREF_INT: -- intPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); -- break; -- case nsIPrefBranch::PREF_BOOL: -- boolPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); -- break; -- case nsIPrefBranch::PREF_STRING: { -- nsAutoCString value; -- Preferences::GetCString(prefName, value); -- stringPrefs.Append(nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); -- } -- break; -- case nsIPrefBranch::PREF_INVALID: -- break; -- default: -- printf("preference type: %x\n", Preferences::GetType(prefName)); -- MOZ_CRASH(); -- } -+ // Set up the shared memory. -+ base::SharedMemory shm; -+ if (!shm.Create("", /* read_only */ false, /* open_existing */ false, -+ prefs.Length())) { -+ NS_ERROR("failed to create shared memory in the parent"); -+ MarkAsDead(); -+ return false; -+ } -+ if (!shm.Map(prefs.Length())) { -+ NS_ERROR("failed to map shared memory in the parent"); -+ MarkAsDead(); -+ return false; - } - -- nsCString schedulerPrefs = Scheduler::GetPrefs(); -+ // Copy the serialized prefs into the shared memory. -+ memcpy(static_cast<char*>(shm.memory()), prefs.get(), prefs.Length()); - -- // Only do these ones if they're non-empty. -- if (!intPrefs.IsEmpty()) { -- extraArgs.push_back("-intPrefs"); -- extraArgs.push_back(intPrefs.get()); -- } -- if (!boolPrefs.IsEmpty()) { -- extraArgs.push_back("-boolPrefs"); -- extraArgs.push_back(boolPrefs.get()); -- } -- if (!stringPrefs.IsEmpty()) { -- extraArgs.push_back("-stringPrefs"); -- extraArgs.push_back(stringPrefs.get()); -- } -+#if defined(XP_WIN) -+ // Record the handle as to-be-shared, and pass it via a command flag. This -+ // works because Windows handles are system-wide. -+ HANDLE prefsHandle = shm.handle(); -+ mSubprocess->AddHandleToShare(prefsHandle); -+ extraArgs.push_back("-prefsHandle"); -+ extraArgs.push_back( -+ nsPrintfCString("%zu", reinterpret_cast<uintptr_t>(prefsHandle)).get()); -+#else -+ // In contrast, Unix fds are per-process. So remap the fd to a fixed one that -+ // will be used in the child. -+ // XXX: bug 1440207 is about improving how fixed fds are used. -+ // -+ // Note: on Android, AddFdToRemap() sets up the fd to be passed via a Parcel, -+ // and the fixed fd isn't used. However, we still need to mark it for -+ // remapping so it doesn't get closed in the child. -+ mSubprocess->AddFdToRemap(shm.handle().fd, kPrefsFileDescriptor); -+#endif -+ -+ // Pass the length via a command flag. -+ extraArgs.push_back("-prefsLen"); -+ extraArgs.push_back(nsPrintfCString("%zu", uintptr_t(prefs.Length())).get()); - - // Scheduler prefs need to be handled differently because the scheduler needs - // to start up in the content process before the normal preferences service. -+ nsCString schedulerPrefs = Scheduler::GetPrefs(); - extraArgs.push_back("-schedulerPrefs"); - extraArgs.push_back(schedulerPrefs.get()); - -@@ -2061,6 +2057,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR - } - - if (!mSubprocess->LaunchAndWaitForProcessHandle(extraArgs)) { -+ NS_ERROR("failed to launch child in the parent"); - MarkAsDead(); - return false; - } -diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp -index e3c1f16910c6..2441c8cb9224 100644 ---- dom/ipc/ContentProcess.cpp -+++ dom/ipc/ContentProcess.cpp -@@ -8,6 +8,8 @@ - - #include "ContentProcess.h" - #include "ContentPrefs.h" -+#include "base/shared_memory.h" -+#include "mozilla/Preferences.h" - #include "mozilla/Scheduler.h" - - #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX) -@@ -15,7 +17,6 @@ - #endif - - #if (defined(XP_WIN) || defined(XP_MACOSX)) && defined(MOZ_CONTENT_SANDBOX) --#include "mozilla/Preferences.h" - #include "mozilla/SandboxSettings.h" - #include "nsAppDirectoryServiceDefs.h" - #include "nsDirectoryService.h" -@@ -81,6 +82,16 @@ SetUpSandboxEnvironment() - } - #endif - -+#ifdef ANDROID -+static int gPrefsFd = -1; -+ -+void -+SetPrefsFd(int aFd) -+{ -+ gPrefsFd = aFd; -+} -+#endif -+ - bool - ContentProcess::Init(int aArgc, char* aArgv[]) - { -@@ -88,9 +99,10 @@ ContentProcess::Init(int aArgc, char* aArgv[]) - bool foundAppdir = false; - bool foundChildID = false; - bool foundIsForBrowser = false; -- bool foundIntPrefs = false; -- bool foundBoolPrefs = false; -- bool foundStringPrefs = false; -+#ifdef XP_WIN -+ bool foundPrefsHandle = false; -+#endif -+ bool foundPrefsLen = false; - bool foundSchedulerPrefs = false; - - uint64_t childID; -@@ -103,7 +115,8 @@ ContentProcess::Init(int aArgc, char* aArgv[]) - #endif - - char* schedulerPrefs = nullptr; -- InfallibleTArray<Pref> prefsArray; -+ base::SharedMemoryHandle prefsHandle = base::SharedMemory::NULLHandle(); -+ size_t prefsLen = 0; - for (int idx = aArgc; idx > 0; idx--) { - if (!aArgv[idx]) { - continue; -@@ -134,54 +147,24 @@ ContentProcess::Init(int aArgc, char* aArgv[]) - } - isForBrowser = strcmp(aArgv[idx], "-notForBrowser"); - foundIsForBrowser = true; -- } else if (!strcmp(aArgv[idx], "-intPrefs")) { -- char* str = aArgv[idx + 1]; -- while (*str) { -- int32_t index = strtol(str, &str, 10); -- MOZ_ASSERT(str[0] == ':'); -- str++; -- MaybePrefValue value(PrefValue(static_cast<int32_t>(strtol(str, &str, 10)))); -- MOZ_ASSERT(str[0] == '|'); -- str++; -- // XXX: we assume these values as default values, which may not be -- // true. We also assume they are unlocked. Fortunately, these prefs -- // get reset properly by the first IPC message. -- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, value, MaybePrefValue()); -- prefsArray.AppendElement(pref); -- } -- foundIntPrefs = true; -- } else if (!strcmp(aArgv[idx], "-boolPrefs")) { -+#ifdef XP_WIN -+ } else if (!strcmp(aArgv[idx], "-prefsHandle")) { - char* str = aArgv[idx + 1]; -- while (*str) { -- int32_t index = strtol(str, &str, 10); -- MOZ_ASSERT(str[0] == ':'); -- str++; -- MaybePrefValue value(PrefValue(!!strtol(str, &str, 10))); -- MOZ_ASSERT(str[0] == '|'); -- str++; -- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, value, MaybePrefValue()); -- prefsArray.AppendElement(pref); -- } -- foundBoolPrefs = true; -- } else if (!strcmp(aArgv[idx], "-stringPrefs")) { -+ MOZ_ASSERT(str[0] != '\0'); -+ // ContentParent uses %zu to print a word-sized unsigned integer. So even -+ // though strtoull() returns a long long int, it will fit in a uintptr_t. -+ prefsHandle = reinterpret_cast<HANDLE>(strtoull(str, &str, 10)); -+ MOZ_ASSERT(str[0] == '\0'); -+ foundPrefsHandle = true; -+#endif -+ } else if (!strcmp(aArgv[idx], "-prefsLen")) { - char* str = aArgv[idx + 1]; -- while (*str) { -- int32_t index = strtol(str, &str, 10); -- MOZ_ASSERT(str[0] == ':'); -- str++; -- int32_t length = strtol(str, &str, 10); -- MOZ_ASSERT(str[0] == ';'); -- str++; -- MaybePrefValue value(PrefValue(nsCString(str, length))); -- Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, value, MaybePrefValue()); -- prefsArray.AppendElement(pref); -- str += length + 1; -- MOZ_ASSERT(*(str - 1) == '|'); -- } -- foundStringPrefs = true; -+ MOZ_ASSERT(str[0] != '\0'); -+ // ContentParent uses %zu to print a word-sized unsigned integer. So even -+ // though strtoull() returns a long long int, it will fit in a uintptr_t. -+ prefsLen = strtoull(str, &str, 10); -+ MOZ_ASSERT(str[0] == '\0'); -+ foundPrefsLen = true; - } else if (!strcmp(aArgv[idx], "-schedulerPrefs")) { - schedulerPrefs = aArgv[idx + 1]; - foundSchedulerPrefs = true; -@@ -209,21 +192,43 @@ ContentProcess::Init(int aArgc, char* aArgv[]) - bool allFound = foundAppdir - && foundChildID - && foundIsForBrowser -- && foundIntPrefs -- && foundBoolPrefs -- && foundStringPrefs -- && foundSchedulerPrefs; -- -+ && foundPrefsLen -+ && foundSchedulerPrefs -+#ifdef XP_WIN -+ && foundPrefsHandle -+#endif - #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX) -- allFound &= foundProfile; -+ && foundProfile - #endif -+ && true; - - if (allFound) { - break; - } - } - -- Preferences::SetEarlyPreferences(&prefsArray); -+#ifdef ANDROID -+ // Android is different; get the FD via gPrefsFd instead of a fixed fd. -+ MOZ_RELEASE_ASSERT(gPrefsFd != -1); -+ prefsHandle = base::FileDescriptor(gPrefsFd, /* auto_close */ true); -+#elif XP_UNIX -+ prefsHandle = base::FileDescriptor(kPrefsFileDescriptor, -+ /* auto_close */ true); -+#endif -+ -+ // Set up early prefs from the shared memory. -+ base::SharedMemory shm; -+ if (!shm.SetHandle(prefsHandle, /* read_only */ true)) { -+ NS_ERROR("failed to open shared memory in the child"); -+ return false; -+ } -+ if (!shm.Map(prefsLen)) { -+ NS_ERROR("failed to map shared memory in the child"); -+ return false; -+ } -+ Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()), -+ prefsLen); -+ - Scheduler::SetPrefs(schedulerPrefs); - mContent.Init(IOThreadChild::message_loop(), - ParentPid(), -diff --git dom/ipc/ContentProcess.h dom/ipc/ContentProcess.h -index a3854c761e10..6582c94da496 100644 ---- dom/ipc/ContentProcess.h -+++ dom/ipc/ContentProcess.h -@@ -49,6 +49,11 @@ private: - DISALLOW_EVIL_CONSTRUCTORS(ContentProcess); - }; - -+#ifdef ANDROID -+// Android doesn't use -prefsHandle, it gets that FD another way. -+void SetPrefsFd(int aFd); -+#endif -+ - } // namespace dom - } // namespace mozilla - -diff --git ipc/chromium/src/base/process_util_win.cc ipc/chromium/src/base/process_util_win.cc -index 3ed54cd744ac..46667985cd71 100644 ---- ipc/chromium/src/base/process_util_win.cc -+++ ipc/chromium/src/base/process_util_win.cc -@@ -354,6 +354,10 @@ bool LaunchApp(const std::wstring& cmdline, - LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL; - std::vector<HANDLE> handlesToInherit; - for (HANDLE h : options.handles_to_inherit) { -+ if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) == 0) { -+ MOZ_DIAGNOSTIC_ASSERT(false, "SetHandleInformation failed"); -+ return false; -+ } - handlesToInherit.push_back(h); - } - -diff --git ipc/glue/GeckoChildProcessHost.cpp ipc/glue/GeckoChildProcessHost.cpp -index d18ed9edd4ca..3be1c51d10bb 100644 ---- ipc/glue/GeckoChildProcessHost.cpp -+++ ipc/glue/GeckoChildProcessHost.cpp -@@ -1030,9 +1030,6 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt - - if (!CrashReporter::IsDummy()) { - PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe); --# if defined(MOZ_SANDBOX) -- mSandboxBroker.AddHandleToShare(reinterpret_cast<HANDLE>(h)); --# endif // defined(MOZ_SANDBOX) - mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast<HANDLE>(h)); - std::string hStr = std::to_string(h); - cmdLine.AppendLooseValue(UTF8ToWide(hStr)); -@@ -1043,6 +1040,11 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt - - # if defined(MOZ_SANDBOX) - if (shouldSandboxCurrentProcess) { -+ // Mark the handles to inherit as inheritable. -+ for (HANDLE h : mLaunchOptions->handles_to_inherit) { -+ mSandboxBroker.AddHandleToShare(h); -+ } -+ - if (mSandboxBroker.LaunchApp(cmdLine.program().c_str(), - cmdLine.command_line_string().c_str(), - mLaunchOptions->env_map, -@@ -1180,7 +1182,7 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type, - const base::file_handle_mapping_vector& fds_to_remap, - ProcessHandle* process_handle) - { -- MOZ_ASSERT((fds_to_remap.size() > 0) && (fds_to_remap.size() <= 3)); -+ MOZ_RELEASE_ASSERT((2 <= fds_to_remap.size()) && (fds_to_remap.size() <= 4)); - JNIEnv* const env = mozilla::jni::GetEnvForThread(); - MOZ_ASSERT(env); - -@@ -1189,21 +1191,25 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type, - for (int ix = 0; ix < argvSize; ix++) { - jargs->SetElement(ix, jni::StringParam(argv[ix].c_str(), env)); - } -- base::file_handle_mapping_vector::const_iterator it = fds_to_remap.begin(); -- int32_t ipcFd = it->first; -- it++; -- // If the Crash Reporter is disabled, there will not be a second file descriptor. -+ -+ // XXX: this processing depends entirely on the internals of -+ // ContentParent::LaunchSubprocess() -+ // GeckoChildProcessHost::PerformAsyncLaunchInternal(), and the order in -+ // which they append to fds_to_remap. There must be a better way to do it. -+ // See bug 1440207. -+ int32_t prefsFd = fds_to_remap[0].first; -+ int32_t ipcFd = fds_to_remap[1].first; - int32_t crashFd = -1; - int32_t crashAnnotationFd = -1; -- if (it != fds_to_remap.end() && !CrashReporter::IsDummy()) { -- crashFd = it->first; -- it++; -+ if (fds_to_remap.size() == 3) { -+ crashAnnotationFd = fds_to_remap[2].first; - } -- if (it != fds_to_remap.end()) { -- crashAnnotationFd = it->first; -- it++; -+ if (fds_to_remap.size() == 4) { -+ crashFd = fds_to_remap[2].first; -+ crashAnnotationFd = fds_to_remap[3].first; - } -- int32_t handle = java::GeckoProcessManager::Start(type, jargs, ipcFd, crashFd, crashAnnotationFd); -+ -+ int32_t handle = java::GeckoProcessManager::Start(type, jargs, prefsFd, ipcFd, crashFd, crashAnnotationFd); - - if (process_handle) { - *process_handle = handle; -diff --git ipc/glue/GeckoChildProcessHost.h ipc/glue/GeckoChildProcessHost.h -index 631c42066bc7..0345e221abcc 100644 ---- ipc/glue/GeckoChildProcessHost.h -+++ ipc/glue/GeckoChildProcessHost.h -@@ -103,6 +103,16 @@ public: - } - #endif - -+#ifdef XP_WIN -+ void AddHandleToShare(HANDLE aHandle) { -+ mLaunchOptions->handles_to_inherit.push_back(aHandle); -+ } -+#else -+ void AddFdToRemap(int aSrcFd, int aDstFd) { -+ mLaunchOptions->fds_to_remap.push_back(std::make_pair(aSrcFd, aDstFd)); -+ } -+#endif -+ - /** - * Must run on the IO thread. Cause the OS process to exit and - * ensure its OS resources are cleaned up. -diff --git mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl -index ba26ae1ba06b..a2535f44c72b 100644 ---- mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl -+++ mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl -@@ -12,6 +12,7 @@ import android.os.ParcelFileDescriptor; - interface IChildProcess { - int getPid(); - boolean start(in IProcessManager procMan, in String[] args, in Bundle extras, -- in ParcelFileDescriptor ipcPfd, in ParcelFileDescriptor crashReporterPfd, -+ in ParcelFileDescriptor prefsPfd, in ParcelFileDescriptor ipcPfd, -+ in ParcelFileDescriptor crashReporterPfd, - in ParcelFileDescriptor crashAnnotationPfd); - } -diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java -index dfabfd05daf0..8311920afeec 100644 ---- mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java -+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java -@@ -128,6 +128,7 @@ public class GeckoThread extends Thread { - public static final int FLAG_PRELOAD_CHILD = 2; // Preload child during main thread start. - - private static final String EXTRA_ARGS = "args"; -+ private static final String EXTRA_PREFS_FD = "prefsFd"; - private static final String EXTRA_IPC_FD = "ipcFd"; - private static final String EXTRA_CRASH_FD = "crashFd"; - private static final String EXTRA_CRASH_ANNOTATION_FD = "crashAnnotationFd"; -@@ -149,7 +150,8 @@ public class GeckoThread extends Thread { - - private synchronized boolean init(final GeckoProfile profile, final String[] args, - final Bundle extras, final int flags, -- final int ipcFd, final int crashFd, -+ final int prefsFd, final int ipcFd, -+ final int crashFd, - final int crashAnnotationFd) { - ThreadUtils.assertOnUiThread(); - uiThreadId = android.os.Process.myTid(); -@@ -163,6 +165,7 @@ public class GeckoThread extends Thread { - mFlags = flags; - - mExtras = (extras != null) ? new Bundle(extras) : new Bundle(3); -+ mExtras.putInt(EXTRA_PREFS_FD, prefsFd); - mExtras.putInt(EXTRA_IPC_FD, ipcFd); - mExtras.putInt(EXTRA_CRASH_FD, crashFd); - mExtras.putInt(EXTRA_CRASH_ANNOTATION_FD, crashAnnotationFd); -@@ -174,15 +177,16 @@ public class GeckoThread extends Thread { - - public static boolean initMainProcess(final GeckoProfile profile, final String[] args, - final Bundle extras, final int flags) { -- return INSTANCE.init(profile, args, extras, flags, -+ return INSTANCE.init(profile, args, extras, flags, /* fd */ -1, - /* fd */ -1, /* fd */ -1, /* fd */ -1); - } - - public static boolean initChildProcess(final String[] args, final Bundle extras, -- final int ipcFd, final int crashFd, -+ final int prefsFd, final int ipcFd, -+ final int crashFd, - final int crashAnnotationFd) { - return INSTANCE.init(/* profile */ null, args, extras, /* flags */ 0, -- ipcFd, crashFd, crashAnnotationFd); -+ prefsFd, ipcFd, crashFd, crashAnnotationFd); - } - - private static boolean canUseProfile(final Context context, final GeckoProfile profile, -@@ -442,6 +446,7 @@ public class GeckoThread extends Thread { - - // And go. - GeckoLoader.nativeRun(args, -+ mExtras.getInt(EXTRA_PREFS_FD, -1), - mExtras.getInt(EXTRA_IPC_FD, -1), - mExtras.getInt(EXTRA_CRASH_FD, -1), - mExtras.getInt(EXTRA_CRASH_ANNOTATION_FD, -1)); -diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java -index b1830fd86945..ac128b651e7b 100644 ---- mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java -+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java -@@ -463,7 +463,7 @@ public final class GeckoLoader { - public static native boolean verifyCRCs(String apkName); - - // These methods are implemented in mozglue/android/APKOpen.cpp -- public static native void nativeRun(String[] args, int ipcFd, int crashFd, int crashAnnotationFd); -+ public static native void nativeRun(String[] args, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd); - private static native void loadGeckoLibsNative(String apkName); - private static native void loadSQLiteLibsNative(String apkName); - private static native void loadNSSLibsNative(String apkName); -diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java -index b762e1c9a3eb..dba329ba8f92 100644 ---- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java -+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java -@@ -169,14 +169,14 @@ public final class GeckoProcessManager extends IProcessManager.Stub { - - @WrapForJNI - private static int start(final String type, final String[] args, -- final int ipcFd, final int crashFd, -- final int crashAnnotationFd) { -- return INSTANCE.start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ false); -+ final int prefsFd, final int ipcFd, -+ final int crashFd, final int crashAnnotationFd) { -+ return INSTANCE.start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ false); - } - -- private int start(final String type, final String[] args, final int ipcFd, -- final int crashFd, final int crashAnnotationFd, -- final boolean retry) { -+ private int start(final String type, final String[] args, final int prefsFd, -+ final int ipcFd, final int crashFd, -+ final int crashAnnotationFd, final boolean retry) { - final ChildConnection connection = getConnection(type); - final IChildProcess child = connection.bind(); - if (child == null) { -@@ -184,10 +184,12 @@ public final class GeckoProcessManager extends IProcessManager.Stub { - } - - final Bundle extras = GeckoThread.getActiveExtras(); -+ final ParcelFileDescriptor prefsPfd; - final ParcelFileDescriptor ipcPfd; - final ParcelFileDescriptor crashPfd; - final ParcelFileDescriptor crashAnnotationPfd; - try { -+ prefsPfd = ParcelFileDescriptor.fromFd(prefsFd); - ipcPfd = ParcelFileDescriptor.fromFd(ipcFd); - crashPfd = (crashFd >= 0) ? ParcelFileDescriptor.fromFd(crashFd) : null; - crashAnnotationPfd = (crashAnnotationFd >= 0) ? ParcelFileDescriptor.fromFd(crashAnnotationFd) : null; -@@ -198,7 +200,8 @@ public final class GeckoProcessManager extends IProcessManager.Stub { - - boolean started = false; - try { -- started = child.start(this, args, extras, ipcPfd, crashPfd, crashAnnotationPfd); -+ started = child.start(this, args, extras, prefsPfd, ipcPfd, crashPfd, -+ crashAnnotationPfd); - } catch (final RemoteException e) { - } - -@@ -209,7 +212,7 @@ public final class GeckoProcessManager extends IProcessManager.Stub { - } - Log.w(LOGTAG, "Attempting to kill running child " + type); - connection.unbind(); -- return start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ true); -+ return start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ true); - } - - try { -diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java -index f1f6ce109fda..6dc19813fc10 100644 ---- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java -+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java -@@ -63,6 +63,7 @@ public class GeckoServiceChildProcess extends Service { - public boolean start(final IProcessManager procMan, - final String[] args, - final Bundle extras, -+ final ParcelFileDescriptor prefsPfd, - final ParcelFileDescriptor ipcPfd, - final ParcelFileDescriptor crashReporterPfd, - final ParcelFileDescriptor crashAnnotationPfd) { -@@ -74,6 +75,7 @@ public class GeckoServiceChildProcess extends Service { - sProcessManager = procMan; - } - -+ final int prefsFd = prefsPfd.detachFd(); - final int ipcFd = ipcPfd.detachFd(); - final int crashReporterFd = crashReporterPfd != null ? - crashReporterPfd.detachFd() : -1; -@@ -83,7 +85,7 @@ public class GeckoServiceChildProcess extends Service { - ThreadUtils.postToUiThread(new Runnable() { - @Override - public void run() { -- if (GeckoThread.initChildProcess(args, extras, ipcFd, crashReporterFd, -+ if (GeckoThread.initChildProcess(args, extras, prefsFd, ipcFd, crashReporterFd, - crashAnnotationFd)) { - GeckoThread.launch(); - } -diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp -index 330ed4a09b54..b884591c9271 100644 ---- modules/libpref/Preferences.cpp -+++ modules/libpref/Preferences.cpp -@@ -2920,7 +2920,7 @@ public: - - } // namespace - --// A list of prefs sent early from the parent, via the command line. -+// A list of prefs sent early from the parent, via shared memory. - static InfallibleTArray<dom::Pref>* gEarlyDomPrefs; - - /* static */ already_AddRefed<Preferences> -@@ -3081,11 +3081,130 @@ NS_IMPL_ISUPPORTS(Preferences, - nsISupportsWeakReference) - - /* static */ void --Preferences::SetEarlyPreferences(const nsTArray<dom::Pref>* aDomPrefs) -+Preferences::SerializeEarlyPreferences(nsCString& aStr) -+{ -+ MOZ_RELEASE_ASSERT(InitStaticMembers()); -+ -+ nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs; -+ size_t numEarlyPrefs; -+ dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs); -+ -+ for (unsigned int i = 0; i < numEarlyPrefs; i++) { -+ const char* prefName = dom::ContentPrefs::GetEarlyPref(i); -+ MOZ_ASSERT_IF(i > 0, -+ strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0); -+ -+ Pref* pref = pref_HashTableLookup(prefName); -+ if (!pref || !pref->MustSendToContentProcesses()) { -+ continue; -+ } -+ -+ switch (pref->Type()) { -+ case PrefType::Bool: -+ boolPrefs.Append( -+ nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); -+ break; -+ case PrefType::Int: -+ intPrefs.Append( -+ nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); -+ break; -+ case PrefType::String: { -+ nsAutoCString value; -+ Preferences::GetCString(prefName, value); -+ stringPrefs.Append( -+ nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); -+ } break; -+ case PrefType::None: -+ break; -+ default: -+ printf_stderr("preference type: %d\n", int(pref->Type())); -+ MOZ_CRASH(); -+ } -+ } -+ -+ aStr.Truncate(); -+ aStr.Append(boolPrefs); -+ aStr.Append('\n'); -+ aStr.Append(intPrefs); -+ aStr.Append('\n'); -+ aStr.Append(stringPrefs); -+ aStr.Append('\n'); -+ aStr.Append('\0'); -+} -+ -+/* static */ void -+Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen) - { - MOZ_ASSERT(!XRE_IsParentProcess()); - -- gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(mozilla::Move(*aDomPrefs)); -+ MOZ_ASSERT(!gEarlyDomPrefs); -+ gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(); -+ -+ char* p = aStr; -+ -+ // XXX: we assume these pref values are default values, which may not be -+ // true. We also assume they are unlocked. Fortunately, these prefs get reset -+ // properly by the first IPC message. -+ -+ // Get the bool prefs. -+ while (*p != '\n') { -+ int32_t index = strtol(p, &p, 10); -+ MOZ_ASSERT(p[0] == ':'); -+ p++; -+ int v = strtol(p, &p, 10); -+ MOZ_ASSERT(v == 0 || v == 1); -+ dom::MaybePrefValue value(dom::PrefValue(!!v)); -+ MOZ_ASSERT(p[0] == '|'); -+ p++; -+ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -+ /* isLocked */ false, -+ value, -+ dom::MaybePrefValue()); -+ gEarlyDomPrefs->AppendElement(pref); -+ } -+ p++; -+ -+ // Get the int prefs. -+ while (*p != '\n') { -+ int32_t index = strtol(p, &p, 10); -+ MOZ_ASSERT(p[0] == ':'); -+ p++; -+ dom::MaybePrefValue value( -+ dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10)))); -+ MOZ_ASSERT(p[0] == '|'); -+ p++; -+ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -+ /* isLocked */ false, -+ value, -+ dom::MaybePrefValue()); -+ gEarlyDomPrefs->AppendElement(pref); -+ } -+ p++; -+ -+ // Get the string prefs. -+ while (*p != '\n') { -+ int32_t index = strtol(p, &p, 10); -+ MOZ_ASSERT(p[0] == ':'); -+ p++; -+ int32_t length = strtol(p, &p, 10); -+ MOZ_ASSERT(p[0] == ';'); -+ p++; -+ dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length))); -+ dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -+ /* isLocked */ false, -+ value, -+ dom::MaybePrefValue()); -+ gEarlyDomPrefs->AppendElement(pref); -+ p += length + 1; -+ MOZ_ASSERT(*(p - 1) == '|'); -+ } -+ p++; -+ -+ MOZ_ASSERT(*p == '\0'); -+ -+ // We finished parsing on a '\0'. That should be the last char in the shared -+ // memory. -+ MOZ_ASSERT(aStr + aStrLen - 1 == p); - - #ifdef DEBUG - MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet); -@@ -4298,15 +4417,6 @@ Preferences::HasUserValue(const char* aPrefName) - return pref && pref->HasUserValue(); - } - --/* static */ bool --Preferences::MustSendToContentProcesses(const char* aPrefName) --{ -- NS_ENSURE_TRUE(InitStaticMembers(), false); -- -- Pref* pref = pref_HashTableLookup(aPrefName); -- return pref && pref->MustSendToContentProcesses(); --} -- - /* static */ int32_t - Preferences::GetType(const char* aPrefName) - { -diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h -index 1cb825ecbfe5..c149db62b525 100644 ---- modules/libpref/Preferences.h -+++ modules/libpref/Preferences.h -@@ -41,6 +41,11 @@ class PrefValue; - - struct PrefsSizes; - -+#ifdef XP_UNIX -+// XXX: bug 1440207 is about improving how fixed fds such as this are used. -+static const int kPrefsFileDescriptor = 8; -+#endif -+ - // Keep this in sync with PrefType in parser/src/lib.rs. - enum class PrefValueKind : uint8_t - { -@@ -230,9 +235,6 @@ public: - // Whether the pref has a user value or not. - static bool HasUserValue(const char* aPref); - -- // Must the pref be sent to content processes when they start? -- static bool MustSendToContentProcesses(const char* aPref); -- - // Adds/Removes the observer for the root pref branch. See nsIPrefBranch.idl - // for details. - static nsresult AddStrongObserver(nsIObserver* aObserver, const char* aPref); -@@ -328,11 +330,12 @@ public: - - // When a content process is created these methods are used to pass prefs in - // bulk from the parent process. "Early" preferences are ones that are needed -- // very early on in the content process's lifetime; they are passed via the -- // command line. "Late" preferences are the remainder, which are passed via -- // IPC message. -+ // very early on in the content process's lifetime; they are passed via a -+ // special shared memory segment. "Late" preferences are the remainder, which -+ // are passed via a standard IPC message. -+ static void SerializeEarlyPreferences(nsCString& aStr); -+ static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen); - static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings); -- static void SetEarlyPreferences(const nsTArray<dom::Pref>* aSettings); - static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings); - - // When a single pref is changed in the parent process, these methods are -diff --git mozglue/android/APKOpen.cpp mozglue/android/APKOpen.cpp -index 5f1ef55b605e..b57192488725 100644 ---- mozglue/android/APKOpen.cpp -+++ mozglue/android/APKOpen.cpp -@@ -392,7 +392,7 @@ FreeArgv(char** argv, int argc) - } - - extern "C" APKOPEN_EXPORT void MOZ_JNICALL --Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int ipcFd, int crashFd, int crashAnnotationFd) -+Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd) - { - int argc = 0; - char** argv = CreateArgvFromObjectArray(jenv, jargs, &argc); -@@ -407,7 +407,7 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jo - gBootstrap->GeckoStart(jenv, argv, argc, sAppData); - ElfLoader::Singleton.ExpectShutdown(true); - } else { -- gBootstrap->XRE_SetAndroidChildFds(jenv, ipcFd, crashFd, crashAnnotationFd); -+ gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd, crashAnnotationFd); - gBootstrap->XRE_SetProcessType(argv[argc - 1]); - - XREChildData childData; -diff --git toolkit/xre/Bootstrap.cpp toolkit/xre/Bootstrap.cpp -index 5688519822a9..7e857969a4fb 100644 ---- toolkit/xre/Bootstrap.cpp -+++ toolkit/xre/Bootstrap.cpp -@@ -78,8 +78,8 @@ public: - ::GeckoStart(aEnv, argv, argc, aAppData); - } - -- virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override { -- ::XRE_SetAndroidChildFds(aEnv, aIPCFd, aCrashFd, aCrashAnnotationFd); -+ virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override { -+ ::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd, aCrashAnnotationFd); - } - #endif - -diff --git toolkit/xre/Bootstrap.h toolkit/xre/Bootstrap.h -index 686d0a38e324..77adcef80e1f 100644 ---- toolkit/xre/Bootstrap.h -+++ toolkit/xre/Bootstrap.h -@@ -113,7 +113,7 @@ public: - #ifdef MOZ_WIDGET_ANDROID - virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0; - -- virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0; -+ virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0; - #endif - - #ifdef LIBFUZZER -diff --git toolkit/xre/nsEmbedFunctions.cpp toolkit/xre/nsEmbedFunctions.cpp -index 53bd2bc2eb47..83184e97ba92 100644 ---- toolkit/xre/nsEmbedFunctions.cpp -+++ toolkit/xre/nsEmbedFunctions.cpp -@@ -243,9 +243,10 @@ GeckoProcessType sChildProcessType = GeckoProcessType_Default; - - #if defined(MOZ_WIDGET_ANDROID) - void --XRE_SetAndroidChildFds (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd) -+XRE_SetAndroidChildFds (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd) - { - mozilla::jni::SetGeckoThreadEnv(env); -+ mozilla::dom::SetPrefsFd(prefsFd); - IPC::Channel::SetClientChannelFd(ipcFd); - CrashReporter::SetNotificationPipeForChild(crashFd); - CrashReporter::SetCrashAnnotationPipeForChild(crashAnnotationFd); -diff --git widget/android/GeneratedJNIWrappers.cpp widget/android/GeneratedJNIWrappers.cpp -index e3f6af0cc575..4165df59f0e8 100644 ---- widget/android/GeneratedJNIWrappers.cpp -+++ widget/android/GeneratedJNIWrappers.cpp -@@ -2355,9 +2355,9 @@ constexpr char GeckoProcessManager::GetEditableParent_t::signature[]; - constexpr char GeckoProcessManager::Start_t::name[]; - constexpr char GeckoProcessManager::Start_t::signature[]; - --auto GeckoProcessManager::Start(mozilla::jni::String::Param a0, mozilla::jni::ObjectArray::Param a1, int32_t a2, int32_t a3, int32_t a4) -> int32_t -+auto GeckoProcessManager::Start(mozilla::jni::String::Param a0, mozilla::jni::ObjectArray::Param a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5) -> int32_t - { -- return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4); -+ return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4, a5); - } - - const char GeckoServiceChildProcess::name[] = -diff --git widget/android/GeneratedJNIWrappers.h widget/android/GeneratedJNIWrappers.h -index ece79ac94a71..228affa1e550 100644 ---- widget/android/GeneratedJNIWrappers.h -+++ widget/android/GeneratedJNIWrappers.h -@@ -6696,10 +6696,11 @@ public: - mozilla::jni::ObjectArray::Param, - int32_t, - int32_t, -+ int32_t, - int32_t> Args; - static constexpr char name[] = "start"; - static constexpr char signature[] = -- "(Ljava/lang/String;[Ljava/lang/String;III)I"; -+ "(Ljava/lang/String;[Ljava/lang/String;IIII)I"; - static const bool isStatic = true; - static const mozilla::jni::ExceptionMode exceptionMode = - mozilla::jni::ExceptionMode::ABORT; -@@ -6709,7 +6710,7 @@ public: - mozilla::jni::DispatchTarget::CURRENT; - }; - -- static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t) -> int32_t; -+ static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t, int32_t) -> int32_t; - - static const mozilla::jni::CallingThread callingThread = - mozilla::jni::CallingThread::ANY; -diff --git xpcom/build/nsXULAppAPI.h xpcom/build/nsXULAppAPI.h -index 94f6daf864c9..d6ac10d51d76 100644 ---- xpcom/build/nsXULAppAPI.h -+++ xpcom/build/nsXULAppAPI.h -@@ -398,7 +398,7 @@ XRE_API(const char*, - - #if defined(MOZ_WIDGET_ANDROID) - XRE_API(void, -- XRE_SetAndroidChildFds, (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd)) -+ XRE_SetAndroidChildFds, (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)) - #endif // defined(MOZ_WIDGET_ANDROID) - - XRE_API(void, diff --git a/www/firefox/files/patch-bug1442583 b/www/firefox/files/patch-bug1442583 deleted file mode 100644 index ca2aa7057396..000000000000 --- a/www/firefox/files/patch-bug1442583 +++ /dev/null @@ -1,39 +0,0 @@ -commit 7371a080accd -Author: Lars T Hansen <lhansen@mozilla.com> -Date: Mon Mar 5 09:55:28 2018 +0100 - - Bug 1442583 - Properly initialize ARM64 icache flushing machinery. r=sstangl - - --HG-- - extra : rebase_source : 73b5921da1fa0a19d6072e35d09bd7b528bb6bfc - extra : intermediate-source : 19516efbbf6750ba04e11c7099586d5be2fe818f - extra : source : 4316cc82d6302edf839a4af6fcb815f0ffa9f65c ---- - js/src/jit/ProcessExecutableMemory.cpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git js/src/jit/ProcessExecutableMemory.cpp js/src/jit/ProcessExecutableMemory.cpp -index e763a9d68dc17..8a6d50b6a7845 100644 ---- js/src/jit/ProcessExecutableMemory.cpp -+++ js/src/jit/ProcessExecutableMemory.cpp -@@ -20,6 +20,9 @@ - #include "jsutil.h" - - #include "gc/Memory.h" -+#ifdef JS_CODEGEN_ARM64 -+# include "jit/arm64/vixl/Cpu-vixl.h" -+#endif - #include "threading/LockGuard.h" - #include "threading/Mutex.h" - #include "util/Windows.h" -@@ -621,6 +624,10 @@ js::jit::DeallocateExecutableMemory(void* addr, size_t bytes) - bool - js::jit::InitProcessExecutableMemory() - { -+#ifdef JS_CODEGEN_ARM64 -+ // Initialize instruction cache flushing. -+ vixl::CPU::SetUp(); -+#endif - return execMemory.init(); - } - diff --git a/www/firefox/files/patch-bug1444798 b/www/firefox/files/patch-bug1444798 deleted file mode 100644 index 2268bc9d4484..000000000000 --- a/www/firefox/files/patch-bug1444798 +++ /dev/null @@ -1,45 +0,0 @@ -commit 7871e211ec43 -Author: sotaro <sotaro.ikeda.g@gmail.com> -Date: Fri Mar 16 21:03:59 2018 +0900 - - Bug 1444798 - Fix ExternalImageCallback func types r=jrmuizel ---- - gfx/webrender_bindings/src/bindings.rs | 11 +++++++---- - 1 file changed, 7 insertions(+), 4 deletions(-) - -diff --git gfx/webrender_bindings/src/bindings.rs gfx/webrender_bindings/src/bindings.rs -index 8517d7dd33e5..cf885ee713f3 100644 ---- gfx/webrender_bindings/src/bindings.rs -+++ gfx/webrender_bindings/src/bindings.rs -@@ -312,8 +312,8 @@ struct WrExternalImage { - size: usize, - } - --type LockExternalImageCallback = fn(*mut c_void, WrExternalImageId, u8) -> WrExternalImage; --type UnlockExternalImageCallback = fn(*mut c_void, WrExternalImageId, u8); -+type LockExternalImageCallback = unsafe extern "C" fn(*mut c_void, WrExternalImageId, u8) -> WrExternalImage; -+type UnlockExternalImageCallback = unsafe extern "C" fn(*mut c_void, WrExternalImageId, u8); - - #[repr(C)] - pub struct WrExternalImageHandler { -@@ -327,7 +327,8 @@ impl ExternalImageHandler for WrExternalImageHandler { - id: ExternalImageId, - channel_index: u8) - -> ExternalImage { -- let image = (self.lock_func)(self.external_image_obj, id.into(), channel_index); -+ -+ let image = unsafe { (self.lock_func)(self.external_image_obj, id.into(), channel_index) }; - ExternalImage { - uv: TexelRect::new(image.u0, image.v0, image.u1, image.v1), - source: match image.image_type { -@@ -341,7 +342,9 @@ impl ExternalImageHandler for WrExternalImageHandler { - fn unlock(&mut self, - id: ExternalImageId, - channel_index: u8) { -- (self.unlock_func)(self.external_image_obj, id.into(), channel_index); -+ unsafe { -+ (self.unlock_func)(self.external_image_obj, id.into(), channel_index); -+ } - } - } - diff --git a/www/firefox/files/patch-bug1445907 b/www/firefox/files/patch-bug1445907 deleted file mode 100644 index 924ac0aa7cd7..000000000000 --- a/www/firefox/files/patch-bug1445907 +++ /dev/null @@ -1,75 +0,0 @@ -commit 0c6dd4a750db -Author: Lars T Hansen <lhansen@mozilla.com> -Date: Mon Mar 19 09:58:06 2018 +0100 - - Bug 1445907 - Save x28 before clobbering it in the regex compiler. r=sstangl ---- - js/src/irregexp/NativeRegExpMacroAssembler.cpp | 25 ++++++++++++++++++++++++- - js/src/jit-test/tests/regexp/bug1445907.js | 15 +++++++++++++++ - 2 files changed, 39 insertions(+), 1 deletion(-) - -diff --git js/src/irregexp/NativeRegExpMacroAssembler.cpp js/src/irregexp/NativeRegExpMacroAssembler.cpp -index 28a4c35e75bfe..c08b005cf856b 100644 ---- js/src/irregexp/NativeRegExpMacroAssembler.cpp -+++ js/src/irregexp/NativeRegExpMacroAssembler.cpp -@@ -123,7 +123,15 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) - masm.bind(&entry_label_); - - #ifdef JS_CODEGEN_ARM64 -- // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing. -+ // ARM64 communicates stack address via SP, but uses a pseudo-sp (PSP) for -+ // addressing. The register we use for PSP may however also be used by -+ // calling code, and it is nonvolatile, so save it. Do this as a special -+ // case first because the generic save/restore code needs the PSP to be -+ // initialized already. -+ MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64())); -+ masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex)); -+ -+ // Initialize the PSP from the SP. - masm.initStackPtr(); - #endif - -@@ -421,7 +429,22 @@ NativeRegExpMacroAssembler::GenerateCode(JSContext* cx, bool match_only) - for (GeneralRegisterBackwardIterator iter(savedNonVolatileRegisters); iter.more(); ++iter) - masm.Pop(*iter); - -+#ifdef JS_CODEGEN_ARM64 -+ // Now restore the value that was in the PSP register on entry, and return. -+ -+ // Obtain the correct SP from the PSP. -+ masm.Mov(sp, PseudoStackPointer64); -+ -+ // Restore the saved value of the PSP register, this value is whatever the -+ // caller had saved in it, not any actual SP value, and it must not be -+ // overwritten subsequently. -+ masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex)); -+ -+ // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong. -+ masm.Ret(vixl::lr); -+#else - masm.abiret(); -+#endif - - // Backtrack code (branch target for conditional backtracks). - if (backtrack_label_.used()) { -diff --git js/src/jit-test/tests/regexp/bug1445907.js js/src/jit-test/tests/regexp/bug1445907.js -new file mode 100644 -index 0000000000000..75b23753eaf93 ---- /dev/null -+++ js/src/jit-test/tests/regexp/bug1445907.js -@@ -0,0 +1,15 @@ -+// On ARM64, we failed to save x28 properly when generating code for the regexp -+// matcher. -+// -+// There's wasm and Debugger code here because the combination forces the use of -+// x28 and exposes the bug when running on the simulator. -+ -+if (!wasmIsSupported()) -+ quit(); -+ -+var g = newGlobal(''); -+var dbg = new Debugger(g); -+g.eval(`var m = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary('(module (func (export "test")))')))`); -+var re = /./; -+dbg.onEnterFrame = function(frame) { re.exec("x") }; -+result = g.eval("m.exports.test()"); diff --git a/www/firefox/files/patch-bug1447359 b/www/firefox/files/patch-bug1447359 deleted file mode 100644 index 8116d9aece4f..000000000000 --- a/www/firefox/files/patch-bug1447359 +++ /dev/null @@ -1,45 +0,0 @@ -commit fef467b5a93d -Author: Luke Wagner <luke@mozilla.com> -Date: Thu Mar 22 10:28:13 2018 -0500 - - Bug 1447359 - Baldr: add AutoForbidPools in a few missing places (r=lth) - - --HG-- - extra : rebase_source : 75f1909deb352391529ce5e58a89e5f9cfeb3662 ---- - js/src/jit/arm64/MacroAssembler-arm64-inl.h | 1 + - js/src/jit/arm64/MacroAssembler-arm64.cpp | 2 ++ - 2 files changed, 3 insertions(+) - -diff --git js/src/jit/arm64/MacroAssembler-arm64-inl.h js/src/jit/arm64/MacroAssembler-arm64-inl.h -index 7061cbfd93ebb..190442f7afa0a 100644 ---- js/src/jit/arm64/MacroAssembler-arm64-inl.h -+++ js/src/jit/arm64/MacroAssembler-arm64-inl.h -@@ -359,6 +359,7 @@ MacroAssembler::sub32FromStackPtrWithPatch(Register dest) - { - vixl::UseScratchRegisterScope temps(this); - const ARMRegister scratch = temps.AcquireX(); -+ AutoForbidPools afp(this, /* max number of instructions in scope = */ 3); - CodeOffset offs = CodeOffset(currentOffset()); - movz(scratch, 0, 0); - movk(scratch, 0, 16); -diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp -index 7b599b7e9d610..4e8fdb6a67019 100644 ---- js/src/jit/arm64/MacroAssembler-arm64.cpp -+++ js/src/jit/arm64/MacroAssembler-arm64.cpp -@@ -707,6 +707,7 @@ MacroAssembler::patchFarJump(CodeOffset farJump, uint32_t targetOffset) - CodeOffset - MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) - { -+ AutoForbidPools afp(this, /* max number of instructions in scope = */ 1); - CodeOffset offset(currentOffset()); - Nop(); - append(desc, CodeOffset(currentOffset())); -@@ -1077,6 +1078,7 @@ MacroAssembler::comment(const char* msg) - CodeOffset - MacroAssembler::wasmTrapInstruction() - { -+ AutoForbidPools afp(this, /* max number of instructions in scope = */ 1); - CodeOffset offs(currentOffset()); - Unreachable(); - return offs; diff --git a/www/firefox/files/patch-bug1451292 b/www/firefox/files/patch-bug1451292 deleted file mode 100644 index b318ab619bb0..000000000000 --- a/www/firefox/files/patch-bug1451292 +++ /dev/null @@ -1,33 +0,0 @@ -commit b3a02fddbce8 -Author: Lars T Hansen <lhansen@mozilla.com> -Date: Wed Apr 4 15:48:48 2018 +0200 - - Bug 1451292 - Better payload for arm64 breakpoint instruction. r=sstangl - - At least some non-zero payloads confuse GDB and make it iloop on the - breakpoint instruction rather than break to the command line as it - should. There seems to be no reason not to use a zero payload. - - --HG-- - extra : rebase_source : 6d6f9aa2911b86b02572f88948d48bc2238c6353 - extra : amend_source : 9fed9235d481a9eadafc4a3e0075c9fef8b6050d ---- - js/src/jit/arm64/MacroAssembler-arm64.cpp | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp -index 4ea64b1225d00..a212de0ec2f45 100644 ---- js/src/jit/arm64/MacroAssembler-arm64.cpp -+++ js/src/jit/arm64/MacroAssembler-arm64.cpp -@@ -237,8 +237,9 @@ MacroAssemblerCompat::profilerEnterFrame(RegisterOrSP framePtr, Register scratch - void - MacroAssemblerCompat::breakpoint() - { -- static int code = 0xA77; -- Brk((code++) & 0xffff); -+ // Note, other payloads are possible, but GDB is known to misinterpret them -+ // sometimes and iloop on the breakpoint instead of stopping properly. -+ Brk(0); - } - - // Either `any` is valid or `sixtyfour` is valid. Return a 32-bit ARMRegister diff --git a/www/firefox/files/patch-bug1456556 b/www/firefox/files/patch-bug1456556 deleted file mode 100644 index 4b2ccb7e1ffc..000000000000 --- a/www/firefox/files/patch-bug1456556 +++ /dev/null @@ -1,22 +0,0 @@ -commit f6fc0b418aa3 -Author: Andrea Marchesini <amarchesini@mozilla.com> -Date: Tue May 1 08:47:13 2018 +0200 - - Bug 1456556 - FetchConsumer scope-exit RAII must grab 'self' by value, r=erahm ---- - dom/fetch/FetchConsumer.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git dom/fetch/FetchConsumer.cpp dom/fetch/FetchConsumer.cpp -index 134bf7f2e703a..3c3687fea1d5a 100644 ---- dom/fetch/FetchConsumer.cpp -+++ dom/fetch/FetchConsumer.cpp -@@ -582,7 +582,7 @@ FetchBodyConsumer<Derived>::ContinueConsumeBody(nsresult aStatus, - RefPtr<Promise> localPromise = mConsumePromise.forget(); - - RefPtr<FetchBodyConsumer<Derived>> self = this; -- auto autoReleaseObject = mozilla::MakeScopeExit([&] { -+ auto autoReleaseObject = mozilla::MakeScopeExit([self] { - self->ReleaseObject(); - }); - diff --git a/www/firefox/files/patch-bug702179 b/www/firefox/files/patch-bug702179 deleted file mode 100644 index 0c998526736e..000000000000 --- a/www/firefox/files/patch-bug702179 +++ /dev/null @@ -1,12 +0,0 @@ -Don't build static JS lib to make sure DTrace probes are picked up. - ---- js/src/build/moz.build.orig 2017-04-16 18:00:50 UTC -+++ js/src/build/moz.build -@@ -71,7 +71,3 @@ if CONFIG['OS_ARCH'] == 'SunOS': - ] - - OS_LIBS += CONFIG['REALTIME_LIBS'] -- --NO_EXPAND_LIBS = True -- --DIST_INSTALL = True diff --git a/www/firefox/files/patch-dom_media_flac_FlacDecoder.cpp b/www/firefox/files/patch-dom_media_flac_FlacDecoder.cpp index 1df3736c2211..d797b41ed389 100644 --- a/www/firefox/files/patch-dom_media_flac_FlacDecoder.cpp +++ b/www/firefox/files/patch-dom_media_flac_FlacDecoder.cpp @@ -7,7 +7,7 @@ index 53fc3c9937f7..b23771ab80fa 100644 @@ -7,6 +7,7 @@ #include "FlacDecoder.h" #include "MediaContainerType.h" - #include "MediaPrefs.h" + #include "mozilla/StaticPrefs.h" +#include "PDMFactory.h" namespace mozilla { @@ -15,10 +15,10 @@ index 53fc3c9937f7..b23771ab80fa 100644 @@ -15,6 +16,10 @@ FlacDecoder::IsEnabled() { #ifdef MOZ_FFVPX - return MediaPrefs::FlacEnabled(); + return StaticPrefs::MediaFlacEnabled(); +#elif defined(MOZ_FFMPEG) + RefPtr<PDMFactory> platform = new PDMFactory(); -+ return MediaPrefs::FlacEnabled() && platform->SupportsMimeType(NS_LITERAL_CSTRING("audio/flac"), ++ return StaticPrefs::MediaFlacEnabled() && platform->SupportsMimeType(NS_LITERAL_CSTRING("audio/flac"), + /* DecoderDoctorDiagnostics* */ nullptr); #else // Until bug 1295886 is fixed. diff --git a/www/firefox/files/patch-u2f-hid-rs62 b/www/firefox/files/patch-u2f-hid-rs62 index 6b17b8d6450a..14280f4df6bc 100644 --- a/www/firefox/files/patch-u2f-hid-rs62 +++ b/www/firefox/files/patch-u2f-hid-rs62 @@ -4,7 +4,7 @@ diff --git Cargo.lock Cargo.lock index 4bfba0eb2f52..cd4d80035d81 100644 --- Cargo.lock +++ Cargo.lock -@@ -486,6 +486,15 @@ dependencies = [ +@@ -552,6 +552,15 @@ dependencies = [ "unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -13,14 +13,14 @@ index 4bfba0eb2f52..cd4d80035d81 100644 +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ -+ "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", ++ "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", + "nom 3.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] - name = "dtoa" - version = "0.4.2" -@@ -1170,6 +1179,14 @@ name = "nom" + name = "diff" + version = "0.1.11" +@@ -1351,6 +1360,14 @@ name = "nom" version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -35,23 +35,23 @@ index 4bfba0eb2f52..cd4d80035d81 100644 [[package]] name = "nserror" version = "0.1.0" -@@ -1863,6 +1880,7 @@ dependencies = [ +@@ -2126,6 +2143,7 @@ dependencies = [ "bitflags 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)", "boxfnonce 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", "core-foundation-sys 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", + "devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.39 (registry+https://github.com/rust-lang/crates.io-index)", "libudev 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", -@@ -2220,6 +2238,7 @@ dependencies = [ + "log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)", +@@ -2511,6 +2529,7 @@ dependencies = [ "checksum darling_core 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "167dd3e235c2f1da16a635c282630452cdf49191eb05711de1bcd1d3d5068c00" "checksum darling_macro 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c53edaba455f6073a10c27c72440860eb3f60444f8c8660a391032eeae744d82" "checksum debug_unreachable 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9a032eac705ca39214d169f83e3d3da290af06d8d1d344d1baad2fd002dca4b3" +"checksum devd-rs 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e7c9ac481c38baf400d3b732e4a06850dfaa491d1b6379a249d9d40d14c2434c" + "checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a" + "checksum docopt 0.8.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d8acd393692c503b168471874953a2531df0e9ab77d0b6bbc582395743300a4a" "checksum dtoa 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "09c3753c3db574d215cba4ea76018483895d7bff25a31b49ba45db21c48e50ab" - "checksum dtoa-short 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "068d4026697c1a18f0b0bb8cfcad1b0c151b90d8edb9bf4c235ad68128920d1d" - "checksum dwrote 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a207eb7b40e25d1d28dc679f451d321fb6954b73ceaa47986702575865469461" -@@ -2279,6 +2298,7 @@ dependencies = [ +@@ -2581,6 +2600,7 @@ dependencies = [ "checksum net2 0.2.31 (registry+https://github.com/rust-lang/crates.io-index)" = "3a80f842784ef6c9a958b68b7516bc7e35883c614004dd94959a4dca1b716c09" "checksum nodrop 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "9a2228dca57108069a5262f2ed8bd2e82496d2e074a06d1ccc7ce1687b6ae0a2" "checksum nom 1.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce" @@ -73,14 +73,6 @@ index a0ab8ce71067..046de1e46f15 100644 [target.'cfg(target_os = "macos")'.dependencies] core-foundation-sys = "0.5.1" -@@ -21,6 +24,6 @@ runloop = "0.1.0" - bitflags = "1.0" - - [dev-dependencies] --rust-crypto = "^0.2" -+sha2 = "^0.7" - base64 = "^0.4" - env_logger = "0.4.1" diff --git dom/webauthn/u2f-hid-rs/README.md dom/webauthn/u2f-hid-rs/README.md index 2edf412211b5..a29905832e5e 100644 --- dom/webauthn/u2f-hid-rs/README.md @@ -94,61 +86,6 @@ index 2edf412211b5..a29905832e5e 100644 * **Supported HID Transports**: USB. * **Supported Protocols**: [FIDO U2F over USB](https://fidoalliance.org/specs/fido-u2f-v1.1-id-20160915/fido-u2f-raw-message-formats-v1.1-id-20160915.html). -diff --git dom/webauthn/u2f-hid-rs/examples/main.rs dom/webauthn/u2f-hid-rs/examples/main.rs -index d0b02e61a05b..8ecf102f2136 100644 ---- dom/webauthn/u2f-hid-rs/examples/main.rs -+++ dom/webauthn/u2f-hid-rs/examples/main.rs -@@ -3,10 +3,9 @@ - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - - extern crate base64; --extern crate crypto; -+extern crate sha2; - extern crate u2fhid; --use crypto::digest::Digest; --use crypto::sha2::Sha256; -+use sha2::{Digest, Sha256}; - use std::io; - use std::sync::mpsc::channel; - use u2fhid::{AuthenticatorTransports, KeyHandle, RegisterFlags, SignFlags, U2FManager}; -@@ -17,10 +16,12 @@ extern crate log; - macro_rules! try_or { - ($val:expr, $or:expr) => { - match $val { -- Ok(v) => { v } -- Err(e) => { return $or(e); } -+ Ok(v) => v, -+ Err(e) => { -+ return $or(e); -+ } - } -- } -+ }; - } - - fn u2f_get_key_handle_from_register_response(register_response: &Vec<u8>) -> io::Result<Vec<u8>> { -@@ -46,15 +47,13 @@ fn main() { - let challenge_str = format!("{}{}", - r#"{"challenge": "1vQ9mxionq0ngCnjD-wTsv1zUSrGRtFqG2xP09SbZ70","#, - r#" "version": "U2F_V2", "appId": "http://demo.yubico.com"}"#); -- let mut challenge = Sha256::new(); -- challenge.input_str(&challenge_str); -- let mut chall_bytes: Vec<u8> = vec![0; challenge.output_bytes()]; -- challenge.result(&mut chall_bytes); -+ let mut challenge = Sha256::default(); -+ challenge.input(challenge_str.as_bytes()); -+ let chall_bytes = Vec::from(challenge.result().as_slice()); - -- let mut application = Sha256::new(); -- application.input_str("http://demo.yubico.com"); -- let mut app_bytes: Vec<u8> = vec![0; application.output_bytes()]; -- application.result(&mut app_bytes); -+ let mut application = Sha256::default(); -+ application.input("http://demo.yubico.com".as_bytes()); -+ let app_bytes = Vec::from(application.result().as_slice()); - - let manager = U2FManager::new().unwrap(); - let flags = RegisterFlags::empty(); diff --git dom/webauthn/u2f-hid-rs/src/freebsd/device.rs dom/webauthn/u2f-hid-rs/src/freebsd/device.rs new file mode 100644 index 000000000000..5b9e7f2a912e @@ -756,42 +693,6 @@ index 1307497e91ac..e0cdc5080924 100644 #[path = "stub/mod.rs"] pub mod platform; -@@ -39,8 +51,8 @@ extern crate bitflags; - - mod consts; - mod statemachine; --mod u2ftypes; - mod u2fprotocol; -+mod u2ftypes; - - mod manager; - pub use manager::U2FManager; -@@ -88,9 +100,9 @@ pub enum Error { - NotAllowed = 5, - } - -+#[cfg(fuzzing)] -+pub use consts::*; - #[cfg(fuzzing)] - pub use u2fprotocol::*; - #[cfg(fuzzing)] - pub use u2ftypes::*; --#[cfg(fuzzing)] --pub use consts::*; -diff --git dom/webauthn/u2f-hid-rs/src/linux/device.rs dom/webauthn/u2f-hid-rs/src/linux/device.rs -index 6ed57106920f..35569f88a190 100644 ---- dom/webauthn/u2f-hid-rs/src/linux/device.rs -+++ dom/webauthn/u2f-hid-rs/src/linux/device.rs -@@ -11,8 +11,8 @@ use std::os::unix::prelude::*; - - use consts::CID_BROADCAST; - use platform::hidraw; --use util::from_unix_result; - use u2ftypes::U2FDevice; -+use util::from_unix_result; - - #[derive(Debug)] - pub struct Device { diff --git dom/webauthn/u2f-hid-rs/src/linux/hidraw.rs dom/webauthn/u2f-hid-rs/src/linux/hidraw.rs index 0ce5d379c3f7..182fe0ec5f2e 100644 --- dom/webauthn/u2f-hid-rs/src/linux/hidraw.rs @@ -821,7 +722,7 @@ index 0ce5d379c3f7..182fe0ec5f2e 100644 const NRBITS: u32 = 8; const TYPEBITS: u32 = 8; -@@ -35,28 +29,15 @@ const TYPESHIFT: u32 = NRSHIFT + NRBITS as u32; +@@ -35,17 +29,6 @@ const TYPESHIFT: u32 = NRSHIFT + NRBITS as u32; const SIZESHIFT: u32 = TYPESHIFT + TYPEBITS as u32; const DIRSHIFT: u32 = SIZESHIFT + SIZEBITS as u32; @@ -839,27 +740,7 @@ index 0ce5d379c3f7..182fe0ec5f2e 100644 // https://github.com/torvalds/linux/blob/master/include/uapi/linux/hid.h const HID_MAX_DESCRIPTOR_SIZE: usize = 4096; - macro_rules! ioctl { -- ($dir:expr, $name:ident, $ioty:expr, $nr:expr; $ty:ty) => ( -+ ($dir:expr, $name:ident, $ioty:expr, $nr:expr; $ty:ty) => { - pub unsafe fn $name(fd: libc::c_int, val: *mut $ty) -> io::Result<libc::c_int> { - let size = mem::size_of::<$ty>(); -- let ioc = (($dir as u32) << DIRSHIFT) | -- (($ioty as u32) << TYPESHIFT) | -- (($nr as u32) << NRSHIFT) | -- ((size as u32) << SIZESHIFT); -+ let ioc = (($dir as u32) << DIRSHIFT) | (($ioty as u32) << TYPESHIFT) -+ | (($nr as u32) << NRSHIFT) | ((size as u32) << SIZESHIFT); - - #[cfg(not(target_env = "musl"))] - type IocType = libc::c_ulong; -@@ -65,120 +46,12 @@ macro_rules! ioctl { - - from_unix_result(libc::ioctl(fd, ioc as IocType, val)) - } -- ); -+ }; - } +@@ -68,115 +51,7 @@ macro_rules! ioctl { // https://github.com/torvalds/linux/blob/master/include/uapi/linux/hidraw.h ioctl!(READ, hidiocgrdescsize, b'H', 0x01; ::libc::c_int); @@ -1013,126 +894,10 @@ index 0ce5d379c3f7..182fe0ec5f2e 100644 + value.truncate(desc.size as usize); + Ok(ReportDescriptor { value }) } -diff --git dom/webauthn/u2f-hid-rs/src/linux/monitor.rs dom/webauthn/u2f-hid-rs/src/linux/monitor.rs -index 47c376ba9176..408ea4b7b9ad 100644 ---- dom/webauthn/u2f-hid-rs/src/linux/monitor.rs -+++ dom/webauthn/u2f-hid-rs/src/linux/monitor.rs -@@ -65,13 +65,11 @@ where - - // Start listening for new devices. - let mut socket = monitor.listen()?; -- let mut fds = vec![ -- ::libc::pollfd { -- fd: socket.as_raw_fd(), -- events: POLLIN, -- revents: 0, -- }, -- ]; -+ let mut fds = vec![::libc::pollfd { -+ fd: socket.as_raw_fd(), -+ events: POLLIN, -+ revents: 0, -+ }]; - - while alive() { - // Wait for new events, break on failure. -diff --git dom/webauthn/u2f-hid-rs/src/macos/iokit.rs dom/webauthn/u2f-hid-rs/src/macos/iokit.rs -index 7e550af2a445..79e53599004e 100644 ---- dom/webauthn/u2f-hid-rs/src/macos/iokit.rs -+++ dom/webauthn/u2f-hid-rs/src/macos/iokit.rs -@@ -282,13 +282,13 @@ extern "C" { - - #[cfg(test)] - mod tests { -+ use super::*; - use core_foundation_sys::base::*; - use core_foundation_sys::runloop::*; - use libc::c_void; - use std::ptr; - use std::sync::mpsc::{channel, Sender}; - use std::thread; -- use super::*; - - extern "C" fn observe(_: CFRunLoopObserverRef, _: CFRunLoopActivity, context: *mut c_void) { - let tx: &Sender<SendableRunLoop> = unsafe { &*(context as *mut _) }; -diff --git dom/webauthn/u2f-hid-rs/src/macos/monitor.rs dom/webauthn/u2f-hid-rs/src/macos/monitor.rs -index c346fe5eff57..b971ed885d18 100644 ---- dom/webauthn/u2f-hid-rs/src/macos/monitor.rs -+++ dom/webauthn/u2f-hid-rs/src/macos/monitor.rs -@@ -10,9 +10,9 @@ use core_foundation_sys::runloop::*; - use libc::c_void; - use platform::iokit::*; - use runloop::RunLoop; --use std::{io, slice}; - use std::collections::HashMap; - use std::sync::mpsc::{channel, Receiver, Sender}; -+use std::{io, slice}; - use util::io_err; - - struct DeviceData { -diff --git dom/webauthn/u2f-hid-rs/src/manager.rs dom/webauthn/u2f-hid-rs/src/manager.rs -index c9f92bdbfad5..ca8b80a9584a 100644 ---- dom/webauthn/u2f-hid-rs/src/manager.rs -+++ dom/webauthn/u2f-hid-rs/src/manager.rs -@@ -7,8 +7,8 @@ use std::sync::mpsc::{channel, RecvTimeoutError, Sender}; - use std::time::Duration; - - use consts::PARAMETER_SIZE; --use statemachine::StateMachine; - use runloop::RunLoop; -+use statemachine::StateMachine; - use util::OnceCallback; - - enum QueueAction { -diff --git dom/webauthn/u2f-hid-rs/src/statemachine.rs dom/webauthn/u2f-hid-rs/src/statemachine.rs -index 8e4abaa7cf02..55e7d36155a3 100644 ---- dom/webauthn/u2f-hid-rs/src/statemachine.rs -+++ dom/webauthn/u2f-hid-rs/src/statemachine.rs -@@ -7,8 +7,8 @@ use platform::device::Device; - use platform::transaction::Transaction; - use std::thread; - use std::time::Duration; --use util::OnceCallback; - use u2fprotocol::{u2f_init_device, u2f_is_keyhandle_valid, u2f_register, u2f_sign}; -+use util::OnceCallback; - - fn is_valid_transport(transports: ::AuthenticatorTransports) -> bool { - transports.is_empty() || transports.contains(::AuthenticatorTransports::USB) -diff --git dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs -index 4d6737b1289e..0b984407d873 100644 ---- dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs -+++ dom/webauthn/u2f-hid-rs/src/u2fprotocol.rs -@@ -5,9 +5,9 @@ - extern crate std; - - use rand::{thread_rng, Rng}; -+use std::ffi::CString; - use std::io; - use std::io::{Read, Write}; --use std::ffi::CString; - - use consts::*; - use u2ftypes::*; diff --git dom/webauthn/u2f-hid-rs/src/util.rs dom/webauthn/u2f-hid-rs/src/util.rs index 27db864e2fcd..770e166d57d2 100644 --- dom/webauthn/u2f-hid-rs/src/util.rs +++ dom/webauthn/u2f-hid-rs/src/util.rs -@@ -12,10 +12,12 @@ use boxfnonce::SendBoxFnOnce; - macro_rules! try_or { - ($val:expr, $or:expr) => { - match $val { -- Ok(v) => { v } -- Err(e) => { return $or(e); } -+ Ok(v) => v, -+ Err(e) => { -+ return $or(e); -+ } - } -- } -+ }; - } - - pub trait Signed { @@ -44,6 +46,16 @@ pub fn from_unix_result<T: Signed>(rv: T) -> io::Result<T> { } } @@ -1150,33 +915,6 @@ index 27db864e2fcd..770e166d57d2 100644 pub fn io_err(msg: &str) -> io::Error { io::Error::new(io::ErrorKind::Other, msg) } -diff --git dom/webauthn/u2f-hid-rs/src/windows/device.rs dom/webauthn/u2f-hid-rs/src/windows/device.rs -index cbbe2811d672..5579cc052a6f 100644 ---- dom/webauthn/u2f-hid-rs/src/windows/device.rs -+++ dom/webauthn/u2f-hid-rs/src/windows/device.rs -@@ -7,8 +7,8 @@ use std::io; - use std::io::{Read, Write}; - use std::os::windows::io::AsRawHandle; - --use consts::{FIDO_USAGE_U2FHID, CID_BROADCAST, FIDO_USAGE_PAGE, HID_RPT_SIZE}; - use super::winapi::DeviceCapabilities; -+use consts::{FIDO_USAGE_U2FHID, CID_BROADCAST, FIDO_USAGE_PAGE, HID_RPT_SIZE}; - - use u2ftypes::U2FDevice; - -diff --git dom/webauthn/u2f-hid-rs/src/windows/winapi.rs dom/webauthn/u2f-hid-rs/src/windows/winapi.rs -index 18c6898e86ee..bd8a7e58d06a 100644 ---- dom/webauthn/u2f-hid-rs/src/windows/winapi.rs -+++ dom/webauthn/u2f-hid-rs/src/windows/winapi.rs -@@ -60,7 +60,7 @@ extern "stdcall" { - macro_rules! offset_of { - ($ty:ty, $field:ident) => { - unsafe { &(*(0 as *const $ty)).$field as *const _ as usize } -- } -+ }; - } - - fn from_wide_ptr(ptr: *const u16, len: usize) -> String { diff --git third_party/rust/devd-rs/.cargo-checksum.json third_party/rust/devd-rs/.cargo-checksum.json new file mode 100644 index 000000000000..7f8c6af3141e diff --git a/www/firefox/files/patch-z-bug1436911 b/www/firefox/files/patch-z-bug1436911 deleted file mode 100644 index 9b338d644358..000000000000 --- a/www/firefox/files/patch-z-bug1436911 +++ /dev/null @@ -1,1162 +0,0 @@ -commit 6b81d0b99f20 -Author: Nicholas Nethercote <nnethercote@mozilla.com> -Date: Thu Mar 8 15:47:24 2018 +1100 - - Bug 1436911 - Avoid the early/late prefs split. r=glandium - - All prefs that need to be sent to a new content process are now put into the - shared memory segment, and they are identified by the pref name instead of an - index into a list. The old IPC used at process startup (in XPCOMInitData) is - removed. - - Benefits: - - - It removes the need for the early prefs list - (dom/ipc/ContentProcesses.{h,cpp}) and the associated checking, which is ugly - and often trips people up (e.g. bug 1432979, bug 1439406). - - - Using prefnames instead of indices fixes some fragility (fixing bug 1419432). - - - It fixes the problem of early prefs being installed as unlocked default - values even if they are locked and/or have user values. - - MozReview-Commit-ID: FRIzHF8Tjd ---- - dom/ipc/ContentChild.cpp | 2 - - dom/ipc/ContentParent.cpp | 4 +- - dom/ipc/ContentPrefs.cpp | 357 ------------------------------ - dom/ipc/ContentPrefs.h | 27 --- - dom/ipc/ContentProcess.cpp | 5 +- - dom/ipc/PContent.ipdl | 7 +- - dom/ipc/moz.build | 2 - - layout/style/nsCSSProps.h | 2 +- - modules/libpref/Preferences.cpp | 470 ++++++++++++++++++++++------------------ - modules/libpref/Preferences.h | 15 +- - 10 files changed, 278 insertions(+), 613 deletions(-) - -diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp -index f61ab07b81e2..af1ef9cf4c7e 100644 ---- dom/ipc/ContentChild.cpp -+++ dom/ipc/ContentChild.cpp -@@ -1185,8 +1185,6 @@ void - ContentChild::InitXPCOM(const XPCOMInitData& aXPCOMInit, - const mozilla::dom::ipc::StructuredCloneData& aInitialData) - { -- Preferences::SetLatePreferences(&aXPCOMInit.prefs()); -- - // Do this as early as possible to get the parent process to initialize the - // background thread since we'll likely need database information very soon. - BackgroundChild::Startup(); -diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp -index 208bb47a970b..4ce5c6bf23d5 100644 ---- dom/ipc/ContentParent.cpp -+++ dom/ipc/ContentParent.cpp -@@ -197,7 +197,6 @@ - - #include "nsLayoutStylesheetCache.h" - --#include "ContentPrefs.h" - #include "mozilla/Sprintf.h" - - #ifdef MOZ_WEBRTC -@@ -2009,7 +2008,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR - - // Serialize the early prefs. - nsAutoCStringN<1024> prefs; -- Preferences::SerializeEarlyPreferences(prefs); -+ Preferences::SerializePreferences(prefs); - - // Set up the shared memory. - base::SharedMemory shm; -@@ -2228,7 +2227,6 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority) - - XPCOMInitData xpcomInit; - -- Preferences::GetPreferences(&xpcomInit.prefs()); - nsCOMPtr<nsIIOService> io(do_GetIOService()); - MOZ_ASSERT(io, "No IO service?"); - DebugOnly<nsresult> rv = io->GetOffline(&xpcomInit.isOffline()); -diff --git dom/ipc/ContentPrefs.cpp dom/ipc/ContentPrefs.cpp -deleted file mode 100644 -index 808b797d9bee..000000000000 ---- dom/ipc/ContentPrefs.cpp -+++ /dev/null -@@ -1,360 +0,0 @@ --/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ --/* vim: set ts=8 sts=2 et sw=2 tw=80: */ --/* This Source Code Form is subject to the terms of the Mozilla Public -- * License, v. 2.0. If a copy of the MPL was not distributed with this -- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -- --#include "ContentPrefs.h" -- --/****************************************************************************** -- * -- * DO NOT ADD PREFS TO THIS LIST WITHOUT DOM PEER REVIEW -- * -- * This is the list of preferences that are sent to the content process on -- * startup. Only prefs that are required immediately upon startup should be -- * listed here. The first IPC message received in the content process will -- * contain all the other prefs. Prefs should only be listed here if they must be -- * read before the first IPC message is received. -- * -- ******************************************************************************/ -- --const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = { -- "accessibility.monoaudio.enable", -- "accessibility.mouse_focuses_formcontrol", -- "accessibility.tabfocus_applies_to_xul", -- "app.update.channel", -- "browser.autofocus", -- "browser.dom.window.dump.enabled", -- "browser.sessionhistory.max_entries", -- "browser.sessionhistory.max_total_viewers", --#if defined(NIGHTLY_BUILD) || defined(DEBUG) -- "browser.startup.record", --#endif --#if defined(ANDROID) -- "consoleservice.logcat", --#endif -- "content.cors.disable", -- "content.cors.no_private_data", -- "content.notify.backoffcount", -- "content.notify.interval", -- "content.notify.ontimer", -- "content.sink.enable_perf_mode", -- "content.sink.event_probe_rate", -- "content.sink.initial_perf_time", -- "content.sink.interactive_deflect_count", -- "content.sink.interactive_parse_time", -- "content.sink.interactive_time", -- "content.sink.pending_event_mode", -- "content.sink.perf_deflect_count", -- "content.sink.perf_parse_time", -- "device.storage.prompt.testing", -- "device.storage.writable.name", -- "devtools.enabled", -- "dom.allow_XUL_XBL_for_file", -- "dom.allow_cut_copy", -- "dom.animations-api.core.enabled", -- "dom.animations-api.element-animate.enabled", -- "dom.animations-api.pending-member.enabled", -- "dom.enable_frame_timing", -- "dom.enable_performance", -- "dom.enable_performance_navigation_timing", -- "dom.enable_resource_timing", -- "dom.event.handling-user-input-time-limit", -- "dom.event.touch.coalescing.enabled", -- "dom.forms.autocomplete.formautofill", -- "dom.forms.inputmode", -- "dom.input.skip_cursor_move_for_same_value_set", -- "dom.ipc.processPriorityManager.backgroundGracePeriodMS", -- "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS", -- "dom.ipc.useNativeEventProcessing.content", -- "dom.max_chrome_script_run_time", -- "dom.max_ext_content_script_run_time", -- "dom.max_script_run_time", -- "dom.mozBrowserFramesEnabled", -- "dom.performance.enable_notify_performance_timing", -- "dom.performance.enable_user_timing_logging", -- "dom.placeholder.show_on_focus", -- "dom.requestIdleCallback.enabled", -- "dom.script_loader.bytecode_cache.enabled", -- "dom.script_loader.bytecode_cache.strategy", -- "dom.storage.testing", -- "dom.url.encode_decode_hash", -- "dom.url.getters_decode_hash", -- "dom.use_watchdog", -- "dom.vibrator.enabled", -- "dom.vibrator.max_vibrate_list_len", -- "dom.vibrator.max_vibrate_ms", -- "dom.webcomponents.customelements.enabled", -- "dom.webcomponents.shadowdom.enabled", -- "focusmanager.testmode", -- "font.size.inflation.disabledInMasterProcess", -- "font.size.inflation.emPerLine", -- "font.size.inflation.forceEnabled", -- "font.size.inflation.lineThreshold", -- "font.size.inflation.mappingIntercept", -- "font.size.inflation.maxRatio", -- "font.size.inflation.minTwips", -- "font.size.systemFontScale", -- "full-screen-api.allow-trusted-requests-only", -- "full-screen-api.enabled", -- "full-screen-api.unprefix.enabled", --#ifdef FUZZING -- "fuzzing.enabled", --#endif -- "gfx.font_rendering.opentype_svg.enabled", -- "hangmonitor.timeout", -- "html5.flushtimer.initialdelay", -- "html5.flushtimer.subsequentdelay", -- "html5.offmainthread", -- "intl.charset.fallback.tld", -- "intl.charset.fallback.utf8_for_file", -- "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition", -- "javascript.enabled", -- "javascript.options.array_prototype_values", -- "javascript.options.asmjs", -- "javascript.options.asyncstack", -- "javascript.options.baselinejit", -- "javascript.options.baselinejit.threshold", -- "javascript.options.baselinejit.unsafe_eager_compilation", -- "javascript.options.discardSystemSource", -- "javascript.options.dump_stack_on_debuggee_would_run", -- "javascript.options.gczeal", -- "javascript.options.gczeal.frequency", -- "javascript.options.ion", -- "javascript.options.ion.offthread_compilation", -- "javascript.options.ion.threshold", -- "javascript.options.ion.unsafe_eager_compilation", -- "javascript.options.jit.full_debug_checks", -- "javascript.options.native_regexp", -- "javascript.options.parallel_parsing", -- "javascript.options.shared_memory", -- "javascript.options.spectre.index_masking", -- "javascript.options.spectre.jit_to_C++_calls", -- "javascript.options.spectre.object_mitigations.barriers", -- "javascript.options.spectre.object_mitigations.misc", -- "javascript.options.spectre.string_mitigations", -- "javascript.options.spectre.value_masking", -- "javascript.options.streams", -- "javascript.options.strict", -- "javascript.options.strict.debug", -- "javascript.options.throw_on_asmjs_validation_failure", -- "javascript.options.throw_on_debuggee_would_run", -- "javascript.options.wasm", -- "javascript.options.wasm_baselinejit", -- "javascript.options.wasm_ionjit", -- "javascript.options.werror", -- "javascript.use_us_english_locale", -- "jsloader.shareGlobal", -- "layout.css.all-shorthand.enabled", -- "layout.css.background-blend-mode.enabled", -- "layout.css.box-decoration-break.enabled", -- "layout.css.color-adjust.enabled", -- "layout.css.column-span.enabled", -- "layout.css.contain.enabled", -- "layout.css.control-characters.visible", -- "layout.css.emulate-moz-box-with-flex", -- "layout.css.expensive-style-struct-assertions.enabled", -- "layout.css.float-logical-values.enabled", -- "layout.css.font-display.enabled", -- "layout.css.font-variations.enabled", -- "layout.css.frames-timing.enabled", -- "layout.css.getBoxQuads.enabled", -- "layout.css.grid-template-subgrid-value.enabled", -- "layout.css.grid.enabled", -- "layout.css.image-orientation.enabled", -- "layout.css.individual-transform.enabled", -- "layout.css.initial-letter.enabled", -- "layout.css.isolation.enabled", -- "layout.css.mix-blend-mode.enabled", -- "layout.css.moz-document.content.enabled", -- "layout.css.osx-font-smoothing.enabled", -- "layout.css.overflow-clip-box.enabled", -- "layout.css.overscroll-behavior.enabled", -- "layout.css.prefixes.animations", -- "layout.css.prefixes.border-image", -- "layout.css.prefixes.box-sizing", -- "layout.css.prefixes.device-pixel-ratio-webkit", -- "layout.css.prefixes.font-features", -- "layout.css.prefixes.gradients", -- "layout.css.prefixes.transforms", -- "layout.css.prefixes.transitions", -- "layout.css.prefixes.webkit", -- "layout.css.scope-pseudo.enabled", -- "layout.css.scoped-style.enabled", -- "layout.css.scroll-behavior.property-enabled", -- "layout.css.scroll-snap.enabled", --#ifdef MOZ_STYLO -- "layout.css.servo.chrome.enabled", -- "layout.css.servo.enabled", --#endif -- "layout.css.shape-outside.enabled", -- "layout.css.text-align-unsafe-value.enabled", -- "layout.css.text-combine-upright-digits.enabled", -- "layout.css.text-combine-upright.enabled", -- "layout.css.text-justify.enabled", -- "layout.css.touch_action.enabled", -- "layout.css.visited_links_enabled", -- "layout.idle_period.required_quiescent_frames", -- "layout.idle_period.time_limit", -- "layout.interruptible-reflow.enabled", -- "mathml.disabled", -- "media.audio-max-decode-error", -- "media.cache_readahead_limit", -- "media.cache_resume_threshold", -- "media.cache_size", -- "media.clearkey.persistent-license.enabled", -- "media.cubeb.backend", -- "media.cubeb.sandbox", -- "media.cubeb_latency_msg_frames", -- "media.cubeb_latency_playback_ms", -- "media.decoder-doctor.wmf-disabled-is-failure", -- "media.decoder.recycle.enabled", -- "media.decoder.skip-to-next-key-frame.enabled", -- "media.dormant-on-pause-timeout-ms", -- "media.eme.audio.blank", -- "media.eme.chromium-api.video-shmems", -- "media.eme.enabled", -- "media.eme.video.blank", -- "media.ffmpeg.enabled", -- "media.ffmpeg.low-latency.enabled", -- "media.ffvpx.enabled", -- "media.ffvpx.low-latency.enabled", -- "media.flac.enabled", -- "media.forcestereo.enabled", -- "media.gmp.decoder.enabled", -- "media.gmp.insecure.allow", -- "media.gpu-process-decoder", -- "media.hls.enabled", -- "media.libavcodec.allow-obsolete", -- "media.memory_cache_max_size", -- "media.memory_caches_combined_limit_kb", -- "media.memory_caches_combined_limit_pc_sysmem", -- "media.mp4.enabled", -- "media.navigator.mediadatadecoder_enabled", -- "media.ogg.enabled", -- "media.ogg.flac.enabled", -- "media.playback.warnings-as-errors", -- "media.playback.warnings-as-errors.stagefright-vs-rust", -- "media.resampling.enabled", -- "media.resume-bkgnd-video-on-tabhover", -- "media.ruin-av-sync.enabled", -- "media.rust.mp4parser", -- "media.rust.test_mode", -- "media.seamless-looping", -- "media.suspend-bkgnd-video.delay-ms", -- "media.suspend-bkgnd-video.enabled", -- "media.use-blank-decoder", -- "media.video-max-decode-error", -- "media.video_stats.enabled", -- "media.videocontrols.lock-video-orientation", -- "media.volume_scale", -- "media.webspeech.recognition.enable", -- "media.webspeech.recognition.force_enable", -- "media.webspeech.synth.force_global_queue", -- "media.webspeech.test.enable", -- "media.webspeech.test.fake_fsm_events", -- "media.webspeech.test.fake_recognition_service", -- "media.wmf.allow-unsupported-resolutions", -- "media.wmf.enabled", -- "media.wmf.skip-blacklist", -- "media.wmf.vp9.enabled", -- "network.IDN.blacklist_chars", -- "network.IDN.restriction_profile", -- "network.IDN.use_whitelist", -- "network.IDN_show_punycode", -- "network.buffer.cache.count", -- "network.buffer.cache.size", -- "network.captive-portal-service.enabled", -- "network.cookie.cookieBehavior", -- "network.cookie.lifetimePolicy", -- "network.dns.disablePrefetch", -- "network.dns.disablePrefetchFromHTTPS", -- "network.http.tailing.enabled", -- "network.jar.block-remote-files", -- "network.loadinfo.skip_type_assertion", -- "network.notify.changed", -- "network.offline-mirrors-connectivity", -- "network.protocol-handler.external.jar", -- "network.proxy.type", -- "network.security.ports.banned", -- "network.security.ports.banned.override", -- "network.standard-url.enable-rust", -- "network.standard-url.max-length", -- "network.standard-url.punycode-host", -- "network.sts.max_time_for_events_between_two_polls", -- "network.sts.max_time_for_pr_close_during_shutdown", -- "network.tcp.keepalive.enabled", -- "network.tcp.keepalive.idle_time", -- "network.tcp.keepalive.probe_count", -- "network.tcp.keepalive.retry_interval", -- "network.tcp.sendbuffer", -- "nglayout.debug.invalidation", -- "privacy.donottrackheader.enabled", -- "privacy.firstparty.isolate", -- "privacy.firstparty.isolate.restrict_opener_access", -- "privacy.reduceTimerPrecision", -- "privacy.resistFingerprinting", -- "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts", -- "privacy.resistFingerprinting.reduceTimerPrecision.jitter", -- "privacy.resistFingerprinting.reduceTimerPrecision.microseconds", -- "privacy.resistFingerprinting.target_video_res", -- "privacy.resistFingerprinting.video_dropped_ratio", -- "privacy.resistFingerprinting.video_frames_per_sec", -- "privacy.trackingprotection.lower_network_priority", -- "privacy.window.maxInnerHeight", -- "privacy.window.maxInnerWidth", -- "security.csp.enable", -- "security.data_uri.block_toplevel_data_uri_navigations", -- "security.data_uri.unique_opaque_origin", -- "security.fileuri.strict_origin_policy", -- "security.mixed_content.block_active_content", -- "security.mixed_content.block_display_content", -- "security.mixed_content.block_object_subrequest", -- "security.mixed_content.hsts_priming_cache_timeout", -- "security.mixed_content.send_hsts_priming", -- "security.mixed_content.upgrade_display_content", -- "security.mixed_content.use_hsts", -- "security.sandbox.content.level", -- "security.sandbox.content.tempDirSuffix", -- "security.sandbox.logging.enabled", -- "security.sandbox.mac.track.violations", -- "security.sandbox.windows.log.stackTraceDepth", -- "svg.disabled", -- "svg.display-lists.hit-testing.enabled", -- "svg.display-lists.painting.enabled", -- "svg.new-getBBox.enabled", -- "svg.path-caching.enabled", -- "svg.transform-box.enabled", -- "toolkit.asyncshutdown.crash_timeout", -- "toolkit.asyncshutdown.log", -- "toolkit.osfile.log", -- "toolkit.osfile.log.redirect", -- "toolkit.telemetry.enabled", -- "toolkit.telemetry.idleTimeout", -- "toolkit.telemetry.initDelay", -- "toolkit.telemetry.log.dump", -- "toolkit.telemetry.log.level", -- "toolkit.telemetry.minSubsessionLength", -- "toolkit.telemetry.scheduler.idleTickInterval", -- "toolkit.telemetry.scheduler.tickInterval", -- "toolkit.telemetry.testing.overridePreRelease", -- "toolkit.telemetry.unified", -- "ui.key.menuAccessKeyFocuses", -- "ui.popup.disable_autohide", -- "ui.use_activity_cursor", -- "view_source.editor.external", -- "zoom.maxPercent", -- "zoom.minPercent" --}; -- --const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount) --{ -- *aCount = ArrayLength(ContentPrefs::gEarlyPrefs); -- return gEarlyPrefs; --} -- --const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex) --{ -- MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs)); -- return gEarlyPrefs[aIndex]; --} -diff --git dom/ipc/ContentPrefs.h dom/ipc/ContentPrefs.h -deleted file mode 100644 -index 72ce8d236c11..000000000000 ---- dom/ipc/ContentPrefs.h -+++ /dev/null -@@ -1,27 +0,0 @@ --/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ --/* vim: set ts=8 sts=2 et sw=2 tw=80: */ --/* This Source Code Form is subject to the terms of the Mozilla Public -- * License, v. 2.0. If a copy of the MPL was not distributed with this -- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -- --#ifndef mozilla_dom_ContentPrefs_h --#define mozilla_dom_ContentPrefs_h -- --// See the comment in ContentPrefs.cpp for more information. -- --namespace mozilla { --namespace dom { -- --class ContentPrefs { --public: -- static const char** GetEarlyPrefs(size_t* aCount); -- static const char* GetEarlyPref(size_t aIndex); -- --private: -- static const char* gEarlyPrefs[]; --}; -- --} --} -- --#endif -diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp -index 2441c8cb9224..c00283dc5084 100644 ---- dom/ipc/ContentProcess.cpp -+++ dom/ipc/ContentProcess.cpp -@@ -7,7 +7,6 @@ - #include "mozilla/ipc/IOThreadChild.h" - - #include "ContentProcess.h" --#include "ContentPrefs.h" - #include "base/shared_memory.h" - #include "mozilla/Preferences.h" - #include "mozilla/Scheduler.h" -@@ -226,8 +225,8 @@ ContentProcess::Init(int aArgc, char* aArgv[]) - NS_ERROR("failed to map shared memory in the child"); - return false; - } -- Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()), -- prefsLen); -+ Preferences::DeserializePreferences(static_cast<char*>(shm.memory()), -+ prefsLen); - - Scheduler::SetPrefs(schedulerPrefs); - mContent.Init(IOThreadChild::message_loop(), -diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl -index 5d077976569a..fb967ffc53a9 100644 ---- dom/ipc/PContent.ipdl -+++ dom/ipc/PContent.ipdl -@@ -155,6 +155,12 @@ union MaybePrefValue { - null_t; - }; - -+// This serialization form mirrors that used in mozilla::Pref in -+// Preferences.cpp. The two should be kept in sync, e.g. if something is added -+// to one it should also be added to the other. -+// -+// Note: there is no need to pass the isSticky attribute because that's an -+// immutable attribute obtained from file at startup. - struct Pref { - nsCString name; - bool isLocked; -@@ -273,7 +279,6 @@ struct XPCOMInitData - ClipboardCapabilities clipboardCaps; - DomainPolicyClone domainPolicy; - OptionalURIParams userContentSheetURL; -- Pref[] prefs; - GfxVarUpdate[] gfxNonDefaultVarUpdates; - ContentDeviceData contentDeviceData; - GfxInfoFeatureStatus[] gfxFeatureStatus; -diff --git dom/ipc/moz.build dom/ipc/moz.build -index 3c5541c7791b..5e92a0d52b5d 100644 ---- dom/ipc/moz.build -+++ dom/ipc/moz.build -@@ -26,7 +26,6 @@ EXPORTS.mozilla.dom += [ - 'ContentBridgeParent.h', - 'ContentChild.h', - 'ContentParent.h', -- 'ContentPrefs.h', - 'ContentProcess.h', - 'ContentProcessHost.h', - 'ContentProcessManager.h', -@@ -59,7 +58,6 @@ UNIFIED_SOURCES += [ - 'ContentBridgeChild.cpp', - 'ContentBridgeParent.cpp', - 'ContentParent.cpp', -- 'ContentPrefs.cpp', - 'ContentProcess.cpp', - 'ContentProcessHost.cpp', - 'ContentProcessManager.cpp', -diff --git layout/style/nsCSSProps.h layout/style/nsCSSProps.h -index dce44bf61b35..80288336a08b 100644 ---- layout/style/nsCSSProps.h -+++ layout/style/nsCSSProps.h -@@ -645,7 +645,7 @@ public: - // In the child process, assert that we're not trying to parse stylesheets - // before we've gotten all our prefs. - MOZ_ASSERT_IF(!XRE_IsParentProcess(), -- mozilla::Preferences::AreAllPrefsSetInContentProcess()); -+ mozilla::Preferences::ArePrefsInitedInContentProcess()); - return gPropertyEnabled[aProperty]; - } - -diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp -index fe780686f2eb..488095f49236 100644 ---- modules/libpref/Preferences.cpp -+++ modules/libpref/Preferences.cpp -@@ -15,7 +15,6 @@ - #include "mozilla/ArenaAllocator.h" - #include "mozilla/ArrayUtils.h" - #include "mozilla/Attributes.h" --#include "mozilla/dom/ContentPrefs.h" - #include "mozilla/dom/PContent.h" - #include "mozilla/HashFunctions.h" - #include "mozilla/Logging.h" -@@ -131,6 +130,29 @@ enum class PrefType : uint8_t - Bool = 3, - }; - -+// This is used for pref names and string pref values. We encode the string -+// length, then a '/', then the string chars. This encoding means there are no -+// special chars that are forbidden or require escaping. -+static void -+SerializeAndAppendString(const char* aChars, nsCString& aStr) -+{ -+ aStr.AppendInt(uint32_t(strlen(aChars))); -+ aStr.Append('/'); -+ aStr.Append(aChars); -+} -+ -+static char* -+DeserializeString(char* aChars, nsCString& aStr) -+{ -+ char* p = aChars; -+ uint32_t length = strtol(p, &p, 10); -+ MOZ_ASSERT(p[0] == '/'); -+ p++; // move past the '/' -+ aStr.Assign(p, length); -+ p += length; // move past the string itself -+ return p; -+} -+ - // Keep this in sync with PrefValue in prefs_parser/src/lib.rs. - union PrefValue { - const char* mStringVal; -@@ -223,6 +245,64 @@ union PrefValue { - MOZ_CRASH(); - } - } -+ -+ void SerializeAndAppend(PrefType aType, nsCString& aStr) -+ { -+ switch (aType) { -+ case PrefType::Bool: -+ aStr.Append(mBoolVal ? 'T' : 'F'); -+ break; -+ -+ case PrefType::Int: -+ aStr.AppendInt(mIntVal); -+ break; -+ -+ case PrefType::String: { -+ SerializeAndAppendString(mStringVal, aStr); -+ break; -+ } -+ -+ case PrefType::None: -+ default: -+ MOZ_CRASH(); -+ } -+ } -+ -+ static char* Deserialize(PrefType aType, -+ char* aStr, -+ dom::MaybePrefValue* aDomValue) -+ { -+ char* p = aStr; -+ -+ switch (aType) { -+ case PrefType::Bool: -+ if (*p == 'T') { -+ *aDomValue = true; -+ } else if (*p == 'F') { -+ *aDomValue = false; -+ } else { -+ *aDomValue = false; -+ NS_ERROR("bad bool pref value"); -+ } -+ p++; -+ return p; -+ -+ case PrefType::Int: { -+ *aDomValue = int32_t(strtol(p, &p, 10)); -+ return p; -+ } -+ -+ case PrefType::String: { -+ nsCString str; -+ p = DeserializeString(p, str); -+ *aDomValue = str; -+ return p; -+ } -+ -+ default: -+ MOZ_CRASH(); -+ } -+ } - }; - - #ifdef DEBUG -@@ -694,6 +774,159 @@ public: - return false; - } - -+ // Prefs are serialized in a manner that mirrors dom::Pref. The two should be -+ // kept in sync. E.g. if something is added to one it should also be added to -+ // the other. (It would be nice to be able to use the code generated from -+ // IPDL for serializing dom::Pref here instead of writing by hand this -+ // serialization/deserialization. Unfortunately, that generated code is -+ // difficult to use directly, outside of the IPDL IPC code.) -+ // -+ // The grammar for the serialized prefs has the following form. -+ // -+ // <pref> = <type> <locked> ':' <name> ':' <value>? ':' <value>? '\n' -+ // <type> = 'B' | 'I' | 'S' -+ // <locked> = 'L' | '-' -+ // <name> = <string-value> -+ // <value> = <bool-value> | <int-value> | <string-value> -+ // <bool-value> = 'T' | 'F' -+ // <int-value> = an integer literal accepted by strtol() -+ // <string-value> = <int-value> '/' <chars> -+ // <chars> = any char sequence of length dictated by the preceding -+ // <int-value>. -+ // -+ // No whitespace is tolerated between tokens. <type> must match the types of -+ // the values. -+ // -+ // The serialization is text-based, rather than binary, for the following -+ // reasons. -+ // -+ // - The size difference wouldn't be much different between text-based and -+ // binary. Most of the space is for strings (pref names and string pref -+ // values), which would be the same in both styles. And other differences -+ // would be minimal, e.g. small integers are shorter in text but long -+ // integers are longer in text. -+ // -+ // - Likewise, speed differences should be negligible. -+ // -+ // - It's much easier to debug a text-based serialization. E.g. you can -+ // print it and inspect it easily in a debugger. -+ // -+ // Examples of unlocked boolean prefs: -+ // - "B-:8/my.bool1:F:T\n" -+ // - "B-:8/my.bool2:F:\n" -+ // - "B-:8/my.bool3::T\n" -+ // -+ // Examples of locked integer prefs: -+ // - "IL:7/my.int1:0:1\n" -+ // - "IL:7/my.int2:123:\n" -+ // - "IL:7/my.int3::-99\n" -+ // -+ // Examples of unlocked string prefs: -+ // - "S-:10/my.string1:3/abc:4/wxyz\n" -+ // - "S-:10/my.string2:5/1.234:\n" -+ // - "S-:10/my.string3::7/string!\n" -+ -+ void SerializeAndAppend(nsCString& aStr) -+ { -+ switch (Type()) { -+ case PrefType::Bool: -+ aStr.Append('B'); -+ break; -+ -+ case PrefType::Int: -+ aStr.Append('I'); -+ break; -+ -+ case PrefType::String: { -+ aStr.Append('S'); -+ break; -+ } -+ -+ case PrefType::None: -+ default: -+ MOZ_CRASH(); -+ } -+ -+ aStr.Append(mIsLocked ? 'L' : '-'); -+ aStr.Append(':'); -+ -+ SerializeAndAppendString(mName, aStr); -+ aStr.Append(':'); -+ -+ if (mHasDefaultValue) { -+ mDefaultValue.SerializeAndAppend(Type(), aStr); -+ } -+ aStr.Append(':'); -+ -+ if (mHasUserValue) { -+ mUserValue.SerializeAndAppend(Type(), aStr); -+ } -+ aStr.Append('\n'); -+ } -+ -+ static char* Deserialize(char* aStr, dom::Pref* aDomPref) -+ { -+ char* p = aStr; -+ -+ // The type. -+ PrefType type; -+ if (*p == 'B') { -+ type = PrefType::Bool; -+ } else if (*p == 'I') { -+ type = PrefType::Int; -+ } else if (*p == 'S') { -+ type = PrefType::String; -+ } else { -+ NS_ERROR("bad pref type"); -+ type = PrefType::None; -+ } -+ p++; // move past the type char -+ -+ // Locked? -+ bool isLocked; -+ if (*p == 'L') { -+ isLocked = true; -+ } else if (*p == '-') { -+ isLocked = false; -+ } else { -+ NS_ERROR("bad pref locked status"); -+ isLocked = false; -+ } -+ p++; // move past the isLocked char -+ -+ MOZ_ASSERT(*p == ':'); -+ p++; // move past the ':' -+ -+ // The pref name. -+ nsCString name; -+ p = DeserializeString(p, name); -+ -+ MOZ_ASSERT(*p == ':'); -+ p++; // move past the ':' preceding the default value -+ -+ dom::MaybePrefValue maybeDefaultValue; -+ if (*p != ':') { -+ dom::PrefValue defaultValue; -+ p = PrefValue::Deserialize(type, p, &maybeDefaultValue); -+ } -+ -+ MOZ_ASSERT(*p == ':'); -+ p++; // move past the ':' between the default and user values -+ -+ dom::MaybePrefValue maybeUserValue; -+ if (*p != '\n') { -+ dom::PrefValue userValue; -+ p = PrefValue::Deserialize(type, p, &maybeUserValue); -+ } -+ -+ MOZ_ASSERT(*p == '\n'); -+ p++; // move past the '\n' following the user value -+ -+ *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue); -+ -+ return p; -+ } -+ - void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes) - { - // Note: mName is allocated in gPrefNameArena, measured elsewhere. -@@ -880,41 +1113,9 @@ pref_savePrefs() - - #ifdef DEBUG - --// For content processes, what prefs have been initialized? --enum class ContentProcessPhase --{ -- eNoPrefsSet, -- eEarlyPrefsSet, -- eEarlyAndLatePrefsSet, --}; -- - // Note that this never changes in the parent process, and is only read in - // content processes. --static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet; -- --struct StringComparator --{ -- const char* mPrefName; -- -- explicit StringComparator(const char* aPrefName) -- : mPrefName(aPrefName) -- { -- } -- -- int operator()(const char* aPrefName) const -- { -- return strcmp(mPrefName, aPrefName); -- } --}; -- --static bool --IsEarlyPref(const char* aPrefName) --{ -- size_t prefsLen; -- size_t found; -- const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen); -- return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found); --} -+static bool gContentProcessPrefsAreInited = false; - - #endif // DEBUG - -@@ -923,23 +1124,7 @@ pref_HashTableLookupInner(const char* aPrefName) - { - MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal()); - --#ifdef DEBUG -- if (!XRE_IsParentProcess()) { -- if (gPhase == ContentProcessPhase::eNoPrefsSet) { -- MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set", -- aPrefName); -- } -- -- if (gPhase == ContentProcessPhase::eEarlyPrefsSet && -- !IsEarlyPref(aPrefName)) { -- // If you hit this crash, you have an early access of a non-early pref. -- // Consider moving the access later or add the pref to the whitelist of -- // early prefs in ContentPrefs.cpp and get review from a DOM peer. -- MOZ_CRASH_UNSAFE_PRINTF( -- "accessing non-early pref %s before late prefs are set", aPrefName); -- } -- } --#endif -+ MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited); - - return static_cast<PrefEntry*>(gHashTable->Search(aPrefName)); - } -@@ -2932,8 +3117,8 @@ public: - - } // namespace - --// A list of prefs sent early from the parent, via shared memory. --static InfallibleTArray<dom::Pref>* gEarlyDomPrefs; -+// A list of changed prefs sent from the parent via shared memory. -+static InfallibleTArray<dom::Pref>* gChangedDomPrefs; - - static const char kTelemetryPref[] = "toolkit.telemetry.enabled"; - static const char kChannelPref[] = "app.update.channel"; -@@ -3050,12 +3235,12 @@ Preferences::GetInstanceForService() - } - - if (!XRE_IsParentProcess()) { -- MOZ_ASSERT(gEarlyDomPrefs); -- for (unsigned int i = 0; i < gEarlyDomPrefs->Length(); i++) { -- Preferences::SetPreference(gEarlyDomPrefs->ElementAt(i)); -+ MOZ_ASSERT(gChangedDomPrefs); -+ for (unsigned int i = 0; i < gChangedDomPrefs->Length(); i++) { -+ Preferences::SetPreference(gChangedDomPrefs->ElementAt(i)); - } -- delete gEarlyDomPrefs; -- gEarlyDomPrefs = nullptr; -+ delete gChangedDomPrefs; -+ gChangedDomPrefs = nullptr; - - } else { - // Check if there is a deployment configuration file. If so, set up the -@@ -3179,149 +3364,44 @@ NS_IMPL_ISUPPORTS(Preferences, - nsISupportsWeakReference) - - /* static */ void --Preferences::SerializeEarlyPreferences(nsCString& aStr) -+Preferences::SerializePreferences(nsCString& aStr) - { - MOZ_RELEASE_ASSERT(InitStaticMembers()); - -- nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs; -- size_t numEarlyPrefs; -- dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs); -- -- for (unsigned int i = 0; i < numEarlyPrefs; i++) { -- const char* prefName = dom::ContentPrefs::GetEarlyPref(i); -- MOZ_ASSERT_IF(i > 0, -- strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0); -- -- Pref* pref = pref_HashTableLookup(prefName); -- if (!pref || !pref->MustSendToContentProcesses()) { -- continue; -- } -+ aStr.Truncate(); - -- switch (pref->Type()) { -- case PrefType::Bool: -- boolPrefs.Append( -- nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName))); -- break; -- case PrefType::Int: -- intPrefs.Append( -- nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName))); -- break; -- case PrefType::String: { -- nsAutoCString value; -- Preferences::GetCString(prefName, value); -- stringPrefs.Append( -- nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get())); -- } break; -- case PrefType::None: -- break; -- default: -- printf_stderr("preference type: %d\n", int(pref->Type())); -- MOZ_CRASH(); -+ for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { -+ Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref; -+ if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) { -+ pref->SerializeAndAppend(aStr); - } - } - -- aStr.Truncate(); -- aStr.Append(boolPrefs); -- aStr.Append('\n'); -- aStr.Append(intPrefs); -- aStr.Append('\n'); -- aStr.Append(stringPrefs); -- aStr.Append('\n'); - aStr.Append('\0'); - } - - /* static */ void --Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen) -+Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen) - { - MOZ_ASSERT(!XRE_IsParentProcess()); - -- MOZ_ASSERT(!gEarlyDomPrefs); -- gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(); -+ MOZ_ASSERT(!gChangedDomPrefs); -+ gChangedDomPrefs = new InfallibleTArray<dom::Pref>(); - - char* p = aStr; -- -- // XXX: we assume these pref values are default values, which may not be -- // true. We also assume they are unlocked. Fortunately, these prefs get reset -- // properly by the first IPC message. -- -- // Get the bool prefs. -- while (*p != '\n') { -- int32_t index = strtol(p, &p, 10); -- MOZ_ASSERT(p[0] == ':'); -- p++; -- int v = strtol(p, &p, 10); -- MOZ_ASSERT(v == 0 || v == 1); -- dom::MaybePrefValue value(dom::PrefValue(!!v)); -- MOZ_ASSERT(p[0] == '|'); -- p++; -- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, -- value, -- dom::MaybePrefValue()); -- gEarlyDomPrefs->AppendElement(pref); -- } -- p++; -- -- // Get the int prefs. -- while (*p != '\n') { -- int32_t index = strtol(p, &p, 10); -- MOZ_ASSERT(p[0] == ':'); -- p++; -- dom::MaybePrefValue value( -- dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10)))); -- MOZ_ASSERT(p[0] == '|'); -- p++; -- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, -- value, -- dom::MaybePrefValue()); -- gEarlyDomPrefs->AppendElement(pref); -- } -- p++; -- -- // Get the string prefs. -- while (*p != '\n') { -- int32_t index = strtol(p, &p, 10); -- MOZ_ASSERT(p[0] == ':'); -- p++; -- int32_t length = strtol(p, &p, 10); -- MOZ_ASSERT(p[0] == ';'); -- p++; -- dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length))); -- dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)), -- /* isLocked */ false, -- value, -- dom::MaybePrefValue()); -- gEarlyDomPrefs->AppendElement(pref); -- p += length + 1; -- MOZ_ASSERT(*(p - 1) == '|'); -- } -- p++; -- -- MOZ_ASSERT(*p == '\0'); -+ while (*p != '\0') { -+ dom::Pref pref; -+ p = Pref::Deserialize(p, &pref); -+ gChangedDomPrefs->AppendElement(pref); -+ } - - // We finished parsing on a '\0'. That should be the last char in the shared -- // memory. -- MOZ_ASSERT(aStr + aStrLen - 1 == p); -- --#ifdef DEBUG -- MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet); -- gPhase = ContentProcessPhase::eEarlyPrefsSet; --#endif --} -- --/* static */ void --Preferences::SetLatePreferences(const nsTArray<dom::Pref>* aDomPrefs) --{ -- MOZ_ASSERT(!XRE_IsParentProcess()); -- -- for (unsigned int i = 0; i < aDomPrefs->Length(); i++) { -- Preferences::SetPreference(aDomPrefs->ElementAt(i)); -- } -+ // memory. (aPrefsLen includes the '\0'.) -+ MOZ_ASSERT(p == aStr + aPrefsLen - 1); - - #ifdef DEBUG -- MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet); -- gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet; -+ MOZ_ASSERT(!gContentProcessPrefsAreInited); -+ gContentProcessPrefsAreInited = true; - #endif - } - -@@ -3558,36 +3638,12 @@ Preferences::GetPreference(dom::Pref* aDomPref) - } - } - --void --Preferences::GetPreferences(InfallibleTArray<dom::Pref>* aDomPrefs) --{ -- MOZ_ASSERT(XRE_IsParentProcess()); -- MOZ_ASSERT(NS_IsMainThread()); -- -- aDomPrefs->SetCapacity(gHashTable->EntryCount()); -- for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) { -- Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref; -- -- if (!pref->MustSendToContentProcesses()) { -- // The pref value hasn't changed since it was initialized at startup. -- // Don't bother sending it, because the content process will initialize -- // it the same way. -- continue; -- } -- -- if (pref->HasAdvisablySizedValues()) { -- dom::Pref* setting = aDomPrefs->AppendElement(); -- pref->ToDomPref(setting); -- } -- } --} -- - #ifdef DEBUG - bool --Preferences::AreAllPrefsSetInContentProcess() -+Preferences::ArePrefsInitedInContentProcess() - { - MOZ_ASSERT(!XRE_IsParentProcess()); -- return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet; -+ return gContentProcessPrefsAreInited; - } - #endif - -diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h -index 0d976483daae..901425b5b663 100644 ---- modules/libpref/Preferences.h -+++ modules/libpref/Preferences.h -@@ -328,15 +328,10 @@ public: - const char* aPref, - float aDefault = 0.0f); - -- // When a content process is created these methods are used to pass prefs in -- // bulk from the parent process. "Early" preferences are ones that are needed -- // very early on in the content process's lifetime; they are passed via a -- // special shared memory segment. "Late" preferences are the remainder, which -- // are passed via a standard IPC message. -- static void SerializeEarlyPreferences(nsCString& aStr); -- static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen); -- static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings); -- static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings); -+ // When a content process is created these methods are used to pass changed -+ // prefs in bulk from the parent process, via shared memory. -+ static void SerializePreferences(nsCString& aStr); -+ static void DeserializePreferences(char* aStr, size_t aPrefsLen); - - // When a single pref is changed in the parent process, these methods are - // used to pass the update to content processes. -@@ -344,7 +339,7 @@ public: - static void SetPreference(const dom::Pref& aPref); - - #ifdef DEBUG -- static bool AreAllPrefsSetInContentProcess(); -+ static bool ArePrefsInitedInContentProcess(); - #endif - - static void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf, diff --git a/www/firefox/files/patch-z-bug517422 b/www/firefox/files/patch-z-bug517422 index 9b041089be3f..a58e6a1afaaf 100644 --- a/www/firefox/files/patch-z-bug517422 +++ b/www/firefox/files/patch-z-bug517422 @@ -132,10 +132,10 @@ diff --git dom/media/AudioStream.h dom/media/AudioStream.h index 7dc1f60f95cc..67d402a4117f 100644 --- dom/media/AudioStream.h +++ dom/media/AudioStream.h -@@ -15,7 +15,11 @@ - #include "mozilla/TimeStamp.h" - #include "mozilla/UniquePtr.h" - #include "CubebUtils.h" +@@ -16,7 +16,11 @@ + #include "nsAutoPtr.h" + #include "nsCOMPtr.h" + #include "nsThreadUtils.h" +#ifdef MOZ_SYSTEM_SOUNDTOUCH +#include "soundtouch/SoundTouch.h" +#else |