View | Details | Raw Unified | Return to bug 235161
Collapse All | Expand All

(-)b/mail/thunderbird-i18n/Makefile (-3 / +2 lines)
Lines 2-12 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	thunderbird-i18n
4
PORTNAME=	thunderbird-i18n
5
PORTVERSION=	60.4.0
5
PORTVERSION=	60.5.0
6
PORTREVISION=	1
7
CATEGORIES=	mail news net-im
6
CATEGORIES=	mail news net-im
8
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-x86_64/xpi \
7
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-x86_64/xpi \
9
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-x86_64/xpi
8
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build2/linux-x86_64/xpi
10
PKGNAMEPREFIX=
9
PKGNAMEPREFIX=
11
DISTFILES=	${THUNDERBIRD_I18N_:S/$/.xpi/}
10
DISTFILES=	${THUNDERBIRD_I18N_:S/$/.xpi/}
12
DIST_SUBDIR=	xpi/${DISTNAME}
11
DIST_SUBDIR=	xpi/${DISTNAME}
(-)b/mail/thunderbird-i18n/distinfo (-117 / +117 lines)
Lines 1-117 Link Here
1
TIMESTAMP = 1545056672
1
TIMESTAMP = 1548238106
2
SHA256 (xpi/thunderbird-i18n-60.4.0/ar.xpi) = 142ca421e384f1015446fe16073d21ce17f9306ee5c12fa050991943e1eb2198
2
SHA256 (xpi/thunderbird-i18n-60.5.0/ar.xpi) = 396a13fc6535a68fb1c0f754243b220f6bcfec2a186a5567b9369147ff3975d0
3
SIZE (xpi/thunderbird-i18n-60.4.0/ar.xpi) = 627179
3
SIZE (xpi/thunderbird-i18n-60.5.0/ar.xpi) = 627179
4
SHA256 (xpi/thunderbird-i18n-60.4.0/ast.xpi) = 555a5a195dddb34423f2f8516c5d2cc01e65364363b7611961af4ae018fc8f8a
4
SHA256 (xpi/thunderbird-i18n-60.5.0/ast.xpi) = 7563dbb731f7ea8f9a13dbec1f3a295fc89839fe484b6a2fda57be6eec5e2ce2
5
SIZE (xpi/thunderbird-i18n-60.4.0/ast.xpi) = 560866
5
SIZE (xpi/thunderbird-i18n-60.5.0/ast.xpi) = 559643
6
SHA256 (xpi/thunderbird-i18n-60.4.0/be.xpi) = 4388d058e653c4ffde2c83602a989fb57f4ce08276e7ea15fc5fb2e4703c525b
6
SHA256 (xpi/thunderbird-i18n-60.5.0/be.xpi) = a098bc35e3703e422ed548883216d534b8aef0ef47a446aa2acd6955b0fdac29
7
SIZE (xpi/thunderbird-i18n-60.4.0/be.xpi) = 659078
7
SIZE (xpi/thunderbird-i18n-60.5.0/be.xpi) = 659079
8
SHA256 (xpi/thunderbird-i18n-60.4.0/bg.xpi) = b014bfad34c97890852438e727b9cfe03cd28334c2c04b7e8244d15952a1ed18
8
SHA256 (xpi/thunderbird-i18n-60.5.0/bg.xpi) = 647d26bf395c3f885617f1a970ea67e1436ae266d0d9c8b089490e1e12afb1ac
9
SIZE (xpi/thunderbird-i18n-60.4.0/bg.xpi) = 665511
9
SIZE (xpi/thunderbird-i18n-60.5.0/bg.xpi) = 669318
10
SHA256 (xpi/thunderbird-i18n-60.4.0/br.xpi) = e73c7458d16b365db3b1274fd450259e5e44e50bf7350d14d412b45a719594f2
10
SHA256 (xpi/thunderbird-i18n-60.5.0/br.xpi) = 75c2b8578e5cc30035b9f6faad4feab1c43d83a1ed95ec45c9f4d8ab0bfd0c4b
11
SIZE (xpi/thunderbird-i18n-60.4.0/br.xpi) = 581592
11
SIZE (xpi/thunderbird-i18n-60.5.0/br.xpi) = 580371
12
SHA256 (xpi/thunderbird-i18n-60.4.0/ca.xpi) = 2969084ad12be6b86959e62918c2605186c0320053a113e33aff795c14574eb2
12
SHA256 (xpi/thunderbird-i18n-60.5.0/ca.xpi) = d9e87182418d6c89ba332a4e78078f81e9aac14fe0abce255b673122c0735f71
13
SIZE (xpi/thunderbird-i18n-60.4.0/ca.xpi) = 591970
13
SIZE (xpi/thunderbird-i18n-60.5.0/ca.xpi) = 591971
14
SHA256 (xpi/thunderbird-i18n-60.4.0/cs.xpi) = 62865800afe20ae855e911f1f3b6cfcfdd3a59ac7c099ae73d00764b2b085d27
14
SHA256 (xpi/thunderbird-i18n-60.5.0/cs.xpi) = 1dc5fd93a43b997adb28fc7ac24ba1a25e040d02ebd7a7978f8d6bce318f22e0
15
SIZE (xpi/thunderbird-i18n-60.4.0/cs.xpi) = 611200
15
SIZE (xpi/thunderbird-i18n-60.5.0/cs.xpi) = 611203
16
SHA256 (xpi/thunderbird-i18n-60.4.0/cy.xpi) = 0831ea66281fe261ed6e9fc91b30ac5fc7eb3a6ad7ddaf50545cbeee27f3e3ea
16
SHA256 (xpi/thunderbird-i18n-60.5.0/cy.xpi) = 6039174a0c761416ef49f0face6f88b4d79a49fa56c4bb473bb5cee750a3e208
17
SIZE (xpi/thunderbird-i18n-60.4.0/cy.xpi) = 582232
17
SIZE (xpi/thunderbird-i18n-60.5.0/cy.xpi) = 586038
18
SHA256 (xpi/thunderbird-i18n-60.4.0/da.xpi) = 3fa9fd37a51c99250f6239145bf267a290971e8a2d1683b117dce051997c9db2
18
SHA256 (xpi/thunderbird-i18n-60.5.0/da.xpi) = 4d515134ef90ff95523ff687088bebcacec23ed8fbe4f6d616b68ae0710f249a
19
SIZE (xpi/thunderbird-i18n-60.4.0/da.xpi) = 570806
19
SIZE (xpi/thunderbird-i18n-60.5.0/da.xpi) = 570807
20
SHA256 (xpi/thunderbird-i18n-60.4.0/de.xpi) = 7ec556ef2eb0b7b894548d51def1900cfdcf901d7e965dd70867bbe744d82297
20
SHA256 (xpi/thunderbird-i18n-60.5.0/de.xpi) = 1664dd8842851d29647dbb1fcfa4ecafb9501b5ab358302bcbacb77cab634559
21
SIZE (xpi/thunderbird-i18n-60.4.0/de.xpi) = 582574
21
SIZE (xpi/thunderbird-i18n-60.5.0/de.xpi) = 582575
22
SHA256 (xpi/thunderbird-i18n-60.4.0/dsb.xpi) = 8014269f81c9fb155609c2ad62514537c9bf2003443aa12f46165e6a801191fb
22
SHA256 (xpi/thunderbird-i18n-60.5.0/dsb.xpi) = e0f34880b25f7d1e361dc8b502405918a51d402d0c14370f863259d5609bd6d5
23
SIZE (xpi/thunderbird-i18n-60.4.0/dsb.xpi) = 613758
23
SIZE (xpi/thunderbird-i18n-60.5.0/dsb.xpi) = 617569
24
SHA256 (xpi/thunderbird-i18n-60.4.0/el.xpi) = ff45f720f86509532dc5f20086bc8909b50f34c9e5c7b56e750171735e1ddf46
24
SHA256 (xpi/thunderbird-i18n-60.5.0/el.xpi) = 510d046f3bb350a7d5847834d37fa3895209df1d2bf609dd826af594404e2e53
25
SIZE (xpi/thunderbird-i18n-60.4.0/el.xpi) = 691054
25
SIZE (xpi/thunderbird-i18n-60.5.0/el.xpi) = 694860
26
SHA256 (xpi/thunderbird-i18n-60.4.0/en-GB.xpi) = fbe50c8af4e3c6e454d760a0561ae59bc4190a4be40e6042408c0f8178c05680
26
SHA256 (xpi/thunderbird-i18n-60.5.0/en-GB.xpi) = e8fa1a81c509b42e630a0d51eef58b0f027b6a9a6b648cfabb407cd4e1ef5d15
27
SIZE (xpi/thunderbird-i18n-60.4.0/en-GB.xpi) = 550355
27
SIZE (xpi/thunderbird-i18n-60.5.0/en-GB.xpi) = 553895
28
SHA256 (xpi/thunderbird-i18n-60.4.0/en-US.xpi) = 76a86cc8331ef41d51a7586ce55858eb785919253df1aa737daa222293d36a21
28
SHA256 (xpi/thunderbird-i18n-60.5.0/en-US.xpi) = 6bd4ee055fa3c7dc6b2756220b4cc192ff4c2b1509662fc02bbbbd77d83276d1
29
SIZE (xpi/thunderbird-i18n-60.4.0/en-US.xpi) = 546990
29
SIZE (xpi/thunderbird-i18n-60.5.0/en-US.xpi) = 550807
30
SHA256 (xpi/thunderbird-i18n-60.4.0/es-AR.xpi) = 353ed430557068607bb5484eb5b40986ba01e1b963f6943c08a2b73b4ef09753
30
SHA256 (xpi/thunderbird-i18n-60.5.0/es-AR.xpi) = f31f9ddd6f2bd7f14b7ba660dca44a44d1ce63f6b696fcf3402de508a44fdf84
31
SIZE (xpi/thunderbird-i18n-60.4.0/es-AR.xpi) = 595047
31
SIZE (xpi/thunderbird-i18n-60.5.0/es-AR.xpi) = 595048
32
SHA256 (xpi/thunderbird-i18n-60.4.0/es-ES.xpi) = c1ccb289d140cf1d3485839ef6f6a8c5e3ac5d26a6345190a6856ae1e96b4e7e
32
SHA256 (xpi/thunderbird-i18n-60.5.0/es-ES.xpi) = f328d5a6e0e3c155da02acb7f22264941f85991b587c8c73554eba4bc0ec6658
33
SIZE (xpi/thunderbird-i18n-60.4.0/es-ES.xpi) = 492211
33
SIZE (xpi/thunderbird-i18n-60.5.0/es-ES.xpi) = 492211
34
SHA256 (xpi/thunderbird-i18n-60.4.0/et.xpi) = 4e4e5ef4101834eeef4fa6d7512d4317481e34b5d46f7d7f3764a1da999ccbfd
34
SHA256 (xpi/thunderbird-i18n-60.5.0/et.xpi) = 68329563dc48cc899007d846d1d1c78bc4690d54955e2e377ac204284aa3a4fc
35
SIZE (xpi/thunderbird-i18n-60.4.0/et.xpi) = 570866
35
SIZE (xpi/thunderbird-i18n-60.5.0/et.xpi) = 570867
36
SHA256 (xpi/thunderbird-i18n-60.4.0/eu.xpi) = 58a4160e6f4523afb8fe3af1c60af4350d771db21c109f94d1967d005cd5cb4f
36
SHA256 (xpi/thunderbird-i18n-60.5.0/eu.xpi) = 96c124681a083f7d44a1a27fe8cabd287b73152a0aba324ecc89c099f07ebe2b
37
SIZE (xpi/thunderbird-i18n-60.4.0/eu.xpi) = 577579
37
SIZE (xpi/thunderbird-i18n-60.5.0/eu.xpi) = 581384
38
SHA256 (xpi/thunderbird-i18n-60.4.0/fi.xpi) = 465802cc33b6354d78bfb3a9b7dfe36c58cd25f39e457c2794219704df0cc9cd
38
SHA256 (xpi/thunderbird-i18n-60.5.0/fi.xpi) = 2fbc3ebbeda7770dad1031056dd8568decc68e92041043c2fa537580d68be3b6
39
SIZE (xpi/thunderbird-i18n-60.4.0/fi.xpi) = 575754
39
SIZE (xpi/thunderbird-i18n-60.5.0/fi.xpi) = 575755
40
SHA256 (xpi/thunderbird-i18n-60.4.0/fr.xpi) = e23b17cf928ea9c463431d55fc6fca44187d60c6e3fba9979afdc6ad9948f526
40
SHA256 (xpi/thunderbird-i18n-60.5.0/fr.xpi) = 8b7e334e832ca60dc5f5972df0e070a0bc64aa3d21f9f4fd4a0a4fb09eab68a7
41
SIZE (xpi/thunderbird-i18n-60.4.0/fr.xpi) = 608465
41
SIZE (xpi/thunderbird-i18n-60.5.0/fr.xpi) = 608467
42
SHA256 (xpi/thunderbird-i18n-60.4.0/fy-NL.xpi) = c345f58742f45dd064f7f3f16c28ad50c8412660b32e9be2544ea60915ce7201
42
SHA256 (xpi/thunderbird-i18n-60.5.0/fy-NL.xpi) = d4e058e7449baaa68a87f6147081ab849134e3c487c5a46ebe874ee769f380f5
43
SIZE (xpi/thunderbird-i18n-60.4.0/fy-NL.xpi) = 590033
43
SIZE (xpi/thunderbird-i18n-60.5.0/fy-NL.xpi) = 593851
44
SHA256 (xpi/thunderbird-i18n-60.4.0/ga-IE.xpi) = 54d43b63f461be233e52badeef707686fc628ffb1a0b80a00832f7a87d53dea9
44
SHA256 (xpi/thunderbird-i18n-60.5.0/ga-IE.xpi) = 565c05ad8e1841c06571e9877d7e1dbdd0d3b2dcb7caecdd525cb24684e1ee7c
45
SIZE (xpi/thunderbird-i18n-60.4.0/ga-IE.xpi) = 603505
45
SIZE (xpi/thunderbird-i18n-60.5.0/ga-IE.xpi) = 603506
46
SHA256 (xpi/thunderbird-i18n-60.4.0/gd.xpi) = 3981da8cefc8c9849e1b6e8a8ef1a9b6eca19d0a916f940d6d2ec849191c0876
46
SHA256 (xpi/thunderbird-i18n-60.5.0/gd.xpi) = 6526a9b5e70600234a5bce76548fc8aa30bfabb4bab081991a0ec28f375e11ef
47
SIZE (xpi/thunderbird-i18n-60.4.0/gd.xpi) = 599260
47
SIZE (xpi/thunderbird-i18n-60.5.0/gd.xpi) = 599262
48
SHA256 (xpi/thunderbird-i18n-60.4.0/gl.xpi) = 7b71884496d24cc458f6aa580cab747e278c0f539cd7b6801a9a00ac38685ac2
48
SHA256 (xpi/thunderbird-i18n-60.5.0/gl.xpi) = bc3ae2e961b058a37e5977ec23d1a3636c1547f424b913680b01b312e31c2eb8
49
SIZE (xpi/thunderbird-i18n-60.4.0/gl.xpi) = 576547
49
SIZE (xpi/thunderbird-i18n-60.5.0/gl.xpi) = 580353
50
SHA256 (xpi/thunderbird-i18n-60.4.0/he.xpi) = bb29e592ad55635b225ae012591e7a4899095821b08c94e746e1dd5fcc466644
50
SHA256 (xpi/thunderbird-i18n-60.5.0/he.xpi) = fb735a51a263d7c12624b106b4b11afe55b4192b6c3752cd5a3de10f0ea4589b
51
SIZE (xpi/thunderbird-i18n-60.4.0/he.xpi) = 618364
51
SIZE (xpi/thunderbird-i18n-60.5.0/he.xpi) = 617144
52
SHA256 (xpi/thunderbird-i18n-60.4.0/hr.xpi) = 463a1cdffa202f988ff6ccb625b2d3ac1189fedc7b45133a6325607ce6a9fdd3
52
SHA256 (xpi/thunderbird-i18n-60.5.0/hr.xpi) = 46ab5cd64c814a6f8f930539e7757ec6d859c652c121be09f7d0984e15feb945
53
SIZE (xpi/thunderbird-i18n-60.4.0/hr.xpi) = 583460
53
SIZE (xpi/thunderbird-i18n-60.5.0/hr.xpi) = 582238
54
SHA256 (xpi/thunderbird-i18n-60.4.0/hsb.xpi) = cc4a5af252c25cd01addfa830c2c5e94f0cbcff23df38971ec1f558074463d1b
54
SHA256 (xpi/thunderbird-i18n-60.5.0/hsb.xpi) = 58dfbff6977c8c0144c4bf9a40d60915b248620c391c9a814ad53825ced57daf
55
SIZE (xpi/thunderbird-i18n-60.4.0/hsb.xpi) = 611322
55
SIZE (xpi/thunderbird-i18n-60.5.0/hsb.xpi) = 615132
56
SHA256 (xpi/thunderbird-i18n-60.4.0/hu.xpi) = b7844fb21de6f0869cd73f6fbcb1776d75b868d4eef5280eda07b244300a0db5
56
SHA256 (xpi/thunderbird-i18n-60.5.0/hu.xpi) = bb5ded142be6f62c0aeac040d7720fd12558ae5b2cf1c62cfb4de10a507cd97a
57
SIZE (xpi/thunderbird-i18n-60.4.0/hu.xpi) = 615345
57
SIZE (xpi/thunderbird-i18n-60.5.0/hu.xpi) = 615346
58
SHA256 (xpi/thunderbird-i18n-60.4.0/hy-AM.xpi) = 9b3329ad59e683df79f9e40559ac2e027e529bc8087fe90ec2348ad7718aa98b
58
SHA256 (xpi/thunderbird-i18n-60.5.0/hy-AM.xpi) = 0cae5f9e6e9ba0317a508335bfe430ae1efc4ec259c8c535373a6b1004801ab6
59
SIZE (xpi/thunderbird-i18n-60.4.0/hy-AM.xpi) = 649712
59
SIZE (xpi/thunderbird-i18n-60.5.0/hy-AM.xpi) = 653530
60
SHA256 (xpi/thunderbird-i18n-60.4.0/id.xpi) = e26ea9111f48d48485660191b95eb065712ecb1ddcf113f53cbc36972351368d
60
SHA256 (xpi/thunderbird-i18n-60.5.0/id.xpi) = f0b0710ba277f373bdfff2c161ca97300fc773c400f0505430ba9a2163a511e5
61
SIZE (xpi/thunderbird-i18n-60.4.0/id.xpi) = 568858
61
SIZE (xpi/thunderbird-i18n-60.5.0/id.xpi) = 568861
62
SHA256 (xpi/thunderbird-i18n-60.4.0/is.xpi) = adc63dd5fa09654d263f73a2bfe651be8483a1f58ec781320a8b0c9cfd387f90
62
SHA256 (xpi/thunderbird-i18n-60.5.0/is.xpi) = 40781ed3bbf9af0bbff1c2a144c101505192480e49f599d69af19aadc9cbee38
63
SIZE (xpi/thunderbird-i18n-60.4.0/is.xpi) = 579046
63
SIZE (xpi/thunderbird-i18n-60.5.0/is.xpi) = 579047
64
SHA256 (xpi/thunderbird-i18n-60.4.0/it.xpi) = 1b91e4cc527100aab2dee8c15cf6dcb630d37f5d0e8dce1005bf2e830f67b475
64
SHA256 (xpi/thunderbird-i18n-60.5.0/it.xpi) = 22803ad551daed6a6101b2c856a79386240a4fceeb4160e83dcde0c0e2944d06
65
SIZE (xpi/thunderbird-i18n-60.4.0/it.xpi) = 477499
65
SIZE (xpi/thunderbird-i18n-60.5.0/it.xpi) = 477500
66
SHA256 (xpi/thunderbird-i18n-60.4.0/ja.xpi) = 4ddd943c4b21a89ef2ffdeddec7c4b5aed94cb0adcb687b8cbf50c04f1c79848
66
SHA256 (xpi/thunderbird-i18n-60.5.0/ja.xpi) = 3bb74a119f76062428ba889723e6e878dabed760757a90bb247ec19d1ce58e0e
67
SIZE (xpi/thunderbird-i18n-60.4.0/ja.xpi) = 653343
67
SIZE (xpi/thunderbird-i18n-60.5.0/ja.xpi) = 653342
68
SHA256 (xpi/thunderbird-i18n-60.4.0/kab.xpi) = bb95a60fe9c8a78fdd5de483bd61a030c2bbaecc53a7d45ac1703887b463650e
68
SHA256 (xpi/thunderbird-i18n-60.5.0/kab.xpi) = f04752503fa8884e6aa814977b7ddbf1651378fe9f971553a1d6f258da032a1b
69
SIZE (xpi/thunderbird-i18n-60.4.0/kab.xpi) = 595238
69
SIZE (xpi/thunderbird-i18n-60.5.0/kab.xpi) = 594016
70
SHA256 (xpi/thunderbird-i18n-60.4.0/kk.xpi) = 49f655e7b9cce450b2a201b44d37a4739cfcfc75488ddace684247354233a52d
70
SHA256 (xpi/thunderbird-i18n-60.5.0/kk.xpi) = c62955e2fc253b1f7a685089dc399317d8889680144cb804a20dd2e1b56a962a
71
SIZE (xpi/thunderbird-i18n-60.4.0/kk.xpi) = 670450
71
SIZE (xpi/thunderbird-i18n-60.5.0/kk.xpi) = 669231
72
SHA256 (xpi/thunderbird-i18n-60.4.0/ko.xpi) = c108fdb6457f9d5863b18de01bac6e4488653dd341d4c83ffaec0be2b3c8e7c2
72
SHA256 (xpi/thunderbird-i18n-60.5.0/ko.xpi) = bd8c8e5000ffd97577a74f3866489bc941e02d4a98b8543233821b334b215191
73
SIZE (xpi/thunderbird-i18n-60.4.0/ko.xpi) = 619729
73
SIZE (xpi/thunderbird-i18n-60.5.0/ko.xpi) = 619730
74
SHA256 (xpi/thunderbird-i18n-60.4.0/lt.xpi) = 292f23da6c0cce6b58305c51809282f84c0b011052542fdbb10646c6e5858e76
74
SHA256 (xpi/thunderbird-i18n-60.5.0/lt.xpi) = 5d51778174d5043fb79d2339afa3952934bddd1c29020a1256e6e14e0b8ad9af
75
SIZE (xpi/thunderbird-i18n-60.4.0/lt.xpi) = 605440
75
SIZE (xpi/thunderbird-i18n-60.5.0/lt.xpi) = 605441
76
SHA256 (xpi/thunderbird-i18n-60.4.0/ms.xpi) = 5ebb43dd174cd459d7742ec2c8f2aad2d4d10386717170f34a539574a83d3894
76
SHA256 (xpi/thunderbird-i18n-60.5.0/ms.xpi) = 715cb9b93e28839c5f939952a0c6929f5b11bbe294ffc7ef82c5f1f5146f75ab
77
SIZE (xpi/thunderbird-i18n-60.4.0/ms.xpi) = 574307
77
SIZE (xpi/thunderbird-i18n-60.5.0/ms.xpi) = 574307
78
SHA256 (xpi/thunderbird-i18n-60.4.0/nb-NO.xpi) = b445050869f3fa33909344cbb20c15be4a68d207c046577ff2e825db57de45be
78
SHA256 (xpi/thunderbird-i18n-60.5.0/nb-NO.xpi) = 1c8bb1cedbfd2a297f11947b1b99bef28690e26d33be826a55e04efa3c3f4611
79
SIZE (xpi/thunderbird-i18n-60.4.0/nb-NO.xpi) = 578233
79
SIZE (xpi/thunderbird-i18n-60.5.0/nb-NO.xpi) = 577003
80
SHA256 (xpi/thunderbird-i18n-60.4.0/nl.xpi) = 90b0e41ab9637804ff8cab1ff2974a625784a08e69d15cd5b81c88aafcf0d452
80
SHA256 (xpi/thunderbird-i18n-60.5.0/nl.xpi) = 830b93c1afad284e406f12df76f5fe5fb011fdafbd4ce9f10e44284a5a4a1fc5
81
SIZE (xpi/thunderbird-i18n-60.4.0/nl.xpi) = 583913
81
SIZE (xpi/thunderbird-i18n-60.5.0/nl.xpi) = 583914
82
SHA256 (xpi/thunderbird-i18n-60.4.0/nn-NO.xpi) = 89dea4f22c65ada7e81d014cd006ec14fca89dbbdf2fd94a55786b687e4c7bd5
82
SHA256 (xpi/thunderbird-i18n-60.5.0/nn-NO.xpi) = a33c9e8b7dcffeb1702b12c25c6a719096d65d69dc85877c066a35babb4b2824
83
SIZE (xpi/thunderbird-i18n-60.4.0/nn-NO.xpi) = 577653
83
SIZE (xpi/thunderbird-i18n-60.5.0/nn-NO.xpi) = 576422
84
SHA256 (xpi/thunderbird-i18n-60.4.0/pl.xpi) = 34e5cc92b559f57e808205b6029035c8a6817d25d554bf9a7179bd4ff30c39f4
84
SHA256 (xpi/thunderbird-i18n-60.5.0/pl.xpi) = 1a5b60e65adfb3f4024d25165e3e864ffb210166e61dff47bb9abdbea2b99dcb
85
SIZE (xpi/thunderbird-i18n-60.4.0/pl.xpi) = 480723
85
SIZE (xpi/thunderbird-i18n-60.5.0/pl.xpi) = 480725
86
SHA256 (xpi/thunderbird-i18n-60.4.0/pt-BR.xpi) = 495c5fbbf026aaafa42077515a2fbadb55d43cc4ee8f8787be9e05d7941eee7e
86
SHA256 (xpi/thunderbird-i18n-60.5.0/pt-BR.xpi) = 8fbbb1022f49ca9fce1aa1481afff4ed377d1281e9da3d3a3f51faf42b4ab0b0
87
SIZE (xpi/thunderbird-i18n-60.4.0/pt-BR.xpi) = 585017
87
SIZE (xpi/thunderbird-i18n-60.5.0/pt-BR.xpi) = 588834
88
SHA256 (xpi/thunderbird-i18n-60.4.0/pt-PT.xpi) = 92fd8404c5a8068e34fdac8a5b98cfe240c35d55cb39ee69a5dfcefc51ebdac2
88
SHA256 (xpi/thunderbird-i18n-60.5.0/pt-PT.xpi) = b7f8f9e440778e3a19929ce6f04c98af905767b888a87380a108b28f8455426f
89
SIZE (xpi/thunderbird-i18n-60.4.0/pt-PT.xpi) = 593185
89
SIZE (xpi/thunderbird-i18n-60.5.0/pt-PT.xpi) = 593186
90
SHA256 (xpi/thunderbird-i18n-60.4.0/rm.xpi) = bf7a352d7a657f09fe1cc58f5c244cd60175c5c7b7f8680c17a00392e0cecfa0
90
SHA256 (xpi/thunderbird-i18n-60.5.0/rm.xpi) = b8de1432cb2440d07ed0624367dca3629f0494dd6a5f3052c7f7e5b6df715c54
91
SIZE (xpi/thunderbird-i18n-60.4.0/rm.xpi) = 578383
91
SIZE (xpi/thunderbird-i18n-60.5.0/rm.xpi) = 578384
92
SHA256 (xpi/thunderbird-i18n-60.4.0/ro.xpi) = 41a19cac8bd9de6b88166135ae9589d67285ea036354be364ee1d67a00d4430d
92
SHA256 (xpi/thunderbird-i18n-60.5.0/ro.xpi) = 03e25d7e493d13f156e75885dd5adc4686202d01976750c433169f3ba2bbdf62
93
SIZE (xpi/thunderbird-i18n-60.4.0/ro.xpi) = 584307
93
SIZE (xpi/thunderbird-i18n-60.5.0/ro.xpi) = 584308
94
SHA256 (xpi/thunderbird-i18n-60.4.0/ru.xpi) = 2a344065f7c5c99e82a04e0e68bd048ed3973f65a6754086b47dcb30604e7759
94
SHA256 (xpi/thunderbird-i18n-60.5.0/ru.xpi) = 2b4398c00a09d7a1a306933d25fced39bbc73b1455ff816f7a288aae70b8bcc5
95
SIZE (xpi/thunderbird-i18n-60.4.0/ru.xpi) = 694705
95
SIZE (xpi/thunderbird-i18n-60.5.0/ru.xpi) = 694705
96
SHA256 (xpi/thunderbird-i18n-60.4.0/si.xpi) = a0c089fb064aeb91406b1d01db52dba3bac4acb6a476de5ffd22365aad4cca4a
96
SHA256 (xpi/thunderbird-i18n-60.5.0/si.xpi) = bd82a180d5f2081505a3ff8c09de9936511d1d616e9947c913c5d45ae0105ca4
97
SIZE (xpi/thunderbird-i18n-60.4.0/si.xpi) = 643791
97
SIZE (xpi/thunderbird-i18n-60.5.0/si.xpi) = 647596
98
SHA256 (xpi/thunderbird-i18n-60.4.0/sk.xpi) = b8bcc8ddc26071e0715e94ee2019887ce344e9aff7f3a4a935045425cdb2a854
98
SHA256 (xpi/thunderbird-i18n-60.5.0/sk.xpi) = 26901d561b82c040e733fe061829c9d688b4869cf4ff5dcda3d84b3e1178a0a5
99
SIZE (xpi/thunderbird-i18n-60.4.0/sk.xpi) = 612216
99
SIZE (xpi/thunderbird-i18n-60.5.0/sk.xpi) = 612216
100
SHA256 (xpi/thunderbird-i18n-60.4.0/sl.xpi) = 3069b15f8d89dbe2aa4bcbde4cfd565cf7c4bc6afcbc65dfcfe95145191a581d
100
SHA256 (xpi/thunderbird-i18n-60.5.0/sl.xpi) = 202dfacbe227291e69e81ff96540aac1e3444209d62b083c172fc23c72d54ee2
101
SIZE (xpi/thunderbird-i18n-60.4.0/sl.xpi) = 589946
101
SIZE (xpi/thunderbird-i18n-60.5.0/sl.xpi) = 589947
102
SHA256 (xpi/thunderbird-i18n-60.4.0/sq.xpi) = 3af0514bab03075e44857f8567a3bfdacc5c99549694b9af0d9d499ccb7bfcb8
102
SHA256 (xpi/thunderbird-i18n-60.5.0/sq.xpi) = 82fc6083998e6362b0bfc8e263edad82346463a226eddc6b04bcf7fb380b6788
103
SIZE (xpi/thunderbird-i18n-60.4.0/sq.xpi) = 593096
103
SIZE (xpi/thunderbird-i18n-60.5.0/sq.xpi) = 593096
104
SHA256 (xpi/thunderbird-i18n-60.4.0/sr.xpi) = 6da1aefdc798f589ce3c6f41cc37099f345cdaaaea9851aedbbd3cf6256c49d5
104
SHA256 (xpi/thunderbird-i18n-60.5.0/sr.xpi) = dc931da27dda3502cd22abf0837afaecda15160476758e5e2aa194d517bb463f
105
SIZE (xpi/thunderbird-i18n-60.4.0/sr.xpi) = 637720
105
SIZE (xpi/thunderbird-i18n-60.5.0/sr.xpi) = 641527
106
SHA256 (xpi/thunderbird-i18n-60.4.0/sv-SE.xpi) = e295ff95f42cb223c06385b1def1c95cbca0222f475763db410664a8d134ad8a
106
SHA256 (xpi/thunderbird-i18n-60.5.0/sv-SE.xpi) = f1be900c89ec7b88b7b3511360729b0b237d01f10d26aaad2857a8f9d295bc9b
107
SIZE (xpi/thunderbird-i18n-60.4.0/sv-SE.xpi) = 594077
107
SIZE (xpi/thunderbird-i18n-60.5.0/sv-SE.xpi) = 594079
108
SHA256 (xpi/thunderbird-i18n-60.4.0/tr.xpi) = 193170d3b22752635146fd825b7e350d29133aa4b2fdda6e82e5a6e7cc386d7e
108
SHA256 (xpi/thunderbird-i18n-60.5.0/tr.xpi) = c1a1b0135c22ab60c2a6542fb1571413e9d78d5a70a4efa57e798b6998381971
109
SIZE (xpi/thunderbird-i18n-60.4.0/tr.xpi) = 598009
109
SIZE (xpi/thunderbird-i18n-60.5.0/tr.xpi) = 598010
110
SHA256 (xpi/thunderbird-i18n-60.4.0/uk.xpi) = 6b5a6d4396fec63d35c86a4657e4d1f4a8adcc3ee1587f4e37d5c0809f45035c
110
SHA256 (xpi/thunderbird-i18n-60.5.0/uk.xpi) = a3e95424e17a6b370c510aba63ee49521beddb7b843971e540b2ae7e7785747f
111
SIZE (xpi/thunderbird-i18n-60.4.0/uk.xpi) = 684154
111
SIZE (xpi/thunderbird-i18n-60.5.0/uk.xpi) = 684154
112
SHA256 (xpi/thunderbird-i18n-60.4.0/vi.xpi) = df16c0f5e69eaa3a2c62e35774e3ced68a87930ed8124737aea9aeb7000d2d6f
112
SHA256 (xpi/thunderbird-i18n-60.5.0/vi.xpi) = 24367d6109f0e0a996e3623e15aaa75a84a8373b7a025edf7e84e8f56421b315
113
SIZE (xpi/thunderbird-i18n-60.4.0/vi.xpi) = 638420
113
SIZE (xpi/thunderbird-i18n-60.5.0/vi.xpi) = 637199
114
SHA256 (xpi/thunderbird-i18n-60.4.0/zh-CN.xpi) = 124b2d5e34fdc4d2336bc42170590c4185ab3eae593230f3d13b1c95df373320
114
SHA256 (xpi/thunderbird-i18n-60.5.0/zh-CN.xpi) = ccb35f028c1741133ba6449858fd543fc9fad93d17c1887df55dd5e751f2799f
115
SIZE (xpi/thunderbird-i18n-60.4.0/zh-CN.xpi) = 622465
115
SIZE (xpi/thunderbird-i18n-60.5.0/zh-CN.xpi) = 626283
116
SHA256 (xpi/thunderbird-i18n-60.4.0/zh-TW.xpi) = b2584a3419bb723a1f97a4cd1588528e4d62bdb03dcce3840b36a399e40c4b29
116
SHA256 (xpi/thunderbird-i18n-60.5.0/zh-TW.xpi) = 08ce589a9ee4e41ab1d23338dcc9758b6eb866cfdf27cee44e6cfa7fbc460c59
117
SIZE (xpi/thunderbird-i18n-60.4.0/zh-TW.xpi) = 626189
117
SIZE (xpi/thunderbird-i18n-60.5.0/zh-TW.xpi) = 626190
(-)b/mail/thunderbird/Makefile (-4 / +3 lines)
Lines 2-19 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	thunderbird
4
PORTNAME=	thunderbird
5
DISTVERSION=	60.4.0
5
DISTVERSION=	60.5.0
6
PORTREVISION=	3
7
CATEGORIES=	mail news net-im ipv6
6
CATEGORIES=	mail news net-im ipv6
8
MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
7
MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
9
		MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
8
		MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build2/source
10
DISTFILES=	${DISTNAME}.source${EXTRACT_SUFX}
9
DISTFILES=	${DISTNAME}.source${EXTRACT_SUFX}
11
10
12
MAINTAINER=	gecko@FreeBSD.org
11
MAINTAINER=	gecko@FreeBSD.org
13
COMMENT=	Mozilla Thunderbird is standalone mail and news that stands above
12
COMMENT=	Mozilla Thunderbird is standalone mail and news that stands above
14
13
15
BUILD_DEPENDS=	nspr>=4.19:devel/nspr \
14
BUILD_DEPENDS=	nspr>=4.19:devel/nspr \
16
		nss>=3.36.1:security/nss \
15
		nss>=3.36.7:security/nss \
17
		icu>=59.1,1:devel/icu \
16
		icu>=59.1,1:devel/icu \
18
		libevent>=2.1.8:devel/libevent \
17
		libevent>=2.1.8:devel/libevent \
19
		harfbuzz>=1.7.6:print/harfbuzz \
18
		harfbuzz>=1.7.6:print/harfbuzz \
(-)b/mail/thunderbird/distinfo (-3 / +3 lines)
Lines 1-3 Link Here
1
TIMESTAMP = 1545056672
1
TIMESTAMP = 1548237843
2
SHA256 (thunderbird-60.4.0.source.tar.xz) = 27a6cdd9cfdd7ce70b1d193c64739db6be6b39eec308f0122d8472a6cd243e75
2
SHA256 (thunderbird-60.5.0.source.tar.xz) = 6f96e87e832e4089c69418db64e19afd54a0acefe3e0364087a8bc6f442b9566
3
SIZE (thunderbird-60.4.0.source.tar.xz) = 284938284
3
SIZE (thunderbird-60.5.0.source.tar.xz) = 285636196
(-)b/mail/thunderbird/files/patch-bug1375074 (-25 / +26 lines)
Lines 40-82 diff --git js/src/vm/UnboxedObject.cpp js/src/vm/UnboxedObject.cpp Link Here
40
index c8c178965c488..5badf328ede4f 100644
40
index c8c178965c488..5badf328ede4f 100644
41
--- js/src/vm/UnboxedObject.cpp
41
--- js/src/vm/UnboxedObject.cpp
42
+++ js/src/vm/UnboxedObject.cpp
42
+++ js/src/vm/UnboxedObject.cpp
43
@@ -95,7 +95,15 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group)
43
@@ -86,8 +86,15 @@ static const uintptr_t CLEAR_CONSTRUCTOR_CODE_TOKEN = 
44
 #endif
44
 #endif
45
 
45
 
46
 #ifdef JS_CODEGEN_ARM64
46
 #ifdef JS_CODEGEN_ARM64
47
-    // ARM64 communicates stack address via sp, but uses a pseudo-sp for addressing.
47
-  // ARM64 communicates stack address via sp, but uses a pseudo-sp for
48
+    // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for
48
-  // addressing.
49
+    // addressing.  The register we use for PSP may however also be used by
49
+  // ARM64 communicates stack address via sp, but uses a pseudo-sp (PSP) for
50
+    // calling code, and it is nonvolatile, so save it.  Do this as a special
50
+  // addressing.  The register we use for PSP may however also be used by
51
+    // case first because the generic save/restore code needs the PSP to be
51
+  // calling code, and it is nonvolatile, so save it.  Do this as a special
52
+    // initialized already.
52
+  // case first because the generic save/restore code needs the PSP to be
53
+    MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64()));
53
+  // initialized already.
54
+    masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex));
54
+  MOZ_ASSERT(PseudoStackPointer64.Is(masm.GetStackPointer64()));
55
+  masm.Str(PseudoStackPointer64, vixl::MemOperand(sp, -16, vixl::PreIndex));
55
+
56
+
56
+    // Initialize the PSP from the SP.
57
+  // Initialize the PSP from the SP.
57
     masm.initStackPtr();
58
   masm.initStackPtr();
58
 #endif
59
 #endif
59
 
60
 
60
@@ -233,7 +241,22 @@ UnboxedLayout::makeConstructorCode(JSContext* cx, HandleObjectGroup group)
61
@@ -239,7 +246,22 @@ static const uintptr_t CLEAR_CONSTRUCTOR_CODE_TOKEN = 
61
         masm.pop(ScratchDoubleReg);
62
   if (ScratchDoubleReg.volatile_()) masm.pop(ScratchDoubleReg);
62
     masm.PopRegsInMask(savedNonVolatileRegisters);
63
   masm.PopRegsInMask(savedNonVolatileRegisters);
63
 
64
 
64
+#ifdef JS_CODEGEN_ARM64
65
+#ifdef JS_CODEGEN_ARM64
65
+    // Now restore the value that was in the PSP register on entry, and return.
66
+  // Now restore the value that was in the PSP register on entry, and return.
66
+
67
+
67
+    // Obtain the correct SP from the PSP.
68
+  // Obtain the correct SP from the PSP.
68
+    masm.Mov(sp, PseudoStackPointer64);
69
+  masm.Mov(sp, PseudoStackPointer64);
69
+
70
+
70
+    // Restore the saved value of the PSP register, this value is whatever the
71
+  // Restore the saved value of the PSP register, this value is whatever the
71
+    // caller had saved in it, not any actual SP value, and it must not be
72
+  // caller had saved in it, not any actual SP value, and it must not be
72
+    // overwritten subsequently.
73
+  // overwritten subsequently.
73
+    masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex));
74
+  masm.Ldr(PseudoStackPointer64, vixl::MemOperand(sp, 16, vixl::PostIndex));
74
+
75
+
75
+    // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong.
76
+  // Perform a plain Ret(), as abiret() will move SP <- PSP and that is wrong.
76
+    masm.Ret(vixl::lr);
77
+  masm.Ret(vixl::lr);
77
+#else
78
+#else
78
     masm.abiret();
79
   masm.abiret();
79
+#endif
80
+#endif
80
 
81
 
81
     masm.bind(&failureStoreOther);
82
   masm.bind(&failureStoreOther);
82
 
83
 
(-)b/mail/thunderbird/files/patch-bug1411481 (-30 / +28 lines)
Lines 15-85 diff --git dom/canvas/CanvasRenderingContext2D.cpp dom/canvas/CanvasRenderingCon Link Here
15
index ef3f868bdbf7..8666564b4d0c 100644
15
index ef3f868bdbf7..8666564b4d0c 100644
16
--- dom/canvas/CanvasRenderingContext2D.cpp
16
--- dom/canvas/CanvasRenderingContext2D.cpp
17
+++ dom/canvas/CanvasRenderingContext2D.cpp
17
+++ dom/canvas/CanvasRenderingContext2D.cpp
18
@@ -1438,7 +1438,8 @@ CanvasRenderingContext2D::AllowOpenGLCanvas() const
18
@@ -1358,7 +1358,8 @@ bool CanvasRenderingContext2D::AllowOpenGLCanvas() con
19
   // HTMLCanvasElement::GetCompositorBackendType would return LAYERS_NONE
19
   // HTMLCanvasElement::GetCompositorBackendType would return LAYERS_NONE
20
   // as well, so it wouldn't help much.
20
   // as well, so it wouldn't help much.
21
 
21
 
22
-  return (mCompositorBackend == LayersBackend::LAYERS_OPENGL) &&
22
-  return (mCompositorBackend == LayersBackend::LAYERS_OPENGL) &&
23
+  return (mCompositorBackend == LayersBackend::LAYERS_OPENGL ||
23
+  return (mCompositorBackend == LayersBackend::LAYERS_OPENGL ||
24
+          mCompositorBackend == LayersBackend::LAYERS_WR) &&
24
+          mCompositorBackend == LayersBackend::LAYERS_WR) &&
25
     gfxPlatform::GetPlatform()->AllowOpenGLCanvas();
25
          gfxPlatform::GetPlatform()->AllowOpenGLCanvas();
26
 }
26
 }
27
 
27
 
28
diff --git gfx/thebes/gfxPlatform.cpp gfx/thebes/gfxPlatform.cpp
28
diff --git gfx/thebes/gfxPlatform.cpp gfx/thebes/gfxPlatform.cpp
29
index b9beea68d8c5..82635f9ab3ce 100644
29
index b9beea68d8c5..82635f9ab3ce 100644
30
--- gfx/thebes/gfxPlatform.cpp
30
--- gfx/thebes/gfxPlatform.cpp
31
+++ gfx/thebes/gfxPlatform.cpp
31
+++ gfx/thebes/gfxPlatform.cpp
32
@@ -1386,7 +1386,8 @@ bool gfxPlatform::AllowOpenGLCanvas()
32
@@ -1341,7 +1341,8 @@ bool gfxPlatform::AllowOpenGLCanvas() {
33
   // so we let content process always assume correct compositor backend.
34
   // The callers have to do the right thing.
33
   // The callers have to do the right thing.
35
   bool correctBackend = !XRE_IsParentProcess() ||
34
   bool correctBackend =
36
-    ((mCompositorBackend == LayersBackend::LAYERS_OPENGL) &&
35
       !XRE_IsParentProcess() ||
37
+    ((mCompositorBackend == LayersBackend::LAYERS_OPENGL ||
36
-      ((mCompositorBackend == LayersBackend::LAYERS_OPENGL) &&
38
+      mCompositorBackend == LayersBackend::LAYERS_WR) &&
37
+      ((mCompositorBackend == LayersBackend::LAYERS_OPENGL ||
39
      (GetContentBackendFor(mCompositorBackend) == BackendType::SKIA));
38
+        mCompositorBackend == LayersBackend::LAYERS_WR) &&
39
        (GetContentBackendFor(mCompositorBackend) == BackendType::SKIA));
40
 
40
 
41
   if (gfxPrefs::CanvasAzureAccelerated() && correctBackend) {
41
   if (gfxPrefs::CanvasAzureAccelerated() && correctBackend) {
42
diff --git gfx/thebes/gfxPlatform.h gfx/thebes/gfxPlatform.h
42
diff --git gfx/thebes/gfxPlatform.h gfx/thebes/gfxPlatform.h
43
index c988eb1168a8..3bbf2b763f26 100644
43
index c988eb1168a8..3bbf2b763f26 100644
44
--- gfx/thebes/gfxPlatform.h
44
--- gfx/thebes/gfxPlatform.h
45
+++ gfx/thebes/gfxPlatform.h
45
+++ gfx/thebes/gfxPlatform.h
46
@@ -286,7 +286,7 @@ public:
46
@@ -265,7 +265,7 @@ class gfxPlatform {
47
     /// asking for it, we will examine the commands in the first few seconds
47
   /// asking for it, we will examine the commands in the first few seconds
48
     /// of the canvas usage, and potentially change to accelerated or
48
   /// of the canvas usage, and potentially change to accelerated or
49
     /// non-accelerated canvas.
49
   /// non-accelerated canvas.
50
-    bool AllowOpenGLCanvas();
50
-  bool AllowOpenGLCanvas();
51
+    virtual bool AllowOpenGLCanvas();
51
+  virtual bool AllowOpenGLCanvas();
52
     virtual void InitializeSkiaCacheLimits();
52
   virtual void InitializeSkiaCacheLimits();
53
 
53
 
54
     static bool AsyncPanZoomEnabled();
54
   static bool AsyncPanZoomEnabled();
55
diff --git gfx/thebes/gfxWindowsPlatform.cpp gfx/thebes/gfxWindowsPlatform.cpp
55
diff --git gfx/thebes/gfxWindowsPlatform.cpp gfx/thebes/gfxWindowsPlatform.cpp
56
index 9ba6f40c6cc0..4d65791d075f 100644
56
index 9ba6f40c6cc0..4d65791d075f 100644
57
--- gfx/thebes/gfxWindowsPlatform.cpp
57
--- gfx/thebes/gfxWindowsPlatform.cpp
58
+++ gfx/thebes/gfxWindowsPlatform.cpp
58
+++ gfx/thebes/gfxWindowsPlatform.cpp
59
@@ -509,6 +509,13 @@ gfxWindowsPlatform::UpdateRenderMode()
59
@@ -466,6 +466,11 @@ void gfxWindowsPlatform::UpdateRenderMode() {
60
   }
60
   }
61
 }
61
 }
62
 
62
 
63
+bool
63
+bool gfxWindowsPlatform::AllowOpenGLCanvas() {
64
+gfxWindowsPlatform::AllowOpenGLCanvas()
65
+{
66
+  // OpenGL canvas is not supported on windows
64
+  // OpenGL canvas is not supported on windows
67
+  return false;
65
+  return false;
68
+}
66
+}
69
+
67
+
70
 mozilla::gfx::BackendType
68
 mozilla::gfx::BackendType gfxWindowsPlatform::GetContentBackendFor(
71
 gfxWindowsPlatform::GetContentBackendFor(mozilla::layers::LayersBackend aLayers)
69
     mozilla::layers::LayersBackend aLayers) {
72
 {
70
   mozilla::gfx::BackendType defaultBackend =
73
diff --git gfx/thebes/gfxWindowsPlatform.h gfx/thebes/gfxWindowsPlatform.h
71
diff --git gfx/thebes/gfxWindowsPlatform.h gfx/thebes/gfxWindowsPlatform.h
74
index 47048de8f5f5..47ec0e9e5547 100644
72
index 47048de8f5f5..47ec0e9e5547 100644
75
--- gfx/thebes/gfxWindowsPlatform.h
73
--- gfx/thebes/gfxWindowsPlatform.h
76
+++ gfx/thebes/gfxWindowsPlatform.h
74
+++ gfx/thebes/gfxWindowsPlatform.h
77
@@ -174,6 +174,8 @@ public:
75
@@ -171,6 +171,8 @@ class gfxWindowsPlatform : public gfxPlatform {
78
     void SchedulePaintIfDeviceReset() override;
76
   void SchedulePaintIfDeviceReset() override;
79
     void CheckForContentOnlyDeviceReset();
77
   void CheckForContentOnlyDeviceReset();
80
 
78
 
81
+    bool AllowOpenGLCanvas() override;
79
+  bool AllowOpenGLCanvas() override;
82
+
80
+
83
     mozilla::gfx::BackendType GetContentBackendFor(mozilla::layers::LayersBackend aLayers) override;
81
   mozilla::gfx::BackendType GetContentBackendFor(
82
       mozilla::layers::LayersBackend aLayers) override;
84
 
83
 
85
     mozilla::gfx::BackendType GetPreferredCanvasBackend() override;
(-)b/mail/thunderbird/files/patch-bug1438678 (-156 / +156 lines)
Lines 82-88 index e27f3eedc1b1..60be7005354b 100644 Link Here
82
 
82
 
83
 #include "ContentParent.h"
83
 #include "ContentParent.h"
84
 #include "TabParent.h"
84
 #include "TabParent.h"
85
@@ -1998,61 +1999,56 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
85
@@ -1857,64 +1858,56 @@ bool ContentParent::LaunchSubprocess(
86
   extraArgs.push_back(idStr);
86
   extraArgs.push_back(idStr);
87
   extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser");
87
   extraArgs.push_back(IsForBrowser() ? "-isForBrowser" : "-notForBrowser");
88
 
88
 
Lines 100-130 index e27f3eedc1b1..60be7005354b 100644 Link Here
100
 
100
 
101
-  for (unsigned int i = 0; i < prefsLen; i++) {
101
-  for (unsigned int i = 0; i < prefsLen; i++) {
102
-    const char* prefName = ContentPrefs::GetEarlyPref(i);
102
-    const char* prefName = ContentPrefs::GetEarlyPref(i);
103
-    MOZ_ASSERT(i == 0 || strcmp(prefName, ContentPrefs::GetEarlyPref(i - 1)) > 0,
103
-    MOZ_ASSERT(
104
-               "Content process preferences should be sorted alphabetically.");
104
-        i == 0 || strcmp(prefName, ContentPrefs::GetEarlyPref(i - 1)) > 0,
105
-        "Content process preferences should be sorted alphabetically.");
105
-
106
-
106
-    if (!Preferences::MustSendToContentProcesses(prefName)) {
107
-    if (!Preferences::MustSendToContentProcesses(prefName)) {
107
-      continue;
108
-      continue;
108
-    }
109
-    }
109
-
110
-
110
-    switch (Preferences::GetType(prefName)) {
111
-    switch (Preferences::GetType(prefName)) {
111
-    case nsIPrefBranch::PREF_INT:
112
-      case nsIPrefBranch::PREF_INT:
112
-      intPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
113
-        intPrefs.Append(
113
-      break;
114
-            nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
114
-    case nsIPrefBranch::PREF_BOOL:
115
-        break;
115
-      boolPrefs.Append(nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
116
-      case nsIPrefBranch::PREF_BOOL:
116
-      break;
117
-        boolPrefs.Append(
117
-    case nsIPrefBranch::PREF_STRING: {
118
-            nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
118
-      nsAutoCString value;
119
-        break;
119
-      Preferences::GetCString(prefName, value);
120
-      case nsIPrefBranch::PREF_STRING: {
120
-      stringPrefs.Append(nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
121
-        nsAutoCString value;
121
-      }
122
-        Preferences::GetCString(prefName, value);
122
-      break;
123
-        stringPrefs.Append(
123
-    case nsIPrefBranch::PREF_INVALID:
124
-            nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
124
-      break;
125
-      } break;
125
-    default:
126
-      case nsIPrefBranch::PREF_INVALID:
126
-      printf("preference type: %x\n", Preferences::GetType(prefName));
127
-        break;
127
-      MOZ_CRASH();
128
-      default:
129
-        printf("preference type: %x\n", Preferences::GetType(prefName));
130
-        MOZ_CRASH();
128
-    }
131
-    }
129
+  // Set up the shared memory.
132
+  // Set up the shared memory.
130
+  base::SharedMemory shm;
133
+  base::SharedMemory shm;
Lines 133-144 index e27f3eedc1b1..60be7005354b 100644 Link Here
133
+    NS_ERROR("failed to create shared memory in the parent");
136
+    NS_ERROR("failed to create shared memory in the parent");
134
+    MarkAsDead();
137
+    MarkAsDead();
135
+    return false;
138
+    return false;
136
+  }
139
   }
137
+  if (!shm.Map(prefs.Length())) {
140
+  if (!shm.Map(prefs.Length())) {
138
+    NS_ERROR("failed to map shared memory in the parent");
141
+    NS_ERROR("failed to map shared memory in the parent");
139
+    MarkAsDead();
142
+    MarkAsDead();
140
+    return false;
143
+    return false;
141
   }
144
+  }
142
 
145
 
143
-  nsCString schedulerPrefs = Scheduler::GetPrefs();
146
-  nsCString schedulerPrefs = Scheduler::GetPrefs();
144
+  // Copy the serialized prefs into the shared memory.
147
+  // Copy the serialized prefs into the shared memory.
Lines 164-170 index e27f3eedc1b1..60be7005354b 100644 Link Here
164
+  mSubprocess->AddHandleToShare(prefsHandle);
167
+  mSubprocess->AddHandleToShare(prefsHandle);
165
+  extraArgs.push_back("-prefsHandle");
168
+  extraArgs.push_back("-prefsHandle");
166
+  extraArgs.push_back(
169
+  extraArgs.push_back(
167
+    nsPrintfCString("%zu", reinterpret_cast<uintptr_t>(prefsHandle)).get());
170
+      nsPrintfCString("%zu", reinterpret_cast<uintptr_t>(prefsHandle)).get());
168
+#else
171
+#else
169
+  // In contrast, Unix fds are per-process. So remap the fd to a fixed one that
172
+  // In contrast, Unix fds are per-process. So remap the fd to a fixed one that
170
+  // will be used in the child.
173
+  // will be used in the child.
Lines 175-192 index e27f3eedc1b1..60be7005354b 100644 Link Here
175
+  // remapping so it doesn't get closed in the child.
178
+  // remapping so it doesn't get closed in the child.
176
+  mSubprocess->AddFdToRemap(shm.handle().fd, kPrefsFileDescriptor);
179
+  mSubprocess->AddFdToRemap(shm.handle().fd, kPrefsFileDescriptor);
177
+#endif
180
+#endif
178
+
181
 
179
+  // Pass the length via a command flag.
182
+  // Pass the length via a command flag.
180
+  extraArgs.push_back("-prefsLen");
183
+  extraArgs.push_back("-prefsLen");
181
+  extraArgs.push_back(nsPrintfCString("%zu", uintptr_t(prefs.Length())).get());
184
+  extraArgs.push_back(nsPrintfCString("%zu", uintptr_t(prefs.Length())).get());
182
 
185
+
183
   // Scheduler prefs need to be handled differently because the scheduler needs
186
   // Scheduler prefs need to be handled differently because the scheduler needs
184
   // to start up in the content process before the normal preferences service.
187
   // to start up in the content process before the normal preferences service.
185
+  nsCString schedulerPrefs = Scheduler::GetPrefs();
188
+  nsCString schedulerPrefs = Scheduler::GetPrefs();
186
   extraArgs.push_back("-schedulerPrefs");
189
   extraArgs.push_back("-schedulerPrefs");
187
   extraArgs.push_back(schedulerPrefs.get());
190
   extraArgs.push_back(schedulerPrefs.get());
188
 
191
 
189
@@ -2061,6 +2057,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
192
@@ -1923,6 +1916,7 @@ bool ContentParent::LaunchSubprocess(
190
   }
193
   }
191
 
194
 
192
   if (!mSubprocess->LaunchAndWaitForProcessHandle(extraArgs)) {
195
   if (!mSubprocess->LaunchAndWaitForProcessHandle(extraArgs)) {
Lines 215-238 index e3c1f16910c6..2441c8cb9224 100644 Link Here
215
 #include "mozilla/SandboxSettings.h"
218
 #include "mozilla/SandboxSettings.h"
216
 #include "nsAppDirectoryServiceDefs.h"
219
 #include "nsAppDirectoryServiceDefs.h"
217
 #include "nsDirectoryService.h"
220
 #include "nsDirectoryService.h"
218
@@ -81,6 +82,16 @@ SetUpSandboxEnvironment()
221
@@ -76,14 +77,21 @@ static void SetUpSandboxEnvironment() {
219
 }
222
 }
220
 #endif
223
 #endif
221
 
224
 
222
+#ifdef ANDROID
225
+#ifdef ANDROID
223
+static int gPrefsFd = -1;
226
+static int gPrefsFd = -1;
224
+
227
+
225
+void
228
+void SetPrefsFd(int aFd) { gPrefsFd = aFd; }
226
+SetPrefsFd(int aFd)
227
+{
228
+  gPrefsFd = aFd;
229
+}
230
+#endif
229
+#endif
231
+
230
+
232
 bool
231
 bool ContentProcess::Init(int aArgc, char* aArgv[]) {
233
 ContentProcess::Init(int aArgc, char* aArgv[])
232
   // If passed in grab the application path for xpcom init
234
 {
235
@@ -88,9 +99,10 @@ ContentProcess::Init(int aArgc, char* aArgv[])
236
   bool foundAppdir = false;
233
   bool foundAppdir = false;
237
   bool foundChildID = false;
234
   bool foundChildID = false;
238
   bool foundIsForBrowser = false;
235
   bool foundIsForBrowser = false;
Lines 246-252 index e3c1f16910c6..2441c8cb9224 100644 Link Here
246
   bool foundSchedulerPrefs = false;
243
   bool foundSchedulerPrefs = false;
247
 
244
 
248
   uint64_t childID;
245
   uint64_t childID;
249
@@ -103,7 +115,8 @@ ContentProcess::Init(int aArgc, char* aArgv[])
246
@@ -96,7 +104,8 @@ bool ContentProcess::Init(int aArgc, char* aArgv[]) {
250
 #endif
247
 #endif
251
 
248
 
252
   char* schedulerPrefs = nullptr;
249
   char* schedulerPrefs = nullptr;
Lines 256-272 index e3c1f16910c6..2441c8cb9224 100644 Link Here
256
   for (int idx = aArgc; idx > 0; idx--) {
253
   for (int idx = aArgc; idx > 0; idx--) {
257
     if (!aArgv[idx]) {
254
     if (!aArgv[idx]) {
258
       continue;
255
       continue;
259
@@ -134,54 +147,24 @@ ContentProcess::Init(int aArgc, char* aArgv[])
256
@@ -128,55 +137,24 @@ bool ContentProcess::Init(int aArgc, char* aArgv[]) {
260
       }
257
       }
261
       isForBrowser = strcmp(aArgv[idx], "-notForBrowser");
258
       isForBrowser = strcmp(aArgv[idx], "-notForBrowser");
262
       foundIsForBrowser = true;
259
       foundIsForBrowser = true;
263
-    } else if (!strcmp(aArgv[idx], "-intPrefs")) {
260
-    } else if (!strcmp(aArgv[idx], "-intPrefs")) {
264
-      char* str = aArgv[idx + 1];
261
+#ifdef XP_WIN
262
+    } else if (!strcmp(aArgv[idx], "-prefsHandle")) {
263
       char* str = aArgv[idx + 1];
265
-      while (*str) {
264
-      while (*str) {
266
-        int32_t index = strtol(str, &str, 10);
265
-        int32_t index = strtol(str, &str, 10);
267
-        MOZ_ASSERT(str[0] == ':');
266
-        MOZ_ASSERT(str[0] == ':');
268
-        str++;
267
-        str++;
269
-        MaybePrefValue value(PrefValue(static_cast<int32_t>(strtol(str, &str, 10))));
268
-        MaybePrefValue value(
269
-            PrefValue(static_cast<int32_t>(strtol(str, &str, 10))));
270
-        MOZ_ASSERT(str[0] == '|');
270
-        MOZ_ASSERT(str[0] == '|');
271
-        str++;
271
-        str++;
272
-        // XXX: we assume these values as default values, which may not be
272
-        // XXX: we assume these values as default values, which may not be
Lines 278-285 index e3c1f16910c6..2441c8cb9224 100644 Link Here
278
-      }
278
-      }
279
-      foundIntPrefs = true;
279
-      foundIntPrefs = true;
280
-    } else if (!strcmp(aArgv[idx], "-boolPrefs")) {
280
-    } else if (!strcmp(aArgv[idx], "-boolPrefs")) {
281
+#ifdef XP_WIN
281
+      MOZ_ASSERT(str[0] != '\0');
282
+    } else if (!strcmp(aArgv[idx], "-prefsHandle")) {
282
+      // ContentParent uses %zu to print a word-sized unsigned integer. So even
283
+      // though strtoull() returns a long long int, it will fit in a uintptr_t.
284
+      prefsHandle = reinterpret_cast<HANDLE>(strtoull(str, &str, 10));
285
+      MOZ_ASSERT(str[0] == '\0');
286
+      foundPrefsHandle = true;
287
+#endif
288
+    } else if (!strcmp(aArgv[idx], "-prefsLen")) {
283
       char* str = aArgv[idx + 1];
289
       char* str = aArgv[idx + 1];
284
-      while (*str) {
290
-      while (*str) {
285
-        int32_t index = strtol(str, &str, 10);
291
-        int32_t index = strtol(str, &str, 10);
Lines 294-308 index e3c1f16910c6..2441c8cb9224 100644 Link Here
294
-      }
300
-      }
295
-      foundBoolPrefs = true;
301
-      foundBoolPrefs = true;
296
-    } else if (!strcmp(aArgv[idx], "-stringPrefs")) {
302
-    } else if (!strcmp(aArgv[idx], "-stringPrefs")) {
297
+      MOZ_ASSERT(str[0] != '\0');
303
-      char* str = aArgv[idx + 1];
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) {
304
-      while (*str) {
307
-        int32_t index = strtol(str, &str, 10);
305
-        int32_t index = strtol(str, &str, 10);
308
-        MOZ_ASSERT(str[0] == ':');
306
-        MOZ_ASSERT(str[0] == ':');
Lines 327-351 index e3c1f16910c6..2441c8cb9224 100644 Link Here
327
     } else if (!strcmp(aArgv[idx], "-schedulerPrefs")) {
325
     } else if (!strcmp(aArgv[idx], "-schedulerPrefs")) {
328
       schedulerPrefs = aArgv[idx + 1];
326
       schedulerPrefs = aArgv[idx + 1];
329
       foundSchedulerPrefs = true;
327
       foundSchedulerPrefs = true;
330
@@ -209,21 +192,43 @@ ContentProcess::Init(int aArgc, char* aArgv[])
328
@@ -201,19 +179,42 @@ bool ContentProcess::Init(int aArgc, char* aArgv[]) {
331
     bool allFound = foundAppdir
329
 #endif /* XP_MACOSX && MOZ_CONTENT_SANDBOX */
332
                  && foundChildID
330
 
333
                  && foundIsForBrowser
331
     bool allFound = foundAppdir && foundChildID && foundIsForBrowser &&
334
-                 && foundIntPrefs
332
-                    foundIntPrefs && foundBoolPrefs && foundStringPrefs &&
335
-                 && foundBoolPrefs
333
-                    foundSchedulerPrefs;
336
-                 && foundStringPrefs
337
-                 && foundSchedulerPrefs;
338
-
334
-
339
+                 && foundPrefsLen
335
+                    foundPrefsLen && foundSchedulerPrefs
340
+                 && foundSchedulerPrefs
341
+#ifdef XP_WIN
336
+#ifdef XP_WIN
342
+                 && foundPrefsHandle
337
+                    && foundPrefsHandle
343
+#endif
338
+#endif
344
 #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
339
 #if defined(XP_MACOSX) && defined(MOZ_CONTENT_SANDBOX)
345
-    allFound &= foundProfile;
340
-    allFound &= foundProfile;
346
+                 && foundProfile
341
+                    && foundProfile
347
 #endif
342
 #endif
348
+                 && true;
343
+                    && true;
349
 
344
 
350
     if (allFound) {
345
     if (allFound) {
351
       break;
346
       break;
Lines 376-388 index e3c1f16910c6..2441c8cb9224 100644 Link Here
376
+                                           prefsLen);
371
+                                           prefsLen);
377
+
372
+
378
   Scheduler::SetPrefs(schedulerPrefs);
373
   Scheduler::SetPrefs(schedulerPrefs);
379
   mContent.Init(IOThreadChild::message_loop(),
374
   mContent.Init(IOThreadChild::message_loop(), ParentPid(),
380
                 ParentPid(),
375
                 IOThreadChild::channel(), childID, isForBrowser);
381
diff --git dom/ipc/ContentProcess.h dom/ipc/ContentProcess.h
376
diff --git dom/ipc/ContentProcess.h dom/ipc/ContentProcess.h
382
index a3854c761e10..6582c94da496 100644
377
index a3854c761e10..6582c94da496 100644
383
--- dom/ipc/ContentProcess.h
378
--- dom/ipc/ContentProcess.h
384
+++ dom/ipc/ContentProcess.h
379
+++ dom/ipc/ContentProcess.h
385
@@ -49,6 +49,11 @@ private:
380
@@ -45,6 +45,11 @@ class ContentProcess : public mozilla::ipc::ProcessChi
386
   DISALLOW_EVIL_CONSTRUCTORS(ContentProcess);
381
   DISALLOW_EVIL_CONSTRUCTORS(ContentProcess);
387
 };
382
 };
388
 
383
 
Lines 391-408 index a3854c761e10..6582c94da496 100644 Link Here
391
+void SetPrefsFd(int aFd);
386
+void SetPrefsFd(int aFd);
392
+#endif
387
+#endif
393
+
388
+
394
 } // namespace dom
389
 }  // namespace dom
395
 } // namespace mozilla
390
 }  // namespace mozilla
396
 
391
 
397
diff --git ipc/chromium/src/base/process_util_win.cc ipc/chromium/src/base/process_util_win.cc
392
diff --git ipc/chromium/src/base/process_util_win.cc ipc/chromium/src/base/process_util_win.cc
398
index 3ed54cd744ac..46667985cd71 100644
393
index 3ed54cd744ac..46667985cd71 100644
399
--- ipc/chromium/src/base/process_util_win.cc
394
--- ipc/chromium/src/base/process_util_win.cc
400
+++ ipc/chromium/src/base/process_util_win.cc
395
+++ ipc/chromium/src/base/process_util_win.cc
401
@@ -354,6 +354,10 @@ bool LaunchApp(const std::wstring& cmdline,
396
@@ -320,6 +320,11 @@ bool LaunchApp(const std::wstring& cmdline, const Laun
402
   LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL;
397
   LPPROC_THREAD_ATTRIBUTE_LIST lpAttributeList = NULL;
403
   std::vector<HANDLE> handlesToInherit;
398
   std::vector<HANDLE> handlesToInherit;
404
   for (HANDLE h : options.handles_to_inherit) {
399
   for (HANDLE h : options.handles_to_inherit) {
405
+    if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) == 0) {
400
+    if (SetHandleInformation(h, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT) ==
401
+        0) {
406
+      MOZ_DIAGNOSTIC_ASSERT(false, "SetHandleInformation failed");
402
+      MOZ_DIAGNOSTIC_ASSERT(false, "SetHandleInformation failed");
407
+      return false;
403
+      return false;
408
+    }
404
+    }
Lines 413-431 diff --git ipc/glue/GeckoChildProcessHost.cpp ipc/glue/GeckoChildProcessHost.cpp Link Here
413
index d18ed9edd4ca..3be1c51d10bb 100644
409
index d18ed9edd4ca..3be1c51d10bb 100644
414
--- ipc/glue/GeckoChildProcessHost.cpp
410
--- ipc/glue/GeckoChildProcessHost.cpp
415
+++ ipc/glue/GeckoChildProcessHost.cpp
411
+++ ipc/glue/GeckoChildProcessHost.cpp
416
@@ -1030,9 +1030,6 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
412
@@ -1018,9 +1018,6 @@ bool GeckoChildProcessHost::PerformAsyncLaunchInternal
417
 
413
 
418
   if (!CrashReporter::IsDummy()) {
414
   if (!CrashReporter::IsDummy()) {
419
     PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe);
415
     PROsfd h = PR_FileDesc2NativeHandle(crashAnnotationWritePipe);
420
-# if defined(MOZ_SANDBOX)
416
-#if defined(MOZ_SANDBOX)
421
-    mSandboxBroker.AddHandleToShare(reinterpret_cast<HANDLE>(h));
417
-    mSandboxBroker.AddHandleToShare(reinterpret_cast<HANDLE>(h));
422
-# endif // defined(MOZ_SANDBOX)
418
-#endif  // defined(MOZ_SANDBOX)
423
     mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast<HANDLE>(h));
419
     mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast<HANDLE>(h));
424
     std::string hStr = std::to_string(h);
420
     std::string hStr = std::to_string(h);
425
     cmdLine.AppendLooseValue(UTF8ToWide(hStr));
421
     cmdLine.AppendLooseValue(UTF8ToWide(hStr));
426
@@ -1043,6 +1040,11 @@ GeckoChildProcessHost::PerformAsyncLaunchInternal(std::vector<std::string>& aExt
422
@@ -1031,6 +1028,11 @@ bool GeckoChildProcessHost::PerformAsyncLaunchInternal
427
 
423
 
428
 # if defined(MOZ_SANDBOX)
424
 #if defined(MOZ_SANDBOX)
429
   if (shouldSandboxCurrentProcess) {
425
   if (shouldSandboxCurrentProcess) {
430
+    // Mark the handles to inherit as inheritable.
426
+    // Mark the handles to inherit as inheritable.
431
+    for (HANDLE h : mLaunchOptions->handles_to_inherit) {
427
+    for (HANDLE h : mLaunchOptions->handles_to_inherit) {
Lines 434-457 index d18ed9edd4ca..3be1c51d10bb 100644 Link Here
434
+
430
+
435
     if (mSandboxBroker.LaunchApp(cmdLine.program().c_str(),
431
     if (mSandboxBroker.LaunchApp(cmdLine.program().c_str(),
436
                                  cmdLine.command_line_string().c_str(),
432
                                  cmdLine.command_line_string().c_str(),
437
                                  mLaunchOptions->env_map,
433
                                  mLaunchOptions->env_map, mProcessType,
438
@@ -1180,7 +1182,7 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type,
434
@@ -1154,7 +1156,7 @@ void GeckoChildProcessHost::LaunchAndroidService(
439
                                             const base::file_handle_mapping_vector& fds_to_remap,
435
     const char* type, const std::vector<std::string>& argv,
440
                                             ProcessHandle* process_handle)
436
     const base::file_handle_mapping_vector& fds_to_remap,
441
 {
437
     ProcessHandle* process_handle) {
442
-  MOZ_ASSERT((fds_to_remap.size() > 0) && (fds_to_remap.size() <= 3));
438
-  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));
439
+  MOZ_RELEASE_ASSERT((2 <= fds_to_remap.size()) && (fds_to_remap.size() <= 4));
444
   JNIEnv* const env = mozilla::jni::GetEnvForThread();
440
   JNIEnv* const env = mozilla::jni::GetEnvForThread();
445
   MOZ_ASSERT(env);
441
   MOZ_ASSERT(env);
446
 
442
 
447
@@ -1189,21 +1191,25 @@ GeckoChildProcessHost::LaunchAndroidService(const char* type,
443
@@ -1164,23 +1166,26 @@ void GeckoChildProcessHost::LaunchAndroidService(
448
   for (int ix = 0; ix < argvSize; ix++) {
444
   for (int ix = 0; ix < argvSize; ix++) {
449
     jargs->SetElement(ix, jni::StringParam(argv[ix].c_str(), env));
445
     jargs->SetElement(ix, jni::StringParam(argv[ix].c_str(), env));
450
   }
446
   }
451
-  base::file_handle_mapping_vector::const_iterator it = fds_to_remap.begin();
447
-  base::file_handle_mapping_vector::const_iterator it = fds_to_remap.begin();
452
-  int32_t ipcFd = it->first;
448
-  int32_t ipcFd = it->first;
453
-  it++;
449
-  it++;
454
-  // If the Crash Reporter is disabled, there will not be a second file descriptor.
450
-  // If the Crash Reporter is disabled, there will not be a second file
451
-  // descriptor.
455
+
452
+
456
+  // XXX: this processing depends entirely on the internals of
453
+  // XXX: this processing depends entirely on the internals of
457
+  // ContentParent::LaunchSubprocess()
454
+  // ContentParent::LaunchSubprocess()
Lines 475-483 index d18ed9edd4ca..3be1c51d10bb 100644 Link Here
475
+    crashFd = fds_to_remap[2].first;
472
+    crashFd = fds_to_remap[2].first;
476
+    crashAnnotationFd = fds_to_remap[3].first;
473
+    crashAnnotationFd = fds_to_remap[3].first;
477
   }
474
   }
478
-  int32_t handle = java::GeckoProcessManager::Start(type, jargs, ipcFd, crashFd, crashAnnotationFd);
475
-  int32_t handle = java::GeckoProcessManager::Start(type, jargs, ipcFd, crashFd,
476
-                                                    crashAnnotationFd);
479
+
477
+
480
+  int32_t handle = java::GeckoProcessManager::Start(type, jargs, prefsFd, ipcFd, crashFd, crashAnnotationFd);
478
+  int32_t handle = java::GeckoProcessManager::Start(type, jargs, prefsFd, ipcFd,
479
+                                                    crashFd, crashAnnotationFd);
481
 
480
 
482
   if (process_handle) {
481
   if (process_handle) {
483
     *process_handle = handle;
482
     *process_handle = handle;
Lines 485-492 diff --git ipc/glue/GeckoChildProcessHost.h ipc/glue/GeckoChildProcessHost.h Link Here
485
index 631c42066bc7..0345e221abcc 100644
484
index 631c42066bc7..0345e221abcc 100644
486
--- ipc/glue/GeckoChildProcessHost.h
485
--- ipc/glue/GeckoChildProcessHost.h
487
+++ ipc/glue/GeckoChildProcessHost.h
486
+++ ipc/glue/GeckoChildProcessHost.h
488
@@ -103,6 +103,16 @@ public:
487
@@ -94,6 +94,16 @@ class GeckoChildProcessHost : public ChildProcessHost 
489
   }
488
   task_t GetChildTask() { return mChildTask; }
490
 #endif
489
 #endif
491
 
490
 
492
+#ifdef XP_WIN
491
+#ifdef XP_WIN
Lines 676-697 diff --git modules/libpref/Preferences.cpp modules/libpref/Preferences.cpp Link Here
676
index 330ed4a09b54..b884591c9271 100644
675
index 330ed4a09b54..b884591c9271 100644
677
--- modules/libpref/Preferences.cpp
676
--- modules/libpref/Preferences.cpp
678
+++ modules/libpref/Preferences.cpp
677
+++ modules/libpref/Preferences.cpp
679
@@ -2920,7 +2920,7 @@ public:
678
@@ -2637,7 +2637,7 @@ class AddPreferencesMemoryReporterRunnable : public Ru
680
 
679
 
681
 } // namespace
680
 }  // namespace
682
 
681
 
683
-// A list of prefs sent early from the parent, via the command line.
682
-// 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.
683
+// A list of prefs sent early from the parent, via shared memory.
685
 static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
684
 static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
686
 
685
 
687
 /* static */ already_AddRefed<Preferences>
686
 /* static */ already_AddRefed<Preferences>
688
@@ -3081,11 +3081,130 @@ NS_IMPL_ISUPPORTS(Preferences,
687
@@ -2782,12 +2782,123 @@ Preferences::~Preferences() {
688
 NS_IMPL_ISUPPORTS(Preferences, nsIPrefService, nsIObserver, nsIPrefBranch,
689
                   nsISupportsWeakReference)
689
                   nsISupportsWeakReference)
690
 
690
 
691
 /* static */ void
691
-/* static */ void Preferences::SetEarlyPreferences(
692
-Preferences::SetEarlyPreferences(const nsTArray<dom::Pref>* aDomPrefs)
692
-    const nsTArray<dom::Pref>* aDomPrefs) {
693
+Preferences::SerializeEarlyPreferences(nsCString& aStr)
693
+/* static */ void Preferences::SerializeEarlyPreferences(nsCString& aStr) {
694
+{
695
+  MOZ_RELEASE_ASSERT(InitStaticMembers());
694
+  MOZ_RELEASE_ASSERT(InitStaticMembers());
696
+
695
+
697
+  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
696
+  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
Lines 711-727 index 330ed4a09b54..b884591c9271 100644 Link Here
711
+    switch (pref->Type()) {
710
+    switch (pref->Type()) {
712
+      case PrefType::Bool:
711
+      case PrefType::Bool:
713
+        boolPrefs.Append(
712
+        boolPrefs.Append(
714
+          nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
713
+            nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
715
+        break;
714
+        break;
716
+      case PrefType::Int:
715
+      case PrefType::Int:
717
+        intPrefs.Append(
716
+        intPrefs.Append(
718
+          nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
717
+            nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
719
+        break;
718
+        break;
720
+      case PrefType::String: {
719
+      case PrefType::String: {
721
+        nsAutoCString value;
720
+        nsAutoCString value;
722
+        Preferences::GetCString(prefName, value);
721
+        Preferences::GetCString(prefName, value);
723
+        stringPrefs.Append(
722
+        stringPrefs.Append(
724
+          nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
723
+            nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
725
+      } break;
724
+      } break;
726
+      case PrefType::None:
725
+      case PrefType::None:
727
+        break;
726
+        break;
Lines 741-755 index 330ed4a09b54..b884591c9271 100644 Link Here
741
+  aStr.Append('\0');
740
+  aStr.Append('\0');
742
+}
741
+}
743
+
742
+
744
+/* static */ void
743
+/* static */ void Preferences::DeserializeEarlyPreferences(char* aStr,
745
+Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen)
744
+                                                           size_t aStrLen) {
746
 {
747
   MOZ_ASSERT(!XRE_IsParentProcess());
745
   MOZ_ASSERT(!XRE_IsParentProcess());
748
 
746
 
749
-  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(mozilla::Move(*aDomPrefs));
747
-  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>(mozilla::Move(*aDomPrefs));
750
+  MOZ_ASSERT(!gEarlyDomPrefs);
748
+  MOZ_ASSERT(!gEarlyDomPrefs);
751
+  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>();
749
+  gEarlyDomPrefs = new InfallibleTArray<dom::Pref>();
752
+
750
 
753
+  char* p = aStr;
751
+  char* p = aStr;
754
+
752
+
755
+  // XXX: we assume these pref values are default values, which may not be
753
+  // XXX: we assume these pref values are default values, which may not be
Lines 767-775 index 330ed4a09b54..b884591c9271 100644 Link Here
767
+    MOZ_ASSERT(p[0] == '|');
765
+    MOZ_ASSERT(p[0] == '|');
768
+    p++;
766
+    p++;
769
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
767
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
770
+                   /* isLocked */ false,
768
+                   /* isLocked */ false, value, dom::MaybePrefValue());
771
+                   value,
772
+                   dom::MaybePrefValue());
773
+    gEarlyDomPrefs->AppendElement(pref);
769
+    gEarlyDomPrefs->AppendElement(pref);
774
+  }
770
+  }
775
+  p++;
771
+  p++;
Lines 780-792 index 330ed4a09b54..b884591c9271 100644 Link Here
780
+    MOZ_ASSERT(p[0] == ':');
776
+    MOZ_ASSERT(p[0] == ':');
781
+    p++;
777
+    p++;
782
+    dom::MaybePrefValue value(
778
+    dom::MaybePrefValue value(
783
+      dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
779
+        dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
784
+    MOZ_ASSERT(p[0] == '|');
780
+    MOZ_ASSERT(p[0] == '|');
785
+    p++;
781
+    p++;
786
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
782
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
787
+                   /* isLocked */ false,
783
+                   /* isLocked */ false, value, dom::MaybePrefValue());
788
+                   value,
789
+                   dom::MaybePrefValue());
790
+    gEarlyDomPrefs->AppendElement(pref);
784
+    gEarlyDomPrefs->AppendElement(pref);
791
+  }
785
+  }
792
+  p++;
786
+  p++;
Lines 801-809 index 330ed4a09b54..b884591c9271 100644 Link Here
801
+    p++;
795
+    p++;
802
+    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
796
+    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
803
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
797
+    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
804
+                   /* isLocked */ false,
798
+                   /* isLocked */ false, value, dom::MaybePrefValue());
805
+                   value,
806
+                   dom::MaybePrefValue());
807
+    gEarlyDomPrefs->AppendElement(pref);
799
+    gEarlyDomPrefs->AppendElement(pref);
808
+    p += length + 1;
800
+    p += length + 1;
809
+    MOZ_ASSERT(*(p - 1) == '|');
801
+    MOZ_ASSERT(*(p - 1) == '|');
Lines 815-839 index 330ed4a09b54..b884591c9271 100644 Link Here
815
+  // We finished parsing on a '\0'. That should be the last char in the shared
807
+  // We finished parsing on a '\0'. That should be the last char in the shared
816
+  // memory.
808
+  // memory.
817
+  MOZ_ASSERT(aStr + aStrLen - 1 == p);
809
+  MOZ_ASSERT(aStr + aStrLen - 1 == p);
818
 
810
+
819
 #ifdef DEBUG
811
 #ifdef DEBUG
820
   MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
812
   MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
821
@@ -4298,15 +4417,6 @@ Preferences::HasUserValue(const char* aPrefName)
813
   gPhase = ContentProcessPhase::eEarlyPrefsSet;
822
   return pref && pref->HasUserValue();
814
@@ -3894,14 +4005,6 @@ static nsresult pref_ReadPrefFromJar(nsZipArchive* aJa
823
 }
824
 
815
 
825
-/* static */ bool
816
   Pref* pref = pref_HashTableLookup(aPrefName);
826
-Preferences::MustSendToContentProcesses(const char* aPrefName)
817
   return pref && pref->HasUserValue();
827
-{
818
-}
819
-
820
-/* static */ bool Preferences::MustSendToContentProcesses(
821
-    const char* aPrefName) {
828
-  NS_ENSURE_TRUE(InitStaticMembers(), false);
822
-  NS_ENSURE_TRUE(InitStaticMembers(), false);
829
-
823
-
830
-  Pref* pref = pref_HashTableLookup(aPrefName);
824
-  Pref* pref = pref_HashTableLookup(aPrefName);
831
-  return pref && pref->MustSendToContentProcesses();
825
-  return pref && pref->MustSendToContentProcesses();
832
-}
826
 }
833
-
827
 
834
 /* static */ int32_t
828
 /* static */ int32_t Preferences::GetType(const char* aPrefName) {
835
 Preferences::GetType(const char* aPrefName)
836
 {
837
diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h
829
diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h
838
index 1cb825ecbfe5..c149db62b525 100644
830
index 1cb825ecbfe5..c149db62b525 100644
839
--- modules/libpref/Preferences.h
831
--- modules/libpref/Preferences.h
Lines 848-856 index 1cb825ecbfe5..c149db62b525 100644 Link Here
848
+#endif
840
+#endif
849
+
841
+
850
 // Keep this in sync with PrefType in parser/src/lib.rs.
842
 // Keep this in sync with PrefType in parser/src/lib.rs.
851
 enum class PrefValueKind : uint8_t
843
 enum class PrefValueKind : uint8_t { Default, User };
852
 {
844
 
853
@@ -230,9 +235,6 @@ public:
845
@@ -191,9 +196,6 @@ class Preferences final : public nsIPrefService,
854
   // Whether the pref has a user value or not.
846
   // Whether the pref has a user value or not.
855
   static bool HasUserValue(const char* aPref);
847
   static bool HasUserValue(const char* aPref);
856
 
848
 
Lines 860-866 index 1cb825ecbfe5..c149db62b525 100644 Link Here
860
   // Adds/Removes the observer for the root pref branch. See nsIPrefBranch.idl
852
   // Adds/Removes the observer for the root pref branch. See nsIPrefBranch.idl
861
   // for details.
853
   // for details.
862
   static nsresult AddStrongObserver(nsIObserver* aObserver, const char* aPref);
854
   static nsresult AddStrongObserver(nsIObserver* aObserver, const char* aPref);
863
@@ -328,11 +330,12 @@ public:
855
@@ -277,11 +279,12 @@ class Preferences final : public nsIPrefService,
864
 
856
 
865
   // When a content process is created these methods are used to pass prefs in
857
   // 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
858
   // bulk from the parent process. "Early" preferences are ones that are needed
Lines 881-901 diff --git mozglue/android/APKOpen.cpp mozglue/android/APKOpen.cpp Link Here
881
index 5f1ef55b605e..b57192488725 100644
873
index 5f1ef55b605e..b57192488725 100644
882
--- mozglue/android/APKOpen.cpp
874
--- mozglue/android/APKOpen.cpp
883
+++ mozglue/android/APKOpen.cpp
875
+++ mozglue/android/APKOpen.cpp
884
@@ -392,7 +392,7 @@ FreeArgv(char** argv, int argc)
876
@@ -378,7 +378,8 @@ static void FreeArgv(char** argv, int argc) {
885
 }
886
 
887
 extern "C" APKOPEN_EXPORT void MOZ_JNICALL
877
 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)
878
 Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv* jenv, jclass jc,
889
+Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jobjectArray jargs, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)
879
                                                      jobjectArray jargs,
890
 {
880
-                                                     int ipcFd, int crashFd,
881
+                                                     int prefsFd, int ipcFd,
882
+                                                     int crashFd,
883
                                                      int crashAnnotationFd) {
891
   int argc = 0;
884
   int argc = 0;
892
   char** argv = CreateArgvFromObjectArray(jenv, jargs, &argc);
885
   char** argv = CreateArgvFromObjectArray(jenv, jargs, &argc);
893
@@ -407,7 +407,7 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(JNIEnv *jenv, jclass jc, jo
886
@@ -393,7 +394,8 @@ Java_org_mozilla_gecko_mozglue_GeckoLoader_nativeRun(J
894
     gBootstrap->GeckoStart(jenv, argv, argc, sAppData);
887
     gBootstrap->GeckoStart(jenv, argv, argc, sAppData);
895
     ElfLoader::Singleton.ExpectShutdown(true);
888
     ElfLoader::Singleton.ExpectShutdown(true);
896
   } else {
889
   } else {
897
-    gBootstrap->XRE_SetAndroidChildFds(jenv, ipcFd, crashFd, crashAnnotationFd);
890
-    gBootstrap->XRE_SetAndroidChildFds(jenv, ipcFd, crashFd, crashAnnotationFd);
898
+    gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd, crashAnnotationFd);
891
+    gBootstrap->XRE_SetAndroidChildFds(jenv, prefsFd, ipcFd, crashFd,
892
+                                       crashAnnotationFd);
899
     gBootstrap->XRE_SetProcessType(argv[argc - 1]);
893
     gBootstrap->XRE_SetProcessType(argv[argc - 1]);
900
 
894
 
901
     XREChildData childData;
895
     XREChildData childData;
Lines 903-916 diff --git toolkit/xre/Bootstrap.cpp toolkit/xre/Bootstrap.cpp Link Here
903
index 5688519822a9..7e857969a4fb 100644
897
index 5688519822a9..7e857969a4fb 100644
904
--- toolkit/xre/Bootstrap.cpp
898
--- toolkit/xre/Bootstrap.cpp
905
+++ toolkit/xre/Bootstrap.cpp
899
+++ toolkit/xre/Bootstrap.cpp
906
@@ -78,8 +78,8 @@ public:
900
@@ -71,9 +71,11 @@ class BootstrapImpl final : public Bootstrap {
907
     ::GeckoStart(aEnv, argv, argc, aAppData);
901
     ::GeckoStart(aEnv, argv, argc, aAppData);
908
   }
902
   }
909
 
903
 
910
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override {
904
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd,
905
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd,
906
+                                      int aCrashFd,
907
                                       int aCrashAnnotationFd) override {
911
-    ::XRE_SetAndroidChildFds(aEnv, aIPCFd, aCrashFd, aCrashAnnotationFd);
908
-    ::XRE_SetAndroidChildFds(aEnv, aIPCFd, aCrashFd, aCrashAnnotationFd);
912
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) override {
909
+    ::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd,
913
+    ::XRE_SetAndroidChildFds(aEnv, aPrefsFd, aIPCFd, aCrashFd, aCrashAnnotationFd);
910
+                             aCrashAnnotationFd);
914
   }
911
   }
915
 #endif
912
 #endif
916
 
913
 
Lines 918-929 diff --git toolkit/xre/Bootstrap.h toolkit/xre/Bootstrap.h Link Here
918
index 686d0a38e324..77adcef80e1f 100644
915
index 686d0a38e324..77adcef80e1f 100644
919
--- toolkit/xre/Bootstrap.h
916
--- toolkit/xre/Bootstrap.h
920
+++ toolkit/xre/Bootstrap.h
917
+++ toolkit/xre/Bootstrap.h
921
@@ -113,7 +113,7 @@ public:
918
@@ -112,8 +112,8 @@ class Bootstrap {
922
 #ifdef MOZ_WIDGET_ANDROID
919
   virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc,
923
   virtual void GeckoStart(JNIEnv* aEnv, char** argv, int argc, const StaticXREAppData& aAppData) = 0;
920
                           const StaticXREAppData& aAppData) = 0;
924
 
921
 
925
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0;
922
-  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aIPCFd, int aCrashFd,
926
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd, int aCrashFd, int aCrashAnnotationFd) = 0;
923
-                                      int aCrashAnnotationFd) = 0;
924
+  virtual void XRE_SetAndroidChildFds(JNIEnv* aEnv, int aPrefsFd, int aIPCFd,
925
+                                      int aCrashFd, int aCrashAnnotationFd) = 0;
927
 #endif
926
 #endif
928
 
927
 
929
 #ifdef LIBFUZZER
928
 #ifdef LIBFUZZER
Lines 931-943 diff --git toolkit/xre/nsEmbedFunctions.cpp toolkit/xre/nsEmbedFunctions.cpp Link Here
931
index 53bd2bc2eb47..83184e97ba92 100644
930
index 53bd2bc2eb47..83184e97ba92 100644
932
--- toolkit/xre/nsEmbedFunctions.cpp
931
--- toolkit/xre/nsEmbedFunctions.cpp
933
+++ toolkit/xre/nsEmbedFunctions.cpp
932
+++ toolkit/xre/nsEmbedFunctions.cpp
934
@@ -243,9 +243,10 @@ GeckoProcessType sChildProcessType = GeckoProcessType_Default;
933
@@ -226,9 +226,10 @@ GeckoProcessType sChildProcessType = GeckoProcessType_
934
 }  // namespace mozilla
935
 
935
 
936
 #if defined(MOZ_WIDGET_ANDROID)
936
 #if defined(MOZ_WIDGET_ANDROID)
937
 void
937
-void XRE_SetAndroidChildFds(JNIEnv* env, int ipcFd, int crashFd,
938
-XRE_SetAndroidChildFds (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd)
938
+void XRE_SetAndroidChildFds(JNIEnv* env, int prefsFd, int ipcFd, int crashFd,
939
+XRE_SetAndroidChildFds (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd)
939
                             int crashAnnotationFd) {
940
 {
941
   mozilla::jni::SetGeckoThreadEnv(env);
940
   mozilla::jni::SetGeckoThreadEnv(env);
942
+  mozilla::dom::SetPrefsFd(prefsFd);
941
+  mozilla::dom::SetPrefsFd(prefsFd);
943
   IPC::Channel::SetClientChannelFd(ipcFd);
942
   IPC::Channel::SetClientChannelFd(ipcFd);
Lines 989-1000 diff --git xpcom/build/nsXULAppAPI.h xpcom/build/nsXULAppAPI.h Link Here
989
index 94f6daf864c9..d6ac10d51d76 100644
988
index 94f6daf864c9..d6ac10d51d76 100644
990
--- xpcom/build/nsXULAppAPI.h
989
--- xpcom/build/nsXULAppAPI.h
991
+++ xpcom/build/nsXULAppAPI.h
990
+++ xpcom/build/nsXULAppAPI.h
992
@@ -398,7 +398,7 @@ XRE_API(const char*,
991
@@ -378,7 +378,8 @@ XRE_API(const char*, XRE_ChildProcessTypeToString,
993
 
992
 
994
 #if defined(MOZ_WIDGET_ANDROID)
993
 #if defined(MOZ_WIDGET_ANDROID)
995
 XRE_API(void,
994
 XRE_API(void, XRE_SetAndroidChildFds,
996
-        XRE_SetAndroidChildFds, (JNIEnv* env, int ipcFd, int crashFd, int crashAnnotationFd))
995
-        (JNIEnv * env, int ipcFd, int crashFd, int crashAnnotationFd))
997
+        XRE_SetAndroidChildFds, (JNIEnv* env, int prefsFd, int ipcFd, int crashFd, int crashAnnotationFd))
996
+        (JNIEnv * env, int prefsFd, int ipcFd, int crashFd,
998
 #endif // defined(MOZ_WIDGET_ANDROID)
997
+         int crashAnnotationFd))
998
 #endif  // defined(MOZ_WIDGET_ANDROID)
999
 
999
 
1000
 XRE_API(void,
1000
 XRE_API(void, XRE_SetProcessType, (const char* aProcessTypeString))
(-)b/mail/thunderbird/files/patch-bug1442583 (-9 / +13 lines)
Lines 21-39 index e763a9d68dc17..8a6d50b6a7845 100644 Link Here
21
 
21
 
22
 #include "gc/Memory.h"
22
 #include "gc/Memory.h"
23
+#ifdef JS_CODEGEN_ARM64
23
+#ifdef JS_CODEGEN_ARM64
24
+# include "jit/arm64/vixl/Cpu-vixl.h"
24
+#include "jit/arm64/vixl/Cpu-vixl.h"
25
+#endif
25
+#endif
26
 #include "threading/LockGuard.h"
26
 #include "threading/LockGuard.h"
27
 #include "threading/Mutex.h"
27
 #include "threading/Mutex.h"
28
 #include "util/Windows.h"
28
 #include "util/Windows.h"
29
@@ -621,6 +624,10 @@ js::jit::DeallocateExecutableMemory(void* addr, size_t bytes)
29
@@ -574,7 +577,13 @@ void js::jit::DeallocateExecutableMemory(void* addr, s
30
 bool
30
   execMemory.deallocate(addr, bytes, /* decommit = */ true);
31
 js::jit::InitProcessExecutableMemory()
31
 }
32
 {
32
 
33
-bool js::jit::InitProcessExecutableMemory() { return execMemory.init(); }
34
+bool js::jit::InitProcessExecutableMemory() {
33
+#ifdef JS_CODEGEN_ARM64
35
+#ifdef JS_CODEGEN_ARM64
34
+    // Initialize instruction cache flushing.
36
+  // Initialize instruction cache flushing.
35
+    vixl::CPU::SetUp();
37
+  vixl::CPU::SetUp();
36
+#endif
38
+#endif
37
     return execMemory.init();
39
+  return execMemory.init();
38
 }
40
+}
41
 
42
 void js::jit::ReleaseProcessExecutableMemory() { execMemory.release(); }
39
 
43
 
(-)b/mail/thunderbird/files/patch-bug1447359 (-24 / +24 lines)
Lines 15-45 diff --git js/src/jit/arm64/MacroAssembler-arm64-inl.h js/src/jit/arm64/MacroAss Link Here
15
index 7061cbfd93ebb..190442f7afa0a 100644
15
index 7061cbfd93ebb..190442f7afa0a 100644
16
--- js/src/jit/arm64/MacroAssembler-arm64-inl.h
16
--- js/src/jit/arm64/MacroAssembler-arm64-inl.h
17
+++ js/src/jit/arm64/MacroAssembler-arm64-inl.h
17
+++ js/src/jit/arm64/MacroAssembler-arm64-inl.h
18
@@ -359,6 +359,7 @@ MacroAssembler::sub32FromStackPtrWithPatch(Register dest)
18
@@ -268,6 +268,7 @@ void MacroAssembler::add64(Imm64 imm, Register64 dest)
19
 {
19
 CodeOffset MacroAssembler::sub32FromStackPtrWithPatch(Register dest) {
20
     vixl::UseScratchRegisterScope temps(this);
20
   vixl::UseScratchRegisterScope temps(this);
21
     const ARMRegister scratch = temps.AcquireX();
21
   const ARMRegister scratch = temps.AcquireX();
22
+    AutoForbidPools afp(this, /* max number of instructions in scope = */ 3);
22
+  AutoForbidPools afp(this, /* max number of instructions in scope = */ 3);
23
     CodeOffset offs = CodeOffset(currentOffset());
23
   CodeOffset offs = CodeOffset(currentOffset());
24
     movz(scratch, 0, 0);
24
   movz(scratch, 0, 0);
25
     movk(scratch, 0, 16);
25
   movk(scratch, 0, 16);
26
diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp
26
diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssembler-arm64.cpp
27
index 7b599b7e9d610..4e8fdb6a67019 100644
27
index 7b599b7e9d610..4e8fdb6a67019 100644
28
--- js/src/jit/arm64/MacroAssembler-arm64.cpp
28
--- js/src/jit/arm64/MacroAssembler-arm64.cpp
29
+++ js/src/jit/arm64/MacroAssembler-arm64.cpp
29
+++ js/src/jit/arm64/MacroAssembler-arm64.cpp
30
@@ -707,6 +707,7 @@ MacroAssembler::patchFarJump(CodeOffset farJump, uint32_t targetOffset)
30
@@ -666,6 +666,7 @@ void MacroAssembler::patchNearJumpToNop(uint8_t* jump)
31
 CodeOffset
31
 }
32
 MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc)
32
 
33
 {
33
 CodeOffset MacroAssembler::nopPatchableToCall(const wasm::CallSiteDesc& desc) {
34
+    AutoForbidPools afp(this, /* max number of instructions in scope = */ 1);
34
+  AutoForbidPools afp(this, /* max number of instructions in scope = */ 1);
35
     CodeOffset offset(currentOffset());
35
   CodeOffset offset(currentOffset());
36
     Nop();
36
   Nop();
37
     append(desc, CodeOffset(currentOffset()));
37
   append(desc, CodeOffset(currentOffset()));
38
@@ -1077,6 +1078,7 @@ MacroAssembler::comment(const char* msg)
38
@@ -1002,6 +1003,7 @@ void MacroAssembler::comment(const char* msg) { Assemb
39
 CodeOffset
39
 // wasm support
40
 MacroAssembler::wasmTrapInstruction()
40
 
41
 {
41
 CodeOffset MacroAssembler::wasmTrapInstruction() {
42
+    AutoForbidPools afp(this, /* max number of instructions in scope = */ 1);
42
+  AutoForbidPools afp(this, /* max number of instructions in scope = */ 1);
43
     CodeOffset offs(currentOffset());
43
   CodeOffset offs(currentOffset());
44
     Unreachable();
44
   Unreachable();
45
     return offs;
45
   return offs;
(-)b/mail/thunderbird/files/patch-bug1451292 (-9 / +9 lines)
Lines 19-33 diff --git js/src/jit/arm64/MacroAssembler-arm64.cpp js/src/jit/arm64/MacroAssem Link Here
19
index 4ea64b1225d00..a212de0ec2f45 100644
19
index 4ea64b1225d00..a212de0ec2f45 100644
20
--- js/src/jit/arm64/MacroAssembler-arm64.cpp
20
--- js/src/jit/arm64/MacroAssembler-arm64.cpp
21
+++ js/src/jit/arm64/MacroAssembler-arm64.cpp
21
+++ js/src/jit/arm64/MacroAssembler-arm64.cpp
22
@@ -237,8 +237,9 @@ MacroAssemblerCompat::profilerEnterFrame(RegisterOrSP framePtr, Register scratch
22
@@ -249,8 +249,9 @@ void MacroAssemblerCompat::profilerEnterFrame(Register
23
 void
23
 }
24
 MacroAssemblerCompat::breakpoint()
24
 
25
 {
25
 void MacroAssemblerCompat::breakpoint() {
26
-    static int code = 0xA77;
26
-  static int code = 0xA77;
27
-    Brk((code++) & 0xffff);
27
-  Brk((code++) & 0xffff);
28
+    // Note, other payloads are possible, but GDB is known to misinterpret them
28
+  // Note, other payloads are possible, but GDB is known to misinterpret them
29
+    // sometimes and iloop on the breakpoint instead of stopping properly.
29
+  // sometimes and iloop on the breakpoint instead of stopping properly.
30
+    Brk(0);
30
+  Brk(0);
31
 }
31
 }
32
 
32
 
33
 // Either `any` is valid or `sixtyfour` is valid.  Return a 32-bit ARMRegister
33
 // Either `any` is valid or `sixtyfour` is valid.  Return a 32-bit ARMRegister
(-)b/mail/thunderbird/files/patch-bug1456556 (-6 / +6 lines)
Lines 11-22 diff --git dom/fetch/FetchConsumer.cpp dom/fetch/FetchConsumer.cpp Link Here
11
index 134bf7f2e703a..3c3687fea1d5a 100644
11
index 134bf7f2e703a..3c3687fea1d5a 100644
12
--- dom/fetch/FetchConsumer.cpp
12
--- dom/fetch/FetchConsumer.cpp
13
+++ dom/fetch/FetchConsumer.cpp
13
+++ dom/fetch/FetchConsumer.cpp
14
@@ -582,7 +582,7 @@ FetchBodyConsumer<Derived>::ContinueConsumeBody(nsresult aStatus,
14
@@ -560,7 +560,7 @@ void FetchBodyConsumer<Derived>::ContinueConsumeBody(n
15
   RefPtr<Promise> localPromise = mConsumePromise.forget();
16
 
15
 
17
   RefPtr<FetchBodyConsumer<Derived>> self = this;
16
   RefPtr<FetchBodyConsumer<Derived>> self = this;
18
-  auto autoReleaseObject = mozilla::MakeScopeExit([&] {
17
   auto autoReleaseObject =
19
+  auto autoReleaseObject = mozilla::MakeScopeExit([self] {
18
-      mozilla::MakeScopeExit([&] { self->ReleaseObject(); });
20
     self->ReleaseObject();
19
+      mozilla::MakeScopeExit([self] { self->ReleaseObject(); });
21
   });
22
 
20
 
21
   if (aShuttingDown) {
22
     // If shutting down, we don't want to resolve any promise.
(-)a/mail/thunderbird/files/patch-bug1500850 (-26 lines)
Removed Link Here
1
commit 4425b9140c4c
2
Author: Martin Stransky <stransky@redhat.com>
3
Date:   Mon Oct 22 09:14:07 2018 +0000
4
5
    Bug 1500850 - [Wayland] Add missing dbus header dbus-glib-lowlevel.h. r=jhorak, a=RyanVM
6
    
7
    Differential Revision: https://phabricator.services.mozilla.com/D9365
8
    
9
    --HG--
10
    extra : source : 5203edd6ea29e4b73681674d2a5268dd6a310102
11
---
12
 widget/xremoteclient/DBusRemoteClient.cpp | 1 +
13
 1 file changed, 1 insertion(+)
14
15
diff --git widget/xremoteclient/DBusRemoteClient.cpp widget/xremoteclient/DBusRemoteClient.cpp
16
index ba5bda06201d..b2f03dccc133 100644
17
--- widget/xremoteclient/DBusRemoteClient.cpp
18
+++ widget/xremoteclient/DBusRemoteClient.cpp
19
@@ -13,6 +13,7 @@
20
 #include "nsPrintfCString.h"
21
 
22
 #include <dlfcn.h>
23
+#include <dbus/dbus-glib-lowlevel.h>
24
 
25
 using mozilla::LogLevel;
26
 static mozilla::LazyLogModule sRemoteLm("DBusRemoteClient");
(-)b/mail/thunderbird/files/patch-z-bug1436911 (-464 / +435 lines)
Lines 38-47 diff --git dom/ipc/ContentChild.cpp dom/ipc/ContentChild.cpp Link Here
38
index f61ab07b81e2..af1ef9cf4c7e 100644
38
index f61ab07b81e2..af1ef9cf4c7e 100644
39
--- dom/ipc/ContentChild.cpp
39
--- dom/ipc/ContentChild.cpp
40
+++ dom/ipc/ContentChild.cpp
40
+++ dom/ipc/ContentChild.cpp
41
@@ -1185,8 +1185,6 @@ void
41
@@ -1094,8 +1094,6 @@ void ContentChild::InitGraphicsDeviceData(const Conten
42
 ContentChild::InitXPCOM(const XPCOMInitData& aXPCOMInit,
42
 void ContentChild::InitXPCOM(
43
                         const mozilla::dom::ipc::StructuredCloneData& aInitialData)
43
     const XPCOMInitData& aXPCOMInit,
44
 {
44
     const mozilla::dom::ipc::StructuredCloneData& aInitialData) {
45
-  Preferences::SetLatePreferences(&aXPCOMInit.prefs());
45
-  Preferences::SetLatePreferences(&aXPCOMInit.prefs());
46
-
46
-
47
   // Do this as early as possible to get the parent process to initialize the
47
   // Do this as early as possible to get the parent process to initialize the
Lines 59-65 index 208bb47a970b..4ce5c6bf23d5 100644 Link Here
59
 #include "mozilla/Sprintf.h"
59
 #include "mozilla/Sprintf.h"
60
 
60
 
61
 #ifdef MOZ_WEBRTC
61
 #ifdef MOZ_WEBRTC
62
@@ -2009,7 +2008,7 @@ ContentParent::LaunchSubprocess(ProcessPriority aInitialPriority /* = PROCESS_PR
62
@@ -1863,7 +1862,7 @@ bool ContentParent::LaunchSubprocess(
63
 
63
 
64
   // Serialize the early prefs.
64
   // Serialize the early prefs.
65
   nsAutoCStringN<1024> prefs;
65
   nsAutoCStringN<1024> prefs;
Lines 68-74 index 208bb47a970b..4ce5c6bf23d5 100644 Link Here
68
 
68
 
69
   // Set up the shared memory.
69
   // Set up the shared memory.
70
   base::SharedMemory shm;
70
   base::SharedMemory shm;
71
@@ -2228,7 +2227,6 @@ ContentParent::InitInternal(ProcessPriority aInitialPriority)
71
@@ -2034,7 +2033,6 @@ void ContentParent::InitInternal(ProcessPriority aInit
72
 
72
 
73
   XPCOMInitData xpcomInit;
73
   XPCOMInitData xpcomInit;
74
 
74
 
Lines 81-87 deleted file mode 100644 Link Here
81
index 808b797d9bee..000000000000
81
index 808b797d9bee..000000000000
82
--- dom/ipc/ContentPrefs.cpp
82
--- dom/ipc/ContentPrefs.cpp
83
+++ /dev/null
83
+++ /dev/null
84
@@ -1,362 +0,0 @@
84
@@ -1,360 +0,0 @@
85
-/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
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: */
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
87
-/* This Source Code Form is subject to the terms of the Mozilla Public
Lines 103-446 index 808b797d9bee..000000000000 Link Here
103
- ******************************************************************************/
103
- ******************************************************************************/
104
-
104
-
105
-const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = {
105
-const char* mozilla::dom::ContentPrefs::gEarlyPrefs[] = {
106
-  "accessibility.monoaudio.enable",
106
-    "accessibility.monoaudio.enable",
107
-  "accessibility.mouse_focuses_formcontrol",
107
-    "accessibility.mouse_focuses_formcontrol",
108
-  "accessibility.tabfocus_applies_to_xul",
108
-    "accessibility.tabfocus_applies_to_xul",
109
-  "app.update.channel",
109
-    "app.update.channel",
110
-  "browser.autofocus",
110
-    "browser.autofocus",
111
-  "browser.dom.window.dump.enabled",
111
-    "browser.dom.window.dump.enabled",
112
-  "browser.sessionhistory.max_entries",
112
-    "browser.sessionhistory.max_entries",
113
-  "browser.sessionhistory.max_total_viewers",
113
-    "browser.sessionhistory.max_total_viewers",
114
-#if defined(NIGHTLY_BUILD) || defined(DEBUG)
114
-#if defined(NIGHTLY_BUILD) || defined(DEBUG)
115
-  "browser.startup.record",
115
-    "browser.startup.record",
116
-#endif
116
-#endif
117
-#if defined(ANDROID)
117
-#if defined(ANDROID)
118
-  "consoleservice.logcat",
118
-    "consoleservice.logcat",
119
-#endif
119
-#endif
120
-  "content.cors.disable",
120
-    "content.cors.disable",
121
-  "content.cors.no_private_data",
121
-    "content.cors.no_private_data",
122
-  "content.notify.backoffcount",
122
-    "content.notify.backoffcount",
123
-  "content.notify.interval",
123
-    "content.notify.interval",
124
-  "content.notify.ontimer",
124
-    "content.notify.ontimer",
125
-  "content.sink.enable_perf_mode",
125
-    "content.sink.enable_perf_mode",
126
-  "content.sink.event_probe_rate",
126
-    "content.sink.event_probe_rate",
127
-  "content.sink.initial_perf_time",
127
-    "content.sink.initial_perf_time",
128
-  "content.sink.interactive_deflect_count",
128
-    "content.sink.interactive_deflect_count",
129
-  "content.sink.interactive_parse_time",
129
-    "content.sink.interactive_parse_time",
130
-  "content.sink.interactive_time",
130
-    "content.sink.interactive_time",
131
-  "content.sink.pending_event_mode",
131
-    "content.sink.pending_event_mode",
132
-  "content.sink.perf_deflect_count",
132
-    "content.sink.perf_deflect_count",
133
-  "content.sink.perf_parse_time",
133
-    "content.sink.perf_parse_time",
134
-  "device.storage.prompt.testing",
134
-    "device.storage.prompt.testing",
135
-  "device.storage.writable.name",
135
-    "device.storage.writable.name",
136
-  "devtools.enabled",
136
-    "devtools.enabled",
137
-  "dom.allow_XUL_XBL_for_file",
137
-    "dom.allow_XUL_XBL_for_file",
138
-  "dom.allow_cut_copy",
138
-    "dom.allow_cut_copy",
139
-  "dom.animations-api.core.enabled",
139
-    "dom.animations-api.core.enabled",
140
-  "dom.animations-api.element-animate.enabled",
140
-    "dom.animations-api.element-animate.enabled",
141
-  "dom.animations-api.pending-member.enabled",
141
-    "dom.animations-api.pending-member.enabled",
142
-  "dom.enable_frame_timing",
142
-    "dom.enable_frame_timing",
143
-  "dom.enable_performance",
143
-    "dom.enable_performance",
144
-  "dom.enable_performance_navigation_timing",
144
-    "dom.enable_performance_navigation_timing",
145
-  "dom.enable_resource_timing",
145
-    "dom.enable_resource_timing",
146
-  "dom.event.handling-user-input-time-limit",
146
-    "dom.event.handling-user-input-time-limit",
147
-  "dom.event.touch.coalescing.enabled",
147
-    "dom.event.touch.coalescing.enabled",
148
-  "dom.forms.autocomplete.formautofill",
148
-    "dom.forms.autocomplete.formautofill",
149
-  "dom.forms.inputmode",
149
-    "dom.forms.inputmode",
150
-  "dom.input.skip_cursor_move_for_same_value_set",
150
-    "dom.input.skip_cursor_move_for_same_value_set",
151
-  "dom.ipc.processPriorityManager.backgroundGracePeriodMS",
151
-    "dom.ipc.processPriorityManager.backgroundGracePeriodMS",
152
-  "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS",
152
-    "dom.ipc.processPriorityManager.backgroundPerceivableGracePeriodMS",
153
-  "dom.ipc.useNativeEventProcessing.content",
153
-    "dom.ipc.useNativeEventProcessing.content",
154
-  "dom.max_chrome_script_run_time",
154
-    "dom.max_chrome_script_run_time",
155
-  "dom.max_ext_content_script_run_time",
155
-    "dom.max_ext_content_script_run_time",
156
-  "dom.max_script_run_time",
156
-    "dom.max_script_run_time",
157
-  "dom.mozBrowserFramesEnabled",
157
-    "dom.mozBrowserFramesEnabled",
158
-  "dom.performance.enable_notify_performance_timing",
158
-    "dom.performance.enable_notify_performance_timing",
159
-  "dom.performance.enable_user_timing_logging",
159
-    "dom.performance.enable_user_timing_logging",
160
-  "dom.placeholder.show_on_focus",
160
-    "dom.placeholder.show_on_focus",
161
-  "dom.requestIdleCallback.enabled",
161
-    "dom.requestIdleCallback.enabled",
162
-  "dom.script_loader.bytecode_cache.enabled",
162
-    "dom.script_loader.bytecode_cache.enabled",
163
-  "dom.script_loader.bytecode_cache.strategy",
163
-    "dom.script_loader.bytecode_cache.strategy",
164
-  "dom.storage.testing",
164
-    "dom.storage.testing",
165
-  "dom.url.encode_decode_hash",
165
-    "dom.url.encode_decode_hash",
166
-  "dom.url.getters_decode_hash",
166
-    "dom.url.getters_decode_hash",
167
-  "dom.use_watchdog",
167
-    "dom.use_watchdog",
168
-  "dom.vibrator.enabled",
168
-    "dom.vibrator.enabled",
169
-  "dom.vibrator.max_vibrate_list_len",
169
-    "dom.vibrator.max_vibrate_list_len",
170
-  "dom.vibrator.max_vibrate_ms",
170
-    "dom.vibrator.max_vibrate_ms",
171
-  "dom.webcomponents.customelements.enabled",
171
-    "dom.webcomponents.customelements.enabled",
172
-  "dom.webcomponents.shadowdom.enabled",
172
-    "dom.webcomponents.shadowdom.enabled",
173
-  "focusmanager.testmode",
173
-    "focusmanager.testmode",
174
-  "font.size.inflation.disabledInMasterProcess",
174
-    "font.size.inflation.disabledInMasterProcess",
175
-  "font.size.inflation.emPerLine",
175
-    "font.size.inflation.emPerLine",
176
-  "font.size.inflation.forceEnabled",
176
-    "font.size.inflation.forceEnabled",
177
-  "font.size.inflation.lineThreshold",
177
-    "font.size.inflation.lineThreshold",
178
-  "font.size.inflation.mappingIntercept",
178
-    "font.size.inflation.mappingIntercept",
179
-  "font.size.inflation.maxRatio",
179
-    "font.size.inflation.maxRatio",
180
-  "font.size.inflation.minTwips",
180
-    "font.size.inflation.minTwips",
181
-  "font.size.systemFontScale",
181
-    "font.size.systemFontScale",
182
-  "full-screen-api.allow-trusted-requests-only",
182
-    "full-screen-api.allow-trusted-requests-only",
183
-  "full-screen-api.enabled",
183
-    "full-screen-api.enabled",
184
-  "full-screen-api.unprefix.enabled",
184
-    "full-screen-api.unprefix.enabled",
185
-#ifdef FUZZING
185
-#ifdef FUZZING
186
-  "fuzzing.enabled",
186
-    "fuzzing.enabled",
187
-#endif
187
-#endif
188
-  "gfx.font_rendering.opentype_svg.enabled",
188
-    "gfx.font_rendering.opentype_svg.enabled",
189
-  "hangmonitor.timeout",
189
-    "hangmonitor.timeout",
190
-  "html5.flushtimer.initialdelay",
190
-    "html5.flushtimer.initialdelay",
191
-  "html5.flushtimer.subsequentdelay",
191
-    "html5.flushtimer.subsequentdelay",
192
-  "html5.offmainthread",
192
-    "html5.offmainthread",
193
-  "intl.charset.fallback.tld",
193
-    "intl.charset.fallback.tld",
194
-  "intl.charset.fallback.utf8_for_file",
194
-    "intl.charset.fallback.utf8_for_file",
195
-  "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition",
195
-    "intl.ime.hack.on_ime_unaware_apps.fire_key_events_for_composition",
196
-  "javascript.enabled",
196
-    "javascript.enabled",
197
-  "javascript.options.array_prototype_values",
197
-    "javascript.options.array_prototype_values",
198
-  "javascript.options.asmjs",
198
-    "javascript.options.asmjs",
199
-  "javascript.options.asyncstack",
199
-    "javascript.options.asyncstack",
200
-  "javascript.options.baselinejit",
200
-    "javascript.options.baselinejit",
201
-  "javascript.options.baselinejit.threshold",
201
-    "javascript.options.baselinejit.threshold",
202
-  "javascript.options.baselinejit.unsafe_eager_compilation",
202
-    "javascript.options.baselinejit.unsafe_eager_compilation",
203
-  "javascript.options.discardSystemSource",
203
-    "javascript.options.discardSystemSource",
204
-  "javascript.options.dump_stack_on_debuggee_would_run",
204
-    "javascript.options.dump_stack_on_debuggee_would_run",
205
-  "javascript.options.gczeal",
205
-    "javascript.options.gczeal",
206
-  "javascript.options.gczeal.frequency",
206
-    "javascript.options.gczeal.frequency",
207
-  "javascript.options.ion",
207
-    "javascript.options.ion",
208
-  "javascript.options.ion.offthread_compilation",
208
-    "javascript.options.ion.offthread_compilation",
209
-  "javascript.options.ion.threshold",
209
-    "javascript.options.ion.threshold",
210
-  "javascript.options.ion.unsafe_eager_compilation",
210
-    "javascript.options.ion.unsafe_eager_compilation",
211
-  "javascript.options.jit.full_debug_checks",
211
-    "javascript.options.jit.full_debug_checks",
212
-  "javascript.options.native_regexp",
212
-    "javascript.options.native_regexp",
213
-  "javascript.options.parallel_parsing",
213
-    "javascript.options.parallel_parsing",
214
-  "javascript.options.shared_memory",
214
-    "javascript.options.shared_memory",
215
-  "javascript.options.spectre.index_masking",
215
-    "javascript.options.spectre.index_masking",
216
-  "javascript.options.spectre.jit_to_C++_calls",
216
-    "javascript.options.spectre.jit_to_C++_calls",
217
-  "javascript.options.spectre.object_mitigations.barriers",
217
-    "javascript.options.spectre.object_mitigations.barriers",
218
-  "javascript.options.spectre.object_mitigations.misc",
218
-    "javascript.options.spectre.object_mitigations.misc",
219
-  "javascript.options.spectre.string_mitigations",
219
-    "javascript.options.spectre.string_mitigations",
220
-  "javascript.options.spectre.value_masking",
220
-    "javascript.options.spectre.value_masking",
221
-  "javascript.options.streams",
221
-    "javascript.options.streams",
222
-  "javascript.options.strict",
222
-    "javascript.options.strict",
223
-  "javascript.options.strict.debug",
223
-    "javascript.options.strict.debug",
224
-  "javascript.options.throw_on_asmjs_validation_failure",
224
-    "javascript.options.throw_on_asmjs_validation_failure",
225
-  "javascript.options.throw_on_debuggee_would_run",
225
-    "javascript.options.throw_on_debuggee_would_run",
226
-  "javascript.options.wasm",
226
-    "javascript.options.wasm",
227
-  "javascript.options.wasm_baselinejit",
227
-    "javascript.options.wasm_baselinejit",
228
-  "javascript.options.wasm_ionjit",
228
-    "javascript.options.wasm_ionjit",
229
-  "javascript.options.werror",
229
-    "javascript.options.werror",
230
-  "javascript.use_us_english_locale",
230
-    "javascript.use_us_english_locale",
231
-  "jsloader.shareGlobal",
231
-    "jsloader.shareGlobal",
232
-  "layout.css.all-shorthand.enabled",
232
-    "layout.css.all-shorthand.enabled",
233
-  "layout.css.background-blend-mode.enabled",
233
-    "layout.css.background-blend-mode.enabled",
234
-  "layout.css.box-decoration-break.enabled",
234
-    "layout.css.box-decoration-break.enabled",
235
-  "layout.css.color-adjust.enabled",
235
-    "layout.css.color-adjust.enabled",
236
-  "layout.css.column-span.enabled",
236
-    "layout.css.column-span.enabled",
237
-  "layout.css.contain.enabled",
237
-    "layout.css.contain.enabled",
238
-  "layout.css.control-characters.visible",
238
-    "layout.css.control-characters.visible",
239
-  "layout.css.emulate-moz-box-with-flex",
239
-    "layout.css.emulate-moz-box-with-flex",
240
-  "layout.css.expensive-style-struct-assertions.enabled",
240
-    "layout.css.expensive-style-struct-assertions.enabled",
241
-  "layout.css.float-logical-values.enabled",
241
-    "layout.css.float-logical-values.enabled",
242
-  "layout.css.font-display.enabled",
242
-    "layout.css.font-display.enabled",
243
-  "layout.css.font-variations.enabled",
243
-    "layout.css.font-variations.enabled",
244
-  "layout.css.frames-timing.enabled",
244
-    "layout.css.frames-timing.enabled",
245
-  "layout.css.getBoxQuads.enabled",
245
-    "layout.css.getBoxQuads.enabled",
246
-  "layout.css.grid-template-subgrid-value.enabled",
246
-    "layout.css.grid-template-subgrid-value.enabled",
247
-  "layout.css.grid.enabled",
247
-    "layout.css.grid.enabled",
248
-  "layout.css.image-orientation.enabled",
248
-    "layout.css.image-orientation.enabled",
249
-  "layout.css.individual-transform.enabled",
249
-    "layout.css.individual-transform.enabled",
250
-  "layout.css.initial-letter.enabled",
250
-    "layout.css.initial-letter.enabled",
251
-  "layout.css.isolation.enabled",
251
-    "layout.css.isolation.enabled",
252
-  "layout.css.mix-blend-mode.enabled",
252
-    "layout.css.mix-blend-mode.enabled",
253
-  "layout.css.moz-document.content.enabled",
253
-    "layout.css.moz-document.content.enabled",
254
-  "layout.css.osx-font-smoothing.enabled",
254
-    "layout.css.osx-font-smoothing.enabled",
255
-  "layout.css.overflow-clip-box.enabled",
255
-    "layout.css.overflow-clip-box.enabled",
256
-  "layout.css.overscroll-behavior.enabled",
256
-    "layout.css.overscroll-behavior.enabled",
257
-  "layout.css.prefixes.animations",
257
-    "layout.css.prefixes.animations",
258
-  "layout.css.prefixes.border-image",
258
-    "layout.css.prefixes.border-image",
259
-  "layout.css.prefixes.box-sizing",
259
-    "layout.css.prefixes.box-sizing",
260
-  "layout.css.prefixes.device-pixel-ratio-webkit",
260
-    "layout.css.prefixes.device-pixel-ratio-webkit",
261
-  "layout.css.prefixes.font-features",
261
-    "layout.css.prefixes.font-features",
262
-  "layout.css.prefixes.gradients",
262
-    "layout.css.prefixes.gradients",
263
-  "layout.css.prefixes.transforms",
263
-    "layout.css.prefixes.transforms",
264
-  "layout.css.prefixes.transitions",
264
-    "layout.css.prefixes.transitions",
265
-  "layout.css.prefixes.webkit",
265
-    "layout.css.prefixes.webkit",
266
-  "layout.css.scope-pseudo.enabled",
266
-    "layout.css.scope-pseudo.enabled",
267
-  "layout.css.scoped-style.enabled",
267
-    "layout.css.scoped-style.enabled",
268
-  "layout.css.scroll-behavior.property-enabled",
268
-    "layout.css.scroll-behavior.property-enabled",
269
-  "layout.css.scroll-snap.enabled",
269
-    "layout.css.scroll-snap.enabled",
270
-#ifdef MOZ_STYLO
270
-#ifdef MOZ_STYLO
271
-  "layout.css.servo.chrome.enabled",
271
-    "layout.css.servo.chrome.enabled",
272
-  "layout.css.servo.enabled",
272
-    "layout.css.servo.enabled",
273
-#endif
273
-#endif
274
-  "layout.css.shape-outside.enabled",
274
-    "layout.css.shape-outside.enabled",
275
-  "layout.css.text-align-unsafe-value.enabled",
275
-    "layout.css.text-align-unsafe-value.enabled",
276
-  "layout.css.text-combine-upright-digits.enabled",
276
-    "layout.css.text-combine-upright-digits.enabled",
277
-  "layout.css.text-combine-upright.enabled",
277
-    "layout.css.text-combine-upright.enabled",
278
-  "layout.css.text-justify.enabled",
278
-    "layout.css.text-justify.enabled",
279
-  "layout.css.touch_action.enabled",
279
-    "layout.css.touch_action.enabled",
280
-  "layout.css.visited_links_enabled",
280
-    "layout.css.visited_links_enabled",
281
-  "layout.idle_period.required_quiescent_frames",
281
-    "layout.idle_period.required_quiescent_frames",
282
-  "layout.idle_period.time_limit",
282
-    "layout.idle_period.time_limit",
283
-  "layout.interruptible-reflow.enabled",
283
-    "layout.interruptible-reflow.enabled",
284
-  "mathml.disabled",
284
-    "mathml.disabled",
285
-  "media.audio-max-decode-error",
285
-    "media.audio-max-decode-error",
286
-  "media.cache_readahead_limit",
286
-    "media.cache_readahead_limit",
287
-  "media.cache_resume_threshold",
287
-    "media.cache_resume_threshold",
288
-  "media.cache_size",
288
-    "media.cache_size",
289
-  "media.clearkey.persistent-license.enabled",
289
-    "media.clearkey.persistent-license.enabled",
290
-  "media.cubeb.backend",
290
-    "media.cubeb.backend",
291
-  "media.cubeb.sandbox",
291
-    "media.cubeb.sandbox",
292
-  "media.cubeb_latency_msg_frames",
292
-    "media.cubeb_latency_msg_frames",
293
-  "media.cubeb_latency_playback_ms",
293
-    "media.cubeb_latency_playback_ms",
294
-  "media.decoder-doctor.wmf-disabled-is-failure",
294
-    "media.decoder-doctor.wmf-disabled-is-failure",
295
-  "media.decoder.recycle.enabled",
295
-    "media.decoder.recycle.enabled",
296
-  "media.decoder.skip-to-next-key-frame.enabled",
296
-    "media.decoder.skip-to-next-key-frame.enabled",
297
-  "media.dormant-on-pause-timeout-ms",
297
-    "media.dormant-on-pause-timeout-ms",
298
-  "media.eme.audio.blank",
298
-    "media.eme.audio.blank",
299
-  "media.eme.chromium-api.video-shmems",
299
-    "media.eme.chromium-api.video-shmems",
300
-  "media.eme.enabled",
300
-    "media.eme.enabled",
301
-  "media.eme.video.blank",
301
-    "media.eme.video.blank",
302
-  "media.ffmpeg.enabled",
302
-    "media.ffmpeg.enabled",
303
-  "media.ffmpeg.low-latency.enabled",
303
-    "media.ffmpeg.low-latency.enabled",
304
-  "media.ffvpx.enabled",
304
-    "media.ffvpx.enabled",
305
-  "media.ffvpx.low-latency.enabled",
305
-    "media.ffvpx.low-latency.enabled",
306
-  "media.flac.enabled",
306
-    "media.flac.enabled",
307
-  "media.forcestereo.enabled",
307
-    "media.forcestereo.enabled",
308
-  "media.gmp.decoder.enabled",
308
-    "media.gmp.decoder.enabled",
309
-  "media.gmp.insecure.allow",
309
-    "media.gmp.insecure.allow",
310
-  "media.gpu-process-decoder",
310
-    "media.gpu-process-decoder",
311
-  "media.hls.enabled",
311
-    "media.hls.enabled",
312
-  "media.libavcodec.allow-obsolete",
312
-    "media.libavcodec.allow-obsolete",
313
-  "media.memory_cache_max_size",
313
-    "media.memory_cache_max_size",
314
-  "media.memory_caches_combined_limit_kb",
314
-    "media.memory_caches_combined_limit_kb",
315
-  "media.memory_caches_combined_limit_pc_sysmem",
315
-    "media.memory_caches_combined_limit_pc_sysmem",
316
-  "media.mp4.enabled",
316
-    "media.mp4.enabled",
317
-  "media.navigator.mediadatadecoder_enabled",
317
-    "media.navigator.mediadatadecoder_enabled",
318
-  "media.ogg.enabled",
318
-    "media.ogg.enabled",
319
-  "media.ogg.flac.enabled",
319
-    "media.ogg.flac.enabled",
320
-  "media.playback.warnings-as-errors",
320
-    "media.playback.warnings-as-errors",
321
-  "media.playback.warnings-as-errors.stagefright-vs-rust",
321
-    "media.playback.warnings-as-errors.stagefright-vs-rust",
322
-  "media.resampling.enabled",
322
-    "media.resampling.enabled",
323
-  "media.resume-bkgnd-video-on-tabhover",
323
-    "media.resume-bkgnd-video-on-tabhover",
324
-  "media.ruin-av-sync.enabled",
324
-    "media.ruin-av-sync.enabled",
325
-  "media.rust.mp4parser",
325
-    "media.rust.mp4parser",
326
-  "media.rust.test_mode",
326
-    "media.rust.test_mode",
327
-  "media.seamless-looping",
327
-    "media.seamless-looping",
328
-  "media.suspend-bkgnd-video.delay-ms",
328
-    "media.suspend-bkgnd-video.delay-ms",
329
-  "media.suspend-bkgnd-video.enabled",
329
-    "media.suspend-bkgnd-video.enabled",
330
-  "media.use-blank-decoder",
330
-    "media.use-blank-decoder",
331
-  "media.video-max-decode-error",
331
-    "media.video-max-decode-error",
332
-  "media.video_stats.enabled",
332
-    "media.video_stats.enabled",
333
-  "media.videocontrols.lock-video-orientation",
333
-    "media.videocontrols.lock-video-orientation",
334
-  "media.volume_scale",
334
-    "media.volume_scale",
335
-  "media.webspeech.recognition.enable",
335
-    "media.webspeech.recognition.enable",
336
-  "media.webspeech.recognition.force_enable",
336
-    "media.webspeech.recognition.force_enable",
337
-  "media.webspeech.synth.force_global_queue",
337
-    "media.webspeech.synth.force_global_queue",
338
-  "media.webspeech.test.enable",
338
-    "media.webspeech.test.enable",
339
-  "media.webspeech.test.fake_fsm_events",
339
-    "media.webspeech.test.fake_fsm_events",
340
-  "media.webspeech.test.fake_recognition_service",
340
-    "media.webspeech.test.fake_recognition_service",
341
-  "media.wmf.allow-unsupported-resolutions",
341
-    "media.wmf.allow-unsupported-resolutions",
342
-  "media.wmf.enabled",
342
-    "media.wmf.enabled",
343
-  "media.wmf.skip-blacklist",
343
-    "media.wmf.skip-blacklist",
344
-  "media.wmf.vp9.enabled",
344
-    "media.wmf.vp9.enabled",
345
-  "network.IDN.blacklist_chars",
345
-    "network.IDN.blacklist_chars",
346
-  "network.IDN.restriction_profile",
346
-    "network.IDN.restriction_profile",
347
-  "network.IDN.use_whitelist",
347
-    "network.IDN.use_whitelist",
348
-  "network.IDN_show_punycode",
348
-    "network.IDN_show_punycode",
349
-  "network.buffer.cache.count",
349
-    "network.buffer.cache.count",
350
-  "network.buffer.cache.size",
350
-    "network.buffer.cache.size",
351
-  "network.captive-portal-service.enabled",
351
-    "network.captive-portal-service.enabled",
352
-  "network.cookie.cookieBehavior",
352
-    "network.cookie.cookieBehavior",
353
-  "network.cookie.lifetimePolicy",
353
-    "network.cookie.lifetimePolicy",
354
-  "network.dns.disablePrefetch",
354
-    "network.dns.disablePrefetch",
355
-  "network.dns.disablePrefetchFromHTTPS",
355
-    "network.dns.disablePrefetchFromHTTPS",
356
-  "network.file.disable_unc_paths",
356
-    "network.file.disable_unc_paths",
357
-  "network.file.path_blacklist",
357
-    "network.file.path_blacklist",
358
-  "network.http.tailing.enabled",
358
-    "network.http.tailing.enabled",
359
-  "network.jar.block-remote-files",
359
-    "network.jar.block-remote-files",
360
-  "network.loadinfo.skip_type_assertion",
360
-    "network.loadinfo.skip_type_assertion",
361
-  "network.notify.changed",
361
-    "network.notify.changed",
362
-  "network.offline-mirrors-connectivity",
362
-    "network.offline-mirrors-connectivity",
363
-  "network.protocol-handler.external.jar",
363
-    "network.protocol-handler.external.jar",
364
-  "network.proxy.type",
364
-    "network.proxy.type",
365
-  "network.security.ports.banned",
365
-    "network.security.ports.banned",
366
-  "network.security.ports.banned.override",
366
-    "network.security.ports.banned.override",
367
-  "network.standard-url.enable-rust",
367
-    "network.standard-url.enable-rust",
368
-  "network.standard-url.max-length",
368
-    "network.standard-url.max-length",
369
-  "network.standard-url.punycode-host",
369
-    "network.standard-url.punycode-host",
370
-  "network.sts.max_time_for_events_between_two_polls",
370
-    "network.sts.max_time_for_events_between_two_polls",
371
-  "network.sts.max_time_for_pr_close_during_shutdown",
371
-    "network.sts.max_time_for_pr_close_during_shutdown",
372
-  "network.tcp.keepalive.enabled",
372
-    "network.tcp.keepalive.enabled",
373
-  "network.tcp.keepalive.idle_time",
373
-    "network.tcp.keepalive.idle_time",
374
-  "network.tcp.keepalive.probe_count",
374
-    "network.tcp.keepalive.probe_count",
375
-  "network.tcp.keepalive.retry_interval",
375
-    "network.tcp.keepalive.retry_interval",
376
-  "network.tcp.sendbuffer",
376
-    "network.tcp.sendbuffer",
377
-  "nglayout.debug.invalidation",
377
-    "nglayout.debug.invalidation",
378
-  "privacy.donottrackheader.enabled",
378
-    "privacy.donottrackheader.enabled",
379
-  "privacy.firstparty.isolate",
379
-    "privacy.firstparty.isolate",
380
-  "privacy.firstparty.isolate.restrict_opener_access",
380
-    "privacy.firstparty.isolate.restrict_opener_access",
381
-  "privacy.reduceTimerPrecision",
381
-    "privacy.reduceTimerPrecision",
382
-  "privacy.resistFingerprinting",
382
-    "privacy.resistFingerprinting",
383
-  "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts",
383
-    "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts",
384
-  "privacy.resistFingerprinting.reduceTimerPrecision.jitter",
384
-    "privacy.resistFingerprinting.reduceTimerPrecision.jitter",
385
-  "privacy.resistFingerprinting.reduceTimerPrecision.microseconds",
385
-    "privacy.resistFingerprinting.reduceTimerPrecision.microseconds",
386
-  "privacy.resistFingerprinting.target_video_res",
386
-    "privacy.resistFingerprinting.target_video_res",
387
-  "privacy.resistFingerprinting.video_dropped_ratio",
387
-    "privacy.resistFingerprinting.video_dropped_ratio",
388
-  "privacy.resistFingerprinting.video_frames_per_sec",
388
-    "privacy.resistFingerprinting.video_frames_per_sec",
389
-  "privacy.trackingprotection.lower_network_priority",
389
-    "privacy.spoof_english",
390
-  "privacy.window.maxInnerHeight",
390
-    "privacy.trackingprotection.lower_network_priority",
391
-  "privacy.window.maxInnerWidth",
391
-    "privacy.window.maxInnerHeight",
392
-  "security.csp.enable",
392
-    "privacy.window.maxInnerWidth",
393
-  "security.data_uri.block_toplevel_data_uri_navigations",
393
-    "security.csp.enable",
394
-  "security.data_uri.unique_opaque_origin",
394
-    "security.data_uri.block_toplevel_data_uri_navigations",
395
-  "security.fileuri.strict_origin_policy",
395
-    "security.data_uri.unique_opaque_origin",
396
-  "security.mixed_content.block_active_content",
396
-    "security.fileuri.strict_origin_policy",
397
-  "security.mixed_content.block_display_content",
397
-    "security.mixed_content.block_active_content",
398
-  "security.mixed_content.block_object_subrequest",
398
-    "security.mixed_content.block_display_content",
399
-  "security.mixed_content.hsts_priming_cache_timeout",
399
-    "security.mixed_content.block_object_subrequest",
400
-  "security.mixed_content.send_hsts_priming",
400
-    "security.mixed_content.hsts_priming_cache_timeout",
401
-  "security.mixed_content.upgrade_display_content",
401
-    "security.mixed_content.send_hsts_priming",
402
-  "security.mixed_content.use_hsts",
402
-    "security.mixed_content.upgrade_display_content",
403
-  "security.sandbox.content.level",
403
-    "security.mixed_content.use_hsts",
404
-  "security.sandbox.content.tempDirSuffix",
404
-    "security.sandbox.content.level",
405
-  "security.sandbox.logging.enabled",
405
-    "security.sandbox.content.tempDirSuffix",
406
-  "security.sandbox.mac.track.violations",
406
-    "security.sandbox.logging.enabled",
407
-  "security.sandbox.windows.log.stackTraceDepth",
407
-    "security.sandbox.mac.track.violations",
408
-  "svg.disabled",
408
-    "security.sandbox.windows.log.stackTraceDepth",
409
-  "svg.display-lists.hit-testing.enabled",
409
-    "svg.disabled",
410
-  "svg.display-lists.painting.enabled",
410
-    "svg.display-lists.hit-testing.enabled",
411
-  "svg.new-getBBox.enabled",
411
-    "svg.display-lists.painting.enabled",
412
-  "svg.path-caching.enabled",
412
-    "svg.new-getBBox.enabled",
413
-  "svg.transform-box.enabled",
413
-    "svg.path-caching.enabled",
414
-  "toolkit.asyncshutdown.crash_timeout",
414
-    "svg.transform-box.enabled",
415
-  "toolkit.asyncshutdown.log",
415
-    "toolkit.asyncshutdown.crash_timeout",
416
-  "toolkit.osfile.log",
416
-    "toolkit.asyncshutdown.log",
417
-  "toolkit.osfile.log.redirect",
417
-    "toolkit.osfile.log",
418
-  "toolkit.telemetry.enabled",
418
-    "toolkit.osfile.log.redirect",
419
-  "toolkit.telemetry.idleTimeout",
419
-    "toolkit.telemetry.enabled",
420
-  "toolkit.telemetry.initDelay",
420
-    "toolkit.telemetry.idleTimeout",
421
-  "toolkit.telemetry.log.dump",
421
-    "toolkit.telemetry.initDelay",
422
-  "toolkit.telemetry.log.level",
422
-    "toolkit.telemetry.log.dump",
423
-  "toolkit.telemetry.minSubsessionLength",
423
-    "toolkit.telemetry.log.level",
424
-  "toolkit.telemetry.scheduler.idleTickInterval",
424
-    "toolkit.telemetry.minSubsessionLength",
425
-  "toolkit.telemetry.scheduler.tickInterval",
425
-    "toolkit.telemetry.scheduler.idleTickInterval",
426
-  "toolkit.telemetry.testing.overridePreRelease",
426
-    "toolkit.telemetry.scheduler.tickInterval",
427
-  "toolkit.telemetry.unified",
427
-    "toolkit.telemetry.testing.overridePreRelease",
428
-  "ui.key.menuAccessKeyFocuses",
428
-    "toolkit.telemetry.unified",
429
-  "ui.popup.disable_autohide",
429
-    "ui.key.menuAccessKeyFocuses",
430
-  "ui.use_activity_cursor",
430
-    "ui.popup.disable_autohide",
431
-  "view_source.editor.external",
431
-    "ui.use_activity_cursor",
432
-  "zoom.maxPercent",
432
-    "view_source.editor.external",
433
-  "zoom.minPercent"
433
-    "zoom.maxPercent",
434
-};
434
-    "zoom.minPercent"};
435
-
435
-
436
-const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount)
436
-const char** mozilla::dom::ContentPrefs::GetEarlyPrefs(size_t* aCount) {
437
-{
438
-  *aCount = ArrayLength(ContentPrefs::gEarlyPrefs);
437
-  *aCount = ArrayLength(ContentPrefs::gEarlyPrefs);
439
-  return gEarlyPrefs;
438
-  return gEarlyPrefs;
440
-}
439
-}
441
-
440
-
442
-const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex)
441
-const char* mozilla::dom::ContentPrefs::GetEarlyPref(size_t aIndex) {
443
-{
444
-  MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs));
442
-  MOZ_ASSERT(aIndex < ArrayLength(ContentPrefs::gEarlyPrefs));
445
-  return gEarlyPrefs[aIndex];
443
-  return gEarlyPrefs[aIndex];
446
-}
444
-}
Lines 465-480 index 72ce8d236c11..000000000000 Link Here
465
-namespace dom {
463
-namespace dom {
466
-
464
-
467
-class ContentPrefs {
465
-class ContentPrefs {
468
-public:
466
- public:
469
-  static const char** GetEarlyPrefs(size_t* aCount);
467
-  static const char** GetEarlyPrefs(size_t* aCount);
470
-  static const char* GetEarlyPref(size_t aIndex);
468
-  static const char* GetEarlyPref(size_t aIndex);
471
-
469
-
472
-private:
470
- private:
473
-  static const char* gEarlyPrefs[];
471
-  static const char* gEarlyPrefs[];
474
-};
472
-};
475
-
473
-
476
-}
474
-}  // namespace dom
477
-}
475
-}  // namespace mozilla
478
-
476
-
479
-#endif
477
-#endif
480
diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp
478
diff --git dom/ipc/ContentProcess.cpp dom/ipc/ContentProcess.cpp
Lines 489-495 index 2441c8cb9224..c00283dc5084 100644 Link Here
489
 #include "base/shared_memory.h"
487
 #include "base/shared_memory.h"
490
 #include "mozilla/Preferences.h"
488
 #include "mozilla/Preferences.h"
491
 #include "mozilla/Scheduler.h"
489
 #include "mozilla/Scheduler.h"
492
@@ -226,8 +225,8 @@ ContentProcess::Init(int aArgc, char* aArgv[])
490
@@ -212,8 +211,8 @@ bool ContentProcess::Init(int aArgc, char* aArgv[]) {
493
     NS_ERROR("failed to map shared memory in the child");
491
     NS_ERROR("failed to map shared memory in the child");
494
     return false;
492
     return false;
495
   }
493
   }
Lines 499-505 index 2441c8cb9224..c00283dc5084 100644 Link Here
499
+                                      prefsLen);
497
+                                      prefsLen);
500
 
498
 
501
   Scheduler::SetPrefs(schedulerPrefs);
499
   Scheduler::SetPrefs(schedulerPrefs);
502
   mContent.Init(IOThreadChild::message_loop(),
500
   mContent.Init(IOThreadChild::message_loop(), ParentPid(),
503
diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl
501
diff --git dom/ipc/PContent.ipdl dom/ipc/PContent.ipdl
504
index 5d077976569a..fb967ffc53a9 100644
502
index 5d077976569a..fb967ffc53a9 100644
505
--- dom/ipc/PContent.ipdl
503
--- dom/ipc/PContent.ipdl
Lines 549-555 diff --git layout/style/nsCSSProps.h layout/style/nsCSSProps.h Link Here
549
index dce44bf61b35..80288336a08b 100644
547
index dce44bf61b35..80288336a08b 100644
550
--- layout/style/nsCSSProps.h
548
--- layout/style/nsCSSProps.h
551
+++ layout/style/nsCSSProps.h
549
+++ layout/style/nsCSSProps.h
552
@@ -645,7 +645,7 @@ public:
550
@@ -640,7 +640,7 @@ class nsCSSProps {
553
     // In the child process, assert that we're not trying to parse stylesheets
551
     // In the child process, assert that we're not trying to parse stylesheets
554
     // before we've gotten all our prefs.
552
     // before we've gotten all our prefs.
555
     MOZ_ASSERT_IF(!XRE_IsParentProcess(),
553
     MOZ_ASSERT_IF(!XRE_IsParentProcess(),
Lines 570-612 index fe780686f2eb..488095f49236 100644 Link Here
570
 #include "mozilla/dom/PContent.h"
568
 #include "mozilla/dom/PContent.h"
571
 #include "mozilla/HashFunctions.h"
569
 #include "mozilla/HashFunctions.h"
572
 #include "mozilla/Logging.h"
570
 #include "mozilla/Logging.h"
573
@@ -131,6 +130,29 @@ enum class PrefType : uint8_t
571
@@ -129,6 +128,25 @@ enum class PrefType : uint8_t {
574
   Bool = 3,
572
   Bool = 3,
575
 };
573
 };
576
 
574
 
577
+// This is used for pref names and string pref values. We encode the string
575
+// This is used for pref names and string pref values. We encode the string
578
+// length, then a '/', then the string chars. This encoding means there are no
576
+// length, then a '/', then the string chars. This encoding means there are no
579
+// special chars that are forbidden or require escaping.
577
+// special chars that are forbidden or require escaping.
580
+static void
578
+static void SerializeAndAppendString(const char* aChars, nsCString& aStr) {
581
+SerializeAndAppendString(const char* aChars, nsCString& aStr)
582
+{
583
+  aStr.AppendInt(uint32_t(strlen(aChars)));
579
+  aStr.AppendInt(uint32_t(strlen(aChars)));
584
+  aStr.Append('/');
580
+  aStr.Append('/');
585
+  aStr.Append(aChars);
581
+  aStr.Append(aChars);
586
+}
582
+}
587
+
583
+
588
+static char*
584
+static char* DeserializeString(char* aChars, nsCString& aStr) {
589
+DeserializeString(char* aChars, nsCString& aStr)
590
+{
591
+  char* p = aChars;
585
+  char* p = aChars;
592
+  uint32_t length = strtol(p, &p, 10);
586
+  uint32_t length = strtol(p, &p, 10);
593
+  MOZ_ASSERT(p[0] == '/');
587
+  MOZ_ASSERT(p[0] == '/');
594
+  p++; // move past the '/'
588
+  p++;  // move past the '/'
595
+  aStr.Assign(p, length);
589
+  aStr.Assign(p, length);
596
+  p += length; // move past the string itself
590
+  p += length;  // move past the string itself
597
+  return p;
591
+  return p;
598
+}
592
+}
599
+
593
+
600
 // Keep this in sync with PrefValue in prefs_parser/src/lib.rs.
594
 // Keep this in sync with PrefValue in prefs_parser/src/lib.rs.
601
 union PrefValue {
595
 union PrefValue {
602
   const char* mStringVal;
596
   const char* mStringVal;
603
@@ -223,6 +245,64 @@ union PrefValue {
597
@@ -215,6 +233,61 @@ union PrefValue {
604
         MOZ_CRASH();
598
         MOZ_CRASH();
605
     }
599
     }
606
   }
600
   }
607
+
601
+
608
+  void SerializeAndAppend(PrefType aType, nsCString& aStr)
602
+  void SerializeAndAppend(PrefType aType, nsCString& aStr) {
609
+  {
610
+    switch (aType) {
603
+    switch (aType) {
611
+      case PrefType::Bool:
604
+      case PrefType::Bool:
612
+        aStr.Append(mBoolVal ? 'T' : 'F');
605
+        aStr.Append(mBoolVal ? 'T' : 'F');
Lines 627-636 index fe780686f2eb..488095f49236 100644 Link Here
627
+    }
620
+    }
628
+  }
621
+  }
629
+
622
+
630
+  static char* Deserialize(PrefType aType,
623
+  static char* Deserialize(PrefType aType, char* aStr,
631
+                           char* aStr,
624
+                           dom::MaybePrefValue* aDomValue) {
632
+                           dom::MaybePrefValue* aDomValue)
633
+  {
634
+    char* p = aStr;
625
+    char* p = aStr;
635
+
626
+
636
+    switch (aType) {
627
+    switch (aType) {
Lines 665-671 index fe780686f2eb..488095f49236 100644 Link Here
665
 };
656
 };
666
 
657
 
667
 #ifdef DEBUG
658
 #ifdef DEBUG
668
@@ -694,6 +774,159 @@ public:
659
@@ -656,6 +729,157 @@ class Pref {
669
     return false;
660
     return false;
670
   }
661
   }
671
 
662
 
Lines 721-728 index fe780686f2eb..488095f49236 100644 Link Here
721
+  // - "S-:10/my.string2:5/1.234:\n"
712
+  // - "S-:10/my.string2:5/1.234:\n"
722
+  // - "S-:10/my.string3::7/string!\n"
713
+  // - "S-:10/my.string3::7/string!\n"
723
+
714
+
724
+  void SerializeAndAppend(nsCString& aStr)
715
+  void SerializeAndAppend(nsCString& aStr) {
725
+  {
726
+    switch (Type()) {
716
+    switch (Type()) {
727
+      case PrefType::Bool:
717
+      case PrefType::Bool:
728
+        aStr.Append('B');
718
+        aStr.Append('B');
Lines 759-766 index fe780686f2eb..488095f49236 100644 Link Here
759
+    aStr.Append('\n');
749
+    aStr.Append('\n');
760
+  }
750
+  }
761
+
751
+
762
+  static char* Deserialize(char* aStr, dom::Pref* aDomPref)
752
+  static char* Deserialize(char* aStr, dom::Pref* aDomPref) {
763
+  {
764
+    char* p = aStr;
753
+    char* p = aStr;
765
+
754
+
766
+    // The type.
755
+    // The type.
Lines 775-781 index fe780686f2eb..488095f49236 100644 Link Here
775
+      NS_ERROR("bad pref type");
764
+      NS_ERROR("bad pref type");
776
+      type = PrefType::None;
765
+      type = PrefType::None;
777
+    }
766
+    }
778
+    p++; // move past the type char
767
+    p++;  // move past the type char
779
+
768
+
780
+    // Locked?
769
+    // Locked?
781
+    bool isLocked;
770
+    bool isLocked;
Lines 787-803 index fe780686f2eb..488095f49236 100644 Link Here
787
+      NS_ERROR("bad pref locked status");
776
+      NS_ERROR("bad pref locked status");
788
+      isLocked = false;
777
+      isLocked = false;
789
+    }
778
+    }
790
+    p++; // move past the isLocked char
779
+    p++;  // move past the isLocked char
791
+
780
+
792
+    MOZ_ASSERT(*p == ':');
781
+    MOZ_ASSERT(*p == ':');
793
+    p++; // move past the ':'
782
+    p++;  // move past the ':'
794
+
783
+
795
+    // The pref name.
784
+    // The pref name.
796
+    nsCString name;
785
+    nsCString name;
797
+    p = DeserializeString(p, name);
786
+    p = DeserializeString(p, name);
798
+
787
+
799
+    MOZ_ASSERT(*p == ':');
788
+    MOZ_ASSERT(*p == ':');
800
+    p++; // move past the ':' preceding the default value
789
+    p++;  // move past the ':' preceding the default value
801
+
790
+
802
+    dom::MaybePrefValue maybeDefaultValue;
791
+    dom::MaybePrefValue maybeDefaultValue;
803
+    if (*p != ':') {
792
+    if (*p != ':') {
Lines 806-812 index fe780686f2eb..488095f49236 100644 Link Here
806
+    }
795
+    }
807
+
796
+
808
+    MOZ_ASSERT(*p == ':');
797
+    MOZ_ASSERT(*p == ':');
809
+    p++; // move past the ':' between the default and user values
798
+    p++;  // move past the ':' between the default and user values
810
+
799
+
811
+    dom::MaybePrefValue maybeUserValue;
800
+    dom::MaybePrefValue maybeUserValue;
812
+    if (*p != '\n') {
801
+    if (*p != '\n') {
Lines 815-837 index fe780686f2eb..488095f49236 100644 Link Here
815
+    }
804
+    }
816
+
805
+
817
+    MOZ_ASSERT(*p == '\n');
806
+    MOZ_ASSERT(*p == '\n');
818
+    p++; // move past the '\n' following the user value
807
+    p++;  // move past the '\n' following the user value
819
+
808
+
820
+    *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue);
809
+    *aDomPref = dom::Pref(name, isLocked, maybeDefaultValue, maybeUserValue);
821
+
810
+
822
+    return p;
811
+    return p;
823
+  }
812
+  }
824
+
813
+
825
   void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes)
814
   void AddSizeOfIncludingThis(MallocSizeOf aMallocSizeOf, PrefsSizes& aSizes) {
826
   {
827
     // Note: mName is allocated in gPrefNameArena, measured elsewhere.
815
     // Note: mName is allocated in gPrefNameArena, measured elsewhere.
828
@@ -880,41 +1113,9 @@ pref_savePrefs()
816
     aSizes.mPrefValues += aMallocSizeOf(this);
817
@@ -817,57 +1041,17 @@ static PrefSaveData pref_savePrefs() {
829
 
818
 
830
 #ifdef DEBUG
819
 #ifdef DEBUG
831
 
820
 
832
-// For content processes, what prefs have been initialized?
821
-// For content processes, what prefs have been initialized?
833
-enum class ContentProcessPhase
822
-enum class ContentProcessPhase {
834
-{
835
-  eNoPrefsSet,
823
-  eNoPrefsSet,
836
-  eEarlyPrefsSet,
824
-  eEarlyPrefsSet,
837
-  eEarlyAndLatePrefsSet,
825
-  eEarlyAndLatePrefsSet,
Lines 840-875 index fe780686f2eb..488095f49236 100644 Link Here
840
 // Note that this never changes in the parent process, and is only read in
828
 // Note that this never changes in the parent process, and is only read in
841
 // content processes.
829
 // content processes.
842
-static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet;
830
-static ContentProcessPhase gPhase = ContentProcessPhase::eNoPrefsSet;
843
-
831
+static bool gContentProcessPrefsAreInited = false;
844
-struct StringComparator
832
 
845
-{
833
-struct StringComparator {
846
-  const char* mPrefName;
834
-  const char* mPrefName;
847
-
835
-
848
-  explicit StringComparator(const char* aPrefName)
836
-  explicit StringComparator(const char* aPrefName) : mPrefName(aPrefName) {}
849
-    : mPrefName(aPrefName)
850
-  {
851
-  }
852
-
837
-
853
-  int operator()(const char* aPrefName) const
838
-  int operator()(const char* aPrefName) const {
854
-  {
855
-    return strcmp(mPrefName, aPrefName);
839
-    return strcmp(mPrefName, aPrefName);
856
-  }
840
-  }
857
-};
841
-};
858
-
842
-
859
-static bool
843
-static bool IsEarlyPref(const char* aPrefName) {
860
-IsEarlyPref(const char* aPrefName)
861
-{
862
-  size_t prefsLen;
844
-  size_t prefsLen;
863
-  size_t found;
845
-  size_t found;
864
-  const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen);
846
-  const char** list = mozilla::dom::ContentPrefs::GetEarlyPrefs(&prefsLen);
865
-  return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found);
847
-  return BinarySearchIf(list, 0, prefsLen, StringComparator(aPrefName), &found);
866
-}
848
-}
867
+static bool gContentProcessPrefsAreInited = false;
849
-
868
 
850
 #endif  // DEBUG
869
 #endif // DEBUG
870
 
851
 
871
@@ -923,23 +1124,7 @@ pref_HashTableLookupInner(const char* aPrefName)
852
 static PrefEntry* pref_HashTableLookupInner(const char* aPrefName) {
872
 {
873
   MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
853
   MOZ_ASSERT(NS_IsMainThread() || mozilla::ServoStyleSet::IsInServoTraversal());
874
 
854
 
875
-#ifdef DEBUG
855
-#ifdef DEBUG
Lines 878-910 index fe780686f2eb..488095f49236 100644 Link Here
878
-      MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set",
858
-      MOZ_CRASH_UNSAFE_PRINTF("accessing pref %s before early prefs are set",
879
-                              aPrefName);
859
-                              aPrefName);
880
-    }
860
-    }
881
-
861
+  MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited);
862
 
882
-    if (gPhase == ContentProcessPhase::eEarlyPrefsSet &&
863
-    if (gPhase == ContentProcessPhase::eEarlyPrefsSet &&
883
-        !IsEarlyPref(aPrefName)) {
864
-        !IsEarlyPref(aPrefName)) {
884
-      // If you hit this crash, you have an early access of a non-early pref.
865
-      // If you hit this crash, you have an early access of a non-early pref.
885
-      // Consider moving the access later or add the pref to the whitelist of
866
-      // Consider moving the access later or add the pref to the whitelist of
886
-      // early prefs in ContentPrefs.cpp and get review from a DOM peer.
867
-      // early prefs in ContentPrefs.cpp and get review from a DOM peer.
887
-      MOZ_CRASH_UNSAFE_PRINTF(
868
-      MOZ_CRASH_UNSAFE_PRINTF(
888
-        "accessing non-early pref %s before late prefs are set", aPrefName);
869
-          "accessing non-early pref %s before late prefs are set", aPrefName);
889
-    }
870
-    }
890
-  }
871
-  }
891
-#endif
872
-#endif
892
+  MOZ_ASSERT_IF(!XRE_IsParentProcess(), gContentProcessPrefsAreInited);
873
-
893
 
894
   return static_cast<PrefEntry*>(gHashTable->Search(aPrefName));
874
   return static_cast<PrefEntry*>(gHashTable->Search(aPrefName));
895
 }
875
 }
896
@@ -2932,8 +3117,8 @@ public:
897
 
876
 
898
 } // namespace
877
@@ -2637,8 +2821,8 @@ class AddPreferencesMemoryReporterRunnable : public Ru
878
 
879
 }  // namespace
899
 
880
 
900
-// A list of prefs sent early from the parent, via shared memory.
881
-// A list of prefs sent early from the parent, via shared memory.
901
-static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
882
-static InfallibleTArray<dom::Pref>* gEarlyDomPrefs;
902
+// A list of changed prefs sent from the parent via shared memory.
883
+// A list of changed prefs sent from the parent via shared memory.
903
+static InfallibleTArray<dom::Pref>* gChangedDomPrefs;
884
+static InfallibleTArray<dom::Pref>* gChangedDomPrefs;
904
 
885
 
905
 static const char kTelemetryPref[] = "toolkit.telemetry.enabled";
886
 /* static */ already_AddRefed<Preferences>
906
 static const char kChannelPref[] = "app.update.channel";
887
 Preferences::GetInstanceForService() {
907
@@ -3050,12 +3235,12 @@ Preferences::GetInstanceForService()
888
@@ -2668,12 +2852,12 @@ Preferences::GetInstanceForService() {
908
   }
889
   }
909
 
890
 
910
   if (!XRE_IsParentProcess()) {
891
   if (!XRE_IsParentProcess()) {
Lines 922-940 index fe780686f2eb..488095f49236 100644 Link Here
922
 
903
 
923
   } else {
904
   } else {
924
     // Check if there is a deployment configuration file. If so, set up the
905
     // Check if there is a deployment configuration file. If so, set up the
925
@@ -3179,149 +3364,44 @@ NS_IMPL_ISUPPORTS(Preferences,
906
@@ -2782,143 +2966,45 @@ Preferences::~Preferences() {
907
 NS_IMPL_ISUPPORTS(Preferences, nsIPrefService, nsIObserver, nsIPrefBranch,
926
                   nsISupportsWeakReference)
908
                   nsISupportsWeakReference)
927
 
909
 
928
 /* static */ void
910
-/* static */ void Preferences::SerializeEarlyPreferences(nsCString& aStr) {
929
-Preferences::SerializeEarlyPreferences(nsCString& aStr)
911
+/* static */ void Preferences::SerializePreferences(nsCString& aStr) {
930
+Preferences::SerializePreferences(nsCString& aStr)
931
 {
932
   MOZ_RELEASE_ASSERT(InitStaticMembers());
912
   MOZ_RELEASE_ASSERT(InitStaticMembers());
933
 
913
 
934
-  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
914
-  nsAutoCStringN<256> boolPrefs, intPrefs, stringPrefs;
935
-  size_t numEarlyPrefs;
915
-  size_t numEarlyPrefs;
936
-  dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs);
916
-  dom::ContentPrefs::GetEarlyPrefs(&numEarlyPrefs);
937
-
917
+  aStr.Truncate();
918
 
938
-  for (unsigned int i = 0; i < numEarlyPrefs; i++) {
919
-  for (unsigned int i = 0; i < numEarlyPrefs; i++) {
939
-    const char* prefName = dom::ContentPrefs::GetEarlyPref(i);
920
-    const char* prefName = dom::ContentPrefs::GetEarlyPref(i);
940
-    MOZ_ASSERT_IF(i > 0,
921
-    MOZ_ASSERT_IF(i > 0,
Lines 943-976 index fe780686f2eb..488095f49236 100644 Link Here
943
-    Pref* pref = pref_HashTableLookup(prefName);
924
-    Pref* pref = pref_HashTableLookup(prefName);
944
-    if (!pref || !pref->MustSendToContentProcesses()) {
925
-    if (!pref || !pref->MustSendToContentProcesses()) {
945
-      continue;
926
-      continue;
946
-    }
927
+  for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) {
947
+  aStr.Truncate();
928
+    Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref;
948
 
929
+    if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) {
930
+      pref->SerializeAndAppend(aStr);
931
     }
932
-
949
-    switch (pref->Type()) {
933
-    switch (pref->Type()) {
950
-      case PrefType::Bool:
934
-      case PrefType::Bool:
951
-        boolPrefs.Append(
935
-        boolPrefs.Append(
952
-          nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
936
-            nsPrintfCString("%u:%d|", i, Preferences::GetBool(prefName)));
953
-        break;
937
-        break;
954
-      case PrefType::Int:
938
-      case PrefType::Int:
955
-        intPrefs.Append(
939
-        intPrefs.Append(
956
-          nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
940
-            nsPrintfCString("%u:%d|", i, Preferences::GetInt(prefName)));
957
-        break;
941
-        break;
958
-      case PrefType::String: {
942
-      case PrefType::String: {
959
-        nsAutoCString value;
943
-        nsAutoCString value;
960
-        Preferences::GetCString(prefName, value);
944
-        Preferences::GetCString(prefName, value);
961
-        stringPrefs.Append(
945
-        stringPrefs.Append(
962
-          nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
946
-            nsPrintfCString("%u:%d;%s|", i, value.Length(), value.get()));
963
-      } break;
947
-      } break;
964
-      case PrefType::None:
948
-      case PrefType::None:
965
-        break;
949
-        break;
966
-      default:
950
-      default:
967
-        printf_stderr("preference type: %d\n", int(pref->Type()));
951
-        printf_stderr("preference type: %d\n", int(pref->Type()));
968
-        MOZ_CRASH();
952
-        MOZ_CRASH();
969
+  for (auto iter = gHashTable->Iter(); !iter.Done(); iter.Next()) {
953
-    }
970
+    Pref* pref = static_cast<PrefEntry*>(iter.Get())->mPref;
971
+    if (pref->MustSendToContentProcesses() && pref->HasAdvisablySizedValues()) {
972
+      pref->SerializeAndAppend(aStr);
973
     }
974
   }
954
   }
975
 
955
 
976
-  aStr.Truncate();
956
-  aStr.Truncate();
Lines 983-992 index fe780686f2eb..488095f49236 100644 Link Here
983
   aStr.Append('\0');
963
   aStr.Append('\0');
984
 }
964
 }
985
 
965
 
986
 /* static */ void
966
-/* static */ void Preferences::DeserializeEarlyPreferences(char* aStr,
987
-Preferences::DeserializeEarlyPreferences(char* aStr, size_t aStrLen)
967
-                                                           size_t aStrLen) {
988
+Preferences::DeserializePreferences(char* aStr, size_t aPrefsLen)
968
+/* static */ void Preferences::DeserializePreferences(char* aStr,
989
 {
969
+                                                      size_t aPrefsLen) {
990
   MOZ_ASSERT(!XRE_IsParentProcess());
970
   MOZ_ASSERT(!XRE_IsParentProcess());
991
 
971
 
992
-  MOZ_ASSERT(!gEarlyDomPrefs);
972
-  MOZ_ASSERT(!gEarlyDomPrefs);
Lines 1011-1036 index fe780686f2eb..488095f49236 100644 Link Here
1011
-    MOZ_ASSERT(p[0] == '|');
991
-    MOZ_ASSERT(p[0] == '|');
1012
-    p++;
992
-    p++;
1013
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
993
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1014
-                   /* isLocked */ false,
994
-                   /* isLocked */ false, value, dom::MaybePrefValue());
1015
-                   value,
1016
-                   dom::MaybePrefValue());
1017
-    gEarlyDomPrefs->AppendElement(pref);
995
-    gEarlyDomPrefs->AppendElement(pref);
1018
-  }
996
+  while (*p != '\0') {
997
+    dom::Pref pref;
998
+    p = Pref::Deserialize(p, &pref);
999
+    gChangedDomPrefs->AppendElement(pref);
1000
   }
1019
-  p++;
1001
-  p++;
1020
-
1002
 
1021
-  // Get the int prefs.
1003
-  // Get the int prefs.
1022
-  while (*p != '\n') {
1004
-  while (*p != '\n') {
1023
-    int32_t index = strtol(p, &p, 10);
1005
-    int32_t index = strtol(p, &p, 10);
1024
-    MOZ_ASSERT(p[0] == ':');
1006
-    MOZ_ASSERT(p[0] == ':');
1025
-    p++;
1007
-    p++;
1026
-    dom::MaybePrefValue value(
1008
-    dom::MaybePrefValue value(
1027
-      dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
1009
-        dom::PrefValue(static_cast<int32_t>(strtol(p, &p, 10))));
1028
-    MOZ_ASSERT(p[0] == '|');
1010
-    MOZ_ASSERT(p[0] == '|');
1029
-    p++;
1011
-    p++;
1030
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1012
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1031
-                   /* isLocked */ false,
1013
-                   /* isLocked */ false, value, dom::MaybePrefValue());
1032
-                   value,
1033
-                   dom::MaybePrefValue());
1034
-    gEarlyDomPrefs->AppendElement(pref);
1014
-    gEarlyDomPrefs->AppendElement(pref);
1035
-  }
1015
-  }
1036
-  p++;
1016
-  p++;
Lines 1045-1053 index fe780686f2eb..488095f49236 100644 Link Here
1045
-    p++;
1025
-    p++;
1046
-    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
1026
-    dom::MaybePrefValue value(dom::PrefValue(nsCString(p, length)));
1047
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1027
-    dom::Pref pref(nsCString(dom::ContentPrefs::GetEarlyPref(index)),
1048
-                   /* isLocked */ false,
1028
-                   /* isLocked */ false, value, dom::MaybePrefValue());
1049
-                   value,
1050
-                   dom::MaybePrefValue());
1051
-    gEarlyDomPrefs->AppendElement(pref);
1029
-    gEarlyDomPrefs->AppendElement(pref);
1052
-    p += length + 1;
1030
-    p += length + 1;
1053
-    MOZ_ASSERT(*(p - 1) == '|');
1031
-    MOZ_ASSERT(*(p - 1) == '|');
Lines 1055-1102 index fe780686f2eb..488095f49236 100644 Link Here
1055
-  p++;
1033
-  p++;
1056
-
1034
-
1057
-  MOZ_ASSERT(*p == '\0');
1035
-  MOZ_ASSERT(*p == '\0');
1058
+  while (*p != '\0') {
1036
-
1059
+    dom::Pref pref;
1060
+    p = Pref::Deserialize(p, &pref);
1061
+    gChangedDomPrefs->AppendElement(pref);
1062
+  }
1063
 
1064
   // We finished parsing on a '\0'. That should be the last char in the shared
1037
   // We finished parsing on a '\0'. That should be the last char in the shared
1065
-  // memory.
1038
-  // memory.
1066
-  MOZ_ASSERT(aStr + aStrLen - 1 == p);
1039
-  MOZ_ASSERT(aStr + aStrLen - 1 == p);
1067
-
1068
-#ifdef DEBUG
1069
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
1070
-  gPhase = ContentProcessPhase::eEarlyPrefsSet;
1071
-#endif
1072
-}
1073
-
1074
-/* static */ void
1075
-Preferences::SetLatePreferences(const nsTArray<dom::Pref>* aDomPrefs)
1076
-{
1077
-  MOZ_ASSERT(!XRE_IsParentProcess());
1078
-
1079
-  for (unsigned int i = 0; i < aDomPrefs->Length(); i++) {
1080
-    Preferences::SetPreference(aDomPrefs->ElementAt(i));
1081
-  }
1082
+  // memory. (aPrefsLen includes the '\0'.)
1040
+  // memory. (aPrefsLen includes the '\0'.)
1083
+  MOZ_ASSERT(p == aStr + aPrefsLen - 1);
1041
+  MOZ_ASSERT(p == aStr + aPrefsLen - 1);
1084
 
1042
 
1085
 #ifdef DEBUG
1043
 #ifdef DEBUG
1086
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet);
1044
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eNoPrefsSet);
1087
-  gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet;
1045
-  gPhase = ContentProcessPhase::eEarlyPrefsSet;
1088
+  MOZ_ASSERT(!gContentProcessPrefsAreInited);
1046
+  MOZ_ASSERT(!gContentProcessPrefsAreInited);
1089
+  gContentProcessPrefsAreInited = true;
1047
+  gContentProcessPrefsAreInited = true;
1090
 #endif
1048
 #endif
1091
 }
1049
 }
1092
 
1050
 
1093
@@ -3558,36 +3638,12 @@ Preferences::GetPreference(dom::Pref* aDomPref)
1051
-/* static */ void Preferences::SetLatePreferences(
1052
-    const nsTArray<dom::Pref>* aDomPrefs) {
1053
-  MOZ_ASSERT(!XRE_IsParentProcess());
1054
-
1055
-  for (unsigned int i = 0; i < aDomPrefs->Length(); i++) {
1056
-    Preferences::SetPreference(aDomPrefs->ElementAt(i));
1057
-  }
1058
-
1059
-#ifdef DEBUG
1060
-  MOZ_ASSERT(gPhase == ContentProcessPhase::eEarlyPrefsSet);
1061
-  gPhase = ContentProcessPhase::eEarlyAndLatePrefsSet;
1062
-#endif
1063
-}
1064
-
1065
 /* static */ void Preferences::InitializeUserPrefs() {
1066
   MOZ_ASSERT(XRE_IsParentProcess());
1067
   MOZ_ASSERT(!sPreferences->mCurrentFile, "Should only initialize prefs once");
1068
@@ -3133,32 +3219,10 @@ Preferences::SavePrefFile(nsIFile* aFile) {
1094
   }
1069
   }
1095
 }
1070
 }
1096
 
1071
 
1097
-void
1072
-void Preferences::GetPreferences(InfallibleTArray<dom::Pref>* aDomPrefs) {
1098
-Preferences::GetPreferences(InfallibleTArray<dom::Pref>* aDomPrefs)
1099
-{
1100
-  MOZ_ASSERT(XRE_IsParentProcess());
1073
-  MOZ_ASSERT(XRE_IsParentProcess());
1101
-  MOZ_ASSERT(NS_IsMainThread());
1074
-  MOZ_ASSERT(NS_IsMainThread());
1102
-
1075
-
Lines 1119-1128 index fe780686f2eb..488095f49236 100644 Link Here
1119
-}
1092
-}
1120
-
1093
-
1121
 #ifdef DEBUG
1094
 #ifdef DEBUG
1122
 bool
1095
-bool Preferences::AreAllPrefsSetInContentProcess() {
1123
-Preferences::AreAllPrefsSetInContentProcess()
1096
+bool Preferences::ArePrefsInitedInContentProcess() {
1124
+Preferences::ArePrefsInitedInContentProcess()
1125
 {
1126
   MOZ_ASSERT(!XRE_IsParentProcess());
1097
   MOZ_ASSERT(!XRE_IsParentProcess());
1127
-  return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet;
1098
-  return gPhase == ContentProcessPhase::eEarlyAndLatePrefsSet;
1128
+  return gContentProcessPrefsAreInited;
1099
+  return gContentProcessPrefsAreInited;
Lines 1133-1140 diff --git modules/libpref/Preferences.h modules/libpref/Preferences.h Link Here
1133
index 0d976483daae..901425b5b663 100644
1104
index 0d976483daae..901425b5b663 100644
1134
--- modules/libpref/Preferences.h
1105
--- modules/libpref/Preferences.h
1135
+++ modules/libpref/Preferences.h
1106
+++ modules/libpref/Preferences.h
1136
@@ -328,15 +328,10 @@ public:
1107
@@ -277,15 +277,10 @@ class Preferences final : public nsIPrefService,
1137
                                    const char* aPref,
1108
   static nsresult AddFloatVarCache(float* aVariable, const char* aPref,
1138
                                    float aDefault = 0.0f);
1109
                                    float aDefault = 0.0f);
1139
 
1110
 
1140
-  // When a content process is created these methods are used to pass prefs in
1111
-  // When a content process is created these methods are used to pass prefs in
Lines 1153-1159 index 0d976483daae..901425b5b663 100644 Link Here
1153
 
1124
 
1154
   // When a single pref is changed in the parent process, these methods are
1125
   // When a single pref is changed in the parent process, these methods are
1155
   // used to pass the update to content processes.
1126
   // used to pass the update to content processes.
1156
@@ -344,7 +339,7 @@ public:
1127
@@ -293,7 +288,7 @@ class Preferences final : public nsIPrefService,
1157
   static void SetPreference(const dom::Pref& aPref);
1128
   static void SetPreference(const dom::Pref& aPref);
1158
 
1129
 
1159
 #ifdef DEBUG
1130
 #ifdef DEBUG

Return to bug 235161