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.1
5
PORTVERSION=	60.0b5
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 = 1521151925
1
TIMESTAMP = 1520629428
2
SHA256 (xpi/firefox-i18n-59.0.1/ach.xpi) = ecd1ba29435dd19943d2bdd38af4d65de1499e2a237e6d3a79288b9d141bb56a
2
SHA256 (xpi/firefox-i18n-60.0b5/ach.xpi) = b7cf5a7782fe5ea3dfb2b0b84fbbddf1073baa5c761f693bda8b6210f9764ab4
3
SIZE (xpi/firefox-i18n-59.0.1/ach.xpi) = 439227
3
SIZE (xpi/firefox-i18n-60.0b5/ach.xpi) = 448286
4
SHA256 (xpi/firefox-i18n-59.0.1/af.xpi) = 917d879386cf361976fc0ee7bd1c0e0595066b4d4ce69aeb5f22f4ab3ababf6d
4
SHA256 (xpi/firefox-i18n-60.0b5/af.xpi) = 4a681f2f1d50ae82c9e4800837191b535183339ee2548b6210dd6359a3579f17
5
SIZE (xpi/firefox-i18n-59.0.1/af.xpi) = 436731
5
SIZE (xpi/firefox-i18n-60.0b5/af.xpi) = 445111
6
SHA256 (xpi/firefox-i18n-59.0.1/an.xpi) = 7b0201eb9da4606f27381d684a15b5684a2db3251e7e97c27e3bc1ee2f109fbe
6
SHA256 (xpi/firefox-i18n-60.0b5/an.xpi) = 1e276b80b69be1b4ca0c29f2ee4be04be2087d5ef5e9a61f9f654513065d25b0
7
SIZE (xpi/firefox-i18n-59.0.1/an.xpi) = 463405
7
SIZE (xpi/firefox-i18n-60.0b5/an.xpi) = 471885
8
SHA256 (xpi/firefox-i18n-59.0.1/ar.xpi) = 0674aa88c32b67c70d089bcf2798f9b5e407cb660da2cd3ddd8809da25be1692
8
SHA256 (xpi/firefox-i18n-60.0b5/ar.xpi) = f7075ce587819a86ddc67560326ae87173b11d80c0797a7ef7211059155f9a4a
9
SIZE (xpi/firefox-i18n-59.0.1/ar.xpi) = 486633
9
SIZE (xpi/firefox-i18n-60.0b5/ar.xpi) = 496781
10
SHA256 (xpi/firefox-i18n-59.0.1/as.xpi) = d413a03fb978ee2eabaf120522fd673d1ce428b8ee6cfc0fc07a31bef26609f5
10
SHA256 (xpi/firefox-i18n-60.0b5/as.xpi) = ea88703b732fc5d38b6d6faa24d0ca200b804ab6452f38f94bc22a790bd74b6f
11
SIZE (xpi/firefox-i18n-59.0.1/as.xpi) = 483301
11
SIZE (xpi/firefox-i18n-60.0b5/as.xpi) = 488768
12
SHA256 (xpi/firefox-i18n-59.0.1/ast.xpi) = 956449e1fded28144ab8e318bc1a5f3567cef659d02a7a962cf61aa0b64d54a0
12
SHA256 (xpi/firefox-i18n-60.0b5/ast.xpi) = 9a9a8862d04cd734056703a7a37d75ae47812a91ac882b36b65d1eab1cc830bb
13
SIZE (xpi/firefox-i18n-59.0.1/ast.xpi) = 454342
13
SIZE (xpi/firefox-i18n-60.0b5/ast.xpi) = 463358
14
SHA256 (xpi/firefox-i18n-59.0.1/az.xpi) = 257266c1a8a8498722eacb20dc37ccdea9da50a3069762f756f0539c235e6a1d
14
SHA256 (xpi/firefox-i18n-60.0b5/az.xpi) = 441509188e6802473385abf007dc0054eab8fa8a3ae967fd9552d004a5de62f6
15
SIZE (xpi/firefox-i18n-59.0.1/az.xpi) = 464270
15
SIZE (xpi/firefox-i18n-60.0b5/az.xpi) = 474971
16
SHA256 (xpi/firefox-i18n-59.0.1/be.xpi) = a83112c8d36c659ef733a47fc40e64d9015ed70e213814954d5761633c2cf30b
16
SHA256 (xpi/firefox-i18n-60.0b5/be.xpi) = 2964abfae0dc5e5426ca3f76fec4bc8d4c84a5d458143ec4476e2f8c9d64d974
17
SIZE (xpi/firefox-i18n-59.0.1/be.xpi) = 517059
17
SIZE (xpi/firefox-i18n-60.0b5/be.xpi) = 527011
18
SHA256 (xpi/firefox-i18n-59.0.1/bg.xpi) = 303749c1af03c5eb5304135849513f066d4ed2b276667edafe63405a85fa4a84
18
SHA256 (xpi/firefox-i18n-60.0b5/bg.xpi) = 7e8d92eafddee1219ae10252a28364f42b5552e0b12d55baeea278434956bc6a
19
SIZE (xpi/firefox-i18n-59.0.1/bg.xpi) = 508613
19
SIZE (xpi/firefox-i18n-60.0b5/bg.xpi) = 519364
20
SHA256 (xpi/firefox-i18n-59.0.1/bn-BD.xpi) = 13cc00f1bcb4feb573f2d2e68e556af4e01e3240c038b2e3b4b03ee6befc8f85
20
SHA256 (xpi/firefox-i18n-60.0b5/bn-BD.xpi) = fad38c9616ae78fe05ff15086ea71edaba85158e663012b385956f465f31ed29
21
SIZE (xpi/firefox-i18n-59.0.1/bn-BD.xpi) = 526352
21
SIZE (xpi/firefox-i18n-60.0b5/bn-BD.xpi) = 535934
22
SHA256 (xpi/firefox-i18n-59.0.1/bn-IN.xpi) = 9075e2b278805451b4b52456ee954cea22740ceb63b82304b22cefd0b82b6848
22
SHA256 (xpi/firefox-i18n-60.0b5/bn-IN.xpi) = b1249a21dc0dad013129c94704bb21738a48750f57b2f0be59b7272c6e054cea
23
SIZE (xpi/firefox-i18n-59.0.1/bn-IN.xpi) = 510797
23
SIZE (xpi/firefox-i18n-60.0b5/bn-IN.xpi) = 521685
24
SHA256 (xpi/firefox-i18n-59.0.1/br.xpi) = 74a20a0dbff85f72af70fa988990c7deadf38ba034c0706500538debf3545e84
24
SHA256 (xpi/firefox-i18n-60.0b5/br.xpi) = 43285a9247553958c7da682c19c6199a09103a9bff78c0afda2933eba2c71456
25
SIZE (xpi/firefox-i18n-59.0.1/br.xpi) = 451719
25
SIZE (xpi/firefox-i18n-60.0b5/br.xpi) = 461123
26
SHA256 (xpi/firefox-i18n-59.0.1/bs.xpi) = 28f0a46f87dfebda97dafdc299164d6b24379019a82c458e68dfa3e8363faf03
26
SHA256 (xpi/firefox-i18n-60.0b5/bs.xpi) = ac7da15b195864c924742deaf88cb164de5144365c38b44408c23e0d06831ec1
27
SIZE (xpi/firefox-i18n-59.0.1/bs.xpi) = 457859
27
SIZE (xpi/firefox-i18n-60.0b5/bs.xpi) = 467820
28
SHA256 (xpi/firefox-i18n-59.0.1/ca.xpi) = 97953e7ef3bdbadb386ef306d8be8f5ec28f9c012e48f9875855c25c044dc270
28
SHA256 (xpi/firefox-i18n-60.0b5/ca.xpi) = 58104f74da3a9d65f8965b8593197a8c91c9b2425fac7df2887e565b41f57793
29
SIZE (xpi/firefox-i18n-59.0.1/ca.xpi) = 464912
29
SIZE (xpi/firefox-i18n-60.0b5/ca.xpi) = 475143
30
SHA256 (xpi/firefox-i18n-59.0.1/cak.xpi) = fc12b006bf3f2f4d476c89f227b03ff59b51c81e4c3c0726e3cdb3016d0997bd
30
SHA256 (xpi/firefox-i18n-60.0b5/cak.xpi) = 926e65519dd0a13e3f9182dbee519e992dbe2b44fb1a625e37a6652edb5e5120
31
SIZE (xpi/firefox-i18n-59.0.1/cak.xpi) = 475234
31
SIZE (xpi/firefox-i18n-60.0b5/cak.xpi) = 484300
32
SHA256 (xpi/firefox-i18n-59.0.1/cs.xpi) = 63e37c027b27207ea3d3651d7b712ba4e2d661d4e5286e1a6ec8bb4469c3c30b
32
SHA256 (xpi/firefox-i18n-60.0b5/cs.xpi) = bc87e9e0e3e41e6a9e887eeedc3781501e5fbd17ee9b8f848a57622f2a1bf164
33
SIZE (xpi/firefox-i18n-59.0.1/cs.xpi) = 471575
33
SIZE (xpi/firefox-i18n-60.0b5/cs.xpi) = 479914
34
SHA256 (xpi/firefox-i18n-59.0.1/cy.xpi) = 357962244e13fea93e88bf486099b5c4cc117bf324ba8933d11a4f5fff61f852
34
SHA256 (xpi/firefox-i18n-60.0b5/cy.xpi) = 91df18438c912e179c24962d21b85757cb27865366f07a994596296873261168
35
SIZE (xpi/firefox-i18n-59.0.1/cy.xpi) = 454433
35
SIZE (xpi/firefox-i18n-60.0b5/cy.xpi) = 464789
36
SHA256 (xpi/firefox-i18n-59.0.1/da.xpi) = a15f383e39f4b11e0fe014063224145f45429ae8b51d731db872e1b52b4ad749
36
SHA256 (xpi/firefox-i18n-60.0b5/da.xpi) = 1ae9c916f511d15c2db512567324cb4c78ad841b5b6eb1a6b81491e09fdc029b
37
SIZE (xpi/firefox-i18n-59.0.1/da.xpi) = 446949
37
SIZE (xpi/firefox-i18n-60.0b5/da.xpi) = 457543
38
SHA256 (xpi/firefox-i18n-59.0.1/de.xpi) = aa1d03f9aada0f5d575a021ea0944fce026a34a8ecf03a5b18077e2dcd7797a1
38
SHA256 (xpi/firefox-i18n-60.0b5/de.xpi) = a7adb54c9e14f8d10be9199173b999b3a1511a8fe694bc5e769ea50a58a5ac3c
39
SIZE (xpi/firefox-i18n-59.0.1/de.xpi) = 466273
39
SIZE (xpi/firefox-i18n-60.0b5/de.xpi) = 477424
40
SHA256 (xpi/firefox-i18n-59.0.1/dsb.xpi) = 572b856c971bf7d99867fb462039f698dc5f068a49f3b564d7dd732d6b1d758d
40
SHA256 (xpi/firefox-i18n-60.0b5/dsb.xpi) = 7d8157914b32dabe94c9170677ece16adf2d07bba6a23be0ab2146116f097c61
41
SIZE (xpi/firefox-i18n-59.0.1/dsb.xpi) = 478975
41
SIZE (xpi/firefox-i18n-60.0b5/dsb.xpi) = 487485
42
SHA256 (xpi/firefox-i18n-59.0.1/el.xpi) = 7378eed475cccfe541c65f8634ff24e8dc3bc62553b396e9f68da5821b417bed
42
SHA256 (xpi/firefox-i18n-60.0b5/el.xpi) = 333154f0cf1bac6cb3b7e11534425c7fd1094fe8b9ac9b6c6285f712ad41b748
43
SIZE (xpi/firefox-i18n-59.0.1/el.xpi) = 531408
43
SIZE (xpi/firefox-i18n-60.0b5/el.xpi) = 542988
44
SHA256 (xpi/firefox-i18n-59.0.1/en-GB.xpi) = 92d00ee7eed2c099d3588227ba1ca172371f07b388fc866d20e4a3c22e7d3cc2
44
SHA256 (xpi/firefox-i18n-60.0b5/en-GB.xpi) = b1cb2f212ecf473a7d42457bee772d5e45f7c3c778e65db6a42523761ef57f04
45
SIZE (xpi/firefox-i18n-59.0.1/en-GB.xpi) = 434300
45
SIZE (xpi/firefox-i18n-60.0b5/en-GB.xpi) = 444252
46
SHA256 (xpi/firefox-i18n-59.0.1/en-US.xpi) = 6b78a5ba462f877fe1d64c9bf2e8db3e4426e66aaa5ad3151f8a429d46e988e0
46
SHA256 (xpi/firefox-i18n-60.0b5/en-US.xpi) = a9cc08dd5aed430a2dec6679e92a3f9b048a078c7a5006fd33d831f8e6db72b8
47
SIZE (xpi/firefox-i18n-59.0.1/en-US.xpi) = 432749
47
SIZE (xpi/firefox-i18n-60.0b5/en-US.xpi) = 439229
48
SHA256 (xpi/firefox-i18n-59.0.1/en-ZA.xpi) = d084a136f8358f2c0709b983ceebded40cedb2249ef438a8ec1e1fb5e358e7ff
48
SHA256 (xpi/firefox-i18n-60.0b5/en-ZA.xpi) = 16ef865f91de2cbed7d674d800db09aba33ca4508b38c53cd3e14eccaaadaa3f
49
SIZE (xpi/firefox-i18n-59.0.1/en-ZA.xpi) = 427365
49
SIZE (xpi/firefox-i18n-60.0b5/en-ZA.xpi) = 433955
50
SHA256 (xpi/firefox-i18n-59.0.1/eo.xpi) = 7bee8c904213fbfc33b2a8ddcace8d63b85fee996b753a49d7d77cc85152086a
50
SHA256 (xpi/firefox-i18n-60.0b5/eo.xpi) = 85090f769b791a0fef7ec13c84c2af7abee2b107af476b6950921f4fef1f450d
51
SIZE (xpi/firefox-i18n-59.0.1/eo.xpi) = 453367
51
SIZE (xpi/firefox-i18n-60.0b5/eo.xpi) = 462259
52
SHA256 (xpi/firefox-i18n-59.0.1/es-AR.xpi) = 1835efdc6145a47e0d4fe94bcd5eb5904c0435d2d09c8673eaa981521a529ce6
52
SHA256 (xpi/firefox-i18n-60.0b5/es-AR.xpi) = 51e60414a0d07f4a43a32ba0d1023b0b5cfdba1d4fefc8e91a8cbb4ca74d5dee
53
SIZE (xpi/firefox-i18n-59.0.1/es-AR.xpi) = 461797
53
SIZE (xpi/firefox-i18n-60.0b5/es-AR.xpi) = 472921
54
SHA256 (xpi/firefox-i18n-59.0.1/es-CL.xpi) = e8a31cb6715335f811565ba00dff5580e04139981344fd3ec91f92c028cdafa4
54
SHA256 (xpi/firefox-i18n-60.0b5/es-CL.xpi) = 97007a7ef53291e22be4cb3c8b496d26c8468d616e3f9242ca26937930ae4647
55
SIZE (xpi/firefox-i18n-59.0.1/es-CL.xpi) = 464654
55
SIZE (xpi/firefox-i18n-60.0b5/es-CL.xpi) = 475773
56
SHA256 (xpi/firefox-i18n-59.0.1/es-ES.xpi) = bfb6038c30d18faa11490750ae19ecccbf61dfd25f8172792e99321e619230ad
56
SHA256 (xpi/firefox-i18n-60.0b5/es-ES.xpi) = da6cdb1eb11d98745e7aa4ebb2c782523e528dec3036babb4d2c9523cbcd5195
57
SIZE (xpi/firefox-i18n-59.0.1/es-ES.xpi) = 348463
57
SIZE (xpi/firefox-i18n-60.0b5/es-ES.xpi) = 398018
58
SHA256 (xpi/firefox-i18n-59.0.1/es-MX.xpi) = f92ea0e49ed3e052228a84685cde361f7ddb222bca6c7d50ecbee013994df910
58
SHA256 (xpi/firefox-i18n-60.0b5/es-MX.xpi) = e2989a87730f2f8f1a1ebcebb68c19af299e7e93c996ca2137d21b04ab7ce6e4
59
SIZE (xpi/firefox-i18n-59.0.1/es-MX.xpi) = 466313
59
SIZE (xpi/firefox-i18n-60.0b5/es-MX.xpi) = 476894
60
SHA256 (xpi/firefox-i18n-59.0.1/et.xpi) = 0abf3c5686c301775ad9ffa6411c219d2d4d620589ff930ec1714123f48f6881
60
SHA256 (xpi/firefox-i18n-60.0b5/et.xpi) = d88ca2f58c51403b83efc86ae86518eab8b6bd97457a5d3b9c707dc51b4dab0d
61
SIZE (xpi/firefox-i18n-59.0.1/et.xpi) = 445394
61
SIZE (xpi/firefox-i18n-60.0b5/et.xpi) = 457630
62
SHA256 (xpi/firefox-i18n-59.0.1/eu.xpi) = 1df512fac2219dd3decd48ea5aa7c5af6ba1eb65348d122020afaf237a04b238
62
SHA256 (xpi/firefox-i18n-60.0b5/eu.xpi) = f9b29ea85d04b736fb4900fd1b8cb27be5430abcfc2bd6b40a6e3cea14eb7f25
63
SIZE (xpi/firefox-i18n-59.0.1/eu.xpi) = 455236
63
SIZE (xpi/firefox-i18n-60.0b5/eu.xpi) = 463833
64
SHA256 (xpi/firefox-i18n-59.0.1/fa.xpi) = 83cf18e8fc6599b0f4fd3a4991ab01b99da4ecb65708c92848749cf2a7ef0867
64
SHA256 (xpi/firefox-i18n-60.0b5/fa.xpi) = bc9db6a6019e7c28b2678d55de93e137f286f4465bea77945c1bc6f8be75bb01
65
SIZE (xpi/firefox-i18n-59.0.1/fa.xpi) = 508098
65
SIZE (xpi/firefox-i18n-60.0b5/fa.xpi) = 518992
66
SHA256 (xpi/firefox-i18n-59.0.1/ff.xpi) = 1f90aa31ca2b9b93fe80a25a03d5a304c30cdcba9c77cf10bd1a4eff43bd0a91
66
SHA256 (xpi/firefox-i18n-60.0b5/ff.xpi) = fcda0e781e7c3e330d0177f57a67cbc0ce0032b4fca832de2d1ed8c3f975f0a7
67
SIZE (xpi/firefox-i18n-59.0.1/ff.xpi) = 455026
67
SIZE (xpi/firefox-i18n-60.0b5/ff.xpi) = 464894
68
SHA256 (xpi/firefox-i18n-59.0.1/fi.xpi) = af9fb470144b4d524d27f683116bf40388b37e8a88266a53fc17d22978f88dd1
68
SHA256 (xpi/firefox-i18n-60.0b5/fi.xpi) = 1afd02a57647e4e4735b2d4a5b954e931a7afaaff4666578b7631f360203ba45
69
SIZE (xpi/firefox-i18n-59.0.1/fi.xpi) = 445182
69
SIZE (xpi/firefox-i18n-60.0b5/fi.xpi) = 455914
70
SHA256 (xpi/firefox-i18n-59.0.1/fr.xpi) = 0df0b098a41723f4e950dc0e88d041ee89efdc984cb317c250f63cf0bb9d12a7
70
SHA256 (xpi/firefox-i18n-60.0b5/fr.xpi) = bb53a99a0e8dd6bfcd7278f431f3e87d90d7ec31d3a6e05e656f1947ddb287a0
71
SIZE (xpi/firefox-i18n-59.0.1/fr.xpi) = 473593
71
SIZE (xpi/firefox-i18n-60.0b5/fr.xpi) = 484331
72
SHA256 (xpi/firefox-i18n-59.0.1/fy-NL.xpi) = dbe46d9218b4b2ad83e678d2ab70422e779bde1b6254b10006d621a59a5af30b
72
SHA256 (xpi/firefox-i18n-60.0b5/fy-NL.xpi) = 6bd3b918ae762d320fbc79e331e547af3bc2c70561aa3486d06521da252c40e8
73
SIZE (xpi/firefox-i18n-59.0.1/fy-NL.xpi) = 462918
73
SIZE (xpi/firefox-i18n-60.0b5/fy-NL.xpi) = 472863
74
SHA256 (xpi/firefox-i18n-59.0.1/ga-IE.xpi) = 7efe47e0b58eb6acab98a7846a8100ead9e12666524cc90c63dc2a87ab1dd34c
74
SHA256 (xpi/firefox-i18n-60.0b5/ga-IE.xpi) = ef86d1dee9496d5d45cdce85856089d0be14914ab34f9262f30b5aaf9e484597
75
SIZE (xpi/firefox-i18n-59.0.1/ga-IE.xpi) = 471909
75
SIZE (xpi/firefox-i18n-60.0b5/ga-IE.xpi) = 481965
76
SHA256 (xpi/firefox-i18n-59.0.1/gd.xpi) = e72f3c50f114e2a697baafbf427e2a0372d74e73186925051f9a2a3647e80c91
76
SHA256 (xpi/firefox-i18n-60.0b5/gd.xpi) = 93c2f11e334c3a53279306a1ba60657421e7bcd09fb814e803eee0117d8d604d
77
SIZE (xpi/firefox-i18n-59.0.1/gd.xpi) = 461297
77
SIZE (xpi/firefox-i18n-60.0b5/gd.xpi) = 473021
78
SHA256 (xpi/firefox-i18n-59.0.1/gl.xpi) = d6f18916ce2ac2cc9f15c9a05fc0f83bbbe2d092fbd06d1b46b7101cf0aae03b
78
SHA256 (xpi/firefox-i18n-60.0b5/gl.xpi) = 6732198d6ef592cb901fa6433681e4cd8ebd4b97f80d7a3ef5e9679874893220
79
SIZE (xpi/firefox-i18n-59.0.1/gl.xpi) = 441615
79
SIZE (xpi/firefox-i18n-60.0b5/gl.xpi) = 451630
80
SHA256 (xpi/firefox-i18n-59.0.1/gn.xpi) = 861f7023de8630e2d0daf69b333cf212d84c3389044eea500655729197a5457b
80
SHA256 (xpi/firefox-i18n-60.0b5/gn.xpi) = b2b5ef8c8d8157459c79a1e085259329f18b6277276e28da69ee81557264c2fb
81
SIZE (xpi/firefox-i18n-59.0.1/gn.xpi) = 469397
81
SIZE (xpi/firefox-i18n-60.0b5/gn.xpi) = 481098
82
SHA256 (xpi/firefox-i18n-59.0.1/gu-IN.xpi) = fbbf3b4eb0527a01e6182128e1153d9ecafda1ecf0b6c48456c087a532281127
82
SHA256 (xpi/firefox-i18n-60.0b5/gu-IN.xpi) = e551c9f5cde21ae01d63495a0330a15bef33c21dbf2de4cff8a65b43919b9026
83
SIZE (xpi/firefox-i18n-59.0.1/gu-IN.xpi) = 521804
83
SIZE (xpi/firefox-i18n-60.0b5/gu-IN.xpi) = 532920
84
SHA256 (xpi/firefox-i18n-59.0.1/he.xpi) = ab2d7b59c2a6d09438efa7f712dc1a636e15f3e6da52fc00e9de3ce4fb2baa28
84
SHA256 (xpi/firefox-i18n-60.0b5/he.xpi) = 4987b389973dcc614a27ddf7edbb6866f21fa061a0992ae43d6875a1d0ca1117
85
SIZE (xpi/firefox-i18n-59.0.1/he.xpi) = 472771
85
SIZE (xpi/firefox-i18n-60.0b5/he.xpi) = 483088
86
SHA256 (xpi/firefox-i18n-59.0.1/hi-IN.xpi) = b3fb9886a427a4b1849326ed94528bb157489fa778cb82eae724e7d91df59732
86
SHA256 (xpi/firefox-i18n-60.0b5/hi-IN.xpi) = ff63fe8dfdb2f8b2e08d3167f8d6bb753837d43a8bd4abeade4848eb232b4e72
87
SIZE (xpi/firefox-i18n-59.0.1/hi-IN.xpi) = 524280
87
SIZE (xpi/firefox-i18n-60.0b5/hi-IN.xpi) = 535068
88
SHA256 (xpi/firefox-i18n-59.0.1/hr.xpi) = 3ad1dc76bc9afcc5ad7cf4e2f53c005d4861b79d00fb080c6487585e72a5380f
88
SHA256 (xpi/firefox-i18n-60.0b5/hr.xpi) = 85d36cded0c606a92f85c9bb528b1490c1ce155ce4d6d371b202ccce81d3dc86
89
SIZE (xpi/firefox-i18n-59.0.1/hr.xpi) = 459978
89
SIZE (xpi/firefox-i18n-60.0b5/hr.xpi) = 470247
90
SHA256 (xpi/firefox-i18n-59.0.1/hsb.xpi) = 9cded87c1ee19a762f545efee71894db30ca66c35cacf8fc5cbe38207700be90
90
SHA256 (xpi/firefox-i18n-60.0b5/hsb.xpi) = f4a0766dc42066315111441b9197967b0f0553cc4f0ee85755cbc0b20fbe05c8
91
SIZE (xpi/firefox-i18n-59.0.1/hsb.xpi) = 475941
91
SIZE (xpi/firefox-i18n-60.0b5/hsb.xpi) = 485230
92
SHA256 (xpi/firefox-i18n-59.0.1/hu.xpi) = 072c5d90e274deb3d0398445561b78bbf4dee1ee03f0c0ecbdeaf4e2968727dd
92
SHA256 (xpi/firefox-i18n-60.0b5/hu.xpi) = b5c586021c4a52006592d61f9c63d5f7edb8804509e583a1e124d77bf7732a07
93
SIZE (xpi/firefox-i18n-59.0.1/hu.xpi) = 476896
93
SIZE (xpi/firefox-i18n-60.0b5/hu.xpi) = 486386
94
SHA256 (xpi/firefox-i18n-59.0.1/hy-AM.xpi) = aa34c99ecc61ed34ff627d3fe77c4f1b8b0ff7eebf0cdec0d0ae28960547379e
94
SHA256 (xpi/firefox-i18n-60.0b5/hy-AM.xpi) = 9d6f1f8c02fa19037446162faf7ab60f473db31c66da493c54554db26e2c2154
95
SIZE (xpi/firefox-i18n-59.0.1/hy-AM.xpi) = 508168
95
SIZE (xpi/firefox-i18n-60.0b5/hy-AM.xpi) = 519060
96
SHA256 (xpi/firefox-i18n-59.0.1/ia.xpi) = 1d52d87927398bb31f7f454aa9dc9114520b81145620b80b672132c5b67b31f6
96
SHA256 (xpi/firefox-i18n-60.0b5/ia.xpi) = f152ebfe70485089bda5c43113fdb62fcc33d4a334854aa462f8de262d3f4694
97
SIZE (xpi/firefox-i18n-59.0.1/ia.xpi) = 448829
97
SIZE (xpi/firefox-i18n-60.0b5/ia.xpi) = 459829
98
SHA256 (xpi/firefox-i18n-59.0.1/id.xpi) = c74e45cabffb0bce1e2c0b4a79d552f4b74d5307a1fb40e62ae9e213b1bbde1e
98
SHA256 (xpi/firefox-i18n-60.0b5/id.xpi) = 00d0687dc816591de008f67af1368e9074ec0bc09367a87baaba740561d50c88
99
SIZE (xpi/firefox-i18n-59.0.1/id.xpi) = 441952
99
SIZE (xpi/firefox-i18n-60.0b5/id.xpi) = 451635
100
SHA256 (xpi/firefox-i18n-59.0.1/is.xpi) = 305edff9a994bf7bc3be53223db00e5a893caeb8d9e9175eea60c5bd41a923ab
100
SHA256 (xpi/firefox-i18n-60.0b5/is.xpi) = 0fcb3442d9797806530e1ad8f4cb4ecc66decd2184ccfa059e42823693365aac
101
SIZE (xpi/firefox-i18n-59.0.1/is.xpi) = 451373
101
SIZE (xpi/firefox-i18n-60.0b5/is.xpi) = 462146
102
SHA256 (xpi/firefox-i18n-59.0.1/it.xpi) = e282a584bc092d31839c277a471858715b616288c28255420bf41663af806dac
102
SHA256 (xpi/firefox-i18n-60.0b5/it.xpi) = 3a0b2be033eb754f89c606494a926fc2dbb29ce9b0e5ae9befcfdb06564124e4
103
SIZE (xpi/firefox-i18n-59.0.1/it.xpi) = 342524
103
SIZE (xpi/firefox-i18n-60.0b5/it.xpi) = 349832
104
SHA256 (xpi/firefox-i18n-59.0.1/ja.xpi) = a69ec46ff61841ef415e252be752ca9ec343d1cf30a73ac9c0e63598bf1d8fe7
104
SHA256 (xpi/firefox-i18n-60.0b5/ja.xpi) = 1b0bf234562fb1e10b5aabec4bd06a65cce5f2e0b0764eeb5ba0fe23b3c9ab43
105
SIZE (xpi/firefox-i18n-59.0.1/ja.xpi) = 508147
105
SIZE (xpi/firefox-i18n-60.0b5/ja.xpi) = 518987
106
SHA256 (xpi/firefox-i18n-59.0.1/ka.xpi) = c06ba278e86d214a55cc582da20c2f277986d4e52e99fedee5cd19f4a7f5b3f1
106
SHA256 (xpi/firefox-i18n-60.0b5/ka.xpi) = 7680a934f46841c0640626de1803cf524fef8af1d5e7c6bf65d040b73624c66e
107
SIZE (xpi/firefox-i18n-59.0.1/ka.xpi) = 492569
107
SIZE (xpi/firefox-i18n-60.0b5/ka.xpi) = 502445
108
SHA256 (xpi/firefox-i18n-59.0.1/kab.xpi) = 5bba366b527907301a54817fd3c95d4d6617c9169cf20cf94b5292825dd8ca23
108
SHA256 (xpi/firefox-i18n-60.0b5/kab.xpi) = 253ae20877f17cc405b4dbcf1ab83e8722e9385583203ecc63de7dc1ffa8acfb
109
SIZE (xpi/firefox-i18n-59.0.1/kab.xpi) = 461841
109
SIZE (xpi/firefox-i18n-60.0b5/kab.xpi) = 470984
110
SHA256 (xpi/firefox-i18n-59.0.1/kk.xpi) = 06c927cb3919d60bcb595b8e7690148613215ab92eb345a3775b856e5590b2cf
110
SHA256 (xpi/firefox-i18n-60.0b5/kk.xpi) = 469145f8141ef31b8c26d26e0dab49fdc8cc2f213219618fdc8146a42af6657d
111
SIZE (xpi/firefox-i18n-59.0.1/kk.xpi) = 517584
111
SIZE (xpi/firefox-i18n-60.0b5/kk.xpi) = 528100
112
SHA256 (xpi/firefox-i18n-59.0.1/km.xpi) = 10a185cf715bccb9cf2c00a15384e6feb7df2adfadcf144751bee4d03496c9c5
112
SHA256 (xpi/firefox-i18n-60.0b5/km.xpi) = c43bdfb638df2390c9d482f49c488c2f7e49711ca32285d20fb8f97003c83094
113
SIZE (xpi/firefox-i18n-59.0.1/km.xpi) = 526359
113
SIZE (xpi/firefox-i18n-60.0b5/km.xpi) = 535561
114
SHA256 (xpi/firefox-i18n-59.0.1/kn.xpi) = 36a5d63ccbce763756d1aa145339794315e9ddd653420fe2fb1256b017da7b98
114
SHA256 (xpi/firefox-i18n-60.0b5/kn.xpi) = 5e550ea930289a8b6e9492f7127c412250a7b98676f6763210aad2a8e4821369
115
SIZE (xpi/firefox-i18n-59.0.1/kn.xpi) = 527879
115
SIZE (xpi/firefox-i18n-60.0b5/kn.xpi) = 535720
116
SHA256 (xpi/firefox-i18n-59.0.1/ko.xpi) = f3b83409bd4d742ef6c6c5cfd0d8d463bf1cdd21608f8439f2f86901e95b5b4d
116
SHA256 (xpi/firefox-i18n-60.0b5/ko.xpi) = 4c4d583a94b5d6b986b0ada70bebf77dec103f35e216c429822748e6623ec92a
117
SIZE (xpi/firefox-i18n-59.0.1/ko.xpi) = 487661
117
SIZE (xpi/firefox-i18n-60.0b5/ko.xpi) = 495624
118
SHA256 (xpi/firefox-i18n-59.0.1/lij.xpi) = 62f4d6631b60b420954f1a7c42b5cc383801548c5780bf7badb67f1f0b4c7fb2
118
SHA256 (xpi/firefox-i18n-60.0b5/lij.xpi) = df7ccc944c53e4670f56d7cec12e3ce3acfa98893ba1e845a878e66705f3258d
119
SIZE (xpi/firefox-i18n-59.0.1/lij.xpi) = 446606
119
SIZE (xpi/firefox-i18n-60.0b5/lij.xpi) = 458698
120
SHA256 (xpi/firefox-i18n-59.0.1/lt.xpi) = 3c28029fb78c90726cf6dca3a22f80e45d855ad16aee431c008e0bf08fb77ce4
120
SHA256 (xpi/firefox-i18n-60.0b5/lt.xpi) = 8c361d81e4d1acf876e002ad7512c58d8905802352c815c6e752b1ebda67c750
121
SIZE (xpi/firefox-i18n-59.0.1/lt.xpi) = 475142
121
SIZE (xpi/firefox-i18n-60.0b5/lt.xpi) = 483935
122
SHA256 (xpi/firefox-i18n-59.0.1/lv.xpi) = b618edf282a60d6a64dac68f796d45cd8fe79dc497176b5c821907eb50720e47
122
SHA256 (xpi/firefox-i18n-60.0b5/lv.xpi) = e09c12f9ef45f5b5dd37458cc3e866fe5c3465a56030f4eb897722be66244f16
123
SIZE (xpi/firefox-i18n-59.0.1/lv.xpi) = 463655
123
SIZE (xpi/firefox-i18n-60.0b5/lv.xpi) = 474182
124
SHA256 (xpi/firefox-i18n-59.0.1/mai.xpi) = b622a93edf7341d11a23df83d155b86f45a4af769f2ff45996701431c36707e2
124
SHA256 (xpi/firefox-i18n-60.0b5/mai.xpi) = 16336213becc43dfd2f54e6e7a5d116568da95c0c01978da1c830bba9243cc0b
125
SIZE (xpi/firefox-i18n-59.0.1/mai.xpi) = 499910
125
SIZE (xpi/firefox-i18n-60.0b5/mai.xpi) = 506308
126
SHA256 (xpi/firefox-i18n-59.0.1/mk.xpi) = 996df991c2945d7591c9b90633e83eef72be4533ab55e3ba48745232b0e83430
126
SHA256 (xpi/firefox-i18n-60.0b5/mk.xpi) = 14a6e7fb692d452f4dc306a6d198090dafc209a0ad4ca0c75760158547d93d26
127
SIZE (xpi/firefox-i18n-59.0.1/mk.xpi) = 484075
127
SIZE (xpi/firefox-i18n-60.0b5/mk.xpi) = 471743
128
SHA256 (xpi/firefox-i18n-59.0.1/ml.xpi) = fe75a2f4885b7c4538a7447a650de9f338169549e5451d1e5fe2a70d6c26cfa1
128
SHA256 (xpi/firefox-i18n-60.0b5/ml.xpi) = f5ce2ac9dda600a7e07ed4a3e27ab08db1f026535dedf13bd3623212a928509c
129
SIZE (xpi/firefox-i18n-59.0.1/ml.xpi) = 539735
129
SIZE (xpi/firefox-i18n-60.0b5/ml.xpi) = 548989
130
SHA256 (xpi/firefox-i18n-59.0.1/mr.xpi) = 9f9a053dda0e1a7f15dd2bb5564582d6c10f465b20d9165210c487f1816e52a8
130
SHA256 (xpi/firefox-i18n-60.0b5/mr.xpi) = 9fc3f147376f31c17f22d7844a11ffb3ef50b45f59eefc236e1128cd06a0e589
131
SIZE (xpi/firefox-i18n-59.0.1/mr.xpi) = 517962
131
SIZE (xpi/firefox-i18n-60.0b5/mr.xpi) = 529031
132
SHA256 (xpi/firefox-i18n-59.0.1/ms.xpi) = 1a40eb19a6f607434d5180474925ab903bd0d8e12c5861713b3de574fda2673d
132
SHA256 (xpi/firefox-i18n-60.0b5/ms.xpi) = 50903f02e2364eb78131d3dc8bcfcb03ae9936b18460f3389b1c8553701f117a
133
SIZE (xpi/firefox-i18n-59.0.1/ms.xpi) = 450075
133
SIZE (xpi/firefox-i18n-60.0b5/ms.xpi) = 459172
134
SHA256 (xpi/firefox-i18n-59.0.1/my.xpi) = 7b0a1e894808bb4f17d6012ba978b180dd0f4825733e357d63708f2298fdb278
134
SHA256 (xpi/firefox-i18n-60.0b5/my.xpi) = 2dcaaf4ebd56548a802e4b57b76171b64d44fd0aa857356d18b34060eb26d2be
135
SIZE (xpi/firefox-i18n-59.0.1/my.xpi) = 511894
135
SIZE (xpi/firefox-i18n-60.0b5/my.xpi) = 521497
136
SHA256 (xpi/firefox-i18n-59.0.1/nb-NO.xpi) = 390904624102a0c5c1be82712954a57ee628a170361a57fda0e5e6dd5e4b9f56
136
SHA256 (xpi/firefox-i18n-60.0b5/nb-NO.xpi) = 14470345bf6515d9d0faa5e28862a0deef41d74e9c6f6d7d8644e595b5d7f5c1
137
SIZE (xpi/firefox-i18n-59.0.1/nb-NO.xpi) = 450277
137
SIZE (xpi/firefox-i18n-60.0b5/nb-NO.xpi) = 458957
138
SHA256 (xpi/firefox-i18n-59.0.1/ne-NP.xpi) = 4acaaa5ee3746176dd1349ea51d47b99cbd965d8aff21b44169235b5798e6d04
138
SHA256 (xpi/firefox-i18n-60.0b5/ne-NP.xpi) = 098122a1473bdfd589334fc1e292b7e547082e360cf8c1044bbab491a85a4a6d
139
SIZE (xpi/firefox-i18n-59.0.1/ne-NP.xpi) = 509177
139
SIZE (xpi/firefox-i18n-60.0b5/ne-NP.xpi) = 506098
140
SHA256 (xpi/firefox-i18n-59.0.1/nl.xpi) = 938f70cd0452f87ca4da3f1ed17802aad48e581b8fe7cb214f9c579bb647b795
140
SHA256 (xpi/firefox-i18n-60.0b5/nl.xpi) = bc578a51f18bd31bfaa2a67746ae1d67c603a837526e715216fbf72502a0ef2c
141
SIZE (xpi/firefox-i18n-59.0.1/nl.xpi) = 458128
141
SIZE (xpi/firefox-i18n-60.0b5/nl.xpi) = 465843
142
SHA256 (xpi/firefox-i18n-59.0.1/nn-NO.xpi) = eeeea6999c44df8e6657e65e07c96f741bef6530b8198f79547c36867ad3e694
142
SHA256 (xpi/firefox-i18n-60.0b5/nn-NO.xpi) = 538e75a3bb7548a54b63fd36b50e45a4e7cf6d0d6aa1b5e5ef6e766388e28d9a
143
SIZE (xpi/firefox-i18n-59.0.1/nn-NO.xpi) = 451471
143
SIZE (xpi/firefox-i18n-60.0b5/nn-NO.xpi) = 460193
144
SHA256 (xpi/firefox-i18n-59.0.1/or.xpi) = de8adc3a0a20bc650739a1a39c55140c0b5f5f5a078a6a2414a7602561bfd798
144
SHA256 (xpi/firefox-i18n-60.0b5/oc.xpi) = 010f9524fddfceaa188e3ff39a3bb2d77a03e8dd4b468dec015a60228de7c757
145
SIZE (xpi/firefox-i18n-59.0.1/or.xpi) = 493181
145
SIZE (xpi/firefox-i18n-60.0b5/oc.xpi) = 476425
146
SHA256 (xpi/firefox-i18n-59.0.1/pa-IN.xpi) = 682e548375a925583d723ffb9889a5ffbaa049ed2d2fe33cbb17dbd50ad263f4
146
SHA256 (xpi/firefox-i18n-60.0b5/or.xpi) = 4e9ea3006d3f0317b8c7274f60b776e017762f6abb7476dbaf7d83c822ac1834
147
SIZE (xpi/firefox-i18n-59.0.1/pa-IN.xpi) = 492420
147
SIZE (xpi/firefox-i18n-60.0b5/or.xpi) = 499272
148
SHA256 (xpi/firefox-i18n-59.0.1/pl.xpi) = 694b181873f7667a6720e3f6023bae756e8a0ed55fb4fd395b5be80db786f6b4
148
SHA256 (xpi/firefox-i18n-60.0b5/pa-IN.xpi) = 8ce08219356e56cd7d065a8660e1780025ceeabdc1e2bbdcde4688fe50895aae
149
SIZE (xpi/firefox-i18n-59.0.1/pl.xpi) = 358511
149
SIZE (xpi/firefox-i18n-60.0b5/pa-IN.xpi) = 502588
150
SHA256 (xpi/firefox-i18n-59.0.1/pt-BR.xpi) = 1f1177c60948d15d7d86a374dbfb44bfdce462dbb5496bcd01499cf8b17f9130
150
SHA256 (xpi/firefox-i18n-60.0b5/pl.xpi) = b80a206b5b6325145ca5aac78f99781657f8f8e58b3101b41313333f5a1a82b7
151
SIZE (xpi/firefox-i18n-59.0.1/pt-BR.xpi) = 455916
151
SIZE (xpi/firefox-i18n-60.0b5/pl.xpi) = 369871
152
SHA256 (xpi/firefox-i18n-59.0.1/pt-PT.xpi) = f85995c2b7f847dd9cd6325daf7436882e659a4e984b342e081058517f388908
152
SHA256 (xpi/firefox-i18n-60.0b5/pt-BR.xpi) = a28e0096598fdd7cb36e79d1c796100a86eca620f5c3e59816d151a7997c98b2
153
SIZE (xpi/firefox-i18n-59.0.1/pt-PT.xpi) = 459331
153
SIZE (xpi/firefox-i18n-60.0b5/pt-BR.xpi) = 464670
154
SHA256 (xpi/firefox-i18n-59.0.1/rm.xpi) = e0a9c8c617d804eab0bc8530f15d1d8ae5e47147a23cb010a9c1f5eb5cd8d892
154
SHA256 (xpi/firefox-i18n-60.0b5/pt-PT.xpi) = eb44de0a3a7737eda483c9ac47bb7414d3e070c5f0579dae047d51dd9a06b849
155
SIZE (xpi/firefox-i18n-59.0.1/rm.xpi) = 449757
155
SIZE (xpi/firefox-i18n-60.0b5/pt-PT.xpi) = 468502
156
SHA256 (xpi/firefox-i18n-59.0.1/ro.xpi) = 479b2ebbda57bafda0a34f29cc3e65a9a73db76967579d59c228bb03f0aca4f6
156
SHA256 (xpi/firefox-i18n-60.0b5/rm.xpi) = 07f8d2a499a0ebbd99a83df293342d3ffe8927fc59731a67de1276b3d6002a93
157
SIZE (xpi/firefox-i18n-59.0.1/ro.xpi) = 453403
157
SIZE (xpi/firefox-i18n-60.0b5/rm.xpi) = 460291
158
SHA256 (xpi/firefox-i18n-59.0.1/ru.xpi) = 1be7524ab110feaa15dcbcc4ecdcf3399604b2fe79f41c82b1a68bea9e7b77bb
158
SHA256 (xpi/firefox-i18n-60.0b5/ro.xpi) = 788f3c9ab08d8df1ab5a71e64c7d7ee5e8152e4cd172a9af28d4feb33c9435fe
159
SIZE (xpi/firefox-i18n-59.0.1/ru.xpi) = 526523
159
SIZE (xpi/firefox-i18n-60.0b5/ro.xpi) = 465519
160
SHA256 (xpi/firefox-i18n-59.0.1/si.xpi) = 2d32228ebf6a6b79a20a18eed4091d8131b923fd127eeae01f677c157766840b
160
SHA256 (xpi/firefox-i18n-60.0b5/ru.xpi) = 72b7d6b81c118b4c20c936cc12b74be163226eb25cd2bf44008785fcdd3cd36d
161
SIZE (xpi/firefox-i18n-59.0.1/si.xpi) = 492588
161
SIZE (xpi/firefox-i18n-60.0b5/ru.xpi) = 537214
162
SHA256 (xpi/firefox-i18n-59.0.1/sk.xpi) = 0b99e28c1b337008ac3d4a3c7b629cf71aaaad9c3f30e48f50603becb3064a06
162
SHA256 (xpi/firefox-i18n-60.0b5/si.xpi) = 6c69973c78a4dc6a5e0a3c0e9ca954926b1dffccbac7b539c760e8a206fce855
163
SIZE (xpi/firefox-i18n-59.0.1/sk.xpi) = 480814
163
SIZE (xpi/firefox-i18n-60.0b5/si.xpi) = 500594
164
SHA256 (xpi/firefox-i18n-59.0.1/sl.xpi) = 18aa40a2cf30fe967c034ee2e084be6309ad848379c8eceb137381b308d6e297
164
SHA256 (xpi/firefox-i18n-60.0b5/sk.xpi) = 338d9a0e847194aad995b41cfbf491aa83de3dcb4ec6440018ad3ed0f453a226
165
SIZE (xpi/firefox-i18n-59.0.1/sl.xpi) = 458825
165
SIZE (xpi/firefox-i18n-60.0b5/sk.xpi) = 489623
166
SHA256 (xpi/firefox-i18n-59.0.1/son.xpi) = 8162c10692ed8723f2c47ba322770335ec821550ec3031ea4b67b99b560466e7
166
SHA256 (xpi/firefox-i18n-60.0b5/sl.xpi) = d4f6a41b6e47ebd2776d6b4d3544f08adb15dd2a674bfb9b995238d0aea49dbe
167
SIZE (xpi/firefox-i18n-59.0.1/son.xpi) = 446399
167
SIZE (xpi/firefox-i18n-60.0b5/sl.xpi) = 468030
168
SHA256 (xpi/firefox-i18n-59.0.1/sq.xpi) = 5882a6234a746ef9bb23b405ec15d8e74083598924eabeba3f18a6bc681cdce4
168
SHA256 (xpi/firefox-i18n-60.0b5/son.xpi) = 52dd556656c7b3c4654cd812166a3b54c75ae003352406d9db3a34a47ea8f431
169
SIZE (xpi/firefox-i18n-59.0.1/sq.xpi) = 464463
169
SIZE (xpi/firefox-i18n-60.0b5/son.xpi) = 454713
170
SHA256 (xpi/firefox-i18n-59.0.1/sr.xpi) = 2ec1aa0c85ebd456a560f1e34a65183eef4f7d3105c69c779e83c9ca91e0a442
170
SHA256 (xpi/firefox-i18n-60.0b5/sq.xpi) = 28c25be76f6ad202f6e1bc5135d719083189c2e012ae58633e8be544a1fc93ed
171
SIZE (xpi/firefox-i18n-59.0.1/sr.xpi) = 486178
171
SIZE (xpi/firefox-i18n-60.0b5/sq.xpi) = 473747
172
SHA256 (xpi/firefox-i18n-59.0.1/sv-SE.xpi) = 0913865b4c5edd6cb0006b1c2149463b6a0ff22870cf6c1c2b6cf55f7b7f76d4
172
SHA256 (xpi/firefox-i18n-60.0b5/sr.xpi) = c5dfda1cd4d78162338792d66f33d97d10fcc6c81b846fabcff225bd76d5df80
173
SIZE (xpi/firefox-i18n-59.0.1/sv-SE.xpi) = 458660
173
SIZE (xpi/firefox-i18n-60.0b5/sr.xpi) = 495757
174
SHA256 (xpi/firefox-i18n-59.0.1/ta.xpi) = 92300249eac9468ab15a5a81a2bb5ca7b96ed4d0ede1aa52659ceb50bfcb041b
174
SHA256 (xpi/firefox-i18n-60.0b5/sv-SE.xpi) = 43e9e615944a4eedebbf7b9213d4779d49f92c9d5b84e3b9004ae482d6b22324
175
SIZE (xpi/firefox-i18n-59.0.1/ta.xpi) = 512843
175
SIZE (xpi/firefox-i18n-60.0b5/sv-SE.xpi) = 467363
176
SHA256 (xpi/firefox-i18n-59.0.1/te.xpi) = a3d972a645fefa7e1860f043a85c5c5e00e9b6c46712cd3f98b7db006d98258e
176
SHA256 (xpi/firefox-i18n-60.0b5/ta.xpi) = d155e354747e3137b3f9aa57bdabbc08e5bc52600356cf236218f090a94870a9
177
SIZE (xpi/firefox-i18n-59.0.1/te.xpi) = 527083
177
SIZE (xpi/firefox-i18n-60.0b5/ta.xpi) = 523844
178
SHA256 (xpi/firefox-i18n-59.0.1/th.xpi) = 8e0f5c8eeb12f185aaeddf244363034fe0b8e14f875be5892b68f0fd6530d135
178
SHA256 (xpi/firefox-i18n-60.0b5/te.xpi) = e7cb950c258f7d7dc3bd37c3960c5074e75f30ff3b84fa6ca7ed30f604a1d56e
179
SIZE (xpi/firefox-i18n-59.0.1/th.xpi) = 498544
179
SIZE (xpi/firefox-i18n-60.0b5/te.xpi) = 537295
180
SHA256 (xpi/firefox-i18n-59.0.1/tr.xpi) = 3cbb4cdea0c2001f94cff5078e730e02ce03370eaef1645be60c892ba284be5f
180
SHA256 (xpi/firefox-i18n-60.0b5/th.xpi) = a9542adea2505a78bc194855a2908ceec369b3875c6ee04627154a4318746626
181
SIZE (xpi/firefox-i18n-59.0.1/tr.xpi) = 463594
181
SIZE (xpi/firefox-i18n-60.0b5/th.xpi) = 509139
182
SHA256 (xpi/firefox-i18n-59.0.1/uk.xpi) = d7c86d1f09df639dfc2f3c487cb9d8eabca02efa848371a5e1e7ca1406561de3
182
SHA256 (xpi/firefox-i18n-60.0b5/tr.xpi) = 79315bfa5a79d4bedb0d7aaba2a6134dc2d2f39223d1523175cd3ee6de54522e
183
SIZE (xpi/firefox-i18n-59.0.1/uk.xpi) = 516926
183
SIZE (xpi/firefox-i18n-60.0b5/tr.xpi) = 474040
184
SHA256 (xpi/firefox-i18n-59.0.1/ur.xpi) = c893dd6cd191a2fded4d0c372c9a089528dffaaeeead193ad4080a3f5f21fe90
184
SHA256 (xpi/firefox-i18n-60.0b5/uk.xpi) = 61d0872effa759f2df1f5496aff3e1d0d758884820864e4adcf6d49502b72019
185
SIZE (xpi/firefox-i18n-59.0.1/ur.xpi) = 507380
185
SIZE (xpi/firefox-i18n-60.0b5/uk.xpi) = 526896
186
SHA256 (xpi/firefox-i18n-59.0.1/uz.xpi) = d1b3e43d2850f9da05d92e1f3b933c54e716db163d462c62adac4395e78c6c7b
186
SHA256 (xpi/firefox-i18n-60.0b5/ur.xpi) = 3ce6bfa9a9575d08d46259de93d043c5f847f011f15d99e1fb6d598705a5c78a
187
SIZE (xpi/firefox-i18n-59.0.1/uz.xpi) = 456923
187
SIZE (xpi/firefox-i18n-60.0b5/ur.xpi) = 516998
188
SHA256 (xpi/firefox-i18n-59.0.1/vi.xpi) = bfa5f3a23b29349cee54a85538c0eadb7f838cb50788c1927b7aa5d39d061bc2
188
SHA256 (xpi/firefox-i18n-60.0b5/uz.xpi) = e865bf0cc7e82df1220d0f31e814835f0da139241988decac02536319310056d
189
SIZE (xpi/firefox-i18n-59.0.1/vi.xpi) = 470069
189
SIZE (xpi/firefox-i18n-60.0b5/uz.xpi) = 466306
190
SHA256 (xpi/firefox-i18n-59.0.1/xh.xpi) = 6d8bfed15e2b48a7969de06f43fac314e3d0af99c4d24b8b86eacd26a03b3fca
190
SHA256 (xpi/firefox-i18n-60.0b5/vi.xpi) = b171eae7d5b851e81ad18ba3d82284ef0f962c6a2c48789093fb2222527c85e9
191
SIZE (xpi/firefox-i18n-59.0.1/xh.xpi) = 460771
191
SIZE (xpi/firefox-i18n-60.0b5/vi.xpi) = 480589
192
SHA256 (xpi/firefox-i18n-59.0.1/zh-CN.xpi) = 95d5129eb1211c25516a8ac3f3a5463ec087583c12acf6546aa2915bdf86b463
192
SHA256 (xpi/firefox-i18n-60.0b5/xh.xpi) = 0950710c50a284084b5bf1fc48a48c68c0c3dc0a84e272a288a8eb49ccac34fe
193
SIZE (xpi/firefox-i18n-59.0.1/zh-CN.xpi) = 483449
193
SIZE (xpi/firefox-i18n-60.0b5/xh.xpi) = 468364
194
SHA256 (xpi/firefox-i18n-59.0.1/zh-TW.xpi) = e95d71b32bb94f8c75a8ec9cd042b5a2f4ba61be4f31195aba8eccea0443d6ec
194
SHA256 (xpi/firefox-i18n-60.0b5/zh-CN.xpi) = 6bc8b8a69c1684deb0659f1ad50e0e1c29f8c1e5a2089fcf0c64163123f5518a
195
SIZE (xpi/firefox-i18n-59.0.1/zh-TW.xpi) = 477089
195
SIZE (xpi/firefox-i18n-60.0b5/zh-CN.xpi) = 492222
196
SHA256 (xpi/firefox-i18n-60.0b5/zh-TW.xpi) = ce50ce7772e774502f0ac85f93820653dd8c9c2c707975d6423ddbb1a3b2e189
197
SIZE (xpi/firefox-i18n-60.0b5/zh-TW.xpi) = 489618
(-)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.1
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}-3db9e3d52b17563efca181ccbb50deb8660c59ae
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 = 1521151925
1
TIMESTAMP = 1521738065
2
SHA256 (firefox/3db9e3d52b17563efca181ccbb50deb8660c59ae.tar.bz2) = 06201e824d2460f100312518524d20ec53186f6437a1932d7b78157c78416ed3
2
SHA256 (firefox-60.0b6.source.tar.xz) = 35689c1d0dd0d75e8884409c86cb3c5f22b673ae7fe8bce31bef9fff3a5bff7f
3
SIZE (firefox/3db9e3d52b17563efca181ccbb50deb8660c59ae.tar.bz2) = 304965726
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-bug1444074 (-34 lines)
Removed Link Here
1
Enable full-duplex by default for all platforms
2
3
diff --git modules/libpref/init/all.js modules/libpref/init/all.js
4
index a152e4944e95..322d009da739 100644
5
--- modules/libpref/init/all.js
6
+++ modules/libpref/init/all.js
7
@@ -557,25 +557,18 @@ pref("media.getusermedia.agc", 3); // kAgcAdaptiveDigital
8
 // capture_delay: Adjustments for OS-specific input delay (lower bound)
9
 // playout_delay: Adjustments for OS-specific AudioStream+cubeb+output delay (lower bound)
10
 // full_duplex: enable cubeb full-duplex capture/playback
11
+pref("media.navigator.audio.full_duplex", true);
12
 #if defined(XP_MACOSX)
13
 pref("media.peerconnection.capture_delay", 50);
14
-pref("media.navigator.audio.full_duplex", true);
15
 #elif defined(XP_WIN)
16
 pref("media.peerconnection.capture_delay", 50);
17
-pref("media.navigator.audio.full_duplex", true);
18
 #elif defined(ANDROID)
19
 pref("media.peerconnection.capture_delay", 100);
20
-pref("media.navigator.audio.full_duplex", true);
21
 pref("media.navigator.hardware.vp8_encode.acceleration_enabled", true);
22
 pref("media.navigator.hardware.vp8_encode.acceleration_remote_enabled", true);
23
 pref("media.navigator.hardware.vp8_decode.acceleration_enabled", false);
24
-#elif defined(XP_LINUX) || defined(MOZ_SNDIO)
25
-pref("media.peerconnection.capture_delay", 70);
26
-pref("media.navigator.audio.full_duplex", true);
27
 #else
28
-// *BSD, others - merely a guess for now
29
-pref("media.peerconnection.capture_delay", 50);
30
-pref("media.navigator.audio.full_duplex", false);
31
+pref("media.peerconnection.capture_delay", 70);
32
 #endif
33
 // Use MediaDataDecoder API for WebRTC, this includes hardware acceleration for
34
 // decoding.
(-)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);
(-)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