View | Details | Raw Unified | Return to bug 226476 | Differences between
and this patch

Collapse All | Expand All

(-)b/Mk/Uses/gecko.mk (-2 / +2 lines)
Lines 37-48 RUN_DEPENDS+= libxul>=45:www/libxul Link Here
37
.elif ${gecko_ARGS:Mfirefox}
37
.elif ${gecko_ARGS:Mfirefox}
38
38
39
_GECKO_DEFAULT_VERSION=	52
39
_GECKO_DEFAULT_VERSION=	52
40
_GECKO_VERSIONS=		52 59
40
_GECKO_VERSIONS=		52 60
41
_GECKO_TYPE=	firefox
41
_GECKO_TYPE=	firefox
42
42
43
# Dependence lines for different Firefox versions
43
# Dependence lines for different Firefox versions
44
52_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox-esr
44
52_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox-esr
45
59_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox
45
60_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox
46
46
47
.if exists(${LOCALBASE}/bin/firefox)
47
.if exists(${LOCALBASE}/bin/firefox)
48
_GECKO_INSTALLED_VER!=	${LOCALBASE}/bin/firefox --version 2>/dev/null
48
_GECKO_INSTALLED_VER!=	${LOCALBASE}/bin/firefox --version 2>/dev/null
(-)b/Mk/bsd.gecko.mk (-1 / +1 lines)
Lines 379-385 post-patch-SNDIO-on: Link Here
379
.endif
379
.endif
380
380
381
.if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54
381
.if ${PORT_OPTIONS:MRUST} || ${MOZILLA_VER:R:R} >= 54
382
BUILD_DEPENDS+=	${RUST_PORT:T}>=1.22.1:${RUST_PORT}
382
BUILD_DEPENDS+=	${RUST_PORT:T}>=1.24:${RUST_PORT}
383
RUST_PORT?=		lang/rust
383
RUST_PORT?=		lang/rust
384
. if ${MOZILLA_VER:R:R} < 54
384
. if ${MOZILLA_VER:R:R} < 54
385
MOZ_OPTIONS+=	--enable-rust
385
MOZ_OPTIONS+=	--enable-rust
(-)b/www/firefox-i18n/Makefile (-2 / +2 lines)
Lines 2-8 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	firefox-i18n
4
PORTNAME=	firefox-i18n
5
PORTVERSION=	59.0.2
5
PORTVERSION=	60.0b6
6
CATEGORIES=	www
6
CATEGORIES=	www
7
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
7
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
8
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi
8
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi
Lines 15-21 COMMENT= Localized interface for Firefox Link Here
15
15
16
EXTRACT_DEPENDS=	zip:archivers/zip
16
EXTRACT_DEPENDS=	zip:archivers/zip
17
17
18
USES=		zip:infozip gecko:firefox,59,build
18
USES=		zip:infozip gecko:firefox,60,build
19
USE_XPI=	firefox
19
USE_XPI=	firefox
20
20
21
NO_ARCH=	yes
21
NO_ARCH=	yes
(-)b/www/firefox-i18n/Makefile.lang (-1 / +4 lines)
Lines 6-12 FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cak \ Link Here
6
			es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn	\
6
			es-ES es-MX et eu fa ff fi fr fy-NL ga-IE gd gl gn	\
7
			gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja ka kab	\
7
			gu-IN he hi-IN hr hsb hu hy-AM ia id is it ja ka kab	\
8
			kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl	\
8
			kk km kn ko lij lt lv mai mk ml mr ms my nb-NO ne-NP nl	\
9
			nn-NO or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son	\
9
			nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son	\
10
			sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW
10
			sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW
11
11
12
.if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package)
12
.if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package)
Lines 225-230 FIREFOX_I18N+= nl Link Here
225
.if ${PORT_OPTIONS:MLANG_NN}
225
.if ${PORT_OPTIONS:MLANG_NN}
226
FIREFOX_I18N+=  nn-NO
226
FIREFOX_I18N+=  nn-NO
227
.endif
227
.endif
228
.if ${PORT_OPTIONS:MLANG_OC}
229
FIREFOX_I18N+=  oc
230
.endif
228
.if ${PORT_OPTIONS:MLANG_OR}
231
.if ${PORT_OPTIONS:MLANG_OR}
229
FIREFOX_I18N+=  or
232
FIREFOX_I18N+=  or
230
.endif
233
.endif
(-)b/www/firefox-i18n/Makefile.option (+2 lines)
Lines 73-78 OPTIONS_DEFINE= LANG_ACH \ Link Here
73
		LANG_NE \
73
		LANG_NE \
74
		LANG_NL \
74
		LANG_NL \
75
		LANG_NN \
75
		LANG_NN \
76
		LANG_OC \
76
		LANG_OR \
77
		LANG_OR \
77
		LANG_PA \
78
		LANG_PA \
78
		LANG_PL \
79
		LANG_PL \
Lines 122-127 LANG_LIJ_DESC?= Ligurian (Genoa) language support Link Here
122
LANG_MS_DESC?=	Malay language support
123
LANG_MS_DESC?=	Malay language support
123
LANG_MY_DESC?=	Burmese language support
124
LANG_MY_DESC?=	Burmese language support
124
LANG_NE_DESC?=	Nepali language support
125
LANG_NE_DESC?=	Nepali language support
126
LANG_OC_DESC?=	Occitan (lengadocian) language support
125
LANG_SW_DESC?=	Swahili language support
127
LANG_SW_DESC?=	Swahili language support
126
LANG_UR_DESC?=	Urdu (Pakistan) language support
128
LANG_UR_DESC?=	Urdu (Pakistan) language support
127
LANG_UZ_DESC?=	Uzbek language support
129
LANG_UZ_DESC?=	Uzbek language support
(-)b/www/firefox-i18n/distinfo (-195 / +197 lines)
Lines 1-195 Link Here
1
TIMESTAMP = 1521751601
1
TIMESTAMP = 1521738065
2
SHA256 (xpi/firefox-i18n-59.0.2/ach.xpi) = d4fd5f94e6463049826f854f66589984854042c997f977049d4f8a990698eb53
2
SHA256 (xpi/firefox-i18n-60.0b6/ach.xpi) = 814c08c9dfa9bdba6ab2dbb71d3f3bdc0818540166bf5f03db29c5b651c480e5
3
SIZE (xpi/firefox-i18n-59.0.2/ach.xpi) = 439227
3
SIZE (xpi/firefox-i18n-60.0b6/ach.xpi) = 448300
4
SHA256 (xpi/firefox-i18n-59.0.2/af.xpi) = faca2b8efbef96c1f8362ba5b7f0b39ed76fce2e77028abfc9c1ecad4fc95ac6
4
SHA256 (xpi/firefox-i18n-60.0b6/af.xpi) = 3f51f29e917a0022b388fdb858906ffab6254eebc713f4b4d44ae89582cdc3e9
5
SIZE (xpi/firefox-i18n-59.0.2/af.xpi) = 436731
5
SIZE (xpi/firefox-i18n-60.0b6/af.xpi) = 445175
6
SHA256 (xpi/firefox-i18n-59.0.2/an.xpi) = e39ea62741370620936c43c84adc34eb63618108633b2840909ec9365588d76b
6
SHA256 (xpi/firefox-i18n-60.0b6/an.xpi) = 2bda7ee2509cb3059afa05d76f1be7735a0b600e95a0da27ce95e7a01080551f
7
SIZE (xpi/firefox-i18n-59.0.2/an.xpi) = 463405
7
SIZE (xpi/firefox-i18n-60.0b6/an.xpi) = 471901
8
SHA256 (xpi/firefox-i18n-59.0.2/ar.xpi) = 732cf91f7e5f8c21798ccf5ed7647afd7a3d64147393da23d6d5df97409685d3
8
SHA256 (xpi/firefox-i18n-60.0b6/ar.xpi) = 3ee2d6b9f6d6741e9a4cc7baa06d250541a450aa815ea1c8734cd1565bf99621
9
SIZE (xpi/firefox-i18n-59.0.2/ar.xpi) = 486633
9
SIZE (xpi/firefox-i18n-60.0b6/ar.xpi) = 496797
10
SHA256 (xpi/firefox-i18n-59.0.2/as.xpi) = a862f49f7045e8a10411007486401f134c38e3a0fce9f6f3331bf18783f1541c
10
SHA256 (xpi/firefox-i18n-60.0b6/as.xpi) = ca40ac084b4682e72999cf7321e5066cb85e49dd2fb0a95e38a92c05fd73f541
11
SIZE (xpi/firefox-i18n-59.0.2/as.xpi) = 483301
11
SIZE (xpi/firefox-i18n-60.0b6/as.xpi) = 488783
12
SHA256 (xpi/firefox-i18n-59.0.2/ast.xpi) = 43cb3a6e8aea1f876722508a6ed1c456fd313c129a93b0d49827d37752b320be
12
SHA256 (xpi/firefox-i18n-60.0b6/ast.xpi) = f2301e481335dffb6e4d2d9ab9b8b1169328aebf09d8dafceb9f56db713f3759
13
SIZE (xpi/firefox-i18n-59.0.2/ast.xpi) = 454343
13
SIZE (xpi/firefox-i18n-60.0b6/ast.xpi) = 463373
14
SHA256 (xpi/firefox-i18n-59.0.2/az.xpi) = 7f09f746bb2afcb8d82c76e3919607b7fc2f8a6c7ac65221134d2b713f610493
14
SHA256 (xpi/firefox-i18n-60.0b6/az.xpi) = a3e7d996b0ac1d36663af3922531b1a475ccbee7b395df146e130e1a9e1899fe
15
SIZE (xpi/firefox-i18n-59.0.2/az.xpi) = 464270
15
SIZE (xpi/firefox-i18n-60.0b6/az.xpi) = 474985
16
SHA256 (xpi/firefox-i18n-59.0.2/be.xpi) = 0c9d0500a9f85997334283a015528b2a2a3c86dbd604571206a5522d01811802
16
SHA256 (xpi/firefox-i18n-60.0b6/be.xpi) = 327075d5c3943e83bbf26e8908fdf6ff8ae833122638cf407b8a5874bf52510b
17
SIZE (xpi/firefox-i18n-59.0.2/be.xpi) = 517059
17
SIZE (xpi/firefox-i18n-60.0b6/be.xpi) = 527106
18
SHA256 (xpi/firefox-i18n-59.0.2/bg.xpi) = 6ce855064e22750088cd09d61fd3d77cd3a2cd2b286e8603df9d02386dd4985d
18
SHA256 (xpi/firefox-i18n-60.0b6/bg.xpi) = 0d02fb9d2f665650410c322b52c8c9615c6ff08cc96773bbd4c878f962ecc80b
19
SIZE (xpi/firefox-i18n-59.0.2/bg.xpi) = 508613
19
SIZE (xpi/firefox-i18n-60.0b6/bg.xpi) = 520171
20
SHA256 (xpi/firefox-i18n-59.0.2/bn-BD.xpi) = 860f9e8d7a7c7e8c35acde03a35f9f94182bd4172e0cfebc43d09a5057f54265
20
SHA256 (xpi/firefox-i18n-60.0b6/bn-BD.xpi) = 591739629eac163789296acc7bb59dfec50b2cc6f0933537c07ff2860d5e4320
21
SIZE (xpi/firefox-i18n-59.0.2/bn-BD.xpi) = 526352
21
SIZE (xpi/firefox-i18n-60.0b6/bn-BD.xpi) = 535950
22
SHA256 (xpi/firefox-i18n-59.0.2/bn-IN.xpi) = 11cc8e9eeabb0171125939ff050fe736581df2957fa96fc54ba0f5c5c6f91e12
22
SHA256 (xpi/firefox-i18n-60.0b6/bn-IN.xpi) = 672283b596c78553da3af298df4c42ffc864b07de22bb75327d012d2a848d52d
23
SIZE (xpi/firefox-i18n-59.0.2/bn-IN.xpi) = 510797
23
SIZE (xpi/firefox-i18n-60.0b6/bn-IN.xpi) = 521697
24
SHA256 (xpi/firefox-i18n-59.0.2/br.xpi) = 0d5068e3ac9293da71a2bfc3566e6cbe52273741cc9e82d5514b7334a6ed0e4c
24
SHA256 (xpi/firefox-i18n-60.0b6/br.xpi) = e0c5642b3409e177ab2b6e4a54471e63a0c365bc4946de5f5698520819ba4d49
25
SIZE (xpi/firefox-i18n-59.0.2/br.xpi) = 451719
25
SIZE (xpi/firefox-i18n-60.0b6/br.xpi) = 461844
26
SHA256 (xpi/firefox-i18n-59.0.2/bs.xpi) = 291a4f8e85977a8eb93ab52ae7caa857caf7998f1c561baa534ab8a3958411c6
26
SHA256 (xpi/firefox-i18n-60.0b6/bs.xpi) = 7f0a12721072de6e7bb3128f6fc5bf28956cdd564051e8796c540670e631de86
27
SIZE (xpi/firefox-i18n-59.0.2/bs.xpi) = 457859
27
SIZE (xpi/firefox-i18n-60.0b6/bs.xpi) = 467834
28
SHA256 (xpi/firefox-i18n-59.0.2/ca.xpi) = 5cbec24877869340fd52eab4af21acdb0e30a298ad9e9d97b899a5a0223be1c4
28
SHA256 (xpi/firefox-i18n-60.0b6/ca.xpi) = 8b8ccc04f5bec7f81d03129a7cb0818b0fb1c3262a3dc78b24513de016be6e8c
29
SIZE (xpi/firefox-i18n-59.0.2/ca.xpi) = 464912
29
SIZE (xpi/firefox-i18n-60.0b6/ca.xpi) = 475157
30
SHA256 (xpi/firefox-i18n-59.0.2/cak.xpi) = 935960adb4cd204153f1790397ce3b8793151a6d9b1f5bf38630b7a274b36bfe
30
SHA256 (xpi/firefox-i18n-60.0b6/cak.xpi) = 9ec12ceeb9542154106edea9dde597f5f56666785a56054f329c6efd093aecb7
31
SIZE (xpi/firefox-i18n-59.0.2/cak.xpi) = 475234
31
SIZE (xpi/firefox-i18n-60.0b6/cak.xpi) = 484396
32
SHA256 (xpi/firefox-i18n-59.0.2/cs.xpi) = 266664866deaff544d47ffb90ada91c0d270fb563a1ef67baad86c175d88b606
32
SHA256 (xpi/firefox-i18n-60.0b6/cs.xpi) = fbdcbe85b92d9a7ba83bb40da4d23a04b8fe691aec616d479e7597ab2c5372a6
33
SIZE (xpi/firefox-i18n-59.0.2/cs.xpi) = 471575
33
SIZE (xpi/firefox-i18n-60.0b6/cs.xpi) = 480010
34
SHA256 (xpi/firefox-i18n-59.0.2/cy.xpi) = 73ed7ec234a6e197688ec0fd7809d3bf24d6f6f6f8aad9e47bb10bc600d8918b
34
SHA256 (xpi/firefox-i18n-60.0b6/cy.xpi) = e69329ee9f1a60df538dd1c6bf4fd940522d3f1f6fe4c07ab9c677404df28b8c
35
SIZE (xpi/firefox-i18n-59.0.2/cy.xpi) = 454433
35
SIZE (xpi/firefox-i18n-60.0b6/cy.xpi) = 464804
36
SHA256 (xpi/firefox-i18n-59.0.2/da.xpi) = db17d7492e07c2c825572353a1407242180e0b53d399b48579d5f1e53ec8d11e
36
SHA256 (xpi/firefox-i18n-60.0b6/da.xpi) = aa5aa6d29cee3a0f4c84b8fa3309c63e5f7970064032e3d11f3b1bf4b0678a5d
37
SIZE (xpi/firefox-i18n-59.0.2/da.xpi) = 446948
37
SIZE (xpi/firefox-i18n-60.0b6/da.xpi) = 457557
38
SHA256 (xpi/firefox-i18n-59.0.2/de.xpi) = 4e02cf24936162334435ecf99a9b1abefeebda06b34a75e527c6328502c1fcff
38
SHA256 (xpi/firefox-i18n-60.0b6/de.xpi) = 5fa52f66eb7903db8891ad7d973fd2d39b6e72c2d17b3d6699260a0b15ab1113
39
SIZE (xpi/firefox-i18n-59.0.2/de.xpi) = 466272
39
SIZE (xpi/firefox-i18n-60.0b6/de.xpi) = 477438
40
SHA256 (xpi/firefox-i18n-59.0.2/dsb.xpi) = 91ef3e6bac7be38155e5f957756f21761bf548a2216e2588721bf59a10792f14
40
SHA256 (xpi/firefox-i18n-60.0b6/dsb.xpi) = 9c7a80a7025791fdd3f4f725a8101a6395c322c8402ed97c6d221f65a9631ea8
41
SIZE (xpi/firefox-i18n-59.0.2/dsb.xpi) = 478974
41
SIZE (xpi/firefox-i18n-60.0b6/dsb.xpi) = 487579
42
SHA256 (xpi/firefox-i18n-59.0.2/el.xpi) = c3457ea19f44ebbd2bcf34403c19d483edee46bdf2fa2de3ad78bb7ee2510f62
42
SHA256 (xpi/firefox-i18n-60.0b6/el.xpi) = 90c7f449c3abe872d64b6bbc7a8eab3e8674bb3037d8a2bab2a636b07eb479eb
43
SIZE (xpi/firefox-i18n-59.0.2/el.xpi) = 531408
43
SIZE (xpi/firefox-i18n-60.0b6/el.xpi) = 543007
44
SHA256 (xpi/firefox-i18n-59.0.2/en-GB.xpi) = 4920efb507cfee37e39b705b5bda6b1716eb491274f9df5be505e2a65c4d8fd7
44
SHA256 (xpi/firefox-i18n-60.0b6/en-GB.xpi) = 211db64418945a8a875b3af2fe4051dfeb1b6acb850eeddba302514a0e02a0d8
45
SIZE (xpi/firefox-i18n-59.0.2/en-GB.xpi) = 434300
45
SIZE (xpi/firefox-i18n-60.0b6/en-GB.xpi) = 444265
46
SHA256 (xpi/firefox-i18n-59.0.2/en-US.xpi) = c2b1533bb3c2b75c60662225017795905a2f3f28989d6098bdd7b6757ae3bff7
46
SHA256 (xpi/firefox-i18n-60.0b6/en-US.xpi) = 78d1f982690b34b8c734375c0cdf8030a95b38143e572446a1353bda4c071261
47
SIZE (xpi/firefox-i18n-59.0.2/en-US.xpi) = 432749
47
SIZE (xpi/firefox-i18n-60.0b6/en-US.xpi) = 439292
48
SHA256 (xpi/firefox-i18n-59.0.2/en-ZA.xpi) = d3655db524f7eaee1f6c735efe1697bc183776adb85edaaa4b93bfdaf8861924
48
SHA256 (xpi/firefox-i18n-60.0b6/en-ZA.xpi) = 2fc788ffa7b25b1d2853ad891cc0907a8473dab35a62e3e234b1f68ca4c02f5c
49
SIZE (xpi/firefox-i18n-59.0.2/en-ZA.xpi) = 427365
49
SIZE (xpi/firefox-i18n-60.0b6/en-ZA.xpi) = 433970
50
SHA256 (xpi/firefox-i18n-59.0.2/eo.xpi) = ca5d2cfd209a5c90521fe4fb014c1d3835b4bf11fd74f9e3c30ec57ada7e4655
50
SHA256 (xpi/firefox-i18n-60.0b6/eo.xpi) = 207d03598be1320395978d041698f8421a98a8beb176f5fd353036d649ce1688
51
SIZE (xpi/firefox-i18n-59.0.2/eo.xpi) = 453366
51
SIZE (xpi/firefox-i18n-60.0b6/eo.xpi) = 462277
52
SHA256 (xpi/firefox-i18n-59.0.2/es-AR.xpi) = 9322e35d7dac234c334a9b65347344b4ec47df1bd415d0c715ff310edcae3aea
52
SHA256 (xpi/firefox-i18n-60.0b6/es-AR.xpi) = 97a716d899d23e782a76694dce5ace88a8d369b90b794ee4ba4c3902f4deb9c0
53
SIZE (xpi/firefox-i18n-59.0.2/es-AR.xpi) = 461797
53
SIZE (xpi/firefox-i18n-60.0b6/es-AR.xpi) = 472936
54
SHA256 (xpi/firefox-i18n-59.0.2/es-CL.xpi) = 28b312de9234e3654ef5105777d195c6dcbd58107978407b4ff69ebabc75d4bc
54
SHA256 (xpi/firefox-i18n-60.0b6/es-CL.xpi) = 3d991c7463bcb7bdf433765cccaefdfd8788d8bb85f6e5dfa30a7a24435ce20d
55
SIZE (xpi/firefox-i18n-59.0.2/es-CL.xpi) = 464654
55
SIZE (xpi/firefox-i18n-60.0b6/es-CL.xpi) = 475788
56
SHA256 (xpi/firefox-i18n-59.0.2/es-ES.xpi) = 3bf4c6c0de74e5eb1202f5dd6cea420b38b1210289f4d8ed78d54095e9241846
56
SHA256 (xpi/firefox-i18n-60.0b6/es-ES.xpi) = 2eb4357a6202ad22d735592e0f7232630d7fb6c40bedeb9c824982d217d14ae9
57
SIZE (xpi/firefox-i18n-59.0.2/es-ES.xpi) = 348463
57
SIZE (xpi/firefox-i18n-60.0b6/es-ES.xpi) = 399400
58
SHA256 (xpi/firefox-i18n-59.0.2/es-MX.xpi) = 065e7bb9c94c38eb7d18f674a51076c6356e9c201ab647bc8a9f88d6bc24b934
58
SHA256 (xpi/firefox-i18n-60.0b6/es-MX.xpi) = 19645d85b9cb9a732713992935a1b48e22f48a6c170fcafa88d06c9cfdf7a96a
59
SIZE (xpi/firefox-i18n-59.0.2/es-MX.xpi) = 466313
59
SIZE (xpi/firefox-i18n-60.0b6/es-MX.xpi) = 477122
60
SHA256 (xpi/firefox-i18n-59.0.2/et.xpi) = f19a1382ee7616d9c0bad256ec10b7dab3c4b5c2395f6cb306f242eb8ce99eb5
60
SHA256 (xpi/firefox-i18n-60.0b6/et.xpi) = 335b3dec937946fe019da00337419286d0e73c0cdbc3e77a34b4c29d28134578
61
SIZE (xpi/firefox-i18n-59.0.2/et.xpi) = 445394
61
SIZE (xpi/firefox-i18n-60.0b6/et.xpi) = 457717
62
SHA256 (xpi/firefox-i18n-59.0.2/eu.xpi) = b28fd08c3a6f923e4cd469ecf8ba58e6a323a754733f13144716e31ef86d002e
62
SHA256 (xpi/firefox-i18n-60.0b6/eu.xpi) = c586affeb343869886b1403173cadc8b313b5a01b1983188c9580206ad3df7a7
63
SIZE (xpi/firefox-i18n-59.0.2/eu.xpi) = 455236
63
SIZE (xpi/firefox-i18n-60.0b6/eu.xpi) = 463848
64
SHA256 (xpi/firefox-i18n-59.0.2/fa.xpi) = 0cecfc780e5d5fd00e9bdba9b4b23b1c5da34b520636417cd7636a679bbc50f4
64
SHA256 (xpi/firefox-i18n-60.0b6/fa.xpi) = ca138dc0b356ce405906150ef630959851533b93df639fe0166c05e083b6c5c4
65
SIZE (xpi/firefox-i18n-59.0.2/fa.xpi) = 508098
65
SIZE (xpi/firefox-i18n-60.0b6/fa.xpi) = 519006
66
SHA256 (xpi/firefox-i18n-59.0.2/ff.xpi) = 74ae886495cc10e62cf64eb6d0a90111e79a90f95fe365402b19c1c0d0dc8a7a
66
SHA256 (xpi/firefox-i18n-60.0b6/ff.xpi) = b53069d10a14411d1bf79eefe49b571ae4edb1f72d0cb955f6a47c7751c6947c
67
SIZE (xpi/firefox-i18n-59.0.2/ff.xpi) = 455027
67
SIZE (xpi/firefox-i18n-60.0b6/ff.xpi) = 464908
68
SHA256 (xpi/firefox-i18n-59.0.2/fi.xpi) = a3a0291633b412eedd3e93e1e6726b74d181203a4c057a8a31db0981f2abd449
68
SHA256 (xpi/firefox-i18n-60.0b6/fi.xpi) = eed9d84b610e7f595e01f7135fb53290f84023a2b99bd438f0d74df9b4eccc43
69
SIZE (xpi/firefox-i18n-59.0.2/fi.xpi) = 445182
69
SIZE (xpi/firefox-i18n-60.0b6/fi.xpi) = 456005
70
SHA256 (xpi/firefox-i18n-59.0.2/fr.xpi) = 17bfbbe27944608489b08a3abfa414cce964eecd03b9c341f29d5f125062298d
70
SHA256 (xpi/firefox-i18n-60.0b6/fr.xpi) = dedb5276a74915dc4ff84b9dd18be29b1eca2c5f7212f69e2221e8b34d6574f3
71
SIZE (xpi/firefox-i18n-59.0.2/fr.xpi) = 473593
71
SIZE (xpi/firefox-i18n-60.0b6/fr.xpi) = 484347
72
SHA256 (xpi/firefox-i18n-59.0.2/fy-NL.xpi) = 61cdf4a594632ad0ae2f4cc224b61c3822b81784f6145f9632461f4f596f4b34
72
SHA256 (xpi/firefox-i18n-60.0b6/fy-NL.xpi) = 8f3c06c57a33cd9c1e8968e883176b44bea9657e3191b951549eb82d0627dad8
73
SIZE (xpi/firefox-i18n-59.0.2/fy-NL.xpi) = 462918
73
SIZE (xpi/firefox-i18n-60.0b6/fy-NL.xpi) = 472876
74
SHA256 (xpi/firefox-i18n-59.0.2/ga-IE.xpi) = cbfcfb995c91ca794714a881cd12701d01ae3830ff518477c4b1235380052de1
74
SHA256 (xpi/firefox-i18n-60.0b6/ga-IE.xpi) = eb20bf5771251add484103ad2d2c969a03c02f5a72c456aa71bd47ce46c42b6b
75
SIZE (xpi/firefox-i18n-59.0.2/ga-IE.xpi) = 471909
75
SIZE (xpi/firefox-i18n-60.0b6/ga-IE.xpi) = 481978
76
SHA256 (xpi/firefox-i18n-59.0.2/gd.xpi) = 65f578cf7a0c58592d75b7f85c2a3b1c847810ffc623ae3bdc6f8517d8e33c41
76
SHA256 (xpi/firefox-i18n-60.0b6/gd.xpi) = fa93cab2471ac694460239c3dab7eac5d866bbf92323f00088b16c6f6ebdadd2
77
SIZE (xpi/firefox-i18n-59.0.2/gd.xpi) = 461297
77
SIZE (xpi/firefox-i18n-60.0b6/gd.xpi) = 473035
78
SHA256 (xpi/firefox-i18n-59.0.2/gl.xpi) = 9a3e6621a25ba77291bc3e78f539680eb679929d810d8ff51cbb4db21f4622bb
78
SHA256 (xpi/firefox-i18n-60.0b6/gl.xpi) = 617d2d7c6ddcb1eafa97341973c6765255c8e9908585784b6ee1ee928a85e652
79
SIZE (xpi/firefox-i18n-59.0.2/gl.xpi) = 441615
79
SIZE (xpi/firefox-i18n-60.0b6/gl.xpi) = 451644
80
SHA256 (xpi/firefox-i18n-59.0.2/gn.xpi) = 3f44a6af5e7d75e283514e0a73f1a30a2e35865086bcfb4f47a76cc957f8265d
80
SHA256 (xpi/firefox-i18n-60.0b6/gn.xpi) = 6d5d6d4cdabdb2d5b1fa95f8f718f6d6ceb02e35eec4f9a90e72fb6ae738079b
81
SIZE (xpi/firefox-i18n-59.0.2/gn.xpi) = 469397
81
SIZE (xpi/firefox-i18n-60.0b6/gn.xpi) = 481113
82
SHA256 (xpi/firefox-i18n-59.0.2/gu-IN.xpi) = 105229e5f047d917f277c13d72ee50e981c92cecd8a342608c15245b28d4d303
82
SHA256 (xpi/firefox-i18n-60.0b6/gu-IN.xpi) = a32912e248e9149d522de23a5b1044d0a25eb67d7724d809b27d58ff88754a15
83
SIZE (xpi/firefox-i18n-59.0.2/gu-IN.xpi) = 521804
83
SIZE (xpi/firefox-i18n-60.0b6/gu-IN.xpi) = 532814
84
SHA256 (xpi/firefox-i18n-59.0.2/he.xpi) = a1a5744ce47eaa193278f697a5bf267cccd01777d8e4d7c7433bd7bfe1ddd132
84
SHA256 (xpi/firefox-i18n-60.0b6/he.xpi) = 873f68f9dfbb3c1413c7af5056fc0b6777f3152f01f73fd2d00b1c8da83eb374
85
SIZE (xpi/firefox-i18n-59.0.2/he.xpi) = 472771
85
SIZE (xpi/firefox-i18n-60.0b6/he.xpi) = 483170
86
SHA256 (xpi/firefox-i18n-59.0.2/hi-IN.xpi) = b51b0aac6319414c1a49858f180949a07c999c866c63e619818505727ebca52d
86
SHA256 (xpi/firefox-i18n-60.0b6/hi-IN.xpi) = 8dd6a2eb10734a07b8645611e08ba35ce4536eb03aec1c9bb982112b726c9014
87
SIZE (xpi/firefox-i18n-59.0.2/hi-IN.xpi) = 524279
87
SIZE (xpi/firefox-i18n-60.0b6/hi-IN.xpi) = 535083
88
SHA256 (xpi/firefox-i18n-59.0.2/hr.xpi) = bde5da8ad592142500f36757d3327129a6343dc52fb7c63b4edb1138b290ac80
88
SHA256 (xpi/firefox-i18n-60.0b6/hr.xpi) = f6f20f4a40eb9fb1760cf77813af6d7b83a3f365269bfa1032e784bb21201196
89
SIZE (xpi/firefox-i18n-59.0.2/hr.xpi) = 459978
89
SIZE (xpi/firefox-i18n-60.0b6/hr.xpi) = 470261
90
SHA256 (xpi/firefox-i18n-59.0.2/hsb.xpi) = 84354abb5b8d735061284a8357dbf80ad0ab4d49618af82074d6b8cd7990339a
90
SHA256 (xpi/firefox-i18n-60.0b6/hsb.xpi) = 0313c1e64d39d60aaff4ffed6c1ac77766fde87b8ef0a8ad0bc35a023f748f2b
91
SIZE (xpi/firefox-i18n-59.0.2/hsb.xpi) = 475940
91
SIZE (xpi/firefox-i18n-60.0b6/hsb.xpi) = 485318
92
SHA256 (xpi/firefox-i18n-59.0.2/hu.xpi) = a8c1ceb1fdd231acd78d91a67b79f4a0932842322b76a5cb6e495c8901b83823
92
SHA256 (xpi/firefox-i18n-60.0b6/hu.xpi) = ed75c746366320ba79c073cbfbe4ef4afcca7588aebe41e35cd1a19c31cdcc09
93
SIZE (xpi/firefox-i18n-59.0.2/hu.xpi) = 476896
93
SIZE (xpi/firefox-i18n-60.0b6/hu.xpi) = 486476
94
SHA256 (xpi/firefox-i18n-59.0.2/hy-AM.xpi) = afbcfa2bb1f5201a832978eb3ec66ac779107606ee21e7ed21b118887e982a70
94
SHA256 (xpi/firefox-i18n-60.0b6/hy-AM.xpi) = 030fb6026224a303388b739e77a4bb6dac80f0abbc3a0daa6f2cf83f0ac8d127
95
SIZE (xpi/firefox-i18n-59.0.2/hy-AM.xpi) = 508167
95
SIZE (xpi/firefox-i18n-60.0b6/hy-AM.xpi) = 519074
96
SHA256 (xpi/firefox-i18n-59.0.2/ia.xpi) = 8272d2de413ef02c0ae56633c1814004d4b33893853e2914c01cdd46c9427c32
96
SHA256 (xpi/firefox-i18n-60.0b6/ia.xpi) = f327427e48d14f091d5b023dc6d3178d080d0419ec47f134644e55d6477ec6ad
97
SIZE (xpi/firefox-i18n-59.0.2/ia.xpi) = 448829
97
SIZE (xpi/firefox-i18n-60.0b6/ia.xpi) = 459844
98
SHA256 (xpi/firefox-i18n-59.0.2/id.xpi) = 083e9ed9646f3dcf558e44b65ddd9fd56bdcf8fe19c35e81de20fb5132854589
98
SHA256 (xpi/firefox-i18n-60.0b6/id.xpi) = c1ccce0d02878c049386751b35470a85ce94013fa545449aa0316797bb4f7c10
99
SIZE (xpi/firefox-i18n-59.0.2/id.xpi) = 441952
99
SIZE (xpi/firefox-i18n-60.0b6/id.xpi) = 451637
100
SHA256 (xpi/firefox-i18n-59.0.2/is.xpi) = 091504efc4de1c554bde2d11e4d547deb03355384776594fb794a818c0b09dd5
100
SHA256 (xpi/firefox-i18n-60.0b6/is.xpi) = ce9311eb9e99c1dc3bd04e4229efaf000e308bb33d0c92c482033125c3822c54
101
SIZE (xpi/firefox-i18n-59.0.2/is.xpi) = 451373
101
SIZE (xpi/firefox-i18n-60.0b6/is.xpi) = 462160
102
SHA256 (xpi/firefox-i18n-59.0.2/it.xpi) = aa5807fbc05cccb0ff71504b7669908744aa61d8e6080fc8a0ccdec015d43f3e
102
SHA256 (xpi/firefox-i18n-60.0b6/it.xpi) = caa9ce5205980c79b289907e7bc82709f40646cc0ebe2943f5c57d34d3ff8a1b
103
SIZE (xpi/firefox-i18n-59.0.2/it.xpi) = 342524
103
SIZE (xpi/firefox-i18n-60.0b6/it.xpi) = 351401
104
SHA256 (xpi/firefox-i18n-59.0.2/ja.xpi) = eb713392349af7ed2383b59463554ee0b2ded2a4f8b5292de5481c056f271bc2
104
SHA256 (xpi/firefox-i18n-60.0b6/ja.xpi) = 19a60ef556061b87f9b9bcfc22ac3ff83c39844ef05ef37058004e84635ba9a4
105
SIZE (xpi/firefox-i18n-59.0.2/ja.xpi) = 508148
105
SIZE (xpi/firefox-i18n-60.0b6/ja.xpi) = 519001
106
SHA256 (xpi/firefox-i18n-59.0.2/ka.xpi) = 7cc0bfa96e5a2b5203c78a123cf293f9150bf080cb901a97991658047902bacd
106
SHA256 (xpi/firefox-i18n-60.0b6/ka.xpi) = 530bce354b75b6955774177e1810c73728ae179a604e947a4853baf566fbba14
107
SIZE (xpi/firefox-i18n-59.0.2/ka.xpi) = 492569
107
SIZE (xpi/firefox-i18n-60.0b6/ka.xpi) = 502573
108
SHA256 (xpi/firefox-i18n-59.0.2/kab.xpi) = f1ba41b49e0ff467b549d406d5554235251d75b91eca0eac193172eeb4a8c5ef
108
SHA256 (xpi/firefox-i18n-60.0b6/kab.xpi) = 6b2c814e802e302055c4a5229eb2ba72d111bd66c470edb6d261ba986a82b0c6
109
SIZE (xpi/firefox-i18n-59.0.2/kab.xpi) = 461840
109
SIZE (xpi/firefox-i18n-60.0b6/kab.xpi) = 470998
110
SHA256 (xpi/firefox-i18n-59.0.2/kk.xpi) = ecddec11fcc909fb2bc520da8b4ffe573fde85a29f25b4c4ea72e15d014ebba3
110
SHA256 (xpi/firefox-i18n-60.0b6/kk.xpi) = 6d7f13541f0a3049f11a2d14bf132148a828bc341248cb1b1daa3d6039f66930
111
SIZE (xpi/firefox-i18n-59.0.2/kk.xpi) = 517583
111
SIZE (xpi/firefox-i18n-60.0b6/kk.xpi) = 528117
112
SHA256 (xpi/firefox-i18n-59.0.2/km.xpi) = d70ef8dad857d4f7b99d508495b3f717d6a27d7b2aa96788c51af4d5e875cd7e
112
SHA256 (xpi/firefox-i18n-60.0b6/km.xpi) = 0f4db35f2dd7fba5b8e6b0be03bc9f143a4f00741798f28b78283de546d21cc3
113
SIZE (xpi/firefox-i18n-59.0.2/km.xpi) = 526359
113
SIZE (xpi/firefox-i18n-60.0b6/km.xpi) = 535575
114
SHA256 (xpi/firefox-i18n-59.0.2/kn.xpi) = 7cadd99b0d23cf4f673ef76c0a5beab1ca6a4e9f41b686ca23c752aa2570c794
114
SHA256 (xpi/firefox-i18n-60.0b6/kn.xpi) = 7921faf4aabd0d59b83e210a4578671ac425f8ab7f8949d5be345a94e66dbb29
115
SIZE (xpi/firefox-i18n-59.0.2/kn.xpi) = 527879
115
SIZE (xpi/firefox-i18n-60.0b6/kn.xpi) = 535734
116
SHA256 (xpi/firefox-i18n-59.0.2/ko.xpi) = f7e418dbb3b98023b080814c52bf2bed020b764420084158161c1cc68baab87b
116
SHA256 (xpi/firefox-i18n-60.0b6/ko.xpi) = 0ffed9c7ab71e330d023ca37143d7ec246d71fb43828ce485a49d3cf544f9744
117
SIZE (xpi/firefox-i18n-59.0.2/ko.xpi) = 487661
117
SIZE (xpi/firefox-i18n-60.0b6/ko.xpi) = 495640
118
SHA256 (xpi/firefox-i18n-59.0.2/lij.xpi) = d47c2eb90d25be6fbc4f2880659902713495c7cfdfd31cf3d23166e584061dbd
118
SHA256 (xpi/firefox-i18n-60.0b6/lij.xpi) = 1dc68ce3bf4c54e5206c81cd30357b0f022ea2de8c7014d681aea8a2a2f18ae7
119
SIZE (xpi/firefox-i18n-59.0.2/lij.xpi) = 446606
119
SIZE (xpi/firefox-i18n-60.0b6/lij.xpi) = 460394
120
SHA256 (xpi/firefox-i18n-59.0.2/lt.xpi) = e6620d3f8b4a8e479d45bf572e3897be1edc0493735fa599c86abfe8d32bdcba
120
SHA256 (xpi/firefox-i18n-60.0b6/lt.xpi) = aa75a300cec9ad93c13453637477e13b186f3dc238cae9566ea0b3700c75f837
121
SIZE (xpi/firefox-i18n-59.0.2/lt.xpi) = 475142
121
SIZE (xpi/firefox-i18n-60.0b6/lt.xpi) = 483950
122
SHA256 (xpi/firefox-i18n-59.0.2/lv.xpi) = 2a549953373041fa8e36ae40ad913cbadd7af5a08555c5c6dc60459aedae2987
122
SHA256 (xpi/firefox-i18n-60.0b6/lv.xpi) = 5ca42bfb31a424bce7ce253bc5360390cce8a8dc393e4e8cec1315aff1c09910
123
SIZE (xpi/firefox-i18n-59.0.2/lv.xpi) = 463655
123
SIZE (xpi/firefox-i18n-60.0b6/lv.xpi) = 475171
124
SHA256 (xpi/firefox-i18n-59.0.2/mai.xpi) = 6903c60c5eccd3e3ba29315aae1406b48841b9396be3927899d6bce6955546b9
124
SHA256 (xpi/firefox-i18n-60.0b6/mai.xpi) = 225e4c0fc51968118fb2cf3b685c9778b2e152a83196ea4417639298b7956561
125
SIZE (xpi/firefox-i18n-59.0.2/mai.xpi) = 499910
125
SIZE (xpi/firefox-i18n-60.0b6/mai.xpi) = 506322
126
SHA256 (xpi/firefox-i18n-59.0.2/mk.xpi) = f5e80c52b4474f88460329cf8642287a96c7dd61bd03f70d5acb3cac0e25ec4f
126
SHA256 (xpi/firefox-i18n-60.0b6/mk.xpi) = cd7713a557518d12ecf9955377d22fffc55c0dfdb061f246d19ec3e0a9b3365e
127
SIZE (xpi/firefox-i18n-59.0.2/mk.xpi) = 484076
127
SIZE (xpi/firefox-i18n-60.0b6/mk.xpi) = 471757
128
SHA256 (xpi/firefox-i18n-59.0.2/ml.xpi) = 29a1db58dce400dd16fb13cd424bdba0f097d9eee2e2e701f8acc0366bc7e473
128
SHA256 (xpi/firefox-i18n-60.0b6/ml.xpi) = 02068867c4d695f55c7bcc155419fd01344c35cffe2fdd750f819986a72829ca
129
SIZE (xpi/firefox-i18n-59.0.2/ml.xpi) = 539735
129
SIZE (xpi/firefox-i18n-60.0b6/ml.xpi) = 549003
130
SHA256 (xpi/firefox-i18n-59.0.2/mr.xpi) = a4be8ab4e2417c4056c92146a549afe8665071ba777d4252669c67c9ed6f242b
130
SHA256 (xpi/firefox-i18n-60.0b6/mr.xpi) = 86e20c69d780dd9614505df42ca8833e976cbc09f13f9a07d1c9429f0030ac73
131
SIZE (xpi/firefox-i18n-59.0.2/mr.xpi) = 517961
131
SIZE (xpi/firefox-i18n-60.0b6/mr.xpi) = 529045
132
SHA256 (xpi/firefox-i18n-59.0.2/ms.xpi) = 354f738c0df3f4568c52cd70f4b0c59bea2764fef283a0d552b9d209dbf6c3f4
132
SHA256 (xpi/firefox-i18n-60.0b6/ms.xpi) = ab1ae2a6332b7594b221e4cc6f683294daacafa87b3028994ec2537554b5068e
133
SIZE (xpi/firefox-i18n-59.0.2/ms.xpi) = 450075
133
SIZE (xpi/firefox-i18n-60.0b6/ms.xpi) = 459260
134
SHA256 (xpi/firefox-i18n-59.0.2/my.xpi) = 97ade42f8ec1ac2c698e1777ce10a1c4abadef1e2987a3da4df50c64fe1ba758
134
SHA256 (xpi/firefox-i18n-60.0b6/my.xpi) = bbb2173688b7f89cd5b0f9251619bbd3042d3d53a7ba1aaf9c0f20b453fe3619
135
SIZE (xpi/firefox-i18n-59.0.2/my.xpi) = 511894
135
SIZE (xpi/firefox-i18n-60.0b6/my.xpi) = 521511
136
SHA256 (xpi/firefox-i18n-59.0.2/nb-NO.xpi) = 9f45d75e5ad7fa288b3794661ba2eeba2eb857c11d6bd200324ee1c2188a5467
136
SHA256 (xpi/firefox-i18n-60.0b6/nb-NO.xpi) = f082be6709e0039466de61b5b186cada83a5f6919acc2c0ee9339d309ccfd640
137
SIZE (xpi/firefox-i18n-59.0.2/nb-NO.xpi) = 450276
137
SIZE (xpi/firefox-i18n-60.0b6/nb-NO.xpi) = 459018
138
SHA256 (xpi/firefox-i18n-59.0.2/ne-NP.xpi) = 023e578ee98db7f1549011b600430a5800e89b75d8ef172719041fba4ecca633
138
SHA256 (xpi/firefox-i18n-60.0b6/ne-NP.xpi) = 478df354951da43452d1a1249ef0579bdc184e432b78c49aa2a128da25083485
139
SIZE (xpi/firefox-i18n-59.0.2/ne-NP.xpi) = 509177
139
SIZE (xpi/firefox-i18n-60.0b6/ne-NP.xpi) = 506112
140
SHA256 (xpi/firefox-i18n-59.0.2/nl.xpi) = 65384c5e4d3f36257f6f0793f311be4a50333ec67fff877a1aac01b9c403868f
140
SHA256 (xpi/firefox-i18n-60.0b6/nl.xpi) = 33c8b506a56169f5bf4119bdb98cee004043d872babd67261dd30eeff8c7ee12
141
SIZE (xpi/firefox-i18n-59.0.2/nl.xpi) = 458128
141
SIZE (xpi/firefox-i18n-60.0b6/nl.xpi) = 466120
142
SHA256 (xpi/firefox-i18n-59.0.2/nn-NO.xpi) = d583ae5e1ec6dff31adc76bd243db1c05c390adb7e757bb3be823370141d6e81
142
SHA256 (xpi/firefox-i18n-60.0b6/nn-NO.xpi) = 82a84fd71b52b6387ed3a89494ecbc72c8a4c757f3a95687e2e087acdc80ee48
143
SIZE (xpi/firefox-i18n-59.0.2/nn-NO.xpi) = 451470
143
SIZE (xpi/firefox-i18n-60.0b6/nn-NO.xpi) = 460207
144
SHA256 (xpi/firefox-i18n-59.0.2/or.xpi) = 64bead2c33ccc197348ecdaeae4bc2b16d947e2d17fa3e83fff9eece9fdc3109
144
SHA256 (xpi/firefox-i18n-60.0b6/oc.xpi) = 1c1491024c6b3028fe48a5b99c7ddcd566e0217f40f894425a821304c003b5c4
145
SIZE (xpi/firefox-i18n-59.0.2/or.xpi) = 493181
145
SIZE (xpi/firefox-i18n-60.0b6/oc.xpi) = 476833
146
SHA256 (xpi/firefox-i18n-59.0.2/pa-IN.xpi) = 504d8e4a3e3c485ab03fce76636de738dd3bd5ab75e5c52bebbe74634972686e
146
SHA256 (xpi/firefox-i18n-60.0b6/or.xpi) = d3d1c9f8b5202b6791eb5731f454bbbb23c9ab5d12d575dd4649c919724fb967
147
SIZE (xpi/firefox-i18n-59.0.2/pa-IN.xpi) = 492420
147
SIZE (xpi/firefox-i18n-60.0b6/or.xpi) = 499286
148
SHA256 (xpi/firefox-i18n-59.0.2/pl.xpi) = e34d92a38abdd251bf110b64c3c2bbf70ddefdc3d32ef50a6545dd3d8c8022e6
148
SHA256 (xpi/firefox-i18n-60.0b6/pa-IN.xpi) = e0c6209b4a65fd62966c013940e8a1aa5faf75ba98c9504cc2b61eb86a9c61b1
149
SIZE (xpi/firefox-i18n-59.0.2/pl.xpi) = 358511
149
SIZE (xpi/firefox-i18n-60.0b6/pa-IN.xpi) = 502601
150
SHA256 (xpi/firefox-i18n-59.0.2/pt-BR.xpi) = cd0e1e1fb5063fd9a82940506777fd5a9447df36f46f604026b1a4987e65b8e4
150
SHA256 (xpi/firefox-i18n-60.0b6/pl.xpi) = 248b701e51749e487fde314f67c4283eb374c9b59b3ae988119398f91f2db81f
151
SIZE (xpi/firefox-i18n-59.0.2/pt-BR.xpi) = 455916
151
SIZE (xpi/firefox-i18n-60.0b6/pl.xpi) = 369884
152
SHA256 (xpi/firefox-i18n-59.0.2/pt-PT.xpi) = ab480af25495f57649c19cf54668bab1e209b60d07654907e13010b26503506a
152
SHA256 (xpi/firefox-i18n-60.0b6/pt-BR.xpi) = ac0faa2ed98035f51248143daa80560f0f1f1d66163ba208db37c9280804e047
153
SIZE (xpi/firefox-i18n-59.0.2/pt-PT.xpi) = 459331
153
SIZE (xpi/firefox-i18n-60.0b6/pt-BR.xpi) = 464786
154
SHA256 (xpi/firefox-i18n-59.0.2/rm.xpi) = bd4918a2b0ce184da481fde4d6030991096defd8486a49deec07ccd94dd11990
154
SHA256 (xpi/firefox-i18n-60.0b6/pt-PT.xpi) = be878abe9b1dceb58676f10abd39d53ba5b8a2a7d98a65a6d147da0bfa680686
155
SIZE (xpi/firefox-i18n-59.0.2/rm.xpi) = 449757
155
SIZE (xpi/firefox-i18n-60.0b6/pt-PT.xpi) = 468591
156
SHA256 (xpi/firefox-i18n-59.0.2/ro.xpi) = cd6ff4632e846c0d982faccbda31ee379dc002c16a11e119de1b35543bb9f912
156
SHA256 (xpi/firefox-i18n-60.0b6/rm.xpi) = eae27afea5c5112a7c4fa2b848f5657d5e966bdb4c5687552e02042b6e10e213
157
SIZE (xpi/firefox-i18n-59.0.2/ro.xpi) = 453403
157
SIZE (xpi/firefox-i18n-60.0b6/rm.xpi) = 460304
158
SHA256 (xpi/firefox-i18n-59.0.2/ru.xpi) = 2554a16e953fe70e923778fac94aff135cec1dc83177b8d01c3062a27da3b8d6
158
SHA256 (xpi/firefox-i18n-60.0b6/ro.xpi) = 198b42f640750bc4b4a84c8129e6e3e9ea883398861c3cef9f3046b235b8ab21
159
SIZE (xpi/firefox-i18n-59.0.2/ru.xpi) = 526523
159
SIZE (xpi/firefox-i18n-60.0b6/ro.xpi) = 465339
160
SHA256 (xpi/firefox-i18n-59.0.2/si.xpi) = 5a34546cefac845cb6131382cb04771ae20f18a6eb6c058cab582419cc9324e9
160
SHA256 (xpi/firefox-i18n-60.0b6/ru.xpi) = ae88b3d11ef061478c1baaf6bda2e3540e1e816b4c46d485e5b6455d213ecdab
161
SIZE (xpi/firefox-i18n-59.0.2/si.xpi) = 492588
161
SIZE (xpi/firefox-i18n-60.0b6/ru.xpi) = 537312
162
SHA256 (xpi/firefox-i18n-59.0.2/sk.xpi) = 34f7705c36c88f20ba2bcafd09b6ada3c90ae5d71acd4b7747ac60cce70c222c
162
SHA256 (xpi/firefox-i18n-60.0b6/si.xpi) = 9c6ea709c7cc33c5fb97247760e32c0eb8fd00a485cca04f3c0c96a1ed6c7de5
163
SIZE (xpi/firefox-i18n-59.0.2/sk.xpi) = 480813
163
SIZE (xpi/firefox-i18n-60.0b6/si.xpi) = 500608
164
SHA256 (xpi/firefox-i18n-59.0.2/sl.xpi) = 19d8af678cd2874a37bc5f5836e030d0e04c64de5f3cab994f25dc27c48048ae
164
SHA256 (xpi/firefox-i18n-60.0b6/sk.xpi) = 938fae9735de21fa39c35f990b0bdbaffbae1278777b13f4a7d3e5970b1f980f
165
SIZE (xpi/firefox-i18n-59.0.2/sl.xpi) = 458824
165
SIZE (xpi/firefox-i18n-60.0b6/sk.xpi) = 489638
166
SHA256 (xpi/firefox-i18n-59.0.2/son.xpi) = f6d897f43b61d7b476cf0bbdfaa9bb09c97e1b923ed93ebaa45796da17d5815a
166
SHA256 (xpi/firefox-i18n-60.0b6/sl.xpi) = 3b94aaedb915fd396ccbf4dc37079e2ee7b5db5ecb1fa0bc8819f7fcccc01421
167
SIZE (xpi/firefox-i18n-59.0.2/son.xpi) = 446400
167
SIZE (xpi/firefox-i18n-60.0b6/sl.xpi) = 468161
168
SHA256 (xpi/firefox-i18n-59.0.2/sq.xpi) = dd0fa029de2d70ac4982d2ec5d904a8543126198080ae8a45b1037100dfc1454
168
SHA256 (xpi/firefox-i18n-60.0b6/son.xpi) = dc09794b740550bfaac59a1bbaf0caa14b2d097536059821cc53e019fb23df88
169
SIZE (xpi/firefox-i18n-59.0.2/sq.xpi) = 464463
169
SIZE (xpi/firefox-i18n-60.0b6/son.xpi) = 454727
170
SHA256 (xpi/firefox-i18n-59.0.2/sr.xpi) = ff0e506cfde1150867113f1fadf49a075c7b39ec1273254fd1c825c7aa3fc61d
170
SHA256 (xpi/firefox-i18n-60.0b6/sq.xpi) = 239fac82aaf817fe9b6ffe85743061f9ae69d5479dba20b29c79008eb5a9dfe3
171
SIZE (xpi/firefox-i18n-59.0.2/sr.xpi) = 486178
171
SIZE (xpi/firefox-i18n-60.0b6/sq.xpi) = 473763
172
SHA256 (xpi/firefox-i18n-59.0.2/sv-SE.xpi) = 0062281cc43f2b132663a690eaaaac8c483196daed5fc1c8f1de02b59005ad70
172
SHA256 (xpi/firefox-i18n-60.0b6/sr.xpi) = d4173263e7aaa820a16230a5e4ffbff0236247da9fd437e022471636ca26c113
173
SIZE (xpi/firefox-i18n-59.0.2/sv-SE.xpi) = 458659
173
SIZE (xpi/firefox-i18n-60.0b6/sr.xpi) = 495841
174
SHA256 (xpi/firefox-i18n-59.0.2/ta.xpi) = 12d92d14cdb6aba7228cf634da62ba2ebca3210ed4db9119f4ba2d7c9c8296fc
174
SHA256 (xpi/firefox-i18n-60.0b6/sv-SE.xpi) = 0f9d5044ae0b7e98ca4fed32e3a65051b9e43a7d36020a76009c0443ca795534
175
SIZE (xpi/firefox-i18n-59.0.2/ta.xpi) = 512843
175
SIZE (xpi/firefox-i18n-60.0b6/sv-SE.xpi) = 467452
176
SHA256 (xpi/firefox-i18n-59.0.2/te.xpi) = 7026e14f3760b906048d45d25eaa73d0f2a657614eb07ba3a567803b4daf2bfe
176
SHA256 (xpi/firefox-i18n-60.0b6/ta.xpi) = 101b6fea891c2d5cc6f9385f3857197d64d66aaceb40619e2b3bf3f64a5441f6
177
SIZE (xpi/firefox-i18n-59.0.2/te.xpi) = 527083
177
SIZE (xpi/firefox-i18n-60.0b6/ta.xpi) = 523859
178
SHA256 (xpi/firefox-i18n-59.0.2/th.xpi) = 226efaa18781edc8c5ffec902c2a00047d3a0796507c9799134a5fe0517b2cc9
178
SHA256 (xpi/firefox-i18n-60.0b6/te.xpi) = 06203015e0c0236d3f8460187d165485887d3f2d4f505a869dab2663ff659b77
179
SIZE (xpi/firefox-i18n-59.0.2/th.xpi) = 498544
179
SIZE (xpi/firefox-i18n-60.0b6/te.xpi) = 537310
180
SHA256 (xpi/firefox-i18n-59.0.2/tr.xpi) = a39db56a64511ced3451aac4cb6d6dad6e3d49f7a60e074742b08a492a04580c
180
SHA256 (xpi/firefox-i18n-60.0b6/th.xpi) = f44a97ca6cb331a10b4a56a1b812c8e517cb6574ebd9e0c04c60654854356bc4
181
SIZE (xpi/firefox-i18n-59.0.2/tr.xpi) = 463593
181
SIZE (xpi/firefox-i18n-60.0b6/th.xpi) = 508878
182
SHA256 (xpi/firefox-i18n-59.0.2/uk.xpi) = f4b96792dbca4b8de74dccce1b51d5c4e6d0cd2509ef2573c1f992f37dd71c32
182
SHA256 (xpi/firefox-i18n-60.0b6/tr.xpi) = 1c8851d7a7a8e9217a52768aa9e259dde9388ebb2f0baf4386d0302f94278491
183
SIZE (xpi/firefox-i18n-59.0.2/uk.xpi) = 516926
183
SIZE (xpi/firefox-i18n-60.0b6/tr.xpi) = 474054
184
SHA256 (xpi/firefox-i18n-59.0.2/ur.xpi) = 06eea9f0bde0e5d3299e59d76cbc486a5a9e4d36f6ee9e262b2199bb45967b59
184
SHA256 (xpi/firefox-i18n-60.0b6/uk.xpi) = d9a4ff58b4d8569de7185bfb6ff829a4dfa24ee655e6e6fabfba9a06392ee3e6
185
SIZE (xpi/firefox-i18n-59.0.2/ur.xpi) = 507379
185
SIZE (xpi/firefox-i18n-60.0b6/uk.xpi) = 526913
186
SHA256 (xpi/firefox-i18n-59.0.2/uz.xpi) = 16f3a699afa42f645c0276b53be27d93f35f21f20289206431be0da811e3fe34
186
SHA256 (xpi/firefox-i18n-60.0b6/ur.xpi) = ec17b9f8762aab037f747347eec6a3f686832f2203549ecaa023c6b4320f76b9
187
SIZE (xpi/firefox-i18n-59.0.2/uz.xpi) = 456923
187
SIZE (xpi/firefox-i18n-60.0b6/ur.xpi) = 517011
188
SHA256 (xpi/firefox-i18n-59.0.2/vi.xpi) = b1abb414442450d836094dcae26268c61608102e31d745b717efdc92e05fd760
188
SHA256 (xpi/firefox-i18n-60.0b6/uz.xpi) = 3dcc9e63a8755c998757b54f2abbfb3d81d7cb8b27ed8f56dfd08faf353e4682
189
SIZE (xpi/firefox-i18n-59.0.2/vi.xpi) = 470069
189
SIZE (xpi/firefox-i18n-60.0b6/uz.xpi) = 466319
190
SHA256 (xpi/firefox-i18n-59.0.2/xh.xpi) = 7de47e610d82ec7ed7a57d830ef20c4a113770fdc659f19c47c17f4465a9e83b
190
SHA256 (xpi/firefox-i18n-60.0b6/vi.xpi) = 7ff9f65ca867860f4e357b5e3cf85eeb487a3d93d4131c259dfc4b5f1937f7ba
191
SIZE (xpi/firefox-i18n-59.0.2/xh.xpi) = 460772
191
SIZE (xpi/firefox-i18n-60.0b6/vi.xpi) = 480602
192
SHA256 (xpi/firefox-i18n-59.0.2/zh-CN.xpi) = 1e30757d37bb8f13bec733e302e393204bc5f9c9b859465252b25ae053e87b27
192
SHA256 (xpi/firefox-i18n-60.0b6/xh.xpi) = 4fe5a8a0bea81765d6c7d8d93cc963d5798f5a89bcb03c8c489a6eafd1d90f34
193
SIZE (xpi/firefox-i18n-59.0.2/zh-CN.xpi) = 483449
193
SIZE (xpi/firefox-i18n-60.0b6/xh.xpi) = 468377
194
SHA256 (xpi/firefox-i18n-59.0.2/zh-TW.xpi) = 5d852b837ce85c5a7bb4a4e95655bba83ca3e428a20b252c023125cc55e538a4
194
SHA256 (xpi/firefox-i18n-60.0b6/zh-CN.xpi) = 74d2fb60387435c16277af8d38dfaf5c4a00520523131dbd0a50c44903e81c4d
195
SIZE (xpi/firefox-i18n-59.0.2/zh-TW.xpi) = 477089
195
SIZE (xpi/firefox-i18n-60.0b6/zh-CN.xpi) = 492237
196
SHA256 (xpi/firefox-i18n-60.0b6/zh-TW.xpi) = f8e43fdb99d8a4967d4c05ec3b2ef01c341c5c0654f3306f7ddfb3f6c3ac427f
197
SIZE (xpi/firefox-i18n-60.0b6/zh-TW.xpi) = 489642
(-)b/www/firefox/Makefile (-13 / +11 lines)
Lines 2-28 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	firefox
4
PORTNAME=	firefox
5
DISTVERSION=	59.0.2
5
DISTVERSION=	60.0b6
6
PORTEPOCH=	1
6
PORTEPOCH=	1
7
CATEGORIES=	www ipv6
7
CATEGORIES=	www ipv6
8
MASTER_SITES=	https://hg.mozilla.org/releases/mozilla-release/archive/
8
MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
9
DISTNAME=	${MASTER_SITES:M*hg*:S,/archive/,,:T}-239e434d6d2b8e1e2b697c3416d1e96d48fe98e5
9
		MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
10
DISTFILES=	${DISTNAME:C/.*-//}${EXTRACT_SUFX}
10
DISTNAME=	${PORTNAME}-${PORTVERSION:R}
11
DIST_SUBDIR=	firefox
11
DISTFILES=	${DISTNAME}${PORTVERSION:E}.source${EXTRACT_SUFX}
12
12
13
MAINTAINER=	gecko@FreeBSD.org
13
MAINTAINER=	gecko@FreeBSD.org
14
COMMENT=	Web browser based on the browser portion of Mozilla
14
COMMENT=	Web browser based on the browser portion of Mozilla
15
15
16
BUILD_DEPENDS=	nspr>=4.18:devel/nspr \
16
BUILD_DEPENDS=	nspr>=4.19:devel/nspr \
17
		nss>=3.35:security/nss \
17
		nss>=3.36:security/nss \
18
		icu>=59.1,1:devel/icu \
18
		icu>=59.1,1:devel/icu \
19
		libevent>=2.1.8:devel/libevent \
19
		libevent>=2.1.8:devel/libevent \
20
		harfbuzz>=1.7.4:print/harfbuzz \
20
		harfbuzz>=1.7.6:print/harfbuzz \
21
		graphite2>=1.3.10:graphics/graphite2 \
21
		graphite2>=1.3.11:graphics/graphite2 \
22
		png>=1.6.34:graphics/png \
22
		png>=1.6.34:graphics/png \
23
		libvorbis>=1.3.5,3:audio/libvorbis \
23
		libvorbis>=1.3.5,3:audio/libvorbis \
24
		libvpx>=1.5.0:multimedia/libvpx \
24
		libvpx>=1.5.0:multimedia/libvpx \
25
		sqlite3>=3.21.0:databases/sqlite3 \
25
		sqlite3>=3.22.0:databases/sqlite3 \
26
		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
26
		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
27
		v4l_compat>0:multimedia/v4l_compat \
27
		v4l_compat>0:multimedia/v4l_compat \
28
		autoconf-2.13:devel/autoconf213 \
28
		autoconf-2.13:devel/autoconf213 \
Lines 30-44 BUILD_DEPENDS= nspr>=4.18:devel/nspr \ Link Here
30
		zip:archivers/zip
30
		zip:archivers/zip
31
#		soundtouch>=1.9.0:audio/soundtouch \
31
#		soundtouch>=1.9.0:audio/soundtouch \
32
32
33
LIB_DEPENDS=	libv4l2.so:multimedia/libv4l
34
35
USE_GECKO=	gecko
33
USE_GECKO=	gecko
36
CONFLICTS_INSTALL=	firefox-esr
34
CONFLICTS_INSTALL=	firefox-esr
37
MOZ_PKGCONFIG_FILES=	# empty
35
MOZ_PKGCONFIG_FILES=	# empty
38
USE_MOZILLA=	-cairo -soundtouch
36
USE_MOZILLA=	-cairo -soundtouch
39
37
40
USE_GL=		gl
38
USE_GL=		gl
41
USES=		tar:bz2
39
USES=		tar:xz
42
40
43
FIREFOX_ICON=		${MOZILLA}.png
41
FIREFOX_ICON=		${MOZILLA}.png
44
FIREFOX_ICON_SRC=	${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png
42
FIREFOX_ICON_SRC=	${PREFIX}/lib/${MOZILLA}/browser/chrome/icons/default/default48.png
(-)b/www/firefox/distinfo (-3 / +3 lines)
Lines 1-3 Link Here
1
TIMESTAMP = 1521751601
1
TIMESTAMP = 1521738065
2
SHA256 (firefox/239e434d6d2b8e1e2b697c3416d1e96d48fe98e5.tar.bz2) = bd9fae16bf74eb6836e9a17c480bf2f46614490e5b93ca9124683681a4cd477c
2
SHA256 (firefox-60.0b6.source.tar.xz) = 35689c1d0dd0d75e8884409c86cb3c5f22b673ae7fe8bce31bef9fff3a5bff7f
3
SIZE (firefox/239e434d6d2b8e1e2b697c3416d1e96d48fe98e5.tar.bz2) = 304965218
3
SIZE (firefox-60.0b6.source.tar.xz) = 267954052
(-)b/www/firefox/files/patch-bug1021761 (-3 / +3 lines)
Lines 1198-1206 index b139b8f497fd..d1f8a223c6d8 100755 Link Here
1198
 cp $1/src/cubeb_mixer.h src
1198
 cp $1/src/cubeb_mixer.h src
1199
 cp $1/src/cubeb_opensl.c src
1199
 cp $1/src/cubeb_opensl.c src
1200
+cp $1/src/cubeb_oss.c src
1200
+cp $1/src/cubeb_oss.c src
1201
 cp $1/src/cubeb_osx_run_loop.h src
1201
 cp $1/src/cubeb-jni.cpp src
1202
 cp $1/src/cubeb_panner.cpp src
1202
 cp $1/src/cubeb-jni.h src
1203
 cp $1/src/cubeb_panner.h src
1203
 cp $1/src/android/cubeb-output-latency.h src/android
1204
diff --git toolkit/library/moz.build toolkit/library/moz.build
1204
diff --git toolkit/library/moz.build toolkit/library/moz.build
1205
index a61c689c83c3..7764df6f8a6b 100644
1205
index a61c689c83c3..7764df6f8a6b 100644
1206
--- toolkit/library/moz.build
1206
--- toolkit/library/moz.build
(-)b/www/firefox/files/patch-bug1418162 (+58 lines)
Added Link Here
1
commit b2ebb8d82be2
2
Author: Tom Ritter <tom@mozilla.com>
3
Date:   Mon Feb 19 09:43:27 2018 -0600
4
5
    Bug 1418162 Use a build constant to determine update channel, and update ESR equation for 60 r?gijs,Build
6
    
7
    Previously we used Services.appinfo.defaultUpdateChannel to determine if we were on ESR
8
    and if so, we would assert to make sure the ESR equation hadn't changed. But that method
9
    is a footgun.  We could use UpdateUtils.getUpdateChannel, but for our purposes here, the
10
    compile-time constant will work just as well.
11
    
12
    If it's set correctly, for Mozilla, we will perform our assert check. If it's not set to
13
    esr (e.g. for Tor), they'll skip the assert. They probably want to control their user agent
14
    themselves anyway.
15
    
16
    MozReview-Commit-ID: DLnWSEpCVJ6
17
---
18
 .../resistfingerprinting/nsRFPService.cpp           | 21 +++++++--------------
19
 1 file changed, 7 insertions(+), 14 deletions(-)
20
21
diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp
22
index aeb3cb6b3539..1fd6a6e8fe8d 100644
23
--- toolkit/components/resistfingerprinting/nsRFPService.cpp
24
+++ toolkit/components/resistfingerprinting/nsRFPService.cpp
25
@@ -606,26 +606,19 @@ nsRFPService::GetSpoofedUserAgent(nsACString &userAgent)
26
   uint32_t firefoxVersion = appVersion.ToInteger(&rv);
27
   NS_ENSURE_SUCCESS(rv, rv);
28
 
29
-  // Starting from Firefox 10, Firefox ESR was released once every seven
30
-  // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on.
31
-  // We infer the last and closest ESR version based on this rule.
32
-  nsCOMPtr<nsIXULRuntime> runtime =
33
-    do_GetService("@mozilla.org/xre/runtime;1", &rv);
34
-  NS_ENSURE_SUCCESS(rv, rv);
35
-
36
-  nsAutoCString updateChannel;
37
-  rv = runtime->GetDefaultUpdateChannel(updateChannel);
38
-  NS_ENSURE_SUCCESS(rv, rv);
39
-
40
   // If we are running in Firefox ESR, determine whether the formula of ESR
41
   // version has changed.  Once changed, we must update the formula in this
42
   // function.
43
-  if (updateChannel.EqualsLiteral("esr")) {
44
-    MOZ_ASSERT(((firefoxVersion % 7) == 3),
45
+  if (!strcmp(NS_STRINGIFY(MOZ_UPDATE_CHANNEL), "esr")) {
46
+    MOZ_ASSERT(((firefoxVersion % 7) == 4),
47
       "Please udpate ESR version formula in nsRFPService.cpp");
48
   }
49
 
50
-  uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7);
51
+  // Starting from Firefox 10, Firefox ESR was released once every seven
52
+  // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on.
53
+  // Except we used 60 as an ESR instead of 59.
54
+  // We infer the last and closest ESR version based on this rule.
55
+  uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 4) % 7);
56
   userAgent.Assign(nsPrintfCString(
57
     "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
58
     SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
(-)a/www/firefox/files/patch-bug1433747 (-24 lines)
Removed Link Here
1
Apply simd@cf87865a998a to unbreak -C target-cpu with Rust >= 1.24
2
3
diff --git third_party/rust/simd/.cargo-checksum.json third_party/rust/simd/.cargo-checksum.json
4
index 65f31b0560e6..f16d0dd4fd61 100644
5
--- third_party/rust/simd/.cargo-checksum.json
6
+++ third_party/rust/simd/.cargo-checksum.json
7
@@ -1 +1 @@
8
-{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"efe3006b13a13261a3dec3d37dc1d8cb53950f3803c420069231803374949937","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"}
9
\ No newline at end of file
10
+{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"3bcb3f391ad5f16f0a6da0bc1301329beb478ad6265bd3b2c9c124fc2e6198e5","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"}
11
\ No newline at end of file
12
diff --git third_party/rust/simd/src/x86/avx2.rs third_party/rust/simd/src/x86/avx2.rs
13
index fa92e3b60786..e86a33d3b5bb 100644
14
--- third_party/rust/simd/src/x86/avx2.rs
15
+++ third_party/rust/simd/src/x86/avx2.rs
16
@@ -42,7 +42,7 @@ extern "platform-intrinsic" {
17
     fn x86_mm256_packus_epi32(x: i32x8, y: i32x8) -> u16x16;
18
     fn x86_mm256_permutevar8x32_epi32(x: i32x8, y: i32x8) -> i32x8;
19
     fn x86_mm256_permutevar8x32_ps(x: f32x8, y: i32x8) -> f32x8;
20
-    fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u8x32;
21
+    fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u64x4;
22
     fn x86_mm256_shuffle_epi8(x: i8x32, y: i8x32) -> i8x32;
23
     fn x86_mm256_sign_epi8(x: i8x32, y: i8x32) -> i8x32;
24
     fn x86_mm256_sign_epi16(x: i16x16, y: i16x16) -> i16x16;
(-)b/www/firefox/files/patch-bug1438678 (+1000 lines)
Added Link Here
1
commit 68124009fc5a
2
Author: Nicholas Nethercote <nnethercote@mozilla.com>
3
Date:   Fri Feb 16 17:54:16 2018 +1100
4
5
    Bug 1438678 - Pass early prefs via shared memory instead of the command line. r=bobowen,jld,glandium.
6
    
7
    This patch replaces the large -intPrefs/-boolPrefs/-stringPrefs flags with
8
    a short-lived, anonymous, shared memory segment that is used to pass the early
9
    prefs.
10
    
11
    Removing the bloat from the command line is nice, but more important is the
12
    fact that this will let us pass more prefs at content process start-up, which
13
    will allow us to remove the early/late prefs split (bug 1436911).
14
    
15
    Although this mechanism is only used for prefs, it's conceivable that it could
16
    be used for other data that must be received very early by children, and for
17
    which the command line isn't ideal.
18
    
19
    Notable details:
20
    
21
    - Much of the patch deals with the various platform-specific ways of passing
22
      handles/fds to children.
23
    
24
      - Linux and Mac: we use a fixed fd (8) in combination with the new
25
        GeckoChildProcessHost::AddFdToRemap() function (which ensures the child
26
        won't close the fd).
27
    
28
      - Android: like Linux and Mac, but the handles get passed via "parcels" and
29
        we use the new SetPrefsFd() function instead of the fixed fd.
30
    
31
      - Windows: there is no need to duplicate the handle because Windows handles
32
        are system-wide. But we do use the new
33
        GeckoChildProcessHost::AddHandleToShare() function to add it to the list of
34
        inheritable handles. We also ensure that list is processed on all paths
35
        (MOZ_SANDBOX with sandbox, MOZ_SANDBOX without sandbox, non-MOZ_SANDBOX) so
36
        that the handles are marked as inheritable. The handle is passed via the
37
        -prefsHandle flag.
38
    
39
      The -prefsLen flag is used on all platforms to indicate the size of the
40
      shared memory segment.
41
    
42
    - The patch also moves the serialization/deserialization of the prefs in/out of
43
      the shared memory into libpref, which is a better spot for it. (This means
44
      Preferences::MustSendToContentProcesses() can be removed.)
45
    
46
    MozReview-Commit-ID: 8fREEBiYFvc
47
    
48
    --HG--
49
    extra : rebase_source : 7e4c8ebdbcd7d74d6bd2ab3c9e75a6a17dbd8dfe
50
---
51
 dom/ipc/ContentParent.cpp                          |  91 +++++++-------
52
 dom/ipc/ContentProcess.cpp                         | 121 ++++++++++---------
53
 dom/ipc/ContentProcess.h                           |   5 +
54
 ipc/chromium/src/base/process_util_win.cc          |   4 +
55
 ipc/glue/GeckoChildProcessHost.cpp                 |  36 +++---
56
 ipc/glue/GeckoChildProcessHost.h                   |  10 ++
57
 .../org/mozilla/gecko/process/IChildProcess.aidl   |   3 +-
58
 .../main/java/org/mozilla/gecko/GeckoThread.java   |  13 +-
59
 .../org/mozilla/gecko/mozglue/GeckoLoader.java     |   2 +-
60
 .../mozilla/gecko/process/GeckoProcessManager.java |  19 +--
61
 .../gecko/process/GeckoServiceChildProcess.java    |   4 +-
62
 modules/libpref/Preferences.cpp                    | 134 +++++++++++++++++++--
63
 modules/libpref/Preferences.h                      |  17 +--
64
 mozglue/android/APKOpen.cpp                        |   4 +-
65
 toolkit/xre/Bootstrap.cpp                          |   4 +-
66
 toolkit/xre/Bootstrap.h                            |   2 +-
67
 toolkit/xre/nsEmbedFunctions.cpp                   |   3 +-
68
 widget/android/GeneratedJNIWrappers.cpp            |   4 +-
69
 widget/android/GeneratedJNIWrappers.h              |   5 +-
70
 xpcom/build/nsXULAppAPI.h                          |   2 +-
71
 20 files changed, 318 insertions(+), 165 deletions(-)
72
73
diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp
74
index e27f3eedc1b1..60be7005354b 100644
75
--- dom/ipc/ContentParent.cpp
76
+++ dom/ipc/ContentParent.cpp
77
@@ -7,6 +7,7 @@
78
 #include "mozilla/DebugOnly.h"
79
 
80
 #include "base/basictypes.h"
81
+#include "base/shared_memory.h"
82
 
83
 #include "ContentParent.h"
84
 #include "TabParent.h"
85
@@ -1998,61 +1999,56 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
86
   extraArgs.push_back(idStr);
87
   extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser");
88
 
89
-  nsAutoCStringN<1024> boolPrefs;
90
-  nsAutoCStringN<1024> intPrefs;
91
-  nsAutoCStringN<1024> stringPrefs;
92
+  // Prefs information is passed via anonymous shared memory to avoid bloating
93
+  // the command line.
94
 
95
-  size_t prefsLen;
96
-  ContentPrefs::GetEarlyPrefs(&prefsLen);
97
+  // Serialize the early prefs.
98
+  nsAutoCStringN<1024> prefs;
99
+  Preferences::SerializeEarlyPreferences(prefs);
100
 
101
-  for (unsigned int i = 0; i < prefsLen; i++) {
102
-    const char* prefName = ContentPrefs::GetEarlyPref(i);
103
-    MOZ_ASSERT(i == 0 || strcmp(prefName, ContentPrefs::GetEarlyPref(i - 1)) > 0,
104
-               "Content process preferences should be sorted alphabetically.");
105
-
106
-    if (!Preferences::MustSendToContentProcesses(prefName)) {
107
-      continue;
108
-    }
109
-
110
-    switch (Preferences::GetType(prefName)) {
111
-    case nsIPrefBranch::PREF_INT:
112
-      intPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
113
-      break;
114
-    case nsIPrefBranch::PREF_BOOL:
115
-      boolPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
116
-      break;
117
-    case nsIPrefBranch::PREF_STRING: {
118
-      nsAutoCString value;
119
-      Preferences::GetCString(prefName, value);
120
-      stringPrefs.Append(nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
121
-      }
122
-      break;
123
-    case nsIPrefBranch::PREF_INVALID:
124
-      break;
125
-    default:
126
-      printf("preference type: %x\n", Preferences::GetType(prefName));
127
-      MOZ_CRASH();
128
-    }
129
+  // Set up the shared memory.
130
+  base::SharedMemory shm;
131
+  if (!shm.Create("", /* read_only */ false, /* open_existing */ false,
132
+                  prefs.Length())) {
133
+    NS_ERROR("failed to create shared memory in the parent");
134
+    MarkAsDead();
135
+    return false;
136
+  }
137
+  if (!shm.Map(prefs.Length())) {
138
+    NS_ERROR("failed to map shared memory in the parent");
139
+    MarkAsDead();
140
+    return false;
141
   }
142
 
143
-  nsCString schedulerPrefs = Scheduler::GetPrefs();
144
+  // Copy the serialized prefs into the shared memory.
145
+  memcpy(static_cast<char*>(shm.memory()), prefs.get(), prefs.Length());
146
 
147
-  // Only do these ones if they're non-empty.
148
-  if (!intPrefs.IsEmpty()) {
149
-    extraArgs.push_back("-intPrefs");
150
-    extraArgs.push_back(intPrefs.get());
151
-  }
152
-  if (!boolPrefs.IsEmpty()) {
153
-    extraArgs.push_back("-boolPrefs");
154
-    extraArgs.push_back(boolPrefs.get());
155
-  }
156
-  if (!stringPrefs.IsEmpty()) {
157
-    extraArgs.push_back("-stringPrefs");
158
-    extraArgs.push_back(stringPrefs.get());
159
-  }
160
+#if defined(XP_WIN)
161
+  // Record the handle as to-be-shared, and pass it via a command flag. This
162
+  // works because Windows handles are system-wide.
163
+  HANDLE prefsHandle = shm.handle();
164
+  mSubprocess->AddHandleToShare(prefsHandle);
165
+  extraArgs.push_back("-prefsHandle");
166
+  extraArgs.push_back(
167
+    nsPrintfCString("%zu", reinterpret_cast<uintptr_t>(prefsHandle)).get());
168
+#else
169
+  // In contrast, Unix fds are per-process. So remap the fd to a fixed one that
170
+  // will be used in the child.
171
+  // XXX: bug 1440207 is about improving how fixed fds are used.
172
+  //
173
+  // Note: on Android, AddFdToRemap() sets up the fd to be passed via a Parcel,
174
+  // and the fixed fd isn't used. However, we still need to mark it for
175
+  // remapping so it doesn't get closed in the child.
176
+  mSubprocess->AddFdToRemap(shm.handle().fd, kPrefsFileDescriptor);
177
+#endif
178
+
179
+  // Pass the length via a command flag.
180
+  extraArgs.push_back("-prefsLen");
181
+  extraArgs.push_back(nsPrintfCString("%zu", uintptr_t(prefs.Length())).get());
182
 
183
   // Scheduler prefs need to be handled differently because the scheduler needs
184
   // to start up in the content process before the normal preferences service.
185
+  nsCString schedulerPrefs = Scheduler::GetPrefs();
186
   extraArgs.push_back("-schedulerPrefs");
187
   extraArgs.push_back(schedulerPrefs.get());
188
 
189
@@ -2061,6 +2057,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
190
   }
191
 
192
   if (!mSubprocess->LaunchAndWaitForProcessHandle(extraArgs)) {
193
+    NS_ERROR("failed to launch child in the parent");
194
     MarkAsDead();
195
     return false;
196
   }
197
diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp
198
index e3c1f16910c6..2441c8cb9224 100644
199
--- dom/ipc/ContentProcess.cpp
200
+++ dom/ipc/ContentProcess.cpp
201
@@ -8,6 +8,8 @@
202
 
203
 #include "ContentProcess.h"
204
 #include "ContentPrefs.h"
205
+#include "base/shared_memory.h"
206
+#include "mozilla/Preferences.h"
207
 #include "mozilla/Scheduler.h"
208
 
209
 #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
210
@@ -15,7 +17,6 @@
211
 #endif
212
 
213
 #if (defined(XP_WIN) || defined(XP_MACOSX)) && defined(MOZ_CONTENT_SANDBOX)
214
-#include "mozilla/Preferences.h"
215
 #include "mozilla/SandboxSettings.h"
216
 #include "nsAppDirectoryServiceDefs.h"
217
 #include "nsDirectoryService.h"
218
@@ -81,6 +82,16 @@ SetUpSandboxEnvironment()
219
 }
220
 #endif
221
 
222
+#ifdef ANDROID
223
+static int gPrefsFd = -1;
224
+
225
+void
226
+SetPrefsFd(int aFd)
227
+{
228
+  gPrefsFd = aFd;
229
+}
230
+#endif
231
+
232
 bool
233
 ContentProcess::Init(int aArgc, char* aArgv[])
234
 {
235
@@ -88,9 +99,10 @@ ContentProcess::Init(int aArgc, char* aArgv[])
236
   bool foundAppdir = false;
237
   bool foundChildID = false;
238
   bool foundIsForBrowser = false;
239
-  bool foundIntPrefs = false;
240
-  bool foundBoolPrefs = false;
241
-  bool foundStringPrefs = false;
242
+#ifdef XP_WIN
243
+  bool foundPrefsHandle = false;
244
+#endif
245
+  bool foundPrefsLen = false;
246
   bool foundSchedulerPrefs = false;
247
 
248
   uint64_t childID;
249
@@ -103,7 +115,8 @@ ContentProcess::Init(int aArgc, char* aArgv[])
250
 #endif
251
 
252
   char* schedulerPrefs = nullptr;
253
-  InfallibleTArray<Pref> prefsArray;
254
+  base::SharedMemoryHandle prefsHandle = base::SharedMemory::NULLHandle();
255
+  size_t prefsLen = 0;
256
   for (int idx = aArgc; idx > 0; idx--) {
257
     if (!aArgv[idx]) {
258
       continue;
259
@@ -134,54 +147,24 @@ ContentProcess::Init(int aArgc, char* aArgv[])
260
       }
261
       isForBrowser = strcmp(aArgv[idx], "-notForBrowser");
262
       foundIsForBrowser = true;
263
-    } else if (!strcmp(aArgv[idx], "-intPrefs")) {
264
-      char* str = aArgv[idx + 1];
265
-      while (*str) {
266
-        int32_t index = strtol(str, &str, 10);
267
-        MOZ_ASSERT(str[0] == ':');
268
-        str++;
269
-        MaybePrefValue value(PrefValue(static_cast<int32_t>(strtol(str, &str, 10))));
270
-        MOZ_ASSERT(str[0] == '|');
271
-        str++;
272
-        // XXX: we assume these values as default values, which may not be
273
-        // true. We also assume they are unlocked. Fortunately, these prefs
274
-        // get reset properly by the first IPC message.
275
-        Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)),
276
-                  /* isLocked */ false, value, MaybePrefValue());
277
-        prefsArray.AppendElement(pref);
278
-      }
279
-      foundIntPrefs = true;
280
-    } else if (!strcmp(aArgv[idx], "-boolPrefs")) {
281
+#ifdef XP_WIN
282
+    } else if (!strcmp(aArgv[idx], "-prefsHandle")) {
283
       char* str = aArgv[idx + 1];
284
-      while (*str) {
285
-        int32_t index = strtol(str, &str, 10);
286
-        MOZ_ASSERT(str[0] == ':');
287
-        str++;
288
-        MaybePrefValue value(PrefValue(!!strtol(str, &str, 10)));
289
-        MOZ_ASSERT(str[0] == '|');
290
-        str++;
291
-        Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)),
292
-                  /* isLocked */ false, value, MaybePrefValue());
293
-        prefsArray.AppendElement(pref);
294
-      }
295
-      foundBoolPrefs = true;
296
-    } else if (!strcmp(aArgv[idx], "-stringPrefs")) {
297
+      MOZ_ASSERT(str[0] != '\0');
298
+      // ContentParent uses %zu to print a word-sized unsigned integer. So even
299
+      // though strtoull() returns a long long int, it will fit in a uintptr_t.
300
+      prefsHandle = reinterpret_cast<HANDLE>(strtoull(str, &str, 10));
301
+      MOZ_ASSERT(str[0] == '\0');
302
+      foundPrefsHandle = true;
303
+#endif
304
+    } else if (!strcmp(aArgv[idx], "-prefsLen")) {
305
       char* str = aArgv[idx + 1];
306
-      while (*str) {
307
-        int32_t index = strtol(str, &str, 10);
308
-        MOZ_ASSERT(str[0] == ':');
309
-        str++;
310
-        int32_t length = strtol(str, &str, 10);
311
-        MOZ_ASSERT(str[0] == ';');
312
-        str++;
313
-        MaybePrefValue value(PrefValue(nsCString(str, length)));
314
-        Pref pref(nsCString(ContentPrefs::GetEarlyPref(index)),
315
-                  /* isLocked */ false, value, MaybePrefValue());
316
-        prefsArray.AppendElement(pref);
317
-        str += length + 1;
318
-        MOZ_ASSERT(*(str - 1) == '|');
319
-      }
320
-      foundStringPrefs = true;
321
+      MOZ_ASSERT(str[0] != '\0');
322
+      // ContentParent uses %zu to print a word-sized unsigned integer. So even
323
+      // though strtoull() returns a long long int, it will fit in a uintptr_t.
324
+      prefsLen = strtoull(str, &str, 10);
325
+      MOZ_ASSERT(str[0] == '\0');
326
+      foundPrefsLen = true;
327
     } else if (!strcmp(aArgv[idx], "-schedulerPrefs")) {
328
       schedulerPrefs = aArgv[idx + 1];
329
       foundSchedulerPrefs = true;
330
@@ -209,21 +192,43 @@ ContentProcess::Init(int aArgc, char* aArgv[])
331
     bool allFound = foundAppdir
332
                  && foundChildID
333
                  && foundIsForBrowser
334
-                 && foundIntPrefs
335
-                 && foundBoolPrefs
336
-                 && foundStringPrefs
337
-                 && foundSchedulerPrefs;
338
-
339
+                 && foundPrefsLen
340
+                 && foundSchedulerPrefs
341
+#ifdef XP_WIN
342
+                 && foundPrefsHandle
343
+#endif
344
 #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
345
-    allFound &= foundProfile;
346
+                 && foundProfile
347
 #endif
348
+                 && true;
349
 
350
     if (allFound) {
351
       break;
352
     }
353
   }
354
 
355
-  Preferences::SetEarlyPreferences(&prefsArray);
356
+#ifdef ANDROID
357
+  // Android is different; get the FD via gPrefsFd instead of a fixed fd.
358
+  MOZ_RELEASE_ASSERT(gPrefsFd != -1);
359
+  prefsHandle = base::FileDescriptor(gPrefsFd, /* auto_close */ true);
360
+#elif XP_UNIX
361
+  prefsHandle = base::FileDescriptor(kPrefsFileDescriptor,
362
+                                     /* auto_close */ true);
363
+#endif
364
+
365
+  // Set up early prefs from the shared memory.
366
+  base::SharedMemory shm;
367
+  if (!shm.SetHandle(prefsHandle, /* read_only */ true)) {
368
+    NS_ERROR("failed to open shared memory in the child");
369
+    return false;
370
+  }
371
+  if (!shm.Map(prefsLen)) {
372
+    NS_ERROR("failed to map shared memory in the child");
373
+    return false;
374
+  }
375
+  Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()),
376
+                                           prefsLen);
377
+
378
   Scheduler::SetPrefs(schedulerPrefs);
379
   mContent.Init(IOThreadChild::message_loop(),
380
                 ParentPid(),
381
diff --git dom/ipc/ContentProcess.h dom/ipc/ContentProcess.h
382
index a3854c761e10..6582c94da496 100644
383
--- dom/ipc/ContentProcess.h
384
+++ dom/ipc/ContentProcess.h
385
@@ -49,6 +49,11 @@ private:
386
   DISALLOW_EVIL_CONSTRUCTORS(ContentProcess);
387
 };
388
 
389
+#ifdef ANDROID
390
+// Android doesn't use -prefsHandle, it gets that FD another way.
391
+void SetPrefsFd(int aFd);
392
+#endif
393
+
394
 } // namespace dom
395
 } // namespace mozilla
396
 
397
diff --git ipc/chromium/src/base/process_util_win.cc ipc/chromium/src/base/process_util_win.cc
398
index 3ed54cd744ac..46667985cd71 100644
399
--- ipc/chromium/src/base/process_util_win.cc
400
+++ ipc/chromium/src/base/process_util_win.cc
401
@@ -354,6 +354,10 @@ bool LaunchApp(const std::wstring& cmdline,
402
   LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL;
403
   std::vector<HANDLE> handlesToInherit;
404
   for (HANDLE h : options.handles_to_inherit) {
405
+    if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) == 0) {
406
+      MOZ_DIAGNOSTIC_ASSERT(false, "SetHandleInformation failed");
407
+      return false;
408
+    }
409
     handlesToInherit.push_back(h);
410
   }
411
 
412
diff --git ipc/glue/GeckoChildProcessHost.cpp ipc/glue/GeckoChildProcessHost.cpp
413
index d18ed9edd4ca..3be1c51d10bb 100644
414
--- ipc/glue/GeckoChildProcessHost.cpp
415
+++ ipc/glue/GeckoChildProcessHost.cpp
416
@@ -1030,9 +1030,6 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
417
 
418
   if (!CrashReporter::IsDummy()) {
419
     PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe);
420
-# if defined(MOZ_SANDBOX)
421
-    mSandboxBroker.AddHandleToShare(reinterpret_cast<HANDLE>(h));
422
-# endif // defined(MOZ_SANDBOX)
423
     mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast<HANDLE>(h));
424
     std::string hStr = std::to_string(h);
425
     cmdLine.AppendLooseValue(UTF8ToWide(hStr));
426
@@ -1043,6 +1040,11 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
427
 
428
 # if defined(MOZ_SANDBOX)
429
   if (shouldSandboxCurrentProcess) {
430
+    // Mark the handles to inherit as inheritable.
431
+    for (HANDLE h : mLaunchOptions->handles_to_inherit) {
432
+      mSandboxBroker.AddHandleToShare(h);
433
+    }
434
+
435
     if (mSandboxBroker.LaunchApp(cmdLine.program().c_str(),
436
                                  cmdLine.command_line_string().c_str(),
437
                                  mLaunchOptions->env_map,
438
@@ -1180,7 +1182,7 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type,
439
                                             const base::file_handle_mapping_vector& fds_to_remap,
440
                                             ProcessHandle* process_handle)
441
 {
442
-  MOZ_ASSERT((fds_to_remap.size() > 0) && (fds_to_remap.size() <= 3));
443
+  MOZ_RELEASE_ASSERT((2 <= fds_to_remap.size()) && (fds_to_remap.size() <= 4));
444
   JNIEnv* const env = mozilla::jni::GetEnvForThread();
445
   MOZ_ASSERT(env);
446
 
447
@@ -1189,21 +1191,25 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type,
448
   for (int ix = 0; ix < argvSize; ix++) {
449
     jargs->SetElement(ix, jni::StringParam(argv[ix].c_str(), env));
450
   }
451
-  base::file_handle_mapping_vector::const_iterator it = fds_to_remap.begin();
452
-  int32_t ipcFd = it->first;
453
-  it++;
454
-  // If the Crash Reporter is disabled, there will not be a second file descriptor.
455
+
456
+  // XXX: this processing depends entirely on the internals of
457
+  // ContentParent::LaunchSubprocess()
458
+  // GeckoChildProcessHost::PerformAsyncLaunchInternal(), and the order in
459
+  // which they append to fds_to_remap. There must be a better way to do it.
460
+  // See bug 1440207.
461
+  int32_t prefsFd = fds_to_remap[0].first;
462
+  int32_t ipcFd = fds_to_remap[1].first;
463
   int32_t crashFd = -1;
464
   int32_t crashAnnotationFd = -1;
465
-  if (it != fds_to_remap.end() && !CrashReporter::IsDummy()) {
466
-    crashFd = it->first;
467
-    it++;
468
+  if (fds_to_remap.size() == 3) {
469
+    crashAnnotationFd = fds_to_remap[2].first;
470
   }
471
-  if (it != fds_to_remap.end()) {
472
-    crashAnnotationFd = it->first;
473
-    it++;
474
+  if (fds_to_remap.size() == 4) {
475
+    crashFd = fds_to_remap[2].first;
476
+    crashAnnotationFd = fds_to_remap[3].first;
477
   }
478
-  int32_t handle = java::GeckoProcessManager::Start(type, jargs, ipcFd, crashFd, crashAnnotationFd);
479
+
480
+  int32_t handle = java::GeckoProcessManager::Start(type, jargs, prefsFd, ipcFd, crashFd, crashAnnotationFd);
481
 
482
   if (process_handle) {
483
     *process_handle = handle;
484
diff --git ipc/glue/GeckoChildProcessHost.h ipc/glue/GeckoChildProcessHost.h
485
index 631c42066bc7..0345e221abcc 100644
486
--- ipc/glue/GeckoChildProcessHost.h
487
+++ ipc/glue/GeckoChildProcessHost.h
488
@@ -103,6 +103,16 @@ public:
489
   }
490
 #endif
491
 
492
+#ifdef XP_WIN
493
+  void AddHandleToShare(HANDLE aHandle) {
494
+    mLaunchOptions->handles_to_inherit.push_back(aHandle);
495
+  }
496
+#else
497
+  void AddFdToRemap(int aSrcFd, int aDstFd) {
498
+    mLaunchOptions->fds_to_remap.push_back(std::make_pair(aSrcFd, aDstFd));
499
+  }
500
+#endif
501
+
502
   /**
503
    * Must run on the IO thread.  Cause the OS process to exit and
504
    * ensure its OS resources are cleaned up.
505
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
506
index ba26ae1ba06b..a2535f44c72b 100644
507
--- mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl
508
+++ mobile/android/geckoview/src/main/aidl/org/mozilla/gecko/process/IChildProcess.aidl
509
@@ -12,6 +12,7 @@ import android.os.ParcelFileDescriptor;
510
 interface IChildProcess {
511
     int getPid();
512
     boolean start(in IProcessManager procMan, in String[] args, in Bundle extras,
513
-                  in ParcelFileDescriptor ipcPfd, in ParcelFileDescriptor crashReporterPfd,
514
+                  in ParcelFileDescriptor prefsPfd, in ParcelFileDescriptor ipcPfd,
515
+                  in ParcelFileDescriptor crashReporterPfd,
516
                   in ParcelFileDescriptor crashAnnotationPfd);
517
 }
518
diff --git mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
519
index dfabfd05daf0..8311920afeec 100644
520
--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
521
+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/GeckoThread.java
522
@@ -128,6 +128,7 @@ public class GeckoThread extends Thread {
523
     public static final int FLAG_PRELOAD_CHILD = 2; // Preload child during main thread start.
524
 
525
     private static final String EXTRA_ARGS = "args";
526
+    private static final String EXTRA_PREFS_FD = "prefsFd";
527
     private static final String EXTRA_IPC_FD = "ipcFd";
528
     private static final String EXTRA_CRASH_FD = "crashFd";
529
     private static final String EXTRA_CRASH_ANNOTATION_FD = "crashAnnotationFd";
530
@@ -149,7 +150,8 @@ public class GeckoThread extends Thread {
531
 
532
     private synchronized boolean init(final GeckoProfile profile, final String[] args,
533
                                       final Bundle extras, final int flags,
534
-                                      final int ipcFd, final int crashFd,
535
+                                      final int prefsFd, final int ipcFd,
536
+                                      final int crashFd,
537
                                       final int crashAnnotationFd) {
538
         ThreadUtils.assertOnUiThread();
539
         uiThreadId = android.os.Process.myTid();
540
@@ -163,6 +165,7 @@ public class GeckoThread extends Thread {
541
         mFlags = flags;
542
 
543
         mExtras = (extras != null) ? new Bundle(extras) : new Bundle(3);
544
+        mExtras.putInt(EXTRA_PREFS_FD, prefsFd);
545
         mExtras.putInt(EXTRA_IPC_FD, ipcFd);
546
         mExtras.putInt(EXTRA_CRASH_FD, crashFd);
547
         mExtras.putInt(EXTRA_CRASH_ANNOTATION_FD, crashAnnotationFd);
548
@@ -174,15 +177,16 @@ public class GeckoThread extends Thread {
549
 
550
     public static boolean initMainProcess(final GeckoProfile profile, final String[] args,
551
                                           final Bundle extras, final int flags) {
552
-        return INSTANCE.init(profile, args, extras, flags,
553
+        return INSTANCE.init(profile, args, extras, flags, /* fd */ -1,
554
                              /* fd */ -1, /* fd */ -1, /* fd */ -1);
555
     }
556
 
557
     public static boolean initChildProcess(final String[] args, final Bundle extras,
558
-                                           final int ipcFd, final int crashFd,
559
+                                           final int prefsFd, final int ipcFd,
560
+                                           final int crashFd,
561
                                            final int crashAnnotationFd) {
562
         return INSTANCE.init(/* profile */ null, args, extras, /* flags */ 0,
563
-                             ipcFd, crashFd, crashAnnotationFd);
564
+                             prefsFd, ipcFd, crashFd, crashAnnotationFd);
565
     }
566
 
567
     private static boolean canUseProfile(final Context context, final GeckoProfile profile,
568
@@ -442,6 +446,7 @@ public class GeckoThread extends Thread {
569
 
570
         // And go.
571
         GeckoLoader.nativeRun(args,
572
+                              mExtras.getInt(EXTRA_PREFS_FD, -1),
573
                               mExtras.getInt(EXTRA_IPC_FD, -1),
574
                               mExtras.getInt(EXTRA_CRASH_FD, -1),
575
                               mExtras.getInt(EXTRA_CRASH_ANNOTATION_FD, -1));
576
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
577
index b1830fd86945..ac128b651e7b 100644
578
--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java
579
+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/mozglue/GeckoLoader.java
580
@@ -463,7 +463,7 @@ public final class GeckoLoader {
581
     public static native boolean verifyCRCs(String apkName);
582
 
583
     // These methods are implemented in mozglue/android/APKOpen.cpp
584
-    public static native void nativeRun(String[] args, int ipcFd, int crashFd, int crashAnnotationFd);
585
+    public static native void nativeRun(String[] args, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd);
586
     private static native void loadGeckoLibsNative(String apkName);
587
     private static native void loadSQLiteLibsNative(String apkName);
588
     private static native void loadNSSLibsNative(String apkName);
589
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
590
index b762e1c9a3eb..dba329ba8f92 100644
591
--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java
592
+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoProcessManager.java
593
@@ -169,14 +169,14 @@ public final class GeckoProcessManager extends IProcessManager.Stub {
594
 
595
     @WrapForJNI
596
     private static int start(final String type, final String[] args,
597
-                             final int ipcFd, final int crashFd,
598
-                             final int crashAnnotationFd) {
599
-        return INSTANCE.start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ false);
600
+                             final int prefsFd, final int ipcFd,
601
+                             final int crashFd, final int crashAnnotationFd) {
602
+        return INSTANCE.start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ false);
603
     }
604
 
605
-    private int start(final String type, final String[] args, final int ipcFd,
606
-                      final int crashFd, final int crashAnnotationFd,
607
-                      final boolean retry) {
608
+    private int start(final String type, final String[] args, final int prefsFd,
609
+                      final int ipcFd, final int crashFd,
610
+                      final int crashAnnotationFd, final boolean retry) {
611
         final ChildConnection connection = getConnection(type);
612
         final IChildProcess child = connection.bind();
613
         if (child == null) {
614
@@ -184,10 +184,12 @@ public final class GeckoProcessManager extends IProcessManager.Stub {
615
         }
616
 
617
         final Bundle extras = GeckoThread.getActiveExtras();
618
+        final ParcelFileDescriptor prefsPfd;
619
         final ParcelFileDescriptor ipcPfd;
620
         final ParcelFileDescriptor crashPfd;
621
         final ParcelFileDescriptor crashAnnotationPfd;
622
         try {
623
+            prefsPfd = ParcelFileDescriptor.fromFd(prefsFd);
624
             ipcPfd = ParcelFileDescriptor.fromFd(ipcFd);
625
             crashPfd = (crashFd >= 0) ? ParcelFileDescriptor.fromFd(crashFd) : null;
626
             crashAnnotationPfd = (crashAnnotationFd >= 0) ? ParcelFileDescriptor.fromFd(crashAnnotationFd) : null;
627
@@ -198,7 +200,8 @@ public final class GeckoProcessManager extends IProcessManager.Stub {
628
 
629
         boolean started = false;
630
         try {
631
-            started = child.start(this, args, extras, ipcPfd, crashPfd, crashAnnotationPfd);
632
+            started = child.start(this, args, extras, prefsPfd, ipcPfd, crashPfd,
633
+                                  crashAnnotationPfd);
634
         } catch (final RemoteException e) {
635
         }
636
 
637
@@ -209,7 +212,7 @@ public final class GeckoProcessManager extends IProcessManager.Stub {
638
             }
639
             Log.w(LOGTAG, "Attempting to kill running child " + type);
640
             connection.unbind();
641
-            return start(type, args, ipcFd, crashFd, crashAnnotationFd, /* retry */ true);
642
+            return start(type, args, prefsFd, ipcFd, crashFd, crashAnnotationFd, /* retry */ true);
643
         }
644
 
645
         try {
646
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
647
index f1f6ce109fda..6dc19813fc10 100644
648
--- mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java
649
+++ mobile/android/geckoview/src/main/java/org/mozilla/gecko/process/GeckoServiceChildProcess.java
650
@@ -63,6 +63,7 @@ public class GeckoServiceChildProcess extends Service {
651
         public boolean start(final IProcessManager procMan,
652
                              final String[] args,
653
                              final Bundle extras,
654
+                             final ParcelFileDescriptor prefsPfd,
655
                              final ParcelFileDescriptor ipcPfd,
656
                              final ParcelFileDescriptor crashReporterPfd,
657
                              final ParcelFileDescriptor crashAnnotationPfd) {
658
@@ -74,6 +75,7 @@ public class GeckoServiceChildProcess extends Service {
659
                 sProcessManager = procMan;
660
             }
661
 
662
+            final int prefsFd = prefsPfd.detachFd();
663
             final int ipcFd = ipcPfd.detachFd();
664
             final int crashReporterFd = crashReporterPfd != null ?
665
                                         crashReporterPfd.detachFd() : -1;
666
@@ -83,7 +85,7 @@ public class GeckoServiceChildProcess extends Service {
667
             ThreadUtils.postToUiThread(new Runnable() {
668
                 @Override
669
                 public void run() {
670
-                    if (GeckoThread.initChildProcess(args, extras, ipcFd, crashReporterFd,
671
+                    if (GeckoThread.initChildProcess(args, extras, prefsFd, ipcFd, crashReporterFd,
672
                                                      crashAnnotationFd)) {
673
                         GeckoThread.launch();
674
                     }
675
diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp
676
index 330ed4a09b54..b884591c9271 100644
677
--- modules/libpref/Preferences.cpp
678
+++ modules/libpref/Preferences.cpp
679
@@ -2920,7 +2920,7 @@ public:
680
 
681
 } // namespace
682
 
683
-// A list of prefs sent early from the parent, via the command line.
684
+// A list of prefs sent early from the parent, via shared memory.
685
 static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
686
 
687
 /* static */ already_AddRefed<Preferences>
688
@@ -3081,11 +3081,130 @@ NS_IMPL_ISUPPORTS(Preferences,
689
                   nsISupportsWeakReference)
690
 
691
 /* static */ void
692
-Preferences::SetEarlyPreferences(const nsTArray<dom::Pref>* aDomPrefs)
693
+Preferences::SerializeEarlyPreferences(nsCString& aStr)
694
+{
695
+  MOZ_RELEASE_ASSERT(InitStaticMembers());
696
+
697
+  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
698
+  size_t numEarlyPrefs;
699
+  dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs);
700
+
701
+  for (unsigned int i = 0; i < numEarlyPrefs; i++) {
702
+    const char* prefName = dom::ContentPrefs::GetEarlyPref(i);
703
+    MOZ_ASSERT_IF(i > 0,
704
+                  strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0);
705
+
706
+    Pref* pref = pref_HashTableLookup(prefName);
707
+    if (!pref || !pref->MustSendToContentProcesses()) {
708
+      continue;
709
+    }
710
+
711
+    switch (pref->Type()) {
712
+      case PrefType::Bool:
713
+        boolPrefs.Append(
714
+          nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
715
+        break;
716
+      case PrefType::Int:
717
+        intPrefs.Append(
718
+          nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
719
+        break;
720
+      case PrefType::String: {
721
+        nsAutoCString value;
722
+        Preferences::GetCString(prefName, value);
723
+        stringPrefs.Append(
724
+          nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
725
+      } break;
726
+      case PrefType::None:
727
+        break;
728
+      default:
729
+        printf_stderr("preference type: %d\n", int(pref->Type()));
730
+        MOZ_CRASH();
731
+    }
732
+  }
733
+
734
+  aStr.Truncate();
735
+  aStr.Append(boolPrefs);
736
+  aStr.Append('\n');
737
+  aStr.Append(intPrefs);
738
+  aStr.Append('\n');
739
+  aStr.Append(stringPrefs);
740
+  aStr.Append('\n');
741
+  aStr.Append('\0');
742
+}
743
+
744
+/* static */ void
745
+Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen)
746
 {
747
   MOZ_ASSERT(!XRE_IsParentProcess());
748
 
749
-  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(mozilla::Move(*aDomPrefs));
750
+  MOZ_ASSERT(!gEarlyDomPrefs);
751
+  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>();
752
+
753
+  char* p = aStr;
754
+
755
+  // XXX: we assume these pref values are default values, which may not be
756
+  // true. We also assume they are unlocked. Fortunately, these prefs get reset
757
+  // properly by the first IPC message.
758
+
759
+  // Get the bool prefs.
760
+  while (*p != '\n') {
761
+    int32_t index = strtol(p, &p, 10);
762
+    MOZ_ASSERT(p[0] == ':');
763
+    p++;
764
+    int v = strtol(p, &p, 10);
765
+    MOZ_ASSERT(v == 0 || v == 1);
766
+    dom::MaybePrefValue value(dom::PrefValue(!!v));
767
+    MOZ_ASSERT(p[0] == '|');
768
+    p++;
769
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
770
+                   /* isLocked */ false,
771
+                   value,
772
+                   dom::MaybePrefValue());
773
+    gEarlyDomPrefs->AppendElement(pref);
774
+  }
775
+  p++;
776
+
777
+  // Get the int prefs.
778
+  while (*p != '\n') {
779
+    int32_t index = strtol(p, &p, 10);
780
+    MOZ_ASSERT(p[0] == ':');
781
+    p++;
782
+    dom::MaybePrefValue value(
783
+      dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
784
+    MOZ_ASSERT(p[0] == '|');
785
+    p++;
786
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
787
+                   /* isLocked */ false,
788
+                   value,
789
+                   dom::MaybePrefValue());
790
+    gEarlyDomPrefs->AppendElement(pref);
791
+  }
792
+  p++;
793
+
794
+  // Get the string prefs.
795
+  while (*p != '\n') {
796
+    int32_t index = strtol(p, &p, 10);
797
+    MOZ_ASSERT(p[0] == ':');
798
+    p++;
799
+    int32_t length = strtol(p, &p, 10);
800
+    MOZ_ASSERT(p[0] == ';');
801
+    p++;
802
+    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
803
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
804
+                   /* isLocked */ false,
805
+                   value,
806
+                   dom::MaybePrefValue());
807
+    gEarlyDomPrefs->AppendElement(pref);
808
+    p += length + 1;
809
+    MOZ_ASSERT(*(p - 1) == '|');
810
+  }
811
+  p++;
812
+
813
+  MOZ_ASSERT(*p == '\0');
814
+
815
+  // We finished parsing on a '\0'. That should be the last char in the shared
816
+  // memory.
817
+  MOZ_ASSERT(aStr + aStrLen - 1 == p);
818
 
819
 #ifdef DEBUG
820
   MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
821
@@ -4298,15 +4417,6 @@ Preferences::HasUserValue(const char* aPrefName)
822
   return pref && pref->HasUserValue();
823
 }
824
 
825
-/* static */ bool
826
-Preferences::MustSendToContentProcesses(const char* aPrefName)
827
-{
828
-  NS_ENSURE_TRUE(InitStaticMembers(), false);
829
-
830
-  Pref* pref = pref_HashTableLookup(aPrefName);
831
-  return pref && pref->MustSendToContentProcesses();
832
-}
833
-
834
 /* static */ int32_t
835
 Preferences::GetType(const char* aPrefName)
836
 {
837
diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h
838
index 1cb825ecbfe5..c149db62b525 100644
839
--- modules/libpref/Preferences.h
840
+++ modules/libpref/Preferences.h
841
@@ -41,6 +41,11 @@ class PrefValue;
842
 
843
 struct PrefsSizes;
844
 
845
+#ifdef XP_UNIX
846
+// XXX: bug 1440207 is about improving how fixed fds such as this are used.
847
+static const int kPrefsFileDescriptor = 8;
848
+#endif
849
+
850
 // Keep this in sync with PrefType in parser/src/lib.rs.
851
 enum class PrefValueKind : uint8_t
852
 {
853
@@ -230,9 +235,6 @@ public:
854
   // Whether the pref has a user value or not.
855
   static bool HasUserValue(const char* aPref);
856
 
857
-  // Must the pref be sent to content processes when they start?
858
-  static bool MustSendToContentProcesses(const char* aPref);
859
-
860
   // Adds/Removes the observer for the root pref branch. See nsIPrefBranch.idl
861
   // for details.
862
   static nsresult AddStrongObserver(nsIObserver* aObserver, const char* aPref);
863
@@ -328,11 +330,12 @@ public:
864
 
865
   // When a content process is created these methods are used to pass prefs in
866
   // bulk from the parent process. "Early" preferences are ones that are needed
867
-  // very early on in the content process's lifetime; they are passed via the
868
-  // command line. "Late" preferences are the remainder, which are passed via
869
-  // IPC message.
870
+  // very early on in the content process's lifetime; they are passed via a
871
+  // special shared memory segment. "Late" preferences are the remainder, which
872
+  // are passed via a standard IPC message.
873
+  static void SerializeEarlyPreferences(nsCString& aStr);
874
+  static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen);
875
   static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings);
876
-  static void SetEarlyPreferences(const nsTArray<dom::Pref>* aSettings);
877
   static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings);
878
 
879
   // When a single pref is changed in the parent process, these methods are
880
diff --git mozglue/android/APKOpen.cpp mozglue/android/APKOpen.cpp
881
index 5f1ef55b605e..b57192488725 100644
882
--- mozglue/android/APKOpen.cpp
883
+++ mozglue/android/APKOpen.cpp
884
@@ -392,7 +392,7 @@ FreeArgv(char** argv, int argc)
885
 }
886
 
887
 extern "C" APKOPEN_EXPORT void MOZ_JNICALL
888
-Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int ipcFd, int crashFd, int crashAnnotationFd)
889
+Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)
890
 {
891
   int argc = 0;
892
   char** argv = CreateArgvFromObjectArray(jenv, jargs, &argc);
893
@@ -407,7 +407,7 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jo
894
     gBootstrap->GeckoStart(jenv, argv, argc, sAppData);
895
     ElfLoader::Singleton.ExpectShutdown(true);
896
   } else {
897
-    gBootstrap->XRE_SetAndroidChildFds(jenv, ipcFd, crashFd, crashAnnotationFd);
898
+    gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd, crashAnnotationFd);
899
     gBootstrap->XRE_SetProcessType(argv[argc - 1]);
900
 
901
     XREChildData childData;
902
diff --git toolkit/xre/Bootstrap.cpp toolkit/xre/Bootstrap.cpp
903
index 5688519822a9..7e857969a4fb 100644
904
--- toolkit/xre/Bootstrap.cpp
905
+++ toolkit/xre/Bootstrap.cpp
906
@@ -78,8 +78,8 @@ public:
907
     ::GeckoStart(aEnv, argv, argc, aAppData);
908
   }
909
 
910
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override {
911
-    ::XRE_SetAndroidChildFds(aEnv, aIPCFd, aCrashFd, aCrashAnnotationFd);
912
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override {
913
+    ::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd, aCrashAnnotationFd);
914
   }
915
 #endif
916
 
917
diff --git toolkit/xre/Bootstrap.h toolkit/xre/Bootstrap.h
918
index 686d0a38e324..77adcef80e1f 100644
919
--- toolkit/xre/Bootstrap.h
920
+++ toolkit/xre/Bootstrap.h
921
@@ -113,7 +113,7 @@ public:
922
 #ifdef MOZ_WIDGET_ANDROID
923
   virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0;
924
 
925
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0;
926
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0;
927
 #endif
928
 
929
 #ifdef LIBFUZZER
930
diff --git toolkit/xre/nsEmbedFunctions.cpp toolkit/xre/nsEmbedFunctions.cpp
931
index 53bd2bc2eb47..83184e97ba92 100644
932
--- toolkit/xre/nsEmbedFunctions.cpp
933
+++ toolkit/xre/nsEmbedFunctions.cpp
934
@@ -243,9 +243,10 @@ GeckoProcessType sChildProcessType = GeckoProcessType_Default;
935
 
936
 #if defined(MOZ_WIDGET_ANDROID)
937
 void
938
-XRE_SetAndroidChildFds (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd)
939
+XRE_SetAndroidChildFds (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)
940
 {
941
   mozilla::jni::SetGeckoThreadEnv(env);
942
+  mozilla::dom::SetPrefsFd(prefsFd);
943
   IPC::Channel::SetClientChannelFd(ipcFd);
944
   CrashReporter::SetNotificationPipeForChild(crashFd);
945
   CrashReporter::SetCrashAnnotationPipeForChild(crashAnnotationFd);
946
diff --git widget/android/GeneratedJNIWrappers.cpp widget/android/GeneratedJNIWrappers.cpp
947
index e3f6af0cc575..4165df59f0e8 100644
948
--- widget/android/GeneratedJNIWrappers.cpp
949
+++ widget/android/GeneratedJNIWrappers.cpp
950
@@ -2355,9 +2355,9 @@ constexpr char GeckoProcessManager::GetEditableParent_t::signature[];
951
 constexpr char GeckoProcessManager::Start_t::name[];
952
 constexpr char GeckoProcessManager::Start_t::signature[];
953
 
954
-auto GeckoProcessManager::Start(mozilla::jni::String::Param a0, mozilla::jni::ObjectArray::Param a1, int32_t a2, int32_t a3, int32_t a4) -> int32_t
955
+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
956
 {
957
-    return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4);
958
+    return mozilla::jni::Method<Start_t>::Call(GeckoProcessManager::Context(), nullptr, a0, a1, a2, a3, a4, a5);
959
 }
960
 
961
 const char GeckoServiceChildProcess::name[] =
962
diff --git widget/android/GeneratedJNIWrappers.h widget/android/GeneratedJNIWrappers.h
963
index ece79ac94a71..228affa1e550 100644
964
--- widget/android/GeneratedJNIWrappers.h
965
+++ widget/android/GeneratedJNIWrappers.h
966
@@ -6696,10 +6696,11 @@ public:
967
                 mozilla::jni::ObjectArray::Param,
968
                 int32_t,
969
                 int32_t,
970
+                int32_t,
971
                 int32_t> Args;
972
         static constexpr char name[] = "start";
973
         static constexpr char signature[] =
974
-                "(Ljava/lang/String;[Ljava/lang/String;III)I";
975
+                "(Ljava/lang/String;[Ljava/lang/String;IIII)I";
976
         static const bool isStatic = true;
977
         static const mozilla::jni::ExceptionMode exceptionMode =
978
                 mozilla::jni::ExceptionMode::ABORT;
979
@@ -6709,7 +6710,7 @@ public:
980
                 mozilla::jni::DispatchTarget::CURRENT;
981
     };
982
 
983
-    static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t) -> int32_t;
984
+    static auto Start(mozilla::jni::String::Param, mozilla::jni::ObjectArray::Param, int32_t, int32_t, int32_t, int32_t) -> int32_t;
985
 
986
     static const mozilla::jni::CallingThread callingThread =
987
             mozilla::jni::CallingThread::ANY;
988
diff --git xpcom/build/nsXULAppAPI.h xpcom/build/nsXULAppAPI.h
989
index 94f6daf864c9..d6ac10d51d76 100644
990
--- xpcom/build/nsXULAppAPI.h
991
+++ xpcom/build/nsXULAppAPI.h
992
@@ -398,7 +398,7 @@ XRE_API(const char*,
993
 
994
 #if defined(MOZ_WIDGET_ANDROID)
995
 XRE_API(void,
996
-        XRE_SetAndroidChildFds, (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd))
997
+        XRE_SetAndroidChildFds, (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd))
998
 #endif // defined(MOZ_WIDGET_ANDROID)
999
 
1000
 XRE_API(void,
(-)b/www/firefox/files/patch-bug1442791 (+33 lines)
Added Link Here
1
Build Linux version of GetExecutablePathImpl() on other Unix systems
2
    
3
ANGLE system_utils* are unused in Gecko.
4
https://searchfox.org/mozilla-central/search?regexp=true&q=\bGetExecutable%28Path%7CDirectory%29\B
5
6
diff --git gfx/angle/targets/angle_common/moz.build gfx/angle/targets/angle_common/moz.build
7
index bd4b743ec0dd..3c0dbfae491a 100644
8
--- gfx/angle/targets/angle_common/moz.build
9
+++ gfx/angle/targets/angle_common/moz.build
10
@@ -118,17 +118,17 @@ SOURCES += [
11
     '../../checkout/src/common/uniform_type_info_autogen.cpp',
12
     '../../checkout/src/common/utilities.cpp',
13
 ]
14
-if CONFIG['OS_ARCH'] == 'Darwin':
15
+if CONFIG['OS_ARCH'] == 'WINNT':
16
     SOURCES += [
17
-        '../../checkout/src/common/system_utils_mac.cpp',
18
+        '../../checkout/src/common/system_utils_win.cpp',
19
     ]
20
-if CONFIG['OS_ARCH'] == 'Linux':
21
+elif CONFIG['OS_ARCH'] == 'Darwin':
22
     SOURCES += [
23
-        '../../checkout/src/common/system_utils_linux.cpp',
24
+        '../../checkout/src/common/system_utils_mac.cpp',
25
     ]
26
-if CONFIG['OS_ARCH'] == 'WINNT':
27
+else: # Android, Linux, BSDs, etc.
28
     SOURCES += [
29
-        '../../checkout/src/common/system_utils_win.cpp',
30
+        '../../checkout/src/common/system_utils_linux.cpp',
31
     ]
32
 #
33
 #LDFLAGS += [
(-)a/www/firefox/files/patch-bug1444083 (-17 lines)
Removed Link Here
1
Disable custom styling for <select> and <option> on Tier3 as well
2
3
diff --git modules/libpref/init/all.js modules/libpref/init/all.js
4
index 322d009da739..06e2fd7f664a 100644
5
--- modules/libpref/init/all.js
6
+++ modules/libpref/init/all.js
7
@@ -1359,8 +1359,8 @@ pref("dom.forms.autocomplete.formautofill", false);
8
 // Enable search in <select> dropdowns (more than 40 options)
9
 pref("dom.forms.selectSearch", false);
10
 // Allow for webpages to provide custom styling for <select>
11
-// popups. Disabled on Linux due to bug 1338283.
12
-#ifdef XP_LINUX
13
+// popups. Disabled on GTK due to bug 1338283.
14
+#ifdef MOZ_WIDGET_GTK
15
 pref("dom.forms.select.customstyling", false);
16
 #else
17
 pref("dom.forms.select.customstyling", true);
(-)b/www/firefox/files/patch-bug1448189 (+40 lines)
Added Link Here
1
Realign before using SSE2 after Skia m66 update.
2
3
diff --git gfx/skia/generate_mozbuild.py gfx/skia/generate_mozbuild.py
4
index cd52803a0a63..73679f7243f8 100755
5
--- gfx/skia/generate_mozbuild.py
6
+++ gfx/skia/generate_mozbuild.py
7
@@ -79,6 +79,14 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
8
         'skia/src/fonts/SkRemotableFontMgr.cpp',
9
     ]
10
 
11
+# Work around a crash when jumping into assembly on platforms where
12
+# Clang has 4-byte stack alignment (BSDs, Windows).
13
+if CONFIG['CPU_ARCH'] == 'x86' and CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
14
+    SOURCES['skia/src/jumper/SkJumper.cpp'].flags += [
15
+        '-mstack-alignment=16',
16
+        '-mstackrealign'
17
+    ]
18
+
19
 # We should autogenerate these SSE related flags.
20
 
21
 if CONFIG['INTEL_ARCHITECTURE'] and (CONFIG['CC_TYPE'] in ('clang', 'clang-cl', 'gcc')):
22
diff --git gfx/skia/moz.build gfx/skia/moz.build
23
index ec1e55c69026..1932882b0d7b 100755
24
--- gfx/skia/moz.build
25
+++ gfx/skia/moz.build
26
@@ -754,6 +754,14 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
27
         'skia/src/fonts/SkRemotableFontMgr.cpp',
28
     ]
29
 
30
+# Work around a crash when jumping into assembly on platforms where
31
+# Clang has 4-byte stack alignment (BSDs, Windows).
32
+if CONFIG['CPU_ARCH'] == 'x86' and CONFIG['CC_TYPE'] in ('clang', 'clang-cl'):
33
+    SOURCES['skia/src/jumper/SkJumper.cpp'].flags += [
34
+        '-mstack-alignment=16',
35
+        '-mstackrealign'
36
+    ]
37
+
38
 # We should autogenerate these SSE related flags.
39
 
40
 if CONFIG['INTEL_ARCHITECTURE'] and (CONFIG['CC_TYPE'] in ('clang', 'clang-cl', 'gcc')):
(-)a/www/firefox/files/patch-bug826985 (-171 lines)
Removed Link Here
1
commit 8024d93
2
Author: Henrik Gulbrandsen <henrik@gulbra.net>
3
Date:   Fri Jan 4 13:49:22 2013 +0100
4
5
    Bug 826985 - Support more video formats for WebRTC via libv4l2 on Linux.
6
---
7
 config/system-headers                                   |  1 +
8
 old-configure.in                                        |  7 +++++++
9
 media/webrtc/signaling/test/Makefile.in                 |  1 +
10
 .../modules/video_capture/linux/device_info_linux.cc    | 17 +++++++++++++++++
11
 .../modules/video_capture/linux/video_capture_linux.cc  | 16 +++++++++++++++-
12
 .../webrtc/modules/video_capture/video_capture.gypi     | 11 +++++++++++
13
 toolkit/library/Makefile.in                             |  1 +
14
 6 files changed, 52 insertions(+), 1 deletion(-)
15
16
diff --git config/system-headers.mozbuild config/system-headers.mozbuild
17
index e02d381a12e9..7620b4d00623 100644
18
--- config/system-headers.mozbuild
19
+++ config/system-headers.mozbuild
20
@@ -428,6 +428,7 @@ system_headers = [
21
     'libgnomeui/gnome-icon-theme.h',
22
     'libgnomeui/gnome-ui-init.h',
23
     'libutil.h',
24
+    'libv4l2.h',
25
     'limits.h',
26
     'link.h',
27
     'linux/ioprio.h',
28
diff --git old-configure.in configure.in
29
index 55e4cd1..76567b3 100644
30
--- old-configure.in
31
+++ old-configure.in
32
@@ -2558,6 +2558,9 @@ if test -n "$MOZ_WEBRTC"; then
33
     if test -n "$MOZ_X11"; then
34
       MOZ_WEBRTC_X11_LIBS="-lXext -lXdamage -lXfixes -lXcomposite"
35
     fi
36
+
37
+    dnl with libv4l2 we can support more cameras
38
+    PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2)
39
 else
40
     MOZ_SYNTH_PICO=
41
 fi
42
diff --git build/gyp.mozbuild build/gyp.mozbuild
43
index b483cd1..f1dd1f0 100644
44
--- build/gyp.mozbuild
45
+++ build/gyp.mozbuild
46
@@ -11,6 +11,7 @@ gyp_vars = {
47
     'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0,
48
     'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0,
49
     'include_pulse_audio': 1 if CONFIG['MOZ_PULSEAUDIO'] else 0,
50
+    'use_libv4l2': 1 if CONFIG['MOZ_LIBV4L2_LIBS'] else 0,
51
     # basic stuff for everything
52
     'include_internal_video_render': 0,
53
     'clang_use_chrome_plugins': 0,
54
diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
55
index 239a292..bab496c 100644
56
--- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
57
+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
58
@@ -25,6 +25,9 @@
59
 #else
60
 #include <linux/videodev2.h>
61
 #endif
62
+#ifdef HAVE_LIBV4L2
63
+#include <libv4l2.h>
64
+#endif
65
 
66
 #include "webrtc/system_wrappers/interface/ref_count.h"
67
 #include "webrtc/system_wrappers/interface/trace.h"
68
@@ -34,6 +37,15 @@
69
 #define BUF_LEN     ( 1024 * ( EVENT_SIZE + 16 ) )
70
 #endif
71
 
72
+#ifdef HAVE_LIBV4L2
73
+#define open	v4l2_open
74
+#define close	v4l2_close
75
+#define dup	v4l2_dup
76
+#define ioctl	v4l2_ioctl
77
+#define mmap	v4l2_mmap
78
+#define munmap	v4l2_munmap
79
+#endif
80
+
81
 namespace webrtc
82
 {
83
 namespace videocapturemodule
84
@@ -274,6 +286,11 @@ int32_t DeviceInfoLinux::GetDeviceName(
85
     memset(deviceNameUTF8, 0, deviceNameLength);
86
     memcpy(cameraName, cap.card, sizeof(cap.card));
87
 
88
+    if (cameraName[0] == '\0')
89
+    {
90
+        sprintf(cameraName, "Camera at /dev/video%d", deviceNumber);
91
+    }
92
+
93
     if (deviceNameLength >= strlen(cameraName))
94
     {
95
         memcpy(deviceNameUTF8, cameraName, strlen(cameraName));
96
diff --git media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
97
index 12df1b3..e9863ba 100644
98
--- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
99
+++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
100
@@ -25,6 +25,9 @@
101
 #else
102
 #include <linux/videodev2.h>
103
 #endif
104
+#ifdef HAVE_LIBV4L2
105
+#include <libv4l2.h>
106
+#endif
107
 
108
 #include <new>
109
 
110
@@ -32,6 +35,15 @@
111
 #include "webrtc/modules/video_capture/linux/video_capture_linux.h"
112
 #include "webrtc/system_wrappers/include/critical_section_wrapper.h"
113
 #include "webrtc/system_wrappers/include/trace.h"
114
+
115
+#ifdef HAVE_LIBV4L2
116
+#define open	v4l2_open
117
+#define close	v4l2_close
118
+#define dup	v4l2_dup
119
+#define ioctl	v4l2_ioctl
120
+#define mmap	v4l2_mmap
121
+#define munmap	v4l2_munmap
122
+#endif
123
 
124
 namespace webrtc {
125
 namespace videocapturemodule {
126
diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi
127
index d46b5aa..e452223 100644
128
--- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi
129
+++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi
130
@@ -7,6 +7,9 @@
131
 # be found in the AUTHORS file in the root of the source tree.
132
 
133
 {
134
+  'variables': {
135
+     'use_libv4l2%': 0,
136
+  },
137
   'targets': [
138
     {
139
       'target_name': 'video_capture_module',
140
@@ -76,6 +76,19 @@
141
                 'linux/video_capture_linux.cc',
142
                 'linux/video_capture_linux.h',
143
               ],
144
+              'conditions': [
145
+                ['use_libv4l2==1', {
146
+                  'defines': [
147
+                    'HAVE_LIBV4L2',
148
+                  ],
149
+                  'cflags_mozilla': [
150
+                    '$(MOZ_LIBV4L2_CFLAGS)',
151
+                  ],
152
+                  'libraries': [
153
+                    '-lv4l2',
154
+                  ],
155
+                }],
156
+              ],
157
             }],
158
             ['OS=="mac"', {
159
               'sources': [
160
diff --git toolkit/library/moz.build toolkit/library/moz.build
161
index 9c16ffa..1db3794 100644
162
--- toolkit/library/moz.build
163
+++ toolkit/library/moz.build
164
@@ -163,6 +163,7 @@ if CONFIG['OS_ARCH'] == 'Linux' and CONF
165
     ]
166
 
167
 OS_LIBS += CONFIG['MOZ_CAIRO_OSLIBS']
168
+OS_LIBS += CONFIG['MOZ_LIBV4L2_LIBS']
169
 OS_LIBS += CONFIG['MOZ_WEBRTC_X11_LIBS']
170
 OS_LIBS += CONFIG['MOZ_APP_EXTRA_LIBS']
171
 
(-)b/www/firefox/files/patch-z-bug1436911 (+1162 lines)
Added Link Here
1
commit 6b81d0b99f20
2
Author: Nicholas Nethercote <nnethercote@mozilla.com>
3
Date:   Thu Mar 8 15:47:24 2018 +1100
4
5
    Bug 1436911 - Avoid the early/late prefs split. r=glandium
6
    
7
    All prefs that need to be sent to a new content process are now put into the
8
    shared memory segment, and they are identified by the pref name instead of an
9
    index into a list. The old IPC used at process startup (in XPCOMInitData) is
10
    removed.
11
    
12
    Benefits:
13
    
14
    - It removes the need for the early prefs list
15
      (dom/ipc/ContentProcesses.{h,cpp}) and the associated checking, which is ugly
16
      and often trips people up (e.g. bug 1432979, bug 1439406).
17
    
18
    - Using prefnames instead of indices fixes some fragility (fixing bug 1419432).
19
    
20
    - It fixes the problem of early prefs being installed as unlocked default
21
      values even if they are locked and/or have user values.
22
    
23
    MozReview-Commit-ID: FRIzHF8Tjd
24
---
25
 dom/ipc/ContentChild.cpp        |   2 -
26
 dom/ipc/ContentParent.cpp       |   4 +-
27
 dom/ipc/ContentPrefs.cpp        | 357 ------------------------------
28
 dom/ipc/ContentPrefs.h          |  27 ---
29
 dom/ipc/ContentProcess.cpp      |   5 +-
30
 dom/ipc/PContent.ipdl           |   7 +-
31
 dom/ipc/moz.build               |   2 -
32
 layout/style/nsCSSProps.h       |   2 +-
33
 modules/libpref/Preferences.cpp | 470 ++++++++++++++++++++++------------------
34
 modules/libpref/Preferences.h   |  15 +-
35
 10 files changed, 278 insertions(+), 613 deletions(-)
36
37
diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp
38
index f61ab07b81e2..af1ef9cf4c7e 100644
39
--- dom/ipc/ContentChild.cpp
40
+++ dom/ipc/ContentChild.cpp
41
@@ -1185,8 +1185,6 @@ void
42
 ContentChild::InitXPCOM(const XPCOMInitData& aXPCOMInit,
43
                         const mozilla::dom::ipc::StructuredCloneData& aInitialData)
44
 {
45
-  Preferences::SetLatePreferences(&aXPCOMInit.prefs());
46
-
47
   // Do this as early as possible to get the parent process to initialize the
48
   // background thread since we'll likely need database information very soon.
49
   BackgroundChild::Startup();
50
diff --git dom/ipc/ContentParent.cpp dom/ipc/ContentParent.cpp
51
index 208bb47a970b..4ce5c6bf23d5 100644
52
--- dom/ipc/ContentParent.cpp
53
+++ dom/ipc/ContentParent.cpp
54
@@ -197,7 +197,6 @@
55
 
56
 #include "nsLayoutStylesheetCache.h"
57
 
58
-#include "ContentPrefs.h"
59
 #include "mozilla/Sprintf.h"
60
 
61
 #ifdef MOZ_WEBRTC
62
@@ -2009,7 +2008,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
63
 
64
   // Serialize the early prefs.
65
   nsAutoCStringN<1024> prefs;
66
-  Preferences::SerializeEarlyPreferences(prefs);
67
+  Preferences::SerializePreferences(prefs);
68
 
69
   // Set up the shared memory.
70
   base::SharedMemory shm;
71
@@ -2228,7 +2227,6 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority)
72
 
73
   XPCOMInitData xpcomInit;
74
 
75
-  Preferences::GetPreferences(&xpcomInit.prefs());
76
   nsCOMPtr<nsIIOService> io(do_GetIOService());
77
   MOZ_ASSERT(io, "No IO service?");
78
   DebugOnly<nsresult> rv = io->GetOffline(&xpcomInit.isOffline());
79
diff --git dom/ipc/ContentPrefs.cpp dom/ipc/ContentPrefs.cpp
80
deleted file mode 100644
81
index 808b797d9bee..000000000000
82
--- dom/ipc/ContentPrefs.cpp
83
+++ /dev/null
84
@@ -1,360 +0,0 @@
85
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
86
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
87
-/* This Source Code Form is subject to the terms of the Mozilla Public
88
- * License, v. 2.0. If a copy of the MPL was not distributed with this
89
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
90
-
91
-#include "ContentPrefs.h"
92
-
93
-/******************************************************************************
94
- *
95
- *           DO NOT ADD PREFS TO THIS LIST WITHOUT DOM PEER REVIEW
96
- *
97
- * This is the list of preferences that are sent to the content process on
98
- * startup. Only prefs that are required immediately upon startup should be
99
- * listed here. The first IPC message received in the content process will
100
- * contain all the other prefs. Prefs should only be listed here if they must be
101
- * read before the first IPC message is received.
102
- *
103
- ******************************************************************************/
104
-
105
-const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = {
106
-  "accessibility.monoaudio.enable",
107
-  "accessibility.mouse_focuses_formcontrol",
108
-  "accessibility.tabfocus_applies_to_xul",
109
-  "app.update.channel",
110
-  "browser.autofocus",
111
-  "browser.dom.window.dump.enabled",
112
-  "browser.sessionhistory.max_entries",
113
-  "browser.sessionhistory.max_total_viewers",
114
-#if defined(NIGHTLY_BUILD) || defined(DEBUG)
115
-  "browser.startup.record",
116
-#endif
117
-#if defined(ANDROID)
118
-  "consoleservice.logcat",
119
-#endif
120
-  "content.cors.disable",
121
-  "content.cors.no_private_data",
122
-  "content.notify.backoffcount",
123
-  "content.notify.interval",
124
-  "content.notify.ontimer",
125
-  "content.sink.enable_perf_mode",
126
-  "content.sink.event_probe_rate",
127
-  "content.sink.initial_perf_time",
128
-  "content.sink.interactive_deflect_count",
129
-  "content.sink.interactive_parse_time",
130
-  "content.sink.interactive_time",
131
-  "content.sink.pending_event_mode",
132
-  "content.sink.perf_deflect_count",
133
-  "content.sink.perf_parse_time",
134
-  "device.storage.prompt.testing",
135
-  "device.storage.writable.name",
136
-  "devtools.enabled",
137
-  "dom.allow_XUL_XBL_for_file",
138
-  "dom.allow_cut_copy",
139
-  "dom.animations-api.core.enabled",
140
-  "dom.animations-api.element-animate.enabled",
141
-  "dom.animations-api.pending-member.enabled",
142
-  "dom.enable_frame_timing",
143
-  "dom.enable_performance",
144
-  "dom.enable_performance_navigation_timing",
145
-  "dom.enable_resource_timing",
146
-  "dom.event.handling-user-input-time-limit",
147
-  "dom.event.touch.coalescing.enabled",
148
-  "dom.forms.autocomplete.formautofill",
149
-  "dom.forms.inputmode",
150
-  "dom.input.skip_cursor_move_for_same_value_set",
151
-  "dom.ipc.processPriorityManager.backgroundGracePeriodMS",
152
-  "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS",
153
-  "dom.ipc.useNativeEventProcessing.content",
154
-  "dom.max_chrome_script_run_time",
155
-  "dom.max_ext_content_script_run_time",
156
-  "dom.max_script_run_time",
157
-  "dom.mozBrowserFramesEnabled",
158
-  "dom.performance.enable_notify_performance_timing",
159
-  "dom.performance.enable_user_timing_logging",
160
-  "dom.placeholder.show_on_focus",
161
-  "dom.requestIdleCallback.enabled",
162
-  "dom.script_loader.bytecode_cache.enabled",
163
-  "dom.script_loader.bytecode_cache.strategy",
164
-  "dom.storage.testing",
165
-  "dom.url.encode_decode_hash",
166
-  "dom.url.getters_decode_hash",
167
-  "dom.use_watchdog",
168
-  "dom.vibrator.enabled",
169
-  "dom.vibrator.max_vibrate_list_len",
170
-  "dom.vibrator.max_vibrate_ms",
171
-  "dom.webcomponents.customelements.enabled",
172
-  "dom.webcomponents.shadowdom.enabled",
173
-  "focusmanager.testmode",
174
-  "font.size.inflation.disabledInMasterProcess",
175
-  "font.size.inflation.emPerLine",
176
-  "font.size.inflation.forceEnabled",
177
-  "font.size.inflation.lineThreshold",
178
-  "font.size.inflation.mappingIntercept",
179
-  "font.size.inflation.maxRatio",
180
-  "font.size.inflation.minTwips",
181
-  "font.size.systemFontScale",
182
-  "full-screen-api.allow-trusted-requests-only",
183
-  "full-screen-api.enabled",
184
-  "full-screen-api.unprefix.enabled",
185
-#ifdef FUZZING
186
-  "fuzzing.enabled",
187
-#endif
188
-  "gfx.font_rendering.opentype_svg.enabled",
189
-  "hangmonitor.timeout",
190
-  "html5.flushtimer.initialdelay",
191
-  "html5.flushtimer.subsequentdelay",
192
-  "html5.offmainthread",
193
-  "intl.charset.fallback.tld",
194
-  "intl.charset.fallback.utf8_for_file",
195
-  "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition",
196
-  "javascript.enabled",
197
-  "javascript.options.array_prototype_values",
198
-  "javascript.options.asmjs",
199
-  "javascript.options.asyncstack",
200
-  "javascript.options.baselinejit",
201
-  "javascript.options.baselinejit.threshold",
202
-  "javascript.options.baselinejit.unsafe_eager_compilation",
203
-  "javascript.options.discardSystemSource",
204
-  "javascript.options.dump_stack_on_debuggee_would_run",
205
-  "javascript.options.gczeal",
206
-  "javascript.options.gczeal.frequency",
207
-  "javascript.options.ion",
208
-  "javascript.options.ion.offthread_compilation",
209
-  "javascript.options.ion.threshold",
210
-  "javascript.options.ion.unsafe_eager_compilation",
211
-  "javascript.options.jit.full_debug_checks",
212
-  "javascript.options.native_regexp",
213
-  "javascript.options.parallel_parsing",
214
-  "javascript.options.shared_memory",
215
-  "javascript.options.spectre.index_masking",
216
-  "javascript.options.spectre.jit_to_C++_calls",
217
-  "javascript.options.spectre.object_mitigations.barriers",
218
-  "javascript.options.spectre.object_mitigations.misc",
219
-  "javascript.options.spectre.string_mitigations",
220
-  "javascript.options.spectre.value_masking",
221
-  "javascript.options.streams",
222
-  "javascript.options.strict",
223
-  "javascript.options.strict.debug",
224
-  "javascript.options.throw_on_asmjs_validation_failure",
225
-  "javascript.options.throw_on_debuggee_would_run",
226
-  "javascript.options.wasm",
227
-  "javascript.options.wasm_baselinejit",
228
-  "javascript.options.wasm_ionjit",
229
-  "javascript.options.werror",
230
-  "javascript.use_us_english_locale",
231
-  "jsloader.shareGlobal",
232
-  "layout.css.all-shorthand.enabled",
233
-  "layout.css.background-blend-mode.enabled",
234
-  "layout.css.box-decoration-break.enabled",
235
-  "layout.css.color-adjust.enabled",
236
-  "layout.css.column-span.enabled",
237
-  "layout.css.contain.enabled",
238
-  "layout.css.control-characters.visible",
239
-  "layout.css.emulate-moz-box-with-flex",
240
-  "layout.css.expensive-style-struct-assertions.enabled",
241
-  "layout.css.float-logical-values.enabled",
242
-  "layout.css.font-display.enabled",
243
-  "layout.css.font-variations.enabled",
244
-  "layout.css.frames-timing.enabled",
245
-  "layout.css.getBoxQuads.enabled",
246
-  "layout.css.grid-template-subgrid-value.enabled",
247
-  "layout.css.grid.enabled",
248
-  "layout.css.image-orientation.enabled",
249
-  "layout.css.individual-transform.enabled",
250
-  "layout.css.initial-letter.enabled",
251
-  "layout.css.isolation.enabled",
252
-  "layout.css.mix-blend-mode.enabled",
253
-  "layout.css.moz-document.content.enabled",
254
-  "layout.css.osx-font-smoothing.enabled",
255
-  "layout.css.overflow-clip-box.enabled",
256
-  "layout.css.overscroll-behavior.enabled",
257
-  "layout.css.prefixes.animations",
258
-  "layout.css.prefixes.border-image",
259
-  "layout.css.prefixes.box-sizing",
260
-  "layout.css.prefixes.device-pixel-ratio-webkit",
261
-  "layout.css.prefixes.font-features",
262
-  "layout.css.prefixes.gradients",
263
-  "layout.css.prefixes.transforms",
264
-  "layout.css.prefixes.transitions",
265
-  "layout.css.prefixes.webkit",
266
-  "layout.css.scope-pseudo.enabled",
267
-  "layout.css.scoped-style.enabled",
268
-  "layout.css.scroll-behavior.property-enabled",
269
-  "layout.css.scroll-snap.enabled",
270
-#ifdef MOZ_STYLO
271
-  "layout.css.servo.chrome.enabled",
272
-  "layout.css.servo.enabled",
273
-#endif
274
-  "layout.css.shape-outside.enabled",
275
-  "layout.css.text-align-unsafe-value.enabled",
276
-  "layout.css.text-combine-upright-digits.enabled",
277
-  "layout.css.text-combine-upright.enabled",
278
-  "layout.css.text-justify.enabled",
279
-  "layout.css.touch_action.enabled",
280
-  "layout.css.visited_links_enabled",
281
-  "layout.idle_period.required_quiescent_frames",
282
-  "layout.idle_period.time_limit",
283
-  "layout.interruptible-reflow.enabled",
284
-  "mathml.disabled",
285
-  "media.audio-max-decode-error",
286
-  "media.cache_readahead_limit",
287
-  "media.cache_resume_threshold",
288
-  "media.cache_size",
289
-  "media.clearkey.persistent-license.enabled",
290
-  "media.cubeb.backend",
291
-  "media.cubeb.sandbox",
292
-  "media.cubeb_latency_msg_frames",
293
-  "media.cubeb_latency_playback_ms",
294
-  "media.decoder-doctor.wmf-disabled-is-failure",
295
-  "media.decoder.recycle.enabled",
296
-  "media.decoder.skip-to-next-key-frame.enabled",
297
-  "media.dormant-on-pause-timeout-ms",
298
-  "media.eme.audio.blank",
299
-  "media.eme.chromium-api.video-shmems",
300
-  "media.eme.enabled",
301
-  "media.eme.video.blank",
302
-  "media.ffmpeg.enabled",
303
-  "media.ffmpeg.low-latency.enabled",
304
-  "media.ffvpx.enabled",
305
-  "media.ffvpx.low-latency.enabled",
306
-  "media.flac.enabled",
307
-  "media.forcestereo.enabled",
308
-  "media.gmp.decoder.enabled",
309
-  "media.gmp.insecure.allow",
310
-  "media.gpu-process-decoder",
311
-  "media.hls.enabled",
312
-  "media.libavcodec.allow-obsolete",
313
-  "media.memory_cache_max_size",
314
-  "media.memory_caches_combined_limit_kb",
315
-  "media.memory_caches_combined_limit_pc_sysmem",
316
-  "media.mp4.enabled",
317
-  "media.navigator.mediadatadecoder_enabled",
318
-  "media.ogg.enabled",
319
-  "media.ogg.flac.enabled",
320
-  "media.playback.warnings-as-errors",
321
-  "media.playback.warnings-as-errors.stagefright-vs-rust",
322
-  "media.resampling.enabled",
323
-  "media.resume-bkgnd-video-on-tabhover",
324
-  "media.ruin-av-sync.enabled",
325
-  "media.rust.mp4parser",
326
-  "media.rust.test_mode",
327
-  "media.seamless-looping",
328
-  "media.suspend-bkgnd-video.delay-ms",
329
-  "media.suspend-bkgnd-video.enabled",
330
-  "media.use-blank-decoder",
331
-  "media.video-max-decode-error",
332
-  "media.video_stats.enabled",
333
-  "media.videocontrols.lock-video-orientation",
334
-  "media.volume_scale",
335
-  "media.webspeech.recognition.enable",
336
-  "media.webspeech.recognition.force_enable",
337
-  "media.webspeech.synth.force_global_queue",
338
-  "media.webspeech.test.enable",
339
-  "media.webspeech.test.fake_fsm_events",
340
-  "media.webspeech.test.fake_recognition_service",
341
-  "media.wmf.allow-unsupported-resolutions",
342
-  "media.wmf.enabled",
343
-  "media.wmf.skip-blacklist",
344
-  "media.wmf.vp9.enabled",
345
-  "network.IDN.blacklist_chars",
346
-  "network.IDN.restriction_profile",
347
-  "network.IDN.use_whitelist",
348
-  "network.IDN_show_punycode",
349
-  "network.buffer.cache.count",
350
-  "network.buffer.cache.size",
351
-  "network.captive-portal-service.enabled",
352
-  "network.cookie.cookieBehavior",
353
-  "network.cookie.lifetimePolicy",
354
-  "network.dns.disablePrefetch",
355
-  "network.dns.disablePrefetchFromHTTPS",
356
-  "network.http.tailing.enabled",
357
-  "network.jar.block-remote-files",
358
-  "network.loadinfo.skip_type_assertion",
359
-  "network.notify.changed",
360
-  "network.offline-mirrors-connectivity",
361
-  "network.protocol-handler.external.jar",
362
-  "network.proxy.type",
363
-  "network.security.ports.banned",
364
-  "network.security.ports.banned.override",
365
-  "network.standard-url.enable-rust",
366
-  "network.standard-url.max-length",
367
-  "network.standard-url.punycode-host",
368
-  "network.sts.max_time_for_events_between_two_polls",
369
-  "network.sts.max_time_for_pr_close_during_shutdown",
370
-  "network.tcp.keepalive.enabled",
371
-  "network.tcp.keepalive.idle_time",
372
-  "network.tcp.keepalive.probe_count",
373
-  "network.tcp.keepalive.retry_interval",
374
-  "network.tcp.sendbuffer",
375
-  "nglayout.debug.invalidation",
376
-  "privacy.donottrackheader.enabled",
377
-  "privacy.firstparty.isolate",
378
-  "privacy.firstparty.isolate.restrict_opener_access",
379
-  "privacy.reduceTimerPrecision",
380
-  "privacy.resistFingerprinting",
381
-  "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts",
382
-  "privacy.resistFingerprinting.reduceTimerPrecision.jitter",
383
-  "privacy.resistFingerprinting.reduceTimerPrecision.microseconds",
384
-  "privacy.resistFingerprinting.target_video_res",
385
-  "privacy.resistFingerprinting.video_dropped_ratio",
386
-  "privacy.resistFingerprinting.video_frames_per_sec",
387
-  "privacy.trackingprotection.lower_network_priority",
388
-  "privacy.window.maxInnerHeight",
389
-  "privacy.window.maxInnerWidth",
390
-  "security.csp.enable",
391
-  "security.data_uri.block_toplevel_data_uri_navigations",
392
-  "security.data_uri.unique_opaque_origin",
393
-  "security.fileuri.strict_origin_policy",
394
-  "security.mixed_content.block_active_content",
395
-  "security.mixed_content.block_display_content",
396
-  "security.mixed_content.block_object_subrequest",
397
-  "security.mixed_content.hsts_priming_cache_timeout",
398
-  "security.mixed_content.send_hsts_priming",
399
-  "security.mixed_content.upgrade_display_content",
400
-  "security.mixed_content.use_hsts",
401
-  "security.sandbox.content.level",
402
-  "security.sandbox.content.tempDirSuffix",
403
-  "security.sandbox.logging.enabled",
404
-  "security.sandbox.mac.track.violations",
405
-  "security.sandbox.windows.log.stackTraceDepth",
406
-  "svg.disabled",
407
-  "svg.display-lists.hit-testing.enabled",
408
-  "svg.display-lists.painting.enabled",
409
-  "svg.new-getBBox.enabled",
410
-  "svg.path-caching.enabled",
411
-  "svg.transform-box.enabled",
412
-  "toolkit.asyncshutdown.crash_timeout",
413
-  "toolkit.asyncshutdown.log",
414
-  "toolkit.osfile.log",
415
-  "toolkit.osfile.log.redirect",
416
-  "toolkit.telemetry.enabled",
417
-  "toolkit.telemetry.idleTimeout",
418
-  "toolkit.telemetry.initDelay",
419
-  "toolkit.telemetry.log.dump",
420
-  "toolkit.telemetry.log.level",
421
-  "toolkit.telemetry.minSubsessionLength",
422
-  "toolkit.telemetry.scheduler.idleTickInterval",
423
-  "toolkit.telemetry.scheduler.tickInterval",
424
-  "toolkit.telemetry.testing.overridePreRelease",
425
-  "toolkit.telemetry.unified",
426
-  "ui.key.menuAccessKeyFocuses",
427
-  "ui.popup.disable_autohide",
428
-  "ui.use_activity_cursor",
429
-  "view_source.editor.external",
430
-  "zoom.maxPercent",
431
-  "zoom.minPercent"
432
-};
433
-
434
-const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount)
435
-{
436
-  *aCount = ArrayLength(ContentPrefs::gEarlyPrefs);
437
-  return gEarlyPrefs;
438
-}
439
-
440
-const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex)
441
-{
442
-  MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs));
443
-  return gEarlyPrefs[aIndex];
444
-}
445
diff --git dom/ipc/ContentPrefs.h dom/ipc/ContentPrefs.h
446
deleted file mode 100644
447
index 72ce8d236c11..000000000000
448
--- dom/ipc/ContentPrefs.h
449
+++ /dev/null
450
@@ -1,27 +0,0 @@
451
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
452
-/* vim: set ts=8 sts=2 et sw=2 tw=80: */
453
-/* This Source Code Form is subject to the terms of the Mozilla Public
454
- * License, v. 2.0. If a copy of the MPL was not distributed with this
455
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
456
-
457
-#ifndef mozilla_dom_ContentPrefs_h
458
-#define mozilla_dom_ContentPrefs_h
459
-
460
-// See the comment in ContentPrefs.cpp for more information.
461
-
462
-namespace mozilla {
463
-namespace dom {
464
-
465
-class ContentPrefs {
466
-public:
467
-  static const char** GetEarlyPrefs(size_t* aCount);
468
-  static const char* GetEarlyPref(size_t aIndex);
469
-
470
-private:
471
-  static const char* gEarlyPrefs[];
472
-};
473
-
474
-}
475
-}
476
-
477
-#endif
478
diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp
479
index 2441c8cb9224..c00283dc5084 100644
480
--- dom/ipc/ContentProcess.cpp
481
+++ dom/ipc/ContentProcess.cpp
482
@@ -7,7 +7,6 @@
483
 #include "mozilla/ipc/IOThreadChild.h"
484
 
485
 #include "ContentProcess.h"
486
-#include "ContentPrefs.h"
487
 #include "base/shared_memory.h"
488
 #include "mozilla/Preferences.h"
489
 #include "mozilla/Scheduler.h"
490
@@ -226,8 +225,8 @@ ContentProcess::Init(int aArgc, char* aArgv[])
491
     NS_ERROR("failed to map shared memory in the child");
492
     return false;
493
   }
494
-  Preferences::DeserializeEarlyPreferences(static_cast<char*>(shm.memory()),
495
-                                           prefsLen);
496
+  Preferences::DeserializePreferences(static_cast<char*>(shm.memory()),
497
+                                      prefsLen);
498
 
499
   Scheduler::SetPrefs(schedulerPrefs);
500
   mContent.Init(IOThreadChild::message_loop(),
501
diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl
502
index 5d077976569a..fb967ffc53a9 100644
503
--- dom/ipc/PContent.ipdl
504
+++ dom/ipc/PContent.ipdl
505
@@ -155,6 +155,12 @@ union MaybePrefValue {
506
   null_t;
507
 };
508
 
509
+// This serialization form mirrors that used in mozilla::Pref in
510
+// Preferences.cpp. The two should be kept in sync, e.g. if something is added
511
+// to one it should also be added to the other.
512
+//
513
+// Note: there is no need to pass the isSticky attribute because that's an
514
+// immutable attribute obtained from file at startup.
515
 struct Pref {
516
   nsCString name;
517
   bool isLocked;
518
@@ -273,7 +279,6 @@ struct XPCOMInitData
519
     ClipboardCapabilities clipboardCaps;
520
     DomainPolicyClone domainPolicy;
521
     OptionalURIParams userContentSheetURL;
522
-    Pref[] prefs;
523
     GfxVarUpdate[] gfxNonDefaultVarUpdates;
524
     ContentDeviceData contentDeviceData;
525
     GfxInfoFeatureStatus[] gfxFeatureStatus;
526
diff --git dom/ipc/moz.build dom/ipc/moz.build
527
index 3c5541c7791b..5e92a0d52b5d 100644
528
--- dom/ipc/moz.build
529
+++ dom/ipc/moz.build
530
@@ -26,7 +26,6 @@ EXPORTS.mozilla.dom += [
531
     'ContentBridgeParent.h',
532
     'ContentChild.h',
533
     'ContentParent.h',
534
-    'ContentPrefs.h',
535
     'ContentProcess.h',
536
     'ContentProcessHost.h',
537
     'ContentProcessManager.h',
538
@@ -59,7 +58,6 @@ UNIFIED_SOURCES += [
539
     'ContentBridgeChild.cpp',
540
     'ContentBridgeParent.cpp',
541
     'ContentParent.cpp',
542
-    'ContentPrefs.cpp',
543
     'ContentProcess.cpp',
544
     'ContentProcessHost.cpp',
545
     'ContentProcessManager.cpp',
546
diff --git layout/style/nsCSSProps.h layout/style/nsCSSProps.h
547
index dce44bf61b35..80288336a08b 100644
548
--- layout/style/nsCSSProps.h
549
+++ layout/style/nsCSSProps.h
550
@@ -645,7 +645,7 @@ public:
551
     // In the child process, assert that we're not trying to parse stylesheets
552
     // before we've gotten all our prefs.
553
     MOZ_ASSERT_IF(!XRE_IsParentProcess(),
554
-                  mozilla::Preferences::AreAllPrefsSetInContentProcess());
555
+                  mozilla::Preferences::ArePrefsInitedInContentProcess());
556
     return gPropertyEnabled[aProperty];
557
   }
558
 
559
diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp
560
index fe780686f2eb..488095f49236 100644
561
--- modules/libpref/Preferences.cpp
562
+++ modules/libpref/Preferences.cpp
563
@@ -15,7 +15,6 @@
564
 #include "mozilla/ArenaAllocator.h"
565
 #include "mozilla/ArrayUtils.h"
566
 #include "mozilla/Attributes.h"
567
-#include "mozilla/dom/ContentPrefs.h"
568
 #include "mozilla/dom/PContent.h"
569
 #include "mozilla/HashFunctions.h"
570
 #include "mozilla/Logging.h"
571
@@ -131,6 +130,29 @@ enum class PrefType : uint8_t
572
   Bool = 3,
573
 };
574
 
575
+// This is used for pref names and string pref values. We encode the string
576
+// length, then a '/', then the string chars. This encoding means there are no
577
+// special chars that are forbidden or require escaping.
578
+static void
579
+SerializeAndAppendString(const char* aChars, nsCString& aStr)
580
+{
581
+  aStr.AppendInt(uint32_t(strlen(aChars)));
582
+  aStr.Append('/');
583
+  aStr.Append(aChars);
584
+}
585
+
586
+static char*
587
+DeserializeString(char* aChars, nsCString& aStr)
588
+{
589
+  char* p = aChars;
590
+  uint32_t length = strtol(p, &p, 10);
591
+  MOZ_ASSERT(p[0] == '/');
592
+  p++; // move past the '/'
593
+  aStr.Assign(p, length);
594
+  p += length; // move past the string itself
595
+  return p;
596
+}
597
+
598
 // Keep this in sync with PrefValue in prefs_parser/src/lib.rs.
599
 union PrefValue {
600
   const char* mStringVal;
601
@@ -223,6 +245,64 @@ union PrefValue {
602
         MOZ_CRASH();
603
     }
604
   }
605
+
606
+  void SerializeAndAppend(PrefType aType, nsCString& aStr)
607
+  {
608
+    switch (aType) {
609
+      case PrefType::Bool:
610
+        aStr.Append(mBoolVal ? 'T' : 'F');
611
+        break;
612
+
613
+      case PrefType::Int:
614
+        aStr.AppendInt(mIntVal);
615
+        break;
616
+
617
+      case PrefType::String: {
618
+        SerializeAndAppendString(mStringVal, aStr);
619
+        break;
620
+      }
621
+
622
+      case PrefType::None:
623
+      default:
624
+        MOZ_CRASH();
625
+    }
626
+  }
627
+
628
+  static char* Deserialize(PrefType aType,
629
+                           char* aStr,
630
+                           dom::MaybePrefValue* aDomValue)
631
+  {
632
+    char* p = aStr;
633
+
634
+    switch (aType) {
635
+      case PrefType::Bool:
636
+        if (*p == 'T') {
637
+          *aDomValue = true;
638
+        } else if (*p == 'F') {
639
+          *aDomValue = false;
640
+        } else {
641
+          *aDomValue = false;
642
+          NS_ERROR("bad bool pref value");
643
+        }
644
+        p++;
645
+        return p;
646
+
647
+      case PrefType::Int: {
648
+        *aDomValue = int32_t(strtol(p, &p, 10));
649
+        return p;
650
+      }
651
+
652
+      case PrefType::String: {
653
+        nsCString str;
654
+        p = DeserializeString(p, str);
655
+        *aDomValue = str;
656
+        return p;
657
+      }
658
+
659
+      default:
660
+        MOZ_CRASH();
661
+    }
662
+  }
663
 };
664
 
665
 #ifdef DEBUG
666
@@ -694,6 +774,159 @@ public:
667
     return false;
668
   }
669
 
670
+  // Prefs are serialized in a manner that mirrors dom::Pref. The two should be
671
+  // kept in sync. E.g. if something is added to one it should also be added to
672
+  // the other. (It would be nice to be able to use the code generated from
673
+  // IPDL for serializing dom::Pref here instead of writing by hand this
674
+  // serialization/deserialization. Unfortunately, that generated code is
675
+  // difficult to use directly, outside of the IPDL IPC code.)
676
+  //
677
+  // The grammar for the serialized prefs has the following form.
678
+  //
679
+  // <pref>         = <type> <locked> ':' <name> ':' <value>? ':' <value>? '\n'
680
+  // <type>         = 'B' | 'I' | 'S'
681
+  // <locked>       = 'L' | '-'
682
+  // <name>         = <string-value>
683
+  // <value>        = <bool-value> | <int-value> | <string-value>
684
+  // <bool-value>   = 'T' | 'F'
685
+  // <int-value>    = an integer literal accepted by strtol()
686
+  // <string-value> = <int-value> '/' <chars>
687
+  // <chars>        = any char sequence of length dictated by the preceding
688
+  //                  <int-value>.
689
+  //
690
+  // No whitespace is tolerated between tokens. <type> must match the types of
691
+  // the values.
692
+  //
693
+  // The serialization is text-based, rather than binary, for the following
694
+  // reasons.
695
+  //
696
+  // - The size difference wouldn't be much different between text-based and
697
+  //   binary. Most of the space is for strings (pref names and string pref
698
+  //   values), which would be the same in both styles. And other differences
699
+  //   would be minimal, e.g. small integers are shorter in text but long
700
+  //   integers are longer in text.
701
+  //
702
+  // - Likewise, speed differences should be negligible.
703
+  //
704
+  // - It's much easier to debug a text-based serialization. E.g. you can
705
+  //   print it and inspect it easily in a debugger.
706
+  //
707
+  // Examples of unlocked boolean prefs:
708
+  // - "B-:8/my.bool1:F:T\n"
709
+  // - "B-:8/my.bool2:F:\n"
710
+  // - "B-:8/my.bool3::T\n"
711
+  //
712
+  // Examples of locked integer prefs:
713
+  // - "IL:7/my.int1:0:1\n"
714
+  // - "IL:7/my.int2:123:\n"
715
+  // - "IL:7/my.int3::-99\n"
716
+  //
717
+  // Examples of unlocked string prefs:
718
+  // - "S-:10/my.string1:3/abc:4/wxyz\n"
719
+  // - "S-:10/my.string2:5/1.234:\n"
720
+  // - "S-:10/my.string3::7/string!\n"
721
+
722
+  void SerializeAndAppend(nsCString& aStr)
723
+  {
724
+    switch (Type()) {
725
+      case PrefType::Bool:
726
+        aStr.Append('B');
727
+        break;
728
+
729
+      case PrefType::Int:
730
+        aStr.Append('I');
731
+        break;
732
+
733
+      case PrefType::String: {
734
+        aStr.Append('S');
735
+        break;
736
+      }
737
+
738
+      case PrefType::None:
739
+      default:
740
+        MOZ_CRASH();
741
+    }
742
+
743
+    aStr.Append(mIsLocked ? 'L' : '-');
744
+    aStr.Append(':');
745
+
746
+    SerializeAndAppendString(mName, aStr);
747
+    aStr.Append(':');
748
+
749
+    if (mHasDefaultValue) {
750
+      mDefaultValue.SerializeAndAppend(Type(), aStr);
751
+    }
752
+    aStr.Append(':');
753
+
754
+    if (mHasUserValue) {
755
+      mUserValue.SerializeAndAppend(Type(), aStr);
756
+    }
757
+    aStr.Append('\n');
758
+  }
759
+
760
+  static char* Deserialize(char* aStr, dom::Pref* aDomPref)
761
+  {
762
+    char* p = aStr;
763
+
764
+    // The type.
765
+    PrefType type;
766
+    if (*p == 'B') {
767
+      type = PrefType::Bool;
768
+    } else if (*p == 'I') {
769
+      type = PrefType::Int;
770
+    } else if (*p == 'S') {
771
+      type = PrefType::String;
772
+    } else {
773
+      NS_ERROR("bad pref type");
774
+      type = PrefType::None;
775
+    }
776
+    p++; // move past the type char
777
+
778
+    // Locked?
779
+    bool isLocked;
780
+    if (*p == 'L') {
781
+      isLocked = true;
782
+    } else if (*p == '-') {
783
+      isLocked = false;
784
+    } else {
785
+      NS_ERROR("bad pref locked status");
786
+      isLocked = false;
787
+    }
788
+    p++; // move past the isLocked char
789
+
790
+    MOZ_ASSERT(*p == ':');
791
+    p++; // move past the ':'
792
+
793
+    // The pref name.
794
+    nsCString name;
795
+    p = DeserializeString(p, name);
796
+
797
+    MOZ_ASSERT(*p == ':');
798
+    p++; // move past the ':' preceding the default value
799
+
800
+    dom::MaybePrefValue maybeDefaultValue;
801
+    if (*p != ':') {
802
+      dom::PrefValue defaultValue;
803
+      p = PrefValue::Deserialize(type, p, &maybeDefaultValue);
804
+    }
805
+
806
+    MOZ_ASSERT(*p == ':');
807
+    p++; // move past the ':' between the default and user values
808
+
809
+    dom::MaybePrefValue maybeUserValue;
810
+    if (*p != '\n') {
811
+      dom::PrefValue userValue;
812
+      p = PrefValue::Deserialize(type, p, &maybeUserValue);
813
+    }
814
+
815
+    MOZ_ASSERT(*p == '\n');
816
+    p++; // move past the '\n' following the user value
817
+
818
+    *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue);
819
+
820
+    return p;
821
+  }
822
+
823
   void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes)
824
   {
825
     // Note: mName is allocated in gPrefNameArena, measured elsewhere.
826
@@ -880,41 +1113,9 @@ pref_savePrefs()
827
 
828
 #ifdef DEBUG
829
 
830
-// For content processes, what prefs have been initialized?
831
-enum class ContentProcessPhase
832
-{
833
-  eNoPrefsSet,
834
-  eEarlyPrefsSet,
835
-  eEarlyAndLatePrefsSet,
836
-};
837
-
838
 // Note that this never changes in the parent process, and is only read in
839
 // content processes.
840
-static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet;
841
-
842
-struct StringComparator
843
-{
844
-  const char* mPrefName;
845
-
846
-  explicit StringComparator(const char* aPrefName)
847
-    : mPrefName(aPrefName)
848
-  {
849
-  }
850
-
851
-  int operator()(const char* aPrefName) const
852
-  {
853
-    return strcmp(mPrefName, aPrefName);
854
-  }
855
-};
856
-
857
-static bool
858
-IsEarlyPref(const char* aPrefName)
859
-{
860
-  size_t prefsLen;
861
-  size_t found;
862
-  const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen);
863
-  return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found);
864
-}
865
+static bool gContentProcessPrefsAreInited = false;
866
 
867
 #endif // DEBUG
868
 
869
@@ -923,23 +1124,7 @@ pref_HashTableLookupInner(const char* aPrefName)
870
 {
871
   MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
872
 
873
-#ifdef DEBUG
874
-  if (!XRE_IsParentProcess()) {
875
-    if (gPhase == ContentProcessPhase::eNoPrefsSet) {
876
-      MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set",
877
-                              aPrefName);
878
-    }
879
-
880
-    if (gPhase == ContentProcessPhase::eEarlyPrefsSet &&
881
-        !IsEarlyPref(aPrefName)) {
882
-      // If you hit this crash, you have an early access of a non-early pref.
883
-      // Consider moving the access later or add the pref to the whitelist of
884
-      // early prefs in ContentPrefs.cpp and get review from a DOM peer.
885
-      MOZ_CRASH_UNSAFE_PRINTF(
886
-        "accessing non-early pref %s before late prefs are set", aPrefName);
887
-    }
888
-  }
889
-#endif
890
+  MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited);
891
 
892
   return static_cast<PrefEntry*>(gHashTable->Search(aPrefName));
893
 }
894
@@ -2932,8 +3117,8 @@ public:
895
 
896
 } // namespace
897
 
898
-// A list of prefs sent early from the parent, via shared memory.
899
-static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
900
+// A list of changed prefs sent from the parent via shared memory.
901
+static InfallibleTArray<dom::Pref>* gChangedDomPrefs;
902
 
903
 static const char kTelemetryPref[] = "toolkit.telemetry.enabled";
904
 static const char kChannelPref[] = "app.update.channel";
905
@@ -3050,12 +3235,12 @@ Preferences::GetInstanceForService()
906
   }
907
 
908
   if (!XRE_IsParentProcess()) {
909
-    MOZ_ASSERT(gEarlyDomPrefs);
910
-    for (unsigned int i = 0; i < gEarlyDomPrefs->Length(); i++) {
911
-      Preferences::SetPreference(gEarlyDomPrefs->ElementAt(i));
912
+    MOZ_ASSERT(gChangedDomPrefs);
913
+    for (unsigned int i = 0; i < gChangedDomPrefs->Length(); i++) {
914
+      Preferences::SetPreference(gChangedDomPrefs->ElementAt(i));
915
     }
916
-    delete gEarlyDomPrefs;
917
-    gEarlyDomPrefs = nullptr;
918
+    delete gChangedDomPrefs;
919
+    gChangedDomPrefs = nullptr;
920
 
921
   } else {
922
     // Check if there is a deployment configuration file. If so, set up the
923
@@ -3179,149 +3364,44 @@ NS_IMPL_ISUPPORTS(Preferences,
924
                   nsISupportsWeakReference)
925
 
926
 /* static */ void
927
-Preferences::SerializeEarlyPreferences(nsCString& aStr)
928
+Preferences::SerializePreferences(nsCString& aStr)
929
 {
930
   MOZ_RELEASE_ASSERT(InitStaticMembers());
931
 
932
-  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
933
-  size_t numEarlyPrefs;
934
-  dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs);
935
-
936
-  for (unsigned int i = 0; i < numEarlyPrefs; i++) {
937
-    const char* prefName = dom::ContentPrefs::GetEarlyPref(i);
938
-    MOZ_ASSERT_IF(i > 0,
939
-                  strcmp(prefName, dom::ContentPrefs::GetEarlyPref(i - 1)) > 0);
940
-
941
-    Pref* pref = pref_HashTableLookup(prefName);
942
-    if (!pref || !pref->MustSendToContentProcesses()) {
943
-      continue;
944
-    }
945
+  aStr.Truncate();
946
 
947
-    switch (pref->Type()) {
948
-      case PrefType::Bool:
949
-        boolPrefs.Append(
950
-          nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
951
-        break;
952
-      case PrefType::Int:
953
-        intPrefs.Append(
954
-          nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
955
-        break;
956
-      case PrefType::String: {
957
-        nsAutoCString value;
958
-        Preferences::GetCString(prefName, value);
959
-        stringPrefs.Append(
960
-          nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
961
-      } break;
962
-      case PrefType::None:
963
-        break;
964
-      default:
965
-        printf_stderr("preference type: %d\n", int(pref->Type()));
966
-        MOZ_CRASH();
967
+  for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) {
968
+    Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref;
969
+    if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) {
970
+      pref->SerializeAndAppend(aStr);
971
     }
972
   }
973
 
974
-  aStr.Truncate();
975
-  aStr.Append(boolPrefs);
976
-  aStr.Append('\n');
977
-  aStr.Append(intPrefs);
978
-  aStr.Append('\n');
979
-  aStr.Append(stringPrefs);
980
-  aStr.Append('\n');
981
   aStr.Append('\0');
982
 }
983
 
984
 /* static */ void
985
-Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen)
986
+Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen)
987
 {
988
   MOZ_ASSERT(!XRE_IsParentProcess());
989
 
990
-  MOZ_ASSERT(!gEarlyDomPrefs);
991
-  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>();
992
+  MOZ_ASSERT(!gChangedDomPrefs);
993
+  gChangedDomPrefs = new InfallibleTArray<dom::Pref>();
994
 
995
   char* p = aStr;
996
-
997
-  // XXX: we assume these pref values are default values, which may not be
998
-  // true. We also assume they are unlocked. Fortunately, these prefs get reset
999
-  // properly by the first IPC message.
1000
-
1001
-  // Get the bool prefs.
1002
-  while (*p != '\n') {
1003
-    int32_t index = strtol(p, &p, 10);
1004
-    MOZ_ASSERT(p[0] == ':');
1005
-    p++;
1006
-    int v = strtol(p, &p, 10);
1007
-    MOZ_ASSERT(v == 0 || v == 1);
1008
-    dom::MaybePrefValue value(dom::PrefValue(!!v));
1009
-    MOZ_ASSERT(p[0] == '|');
1010
-    p++;
1011
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1012
-                   /* isLocked */ false,
1013
-                   value,
1014
-                   dom::MaybePrefValue());
1015
-    gEarlyDomPrefs->AppendElement(pref);
1016
-  }
1017
-  p++;
1018
-
1019
-  // Get the int prefs.
1020
-  while (*p != '\n') {
1021
-    int32_t index = strtol(p, &p, 10);
1022
-    MOZ_ASSERT(p[0] == ':');
1023
-    p++;
1024
-    dom::MaybePrefValue value(
1025
-      dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
1026
-    MOZ_ASSERT(p[0] == '|');
1027
-    p++;
1028
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1029
-                   /* isLocked */ false,
1030
-                   value,
1031
-                   dom::MaybePrefValue());
1032
-    gEarlyDomPrefs->AppendElement(pref);
1033
-  }
1034
-  p++;
1035
-
1036
-  // Get the string prefs.
1037
-  while (*p != '\n') {
1038
-    int32_t index = strtol(p, &p, 10);
1039
-    MOZ_ASSERT(p[0] == ':');
1040
-    p++;
1041
-    int32_t length = strtol(p, &p, 10);
1042
-    MOZ_ASSERT(p[0] == ';');
1043
-    p++;
1044
-    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
1045
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1046
-                   /* isLocked */ false,
1047
-                   value,
1048
-                   dom::MaybePrefValue());
1049
-    gEarlyDomPrefs->AppendElement(pref);
1050
-    p += length + 1;
1051
-    MOZ_ASSERT(*(p - 1) == '|');
1052
-  }
1053
-  p++;
1054
-
1055
-  MOZ_ASSERT(*p == '\0');
1056
+  while (*p != '\0') {
1057
+    dom::Pref pref;
1058
+    p = Pref::Deserialize(p, &pref);
1059
+    gChangedDomPrefs->AppendElement(pref);
1060
+  }
1061
 
1062
   // We finished parsing on a '\0'. That should be the last char in the shared
1063
-  // memory.
1064
-  MOZ_ASSERT(aStr + aStrLen - 1 == p);
1065
-
1066
-#ifdef DEBUG
1067
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
1068
-  gPhase = ContentProcessPhase::eEarlyPrefsSet;
1069
-#endif
1070
-}
1071
-
1072
-/* static */ void
1073
-Preferences::SetLatePreferences(const nsTArray<dom::Pref>* aDomPrefs)
1074
-{
1075
-  MOZ_ASSERT(!XRE_IsParentProcess());
1076
-
1077
-  for (unsigned int i = 0; i < aDomPrefs->Length(); i++) {
1078
-    Preferences::SetPreference(aDomPrefs->ElementAt(i));
1079
-  }
1080
+  // memory. (aPrefsLen includes the '\0'.)
1081
+  MOZ_ASSERT(p == aStr + aPrefsLen - 1);
1082
 
1083
 #ifdef DEBUG
1084
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet);
1085
-  gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet;
1086
+  MOZ_ASSERT(!gContentProcessPrefsAreInited);
1087
+  gContentProcessPrefsAreInited = true;
1088
 #endif
1089
 }
1090
 
1091
@@ -3558,36 +3638,12 @@ Preferences::GetPreference(dom::Pref* aDomPref)
1092
   }
1093
 }
1094
 
1095
-void
1096
-Preferences::GetPreferences(InfallibleTArray<dom::Pref>* aDomPrefs)
1097
-{
1098
-  MOZ_ASSERT(XRE_IsParentProcess());
1099
-  MOZ_ASSERT(NS_IsMainThread());
1100
-
1101
-  aDomPrefs->SetCapacity(gHashTable->EntryCount());
1102
-  for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) {
1103
-    Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref;
1104
-
1105
-    if (!pref->MustSendToContentProcesses()) {
1106
-      // The pref value hasn't changed since it was initialized at startup.
1107
-      // Don't bother sending it, because the content process will initialize
1108
-      // it the same way.
1109
-      continue;
1110
-    }
1111
-
1112
-    if (pref->HasAdvisablySizedValues()) {
1113
-      dom::Pref* setting = aDomPrefs->AppendElement();
1114
-      pref->ToDomPref(setting);
1115
-    }
1116
-  }
1117
-}
1118
-
1119
 #ifdef DEBUG
1120
 bool
1121
-Preferences::AreAllPrefsSetInContentProcess()
1122
+Preferences::ArePrefsInitedInContentProcess()
1123
 {
1124
   MOZ_ASSERT(!XRE_IsParentProcess());
1125
-  return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet;
1126
+  return gContentProcessPrefsAreInited;
1127
 }
1128
 #endif
1129
 
1130
diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h
1131
index 0d976483daae..901425b5b663 100644
1132
--- modules/libpref/Preferences.h
1133
+++ modules/libpref/Preferences.h
1134
@@ -328,15 +328,10 @@ public:
1135
                                    const char* aPref,
1136
                                    float aDefault = 0.0f);
1137
 
1138
-  // When a content process is created these methods are used to pass prefs in
1139
-  // bulk from the parent process. "Early" preferences are ones that are needed
1140
-  // very early on in the content process's lifetime; they are passed via a
1141
-  // special shared memory segment. "Late" preferences are the remainder, which
1142
-  // are passed via a standard IPC message.
1143
-  static void SerializeEarlyPreferences(nsCString& aStr);
1144
-  static void DeserializeEarlyPreferences(char* aStr, size_t aStrLen);
1145
-  static void GetPreferences(InfallibleTArray<dom::Pref>* aSettings);
1146
-  static void SetLatePreferences(const nsTArray<dom::Pref>* aSettings);
1147
+  // When a content process is created these methods are used to pass changed
1148
+  // prefs in bulk from the parent process, via shared memory.
1149
+  static void SerializePreferences(nsCString& aStr);
1150
+  static void DeserializePreferences(char* aStr, size_t aPrefsLen);
1151
 
1152
   // When a single pref is changed in the parent process, these methods are
1153
   // used to pass the update to content processes.
1154
@@ -344,7 +339,7 @@ public:
1155
   static void SetPreference(const dom::Pref& aPref);
1156
 
1157
 #ifdef DEBUG
1158
-  static bool AreAllPrefsSetInContentProcess();
1159
+  static bool ArePrefsInitedInContentProcess();
1160
 #endif
1161
 
1162
   static void AddSizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf,
(-)b/www/firefox/files/patch-z-bug517422 (-12 / +12 lines)
Lines 160-166 diff --git dom/media/moz.build dom/media/moz.build Link Here
160
index 86b051c58d33..fb6186dce78b 100644
160
index 86b051c58d33..fb6186dce78b 100644
161
--- dom/media/moz.build
161
--- dom/media/moz.build
162
+++ dom/media/moz.build
162
+++ dom/media/moz.build
163
@@ -318,6 +318,21 @@ if CONFIG['MOZ_WEBRTC']:
163
@@ -326,6 +326,21 @@ if CONFIG['MOZ_WEBRTC']:
164
 
164
 
165
 DEFINES['MOZILLA_INTERNAL_API'] = True
165
 DEFINES['MOZILLA_INTERNAL_API'] = True
166
 
166
 
Lines 179-194 index 86b051c58d33..fb6186dce78b 100644 Link Here
179
+if CONFIG['MOZ_SYSTEM_SOUNDTOUCH']:
179
+if CONFIG['MOZ_SYSTEM_SOUNDTOUCH']:
180
+    CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS']
180
+    CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS']
181
+
181
+
182
 if CONFIG['MOZ_ANDROID_HLS_SUPPORT'] and CONFIG['MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE']:
182
 if CONFIG['MOZ_ANDROID_HLS_SUPPORT']:
183
     DEFINES['MOZ_ANDROID_HLS_SUPPORT'] = True
183
     DEFINES['MOZ_ANDROID_HLS_SUPPORT'] = True
184
 
184
 
185
diff --git dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
185
diff --git dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
186
index 078f6ea5ef60..c600db067539 100644
186
index 078f6ea5ef60..c600db067539 100644
187
--- dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
187
--- dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
188
+++ dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
188
+++ dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp
189
@@ -11,9 +11,13 @@
189
@@ -15,9 +15,13 @@
190
 #include "prmem.h"
190
 #include <windows.h>
191
 #include "prlink.h"
191
 #endif
192
 
192
 
193
+#ifdef MOZ_SYSTEM_SOUNDTOUCH
193
+#ifdef MOZ_SYSTEM_SOUNDTOUCH
194
+#include "nsXPCOMPrivate.h" // for XUL_DLL
194
+#include "nsXPCOMPrivate.h" // for XUL_DLL
Lines 200-206 index 078f6ea5ef60..c600db067539 100644 Link Here
200
 
200
 
201
 namespace mozilla {
201
 namespace mozilla {
202
 
202
 
203
@@ -54,6 +58,12 @@ FFVPXRuntimeLinker::Init()
203
@@ -64,6 +68,12 @@ FFVPXRuntimeLinker::Init()
204
 
204
 
205
   sLinkStatus = LinkStatus_FAILED;
205
   sLinkStatus = LinkStatus_FAILED;
206
 
206
 
Lines 212-224 index 078f6ea5ef60..c600db067539 100644 Link Here
212
+#else
212
+#else
213
   // We retrieve the path of the lgpllibs library as this is where mozavcodec
213
   // We retrieve the path of the lgpllibs library as this is where mozavcodec
214
   // and mozavutil libs are located.
214
   // and mozavutil libs are located.
215
   char* lgpllibsname = PR_GetLibraryName(nullptr, "lgpllibs");
215
   PathString lgpllibsname = GetLibraryName(nullptr, "lgpllibs");
216
@@ -64,6 +74,7 @@ FFVPXRuntimeLinker::Init()
216
@@ -73,6 +83,7 @@ FFVPXRuntimeLinker::Init()
217
     PR_GetLibraryFilePathname(lgpllibsname,
217
   PathString path =
218
                               (PRFuncPtr)&soundtouch::SoundTouch::getVersionId);
218
     GetLibraryFilePathname(lgpllibsname.get(),
219
   PR_FreeLibraryName(lgpllibsname);
219
                            (PRFuncPtr)&soundtouch::SoundTouch::getVersionId);
220
+#endif
220
+#endif
221
   if (!path) {
221
   if (path.IsEmpty()) {
222
     return false;
222
     return false;
223
   }
223
   }
224
diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA
224
diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA

Return to bug 226476