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

Collapse All | Expand All

(-)b/Mk/Uses/gecko.mk (-2 / +2 lines)
Lines 37-48 RUN_DEPENDS+= libxul>=45:www/libxul Link Here
37
.elif ${gecko_ARGS:Mfirefox}
37
.elif ${gecko_ARGS:Mfirefox}
38
38
39
_GECKO_DEFAULT_VERSION=	52
39
_GECKO_DEFAULT_VERSION=	52
40
_GECKO_VERSIONS=		52 56
40
_GECKO_VERSIONS=		52 57
41
_GECKO_TYPE=	firefox
41
_GECKO_TYPE=	firefox
42
42
43
# Dependence lines for different Firefox versions
43
# Dependence lines for different Firefox versions
44
52_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox-esr
44
52_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox-esr
45
56_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox
45
57_DEPENDS=		${LOCALBASE}/lib/firefox/firefox:www/firefox
46
46
47
.if exists(${LOCALBASE}/bin/firefox)
47
.if exists(${LOCALBASE}/bin/firefox)
48
_GECKO_INSTALLED_VER!=	${LOCALBASE}/bin/firefox --version 2>/dev/null
48
_GECKO_INSTALLED_VER!=	${LOCALBASE}/bin/firefox --version 2>/dev/null
(-)b/www/firefox-i18n/Makefile (-3 / +3 lines)
Lines 2-11 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	firefox-i18n
4
PORTNAME=	firefox-i18n
5
PORTVERSION=	56.0.2
5
PORTVERSION=	57.0
6
CATEGORIES=	www
6
CATEGORIES=	www
7
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
7
MASTER_SITES=	MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
8
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi
8
		MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build4/linux-i686/xpi
9
PKGNAMEPREFIX=
9
PKGNAMEPREFIX=
10
DISTFILES=	${FIREFOX_I18N_:S/$/.xpi/}
10
DISTFILES=	${FIREFOX_I18N_:S/$/.xpi/}
11
DIST_SUBDIR=	xpi/${DISTNAME}
11
DIST_SUBDIR=	xpi/${DISTNAME}
Lines 15-21 COMMENT= Localized interface for Firefox Link Here
15
15
16
EXTRACT_DEPENDS=	zip:archivers/zip
16
EXTRACT_DEPENDS=	zip:archivers/zip
17
17
18
USES=		zip:infozip gecko:firefox,56,build
18
USES=		zip:infozip gecko:firefox,57,build
19
USE_XPI=	firefox
19
USE_XPI=	firefox
20
20
21
NO_ARCH=	yes
21
NO_ARCH=	yes
(-)b/www/firefox-i18n/distinfo (-191 / +191 lines)
Lines 1-191 Link Here
1
TIMESTAMP = 1508873487
1
TIMESTAMP = 1510498738
2
SHA256 (xpi/firefox-i18n-56.0.2/ach.xpi) = a78c4900c9dac71ea312d5ceda13987f4f8418ab078374c0e292cd30ce79aa23
2
SHA256 (xpi/firefox-i18n-57.0/ach.xpi) = ff5bbdfcca5270cf978173eb13ce10bfb4b51dbd1faeb9b69c50f689a1eb3dc4
3
SIZE (xpi/firefox-i18n-56.0.2/ach.xpi) = 454896
3
SIZE (xpi/firefox-i18n-57.0/ach.xpi) = 441112
4
SHA256 (xpi/firefox-i18n-56.0.2/af.xpi) = e0ea5e99eb7cedd0c3893ae4baa3ca2af7f814bc069dcbf921069dcaba762fc6
4
SHA256 (xpi/firefox-i18n-57.0/af.xpi) = 65459a5914dba1de876bee7d867699ff033a9722a957675f973b5cf1213366b9
5
SIZE (xpi/firefox-i18n-56.0.2/af.xpi) = 456214
5
SIZE (xpi/firefox-i18n-57.0/af.xpi) = 442205
6
SHA256 (xpi/firefox-i18n-56.0.2/an.xpi) = 18e3c4e6f85fb296bd955b110ba2c6a381ba4ba8de3a0e2990bc4618f9438593
6
SHA256 (xpi/firefox-i18n-57.0/an.xpi) = d24b77cfdf3d5badd492c04f5984171bedbafcee31fb447930925e2c911e5261
7
SIZE (xpi/firefox-i18n-56.0.2/an.xpi) = 475863
7
SIZE (xpi/firefox-i18n-57.0/an.xpi) = 462777
8
SHA256 (xpi/firefox-i18n-56.0.2/ar.xpi) = c8dcb494321e5ef34092b7555ec67147461b387803df895c30858314f0509acb
8
SHA256 (xpi/firefox-i18n-57.0/ar.xpi) = 06b0d8f7f34eb661f8f4944c26ddeee81e84bb00dd07dec4f1f06e54f1cdbe6f
9
SIZE (xpi/firefox-i18n-56.0.2/ar.xpi) = 500711
9
SIZE (xpi/firefox-i18n-57.0/ar.xpi) = 488159
10
SHA256 (xpi/firefox-i18n-56.0.2/as.xpi) = e77f99a72083b49e30f453d1f40ac670e42e6a637b8bb4e7c914f74b24e6b582
10
SHA256 (xpi/firefox-i18n-57.0/as.xpi) = 8229d02b5f8b88dea2a6e8f83db6c335c951ebf786f4d73fe28dde8457ae4d59
11
SIZE (xpi/firefox-i18n-56.0.2/as.xpi) = 508237
11
SIZE (xpi/firefox-i18n-57.0/as.xpi) = 491074
12
SHA256 (xpi/firefox-i18n-56.0.2/ast.xpi) = e4fe6028af88b67dce678e6a1215cda2c2aa0cbe76eb95947c46e08d93bb23bc
12
SHA256 (xpi/firefox-i18n-57.0/ast.xpi) = 0f46b1d36c23ec86656208241e692f2f4fef6338285dd54621939a53672d497d
13
SIZE (xpi/firefox-i18n-56.0.2/ast.xpi) = 469157
13
SIZE (xpi/firefox-i18n-57.0/ast.xpi) = 455503
14
SHA256 (xpi/firefox-i18n-56.0.2/az.xpi) = 5d9cd26da6e1afe41c9d032054b066a9e0a13f7cfd9701e8126147f405ae6f1a
14
SHA256 (xpi/firefox-i18n-57.0/az.xpi) = 68db90d2cc24227407dc20cb8721b5f89ae875fc3e0248981bf5349b2348030d
15
SIZE (xpi/firefox-i18n-56.0.2/az.xpi) = 484984
15
SIZE (xpi/firefox-i18n-57.0/az.xpi) = 466042
16
SHA256 (xpi/firefox-i18n-56.0.2/be.xpi) = 647318eb3b3060ba2384ecf4b4b96fb70fb54f1428c20f776d8d99f75eed5f49
16
SHA256 (xpi/firefox-i18n-57.0/be.xpi) = 9e9c151874180d2ccf6ac1e7e7a59a5d2e72f9543bb6c128416fad177a2f01cb
17
SIZE (xpi/firefox-i18n-56.0.2/be.xpi) = 531385
17
SIZE (xpi/firefox-i18n-57.0/be.xpi) = 516091
18
SHA256 (xpi/firefox-i18n-56.0.2/bg.xpi) = a844374d3453747f30382acf6019d379596f812f68d49ba7245a18993cea5ffb
18
SHA256 (xpi/firefox-i18n-57.0/bg.xpi) = 10c386468c1d34676a7d4e3992f14d853cd29f61bd1d12b04f3f1b66ebb8993b
19
SIZE (xpi/firefox-i18n-56.0.2/bg.xpi) = 528789
19
SIZE (xpi/firefox-i18n-57.0/bg.xpi) = 510349
20
SHA256 (xpi/firefox-i18n-56.0.2/bn-BD.xpi) = caafe8df84189999ed513e4f88e91f8b8c35e8a1d13fa54bd54f3a0654ec1f02
20
SHA256 (xpi/firefox-i18n-57.0/bn-BD.xpi) = 11b541a18a34fee16337dd8648a36e45b6c5371e9c17a845985120e6a7b1997d
21
SIZE (xpi/firefox-i18n-56.0.2/bn-BD.xpi) = 542772
21
SIZE (xpi/firefox-i18n-57.0/bn-BD.xpi) = 527188
22
SHA256 (xpi/firefox-i18n-56.0.2/bn-IN.xpi) = 4278938cf3be47f2e7a865a2221c10f383b8c7930f71b2bd0c4ce09c1ff8a3c8
22
SHA256 (xpi/firefox-i18n-57.0/bn-IN.xpi) = f8c912705b760607456a140506f3120e9d7c9f0ee17508d4cbd1eb3e18bc895d
23
SIZE (xpi/firefox-i18n-56.0.2/bn-IN.xpi) = 534450
23
SIZE (xpi/firefox-i18n-57.0/bn-IN.xpi) = 516175
24
SHA256 (xpi/firefox-i18n-56.0.2/br.xpi) = 65e8b0a3e55e99701e0ecfb9cdb0775afc0946f23eab34d4ada4f0d973d2076d
24
SHA256 (xpi/firefox-i18n-57.0/br.xpi) = 4c76bf9c4b39dac467de391527072ca6d81c83a9ccbead46dbbbb76a8ab7c252
25
SIZE (xpi/firefox-i18n-56.0.2/br.xpi) = 464256
25
SIZE (xpi/firefox-i18n-57.0/br.xpi) = 451865
26
SHA256 (xpi/firefox-i18n-56.0.2/bs.xpi) = fef54b5ba9231eaedbe216c1f9e7c86d831ed032d1fcd6e5dd15a06619ad69ac
26
SHA256 (xpi/firefox-i18n-57.0/bs.xpi) = 4d3c483b4e3a20a852ddb5fe6a0d1f447366310dee446317017ebdf332e129c1
27
SIZE (xpi/firefox-i18n-56.0.2/bs.xpi) = 472256
27
SIZE (xpi/firefox-i18n-57.0/bs.xpi) = 459649
28
SHA256 (xpi/firefox-i18n-56.0.2/ca.xpi) = 11dc866f5f2a16622fa45c36c174150293e123bfd970890e4403ed224d6e4eb6
28
SHA256 (xpi/firefox-i18n-57.0/ca.xpi) = 21fc2934acb751e89badbf215aad67085c310cbb627e44277d9592aaf213a837
29
SIZE (xpi/firefox-i18n-56.0.2/ca.xpi) = 480364
29
SIZE (xpi/firefox-i18n-57.0/ca.xpi) = 466640
30
SHA256 (xpi/firefox-i18n-56.0.2/cak.xpi) = 1ed05bcdb3977850ae21847f70122111ff459cc6669130ec9db5ccf11dde117f
30
SHA256 (xpi/firefox-i18n-57.0/cak.xpi) = 95c3cff1bd43dc2f14e99a0c10d8f101beb4e940f810279a2912571ddeff6326
31
SIZE (xpi/firefox-i18n-56.0.2/cak.xpi) = 489507
31
SIZE (xpi/firefox-i18n-57.0/cak.xpi) = 475934
32
SHA256 (xpi/firefox-i18n-56.0.2/cs.xpi) = 1191121195a77ec1315ec379b307819f1ce6b15bfa1bb9fc31ec0148cb08bcf5
32
SHA256 (xpi/firefox-i18n-57.0/cs.xpi) = c579929028397c8f93ed7193cc4f2a6511a5b503d59d02d6599701d7fab393db
33
SIZE (xpi/firefox-i18n-56.0.2/cs.xpi) = 485090
33
SIZE (xpi/firefox-i18n-57.0/cs.xpi) = 469456
34
SHA256 (xpi/firefox-i18n-56.0.2/cy.xpi) = a04d0d37f46b89d2aba85eebc1524daba41b3a6db468e61a924e83b2814d8845
34
SHA256 (xpi/firefox-i18n-57.0/cy.xpi) = 3442262d271a47173226ae327be47524ab0237b0ebaea73c61c61177463f81fa
35
SIZE (xpi/firefox-i18n-56.0.2/cy.xpi) = 466288
35
SIZE (xpi/firefox-i18n-57.0/cy.xpi) = 455787
36
SHA256 (xpi/firefox-i18n-56.0.2/da.xpi) = 3822d31c6b83317216f5124d603d9a8b8180a06d2407426dd90b71891c155f0c
36
SHA256 (xpi/firefox-i18n-57.0/da.xpi) = 538e9cce1e72af3ce6c6bbfe0a310529099dc95100546974e8b0a228860854a3
37
SIZE (xpi/firefox-i18n-56.0.2/da.xpi) = 460091
37
SIZE (xpi/firefox-i18n-57.0/da.xpi) = 448415
38
SHA256 (xpi/firefox-i18n-56.0.2/de.xpi) = ee02b96baf96be7e69ff12f06576a270e48ca454cc8f93c51070ebdd9c2a03f7
38
SHA256 (xpi/firefox-i18n-57.0/de.xpi) = bb4c883efe6f393ed47d91712901ca0bff04951db9e83ab5c981811e60512461
39
SIZE (xpi/firefox-i18n-56.0.2/de.xpi) = 473856
39
SIZE (xpi/firefox-i18n-57.0/de.xpi) = 460812
40
SHA256 (xpi/firefox-i18n-56.0.2/dsb.xpi) = 227588519f2ae092f6cbf0531287c5c36b7037c3355cc0d9e0e024d4e84472e3
40
SHA256 (xpi/firefox-i18n-57.0/dsb.xpi) = 51ef0a8a83770dab060779d6b34478a60d080e743b8c446b791a89236161f29e
41
SIZE (xpi/firefox-i18n-56.0.2/dsb.xpi) = 489897
41
SIZE (xpi/firefox-i18n-57.0/dsb.xpi) = 479506
42
SHA256 (xpi/firefox-i18n-56.0.2/el.xpi) = ace7c78e28297ea4dcc90a2b8c2881afc812a2416ae4cdba499749349bc2d3f3
42
SHA256 (xpi/firefox-i18n-57.0/el.xpi) = 2009672fb40a593061fba725ad6fb5c6b52b330a7724e3e5203c8885df5fce81
43
SIZE (xpi/firefox-i18n-56.0.2/el.xpi) = 554120
43
SIZE (xpi/firefox-i18n-57.0/el.xpi) = 534482
44
SHA256 (xpi/firefox-i18n-56.0.2/en-GB.xpi) = 55fb37a478f2521b1b1543498d373ade08126c3ac71127bfbde504d8a3f95e16
44
SHA256 (xpi/firefox-i18n-57.0/en-GB.xpi) = 404f4dd5d724ceacdd49b63f303ceeae4608f8e989992ebca71198251023fc7f
45
SIZE (xpi/firefox-i18n-56.0.2/en-GB.xpi) = 447375
45
SIZE (xpi/firefox-i18n-57.0/en-GB.xpi) = 435622
46
SHA256 (xpi/firefox-i18n-56.0.2/en-US.xpi) = 618f390c9a36aed65860d6ad20444c9c6224471d0a394de92a21262291327ff2
46
SHA256 (xpi/firefox-i18n-57.0/en-US.xpi) = ac8b76c6ad2f10b62c784cb97b30b7c8cf0b466102a3732199a2ce5f355aa0db
47
SIZE (xpi/firefox-i18n-56.0.2/en-US.xpi) = 446951
47
SIZE (xpi/firefox-i18n-57.0/en-US.xpi) = 441879
48
SHA256 (xpi/firefox-i18n-56.0.2/en-ZA.xpi) = 2fa254426d945152e9eb01cc02a8f86415fa5425aefed9825bd1dea9b6d0b76a
48
SHA256 (xpi/firefox-i18n-57.0/en-ZA.xpi) = f1d21809cccea7d4bc649b7337ebde96f3b42185d154e603dbae241e5d8876d1
49
SIZE (xpi/firefox-i18n-56.0.2/en-ZA.xpi) = 445916
49
SIZE (xpi/firefox-i18n-57.0/en-ZA.xpi) = 432019
50
SHA256 (xpi/firefox-i18n-56.0.2/eo.xpi) = f1d9e7acc5bb36a2acfb1659ad0857e5d2c9800836d096f41ceb87977a6e7377
50
SHA256 (xpi/firefox-i18n-57.0/eo.xpi) = 599314153f217433a53671ac0c118be5a6953094bcd94fe8230f192ca5d8995a
51
SIZE (xpi/firefox-i18n-56.0.2/eo.xpi) = 468952
51
SIZE (xpi/firefox-i18n-57.0/eo.xpi) = 454908
52
SHA256 (xpi/firefox-i18n-56.0.2/es-AR.xpi) = 12f34c15fb4cf11e5c007ea19a97f91370a66e192cc3c0aed5405659be36eaa3
52
SHA256 (xpi/firefox-i18n-57.0/es-AR.xpi) = 6f6d9805f9bba0fac0afce20bdfb1116c1c441cb5463fc271e8a3cec2cfe2bfe
53
SIZE (xpi/firefox-i18n-56.0.2/es-AR.xpi) = 475449
53
SIZE (xpi/firefox-i18n-57.0/es-AR.xpi) = 462978
54
SHA256 (xpi/firefox-i18n-56.0.2/es-CL.xpi) = 5239da279a01681c00ece001d1477abba04b41d50fd442e761140ba93b68870f
54
SHA256 (xpi/firefox-i18n-57.0/es-CL.xpi) = 141b2502ed61b7ac439910c252c6de9388ab6a6783fb290e77208367317b4fdc
55
SIZE (xpi/firefox-i18n-56.0.2/es-CL.xpi) = 479922
55
SIZE (xpi/firefox-i18n-57.0/es-CL.xpi) = 465514
56
SHA256 (xpi/firefox-i18n-56.0.2/es-ES.xpi) = 98b7422e833226916953ac89201652f406f84c805d293ab949adae475fc03a7c
56
SHA256 (xpi/firefox-i18n-57.0/es-ES.xpi) = 73409303fc344d642f2343fd683694b534291c6ca5a8f8c63ee27b13e2ffe8ab
57
SIZE (xpi/firefox-i18n-56.0.2/es-ES.xpi) = 365631
57
SIZE (xpi/firefox-i18n-57.0/es-ES.xpi) = 353623
58
SHA256 (xpi/firefox-i18n-56.0.2/es-MX.xpi) = 9516c169b883f8208c996f461221e9bb917e2e56c1f67d01f67026a8f5de3a1b
58
SHA256 (xpi/firefox-i18n-57.0/es-MX.xpi) = dd136cbdbe64a77341d8345c388f6ca63e5acbf65ba2f7ef7d61af52bdbcbf61
59
SIZE (xpi/firefox-i18n-56.0.2/es-MX.xpi) = 482565
59
SIZE (xpi/firefox-i18n-57.0/es-MX.xpi) = 468760
60
SHA256 (xpi/firefox-i18n-56.0.2/et.xpi) = dff5cbe5b933511fc10c1209dde31c45a521c9e687d909f4915eaf3eac8a3ad3
60
SHA256 (xpi/firefox-i18n-57.0/et.xpi) = e5683bf2280fd070dad6855af2f60bd433d9200af66ec0976f5045d5d44e8e30
61
SIZE (xpi/firefox-i18n-56.0.2/et.xpi) = 462104
61
SIZE (xpi/firefox-i18n-57.0/et.xpi) = 447277
62
SHA256 (xpi/firefox-i18n-56.0.2/eu.xpi) = d47fe44fcab9328102334596678fe89289d8de44cd9018e13e1bcc70823ec6ec
62
SHA256 (xpi/firefox-i18n-57.0/eu.xpi) = 562f0ad72e23e6b37969c6b75fd7343cbceb67cfb3db570525b796c3a214b2b2
63
SIZE (xpi/firefox-i18n-56.0.2/eu.xpi) = 467884
63
SIZE (xpi/firefox-i18n-57.0/eu.xpi) = 454671
64
SHA256 (xpi/firefox-i18n-56.0.2/fa.xpi) = 8f25e71eb0ee9ad9e90d9948012713013ee03b6fe1b3837b1d903c5102be0a93
64
SHA256 (xpi/firefox-i18n-57.0/fa.xpi) = 39891a98174cdf50dfea0a69e896049ef8aa66be1c694149eb7da3ff421045a2
65
SIZE (xpi/firefox-i18n-56.0.2/fa.xpi) = 522909
65
SIZE (xpi/firefox-i18n-57.0/fa.xpi) = 510827
66
SHA256 (xpi/firefox-i18n-56.0.2/ff.xpi) = b8416ca244cb8c99744dc3c6daa55d893754ed051ea9731f57b49edc2f0e18f1
66
SHA256 (xpi/firefox-i18n-57.0/ff.xpi) = 0b9a56e8b6378b13db3011957c9e040c3b2e74afe8de34d0333b9029b15d3f38
67
SIZE (xpi/firefox-i18n-56.0.2/ff.xpi) = 463098
67
SIZE (xpi/firefox-i18n-57.0/ff.xpi) = 454014
68
SHA256 (xpi/firefox-i18n-56.0.2/fi.xpi) = 1c6ecc0d72a500f5a77a8fdde5e288ce2c578bc1b1de3d1a062e6d7a71765130
68
SHA256 (xpi/firefox-i18n-57.0/fi.xpi) = b81be3f2dd15873dae20b4eced377e3e8d3b40de59d7735c72444e87dc7f476e
69
SIZE (xpi/firefox-i18n-56.0.2/fi.xpi) = 461923
69
SIZE (xpi/firefox-i18n-57.0/fi.xpi) = 446242
70
SHA256 (xpi/firefox-i18n-56.0.2/fr.xpi) = 3aa8e3e74e35a4e1ca948cb83b42bb9b2c95ec6abdbc8b0872129f6f75d4e2e1
70
SHA256 (xpi/firefox-i18n-57.0/fr.xpi) = 59578e90b9832f216d01755cd52bc5956fa646bc420131f3b00ce09faa8d6271
71
SIZE (xpi/firefox-i18n-56.0.2/fr.xpi) = 484561
71
SIZE (xpi/firefox-i18n-57.0/fr.xpi) = 472720
72
SHA256 (xpi/firefox-i18n-56.0.2/fy-NL.xpi) = 21b16ee4d0a232d6860c9fa6db296544e13e9500796451a98adebcdf35f88c66
72
SHA256 (xpi/firefox-i18n-57.0/fy-NL.xpi) = 529719f9de24ed1a1573d8a55f91d2cbafdaa37d06c65ced206815622668fe8f
73
SIZE (xpi/firefox-i18n-56.0.2/fy-NL.xpi) = 478044
73
SIZE (xpi/firefox-i18n-57.0/fy-NL.xpi) = 465907
74
SHA256 (xpi/firefox-i18n-56.0.2/ga-IE.xpi) = 4d780a2c0f362742f069842ae2d7ddf3dd8177e66405c9c570ef52b2e7de1f32
74
SHA256 (xpi/firefox-i18n-57.0/ga-IE.xpi) = 563933a54d94fa031fb309157d806b50e694ae42e6723d9a5b6e442fd5d53f21
75
SIZE (xpi/firefox-i18n-56.0.2/ga-IE.xpi) = 489379
75
SIZE (xpi/firefox-i18n-57.0/ga-IE.xpi) = 475962
76
SHA256 (xpi/firefox-i18n-56.0.2/gd.xpi) = 9e4e1ffc31853fe3e0d4e9e23cd1ccdf0be1b50182cefc9581b902370a3ae2fc
76
SHA256 (xpi/firefox-i18n-57.0/gd.xpi) = 69089bd588762270bd6592b544ed7886b4d092b915cdabb4ffee6c9c499ed924
77
SIZE (xpi/firefox-i18n-56.0.2/gd.xpi) = 476927
77
SIZE (xpi/firefox-i18n-57.0/gd.xpi) = 465121
78
SHA256 (xpi/firefox-i18n-56.0.2/gl.xpi) = 7dc3615f3eca3bc09472207b8d78644923526dd51651a6a04cf8449bf78cca4b
78
SHA256 (xpi/firefox-i18n-57.0/gl.xpi) = ca5195dad2f043d4b530b414061c92f835fe0f9c2f0e8a64de0e3a73079e4e6d
79
SIZE (xpi/firefox-i18n-56.0.2/gl.xpi) = 466468
79
SIZE (xpi/firefox-i18n-57.0/gl.xpi) = 452030
80
SHA256 (xpi/firefox-i18n-56.0.2/gn.xpi) = 32d64cb5ceb3a8b53abafd0699d9697f190e137155484fc06968efe3ab2da294
80
SHA256 (xpi/firefox-i18n-57.0/gn.xpi) = a118e4b81c47da417fe79af3d95788e04aaf42d433e8984d026851c41cd5ee11
81
SIZE (xpi/firefox-i18n-56.0.2/gn.xpi) = 485790
81
SIZE (xpi/firefox-i18n-57.0/gn.xpi) = 471954
82
SHA256 (xpi/firefox-i18n-56.0.2/gu-IN.xpi) = 574654d88abc8d620d5d29c09a281738ff463f8a0e09386373005a4c33cd7adf
82
SHA256 (xpi/firefox-i18n-57.0/gu-IN.xpi) = 0cf3579447aa63d495d5ee744d7b7dcd16eb6779c8e398f75a3c12841c1f2461
83
SIZE (xpi/firefox-i18n-56.0.2/gu-IN.xpi) = 513740
83
SIZE (xpi/firefox-i18n-57.0/gu-IN.xpi) = 511989
84
SHA256 (xpi/firefox-i18n-56.0.2/he.xpi) = aa4437d071736c8009ff81f79cf51348fa7ce02d82dd603cc08c00997de79ddc
84
SHA256 (xpi/firefox-i18n-57.0/he.xpi) = a2c770fab1787623f9a62a5579e7e2f5e8561ba38f8223ef11c75227abd5c7f3
85
SIZE (xpi/firefox-i18n-56.0.2/he.xpi) = 488495
85
SIZE (xpi/firefox-i18n-57.0/he.xpi) = 471920
86
SHA256 (xpi/firefox-i18n-56.0.2/hi-IN.xpi) = 9faa3d8242f2e13e82334c91018137a23a88374d6d8bcbdbca0bac69b709487d
86
SHA256 (xpi/firefox-i18n-57.0/hi-IN.xpi) = a07ecdd23d74ea5ae916b4a94ad513696e4000f703ea3e06cdff9c579748e1c2
87
SIZE (xpi/firefox-i18n-56.0.2/hi-IN.xpi) = 538303
87
SIZE (xpi/firefox-i18n-57.0/hi-IN.xpi) = 526109
88
SHA256 (xpi/firefox-i18n-56.0.2/hr.xpi) = 78ea8859fc47c3fd35055ad7dacd3c89192619f637d1b10a5515db49c1aabd63
88
SHA256 (xpi/firefox-i18n-57.0/hr.xpi) = f88a0964a4e55a4b904e3e466d78f853b58f99007f920277651b4176f48c1cbd
89
SIZE (xpi/firefox-i18n-56.0.2/hr.xpi) = 475058
89
SIZE (xpi/firefox-i18n-57.0/hr.xpi) = 460720
90
SHA256 (xpi/firefox-i18n-56.0.2/hsb.xpi) = 7e868a01a8c881319703dd2d40aa7a90a2a6afda350a93cdee785c1cee3e334c
90
SHA256 (xpi/firefox-i18n-57.0/hsb.xpi) = bbdb24808af0f07be665ffc8cadf687ef30c47075d0b1ef78a58311ddbf99f7f
91
SIZE (xpi/firefox-i18n-56.0.2/hsb.xpi) = 487599
91
SIZE (xpi/firefox-i18n-57.0/hsb.xpi) = 476500
92
SHA256 (xpi/firefox-i18n-56.0.2/hu.xpi) = ba7c06ffe790cb31450c47ffc73c0ef402e759e8d6798c284ab3004aa9b1a154
92
SHA256 (xpi/firefox-i18n-57.0/hu.xpi) = 23767b357e4ae9a470605a7bf5e5231301ffe3d65fea8e11c07f82f53e1fd9c2
93
SIZE (xpi/firefox-i18n-56.0.2/hu.xpi) = 490102
93
SIZE (xpi/firefox-i18n-57.0/hu.xpi) = 476603
94
SHA256 (xpi/firefox-i18n-56.0.2/hy-AM.xpi) = 5a78e97fe3b0a106a9839714e2a811d52501e5c427ba9c943bdcbdd2beb303cb
94
SHA256 (xpi/firefox-i18n-57.0/hy-AM.xpi) = 8106177a21fbfb382dfe26b6106ba35128a03fc25d06b492f948c7a661303add
95
SIZE (xpi/firefox-i18n-56.0.2/hy-AM.xpi) = 527711
95
SIZE (xpi/firefox-i18n-57.0/hy-AM.xpi) = 510824
96
SHA256 (xpi/firefox-i18n-56.0.2/id.xpi) = 916e89bb2bf8fcd0671a1cfe34944643e3f3bb1aeccf6bc7b86329e1f3261cb3
96
SHA256 (xpi/firefox-i18n-57.0/id.xpi) = a3cce07b6c2369bfed1c47af5fd3de8254603efe8b7d3e3929ddba32d824237a
97
SIZE (xpi/firefox-i18n-56.0.2/id.xpi) = 459066
97
SIZE (xpi/firefox-i18n-57.0/id.xpi) = 444040
98
SHA256 (xpi/firefox-i18n-56.0.2/is.xpi) = f424cf833f52cb6a57933e6173bad7a1df2e01b9233feb0abfab0e9f3fd13a78
98
SHA256 (xpi/firefox-i18n-57.0/is.xpi) = b608ebb8f34a93968fcef85d1c463e32489e999b92197f9b21b094d76db29767
99
SIZE (xpi/firefox-i18n-56.0.2/is.xpi) = 467447
99
SIZE (xpi/firefox-i18n-57.0/is.xpi) = 452655
100
SHA256 (xpi/firefox-i18n-56.0.2/it.xpi) = 49e286eecc3e31a2581f728783f25717b994e466a1329f5121efff04d3400ccd
100
SHA256 (xpi/firefox-i18n-57.0/it.xpi) = b035b10133444b23fbef2c66c8548fdd6703ec304d8a854c5fbec42e79f9778a
101
SIZE (xpi/firefox-i18n-56.0.2/it.xpi) = 358695
101
SIZE (xpi/firefox-i18n-57.0/it.xpi) = 347170
102
SHA256 (xpi/firefox-i18n-56.0.2/ja.xpi) = f981b5dd41b2d2479034720d4d8d4ec98b936e5d4b092e954057a3135b802d93
102
SHA256 (xpi/firefox-i18n-57.0/ja.xpi) = a7e3af1bbc6bdf3ec139e77e3cc1e39b072dd68b0a434ef96cc288e7424eea8c
103
SIZE (xpi/firefox-i18n-56.0.2/ja.xpi) = 527926
103
SIZE (xpi/firefox-i18n-57.0/ja.xpi) = 508551
104
SHA256 (xpi/firefox-i18n-56.0.2/ka.xpi) = c84ec7d427a84290cc760cf35a900a188621c7c8fbc3b48f63d7c000642eb3c1
104
SHA256 (xpi/firefox-i18n-57.0/ka.xpi) = 09dd38e2f51b0228dd0302e4afcc6ee6f6f2d89956172c27518cb9c7423e155e
105
SIZE (xpi/firefox-i18n-56.0.2/ka.xpi) = 509096
105
SIZE (xpi/firefox-i18n-57.0/ka.xpi) = 492355
106
SHA256 (xpi/firefox-i18n-56.0.2/kab.xpi) = e8ffa26d1acef0cfb554eced0b86656c4ac504b5459bb8fd3eb86c5292df7b3e
106
SHA256 (xpi/firefox-i18n-57.0/kab.xpi) = f673912bcc909e9046008803886cf4322653871e7b5b121645566c2b92b5fc39
107
SIZE (xpi/firefox-i18n-56.0.2/kab.xpi) = 477420
107
SIZE (xpi/firefox-i18n-57.0/kab.xpi) = 462530
108
SHA256 (xpi/firefox-i18n-56.0.2/kk.xpi) = 5c918b32273f6a107c6a8d78be58c9e757884dcc28951949db39bba705c95d37
108
SHA256 (xpi/firefox-i18n-57.0/kk.xpi) = 4d93c3e6f982f4b10d614f6d237f8fac8887c347f1ce11aa6728d0918d552a87
109
SIZE (xpi/firefox-i18n-56.0.2/kk.xpi) = 534932
109
SIZE (xpi/firefox-i18n-57.0/kk.xpi) = 519248
110
SHA256 (xpi/firefox-i18n-56.0.2/km.xpi) = 52c280027d92449fda3cd321a091b2f65f401d417bff7fdce692191b748f99c2
110
SHA256 (xpi/firefox-i18n-57.0/km.xpi) = 11cb79e402ba96e678fa27bdbd39bb7ec48533eac89f884334b65ad9335eef54
111
SIZE (xpi/firefox-i18n-56.0.2/km.xpi) = 549344
111
SIZE (xpi/firefox-i18n-57.0/km.xpi) = 530079
112
SHA256 (xpi/firefox-i18n-56.0.2/kn.xpi) = 03120c4eb742e750c46f266fceb69cd1a8b97d3cf5bd0f2a55485d25af502272
112
SHA256 (xpi/firefox-i18n-57.0/kn.xpi) = 1230fe7d27fbc3af7196b7258bee255b4d85dd232c117a0a4d515ddef74328c9
113
SIZE (xpi/firefox-i18n-56.0.2/kn.xpi) = 545517
113
SIZE (xpi/firefox-i18n-57.0/kn.xpi) = 531315
114
SHA256 (xpi/firefox-i18n-56.0.2/ko.xpi) = 60171b4d104a456df4a7fc60dc506eaa0ced1a32a216461bbddd2a215200f61b
114
SHA256 (xpi/firefox-i18n-57.0/ko.xpi) = 1d992cbc4f30bff88b40d46c55ceef223f7b66ad489e073a859655461edacb28
115
SIZE (xpi/firefox-i18n-56.0.2/ko.xpi) = 502895
115
SIZE (xpi/firefox-i18n-57.0/ko.xpi) = 487304
116
SHA256 (xpi/firefox-i18n-56.0.2/lij.xpi) = b0b07f9e4be734145b6472ef506b4cb99c85eea98ece31dad6efa2003d59f893
116
SHA256 (xpi/firefox-i18n-57.0/lij.xpi) = 4e9e6e0661c4bea860128dd870596154e68c3367624fd6cbc690e2c341157f21
117
SIZE (xpi/firefox-i18n-56.0.2/lij.xpi) = 467275
117
SIZE (xpi/firefox-i18n-57.0/lij.xpi) = 452340
118
SHA256 (xpi/firefox-i18n-56.0.2/lt.xpi) = 09302dfb196300ae49c47cf4a9a1ac9ec4df954defa8abd19bdd985852af94b5
118
SHA256 (xpi/firefox-i18n-57.0/lt.xpi) = ce3bdff82d4f6baef44d2913e4da76b83e50dd0c9e3102e444425d379e2347f7
119
SIZE (xpi/firefox-i18n-56.0.2/lt.xpi) = 488753
119
SIZE (xpi/firefox-i18n-57.0/lt.xpi) = 474955
120
SHA256 (xpi/firefox-i18n-56.0.2/lv.xpi) = 9f47b7ef87c55320d6d67a15f61a87b0cc9e891a5aeac382badfe3e3b27b51e4
120
SHA256 (xpi/firefox-i18n-57.0/lv.xpi) = 25bb6e484402d0c7909544031c2fe84f04b8cb0d563c902427542ca8b0f0a996
121
SIZE (xpi/firefox-i18n-56.0.2/lv.xpi) = 481628
121
SIZE (xpi/firefox-i18n-57.0/lv.xpi) = 465242
122
SHA256 (xpi/firefox-i18n-56.0.2/mai.xpi) = f16a670648ebdc3b914620d7fbe4f6095952f65c658901ecfcfbbc37645f5fdb
122
SHA256 (xpi/firefox-i18n-57.0/mai.xpi) = 7f3dafefb77ef7d5e73dd9a762b9d51f05c7c739933561b3a0d53c7798fff9d9
123
SIZE (xpi/firefox-i18n-56.0.2/mai.xpi) = 524702
123
SIZE (xpi/firefox-i18n-57.0/mai.xpi) = 507395
124
SHA256 (xpi/firefox-i18n-56.0.2/mk.xpi) = e537b92b6af439a1c1b9e667939f146b7a2ad17eae3d4f9075d1ad70bb958b0f
124
SHA256 (xpi/firefox-i18n-57.0/mk.xpi) = ac348da0f832916715da5111083a4e2b72a7d16b9c96c04a1cc4d5d3e6c862a7
125
SIZE (xpi/firefox-i18n-56.0.2/mk.xpi) = 507818
125
SIZE (xpi/firefox-i18n-57.0/mk.xpi) = 490852
126
SHA256 (xpi/firefox-i18n-56.0.2/ml.xpi) = 5714a5481f111e1467a596973c824e9d09cb1e464cc74c332582d5079b495efd
126
SHA256 (xpi/firefox-i18n-57.0/ml.xpi) = a4be2963a72230143283d674ddcc3c28c5f09636524af145f5f53ecce0322572
127
SIZE (xpi/firefox-i18n-56.0.2/ml.xpi) = 547547
127
SIZE (xpi/firefox-i18n-57.0/ml.xpi) = 528255
128
SHA256 (xpi/firefox-i18n-56.0.2/mr.xpi) = 2993e10fa67e526691859805b5bf928be5607d59ceedbbb7aa68962688fa6723
128
SHA256 (xpi/firefox-i18n-57.0/mr.xpi) = 410200d49c82a8ba5a0ecae914e1da3f04798506d9625acbc10c5ed3b99cec9d
129
SIZE (xpi/firefox-i18n-56.0.2/mr.xpi) = 536673
129
SIZE (xpi/firefox-i18n-57.0/mr.xpi) = 521289
130
SHA256 (xpi/firefox-i18n-56.0.2/ms.xpi) = 7b4a6353a3b2e6e2fc923dc43191c0bc463aeacc9d9eaadb032f93f00376b6df
130
SHA256 (xpi/firefox-i18n-57.0/ms.xpi) = c1b61b1325581a5c2d927a675b19e9d2e34c708bbc45ce5f6c03f386de5b33e5
131
SIZE (xpi/firefox-i18n-56.0.2/ms.xpi) = 466107
131
SIZE (xpi/firefox-i18n-57.0/ms.xpi) = 451254
132
SHA256 (xpi/firefox-i18n-56.0.2/my.xpi) = 9ef461ae9ec46bc6198456411232ed37a0ed68f11d4bc587d2b8b4d8247868d5
132
SHA256 (xpi/firefox-i18n-57.0/my.xpi) = 512cb14ae373275c4755c478ac1dce4c51be15cde0b2aaaca5b29c3e45df0a5b
133
SIZE (xpi/firefox-i18n-56.0.2/my.xpi) = 536722
133
SIZE (xpi/firefox-i18n-57.0/my.xpi) = 517702
134
SHA256 (xpi/firefox-i18n-56.0.2/nb-NO.xpi) = ee407654fbfad2523ec72fc921b9072772bacc231636b460ac239c406a43132f
134
SHA256 (xpi/firefox-i18n-57.0/nb-NO.xpi) = a57311847934d5dcff18066ff7bd323f2c2406fa3df4c8e258b8d9d0939b1be8
135
SIZE (xpi/firefox-i18n-56.0.2/nb-NO.xpi) = 465575
135
SIZE (xpi/firefox-i18n-57.0/nb-NO.xpi) = 451556
136
SHA256 (xpi/firefox-i18n-56.0.2/nl.xpi) = bbba1d13636b0f03868d202893eb995f3112a56ac2453bbdde6b8fb856fe49b1
136
SHA256 (xpi/firefox-i18n-57.0/nl.xpi) = 303f6a0b8379bbbd6db4ac45e6eb5397d725259ac67eec50a15b32686916d000
137
SIZE (xpi/firefox-i18n-56.0.2/nl.xpi) = 469053
137
SIZE (xpi/firefox-i18n-57.0/nl.xpi) = 458317
138
SHA256 (xpi/firefox-i18n-56.0.2/nn-NO.xpi) = 8120d52f0e9a0ecd870a0ea0d3b887df12b129d3bfda7c83f09e4036907d08e6
138
SHA256 (xpi/firefox-i18n-57.0/nn-NO.xpi) = eb127fad8c44a4721fc1cf1d901d0c2aff16041b8bc54d2d3951b03bfac94600
139
SIZE (xpi/firefox-i18n-56.0.2/nn-NO.xpi) = 466208
139
SIZE (xpi/firefox-i18n-57.0/nn-NO.xpi) = 452003
140
SHA256 (xpi/firefox-i18n-56.0.2/or.xpi) = 325acd5539ec48f65320ff0f5768fbdced82c788750f7c0cd00bf2a264751e32
140
SHA256 (xpi/firefox-i18n-57.0/or.xpi) = dc0f59099e8d0592b3e61d8d5c88ae22b9a1067fd89911b7799f8b43d13a2f6b
141
SIZE (xpi/firefox-i18n-56.0.2/or.xpi) = 518165
141
SIZE (xpi/firefox-i18n-57.0/or.xpi) = 500863
142
SHA256 (xpi/firefox-i18n-56.0.2/pa-IN.xpi) = 2e3bcfc268606f1496226ca549df40e9c6b8b9f972cdd7f84d4d5c4b32173294
142
SHA256 (xpi/firefox-i18n-57.0/pa-IN.xpi) = 33348a739ae6b01c3629def78a855ea6ea816e0253b696e58ba9ccbff3fa37d6
143
SIZE (xpi/firefox-i18n-56.0.2/pa-IN.xpi) = 509046
143
SIZE (xpi/firefox-i18n-57.0/pa-IN.xpi) = 495270
144
SHA256 (xpi/firefox-i18n-56.0.2/pl.xpi) = c6123361207e67bfd6f859c65c369fa0b22561fbb46b548d9b322433f209a712
144
SHA256 (xpi/firefox-i18n-57.0/pl.xpi) = fff4c80385e9eec79ec93d4fc35f84301fa28c8a527591196d719f675c9ffe2b
145
SIZE (xpi/firefox-i18n-56.0.2/pl.xpi) = 377524
145
SIZE (xpi/firefox-i18n-57.0/pl.xpi) = 364229
146
SHA256 (xpi/firefox-i18n-56.0.2/pt-BR.xpi) = 3a45de0fd1d0b18123e4f97de1de8f57c043a8c621a02f5267643fc5fb12c8bf
146
SHA256 (xpi/firefox-i18n-57.0/pt-BR.xpi) = d50347c7a26681e87fe6b5978a8fc05f8d7a885ba440cc51da03b66875fbd76a
147
SIZE (xpi/firefox-i18n-56.0.2/pt-BR.xpi) = 470954
147
SIZE (xpi/firefox-i18n-57.0/pt-BR.xpi) = 457153
148
SHA256 (xpi/firefox-i18n-56.0.2/pt-PT.xpi) = b8412464435c2e3c79017bc7ecc6b7b7d7715b1b47d0ca5f6e7c320d2c2b87d1
148
SHA256 (xpi/firefox-i18n-57.0/pt-PT.xpi) = b77f50f7b02a78dc24dc32e9bff82b46bf2e37a62f978c1fe5ac172f6bf63f26
149
SIZE (xpi/firefox-i18n-56.0.2/pt-PT.xpi) = 472803
149
SIZE (xpi/firefox-i18n-57.0/pt-PT.xpi) = 459998
150
SHA256 (xpi/firefox-i18n-56.0.2/rm.xpi) = 2054926b1f43459aa857234466b686553555e2afc2e6072ef3883f28b2ebc676
150
SHA256 (xpi/firefox-i18n-57.0/rm.xpi) = 695b5483ecc003296cd25b0b441c73c73c475457466fd7cff3f39a8491a44910
151
SIZE (xpi/firefox-i18n-56.0.2/rm.xpi) = 467019
151
SIZE (xpi/firefox-i18n-57.0/rm.xpi) = 451057
152
SHA256 (xpi/firefox-i18n-56.0.2/ro.xpi) = d69ce50c34f429d4a6724b4b8d954bb3f78e5a7fb42302c2e9de9e5f870c4e0e
152
SHA256 (xpi/firefox-i18n-57.0/ro.xpi) = 591ecab4f6e3869da69e612f847a832a802050471655565d29aa8c76febe7b7e
153
SIZE (xpi/firefox-i18n-56.0.2/ro.xpi) = 470785
153
SIZE (xpi/firefox-i18n-57.0/ro.xpi) = 455509
154
SHA256 (xpi/firefox-i18n-56.0.2/ru.xpi) = 2339cce445c2c01de77fd89079c121301dfcc082f9f8e3b0f640d0f42a648cac
154
SHA256 (xpi/firefox-i18n-57.0/ru.xpi) = 3b7355af69378f3bf0642d8f93c2c1fb6a9665ddd5a2b6aec4865baa8cd7713f
155
SIZE (xpi/firefox-i18n-56.0.2/ru.xpi) = 541437
155
SIZE (xpi/firefox-i18n-57.0/ru.xpi) = 527005
156
SHA256 (xpi/firefox-i18n-56.0.2/si.xpi) = 79c3fa18f421923b48505b74e39cd4fab474685584bb5daf71f41ebd8a388402
156
SHA256 (xpi/firefox-i18n-57.0/si.xpi) = 3392da245426ca4480b478455b61b6d53fe5741e7c0c3772a610e622b0248715
157
SIZE (xpi/firefox-i18n-56.0.2/si.xpi) = 515921
157
SIZE (xpi/firefox-i18n-57.0/si.xpi) = 498323
158
SHA256 (xpi/firefox-i18n-56.0.2/sk.xpi) = 0292ae81d9ae0af15489b2b420f3156cb2f7266cd881deaa4c9e164c987271c7
158
SHA256 (xpi/firefox-i18n-57.0/sk.xpi) = 5ac2035fdb85fb5bb789b6f2723e69bd23e6a15f6a4dfb184c08100aafead6ba
159
SIZE (xpi/firefox-i18n-56.0.2/sk.xpi) = 495563
159
SIZE (xpi/firefox-i18n-57.0/sk.xpi) = 480395
160
SHA256 (xpi/firefox-i18n-56.0.2/sl.xpi) = bea8af482218c1bfde800e3461f64d008b46b1419745127fe838a29724098b5f
160
SHA256 (xpi/firefox-i18n-57.0/sl.xpi) = 6c55623bb30635ac67abcd3fab3b4cc30de5fefea2ae0bbb99f15be7c7843245
161
SIZE (xpi/firefox-i18n-56.0.2/sl.xpi) = 473806
161
SIZE (xpi/firefox-i18n-57.0/sl.xpi) = 459376
162
SHA256 (xpi/firefox-i18n-56.0.2/son.xpi) = 6f93b52c42355adafc0778516defce16af99a17ee41ec0d25003ab39bfc6dda1
162
SHA256 (xpi/firefox-i18n-57.0/son.xpi) = ac13a973cacd9e4c84401cd11095c0a0f307d07ebb0719174adcfcf957188316
163
SIZE (xpi/firefox-i18n-56.0.2/son.xpi) = 464322
163
SIZE (xpi/firefox-i18n-57.0/son.xpi) = 450929
164
SHA256 (xpi/firefox-i18n-56.0.2/sq.xpi) = 867d12980a8d3ee7ae28faa4f09f63ed405f9ea18b6c0c776da8194ecda937ed
164
SHA256 (xpi/firefox-i18n-57.0/sq.xpi) = 2b999472e0e6550b63782d15aa713bac47b3ddcf8a212673a30fd6e55090215c
165
SIZE (xpi/firefox-i18n-56.0.2/sq.xpi) = 479511
165
SIZE (xpi/firefox-i18n-57.0/sq.xpi) = 465050
166
SHA256 (xpi/firefox-i18n-56.0.2/sr.xpi) = b300ada0279186be68dbf292d41d446828acc71e3dcca94cf88a2ef34b38abc9
166
SHA256 (xpi/firefox-i18n-57.0/sr.xpi) = 75849a57f9b44b73445b302279dcb626389670a20dc3a404ad5db774c3ceaa00
167
SIZE (xpi/firefox-i18n-56.0.2/sr.xpi) = 504487
167
SIZE (xpi/firefox-i18n-57.0/sr.xpi) = 487002
168
SHA256 (xpi/firefox-i18n-56.0.2/sv-SE.xpi) = 0ccdf643e1f62ff1e41ceb3fe9c35191aece0efcbfc6b24293f88f7ef1d55043
168
SHA256 (xpi/firefox-i18n-57.0/sv-SE.xpi) = 87ec5cbe45db203cfd1fd49ab7d2fb78df72fdcd4867e2dcc16727463100bb06
169
SIZE (xpi/firefox-i18n-56.0.2/sv-SE.xpi) = 473949
169
SIZE (xpi/firefox-i18n-57.0/sv-SE.xpi) = 459664
170
SHA256 (xpi/firefox-i18n-56.0.2/ta.xpi) = 0186d38239a9db92394562eb70a6960eeeee052abce62bc3672c8644a37cb859
170
SHA256 (xpi/firefox-i18n-57.0/ta.xpi) = 74382122b90dbd76d128d5a860d40ddc839f315ee7cecbcdb73c2fbf20169199
171
SIZE (xpi/firefox-i18n-56.0.2/ta.xpi) = 530646
171
SIZE (xpi/firefox-i18n-57.0/ta.xpi) = 513225
172
SHA256 (xpi/firefox-i18n-56.0.2/te.xpi) = 789359330bdfefb1fc379582b098c040cdb6a46f770e2c80b1695a7eb634db40
172
SHA256 (xpi/firefox-i18n-57.0/te.xpi) = a40de1d2174392d96bda8cfe65c8e374f4c833add0e1719d6c44616b571e6855
173
SIZE (xpi/firefox-i18n-56.0.2/te.xpi) = 549585
173
SIZE (xpi/firefox-i18n-57.0/te.xpi) = 530692
174
SHA256 (xpi/firefox-i18n-56.0.2/th.xpi) = abeb0f7ff018d44efbcea4cba5c0c62a78f42f6395ea1535f757f2045064c880
174
SHA256 (xpi/firefox-i18n-57.0/th.xpi) = 9d7cff5544312d33d44a2728f095e095e646ae2cd904e014fe69ca8016440884
175
SIZE (xpi/firefox-i18n-56.0.2/th.xpi) = 520297
175
SIZE (xpi/firefox-i18n-57.0/th.xpi) = 502450
176
SHA256 (xpi/firefox-i18n-56.0.2/tr.xpi) = b3798722e3a732e422a1fbff8d1c9ca7716b3fe9b2f21cc219432ec998556e26
176
SHA256 (xpi/firefox-i18n-57.0/tr.xpi) = fa1e8613954cae82fa460eb840af561df5857320a33ec5a1f8b032e3ed558dee
177
SIZE (xpi/firefox-i18n-56.0.2/tr.xpi) = 480549
177
SIZE (xpi/firefox-i18n-57.0/tr.xpi) = 465580
178
SHA256 (xpi/firefox-i18n-56.0.2/uk.xpi) = 6854f076f5ef93e72a4f38f03a8dadc61e3a2f8afa402783bbd00bcc63b6f14f
178
SHA256 (xpi/firefox-i18n-57.0/uk.xpi) = b477818ae7061f7523625380e93fbe9bdfc385279e7e96cb06e98e6ed5915d86
179
SIZE (xpi/firefox-i18n-56.0.2/uk.xpi) = 535436
179
SIZE (xpi/firefox-i18n-57.0/uk.xpi) = 518137
180
SHA256 (xpi/firefox-i18n-56.0.2/ur.xpi) = 01a4d64725be568e148d88dab405545f76a24a695d499a236a2be0599489324a
180
SHA256 (xpi/firefox-i18n-57.0/ur.xpi) = d9b3f9e18241a5abb31906792bae33c6b6b579631678c97236291e388e8bc195
181
SIZE (xpi/firefox-i18n-56.0.2/ur.xpi) = 527354
181
SIZE (xpi/firefox-i18n-57.0/ur.xpi) = 511133
182
SHA256 (xpi/firefox-i18n-56.0.2/uz.xpi) = 79092d2f830adbf05cc884aa014fa9348e3449fa206cf91286d5bfb40ebe729c
182
SHA256 (xpi/firefox-i18n-57.0/uz.xpi) = 4d4fe1f56e5c86f779753eed44f1b5d3f1cceb3a6f46950d175ed31c9f7ff39d
183
SIZE (xpi/firefox-i18n-56.0.2/uz.xpi) = 475101
183
SIZE (xpi/firefox-i18n-57.0/uz.xpi) = 461693
184
SHA256 (xpi/firefox-i18n-56.0.2/vi.xpi) = 65633b00c1a124a23bfda2bdb7666ab8e12e113c956930cc975f838e3de04038
184
SHA256 (xpi/firefox-i18n-57.0/vi.xpi) = ce81dbf85ddd901acb8c9cf7cfd331d2dfe6f4a7f5e4d799d664ff867bd5d40b
185
SIZE (xpi/firefox-i18n-56.0.2/vi.xpi) = 487150
185
SIZE (xpi/firefox-i18n-57.0/vi.xpi) = 471319
186
SHA256 (xpi/firefox-i18n-56.0.2/xh.xpi) = af99554dc838c042310acbb0a7c2623d61ff3b3045667cf301cffeb29821c008
186
SHA256 (xpi/firefox-i18n-57.0/xh.xpi) = be4d359e06a8a10cfda658a6e7c1e13ff857fd767d76882bedfd1aada3a6900c
187
SIZE (xpi/firefox-i18n-56.0.2/xh.xpi) = 477838
187
SIZE (xpi/firefox-i18n-57.0/xh.xpi) = 464460
188
SHA256 (xpi/firefox-i18n-56.0.2/zh-CN.xpi) = f2a1bb04222fbca3845b00694342a74c8d54cbf1a64104d96f1856879aed0abf
188
SHA256 (xpi/firefox-i18n-57.0/zh-CN.xpi) = 040736b596b614e55ac09aefa3e9f04211f16cb257ea0c2d274ca0df99b787b6
189
SIZE (xpi/firefox-i18n-56.0.2/zh-CN.xpi) = 498979
189
SIZE (xpi/firefox-i18n-57.0/zh-CN.xpi) = 483624
190
SHA256 (xpi/firefox-i18n-56.0.2/zh-TW.xpi) = 8c547d631522048d060be5305c277024e8038386dcad232ed742b1edf14a9471
190
SHA256 (xpi/firefox-i18n-57.0/zh-TW.xpi) = fa5cf52246a289bc91d60519697977cbd6f999f5bda7eb715cb8303af543b752
191
SIZE (xpi/firefox-i18n-56.0.2/zh-TW.xpi) = 497765
191
SIZE (xpi/firefox-i18n-57.0/zh-TW.xpi) = 482346
(-)b/www/firefox/Makefile (-7 / +6 lines)
Lines 2-28 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	firefox
4
PORTNAME=	firefox
5
DISTVERSION=	56.0.2
5
DISTVERSION=	57.0
6
DISTVERSIONSUFFIX=.source
6
DISTVERSIONSUFFIX=.source
7
PORTREVISION=	9
8
PORTEPOCH=	1
7
PORTEPOCH=	1
9
CATEGORIES=	www ipv6
8
CATEGORIES=	www ipv6
10
MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
9
MASTER_SITES=	MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
11
		MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
10
		MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build4/source
12
11
13
MAINTAINER=	gecko@FreeBSD.org
12
MAINTAINER=	gecko@FreeBSD.org
14
COMMENT=	Web browser based on the browser portion of Mozilla
13
COMMENT=	Web browser based on the browser portion of Mozilla
15
14
16
BUILD_DEPENDS=	nspr>=4.16:devel/nspr \
15
BUILD_DEPENDS=	nspr>=4.17:devel/nspr \
17
		nss>=3.32.1:security/nss \
16
		nss>=3.33:security/nss \
18
		icu>=59.1,1:devel/icu \
17
		icu>=59.1,1:devel/icu \
19
		libevent>=2.1.8:devel/libevent \
18
		libevent>=2.1.8:devel/libevent \
20
		harfbuzz>=1.4.7:print/harfbuzz \
19
		harfbuzz>=1.5.1:print/harfbuzz \
21
		graphite2>=1.3.10:graphics/graphite2 \
20
		graphite2>=1.3.10:graphics/graphite2 \
22
		png>=1.6.31:graphics/png \
21
		png>=1.6.31:graphics/png \
23
		libvorbis>=1.3.5,3:audio/libvorbis \
22
		libvorbis>=1.3.5,3:audio/libvorbis \
24
		libvpx>=1.5.0:multimedia/libvpx \
23
		libvpx>=1.5.0:multimedia/libvpx \
25
		sqlite3>=3.19.3:databases/sqlite3 \
24
		sqlite3>=3.20.1:databases/sqlite3 \
26
		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \
25
		${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \
27
		v4l_compat>0:multimedia/v4l_compat \
26
		v4l_compat>0:multimedia/v4l_compat \
28
		autoconf-2.13:devel/autoconf213 \
27
		autoconf-2.13:devel/autoconf213 \
(-)b/www/firefox/distinfo (-3 / +3 lines)
Lines 1-3 Link Here
1
TIMESTAMP = 1508873487
1
TIMESTAMP = 1510498738
2
SHA256 (firefox-56.0.2.source.tar.xz) = 6f7d284c31383a9860d7b52f05f866526d5a7c31e3ef2959d79122ba074f5ca1
2
SHA256 (firefox-57.0.source.tar.xz) = 603af00155be87f2c9c58047dd0072971f1cdab1f632695aae6ad072efefbb8f
3
SIZE (firefox-56.0.2.source.tar.xz) = 255658916
3
SIZE (firefox-57.0.source.tar.xz) = 250728772
(-)a/www/firefox/files/patch-bug1261175 (-25 lines)
Removed Link Here
1
commit deccfad4c8ba
2
Author: Matt Woodrow <mwoodrow@mozilla.com>
3
Date:   Thu Oct 12 13:10:27 2017 +1300
4
5
    Bug 1261175. r=tnikkel, a=ritu
6
    
7
    --HG--
8
    extra : source : 8281ed36bd4946af69af747b199814cc1a51fb52
9
---
10
 view/nsViewManager.cpp | 2 +-
11
 1 file changed, 1 insertion(+), 1 deletion(-)
12
13
diff --git view/nsViewManager.cpp view/nsViewManager.cpp
14
index f3540f3478da..230512c0dcc0 100644
15
--- view/nsViewManager.cpp
16
+++ view/nsViewManager.cpp
17
@@ -100,7 +100,7 @@ nsViewManager::~nsViewManager()
18
     gViewManagers = nullptr;
19
   }
20
 
21
-  mPresShell = nullptr;
22
+  MOZ_RELEASE_ASSERT(!mPresShell, "Releasing nsViewManager without having called Destroy on the PresShell!");
23
 }
24
 
25
 // We don't hold a reference to the presentation context because it
(-)a/www/firefox/files/patch-bug1343147 (-117 lines)
Removed Link Here
1
commit e215b167b9b9
2
Author: cku <cku@mozilla.com>
3
Date:   Tue Oct 3 11:29:19 2017 +0800
4
5
    Bug 1343147 - Do not double applying transform vector of the root frame in a glyph mask into the target context. r=mstange, a=ritu
6
    
7
    When we generate the glyph mask for a transformed frame in
8
    GenerateAndPushTextMask, the transform vector had been applied into aContext[1],
9
    so we should find a way to prevent applying the vector again when painting the
10
    glyph mask.
11
    
12
    In bug 1299715, I tried to prevent double apply at [2], it caused two problems:
13
    1. We only skip generating nsDisplayTransform, but we may still create a
14
    nsDisplayPerspactive bellow. Since the parent of a nsDisplayPerspective must be
15
    a nsDisplayTransform, which have been ignored, so we hit this assertion.
16
    2. We skip all transform for all frames while painting the glyph mask, which is
17
    not correct. We should only skip double applying transform vector of the root
18
    frame.
19
    
20
    This patch fixes both of these issues:
21
    a. We will still create a nsDisplayTransform for the root frame if need. But
22
    the transform matrix we apply into the target context will be an identity
23
    matrix, so we fix #1 above.
24
    b. In #a, we change the transform matrix to an identity matrix only for the root
25
    frame of the  glyph mask, so we fix #2.
26
    
27
    [1]
28
    https://hg.mozilla.org/mozilla-central/file/59e5ec5729db/layout/painting/nsDisplayList.cpp#l752
29
    [2]
30
    https://hg.mozilla.org/mozilla-central/file/ce2c129f0a87/layout/generic/nsFrame.cpp#l2806
31
    
32
    MozReview-Commit-ID: 973lkQQxLB6
33
    
34
    --HG--
35
    extra : source : 84451d723686bc47b81c44ed2ddf6c61f3e35915
36
---
37
 layout/generic/nsFrame.cpp        | 13 +++++--------
38
 layout/painting/nsDisplayList.cpp |  9 ++++++++-
39
 2 files changed, 13 insertions(+), 9 deletions(-)
40
41
diff --git layout/generic/nsFrame.cpp layout/generic/nsFrame.cpp
42
index 37f2e2801220..dbfd61b7e142 100644
43
--- layout/generic/nsFrame.cpp
44
+++ layout/generic/nsFrame.cpp
45
@@ -2803,14 +2803,11 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
46
     buildingDisplayList.SetReferenceFrameAndCurrentOffset(outerReferenceFrame,
47
       GetOffsetToCrossDoc(outerReferenceFrame));
48
 
49
-    if (!aBuilder->IsForGenerateGlyphMask() &&
50
-        !aBuilder->IsForPaintingSelectionBG()) {
51
-      nsDisplayTransform *transformItem =
52
-        new (aBuilder) nsDisplayTransform(aBuilder, this,
53
-                                          &resultList, dirtyRect, 0,
54
-                                          allowAsyncAnimation);
55
-      resultList.AppendNewToTop(transformItem);
56
-    }
57
+    nsDisplayTransform *transformItem =
58
+      new (aBuilder) nsDisplayTransform(aBuilder, this,
59
+                                        &resultList, dirtyRect, 0,
60
+                                        allowAsyncAnimation);
61
+    resultList.AppendNewToTop(transformItem);
62
 
63
     if (hasPerspective) {
64
       if (clipCapturedBy == ContainerItemType::ePerspective) {
65
diff --git layout/painting/nsDisplayList.cpp layout/painting/nsDisplayList.cpp
66
index 801e1ea2fb4d..6477bda52f01 100644
67
--- layout/painting/nsDisplayList.cpp
68
+++ layout/painting/nsDisplayList.cpp
69
@@ -7976,11 +7976,18 @@ already_AddRefed<Layer> nsDisplayTransform::BuildLayer(nsDisplayListBuilder *aBu
70
                                                        LayerManager *aManager,
71
                                                        const ContainerLayerParameters& aContainerParameters)
72
 {
73
+  // While generating a glyph mask, the transform vector of the root frame had
74
+  // been applied into the target context, so stop applying it again here.
75
+  const bool shouldSkipTransform =
76
+    (aBuilder->RootReferenceFrame() == mFrame) &&
77
+    (aBuilder->IsForGenerateGlyphMask() || aBuilder->IsForPaintingSelectionBG());
78
+
79
   /* For frames without transform, it would not be removed for
80
    * backface hidden here.  But, it would be removed by the init
81
    * function of nsDisplayTransform.
82
    */
83
-  const Matrix4x4& newTransformMatrix = GetTransformForRendering();
84
+  const Matrix4x4 newTransformMatrix =
85
+    shouldSkipTransform ? Matrix4x4(): GetTransformForRendering();
86
 
87
   uint32_t flags = FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR;
88
   RefPtr<ContainerLayer> container = aManager->GetLayerBuilder()->
89
diff --git dom/svg/crashtests/1343147.svg dom/svg/crashtests/1343147.svg
90
new file mode 100644
91
index 000000000000..d9c2611ca822
92
--- /dev/null
93
+++ dom/svg/crashtests/1343147.svg
94
@@ -0,0 +1,13 @@
95
+<svg xmlns="http://www.w3.org/2000/svg">
96
+<style>
97
+<![CDATA[
98
+  svg {
99
+    background-image: linear-gradient(lime, lime);
100
+    background-clip: text;
101
+  }
102
+  text { transform: skewy(30grad); }
103
+  g { perspective: 0; }
104
+]]>
105
+</style>
106
+  <g><text>hello</text></g>
107
+</svg>
108
diff --git dom/svg/crashtests/crashtests.list dom/svg/crashtests/crashtests.list
109
index 1727a206ec4f..57ab320161e2 100644
110
--- dom/svg/crashtests/crashtests.list
111
+++ dom/svg/crashtests/crashtests.list
112
@@ -90,4 +90,5 @@ load 1329849-5.svg
113
 load 1329849-6.svg
114
 load 1329093-1.html
115
 load 1329093-2.html
116
+load 1343147.svg
117
 load 1402798.html
(-)a/www/firefox/files/patch-bug1355576 (-262 lines)
Removed Link Here
1
commit e530ba4d4394
2
Author: Thomas Wisniewski <wisniewskit@gmail.com>
3
Date:   Tue Jul 4 20:59:26 2017 -0400
4
5
    Bug 1355576 - Add ability to clear all localStorage with the browsingData API; r=bsilverberg,janv
6
    
7
    MozReview-Commit-ID: 4UUqg62yIo9
8
    
9
    --HG--
10
    extra : rebase_source : 9c6154bbe878fc3921d22027fdc90dbdaed05be9
11
---
12
 browser/components/extensions/ext-browsingData.js  | 10 +++
13
 .../extensions/schemas/browsing_data.json          |  1 -
14
 .../extensions/test/browser/browser-common.ini     |  1 +
15
 .../browser_ext_browsingData_localStorage.js       | 93 ++++++++++++++++++++++
16
 .../test/xpcshell/test_ext_browsingData.js         |  4 +-
17
 dom/storage/LocalStorageManager.cpp                |  3 +-
18
 dom/storage/StorageObserver.cpp                    | 12 +++
19
 .../extensions/schemas/browsing_data.json          |  1 -
20
 8 files changed, 120 insertions(+), 5 deletions(-)
21
22
diff --git browser/components/extensions/ext-browsingData.js browser/components/extensions/ext-browsingData.js
23
index fd59141dd15d..109ec9601487 100644
24
--- browser/components/extensions/ext-browsingData.js
25
+++ browser/components/extensions/ext-browsingData.js
26
@@ -83,6 +83,10 @@ const clearHistory = options => {
27
   return sanitizer.items.history.clear(makeRange(options));
28
 };
29
 
30
+const clearLocalStorage = async function(options) {
31
+  Services.obs.notifyObservers(null, "extension:purge-localStorage");
32
+};
33
+
34
 const clearPasswords = async function(options) {
35
   let loginManager = Services.logins;
36
   let yieldCounter = 0;
37
@@ -152,6 +156,9 @@ const doRemoval = (options, dataToRemove, extension) => {
38
         case "history":
39
           removalPromises.push(clearHistory(options));
40
           break;
41
+        case "localStorage":
42
+          removalPromises.push(clearLocalStorage(options));
43
+          break;
44
         case "passwords":
45
           removalPromises.push(clearPasswords(options));
46
           break;
47
@@ -225,6 +232,9 @@ this.browsingData = class extends ExtensionAPI {
48
         removeHistory(options) {
49
           return doRemoval(options, {history: true});
50
         },
51
+        removeLocalStorage(options) {
52
+          return doRemoval(options, {localStorage: true});
53
+        },
54
         removePasswords(options) {
55
           return doRemoval(options, {passwords: true});
56
         },
57
diff --git browser/components/extensions/schemas/browsing_data.json browser/components/extensions/schemas/browsing_data.json
58
index a780f5640c8f..7755714eb898 100644
59
--- browser/components/extensions/schemas/browsing_data.json
60
+++ browser/components/extensions/schemas/browsing_data.json
61
@@ -341,7 +341,6 @@
62
         "description": "Clears websites' local storage data.",
63
         "type": "function",
64
         "async": "callback",
65
-        "unsupported": true,
66
         "parameters": [
67
           {
68
             "$ref": "RemovalOptions",
69
diff --git browser/components/extensions/test/browser/browser-common.ini browser/components/extensions/test/browser/browser-common.ini
70
index 464b8ba18f37..e3f7700f3939 100644
71
--- browser/components/extensions/test/browser/browser-common.ini
72
+++ browser/components/extensions/test/browser/browser-common.ini
73
@@ -46,6 +46,7 @@ skip-if = (os == 'win' && !debug) # bug 1352668
74
 [browser_ext_browserAction_theme_icons.js]
75
 [browser_ext_browsingData_formData.js]
76
 [browser_ext_browsingData_history.js]
77
+[browser_ext_browsingData_localStorage.js]
78
 [browser_ext_browsingData_pluginData.js]
79
 [browser_ext_browsingData_serviceWorkers.js]
80
 [browser_ext_commands_execute_browser_action.js]
81
diff --git browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js
82
new file mode 100644
83
index 000000000000..215f26d1fcb6
84
--- /dev/null
85
+++ browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js
86
@@ -0,0 +1,93 @@
87
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
88
+/* vim: set sts=2 sw=2 et tw=80: */
89
+"use strict";
90
+
91
+add_task(async function testLocalStorage() {
92
+  async function background() {
93
+    function openTabs() {
94
+      let promise = new Promise(resolve => {
95
+        let tabURLs = [
96
+          "http://example.com/",
97
+          "http://example.net/",
98
+        ];
99
+
100
+        let tabs;
101
+        let waitingCount = tabURLs.length;
102
+
103
+        let listener = async msg => {
104
+          if (msg !== "content-script-ready" || --waitingCount) {
105
+            return;
106
+          }
107
+          browser.runtime.onMessage.removeListener(listener);
108
+          resolve(Promise.all(tabs));
109
+        };
110
+
111
+        browser.runtime.onMessage.addListener(listener);
112
+
113
+        tabs = tabURLs.map(url => {
114
+          return browser.tabs.create({url: url});
115
+        });
116
+      });
117
+
118
+      return promise;
119
+    }
120
+
121
+    function sendMessageToTabs(tabs, message) {
122
+      return Promise.all(
123
+        tabs.map(tab => { return browser.tabs.sendMessage(tab.id, message); }));
124
+    }
125
+
126
+    let tabs = await openTabs();
127
+
128
+    await sendMessageToTabs(tabs, "resetLocalStorage");
129
+    await sendMessageToTabs(tabs, "checkLocalStorageSet");
130
+    await browser.browsingData.removeLocalStorage({});
131
+    await sendMessageToTabs(tabs, "checkLocalStorageCleared");
132
+
133
+    await sendMessageToTabs(tabs, "resetLocalStorage");
134
+    await sendMessageToTabs(tabs, "checkLocalStorageSet");
135
+    await browser.browsingData.remove({}, {localStorage: true});
136
+    await sendMessageToTabs(tabs, "checkLocalStorageCleared");
137
+
138
+    browser.tabs.remove(tabs.map(tab => tab.id));
139
+
140
+    browser.test.notifyPass("done");
141
+  }
142
+
143
+  function contentScript() {
144
+    browser.runtime.onMessage.addListener(msg => {
145
+      if (msg === "resetLocalStorage") {
146
+        localStorage.clear();
147
+        localStorage.setItem("test", "test");
148
+      } else if (msg === "checkLocalStorageSet") {
149
+        browser.test.assertEq("test", localStorage.getItem("test"));
150
+      } else if (msg === "checkLocalStorageCleared") {
151
+        browser.test.assertEq(null, localStorage.getItem("test"));
152
+      }
153
+    });
154
+    browser.runtime.sendMessage("content-script-ready");
155
+  }
156
+
157
+  let extension = ExtensionTestUtils.loadExtension({
158
+    background,
159
+    manifest: {
160
+      "permissions": ["browsingData"],
161
+      "content_scripts": [{
162
+        "matches": [
163
+          "http://example.com/",
164
+          "http://example.net/",
165
+        ],
166
+        "js": ["content-script.js"],
167
+        "run_at": "document_start",
168
+      }],
169
+    },
170
+    files: {
171
+      "content-script.js": contentScript,
172
+    },
173
+  });
174
+
175
+  await extension.startup();
176
+  await extension.awaitFinish("done");
177
+  await extension.unload();
178
+});
179
+
180
diff --git browser/components/extensions/test/xpcshell/test_ext_browsingData.js browser/components/extensions/test/xpcshell/test_ext_browsingData.js
181
index 0c1c4874ca44..0b8972058e64 100644
182
--- browser/components/extensions/test/xpcshell/test_ext_browsingData.js
183
+++ browser/components/extensions/test/xpcshell/test_ext_browsingData.js
184
@@ -44,7 +44,7 @@ add_task(async function testInvalidArguments() {
185
 
186
 add_task(async function testUnimplementedDataType() {
187
   function background() {
188
-    browser.browsingData.remove({}, {localStorage: true});
189
+    browser.browsingData.remove({}, {indexedDB: true});
190
     browser.test.sendMessage("finished");
191
   }
192
 
193
@@ -61,6 +61,6 @@ add_task(async function testUnimplementedDataType() {
194
     await extension.unload();
195
   });
196
 
197
-  let warningObserved = messages.find(line => /Firefox does not support dataTypes: localStorage/.test(line));
198
+  let warningObserved = messages.find(line => /Firefox does not support dataTypes: indexedDB/.test(line));
199
   ok(warningObserved, "Warning issued when calling remove with an unimplemented dataType.");
200
 });
201
diff --git dom/storage/LocalStorageManager.cpp dom/storage/LocalStorageManager.cpp
202
index a161de2bc596..f366e7874a90 100644
203
--- dom/storage/LocalStorageManager.cpp
204
+++ dom/storage/LocalStorageManager.cpp
205
@@ -386,7 +386,8 @@ LocalStorageManager::Observe(const char* aTopic,
206
   }
207
 
208
   // Clear everything, caches + database
209
-  if (!strcmp(aTopic, "cookie-cleared")) {
210
+  if (!strcmp(aTopic, "cookie-cleared") ||
211
+      !strcmp(aTopic, "extension:purge-localStorage-caches")) {
212
     ClearCaches(LocalStorageCache::kUnloadComplete, pattern, EmptyCString());
213
     return NS_OK;
214
   }
215
diff --git dom/storage/StorageObserver.cpp dom/storage/StorageObserver.cpp
216
index e5b010f88c7b..48d484748209 100644
217
--- dom/storage/StorageObserver.cpp
218
+++ dom/storage/StorageObserver.cpp
219
@@ -66,6 +66,7 @@ StorageObserver::Init()
220
   obs->AddObserver(sSelf, "browser:purge-domain-data", true);
221
   obs->AddObserver(sSelf, "last-pb-context-exited", true);
222
   obs->AddObserver(sSelf, "clear-origin-attributes-data", true);
223
+  obs->AddObserver(sSelf, "extension:purge-localStorage", true);
224
 
225
   // Shutdown
226
   obs->AddObserver(sSelf, "profile-after-change", true);
227
@@ -270,6 +271,23 @@ StorageObserver::Observe(nsISupports* aSubject,
228
 
229
     Notify("session-only-cleared", NS_ConvertUTF8toUTF16(originSuffix),
230
            originScope);
231
+
232
+    return NS_OK;
233
+  }
234
+
235
+  if (!strcmp(aTopic, "extension:purge-localStorage")) {
236
+    StorageDBChild* storageChild = StorageDBChild::GetOrCreate();
237
+    if (NS_WARN_IF(!storageChild)) {
238
+      return NS_ERROR_FAILURE;
239
+    }
240
+
241
+    storageChild->AsyncClearAll();
242
+
243
+    if (XRE_IsParentProcess()) {
244
+      storageChild->SendClearAll();
245
+    }
246
+
247
+    Notify("extension:purge-localStorage-caches");
248
 
249
     return NS_OK;
250
   }
251
diff --git mobile/android/components/extensions/schemas/browsing_data.json mobile/android/components/extensions/schemas/browsing_data.json
252
index 483a462d422c..1019c1a23953 100644
253
--- mobile/android/components/extensions/schemas/browsing_data.json
254
+++ mobile/android/components/extensions/schemas/browsing_data.json
255
@@ -345,7 +345,6 @@
256
         "description": "Clears websites' local storage data.",
257
         "type": "function",
258
         "async": "callback",
259
-        "unsupported": true,
260
         "parameters": [
261
           {
262
             "$ref": "RemovalOptions",
(-)a/www/firefox/files/patch-bug1369561 (-66 lines)
Removed Link Here
1
commit 4a1737e0c456
2
Author: David Keeler <dkeeler@mozilla.com>
3
Date:   Fri Sep 15 14:47:54 2017 -0700
4
5
    Bug 1369561 - Address misc. SnprintfLiteral correctness nits. r=jld, r=froydnj, a=ritu
6
    
7
    --HG--
8
    extra : source : f5533b6cd09c35eef381e311940b5bd5231d3553
9
---
10
 security/sandbox/linux/SandboxUtil.cpp | 17 ++++++++++-------
11
 xpcom/base/nsSystemInfo.cpp            |  2 +-
12
 2 files changed, 11 insertions(+), 8 deletions(-)
13
14
diff --git security/sandbox/linux/SandboxUtil.cpp security/sandbox/linux/SandboxUtil.cpp
15
index ad6003ecaad5..999329882364 100644
16
--- security/sandbox/linux/SandboxUtil.cpp
17
+++ security/sandbox/linux/SandboxUtil.cpp
18
@@ -62,7 +62,6 @@ UnshareUserNamespace()
19
   uid_t uid = getuid();
20
   gid_t gid = getgid();
21
   char buf[80];
22
-  size_t len;
23
 
24
   if (syscall(__NR_unshare, CLONE_NEWUSER) != 0) {
25
     return false;
26
@@ -84,17 +83,21 @@ UnshareUserNamespace()
27
   // current thread.  However, CLONE_NEWUSER can be unshared only in a
28
   // single-threaded process, so those are equivalent if we reach this
29
   // point.
30
-  len = size_t(SprintfLiteral(buf, "%u %u 1\n", uid, uid));
31
-  MOZ_ASSERT(len < sizeof(buf));
32
-  if (!WriteStringToFile("/proc/self/uid_map", buf, len)) {
33
+  int len = SprintfLiteral(buf, "%u %u 1\n", uid, uid);
34
+  if (len >= int(sizeof(buf)) || len < 0) {
35
+    return false;
36
+  }
37
+  if (!WriteStringToFile("/proc/self/uid_map", buf, size_t(len))) {
38
     MOZ_CRASH("Failed to write /proc/self/uid_map");
39
   }
40
 
41
   Unused << WriteStringToFile("/proc/self/setgroups", "deny", 4);
42
 
43
-  len = size_t(SprintfLiteral(buf, "%u %u 1\n", gid, gid));
44
-  MOZ_ASSERT(len < sizeof(buf));
45
-  if (!WriteStringToFile("/proc/self/gid_map", buf, len)) {
46
+  len = SprintfLiteral(buf, "%u %u 1\n", gid, gid);
47
+  if (len >= int(sizeof(buf)) || len < 0) {
48
+    return false;
49
+  }
50
+  if (!WriteStringToFile("/proc/self/gid_map", buf, size_t(len))) {
51
     MOZ_CRASH("Failed to write /proc/self/gid_map");
52
   }
53
   return true;
54
diff --git xpcom/base/nsSystemInfo.cpp xpcom/base/nsSystemInfo.cpp
55
index e5a7fe97be03..782dc9abf37d 100644
56
--- xpcom/base/nsSystemInfo.cpp
57
+++ xpcom/base/nsSystemInfo.cpp
58
@@ -706,7 +706,7 @@ nsSystemInfo::Init()
59
   }
60
 
61
   nsAutoCString secondaryLibrary;
62
-  if (gtkver_len > 0) {
63
+  if (gtkver_len > 0 && gtkver_len < int(sizeof(gtkver))) {
64
     secondaryLibrary.Append(nsDependentCSubstring(gtkver, gtkver_len));
65
   }
66
 
(-)a/www/firefox/files/patch-bug1375146 (-37 lines)
Removed Link Here
1
commit b481800095d4
2
Author: Stone Shih <sshih@mozilla.com>
3
Date:   Tue Sep 19 15:41:52 2017 +0800
4
5
    Bug 1375146 - Revise sending drag event. r=smaug, a=ritu
6
    
7
    --HG--
8
    extra : source : d4496b8befbf0ef5ae124a9fbda37ad5b885f9e1
9
---
10
 dom/events/EventStateManager.cpp | 7 ++++---
11
 1 file changed, 4 insertions(+), 3 deletions(-)
12
13
diff --git dom/events/EventStateManager.cpp dom/events/EventStateManager.cpp
14
index b94dc0c88e01..1f48884058de 100644
15
--- dom/events/EventStateManager.cpp
16
+++ dom/events/EventStateManager.cpp
17
@@ -1292,8 +1292,9 @@ EventStateManager::DispatchCrossProcessEvent(WidgetEvent* aEvent,
18
     return;
19
   }
20
   case eDragEventClass: {
21
-    if (remote->Manager()->IsContentParent()) {
22
-      remote->Manager()->AsContentParent()->MaybeInvokeDragSession(remote);
23
+    RefPtr<TabParent> tabParent = remote;
24
+    if (tabParent->Manager()->IsContentParent()) {
25
+      tabParent->Manager()->AsContentParent()->MaybeInvokeDragSession(tabParent);
26
     }
27
 
28
     nsCOMPtr<nsIDragSession> dragSession = nsContentUtils::GetDragSession();
29
@@ -1309,7 +1310,7 @@ EventStateManager::DispatchCrossProcessEvent(WidgetEvent* aEvent,
30
       }
31
     }
32
 
33
-    remote->SendRealDragEvent(*aEvent->AsDragEvent(), action, dropEffect);
34
+    tabParent->SendRealDragEvent(*aEvent->AsDragEvent(), action, dropEffect);
35
     return;
36
   }
37
   case ePluginEventClass: {
(-)a/www/firefox/files/patch-bug1384701 (-796 lines)
Removed Link Here
1
diff --git widget/gtk/nsLookAndFeel.cpp widget/gtk/nsLookAndFeel.cpp
2
index 6bb3e27c6653..f4c35d82200a 100644
3
--- widget/gtk/nsLookAndFeel.cpp
4
+++ widget/gtk/nsLookAndFeel.cpp
5
@@ -29,11 +29,9 @@
6
 
7
 #include "mozilla/gfx/2D.h"
8
 
9
-#if MOZ_WIDGET_GTK != 2
10
 #include <cairo-gobject.h>
11
 #include "WidgetStyleCache.h"
12
 #include "prenv.h"
13
-#endif
14
 
15
 using mozilla::LookAndFeel;
16
 
17
@@ -49,9 +47,6 @@ using mozilla::LookAndFeel;
18
 
19
 nsLookAndFeel::nsLookAndFeel()
20
     : nsXPLookAndFeel(),
21
-#if (MOZ_WIDGET_GTK == 2)
22
-      mStyle(nullptr),
23
-#endif
24
       mDefaultFontCached(false), mButtonFontCached(false),
25
       mFieldFontCached(false), mMenuFontCached(false),
26
       mInitialized(false)
27
@@ -66,12 +61,8 @@ nsLookAndFeel::NativeInit()
28
 
29
 nsLookAndFeel::~nsLookAndFeel()
30
 {
31
-#if (MOZ_WIDGET_GTK == 2)
32
-    g_object_unref(mStyle);
33
-#endif
34
 }
35
 
36
-#if MOZ_WIDGET_GTK != 2
37
 // Modifies color |*aDest| as if a pattern of color |aSource| was painted with
38
 // CAIRO_OPERATOR_OVER to a surface with color |*aDest|.
39
 static void
40
@@ -228,42 +219,19 @@ GetBorderColors(GtkStyleContext* aContext,
41
     *aDarkColor = GDK_RGBA_TO_NS_RGBA(darkColor);
42
     return ret;
43
 }
44
-#endif
45
 
46
 nsresult
47
 nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
48
 {
49
     EnsureInit();
50
 
51
-#if (MOZ_WIDGET_GTK == 3)
52
     GdkRGBA gdk_color;
53
-#endif
54
     nsresult res = NS_OK;
55
 
56
     switch (aID) {
57
         // These colors don't seem to be used for anything anymore in Mozilla
58
         // (except here at least TextSelectBackground and TextSelectForeground)
59
         // The CSS2 colors below are used.
60
-#if (MOZ_WIDGET_GTK == 2)
61
-    case eColorID_WindowBackground:
62
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
63
-        break;
64
-    case eColorID_WindowForeground:
65
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
66
-        break;
67
-    case eColorID_WidgetBackground:
68
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
69
-        break;
70
-    case eColorID_WidgetForeground:
71
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
72
-        break;
73
-    case eColorID_WidgetSelectBackground:
74
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
75
-        break;
76
-    case eColorID_WidgetSelectForeground:
77
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_SELECTED]);
78
-        break;
79
-#else
80
     case eColorID_WindowBackground:
81
     case eColorID_WidgetBackground:
82
     case eColorID_TextBackground:
83
@@ -303,35 +271,12 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
84
     case eColorID__moz_html_cellhighlighttext:
85
         aColor = sTextSelectedText;
86
         break;
87
-#endif
88
     case eColorID_Widget3DHighlight:
89
         aColor = NS_RGB(0xa0,0xa0,0xa0);
90
         break;
91
     case eColorID_Widget3DShadow:
92
         aColor = NS_RGB(0x40,0x40,0x40);
93
         break;
94
-#if (MOZ_WIDGET_GTK == 2)
95
-    case eColorID_TextBackground:
96
-        // not used?
97
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
98
-        break;
99
-    case eColorID_TextForeground: 
100
-        // not used?
101
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
102
-        break;
103
-    case eColorID_TextSelectBackground:
104
-    case eColorID_IMESelectedRawTextBackground:
105
-    case eColorID_IMESelectedConvertedTextBackground:
106
-        // still used
107
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_SELECTED]);
108
-        break;
109
-    case eColorID_TextSelectForeground:
110
-    case eColorID_IMESelectedRawTextForeground:
111
-    case eColorID_IMESelectedConvertedTextForeground:
112
-        // still used
113
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]);
114
-        break;
115
-#endif
116
     case eColorID_IMERawInputBackground:
117
     case eColorID_IMEConvertedTextBackground:
118
         aColor = NS_TRANSPARENT;
119
@@ -352,53 +297,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
120
       aColor = NS_RGB(0xff, 0, 0);
121
       break;
122
 
123
-#if (MOZ_WIDGET_GTK == 2)
124
-        // css2  http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
125
-    case eColorID_activeborder:
126
-        // active window border
127
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
128
-        break;
129
-    case eColorID_activecaption:
130
-        // active window caption background
131
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
132
-        break;
133
-    case eColorID_appworkspace:
134
-        // MDI background color
135
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
136
-        break;
137
-    case eColorID_background:
138
-        // desktop background
139
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
140
-        break;
141
-    case eColorID_captiontext:
142
-        // text in active window caption, size box, and scrollbar arrow box (!)
143
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
144
-        break;
145
-    case eColorID_graytext:
146
-        // disabled text in windows, menus, etc.
147
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
148
-        break;
149
-    case eColorID_highlight:
150
-        // background of selected item
151
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_SELECTED]);
152
-        break;
153
-    case eColorID_highlighttext:
154
-        // text of selected item
155
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]);
156
-        break;
157
-    case eColorID_inactiveborder:
158
-        // inactive window border
159
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
160
-        break;
161
-    case eColorID_inactivecaption:
162
-        // inactive window caption
163
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_INSENSITIVE]);
164
-        break;
165
-    case eColorID_inactivecaptiontext:
166
-        // text in inactive window caption
167
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
168
-        break;
169
-#else
170
         // css2  http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
171
     case eColorID_activeborder: {
172
         // active window border
173
@@ -433,7 +331,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
174
         ReleaseStyleContext(style);
175
         break;
176
     }
177
-#endif
178
     case eColorID_infobackground:
179
         // tooltip background color
180
         aColor = sInfoBackground;
181
@@ -452,11 +349,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
182
         break;
183
     case eColorID_scrollbar:
184
         // scrollbar gray area
185
-#if (MOZ_WIDGET_GTK == 2)
186
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_ACTIVE]);
187
-#else
188
         aColor = sMozScrollbar;
189
-#endif
190
         break;
191
 
192
     case eColorID_threedlightshadow:
193
@@ -465,11 +358,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
194
     case eColorID_threedface:
195
     case eColorID_buttonface:
196
         // 3-D face color
197
-#if (MOZ_WIDGET_GTK == 3)
198
         aColor = sMozWindowBackground;
199
-#else
200
-        aColor = sButtonBackground;
201
-#endif
202
         break;
203
 
204
     case eColorID_buttontext:
205
@@ -491,56 +380,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
206
         aColor = sFrameInnerDarkBorder;
207
         break;
208
 
209
-#if (MOZ_WIDGET_GTK == 2)
210
-    case eColorID_threeddarkshadow:
211
-        // 3-D shadow outer edge color
212
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->black);
213
-        break;
214
-
215
-    case eColorID_window:
216
-    case eColorID_windowframe:
217
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
218
-        break;
219
-
220
-    case eColorID_windowtext:
221
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
222
-        break;
223
-
224
-    case eColorID__moz_eventreerow:
225
-    case eColorID__moz_field:
226
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
227
-        break;
228
-    case eColorID__moz_fieldtext:
229
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
230
-        break;
231
-    case eColorID__moz_dialog:
232
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
233
-        break;
234
-    case eColorID__moz_dialogtext:
235
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
236
-        break;
237
-    case eColorID__moz_dragtargetzone:
238
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
239
-        break; 
240
-    case eColorID__moz_buttondefault:
241
-        // default button border color
242
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->black);
243
-        break;
244
-    case eColorID__moz_buttonhoverface:
245
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_PRELIGHT]);
246
-        break;
247
-    case eColorID__moz_buttonhovertext:
248
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_PRELIGHT]);
249
-        break;
250
-    case eColorID__moz_cellhighlight:
251
-    case eColorID__moz_html_cellhighlight:
252
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_ACTIVE]);
253
-        break;
254
-    case eColorID__moz_cellhighlighttext:
255
-    case eColorID__moz_html_cellhighlighttext:
256
-        aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_ACTIVE]);
257
-        break;
258
-#else
259
     case eColorID_threeddarkshadow:
260
         // Hardcode to black
261
         aColor = NS_RGB(0x00,0x00,0x00);
262
@@ -574,7 +413,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
263
     case eColorID__moz_buttonhovertext:
264
         aColor = sButtonHoverText;
265
         break;
266
-#endif
267
     case eColorID__moz_menuhover:
268
         aColor = sMenuHover;
269
         break;
270
@@ -590,11 +428,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
271
     case eColorID__moz_comboboxtext:
272
         aColor = sComboBoxText;
273
         break;
274
-#if (MOZ_WIDGET_GTK == 2)
275
-    case eColorID__moz_combobox:
276
-        aColor = sComboBoxBackground;
277
-        break;
278
-#endif
279
     case eColorID__moz_menubartext:
280
         aColor = sMenuBarText;
281
         break;
282
@@ -602,11 +435,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
283
         aColor = sMenuBarHoverText;
284
         break;
285
     case eColorID__moz_gtk_info_bar_text:
286
-#if (MOZ_WIDGET_GTK == 3)
287
         aColor = sInfoBarText;
288
-#else
289
-        aColor = sInfoText;
290
-#endif
291
         break;
292
     default:
293
         /* default color is BLACK */
294
@@ -618,27 +447,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
295
     return res;
296
 }
297
 
298
-#if (MOZ_WIDGET_GTK == 2)
299
-static void darken_gdk_color(GdkColor *src, GdkColor *dest)
300
-{
301
-    gdouble red;
302
-    gdouble green;
303
-    gdouble blue;
304
-
305
-    red = (gdouble) src->red / 65535.0;
306
-    green = (gdouble) src->green / 65535.0;
307
-    blue = (gdouble) src->blue / 65535.0;
308
-
309
-    red *= 0.93;
310
-    green *= 0.93;
311
-    blue *= 0.93;
312
-
313
-    dest->red = red * 65535.0;
314
-    dest->green = green * 65535.0;
315
-    dest->blue = blue * 65535.0;
316
-}
317
-#endif
318
-
319
 static int32_t CheckWidgetStyle(GtkWidget* aWidget, const char* aStyle, int32_t aResult) {
320
     gboolean value = FALSE;
321
     gtk_widget_style_get(aWidget, aStyle, &value, nullptr);
322
@@ -826,14 +634,8 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
323
         res = NS_ERROR_NOT_IMPLEMENTED;
324
         break;
325
     case eIntID_TouchEnabled:
326
-#if MOZ_WIDGET_GTK == 3
327
         aResult = mozilla::widget::WidgetUtils::IsTouchDeviceSupportPresent();
328
         break;
329
-#else
330
-        aResult = 0;
331
-        res = NS_ERROR_NOT_IMPLEMENTED;
332
-#endif
333
-        break;
334
     case eIntID_MacGraphiteTheme:
335
         aResult = 0;
336
         res = NS_ERROR_NOT_IMPLEMENTED;
337
@@ -905,24 +707,20 @@ nsLookAndFeel::GetFloatImpl(FloatID aID, float &aResult)
338
 }
339
 
340
 static void
341
-GetSystemFontInfo(GtkWidget *aWidget,
342
+GetSystemFontInfo(GtkStyleContext *aStyle,
343
                   nsString *aFontName,
344
                   gfxFontStyle *aFontStyle)
345
 {
346
-    GtkSettings *settings = gtk_widget_get_settings(aWidget);
347
-
348
     aFontStyle->style       = NS_FONT_STYLE_NORMAL;
349
 
350
-    gchar *fontname;
351
-    g_object_get(settings, "gtk-font-name", &fontname, nullptr);
352
-
353
+    // As in
354
+    // https://git.gnome.org/browse/gtk+/tree/gtk/gtkwidget.c?h=3.22.19#n10333
355
     PangoFontDescription *desc;
356
-    desc = pango_font_description_from_string(fontname);
357
+    gtk_style_context_get(aStyle, gtk_style_context_get_state(aStyle),
358
+                          "font", &desc, nullptr);
359
 
360
     aFontStyle->systemFont = true;
361
 
362
-    g_free(fontname);
363
-
364
     NS_NAMED_LITERAL_STRING(quote, "\"");
365
     NS_ConvertUTF8toUTF16 family(pango_font_description_get_family(desc));
366
     *aFontName = quote + family + quote;
367
@@ -953,96 +751,28 @@ GetSystemFontInfo(GtkWidget *aWidget,
368
     pango_font_description_free(desc);
369
 }
370
 
371
-static void
372
-GetSystemFontInfo(LookAndFeel::FontID aID,
373
-                  nsString *aFontName,
374
-                  gfxFontStyle *aFontStyle)
375
-{
376
-    if (aID == LookAndFeel::eFont_Widget) {
377
-        GtkWidget *label = gtk_label_new("M");
378
-        GtkWidget *parent = gtk_fixed_new();
379
-        GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
380
-
381
-        gtk_container_add(GTK_CONTAINER(parent), label);
382
-        gtk_container_add(GTK_CONTAINER(window), parent);
383
-
384
-        gtk_widget_ensure_style(label);
385
-        GetSystemFontInfo(label, aFontName, aFontStyle);
386
-        gtk_widget_destroy(window);  // no unref, windows are different
387
-
388
-    } else if (aID == LookAndFeel::eFont_Button) {
389
-        GtkWidget *label = gtk_label_new("M");
390
-        GtkWidget *parent = gtk_fixed_new();
391
-        GtkWidget *button = gtk_button_new();
392
-        GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
393
-
394
-        gtk_container_add(GTK_CONTAINER(button), label);
395
-        gtk_container_add(GTK_CONTAINER(parent), button);
396
-        gtk_container_add(GTK_CONTAINER(window), parent);
397
-
398
-        gtk_widget_ensure_style(label);
399
-        GetSystemFontInfo(label, aFontName, aFontStyle);
400
-        gtk_widget_destroy(window);  // no unref, windows are different
401
-
402
-    } else if (aID == LookAndFeel::eFont_Field) {
403
-        GtkWidget *entry = gtk_entry_new();
404
-        GtkWidget *parent = gtk_fixed_new();
405
-        GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
406
-
407
-        gtk_container_add(GTK_CONTAINER(parent), entry);
408
-        gtk_container_add(GTK_CONTAINER(window), parent);
409
-
410
-        gtk_widget_ensure_style(entry);
411
-        GetSystemFontInfo(entry, aFontName, aFontStyle);
412
-        gtk_widget_destroy(window);  // no unref, windows are different
413
-
414
-    } else {
415
-        MOZ_ASSERT(aID == LookAndFeel::eFont_Menu, "unexpected font ID");
416
-        GtkWidget *accel_label = gtk_accel_label_new("M");
417
-        GtkWidget *menuitem = gtk_menu_item_new();
418
-        GtkWidget *menu = gtk_menu_new();
419
-        g_object_ref_sink(menu);
420
-
421
-        gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
422
-        gtk_menu_shell_append((GtkMenuShell *)GTK_MENU(menu), menuitem);
423
-
424
-        gtk_widget_ensure_style(accel_label);
425
-        GetSystemFontInfo(accel_label, aFontName, aFontStyle);
426
-        g_object_unref(menu);
427
-    }
428
-}
429
-
430
 bool
431
 nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
432
                            gfxFontStyle& aFontStyle,
433
                            float aDevPixPerCSSPixel)
434
 {
435
-  nsString *cachedFontName = nullptr;
436
-  gfxFontStyle *cachedFontStyle = nullptr;
437
-  bool *isCached = nullptr;
438
-
439
   switch (aID) {
440
     case eFont_Menu:         // css2
441
     case eFont_PullDownMenu: // css3
442
-      cachedFontName = &mMenuFontName;
443
-      cachedFontStyle = &mMenuFontStyle;
444
-      isCached = &mMenuFontCached;
445
-      aID = eFont_Menu;
446
-      break;
447
+      aFontName = mMenuFontName;
448
+      aFontStyle = mMenuFontStyle;
449
+      return true;
450
 
451
     case eFont_Field:        // css3
452
     case eFont_List:         // css3
453
-      cachedFontName = &mFieldFontName;
454
-      cachedFontStyle = &mFieldFontStyle;
455
-      isCached = &mFieldFontCached;
456
-      aID = eFont_Field;
457
-      break;
458
+      aFontName = mFieldFontName;
459
+      aFontStyle = mFieldFontStyle;
460
+      return true;
461
 
462
     case eFont_Button:       // css3
463
-      cachedFontName = &mButtonFontName;
464
-      cachedFontStyle = &mButtonFontStyle;
465
-      isCached = &mButtonFontCached;
466
-      break;
467
+      aFontName = mButtonFontName;
468
+      aFontStyle = mButtonFontStyle;
469
+      return true;
470
 
471
     case eFont_Caption:      // css2
472
     case eFont_Icon:         // css2
473
@@ -1057,21 +787,11 @@ nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
474
     case eFont_Dialog:       // css3
475
     case eFont_Tooltips:     // moz
476
     case eFont_Widget:       // moz
477
-      cachedFontName = &mDefaultFontName;
478
-      cachedFontStyle = &mDefaultFontStyle;
479
-      isCached = &mDefaultFontCached;
480
-      aID = eFont_Widget;
481
-      break;
482
-  }
483
-
484
-  if (!*isCached) {
485
-    GetSystemFontInfo(aID, cachedFontName, cachedFontStyle);
486
-    *isCached = true;
487
+    default:
488
+      aFontName = mDefaultFontName;
489
+      aFontStyle = mDefaultFontStyle;
490
+      return true;
491
   }
492
-
493
-  aFontName = *cachedFontName;
494
-  aFontStyle = *cachedFontStyle;
495
-  return true;
496
 }
497
 
498
 void
499
@@ -1087,70 +807,6 @@ nsLookAndFeel::EnsureInit()
500
     // gtk does non threadsafe refcounting
501
     MOZ_ASSERT(NS_IsMainThread());
502
 
503
-#if (MOZ_WIDGET_GTK == 2)
504
-    NS_ASSERTION(!mStyle, "already initialized");
505
-    // GtkInvisibles come with a refcount that is not floating
506
-    // (since their initialization code calls g_object_ref_sink) and
507
-    // their destroy code releases that reference (which means they
508
-    // have to be explicitly destroyed, since calling unref enough
509
-    // to cause destruction would lead to *another* unref).
510
-    // However, this combination means that it's actually still ok
511
-    // to use the normal pattern, which is to g_object_ref_sink
512
-    // after construction, and then destroy *and* unref when we're
513
-    // done.  (Though we could skip the g_object_ref_sink and the
514
-    // corresponding g_object_unref, but that's particular to
515
-    // GtkInvisibles and GtkWindows.)
516
-    GtkWidget *widget = gtk_invisible_new();
517
-    g_object_ref_sink(widget); // effectively g_object_ref (see above)
518
-
519
-    gtk_widget_ensure_style(widget);
520
-    mStyle = gtk_style_copy(gtk_widget_get_style(widget));
521
-
522
-    gtk_widget_destroy(widget);
523
-    g_object_unref(widget);
524
-        
525
-    // tooltip foreground and background
526
-    GtkStyle *style = gtk_rc_get_style_by_paths(gtk_settings_get_default(),
527
-                                                "gtk-tooltips", "GtkWindow",
528
-                                                GTK_TYPE_WINDOW);
529
-    if (style) {
530
-        sInfoBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
531
-        sInfoText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
532
-    }
533
-
534
-    // menu foreground & menu background
535
-    GtkWidget *accel_label = gtk_accel_label_new("M");
536
-    GtkWidget *menuitem = gtk_menu_item_new();
537
-    GtkWidget *menu = gtk_menu_new();
538
-
539
-    g_object_ref_sink(menu);
540
-
541
-    gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
542
-    gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
543
-
544
-    gtk_widget_set_style(accel_label, nullptr);
545
-    gtk_widget_set_style(menu, nullptr);
546
-    gtk_widget_realize(menu);
547
-    gtk_widget_realize(accel_label);
548
-
549
-    style = gtk_widget_get_style(accel_label);
550
-    if (style) {
551
-        sMenuText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
552
-    }
553
-
554
-    style = gtk_widget_get_style(menu);
555
-    if (style) {
556
-        sMenuBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
557
-    }
558
-    
559
-    style = gtk_widget_get_style(menuitem);
560
-    if (style) {
561
-        sMenuHover = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_PRELIGHT]);
562
-        sMenuHoverText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_PRELIGHT]);
563
-    }
564
-
565
-    g_object_unref(menu);
566
-#else
567
     GdkRGBA color;
568
     GtkStyleContext *style;
569
 
570
@@ -1195,6 +851,12 @@ nsLookAndFeel::EnsureInit()
571
         }
572
     }
573
 
574
+    // The label is not added to a parent widget, but shared for constructing
575
+    // different style contexts.  The node hierarchy is constructed only on
576
+    // the label style context.
577
+    GtkWidget *labelWidget = gtk_label_new("M");
578
+    g_object_ref_sink(labelWidget);
579
+
580
     // Scrollbar colors
581
     style = ClaimStyleContext(MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL);
582
     gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
583
@@ -1208,6 +870,13 @@ nsLookAndFeel::EnsureInit()
584
     gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
585
     sMozWindowText = GDK_RGBA_TO_NS_RGBA(color);
586
     ReleaseStyleContext(style);
587
+    style = ClaimStyleContext(MOZ_GTK_WINDOW_CONTAINER);
588
+    {
589
+        GtkStyleContext* labelStyle = CreateStyleForWidget(labelWidget, style);
590
+        GetSystemFontInfo(labelStyle, &mDefaultFontName, &mDefaultFontStyle);
591
+        g_object_unref(labelStyle);
592
+    }
593
+    ReleaseStyleContext(style);
594
 
595
     // tooltip foreground and background
596
     style = ClaimStyleContext(MOZ_GTK_TOOLTIP);
597
@@ -1224,6 +893,9 @@ nsLookAndFeel::EnsureInit()
598
     {
599
         GtkStyleContext* accelStyle =
600
             CreateStyleForWidget(gtk_accel_label_new("M"), style);
601
+
602
+        GetSystemFontInfo(accelStyle, &mMenuFontName, &mMenuFontStyle);
603
+
604
         gtk_style_context_get_color(accelStyle, GTK_STATE_FLAG_NORMAL, &color);
605
         sMenuText = GDK_RGBA_TO_NS_RGBA(color);
606
         gtk_style_context_get_color(accelStyle, GTK_STATE_FLAG_INSENSITIVE, &color);
607
@@ -1243,17 +915,8 @@ nsLookAndFeel::EnsureInit()
608
     gtk_style_context_get_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
609
     sMenuHoverText = GDK_RGBA_TO_NS_RGBA(color);
610
     ReleaseStyleContext(style);
611
-#endif
612
 
613
-    // button styles
614
     GtkWidget *parent = gtk_fixed_new();
615
-    GtkWidget *button = gtk_button_new();
616
-    GtkWidget *label = gtk_label_new("M");
617
-#if (MOZ_WIDGET_GTK == 2)
618
-    GtkWidget *combobox = gtk_combo_box_new();
619
-    GtkWidget *comboboxLabel = gtk_label_new("M");
620
-    gtk_container_add(GTK_CONTAINER(combobox), comboboxLabel);
621
-#endif
622
     GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
623
     GtkWidget *treeView = gtk_tree_view_new();
624
     GtkWidget *linkButton = gtk_link_button_new("http://example.com/");
625
@@ -1262,94 +925,14 @@ nsLookAndFeel::EnsureInit()
626
     GtkWidget *entry = gtk_entry_new();
627
     GtkWidget *textView = gtk_text_view_new();
628
 
629
-    gtk_container_add(GTK_CONTAINER(button), label);
630
-    gtk_container_add(GTK_CONTAINER(parent), button);
631
     gtk_container_add(GTK_CONTAINER(parent), treeView);
632
     gtk_container_add(GTK_CONTAINER(parent), linkButton);
633
-#if (MOZ_WIDGET_GTK == 2)
634
-    gtk_container_add(GTK_CONTAINER(parent), combobox);
635
-#endif
636
     gtk_container_add(GTK_CONTAINER(parent), menuBar);
637
     gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), menuBarItem);
638
     gtk_container_add(GTK_CONTAINER(window), parent);
639
     gtk_container_add(GTK_CONTAINER(parent), entry);
640
     gtk_container_add(GTK_CONTAINER(parent), textView);
641
     
642
-#if (MOZ_WIDGET_GTK == 2)
643
-    gtk_widget_set_style(button, nullptr);
644
-    gtk_widget_set_style(label, nullptr);
645
-    gtk_widget_set_style(treeView, nullptr);
646
-    gtk_widget_set_style(linkButton, nullptr);
647
-    gtk_widget_set_style(combobox, nullptr);
648
-    gtk_widget_set_style(comboboxLabel, nullptr);
649
-    gtk_widget_set_style(menuBar, nullptr);
650
-    gtk_widget_set_style(entry, nullptr);
651
-
652
-    gtk_widget_realize(button);
653
-    gtk_widget_realize(label);
654
-    gtk_widget_realize(treeView);
655
-    gtk_widget_realize(linkButton);
656
-    gtk_widget_realize(combobox);
657
-    gtk_widget_realize(comboboxLabel);
658
-    gtk_widget_realize(menuBar);
659
-    gtk_widget_realize(entry);
660
-
661
-    style = gtk_widget_get_style(label);
662
-    if (style) {
663
-        sButtonText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
664
-    }
665
-
666
-    style = gtk_widget_get_style(comboboxLabel);
667
-    if (style) {
668
-        sComboBoxText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
669
-    }
670
-    style = gtk_widget_get_style(combobox);
671
-    if (style) {
672
-        sComboBoxBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
673
-    }
674
-
675
-    style = gtk_widget_get_style(menuBar);
676
-    if (style) {
677
-        sMenuBarText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
678
-        sMenuBarHoverText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_SELECTED]);
679
-    }
680
-
681
-    // GTK's guide to fancy odd row background colors:
682
-    // 1) Check if a theme explicitly defines an odd row color
683
-    // 2) If not, check if it defines an even row color, and darken it
684
-    //    slightly by a hardcoded value (gtkstyle.c)
685
-    // 3) If neither are defined, take the base background color and
686
-    //    darken that by a hardcoded value
687
-    colorValuePtr = nullptr;
688
-    gtk_widget_style_get(treeView,
689
-                         "odd-row-color", &colorValuePtr,
690
-                         nullptr);
691
-
692
-    if (colorValuePtr) {
693
-        colorValue = *colorValuePtr;
694
-    } else {
695
-        gtk_widget_style_get(treeView,
696
-                             "even-row-color", &colorValuePtr,
697
-                             nullptr);
698
-        if (colorValuePtr)
699
-            darken_gdk_color(colorValuePtr, &colorValue);
700
-        else
701
-            darken_gdk_color(&treeView->style->base[GTK_STATE_NORMAL], &colorValue);
702
-    }
703
-
704
-    sOddCellBackground = GDK_COLOR_TO_NS_RGB(colorValue);
705
-    if (colorValuePtr)
706
-        gdk_color_free(colorValuePtr);
707
-
708
-    style = gtk_widget_get_style(button);
709
-    if (style) {
710
-        sButtonBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
711
-        sFrameOuterLightBorder =
712
-            GDK_COLOR_TO_NS_RGB(style->light[GTK_STATE_NORMAL]);
713
-        sFrameInnerDarkBorder =
714
-            GDK_COLOR_TO_NS_RGB(style->dark[GTK_STATE_NORMAL]);
715
-    }
716
-#else
717
     // Text colors
718
     GdkRGBA bgColor;
719
     // If the text window background is translucent, then the background of
720
@@ -1381,8 +964,10 @@ nsLookAndFeel::EnsureInit()
721
     // Button text color
722
     style = ClaimStyleContext(MOZ_GTK_BUTTON);
723
     {
724
-        GtkStyleContext* labelStyle =
725
-            CreateStyleForWidget(gtk_label_new("M"), style);
726
+        GtkStyleContext* labelStyle = CreateStyleForWidget(labelWidget, style);
727
+
728
+        GetSystemFontInfo(labelStyle, &mButtonFontName, &mButtonFontStyle);
729
+
730
         gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_NORMAL, &color);
731
         sButtonText = GDK_RGBA_TO_NS_RGBA(color);
732
         gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_PRELIGHT, &color);
733
@@ -1446,7 +1031,6 @@ nsLookAndFeel::EnsureInit()
734
     gtk_style_context_add_class(style, GTK_STYLE_CLASS_INFO);
735
     gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
736
     sInfoBarText = GDK_RGBA_TO_NS_RGBA(color);
737
-#endif
738
     // Some themes have a unified menu bar, and support window dragging on it
739
     gboolean supports_menubar_drag = FALSE;
740
     GParamSpec *param_spec =
741
@@ -1493,7 +1074,11 @@ nsLookAndFeel::EnsureInit()
742
                          "cursor-aspect-ratio", &sCaretRatio,
743
                          nullptr);
744
 
745
+    GetSystemFontInfo(gtk_widget_get_style_context(entry),
746
+                      &mFieldFontName, &mFieldFontStyle);
747
+
748
     gtk_widget_destroy(window);
749
+    g_object_unref(labelWidget);
750
 }
751
 
752
 // virtual
753
@@ -1515,11 +1100,6 @@ nsLookAndFeel::RefreshImpl()
754
     mFieldFontCached = false;
755
     mMenuFontCached = false;
756
 
757
-#if (MOZ_WIDGET_GTK == 2)
758
-    g_object_unref(mStyle);
759
-    mStyle = nullptr;
760
-#endif
761
-
762
     mInitialized = false;
763
 }
764
 
765
diff --git widget/gtk/nsLookAndFeel.h widget/gtk/nsLookAndFeel.h
766
index 9a4015e95415..38cd51c056d6 100644
767
--- widget/gtk/nsLookAndFeel.h
768
+++ widget/gtk/nsLookAndFeel.h
769
@@ -33,9 +33,6 @@ public:
770
     virtual bool GetEchoPasswordImpl();
771
 
772
 protected:
773
-#if (MOZ_WIDGET_GTK == 2)
774
-    struct _GtkStyle *mStyle;
775
-#endif
776
 
777
     // Cached fonts
778
     bool mDefaultFontCached;
779
@@ -63,7 +60,6 @@ protected:
780
     nscolor sMenuHoverText;
781
     nscolor sButtonText;
782
     nscolor sButtonHoverText;
783
-    nscolor sButtonBackground;
784
     nscolor sFrameOuterLightBorder;
785
     nscolor sFrameInnerDarkBorder;
786
     nscolor sOddCellBackground;
787
@@ -77,9 +73,7 @@ protected:
788
     nscolor sTextSelectedText;
789
     nscolor sTextSelectedBackground;
790
     nscolor sMozScrollbar;
791
-#if (MOZ_WIDGET_GTK == 3)
792
     nscolor sInfoBarText;
793
-#endif
794
     char16_t sInvisibleCharacter;
795
     float   sCaretRatio;
796
     bool    sMenuSupportsDrag;
(-)a/www/firefox/files/patch-bug1386887 (-89 lines)
Removed Link Here
1
commit efbe3a9af876
2
Author: Manish Goregaokar <manishearth@gmail.com>
3
Date:   Wed Aug 2 11:24:35 2017 -0700
4
5
    Bug 1386887 - Clean up FFI lifetimes to work on nightly; r=emilio
6
    
7
    MozReview-Commit-ID: 5WAIVd6p2du
8
---
9
 layout/style/ServoBindingList.h  | 4 ++--
10
 layout/style/ServoBindingTypes.h | 2 ++
11
 layout/style/ServoBindings.h     | 4 ++--
12
 layout/style/ServoBindings.toml  | 4 +++-
13
 4 files changed, 9 insertions(+), 5 deletions(-)
14
15
diff --git layout/style/ServoBindingList.h layout/style/ServoBindingList.h
16
index 6c669ebb3d3e..87ade14ea4de 100644
17
--- layout/style/ServoBindingList.h
18
+++ layout/style/ServoBindingList.h
19
@@ -379,10 +379,10 @@ SERVO_BINDING_FUNC(Servo_DeclarationBlock_HasCSSWideKeyword, bool,
20
                    nsCSSPropertyID property)
21
 // Compose animation value for a given property.
22
 // |base_values| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
23
-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
24
+// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
25
 SERVO_BINDING_FUNC(Servo_AnimationCompose, void,
26
                    RawServoAnimationValueMapBorrowedMut animation_values,
27
-                   void* base_values,
28
+                   RawServoAnimationValueTableBorrowed base_values,
29
                    nsCSSPropertyID property,
30
                    RawGeckoAnimationPropertySegmentBorrowed animation_segment,
31
                    RawGeckoAnimationPropertySegmentBorrowed last_segment,
32
diff --git layout/style/ServoBindingTypes.h layout/style/ServoBindingTypes.h
33
index aaf4fc27e1b9..69be15ee9f51 100644
34
--- layout/style/ServoBindingTypes.h
35
+++ layout/style/ServoBindingTypes.h
36
@@ -54,6 +54,8 @@ class nsXBLBinding;
37
 using mozilla::dom::StyleChildrenIterator;
38
 using mozilla::ServoElementSnapshot;
39
 
40
+typedef void* RawServoAnimationValueTableBorrowed;
41
+
42
 typedef nsINode RawGeckoNode;
43
 typedef mozilla::dom::Element RawGeckoElement;
44
 typedef nsIDocument RawGeckoDocument;
45
diff --git layout/style/ServoBindings.h layout/style/ServoBindings.h
46
index 493ca63f932b..c6ced6d1fedb 100644
47
--- layout/style/ServoBindings.h
48
+++ layout/style/ServoBindings.h
49
@@ -268,9 +268,9 @@ double Gecko_GetPositionInSegment(
50
 // Get servo's AnimationValue for |aProperty| from the cached base style
51
 // |aBaseStyles|.
52
 // |aBaseStyles| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
53
-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
54
+// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
55
 RawServoAnimationValueBorrowedOrNull Gecko_AnimationGetBaseStyle(
56
-  void* aBaseStyles,
57
+  RawServoAnimationValueTableBorrowed aBaseStyles,
58
   nsCSSPropertyID aProperty);
59
 void Gecko_StyleTransition_SetUnsupportedProperty(
60
   mozilla::StyleTransition* aTransition,
61
diff --git layout/style/ServoBindings.toml layout/style/ServoBindings.toml
62
index 11e372541235..3c3902beea80 100644
63
--- layout/style/ServoBindings.toml
64
+++ layout/style/ServoBindings.toml
65
@@ -357,6 +357,7 @@ raw-lines = [
66
     "pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;",
67
     "pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;",
68
     "pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;",
69
+    "pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();"
70
 ]
71
 whitelist-functions = ["Servo_.*", "Gecko_.*"]
72
 structs-types = [
73
@@ -389,7 +390,7 @@ structs-types = [
74
     "RawGeckoPresContext",
75
     "RawGeckoPresContextOwned",
76
     "RawGeckoStyleAnimationList",
77
-    "RawGeckoStyleChildrenIteratorBorrowedMut",
78
+    "RawGeckoStyleChildrenIterator",
79
     "RawGeckoServoStyleRuleList",
80
     "RawGeckoURLExtraData",
81
     "RawGeckoXBLBinding",
82
@@ -526,6 +527,7 @@ servo-borrow-types = [
83
     "RawGeckoFontFaceRuleList",
84
     "RawGeckoServoStyleRuleList",
85
     "RawGeckoServoAnimationValueList",
86
+    "RawGeckoStyleChildrenIterator",
87
 ]
88
 fixups = [
89
     # hack for gecko-owned string
(-)a/www/firefox/files/patch-bug1386957 (-14 lines)
Removed Link Here
1
https://github.com/kinetiknz/cubeb/commit/16f9ccc064f2
2
3
--- media/libcubeb/src/cubeb_jack.cpp.orig	2017-07-07 05:37:16 UTC
4
+++ media/libcubeb/src/cubeb_jack.cpp
5
@@ -8,7 +8,9 @@
6
  */
7
 #define _DEFAULT_SOURCE
8
 #define _BSD_SOURCE
9
+#ifndef __FreeBSD__
10
 #define _POSIX_SOURCE
11
+#endif
12
 #include <dlfcn.h>
13
 #include <stdio.h>
14
 #include <string.h>
(-)a/www/firefox/files/patch-bug1387799 (-49 lines)
Removed Link Here
1
commit e1c252eab1f4
2
Author: Milan Sreckovic <milan@mozilla.com>
3
Date:   Mon Oct 23 16:22:47 2017 -0400
4
5
    Bug 1387799 - Keep an extra reference. r=jrmuizel, a=ritu
6
    
7
    --HG--
8
    extra : source : 8199078921c6b4c0ee4c984100d33750dfe8e144
9
---
10
 gfx/layers/ipc/CompositorBridgeChild.cpp | 11 ++++++++---
11
 1 file changed, 8 insertions(+), 3 deletions(-)
12
13
diff --git gfx/layers/ipc/CompositorBridgeChild.cpp gfx/layers/ipc/CompositorBridgeChild.cpp
14
index 9419f4b2da36..55fd9c10871b 100644
15
--- gfx/layers/ipc/CompositorBridgeChild.cpp
16
+++ gfx/layers/ipc/CompositorBridgeChild.cpp
17
@@ -523,10 +523,14 @@ CompositorBridgeChild::RecvHideAllPlugins(const uintptr_t& aParentWidget)
18
 }
19
 
20
 mozilla::ipc::IPCResult
21
-CompositorBridgeChild::RecvDidComposite(const uint64_t& aId, const uint64_t& aTransactionId,
22
+CompositorBridgeChild::RecvDidComposite(const uint64_t& aId,
23
+                                        const uint64_t& aTransactionId,
24
                                         const TimeStamp& aCompositeStart,
25
                                         const TimeStamp& aCompositeEnd)
26
 {
27
+  // Hold a reference to keep texture pools alive.  See bug 1387799
28
+  AutoTArray<RefPtr<TextureClientPool>,2> texturePools = mTexturePools;
29
+
30
   if (mLayerManager) {
31
     MOZ_ASSERT(aId == 0);
32
     MOZ_ASSERT(mLayerManager->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
33
@@ -541,13 +545,14 @@ CompositorBridgeChild::RecvDidComposite(const uint64_t& aId, const uint64_t& aTr
34
     }
35
   }
36
 
37
-  for (size_t i = 0; i < mTexturePools.Length(); i++) {
38
-    mTexturePools[i]->ReturnDeferredClients();
39
+  for (size_t i = 0; i < texturePools.Length(); i++) {
40
+    texturePools[i]->ReturnDeferredClients();
41
   }
42
 
43
   return IPC_OK();
44
 }
45
 
46
+
47
 void
48
 CompositorBridgeChild::ActorDestroy(ActorDestroyReason aWhy)
49
 {
(-)a/www/firefox/files/patch-bug1393283 (-144 lines)
Removed Link Here
1
commit d20c7d929c84
2
Author: Ethan <ettseng@mozilla.com>
3
Date:   Fri Sep 1 17:29:44 2017 +0800
4
5
    Bug 1393283 - Use the last ESR version as the spoofed Firefox version. r=tihuang, r=mcmanus
6
---
7
 .../test/browser/browser_navigator.js              |  2 +-
8
 netwerk/protocol/http/nsHttpHandler.cpp            | 16 +++----
9
 .../resistfingerprinting/nsRFPService.cpp          | 56 ++++++++++++++++++++++
10
 .../components/resistfingerprinting/nsRFPService.h |  3 ++
11
 4 files changed, 66 insertions(+), 11 deletions(-)
12
13
diff --git browser/components/resistfingerprinting/test/browser/browser_navigator.js browser/components/resistfingerprinting/test/browser/browser_navigator.js
14
index 25c393d8bb2a..9f52e34a9451 100644
15
--- browser/components/resistfingerprinting/test/browser/browser_navigator.js
16
+++ browser/components/resistfingerprinting/test/browser/browser_navigator.js
17
@@ -91,7 +91,7 @@ add_task(async function setup() {
18
 
19
   let appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
20
   let appVersion = parseInt(appInfo.version);
21
-  let spoofedVersion = appVersion - (appVersion % 10);
22
+  let spoofedVersion = appVersion - ((appVersion - 3) % 7);
23
   spoofedUserAgent = `Mozilla/5.0 (${SPOOFED_OSCPU}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
24
 });
25
 
26
diff --git netwerk/protocol/http/nsHttpHandler.cpp netwerk/protocol/http/nsHttpHandler.cpp
27
index 31d0f8832732..b957d835b52f 100644
28
--- netwerk/protocol/http/nsHttpHandler.cpp
29
+++ netwerk/protocol/http/nsHttpHandler.cpp
30
@@ -461,16 +461,12 @@ nsHttpHandler::Init()
31
         mAppVersion.AssignLiteral(MOZ_APP_UA_VERSION);
32
     }
33
 
34
-    // Generating the spoofed userAgent for fingerprinting resistance.
35
-    // The browser version will be rounded down to a multiple of 10.
36
-    // By doing so, the anonymity group will cover more versions instead of one
37
-    // version.
38
-    uint32_t spoofedVersion = mAppVersion.ToInteger(&rv);
39
-    if (NS_SUCCEEDED(rv)) {
40
-        spoofedVersion = spoofedVersion - (spoofedVersion % 10);
41
-        mSpoofedUserAgent.Assign(nsPrintfCString(
42
-            "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
43
-            SPOOFED_OSCPU, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
44
+    // Generating the spoofed User Agent for fingerprinting resistance.
45
+    rv = nsRFPService::GetSpoofedUserAgent(mSpoofedUserAgent);
46
+    if (NS_FAILED(rv)) {
47
+      // Empty mSpoofedUserAgent to make sure the unsuccessful spoofed UA string
48
+      // will not be used anywhere.
49
+      mSpoofedUserAgent.Truncate();
50
     }
51
 
52
     mSessionStartTime = NowInSeconds();
53
diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp
54
index 94554200c3b8..96a2940c04a0 100644
55
--- toolkit/components/resistfingerprinting/nsRFPService.cpp
56
+++ toolkit/components/resistfingerprinting/nsRFPService.cpp
57
@@ -18,10 +18,13 @@
58
 #include "nsServiceManagerUtils.h"
59
 #include "nsString.h"
60
 #include "nsXULAppAPI.h"
61
+#include "nsPrintfCString.h"
62
 
63
 #include "nsIObserverService.h"
64
 #include "nsIPrefBranch.h"
65
 #include "nsIPrefService.h"
66
+#include "nsIXULAppInfo.h"
67
+#include "nsIXULRuntime.h"
68
 #include "nsJSUtils.h"
69
 
70
 #include "prenv.h"
71
@@ -162,6 +165,59 @@ nsRFPService::GetSpoofedPresentedFrames(double aTime, uint32_t aWidth, uint32_t
72
   return NSToIntFloor(time * sVideoFramesPerSec * ((100 - boundedDroppedRatio) / 100.0));
73
 }
74
 
75
+/* static */
76
+nsresult
77
+nsRFPService::GetSpoofedUserAgent(nsACString &userAgent)
78
+{
79
+  // This function generates the spoofed value of User Agent.
80
+  // We spoof the values of the platform and Firefox version, which could be
81
+  // used as fingerprinting sources to identify individuals.
82
+  // Reference of the format of User Agent:
83
+  // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/userAgent
84
+  // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
85
+
86
+  nsresult rv;
87
+  nsCOMPtr<nsIXULAppInfo> appInfo =
88
+    do_GetService("@mozilla.org/xre/app-info;1", &rv);
89
+  NS_ENSURE_SUCCESS(rv, rv);
90
+
91
+  nsAutoCString appVersion;
92
+  rv = appInfo->GetVersion(appVersion);
93
+  NS_ENSURE_SUCCESS(rv, rv);
94
+
95
+  // The browser version will be spoofed as the last ESR version.
96
+  // By doing so, the anonymity group will cover more versions instead of one
97
+  // version.
98
+  uint32_t firefoxVersion = appVersion.ToInteger(&rv);
99
+  NS_ENSURE_SUCCESS(rv, rv);
100
+
101
+  // Starting from Firefox 10, Firefox ESR was released once every seven
102
+  // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on.
103
+  // We infer the last and closest ESR version based on this rule.
104
+  nsCOMPtr<nsIXULRuntime> runtime =
105
+    do_GetService("@mozilla.org/xre/runtime;1", &rv);
106
+  NS_ENSURE_SUCCESS(rv, rv);
107
+
108
+  nsAutoCString updateChannel;
109
+  rv = runtime->GetDefaultUpdateChannel(updateChannel);
110
+  NS_ENSURE_SUCCESS(rv, rv);
111
+
112
+  // If we are running in Firefox ESR, determine whether the formula of ESR
113
+  // version has changed.  Once changed, we must update the formula in this
114
+  // function.
115
+  if (updateChannel.Equals("esr")) {
116
+    MOZ_ASSERT(((firefoxVersion % 7) == 3),
117
+      "Please udpate ESR version formula in nsRFPService.cpp");
118
+  }
119
+
120
+  uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7);
121
+  userAgent.Assign(nsPrintfCString(
122
+    "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
123
+    SPOOFED_OSCPU, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
124
+
125
+  return rv;
126
+}
127
+
128
 nsresult
129
 nsRFPService::Init()
130
 {
131
diff --git toolkit/components/resistfingerprinting/nsRFPService.h toolkit/components/resistfingerprinting/nsRFPService.h
132
index cf1f688bb992..bad80383883b 100644
133
--- toolkit/components/resistfingerprinting/nsRFPService.h
134
+++ toolkit/components/resistfingerprinting/nsRFPService.h
135
@@ -49,6 +49,9 @@ public:
136
   static uint32_t GetSpoofedDroppedFrames(double aTime, uint32_t aWidth, uint32_t aHeight);
137
   static uint32_t GetSpoofedPresentedFrames(double aTime, uint32_t aWidth, uint32_t aHeight);
138
 
139
+  // This method generates the spoofed value of User Agent.
140
+  static nsresult GetSpoofedUserAgent(nsACString &userAgent);
141
+
142
 private:
143
   nsresult Init();
144
 
(-)a/www/firefox/files/patch-bug1394265 (-24 lines)
Removed Link Here
1
commit a51675964a63
2
Author: Jeff Gilbert <jgilbert@mozilla.com>
3
Date:   Tue Oct 17 17:14:29 2017 -0700
4
5
    Bug 1394265 - Set MAX_COMBINED_TEXTURE_IMAGE_UNITS to 0 if GetIntegeriv fails. - r=daoshengmu a=ritu
6
    
7
    MozReview-Commit-ID: 5h6UPXczKhb
8
---
9
 dom/canvas/WebGLContextValidate.cpp | 2 +-
10
 1 file changed, 1 insertion(+), 1 deletion(-)
11
12
diff --git dom/canvas/WebGLContextValidate.cpp dom/canvas/WebGLContextValidate.cpp
13
index a8334e546414..ebf0aa8c2d78 100644
14
--- dom/canvas/WebGLContextValidate.cpp
15
+++ dom/canvas/WebGLContextValidate.cpp
16
@@ -554,7 +554,7 @@ WebGLContext::InitAndValidateGL(FailureReason* const out_failReason)
17
     if (MinCapabilityMode())
18
         mGLMaxTextureUnits = MINVALUE_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS;
19
     else
20
-        gl->fGetIntegerv(LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mGLMaxTextureUnits);
21
+        mGLMaxTextureUnits = gl->GetIntAs<GLint>(LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
22
 
23
     if (mGLMaxTextureUnits < 8) {
24
         const nsPrintfCString reason("GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: %d is < 8!",
(-)a/www/firefox/files/patch-bug1394530 (-60 lines)
Removed Link Here
1
commit a2b75aa9409c
2
Author: Tooru Fujisawa <arai_a@mac.com>
3
Date:   Sun Sep 17 19:52:04 2017 +0900
4
5
    Bug 1394530 - Stop using optimized path for non PromiseObject. r=till, a=sledru
6
    
7
    --HG--
8
    extra : source : 079ff8998fd50540948d3262a3a8b1f4d61b43e9
9
---
10
 js/src/builtin/Promise.cpp | 21 ++++++++++++++++-----
11
 1 file changed, 16 insertions(+), 5 deletions(-)
12
13
diff --git js/src/builtin/Promise.cpp js/src/builtin/Promise.cpp
14
index 1cb1cff0682e..e316f090504d 100644
15
--- js/src/builtin/Promise.cpp
16
+++ js/src/builtin/Promise.cpp
17
@@ -2365,6 +2365,15 @@ NewReactionRecord(JSContext* cx, HandleObject resultPromise, HandleValue onFulfi
18
                   HandleValue onRejected, HandleObject resolve, HandleObject reject,
19
                   HandleObject incumbentGlobalObject)
20
 {
21
+    // Either of the following conditions must be met:
22
+    //   * resultPromise is a PromiseObject
23
+    //   * resolve and reject are callable
24
+    // except for Async Generator, there resultPromise can be nullptr.
25
+    MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), resolve);
26
+    MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), IsCallable(resolve));
27
+    MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), reject);
28
+    MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), IsCallable(reject));
29
+
30
     Rooted<PromiseReactionRecord*> reaction(cx, NewObjectWithClassProto<PromiseReactionRecord>(cx));
31
     if (!reaction)
32
         return nullptr;
33
@@ -3072,7 +3081,7 @@ BlockOnPromise(JSContext* cx, HandleValue promiseVal, HandleObject blockedPromis
34
         // rejected promises list.
35
         bool addToDependent = true;
36
 
37
-        if (C == PromiseCtor) {
38
+        if (C == PromiseCtor && resultPromise->is<PromiseObject>()) {
39
             addToDependent = false;
40
         } else {
41
             // 25.4.5.3., step 4.
42
@@ -3131,12 +3140,14 @@ BlockOnPromise(JSContext* cx, HandleValue promiseVal, HandleObject blockedPromis
43
             return false;
44
     }
45
 
46
-    // If the object to depend on isn't a, maybe-wrapped, Promise instance,
47
-    // we ignore it. All this does is lose some small amount of debug
48
-    // information in scenarios that are highly unlikely to occur in useful
49
-    // code.
50
+    // If either the object to depend on or the object that gets blocked isn't
51
+    // a, maybe-wrapped, Promise instance, we ignore it. All this does is lose
52
+    // some small amount of debug information in scenarios that are highly
53
+    // unlikely to occur in useful code.
54
     if (!unwrappedPromiseObj->is<PromiseObject>())
55
         return true;
56
+    if (!blockedPromise_->is<PromiseObject>())
57
+        return true;
58
 
59
     Rooted<PromiseObject*> promise(cx, &unwrappedPromiseObj->as<PromiseObject>());
60
     return AddPromiseReaction(cx, promise, UndefinedHandleValue, UndefinedHandleValue,
(-)a/www/firefox/files/patch-bug1395138 (-49 lines)
Removed Link Here
1
commit 8ab8a207d511
2
Author: Jamie Nicol <jnicol@mozilla.com>
3
Date:   Mon Oct 9 17:48:59 2017 +0100
4
5
    Bug 1395138 - Hold reference to layers in ContainerLayerComposite::mPrepared. r=mattwoodrow, a=sledru
6
    
7
    MozReview-Commit-ID: 6qUDRnRcFAw
8
---
9
 gfx/layers/composite/ContainerLayerComposite.cpp | 9 +++++----
10
 1 file changed, 5 insertions(+), 4 deletions(-)
11
12
diff --git gfx/layers/composite/ContainerLayerComposite.cpp gfx/layers/composite/ContainerLayerComposite.cpp
13
index aad2993629fc..28d9e79925a0 100755
14
--- gfx/layers/composite/ContainerLayerComposite.cpp
15
+++ gfx/layers/composite/ContainerLayerComposite.cpp
16
@@ -161,12 +161,12 @@ static gfx::IntRect ContainerVisibleRect(ContainerT* aContainer)
17
 /* all of the per-layer prepared data we need to maintain */
18
 struct PreparedLayer
19
 {
20
-  PreparedLayer(LayerComposite *aLayer,
21
+  PreparedLayer(Layer *aLayer,
22
                 RenderTargetIntRect aClipRect,
23
                 Maybe<gfx::Polygon>&& aGeometry)
24
   : mLayer(aLayer), mClipRect(aClipRect), mGeometry(Move(aGeometry)) {}
25
 
26
-  LayerComposite* mLayer;
27
+  RefPtr<Layer> mLayer;
28
   RenderTargetIntRect mClipRect;
29
   Maybe<Polygon> mGeometry;
30
 };
31
@@ -230,7 +230,8 @@ ContainerPrepare(ContainerT* aContainer,
32
     CULLING_LOG("Preparing sublayer %p\n", layerToRender->GetLayer());
33
 
34
     layerToRender->Prepare(clipRect);
35
-    aContainer->mPrepared->mLayers.AppendElement(PreparedLayer(layerToRender, clipRect,
36
+    aContainer->mPrepared->mLayers.AppendElement(PreparedLayer(layerToRender->GetLayer(),
37
+                                                               clipRect,
38
                                                                Move(layer.geometry)));
39
   }
40
 
41
@@ -408,7 +409,7 @@ RenderLayers(ContainerT* aContainer, LayerManagerComposite* aManager,
42
     PreparedLayer& preparedData = aContainer->mPrepared->mLayers[i];
43
 
44
     const gfx::IntRect clipRect = preparedData.mClipRect.ToUnknownRect();
45
-    LayerComposite* layerToRender = preparedData.mLayer;
46
+    LayerComposite* layerToRender = static_cast<LayerComposite*>(preparedData.mLayer->ImplData());
47
     const Maybe<gfx::Polygon>& childGeometry = preparedData.mGeometry;
48
 
49
     Layer* layer = layerToRender->GetLayer();
(-)a/www/firefox/files/patch-bug1397811 (-48 lines)
Removed Link Here
1
commit 2bffd0136caf
2
Author: Olli Pettay <Olli.Pettay@helsinki.fi>
3
Date:   Fri Oct 20 11:02:29 2017 +0100
4
5
    Bug 1397811 - In order to not leak properties, ensure all the properties of adopted nodes are removed in case the adopt call fails. r=bz, a=lizzard
6
    
7
    --HG--
8
    extra : source : b609906f34b50f8e4236d0fee8d01338181dd906
9
---
10
 dom/base/nsNodeUtils.cpp | 21 +++++++++------------
11
 1 file changed, 9 insertions(+), 12 deletions(-)
12
13
diff --git dom/base/nsNodeUtils.cpp dom/base/nsNodeUtils.cpp
14
index dd958aa443ce..20e714d54065 100644
15
--- dom/base/nsNodeUtils.cpp
16
+++ dom/base/nsNodeUtils.cpp
17
@@ -605,6 +605,15 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
18
     }
19
   }
20
 
21
+  if (aNodesWithProperties && aNode->HasProperties()) {
22
+    bool ok = aNodesWithProperties->AppendObject(aNode);
23
+    MOZ_RELEASE_ASSERT(ok, "Out of memory");
24
+    if (aClone) {
25
+      ok = aNodesWithProperties->AppendObject(clone);
26
+      MOZ_RELEASE_ASSERT(ok, "Out of memory");
27
+    }
28
+  }
29
+
30
   if (aDeep && (!aClone || !aNode->IsNodeOfType(nsINode::eATTRIBUTE))) {
31
     // aNode's children.
32
     for (nsIContent* cloneChild = aNode->GetFirstChild();
33
@@ -664,15 +673,6 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
34
   }
35
 #endif
36
 
37
-  if (aNodesWithProperties && aNode->HasProperties()) {
38
-    bool ok = aNodesWithProperties->AppendObject(aNode);
39
-    if (aClone) {
40
-      ok = ok && aNodesWithProperties->AppendObject(clone);
41
-    }
42
-
43
-    NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY);
44
-  }
45
-
46
   clone.forget(aResult);
47
 
48
   return NS_OK;
(-)a/www/firefox/files/patch-bug1400003 (-120 lines)
Removed Link Here
1
commit 677c707a4f11
2
Author: Jon Coppeard <jcoppeard@mozilla.com>
3
Date:   Mon Oct 9 10:03:20 2017 +0100
4
5
    Bug 1400003 - Mark Heap<T> and barrier classes as MOZ_NON_MEMMOVABLE. r=sfink, r=froydnj, a=lizzard
6
    
7
    --HG--
8
    extra : source : 6ad5b916c9659aeb4b901d8f9ec7f121dc2c4418
9
---
10
 js/public/RootingAPI.h | 10 +++++++++-
11
 js/src/gc/Barrier.h    |  5 ++++-
12
 xpcom/ds/nsTArray.h    | 27 +++++++++++++--------------
13
 3 files changed, 26 insertions(+), 16 deletions(-)
14
15
diff --git js/public/RootingAPI.h js/public/RootingAPI.h
16
index 74a61af93703..f8ec7c5a1f5b 100644
17
--- js/public/RootingAPI.h
18
+++ js/public/RootingAPI.h
19
@@ -231,7 +231,7 @@ AssertGCThingIsNotAnObjectSubclass(js::gc::Cell* cell) {}
20
  * Type T must be a public GC pointer type.
21
  */
22
 template <typename T>
23
-class Heap : public js::HeapBase<T, Heap<T>>
24
+class MOZ_NON_MEMMOVABLE Heap : public js::HeapBase<T, Heap<T>>
25
 {
26
     // Please note: this can actually also be used by nsXBLMaybeCompiled<T>, for legacy reasons.
27
     static_assert(js::IsHeapConstructibleType<T>::value,
28
@@ -1246,6 +1246,14 @@ class JS_PUBLIC_API(ObjectPtr)
29
 
30
     explicit ObjectPtr(JSObject* obj) : value(obj) {}
31
 
32
+    ObjectPtr(const ObjectPtr& other) : value(other.value) {}
33
+
34
+    ObjectPtr(ObjectPtr&& other)
35
+      : value(other.value)
36
+    {
37
+        other.value = nullptr;
38
+    }
39
+
40
     /* Always call finalize before the destructor. */
41
     ~ObjectPtr() { MOZ_ASSERT(!value); }
42
 
43
diff --git js/src/gc/Barrier.h js/src/gc/Barrier.h
44
index 9c4f53975752..1740315c14e9 100644
45
--- js/src/gc/Barrier.h
46
+++ js/src/gc/Barrier.h
47
@@ -318,8 +318,11 @@ struct InternalBarrierMethods<jsid>
48
 };
49
 
50
 // Base class of all barrier types.
51
+//
52
+// This is marked non-memmovable since post barriers added by derived classes
53
+// can add pointers to class instances to the store buffer.
54
 template <typename T>
55
-class BarrieredBase
56
+class MOZ_NON_MEMMOVABLE BarrieredBase
57
 {
58
   protected:
59
     // BarrieredBase is not directly instantiable.
60
diff --git xpcom/ds/nsTArray.h xpcom/ds/nsTArray.h
61
index 424a50ba421e..4e9b57126bfb 100644
62
--- xpcom/ds/nsTArray.h
63
+++ xpcom/ds/nsTArray.h
64
@@ -37,6 +37,7 @@
65
 namespace JS {
66
 template<class T>
67
 class Heap;
68
+class ObjectPtr;
69
 } /* namespace JS */
70
 
71
 class nsRegion;
72
@@ -708,7 +709,7 @@ struct nsTArray_CopyWithConstructors
73
 template<class E>
74
 struct MOZ_NEEDS_MEMMOVABLE_TYPE nsTArray_CopyChooser
75
 {
76
-  typedef nsTArray_CopyWithMemutils Type;
77
+  using Type = nsTArray_CopyWithMemutils;
78
 };
79
 
80
 //
81
@@ -719,14 +720,18 @@ struct MOZ_NEEDS_MEMMOVABLE_TYPE nsTArray_CopyChooser
82
   template<>                                            \
83
   struct nsTArray_CopyChooser<T>                        \
84
   {                                                     \
85
-    typedef nsTArray_CopyWithConstructors<T> Type;      \
86
+    using Type = nsTArray_CopyWithConstructors<T>;      \
87
   };
88
 
89
-template<class E>
90
-struct nsTArray_CopyChooser<JS::Heap<E>>
91
-{
92
-  typedef nsTArray_CopyWithConstructors<JS::Heap<E>> Type;
93
-};
94
+#define DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(T)   \
95
+  template<typename S>                                  \
96
+  struct nsTArray_CopyChooser<T<S>>                     \
97
+  {                                                     \
98
+    using Type = nsTArray_CopyWithConstructors<T<S>>;   \
99
+  };
100
+
101
+DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(JS::Heap)
102
+DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(std::function)
103
 
104
 DECLARE_USE_COPY_CONSTRUCTORS(nsRegion)
105
 DECLARE_USE_COPY_CONSTRUCTORS(nsIntRegion)
106
@@ -740,13 +745,7 @@ DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::indexedDB::SerializedStructuredClone
107
 DECLARE_USE_COPY_CONSTRUCTORS(JSStructuredCloneData)
108
 DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::MessagePortMessage)
109
 DECLARE_USE_COPY_CONSTRUCTORS(mozilla::SourceBufferTask)
110
-
111
-template<typename T>
112
-struct nsTArray_CopyChooser<std::function<T>>
113
-{
114
-  typedef nsTArray_CopyWithConstructors<std::function<T>> Type;
115
-};
116
-
117
+DECLARE_USE_COPY_CONSTRUCTORS(JS::ObjectPtr)
118
 
119
 //
120
 // Base class for nsTArray_Impl that is templated on element type and derived
(-)a/www/firefox/files/patch-bug1400554 (-27 lines)
Removed Link Here
1
commit 62b41b600acc
2
Author: Dragana Damjanovic <dd.mozilla@gmail.com>
3
Date:   Mon Oct 9 14:59:32 2017 -0400
4
5
    Bug 1400554 - Cancel a time in TLSFilterTransaction if transaction is canceled. r=mcmanus, a=ritu
6
    
7
    --HG--
8
    extra : source : 67315954145e9cae0efe8c5323452a70a13c5484
9
---
10
 netwerk/protocol/http/TunnelUtils.cpp | 4 ++++
11
 1 file changed, 4 insertions(+)
12
13
diff --git netwerk/protocol/http/TunnelUtils.cpp netwerk/protocol/http/TunnelUtils.cpp
14
index d0f6ef0b1873..0cf3ea4f3008 100644
15
--- netwerk/protocol/http/TunnelUtils.cpp
16
+++ netwerk/protocol/http/TunnelUtils.cpp
17
@@ -126,6 +126,10 @@ TLSFilterTransaction::Close(nsresult aReason)
18
     return;
19
   }
20
 
21
+  if (mTimer) {
22
+    mTimer->Cancel();
23
+    mTimer = nullptr;
24
+  }
25
   mTransaction->Close(aReason);
26
   mTransaction = nullptr;
27
 }
(-)a/www/firefox/files/patch-bug1401573 (-27 lines)
Removed Link Here
1
commit d0ed05261f20
2
Author: jason laster <jlaster@mozilla.com>
3
Date:   Wed Sep 20 10:52:54 2017 -0400
4
5
    Bug 1401573 - Fix PoE, Link, and linux issue. r=nchevobbe
6
    
7
    MozReview-Commit-ID: 35TA6bhW1Wr
8
---
9
 devtools/client/debugger/new/debugger.js           | 68 +++++++++++++++++-----
10
 devtools/client/debugger/new/panel.js              | 27 ++++++++-
11
 .../new/test/mochitest/browser_dbg-expressions.js  |  2 +-
12
 3 files changed, 79 insertions(+), 18 deletions(-)
13
14
diff --git devtools/client/debugger/new/debugger.js devtools/client/debugger/new/debugger.js
15
index f52a3e380ab6..c1213180cb13 100644
16
--- devtools/client/debugger/new/debugger.js
17
+++ devtools/client/debugger/new/debugger.js
18
@@ -29493,7 +29493,8 @@ return /******/ (function(modules) { // webpackBootstr
19
 	}
20
 
21
 	function getKeyForOS(os, action) {
22
-	  return KEYS[os][action];
23
+         var osActions = KEYS[os] || KEYS.Linux;
24
+         return osActions[action];
25
 	}
26
 
27
 	function formatKey(action) {
(-)a/www/firefox/files/patch-bug1401804 (-31 lines)
Removed Link Here
1
commit 38e6bb85066b
2
Author: Jon Coppeard <jcoppeard@mozilla.com>
3
Date:   Fri Sep 22 13:09:44 2017 +0100
4
5
    Bug 1401804 - Fix IsMarkedBlack check used in gray marking asserts r=sfink a=sylvestre
6
---
7
 js/src/gc/Barrier.cpp | 11 ++---------
8
 1 file changed, 2 insertions(+), 9 deletions(-)
9
10
diff --git js/src/gc/Barrier.cpp js/src/gc/Barrier.cpp
11
index 5a5dfbe9bed0..0c42d16e7117 100644
12
--- js/src/gc/Barrier.cpp
13
+++ js/src/gc/Barrier.cpp
14
@@ -33,15 +33,8 @@ RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(JS::shadow::Zone* shadow
15
 bool
16
 IsMarkedBlack(JSObject* obj)
17
 {
18
-    // Note: we assume conservatively that Nursery things will be live.
19
-    if (!obj->isTenured())
20
-        return true;
21
-
22
-    gc::TenuredCell& tenured = obj->asTenured();
23
-    if (tenured.isMarkedAny() || tenured.arena()->allocatedDuringIncremental)
24
-        return true;
25
-
26
-    return false;
27
+    return obj->isMarkedBlack() ||
28
+           (obj->isTenured() && obj->asTenured().arena()->allocatedDuringIncremental);
29
 }
30
 
31
 bool
(-)a/www/firefox/files/patch-bug1402442 (-181 lines)
Removed Link Here
1
commit 44b4458e2d21
2
Author: Emilio Cobos Álvarez <emilio@crisal.io>
3
Date:   Mon Sep 25 18:25:29 2017 +0200
4
5
    Bug 1402442 - Properly remove display: contents pseudo-frames. r=mats, a=ritu
6
    
7
    MozReview-Commit-ID: 4pjVLQfv3YR
8
    Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
9
    
10
    --HG--
11
    extra : source : faa69ac1c14b79838cc0aac842b470a110542ebd
12
    extra : amend_source : 3a76e0123bf3f7d10295000cc44fd8bdddf700df
13
---
14
 layout/base/nsCSSFrameConstructor.cpp              | 26 +++++++++++++++-------
15
 testing/web-platform/meta/MANIFEST.json            | 25 +++++++++++++++++++++
16
 ...dynamic-generated-content-fieldset-001.html.ini |  4 ++++
17
 ...dynamic-generated-content-fieldset-001-ref.html | 16 +++++++++++++
18
 ...nts-dynamic-generated-content-fieldset-001.html | 26 ++++++++++++++++++++++
19
 5 files changed, 89 insertions(+), 8 deletions(-)
20
21
diff --git layout/base/nsCSSFrameConstructor.cpp layout/base/nsCSSFrameConstructor.cpp
22
index 99b1211b399b..4fce3fb381a7 100644
23
--- layout/base/nsCSSFrameConstructor.cpp
24
+++ layout/base/nsCSSFrameConstructor.cpp
25
@@ -1698,6 +1698,17 @@ nsCSSFrameConstructor::NotifyDestroyingFrame(nsIFrame* aFrame)
26
   nsFrameManager::NotifyDestroyingFrame(aFrame);
27
 }
28
 
29
+static bool
30
+HasGeneratedContent(const nsIContent* aChild)
31
+{
32
+  if (!aChild->MayHaveAnonymousChildren()) {
33
+    return false;
34
+  }
35
+
36
+  return nsLayoutUtils::GetBeforeFrame(aChild) ||
37
+         nsLayoutUtils::GetAfterFrame(aChild);
38
+}
39
+
40
 struct nsGenConInitializer {
41
   nsAutoPtr<nsGenConNode> mNode;
42
   nsGenConList*           mList;
43
@@ -8642,16 +8653,15 @@ nsCSSFrameConstructor::ContentRemoved(nsIContent*  aCo
44
   MOZ_ASSERT(!childFrame || !GetDisplayContentsStyleFor(aChild),
45
              "display:contents nodes shouldn't have a frame");
46
   if (!childFrame && GetDisplayContentsStyleFor(aChild)) {
47
-    nsIContent* ancestor = aContainer;
48
-    MOZ_ASSERT(ancestor, "display: contents on the root?");
49
-    while (!ancestor->GetPrimaryFrame()) {
50
-      // FIXME(emilio): Should this use the flattened tree parent instead?
51
-      ancestor = ancestor->GetParent();
52
-      MOZ_ASSERT(ancestor, "we can't have a display: contents subtree root!");
53
-    }
54
+    if (HasGeneratedContent(aChild)) {
55
+      nsIContent* ancestor = aContainer;
56
+      MOZ_ASSERT(ancestor, "display: contents on the root?");
57
+      while (!ancestor->GetPrimaryFrame()) {
58
+        // FIXME(emilio): Should this use the flattened tree parent instead?
59
+        ancestor = ancestor->GetParent();
60
+        MOZ_ASSERT(ancestor, "we can't have a display: contents subtree root!");
61
+      }
62
 
63
-    nsIFrame* ancestorFrame = ancestor->GetPrimaryFrame();
64
-    if (ancestorFrame->GetProperty(nsIFrame::GenConProperty())) {
65
       *aDidReconstruct = true;
66
       LAYOUT_PHASE_TEMP_EXIT();
67
 
68
diff --git testing/web-platform/meta/MANIFEST.json testing/web-platform/meta/MANIFEST.json
69
index 5f05321c5a70..8aed4a4b5078 100644
70
--- testing/web-platform/meta/MANIFEST.json
71
+++ testing/web-platform/meta/MANIFEST.json
72
@@ -102975,6 +102975,18 @@
73
      {}
74
     ]
75
    ],
76
+   "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html": [
77
+    [
78
+     "/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html",
79
+     [
80
+      [
81
+       "/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html",
82
+       "=="
83
+      ]
84
+     ],
85
+     {}
86
+    ]
87
+   ],
88
    "css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html": [
89
     [
90
      "/css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html",
91
@@ -227658,6 +227670,11 @@
92
      {}
93
     ]
94
    ],
95
+   "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html": [
96
+    [
97
+     {}
98
+    ]
99
+   ],
100
    "css/css-display-3/display-contents-flex-001-ref.html": [
101
     [
102
      {}
103
@@ -502880,6 +502897,14 @@
104
    "a2d7c9368ed8c01ca06c36646666270e85aee070",
105
    "reftest"
106
   ],
107
+  "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html": [
108
+   "30ec5c8ddacfbfef8434c37ca7a0a766f2bbc89a",
109
+   "support"
110
+  ],
111
+  "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html": [
112
+   "984bebb3c3b8661aedef4a229848dfa818bb1f4a",
113
+   "reftest"
114
+  ],
115
   "css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html": [
116
    "40fb07e8ada1530e6835ff2d4e49c5571ffb0baa",
117
    "reftest"
118
diff --git testing/web-platform/meta/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html.ini testing/web-platform/meta/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html.ini
119
new file mode 100644
120
index 000000000000..63c7442a2362
121
--- /dev/null
122
+++ testing/web-platform/meta/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html.ini
123
@@ -0,0 +1,4 @@
124
+[display-contents-dynamic-generated-content-fieldset-001.html]
125
+  type: reftest
126
+  expected:
127
+    if not stylo: FAIL
128
diff --git testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html
129
new file mode 100644
130
index 000000000000..651bc19b83e9
131
--- /dev/null
132
+++ testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html
133
@@ -0,0 +1,16 @@
134
+<!doctype html>
135
+<meta charset="utf-8">
136
+<title>CSS Reftest Reference</title>
137
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
138
+<style>
139
+div {
140
+  display: contents;
141
+  border: 10px solid red;
142
+}
143
+</style>
144
+<p>
145
+  Test passes if there is no red text and no red border.
146
+</p>
147
+<fieldset>
148
+  <div></div>
149
+</fieldset>
150
diff --git testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html
151
new file mode 100644
152
index 000000000000..8f8a0ba47971
153
--- /dev/null
154
+++ testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html
155
@@ -0,0 +1,26 @@
156
+<!doctype html>
157
+<meta charset="utf-8">
158
+<title>CSS Test: Dynamic changes to display: contents generated content in fieldsets.</title>
159
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
160
+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
161
+<link rel="match" href="display-contents-dynamic-generated-content-fieldset-001-ref.html">
162
+<style>
163
+.after::after {
164
+  content: "FAIL";
165
+  color: red;
166
+}
167
+div {
168
+  display: contents;
169
+  border: 10px solid red;
170
+}
171
+</style>
172
+<p>
173
+  Test passes if there is no red text and no red border.
174
+</p>
175
+<fieldset>
176
+  <div class="after"></div>
177
+</fieldset>
178
+<script>
179
+document.body.offsetHeight;
180
+document.querySelector("div").classList.remove("after");
181
+</script>
(-)a/www/firefox/files/patch-bug1404324 (-299 lines)
Removed Link Here
1
commit 5647dde295f4
2
Author: Emilio Cobos Álvarez <emilio@crisal.io>
3
Date:   Wed Oct 4 11:36:20 2017 +0200
4
5
    Bug 1404324 - Use the placeholder state to remove out-of-flows that aren't real descendants of the destruction root. r=bz, a=ritu
6
    
7
    Using the style of the frame can mess things up when we reparent them due to
8
    ::first-line before removing them.
9
    
10
    MozReview-Commit-ID: 3Dt0wF2XRAH
11
    
12
    --HG--
13
    extra : source : 5a034cdb513208dd19adf0babf30ee734968a78f
14
    extra : histedit_source : 4cd958939c5a76e013695e931d721454268a0dc7%2C96bdeda302c567493c7db5105f306595d25332e1
15
---
16
 layout/base/nsCSSFrameConstructor.cpp   |  8 +++---
17
 layout/base/nsLayoutUtils.cpp           | 46 +++------------------------------
18
 layout/generic/nsPlaceholderFrame.cpp   | 27 ++++++++++++++++---
19
 layout/generic/nsPlaceholderFrame.h     | 21 ++++++++-------
20
 layout/style/crashtests/1404324-1.html  | 12 +++++++++
21
 layout/style/crashtests/1404324-2.html  | 10 +++++++
22
 layout/style/crashtests/1404324-3.html  | 14 ++++++++++
23
 layout/style/crashtests/crashtests.list |  3 +++
24
 8 files changed, 83 insertions(+), 58 deletions(-)
25
26
diff --git layout/base/nsCSSFrameConstructor.cpp layout/base/nsCSSFrameConstructor.cpp
27
index c840416fd6a7..99b1211b399b 100644
28
--- layout/base/nsCSSFrameConstructor.cpp
29
+++ layout/base/nsCSSFrameConstructor.cpp
30
@@ -1260,8 +1260,10 @@ nsFrameConstructorState::GetOutOfFlowFrameItems(nsIFrame* aNewFrame,
31
     if (disp->mTopLayer != NS_STYLE_TOP_LAYER_NONE) {
32
       *aPlaceholderType = PLACEHOLDER_FOR_TOPLAYER;
33
       if (disp->mPosition == NS_STYLE_POSITION_FIXED) {
34
+        *aPlaceholderType |= PLACEHOLDER_FOR_FIXEDPOS;
35
         return &mTopLayerFixedItems;
36
       }
37
+      *aPlaceholderType |= PLACEHOLDER_FOR_ABSPOS;
38
       return &mTopLayerAbsoluteItems;
39
     }
40
     if (disp->mPosition == NS_STYLE_POSITION_ABSOLUTE) {
41
@@ -1303,11 +1305,11 @@ nsFrameConstructorState::ConstructBackdropFrameFor(nsIContent* aContent,
42
   nsAbsoluteItems* frameItems = GetOutOfFlowFrameItems(backdropFrame,
43
                                                        true, true, false,
44
                                                        &placeholderType);
45
-  MOZ_ASSERT(placeholderType == PLACEHOLDER_FOR_TOPLAYER);
46
+  MOZ_ASSERT(placeholderType & PLACEHOLDER_FOR_TOPLAYER);
47
 
48
   nsIFrame* placeholder = nsCSSFrameConstructor::
49
     CreatePlaceholderFrameFor(mPresShell, aContent, backdropFrame,
50
-                              frame, nullptr, PLACEHOLDER_FOR_TOPLAYER);
51
+                              frame, nullptr, placeholderType);
52
   nsFrameList temp(placeholder, placeholder);
53
   frame->SetInitialChildList(nsIFrame::kBackdropList, temp);
54
 
55
@@ -1361,7 +1363,7 @@ nsFrameConstructorState::AddChild(nsIFrame* aNewFrame,
56
     // Add the placeholder frame to the flow
57
     aFrameItems.AddChild(placeholderFrame);
58
 
59
-    if (placeholderType == PLACEHOLDER_FOR_TOPLAYER) {
60
+    if (placeholderType & PLACEHOLDER_FOR_TOPLAYER) {
61
       ConstructBackdropFrameFor(aContent, aNewFrame);
62
     }
63
   }
64
diff --git layout/base/nsLayoutUtils.cpp layout/base/nsLayoutUtils.cpp
65
index cb010c0a1a80..94ead9830c25 100644
66
--- layout/base/nsLayoutUtils.cpp
67
+++ layout/base/nsLayoutUtils.cpp
68
@@ -1525,6 +1525,8 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
69
 {
70
   nsIFrame::ChildListID id = nsIFrame::kPrincipalList;
71
 
72
+  MOZ_DIAGNOSTIC_ASSERT(!(aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW));
73
+
74
   if (aChildFrame->GetStateBits() & NS_FRAME_IS_OVERFLOW_CONTAINER) {
75
     nsIFrame* pif = aChildFrame->GetPrevInFlow();
76
     if (pif->GetParent() == aChildFrame->GetParent()) {
77
@@ -1533,35 +1535,6 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
78
     else {
79
       id = nsIFrame::kOverflowContainersList;
80
     }
81
-  }
82
-  // See if the frame is moved out of the flow
83
-  else if (aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW) {
84
-    // Look at the style information to tell
85
-    const nsStyleDisplay* disp = aChildFrame->StyleDisplay();
86
-
87
-    if (NS_STYLE_POSITION_ABSOLUTE == disp->mPosition) {
88
-      id = nsIFrame::kAbsoluteList;
89
-    } else if (NS_STYLE_POSITION_FIXED == disp->mPosition) {
90
-      if (nsLayoutUtils::IsReallyFixedPos(aChildFrame)) {
91
-        id = nsIFrame::kFixedList;
92
-      } else {
93
-        id = nsIFrame::kAbsoluteList;
94
-      }
95
-#ifdef MOZ_XUL
96
-    } else if (StyleDisplay::MozPopup == disp->mDisplay) {
97
-      // Out-of-flows that are DISPLAY_POPUP must be kids of the root popup set
98
-#ifdef DEBUG
99
-      nsIFrame* parent = aChildFrame->GetParent();
100
-      NS_ASSERTION(parent && parent->IsPopupSetFrame(), "Unexpected parent");
101
-#endif // DEBUG
102
-
103
-      id = nsIFrame::kPopupList;
104
-#endif // MOZ_XUL
105
-    } else {
106
-      NS_ASSERTION(aChildFrame->IsFloating(), "not a floated frame");
107
-      id = nsIFrame::kFloatList;
108
-    }
109
-
110
   } else {
111
     LayoutFrameType childType = aChildFrame->Type();
112
     if (LayoutFrameType::MenuPopup == childType) {
113
@@ -1596,19 +1569,8 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
114
   nsContainerFrame* parent = aChildFrame->GetParent();
115
   bool found = parent->GetChildList(id).ContainsFrame(aChildFrame);
116
   if (!found) {
117
-    if (!(aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW)) {
118
-      found = parent->GetChildList(nsIFrame::kOverflowList)
119
-                .ContainsFrame(aChildFrame);
120
-    }
121
-    else if (aChildFrame->IsFloating()) {
122
-      found = parent->GetChildList(nsIFrame::kOverflowOutOfFlowList)
123
-                .ContainsFrame(aChildFrame);
124
-      if (!found) {
125
-        found = parent->GetChildList(nsIFrame::kPushedFloatsList)
126
-                  .ContainsFrame(aChildFrame);
127
-      }
128
-    }
129
-    // else it's positioned and should have been on the 'id' child list.
130
+    found = parent->GetChildList(nsIFrame::kOverflowList)
131
+              .ContainsFrame(aChildFrame);
132
     NS_POSTCONDITION(found, "not in child list");
133
   }
134
 #endif
135
diff --git layout/generic/nsPlaceholderFrame.cpp layout/generic/nsPlaceholderFrame.cpp
136
index 7da2582ae526..4b2e1bf84b36 100644
137
--- layout/generic/nsPlaceholderFrame.cpp
138
+++ layout/generic/nsPlaceholderFrame.cpp
139
@@ -25,9 +25,9 @@ using namespace mozilla::gfx;
140
 
141
 nsIFrame*
142
 NS_NewPlaceholderFrame(nsIPresShell* aPresShell, nsStyleContext* aContext,
143
-                       nsFrameState aTypeBit)
144
+                       nsFrameState aTypeBits)
145
 {
146
-  return new (aPresShell) nsPlaceholderFrame(aContext, aTypeBit);
147
+  return new (aPresShell) nsPlaceholderFrame(aContext, aTypeBits);
148
 }
149
 
150
 NS_IMPL_FRAMEARENA_HELPERS(nsPlaceholderFrame)
151
@@ -155,6 +155,26 @@ nsPlaceholderFrame::Reflow(nsPresContext*           aPresContext,
152
   NS_FRAME_SET_TRUNCATION(aStatus, aReflowInput, aDesiredSize);
153
 }
154
 
155
+static nsIFrame::ChildListID
156
+ChildListIDForOutOfFlow(nsFrameState aPlaceholderState, nsIFrame* aChild)
157
+{
158
+  if (aPlaceholderState & PLACEHOLDER_FOR_FLOAT) {
159
+    return nsIFrame::kFloatList;
160
+  }
161
+  if (aPlaceholderState & PLACEHOLDER_FOR_POPUP) {
162
+    return nsIFrame::kPopupList;
163
+  }
164
+  if (aPlaceholderState & PLACEHOLDER_FOR_FIXEDPOS) {
165
+    return nsLayoutUtils::IsReallyFixedPos(aChild)
166
+      ? nsIFrame::kFixedList : nsIFrame::kAbsoluteList;
167
+  }
168
+  if (aPlaceholderState & PLACEHOLDER_FOR_ABSPOS) {
169
+    return nsIFrame::kAbsoluteList;
170
+  }
171
+  MOZ_DIAGNOSTIC_ASSERT(false, "unknown list");
172
+  return nsIFrame::kFloatList;
173
+}
174
+
175
 void
176
 nsPlaceholderFrame::DestroyFrom(nsIFrame* aDestructRoot)
177
 {
178
@@ -162,12 +182,13 @@ nsPlaceholderFrame::DestroyFrom(nsIFrame* aDestructRoot)
179
   if (oof) {
180
     mOutOfFlowFrame = nullptr;
181
     oof->DeleteProperty(nsIFrame::PlaceholderFrameProperty());
182
+
183
     // If aDestructRoot is not an ancestor of the out-of-flow frame,
184
     // then call RemoveFrame on it here.
185
     // Also destroy it here if it's a popup frame. (Bug 96291)
186
     if ((GetStateBits() & PLACEHOLDER_FOR_POPUP) ||
187
         !nsLayoutUtils::IsProperAncestorFrame(aDestructRoot, oof)) {
188
-      ChildListID listId = nsLayoutUtils::GetChildListNameFor(oof);
189
+      ChildListID listId = ChildListIDForOutOfFlow(GetStateBits(), oof);
190
       nsFrameManager* fm = PresContext()->GetPresShell()->FrameManager();
191
       fm->RemoveFrame(listId, oof);
192
     }
193
diff --git layout/generic/nsPlaceholderFrame.h layout/generic/nsPlaceholderFrame.h
194
index e270c76cdd31..2af9b4ccbc93 100644
195
--- layout/generic/nsPlaceholderFrame.h
196
+++ layout/generic/nsPlaceholderFrame.h
197
@@ -40,7 +40,7 @@
198
 
199
 nsIFrame* NS_NewPlaceholderFrame(nsIPresShell* aPresShell,
200
                                  nsStyleContext* aContext,
201
-                                 nsFrameState aTypeBit);
202
+                                 nsFrameState aTypeBits);
203
 
204
 #define PLACEHOLDER_TYPE_MASK    (PLACEHOLDER_FOR_FLOAT | \
205
                                   PLACEHOLDER_FOR_ABSPOS | \
206
@@ -65,18 +65,19 @@ public:
207
    */
208
   friend nsIFrame* NS_NewPlaceholderFrame(nsIPresShell* aPresShell,
209
                                           nsStyleContext* aContext,
210
-                                          nsFrameState aTypeBit);
211
-  nsPlaceholderFrame(nsStyleContext* aContext, nsFrameState aTypeBit)
212
+                                          nsFrameState aTypeBits);
213
+  nsPlaceholderFrame(nsStyleContext* aContext, nsFrameState aTypeBits)
214
     : nsFrame(aContext, kClassID)
215
     , mOutOfFlowFrame(nullptr)
216
   {
217
-    NS_PRECONDITION(aTypeBit == PLACEHOLDER_FOR_FLOAT ||
218
-                    aTypeBit == PLACEHOLDER_FOR_ABSPOS ||
219
-                    aTypeBit == PLACEHOLDER_FOR_FIXEDPOS ||
220
-                    aTypeBit == PLACEHOLDER_FOR_POPUP ||
221
-                    aTypeBit == PLACEHOLDER_FOR_TOPLAYER,
222
-                    "Unexpected type bit");
223
-    AddStateBits(aTypeBit);
224
+    MOZ_ASSERT(aTypeBits == PLACEHOLDER_FOR_FLOAT ||
225
+               aTypeBits == PLACEHOLDER_FOR_ABSPOS ||
226
+               aTypeBits == PLACEHOLDER_FOR_FIXEDPOS ||
227
+               aTypeBits == PLACEHOLDER_FOR_POPUP ||
228
+               aTypeBits == (PLACEHOLDER_FOR_TOPLAYER | PLACEHOLDER_FOR_ABSPOS) ||
229
+               aTypeBits == (PLACEHOLDER_FOR_TOPLAYER | PLACEHOLDER_FOR_FIXEDPOS),
230
+               "Unexpected type bit");
231
+    AddStateBits(aTypeBits);
232
   }
233
 
234
   // Get/Set the associated out of flow frame
235
diff --git layout/style/crashtests/1404324-1.html layout/style/crashtests/1404324-1.html
236
new file mode 100644
237
index 000000000000..574a5437cb1b
238
--- /dev/null
239
+++ layout/style/crashtests/1404324-1.html
240
@@ -0,0 +1,12 @@
241
+<style></style>
242
+<script>
243
+document.documentElement.className = 'c1'
244
+o1 = document.createElement('form')
245
+o2 = document.createElement('e')
246
+o1.className = 'c2'
247
+document.documentElement.appendChild(o1)
248
+document.documentElement.appendChild(o2)
249
+document.styleSheets[0].insertRule('.c1:first-line, .c2 { position:fixed', 0);
250
+document.documentElement.getBoundingClientRect()
251
+document.styleSheets[0].cssRules[0].style.position = 'relative'
252
+</script>
253
diff --git layout/style/crashtests/1404324-2.html layout/style/crashtests/1404324-2.html
254
new file mode 100644
255
index 000000000000..797347d5c058
256
--- /dev/null
257
+++ layout/style/crashtests/1404324-2.html
258
@@ -0,0 +1,10 @@
259
+<style>
260
+  del, *::first-line {
261
+    position: absolute;
262
+  }
263
+</style>
264
+<del></del>
265
+<script>
266
+  document.documentElement.offsetTop;
267
+  document.styleSheets[0].cssRules[0].style.position = 'sticky'
268
+</script>
269
diff --git layout/style/crashtests/1404324-3.html layout/style/crashtests/1404324-3.html
270
new file mode 100644
271
index 000000000000..3b06f12a2bf6
272
--- /dev/null
273
+++ layout/style/crashtests/1404324-3.html
274
@@ -0,0 +1,14 @@
275
+<style>
276
+del {
277
+  position: absolute;
278
+}
279
+
280
+body::first-line {
281
+  color: red;
282
+}
283
+</style>
284
+<del></del>
285
+<script>
286
+  document.documentElement.offsetTop;
287
+  document.styleSheets[0].cssRules[0].style.position = 'sticky'
288
+</script>
289
diff --git layout/style/crashtests/crashtests.list layout/style/crashtests/crashtests.list
290
index be9a46c52bfa..5eaba6935ee2 100644
291
--- layout/style/crashtests/crashtests.list
292
+++ layout/style/crashtests/crashtests.list
293
@@ -238,3 +238,6 @@ load 1403615.html
294
 load 1387481-1.html
295
 load 1387499.html
296
 load 1391577.html
297
+asserts-if(stylo,1) load 1404324-1.html # bug 1405605
298
+load 1404324-2.html
299
+load 1404324-3.html
(-)a/www/firefox/files/patch-bug1404636 (-111 lines)
Removed Link Here
1
commit 3eff0850dd67
2
Author: Jan de Mooij <jdemooij@mozilla.com>
3
Date:   Thu Oct 26 16:15:35 2017 +0200
4
5
    Bug 1404636 - Special-case typed arrays in PropertyReadNeedsTypeBarrier. r=bhackett, a=lizzard
6
    
7
    --HG--
8
    extra : source : 74d76655c9192b20dc69ddfa40c38e65fa9a47e3
9
---
10
 js/src/jit/IonBuilder.cpp | 26 --------------------------
11
 js/src/jit/MIR.cpp        |  8 ++++++++
12
 js/src/jit/MIR.h          | 23 +++++++++++++++++++++++
13
 3 files changed, 31 insertions(+), 26 deletions(-)
14
15
diff --git js/src/jit/IonBuilder.cpp js/src/jit/IonBuilder.cpp
16
index 0f78e9d5d3b7..f0ef380da2bc 100644
17
--- js/src/jit/IonBuilder.cpp
18
+++ js/src/jit/IonBuilder.cpp
19
@@ -7825,9 +7825,6 @@ IonBuilder::getElemTryTypedObject(bool* emitted, MDefinition* obj, MDefinition*
20
     MOZ_CRASH("Bad kind");
21
 }
22
 
23
-static MIRType
24
-MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble);
25
-
26
 bool
27
 IonBuilder::checkTypedObjectIndexInBounds(uint32_t elemSize,
28
                                           MDefinition* obj,
29
@@ -8793,29 +8790,6 @@ IonBuilder::convertShiftToMaskForStaticTypedArray(MDefinition* id,
30
     return ptr;
31
 }
32
 
33
-static MIRType
34
-MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble)
35
-{
36
-    switch (arrayType) {
37
-      case Scalar::Int8:
38
-      case Scalar::Uint8:
39
-      case Scalar::Uint8Clamped:
40
-      case Scalar::Int16:
41
-      case Scalar::Uint16:
42
-      case Scalar::Int32:
43
-        return MIRType::Int32;
44
-      case Scalar::Uint32:
45
-        return observedDouble ? MIRType::Double : MIRType::Int32;
46
-      case Scalar::Float32:
47
-        return MIRType::Float32;
48
-      case Scalar::Float64:
49
-        return MIRType::Double;
50
-      default:
51
-        break;
52
-    }
53
-    MOZ_CRASH("Unknown typed array type");
54
-}
55
-
56
 AbortReasonOr<Ok>
57
 IonBuilder::jsop_getelem_typed(MDefinition* obj, MDefinition* index,
58
                                Scalar::Type arrayType)
59
diff --git js/src/jit/MIR.cpp js/src/jit/MIR.cpp
60
index bac5948bfc21..ef286b7d546c 100644
61
--- js/src/jit/MIR.cpp
62
+++ js/src/jit/MIR.cpp
63
@@ -6235,6 +6235,14 @@ PropertyReadNeedsTypeBarrier(CompilerConstraintList* constraints,
64
         return BarrierKind::TypeSet;
65
     }
66
 
67
+    if (!name && IsTypedArrayClass(key->clasp())) {
68
+        Scalar::Type arrayType = Scalar::Type(key->clasp() - &TypedArrayObject::classes[0]);
69
+        MIRType type = MIRTypeForTypedArrayRead(arrayType, true);
70
+        if (observed->mightBeMIRType(type))
71
+            return BarrierKind::NoBarrier;
72
+        return BarrierKind::TypeSet;
73
+    }
74
+
75
     jsid id = name ? NameToId(name) : JSID_VOID;
76
     HeapTypeSetKey property = key->property(id);
77
     if (property.maybeTypes()) {
78
diff --git js/src/jit/MIR.h js/src/jit/MIR.h
79
index d6d895b2caf2..16824b3f67ad 100644
80
--- js/src/jit/MIR.h
81
+++ js/src/jit/MIR.h
82
@@ -15107,6 +15107,29 @@ ArrayPrototypeHasIndexedProperty(IonBuilder* builder, JSScript* script);
83
 AbortReasonOr<bool>
84
 TypeCanHaveExtraIndexedProperties(IonBuilder* builder, TemporaryTypeSet* types);
85
 
86
+inline MIRType
87
+MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble)
88
+{
89
+    switch (arrayType) {
90
+      case Scalar::Int8:
91
+      case Scalar::Uint8:
92
+      case Scalar::Uint8Clamped:
93
+      case Scalar::Int16:
94
+      case Scalar::Uint16:
95
+      case Scalar::Int32:
96
+        return MIRType::Int32;
97
+      case Scalar::Uint32:
98
+        return observedDouble ? MIRType::Double : MIRType::Int32;
99
+      case Scalar::Float32:
100
+        return MIRType::Float32;
101
+      case Scalar::Float64:
102
+        return MIRType::Double;
103
+      default:
104
+        break;
105
+    }
106
+    MOZ_CRASH("Unknown typed array type");
107
+}
108
+
109
 } // namespace jit
110
 } // namespace js
111
 
(-)a/www/firefox/files/patch-bug1404910 (-170 lines)
Removed Link Here
1
commit 2c8bf0ecbc5d
2
Author: Andrea Marchesini <amarchesini@mozilla.com>
3
Date:   Wed Oct 4 14:18:19 2017 +0200
4
5
    Bug 1404910 - WebSocket should consider the corrent top-level window principal. r=smaug, a=ritu
6
    
7
    --HG--
8
    extra : source : c543c0a50db700883b57c052710c97b5ef731e1f
9
---
10
 dom/base/WebSocket.cpp                      | 15 ++++---
11
 dom/base/test/iframe_webSocket_sandbox.html | 65 +++++++++++++++++++++++++++++
12
 dom/base/test/mochitest.ini                 |  3 ++
13
 dom/base/test/test_webSocket_sandbox.html   | 34 +++++++++++++++
14
 4 files changed, 109 insertions(+), 8 deletions(-)
15
16
diff --git dom/base/WebSocket.cpp dom/base/WebSocket.cpp
17
index dc2c1c70107b..982c67cd2abd 100644
18
--- dom/base/WebSocket.cpp
19
+++ dom/base/WebSocket.cpp
20
@@ -1666,18 +1666,17 @@ WebSocketImpl::Init(JSContext* aCx,
21
       nsCOMPtr<nsPIDOMWindowInner> innerWindow;
22
 
23
       while (true) {
24
-        if (principal) {
25
-          bool isNullPrincipal = true;
26
-          isNullPrincipal = principal->GetIsNullPrincipal();
27
-          if (isNullPrincipal || nsContentUtils::IsSystemPrincipal(principal)) {
28
-            break;
29
-          }
30
+        if (principal && !principal->GetIsNullPrincipal()) {
31
+          break;
32
         }
33
 
34
         if (!innerWindow) {
35
           innerWindow = do_QueryInterface(globalObject);
36
-          if (NS_WARN_IF(!innerWindow)) {
37
-            return NS_ERROR_DOM_SECURITY_ERR;
38
+          if (!innerWindow) {
39
+            // If we are in a XPConnect sandbox or in a JS component,
40
+            // innerWindow will be null. There is nothing on top of this to be
41
+            // considered.
42
+            break;
43
           }
44
         }
45
 
46
diff --git dom/base/test/iframe_webSocket_sandbox.html dom/base/test/iframe_webSocket_sandbox.html
47
new file mode 100644
48
index 000000000000..d889a79b05da
49
--- /dev/null
50
+++ dom/base/test/iframe_webSocket_sandbox.html
51
@@ -0,0 +1,65 @@
52
+<html><body>
53
+<iframe id="frame" sandbox="allow-scripts allow-popups"></iframe>
54
+<script type="application/javascript;version=1.8">
55
+onmessage = function(e) {
56
+  parent.postMessage(e.data, '*');
57
+}
58
+
59
+var ifr = document.getElementById('frame');
60
+
61
+if (location.search == '?nested') {
62
+  var url = new URL(location);
63
+  url.search = "";
64
+  ifr.src = url.href;
65
+} else if (location.search == '?popup') {
66
+  var url = new URL(location);
67
+  url.search = "?opener";
68
+
69
+  ifr.srcdoc = "<html><script>" +
70
+    "window.open('" + url.href + "', 'foobar');" +
71
+    "onmessage = function(e) { " +
72
+    "  parent.postMessage(e.data, '*'); " +
73
+    "}" +
74
+  "</scr" + "ipt></html>";
75
+} else if (location.search == '?opener') {
76
+  try{
77
+    var socket = new WebSocket('ws://mochi.test:8888/tests/dom/base/test/file_websocket_basic');
78
+    socket.onerror = function(e) {
79
+      opener.postMessage('WS onerror', '*');
80
+      close();
81
+    };
82
+    socket.onopen = function(event) {
83
+      opener.postMessage('WS onopen', '*');
84
+      close();
85
+    };
86
+  } catch(e) {
87
+    if (e.name == 'SecurityError') {
88
+      opener.postMessage('WS Throws!', '*');
89
+    } else {
90
+      opener.postMessage('WS Throws something else!', '*');
91
+    }
92
+    close();
93
+  }
94
+} else {
95
+  ifr.srcdoc = `
96
+  <html><script>
97
+  try{
98
+    var socket = new WebSocket('ws://mochi.test:8888/tests/dom/base/test/file_websocket_basic');
99
+    socket.onerror = function(e) {
100
+      parent.postMessage('WS onerror', '*');
101
+    };
102
+    socket.onopen = function(event) {
103
+      parent.postMessage('WS onopen', '*');
104
+    };
105
+  } catch(e) {
106
+    if (e.name == 'SecurityError') {
107
+      parent.postMessage('WS Throws!', '*');
108
+    } else {
109
+      parent.postMessage('WS Throws something else!', '*');
110
+    }
111
+  }
112
+  </scr`+`ipt>
113
+  </html>`;
114
+}
115
+</script>
116
+</body></html>
117
diff --git dom/base/test/mochitest.ini dom/base/test/mochitest.ini
118
index 670dd5ae0a06..5d59fe1ea7b8 100644
119
--- dom/base/test/mochitest.ini
120
+++ dom/base/test/mochitest.ini
121
@@ -804,6 +804,9 @@ skip-if = toolkit == 'android'
122
 skip-if = toolkit == 'android'
123
 [test_websocket_permessage_deflate.html]
124
 skip-if = toolkit == 'android'
125
+[test_webSocket_sandbox.html]
126
+skip-if = toolkit == 'android'
127
+support-files = iframe_webSocket_sandbox.html
128
 [test_websocket1.html]
129
 skip-if = toolkit == 'android'
130
 [test_websocket2.html]
131
diff --git dom/base/test/test_webSocket_sandbox.html dom/base/test/test_webSocket_sandbox.html
132
new file mode 100644
133
index 000000000000..b343fa784f39
134
--- /dev/null
135
+++ dom/base/test/test_webSocket_sandbox.html
136
@@ -0,0 +1,34 @@
137
+<!DOCTYPE HTML>
138
+<html>
139
+<head>
140
+  <title>Bug 1252751</title>
141
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
142
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
143
+</head>
144
+<body>
145
+<div id="container"></div>
146
+<iframe id="frame"></iframe>
147
+<script type="application/javascript;version=1.8">
148
+var urls = [ "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html",
149
+             "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html?nested",
150
+             "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html?popup" ];
151
+
152
+onmessage = function(e) {
153
+  is(e.data, "WS Throws!", "ws://URI cannot be used by a https iframe");
154
+  runTest();
155
+}
156
+
157
+function runTest() {
158
+  if (!urls.length) {
159
+    SimpleTest.finish();
160
+    return;
161
+  }
162
+
163
+  document.getElementById("frame").src = urls.shift();
164
+}
165
+
166
+SimpleTest.waitForExplicitFinish();
167
+runTest();
168
+</script>
169
+</body>
170
+</html>
(-)a/www/firefox/files/patch-bug1406398 (-36 lines)
Removed Link Here
1
commit c79dd79bdb5c
2
Author: André Bargull <andre.bargull@gmail.com>
3
Date:   Thu Oct 12 09:20:07 2017 -0700
4
5
    Bug 1406398 - Avoid rooting the object twice in EnumerableOwnProperties. r=jandem, a=lizzard
6
    
7
    --HG--
8
    extra : source : c2cecb6d6f9bb85f258a66cf8e94c1860adde7e5
9
---
10
 js/src/builtin/Object.cpp | 6 ++----
11
 1 file changed, 2 insertions(+), 4 deletions(-)
12
13
diff --git js/src/builtin/Object.cpp js/src/builtin/Object.cpp
14
index dff377a1cd97..ff4dd029cb52 100644
15
--- js/src/builtin/Object.cpp
16
+++ js/src/builtin/Object.cpp
17
@@ -1246,9 +1246,6 @@ EnumerableOwnProperties(JSContext* cx, const JS::CallArgs& args, EnumerableOwnPr
18
     RootedId id(cx);
19
     RootedValue key(cx);
20
     RootedValue value(cx);
21
-    RootedNativeObject nobj(cx);
22
-    if (obj->is<NativeObject>())
23
-        nobj = &obj->as<NativeObject>();
24
     RootedShape shape(cx);
25
     Rooted<PropertyDescriptor> desc(cx);
26
     // Step 4.
27
@@ -1265,7 +1262,8 @@ EnumerableOwnProperties(JSContext* cx, const JS::CallArgs& args, EnumerableOwnPr
28
         }
29
 
30
         // Step 4.a.i.
31
-        if (nobj) {
32
+        if (obj->is<NativeObject>()) {
33
+            HandleNativeObject nobj = obj.as<NativeObject>();
34
             if (JSID_IS_INT(id) && nobj->containsDenseElement(JSID_TO_INT(id))) {
35
                 value = nobj->getDenseOrTypedArrayElement(JSID_TO_INT(id));
36
             } else {
(-)a/www/firefox/files/patch-bug1406750 (-47 lines)
Removed Link Here
1
commit f2e38d27a7e3
2
Author: Emilio Cobos Álvarez <emilio@crisal.io>
3
Date:   Tue Oct 24 17:44:12 2017 -0400
4
5
    Bug 1406750 - Use GetStyleContextNoFlush in UpdateCurrentStyleSources, and avoid flushing mPresShell twice. r=bz, a=abillings
6
    
7
    MozReview-Commit-ID: Nfu9FZcIzQ
8
    
9
    --HG--
10
    extra : source : c73db1c3b6e78a5fad216ca7cc7e4ce312c30a98
11
    extra : amend_source : 9b31fa281368a9dc39a4a949cb85ae2f354a4308
12
---
13
 layout/style/nsComputedDOMStyle.cpp | 14 ++++++++++----
14
 1 file changed, 10 insertions(+), 4 deletions(-)
15
16
diff --git layout/style/nsComputedDOMStyle.cpp layout/style/nsComputedDOMStyle.cpp
17
index 062e00ffebc5..1aa07e691d4a 100644
18
--- layout/style/nsComputedDOMStyle.cpp
19
+++ layout/style/nsComputedDOMStyle.cpp
20
@@ -832,6 +832,11 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
21
     return;
22
   }
23
 
24
+  nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
25
+  if (presShellForContent && presShellForContent != mPresShell) {
26
+    presShellForContent->FlushPendingNotifications(FlushType::Style);
27
+  }
28
+
29
   // We need to use GetUndisplayedRestyleGeneration instead of
30
   // GetRestyleGeneration, because the caching of mStyleContext is an
31
   // optimization that is useful only for displayed elements.
32
@@ -922,10 +927,11 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
33
 #endif
34
     // Need to resolve a style context
35
     RefPtr<nsStyleContext> resolvedStyleContext =
36
-      nsComputedDOMStyle::GetStyleContext(mContent->AsElement(),
37
-                                          mPseudo,
38
-                                          mPresShell,
39
-                                          mStyleType);
40
+      nsComputedDOMStyle::GetStyleContextNoFlush(
41
+          mContent->AsElement(),
42
+          mPseudo,
43
+          presShellForContent ? presShellForContent.get() : mPresShell,
44
+          mStyleType);
45
     if (!resolvedStyleContext) {
46
       ClearStyleContext();
47
       return;
(-)a/www/firefox/files/patch-bug1407375 (-28 lines)
Removed Link Here
1
commit b2d46387afc9
2
Author: Boris Zbarsky <bzbarsky@mit.edu>
3
Date:   Wed Oct 11 22:19:06 2017 -0400
4
5
    Bug 1407375 - Make sure to call NodeInfoChanged whenever we change the nodeinfo on a node. r=peterv, a=ritu
6
    
7
    MozReview-Commit-ID: 71k1jv8thFA
8
    
9
    --HG--
10
    extra : source : 51ff2d13e50c1e8f7731e4c7243064bb96d2e4d0
11
---
12
 dom/base/nsNodeUtils.cpp | 3 +++
13
 1 file changed, 3 insertions(+)
14
15
diff --git dom/base/nsNodeUtils.cpp dom/base/nsNodeUtils.cpp
16
index 64ab9e852966..dd958aa443ce 100644
17
--- dom/base/nsNodeUtils.cpp
18
+++ dom/base/nsNodeUtils.cpp
19
@@ -593,6 +593,9 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
20
             aNode->OwnerDoc()->UnregisterActivityObserver(aNode->AsElement());
21
           }
22
           aNode->mNodeInfo.swap(newNodeInfo);
23
+          if (elem) {
24
+            elem->NodeInfoChanged(newDoc);
25
+          }
26
           if (wasRegistered) {
27
             aNode->OwnerDoc()->RegisterActivityObserver(aNode->AsElement());
28
           }
(-)a/www/firefox/files/patch-bug1407740 (-26 lines)
Removed Link Here
1
commit a8fee72c6fc1
2
Author: Andrew McCreight <continuation@gmail.com>
3
Date:   Fri Oct 20 16:11:26 2017 -0400
4
5
    Bug 1407740 - Fix a crash by setting a flag to true. r=bz, a=lizzard
6
    
7
    --HG--
8
    extra : source : 23d3b458f69c56b0f3b2b8faa1453f79e32ce70c
9
---
10
 docshell/base/nsDocShell.cpp | 3 +++
11
 1 file changed, 3 insertions(+)
12
13
diff --git docshell/base/nsDocShell.cpp docshell/base/nsDocShell.cpp
14
index 6748a2722e5a..f7dc1508a74d 100644
15
--- docshell/base/nsDocShell.cpp
16
+++ docshell/base/nsDocShell.cpp
17
@@ -881,6 +881,9 @@ nsDocShell::~nsDocShell()
18
 {
19
   MOZ_ASSERT(!mObserved);
20
 
21
+  // Avoid notifying observers while we're in the dtor.
22
+  mIsBeingDestroyed = true;
23
+
24
   Destroy();
25
 
26
   nsCOMPtr<nsISHistoryInternal> shPrivate(do_QueryInterface(mSessionHistory));
(-)a/www/firefox/files/patch-bug1407751 (-35 lines)
Removed Link Here
1
commit 390b56f13f00
2
Author: Andrea Marchesini <amarchesini@mozilla.com>
3
Date:   Fri Oct 13 07:11:40 2017 +0200
4
5
    Bug 1407751 - DefineOSFileConstants should return false if OSFileConstants service is not initialized. r=froydnj, a=ritu
6
    
7
    --HG--
8
    extra : source : 2f76e40db328035331dd6aa79d0e5fbf04db7c96
9
---
10
 dom/system/OSFileConstants.cpp | 5 ++---
11
 1 file changed, 2 insertions(+), 3 deletions(-)
12
13
diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp
14
index edafe9f1c560..3cd77f6c3c12 100644
15
--- dom/system/OSFileConstants.cpp
16
+++ dom/system/OSFileConstants.cpp
17
@@ -346,6 +346,7 @@ void CleanupOSFileConstants()
18
 
19
   gInitialized = false;
20
   delete gPaths;
21
+  gPaths = nullptr;
22
 }
23
 
24
 
25
@@ -874,9 +875,7 @@ bool SetStringProperty(JSContext *cx, JS::Handle<JSObject*> aObject, const char
26
  */
27
 bool DefineOSFileConstants(JSContext *cx, JS::Handle<JSObject*> global)
28
 {
29
-  MOZ_ASSERT(gInitialized);
30
-
31
-  if (gPaths == nullptr) {
32
+  if (!gInitialized || gPaths == nullptr) {
33
     // If an initialization error was ignored, we may end up with
34
     // |gInitialized == true| but |gPaths == nullptr|. We cannot
35
     // |MOZ_ASSERT| this, as this would kill precompile_cache.js,
(-)a/www/firefox/files/patch-bug1408005 (-25 lines)
Removed Link Here
1
commit 988e61cc6282
2
Author: Andrew McCreight <continuation@gmail.com>
3
Date:   Mon Oct 23 10:18:42 2017 -0400
4
5
    Bug 1408005 - Clear gApplicationReputationService in the dtor. r=francois, a=abillings
6
    
7
    --HG--
8
    extra : source : 1613834d8d1145200886a039f733b1e066c63cbd
9
---
10
 toolkit/components/downloads/ApplicationReputation.cpp | 2 ++
11
 1 file changed, 2 insertions(+)
12
13
diff --git toolkit/components/downloads/ApplicationReputation.cpp toolkit/components/downloads/ApplicationReputation.cpp
14
index b19841d8235d..18bc3b71728d 100644
15
--- toolkit/components/downloads/ApplicationReputation.cpp
16
+++ toolkit/components/downloads/ApplicationReputation.cpp
17
@@ -1576,6 +1576,8 @@ ApplicationReputationService::ApplicationReputationService()
18
 
19
 ApplicationReputationService::~ApplicationReputationService() {
20
   LOG(("Application reputation service shutting down"));
21
+  MOZ_ASSERT(gApplicationReputationService == this);
22
+  gApplicationReputationService = nullptr;
23
 }
24
 
25
 NS_IMETHODIMP
(-)a/www/firefox/files/patch-bug1408412 (-37 lines)
Removed Link Here
1
commit 81f184512a09
2
Author: Jan de Mooij <jdemooij@mozilla.com>
3
Date:   Wed Oct 25 11:30:17 2017 +0200
4
5
    Bug 1408412 - Use ARGS_LENGTH_MAX as upper bound in MArgumentsLength::computeRange. r=nbp, a=lizzard
6
    
7
    --HG--
8
    extra : source : aaf54dce048a85806833529a5d53ecc46156ef47
9
---
10
 js/src/jit/RangeAnalysis.cpp | 7 ++++---
11
 1 file changed, 4 insertions(+), 3 deletions(-)
12
13
diff --git js/src/jit/RangeAnalysis.cpp js/src/jit/RangeAnalysis.cpp
14
index a3daefa848a7..19715ccc250a 100644
15
--- js/src/jit/RangeAnalysis.cpp
16
+++ js/src/jit/RangeAnalysis.cpp
17
@@ -15,6 +15,7 @@
18
 #include "jit/MIRGenerator.h"
19
 #include "jit/MIRGraph.h"
20
 #include "js/Conversions.h"
21
+#include "vm/ArgumentsObject.h"
22
 #include "vm/TypedArrayObject.h"
23
 
24
 #include "jsopcodeinlines.h"
25
@@ -1845,9 +1846,9 @@ MArgumentsLength::computeRange(TempAllocator& alloc)
26
 {
27
     // This is is a conservative upper bound on what |TooManyActualArguments|
28
     // checks.  If exceeded, Ion will not be entered in the first place.
29
-    MOZ_ASSERT(JitOptions.maxStackArgs <= UINT32_MAX,
30
-               "NewUInt32Range requires a uint32 value");
31
-    setRange(Range::NewUInt32Range(alloc, 0, JitOptions.maxStackArgs));
32
+    static_assert(ARGS_LENGTH_MAX <= UINT32_MAX,
33
+                  "NewUInt32Range requires a uint32 value");
34
+    setRange(Range::NewUInt32Range(alloc, 0, ARGS_LENGTH_MAX));
35
 }
36
 
37
 void
(-)a/www/firefox/files/patch-bug1408990 (-34 lines)
Removed Link Here
1
commit 53a3958e0a76
2
Author: Valentin Gosu <valentin.gosu@gmail.com>
3
Date:   Sat Oct 28 00:15:01 2017 +0200
4
5
    Bug 1408990 - Only add the entry to the performance object if the loading document's principal is the same as the triggering principal. r=bz, r=dragana, a=lizzard
6
    
7
    MozReview-Commit-ID: 7o8XKHioP1p
8
    
9
    --HG--
10
    extra : rebase_source : 33d4044b4901cee460cc69a0bae1fe0e84dab2aa
11
    extra : source : ff9e841ff8544053f184d2e425500d5dd13ee14d
12
---
13
 netwerk/protocol/http/HttpBaseChannel.cpp | 8 ++++++++
14
 1 file changed, 8 insertions(+)
15
16
diff --git netwerk/protocol/http/HttpBaseChannel.cpp netwerk/protocol/http/HttpBaseChannel.cpp
17
index 8a5c4d8d9f45..16e59241e2fc 100644
18
--- netwerk/protocol/http/HttpBaseChannel.cpp
19
+++ netwerk/protocol/http/HttpBaseChannel.cpp
20
@@ -4088,6 +4088,14 @@ HttpBaseChannel::GetPerformance()
21
     return nullptr;
22
   }
23
 
24
+  // We only add to the document's performance object if it has the same
25
+  // principal as the one triggering the load. This is to prevent navigations
26
+  // triggered _by_ the iframe from showing up in the parent document's
27
+  // performance entries if they have different origins.
28
+  if (!mLoadInfo->TriggeringPrincipal()->Equals(loadingDocument->NodePrincipal())) {
29
+    return nullptr;
30
+  }
31
+
32
   nsCOMPtr<nsPIDOMWindowInner> innerWindow = loadingDocument->GetInnerWindow();
33
   if (!innerWindow) {
34
     return nullptr;
(-)a/www/firefox/files/patch-bug1409680 (-27 lines)
Removed Link Here
1
Bug 1409680 - Extend --disable-debug-symbols to Rust code.
2
3
This reduces disk I/O and memory usage during build that already lacks
4
debugging symbols from C++ code, allowing to use more jobs on 32bit hosts.
5
6
--disable-debug-symbols build on FreeBSD 10.3 i386 (8 cores) host:
7
Max RSS before:  libxul - 612 Mb, libgkrust - 1908 Mb
8
Max RSS after:   libxul - 444 Mb, libgkrust - 1471 Mb
9
Binary before:   libxul - 203 Mb, libgkrust -  732 Mb
10
Binary after:    libxul - 123 Mb, libgkrust -  301 Mb
11
12
--- config/rules.mk.orig	2017-09-14 20:15:53 UTC
13
+++ config/rules.mk
14
@@ -906,11 +906,13 @@ ifdef MOZ_USING_SCCACHE
15
 sccache_wrap := RUSTC_WRAPPER='$(CCACHE)'
16
 endif
17
 
18
+ifdef MOZ_DEBUG_SYMBOLS
19
 # XXX hack to work around dsymutil failing on cross-OSX builds (bug 1380381)
20
 ifeq ($(HOST_OS_ARCH)-$(OS_ARCH),Linux-Darwin)
21
 default_rustflags += -C debuginfo=1
22
 else
23
 default_rustflags += -C debuginfo=2
24
+endif
25
 endif
26
 
27
 # We use the + prefix to pass down the jobserver fds to cargo, but we
(-)a/www/firefox/files/patch-bug1411458 (-44 lines)
Removed Link Here
1
commit da2637dd8a23
2
Author: David Keeler <dkeeler@mozilla.com>
3
Date:   Wed Oct 25 09:54:13 2017 -0700
4
5
    Bug 1411458 - Confirm we actually have a PKCS#7 signedData content info. r=jcj, a=ritu
6
    
7
    MozReview-Commit-ID: GKfL1C0EPWt
8
    
9
    --HG--
10
    extra : source : 22a772cfa62ae6908751b1cdd98a9234f2ea6105
11
---
12
 security/manager/ssl/nsDataSignatureVerifier.cpp | 6 ++++++
13
 security/nss.symbols                             | 1 +
14
 2 files changed, 7 insertions(+)
15
16
diff --git security/manager/ssl/nsDataSignatureVerifier.cpp security/manager/ssl/nsDataSignatureVerifier.cpp
17
index f78740365e1a..2527431dd9ae 100644
18
--- security/manager/ssl/nsDataSignatureVerifier.cpp
19
+++ security/manager/ssl/nsDataSignatureVerifier.cpp
20
@@ -170,6 +170,12 @@ VerifyCMSDetachedSignatureIncludingCertificate(
21
     return NS_ERROR_CMS_VERIFY_NO_CONTENT_INFO;
22
   }
23
 
24
+  // We're expecting this to be a PKCS#7 signedData content info.
25
+  if (NSS_CMSContentInfo_GetContentTypeTag(cinfo)
26
+        != SEC_OID_PKCS7_SIGNED_DATA) {
27
+    return NS_ERROR_CMS_VERIFY_NO_CONTENT_INFO;
28
+  }
29
+
30
   // signedData is non-owning
31
   NSSCMSSignedData* signedData =
32
     static_cast<NSSCMSSignedData*>(NSS_CMSContentInfo_GetContent(cinfo));
33
diff --git security/nss.symbols security/nss.symbols
34
index 626fc64d96f9..517a577a8de4 100644
35
--- security/nss.symbols
36
+++ security/nss.symbols
37
@@ -181,6 +181,7 @@ HASH_ResultLenByOidTag
38
 HASH_Update
39
 NSSBase64_EncodeItem_Util
40
 NSS_CMSContentInfo_GetContent
41
+NSS_CMSContentInfo_GetContentTypeTag
42
 NSS_CMSContentInfo_SetContent_Data
43
 NSS_CMSContentInfo_SetContent_EnvelopedData
44
 NSS_CMSContentInfo_SetContent_SignedData
(-)a/www/firefox/files/patch-bug1412252 (-42 lines)
Removed Link Here
1
commit 4bb201af8ede
2
Author: Emilio Cobos Álvarez <emilio@crisal.io>
3
Date:   Sun Oct 29 17:39:20 2017 -0400
4
5
    Bug 1412252 - Only fetch mPresShell after flushing the relevant content pres shell. r=bz, a=ritu
6
    
7
    MozReview-Commit-ID: BkcYtu2MsNs
8
    
9
    --HG--
10
    extra : rebase_source : aaf4e69af1cfb4e6becd491f3f4a6e4924cb307a
11
    extra : source : 044406030675adf7dfdb0317fca3852fa1ea3ff7
12
---
13
 layout/style/nsComputedDOMStyle.cpp | 10 +++++-----
14
 1 file changed, 5 insertions(+), 5 deletions(-)
15
16
diff --git layout/style/nsComputedDOMStyle.cpp layout/style/nsComputedDOMStyle.cpp
17
index 1aa07e691d4a..1eb9fbebdc8d 100644
18
--- layout/style/nsComputedDOMStyle.cpp
19
+++ layout/style/nsComputedDOMStyle.cpp
20
@@ -826,17 +826,17 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
21
   mFlushedPendingReflows = aNeedsLayoutFlush;
22
 #endif
23
 
24
+  nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
25
+  if (presShellForContent && presShellForContent != document->GetShell()) {
26
+    presShellForContent->FlushPendingNotifications(FlushType::Style);
27
+  }
28
+
29
   mPresShell = document->GetShell();
30
   if (!mPresShell || !mPresShell->GetPresContext()) {
31
     ClearStyleContext();
32
     return;
33
   }
34
 
35
-  nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
36
-  if (presShellForContent && presShellForContent != mPresShell) {
37
-    presShellForContent->FlushPendingNotifications(FlushType::Style);
38
-  }
39
-
40
   // We need to use GetUndisplayedRestyleGeneration instead of
41
   // GetRestyleGeneration, because the caching of mStyleContext is an
42
   // optimization that is useful only for displayed elements.
(-)b/www/firefox/files/patch-bug847568 (-1 / +1 lines)
Lines 261-267 index 9297e4d6f501..d8e273887e4b 100644 Link Here
261
+option('--with-system-harfbuzz',
261
+option('--with-system-harfbuzz',
262
+       help="Use system harfbuzz (located with pkgconfig)")
262
+       help="Use system harfbuzz (located with pkgconfig)")
263
+
263
+
264
+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.4.7',
264
+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.5.1',
265
+                                    when='--with-system-harfbuzz')
265
+                                    when='--with-system-harfbuzz')
266
+
266
+
267
+set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))
267
+set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))
(-)b/www/firefox/files/patch-build-pgo-profileserver.py (-10 / +10 lines)
Lines 1-11 Link Here
1
--- build/pgo/profileserver.py.orig	2011-02-24 21:49:47.000000000 +0100
1
--- build/pgo/profileserver.py.orig	2017-09-15 04:15:39 UTC
2
+++ build/pgo/profileserver.py	2011-02-24 21:50:30.000000000 +0100
2
+++ build/pgo/profileserver.py
3
@@ -59,7 +59,7 @@ if __name__ == '__main__':
3
@@ -87,7 +87,7 @@ if __name__ == '__main__':
4
       env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
4
             env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
5
       print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
5
             print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
6
 
6
 
7
-    cmdargs = ["http://localhost:%d/index.html" % PORT]
7
-        cmdargs = ["http://localhost:%d/index.html" % PORT]
8
+    cmdargs = ["http://127.0.0.1:%d/index.html" % PORT]
8
+        cmdargs = ["http://127.0.0.1:%d/index.html" % PORT]
9
     runner = FirefoxRunner(profile=profile,
9
         runner = FirefoxRunner(profile=profile,
10
                            binary=build.get_binary_path(where="staged-package"),
10
                                binary=build.get_binary_path(
11
                            cmdargs=cmdargs,
11
                                    where="staged-package"),
(-)a/www/firefox/files/patch-servo17934 (-53 lines)
Removed Link Here
1
commit 4cbdfa028752
2
Author: Manish Goregaokar <manishsmail@gmail.com>
3
Date:   Tue Aug 1 12:57:42 2017 -0500
4
5
    servo: Merge #17934 - Remove doc comment on statement (from Manishearth:doc-comment); r=canaltinova
6
    
7
    rustc warns about these now
8
    
9
    Source-Repo: https://github.com/servo/servo
10
    Source-Revision: b49311c65a083a9b8eb03741bf7ea980b64f1e03
11
    
12
    --HG--
13
    extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
14
    extra : subtree_revision : 6b3c7d7f4ffeb9e271c52d418cda42cac5dd378d
15
---
16
 servo/components/style/values/specified/image.rs | 6 +++---
17
 1 file changed, 3 insertions(+), 3 deletions(-)
18
19
diff --git servo/components/style/values/specified/image.rs servo/components/style/values/specified/image.rs
20
index 37ed00ccf443..687c6f17d432 100644
21
--- servo/components/style/values/specified/image.rs
22
+++ servo/components/style/values/specified/image.rs
23
@@ -686,14 +686,14 @@ impl LineDirection {
24
         input.try(|i| {
25
             let to_ident = i.try(|i| i.expect_ident_matching("to"));
26
             match *compat_mode {
27
-                /// `to` keyword is mandatory in modern syntax.
28
+                // `to` keyword is mandatory in modern syntax.
29
                 CompatMode::Modern => to_ident?,
30
                 // Fall back to Modern compatibility mode in case there is a `to` keyword.
31
                 // According to Gecko, `-moz-linear-gradient(to ...)` should serialize like
32
                 // `linear-gradient(to ...)`.
33
                 CompatMode::Moz if to_ident.is_ok() => *compat_mode = CompatMode::Modern,
34
-                /// There is no `to` keyword in webkit prefixed syntax. If it's consumed,
35
-                /// parsing should throw an error.
36
+                // There is no `to` keyword in webkit prefixed syntax. If it's consumed,
37
+                // parsing should throw an error.
38
                 CompatMode::WebKit if to_ident.is_ok() => {
39
                     return Err(SelectorParseError::UnexpectedIdent("to".into()).into())
40
                 },
41
diff --git servo/components/style/properties/gecko.mako.rs servo/components/style/properties/gecko.mako.rs
42
index 37ed00ccf443..687c6f17d432 100644
43
--- servo/components/style/properties/gecko.mako.rs
44
+++ servo/components/style/properties/gecko.mako.rs
45
@@ -2081,7 +2081,7 @@ fn static_assert() {
46
             return (parent_size, parent_unconstrained_size)
47
         }
48
 
49
-        /// XXXManishearth this should also handle text zoom
50
+        // XXXManishearth this should also handle text zoom
51
         let min = Au(parent.gecko.mScriptMinSize);
52
 
53
         let scale = (parent.gecko.mScriptSizeMultiplier as f32).powi(delta as i32);
(-)a/www/firefox/files/patch-servo17969 (-110 lines)
Removed Link Here
1
commit 9f5c1f2e4b5b
2
Author: Manish Goregaokar <manishsmail@gmail.com>
3
Date:   Thu Aug 3 16:27:12 2017 -0500
4
5
    servo: Merge #17969 - Update stylo code to work on nightly (from Manishearth:rustup); r=emilio
6
    
7
    r=emilio https://bugzilla.mozilla.org/show_bug.cgi?id=1386887
8
    
9
    Source-Repo: https://github.com/servo/servo
10
    Source-Revision: 7cee7d7fcc4194e410fa8a308a77d37ac452778a
11
    
12
    --HG--
13
    extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
14
    extra : subtree_revision : d9c874ebcfa1e64c86265d0ed2e5cff65d9133be
15
---
16
 servo/components/style/gecko/generated/bindings.rs | 12 +++++++++---
17
 servo/components/style/gecko/wrapper.rs            |  7 ++++++-
18
 servo/ports/geckolib/glue.rs                       |  3 ++-
19
 3 files changed, 17 insertions(+), 5 deletions(-)
20
21
diff --git servo/components/style/gecko/generated/bindings.rs servo/components/style/gecko/generated/bindings.rs
22
index e46bdfe1e1ea..b6703ab95bf7 100644
23
--- servo/components/style/gecko/generated/bindings.rs
24
+++ servo/components/style/gecko/generated/bindings.rs
25
@@ -8,6 +8,7 @@ type nsAString_internal = nsAString;
26
 pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;
27
 pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
28
 pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;
29
+pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();
30
 use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;
31
 use gecko_bindings::structs::mozilla::css::ErrorReporter;
32
 use gecko_bindings::structs::mozilla::css::ImageValue;
33
@@ -37,7 +38,7 @@ use gecko_bindings::structs::RawServoStyleRule;
34
 use gecko_bindings::structs::RawGeckoPresContext;
35
 use gecko_bindings::structs::RawGeckoPresContextOwned;
36
 use gecko_bindings::structs::RawGeckoStyleAnimationList;
37
-use gecko_bindings::structs::RawGeckoStyleChildrenIteratorBorrowedMut;
38
+use gecko_bindings::structs::RawGeckoStyleChildrenIterator;
39
 use gecko_bindings::structs::RawGeckoServoStyleRuleList;
40
 use gecko_bindings::structs::RawGeckoURLExtraData;
41
 use gecko_bindings::structs::RawGeckoXBLBinding;
42
@@ -320,6 +321,10 @@ pub type RawGeckoServoAnimationValueListBorrowed<'a> = &'a RawGeckoServoAnimatio
43
 pub type RawGeckoServoAnimationValueListBorrowedOrNull<'a> = Option<&'a RawGeckoServoAnimationValueList>;
44
 pub type RawGeckoServoAnimationValueListBorrowedMut<'a> = &'a mut RawGeckoServoAnimationValueList;
45
 pub type RawGeckoServoAnimationValueListBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoServoAnimationValueList>;
46
+pub type RawGeckoStyleChildrenIteratorBorrowed<'a> = &'a RawGeckoStyleChildrenIterator;
47
+pub type RawGeckoStyleChildrenIteratorBorrowedOrNull<'a> = Option<&'a RawGeckoStyleChildrenIterator>;
48
+pub type RawGeckoStyleChildrenIteratorBorrowedMut<'a> = &'a mut RawGeckoStyleChildrenIterator;
49
+pub type RawGeckoStyleChildrenIteratorBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoStyleChildrenIterator>;
50
 pub type ServoCssRulesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoCssRules>;
51
 pub type ServoCssRulesBorrowed<'a> = &'a ServoCssRules;
52
 pub type ServoCssRulesBorrowedOrNull<'a> = Option<&'a ServoCssRules>;
53
@@ -840,7 +845,7 @@ extern "C" {
54
 }
55
 extern "C" {
56
     pub fn Gecko_AnimationGetBaseStyle(aBaseStyles:
57
-                                           *mut ::std::os::raw::c_void,
58
+                                           RawServoAnimationValueTableBorrowed,
59
                                        aProperty: nsCSSPropertyID)
60
      -> RawServoAnimationValueBorrowedOrNull;
61
 }
62
@@ -2602,7 +2607,8 @@ extern "C" {
63
 extern "C" {
64
     pub fn Servo_AnimationCompose(animation_values:
65
                                       RawServoAnimationValueMapBorrowedMut,
66
-                                  base_values: *mut ::std::os::raw::c_void,
67
+                                  base_values:
68
+                                      RawServoAnimationValueTableBorrowed,
69
                                   property: nsCSSPropertyID,
70
                                   animation_segment:
71
                                       RawGeckoAnimationPropertySegmentBorrowed,
72
diff --git servo/components/style/gecko/wrapper.rs servo/components/style/gecko/wrapper.rs
73
index dae898692313..6d62f54951cc 100644
74
--- servo/components/style/gecko/wrapper.rs
75
+++ servo/components/style/gecko/wrapper.rs
76
@@ -387,7 +387,12 @@ impl<'a> Iterator for GeckoChildrenIterator<'a> {
77
                 curr
78
             },
79
             GeckoChildrenIterator::GeckoIterator(ref mut it) => unsafe {
80
-                Gecko_GetNextStyleChild(it).map(GeckoNode)
81
+                // We do this unsafe lengthening of the lifetime here because
82
+                // structs::StyleChildrenIterator is actually StyleChildrenIterator<'a>,
83
+                // however we can't express this easily with bindgen, and it would
84
+                // introduce functions with two input lifetimes into bindgen,
85
+                // which would be out of scope for elision.
86
+                Gecko_GetNextStyleChild(&mut * (it as *mut _)).map(GeckoNode)
87
             }
88
         }
89
     }
90
diff --git servo/ports/geckolib/glue.rs servo/ports/geckolib/glue.rs
91
index 367d24ff87b2..e69959f3710b 100644
92
--- servo/ports/geckolib/glue.rs
93
+++ servo/ports/geckolib/glue.rs
94
@@ -59,6 +59,7 @@ use style::gecko_bindings::bindings::RawGeckoServoStyleRuleListBorrowedMut;
95
 use style::gecko_bindings::bindings::RawServoAnimationValueBorrowed;
96
 use style::gecko_bindings::bindings::RawServoAnimationValueMapBorrowedMut;
97
 use style::gecko_bindings::bindings::RawServoAnimationValueStrong;
98
+use style::gecko_bindings::bindings::RawServoAnimationValueTableBorrowed;
99
 use style::gecko_bindings::bindings::RawServoStyleRuleBorrowed;
100
 use style::gecko_bindings::bindings::ServoStyleContextBorrowedOrNull;
101
 use style::gecko_bindings::bindings::nsTArrayBorrowed_uintptr_t;
102
@@ -374,7 +375,7 @@ pub extern "C" fn Servo_AnimationValues_ComputeDistance(from: RawServoAnimationV
103
 
104
 #[no_mangle]
105
 pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMapBorrowedMut,
106
-                                         base_values: *mut ::std::os::raw::c_void,
107
+                                         base_values: RawServoAnimationValueTableBorrowed,
108
                                          css_property: nsCSSPropertyID,
109
                                          segment: RawGeckoAnimationPropertySegmentBorrowed,
110
                                          last_segment: RawGeckoAnimationPropertySegmentBorrowed,
(-)a/www/firefox/files/patch-servo18046 (-763 lines)
Removed Link Here
1
commit ea9c8db790e4
2
Author: Simon Sapin <simon.sapin@exyr.org>
3
Date:   Tue Aug 15 07:31:04 2017 -0500
4
5
    servo: Merge #18046 - Upgrade to rustc 1.21.0-nightly (13d94d5fa 2017-08-10) (from servo:rustup); r=emilio
6
    
7
    Source-Repo: https://github.com/servo/servo
8
    Source-Revision: 7d9b82b9efa7b10a2e34d93df5ac535d99518f7a
9
    
10
    --HG--
11
    extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
12
    extra : subtree_revision : e1b3d113c3edaea3c4c07f8b206f2e02922e3caf
13
---
14
 servo/Cargo.lock                                   |  6 +++---
15
 servo/components/devtools/lib.rs                   |  2 +-
16
 servo/components/layout/animation.rs               |  2 +-
17
 servo/components/layout/construct.rs               |  6 +++---
18
 servo/components/layout/display_list_builder.rs    |  2 +-
19
 servo/components/layout/flex.rs                    |  6 +++---
20
 servo/components/layout/inline.rs                  |  4 ++--
21
 servo/components/layout/sequential.rs              |  2 +-
22
 servo/components/layout/table_cell.rs              |  2 +-
23
 servo/components/layout/text.rs                    |  2 +-
24
 servo/components/net/cookie_storage.rs             |  2 +-
25
 servo/components/profile/heartbeats.rs             |  4 ++--
26
 servo/components/script/dom/bindings/js.rs         |  4 ++--
27
 servo/components/script/dom/cssstyledeclaration.rs |  8 ++++----
28
 servo/components/script/dom/cssstylerule.rs        |  2 +-
29
 servo/components/script/dom/document.rs            | 12 ++++++------
30
 servo/components/script/dom/medialist.rs           |  4 ++--
31
 servo/components/script/dom/range.rs               |  4 ++--
32
 .../script/dom/servoparser/async_html.rs           |  4 ++--
33
 servo/components/script/dom/url.rs                 |  4 ++--
34
 servo/components/script/dom/vrdisplay.rs           |  2 +-
35
 .../components/script/dom/webglrenderingcontext.rs |  2 +-
36
 servo/components/script/dom/xmlhttprequest.rs      |  2 +-
37
 servo/components/script/lib.rs                     |  1 -
38
 .../script_plugins/unrooted_must_root.rs           | 22 +++++++++++++++-------
39
 servo/components/selectors/matching.rs             |  2 +-
40
 servo/components/selectors/parser.rs               |  2 +-
41
 .../style/invalidation/element/invalidator.rs      |  2 +-
42
 servo/components/style/matching.rs                 |  2 +-
43
 .../components/style/properties/properties.mako.rs |  2 +-
44
 servo/components/style/style_adjuster.rs           |  2 +-
45
 servo/components/style/style_resolver.rs           |  2 +-
46
 servo/components/style/stylesheets/rule_list.rs    |  2 +-
47
 servo/components/style/stylesheets/rule_parser.rs  |  2 +-
48
 .../components/style/stylesheets/rules_iterator.rs |  2 +-
49
 servo/components/style/values/animated/color.rs    |  2 +-
50
 servo/components/style/values/computed/border.rs   |  2 +-
51
 servo/components/webdriver_server/lib.rs           |  2 +-
52
 servo/rust-commit-hash                             |  2 +-
53
 servo/tests/unit/style/stylist.rs                  | 13 -------------
54
 40 files changed, 73 insertions(+), 79 deletions(-)
55
56
diff --git servo/Cargo.lock servo/Cargo.lock
57
index 50dd6e1a785a..2aa7bd8ea3dd 100644
58
--- servo/Cargo.lock
59
+++ servo/Cargo.lock
60
@@ -3577,7 +3577,7 @@ version = "0.1.4"
61
 source = "registry+https://github.com/rust-lang/crates.io-index"
62
 dependencies = [
63
  "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
64
- "xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
65
+ "xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)",
66
 ]
67
 
68
 [[package]]
69
@@ -3592,7 +3592,7 @@ dependencies = [
70
 
71
 [[package]]
72
 name = "xcb"
73
-version = "0.7.6"
74
+version = "0.7.7"
75
 source = "registry+https://github.com/rust-lang/crates.io-index"
76
 dependencies = [
77
  "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
78
@@ -3918,7 +3918,7 @@ dependencies = [
79
 "checksum x11 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db27c597c187da52194a4b8232e7d869503911aab9ff726fefb76d7a830f78ed"
80
 "checksum x11-clipboard 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "731230b8edcbb9d99247105e4c9ec0a538594d50ad68d2afa8662195f9db2973"
81
 "checksum x11-dl 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "326c500cdc166fd7c70dd8c8a829cd5c0ce7be5a5d98c25817de2b9bdc67faf8"
82
-"checksum xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "63e3a849b73e4e1905e4f4d48f1750429bc86ea9f473632ab382a6f69ecb6b33"
83
+"checksum xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "7cede38417fcdf2f0a9d8abf1cea1c1b066320a8a316e9583a0d717c334fafb2"
84
 "checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
85
 "checksum xi-unicode 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1"
86
 "checksum xml-rs 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7ec6c39eaa68382c8e31e35239402c0a9489d4141a8ceb0c716099a0b515b562"
87
diff --git servo/components/devtools/lib.rs servo/components/devtools/lib.rs
88
index d5a2764a7102..6a25696eaed7 100644
89
--- servo/components/devtools/lib.rs
90
+++ servo/components/devtools/lib.rs
91
@@ -306,7 +306,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>,
92
                 columnNumber: console_message.columnNumber,
93
             },
94
         };
95
-        for mut stream in &mut *console_actor.streams.borrow_mut() {
96
+        for stream in &mut *console_actor.streams.borrow_mut() {
97
             stream.write_json_packet(&msg);
98
         }
99
     }
100
diff --git servo/components/layout/animation.rs servo/components/layout/animation.rs
101
index e4a2782c1271..ebbba82fcc6a 100644
102
--- servo/components/layout/animation.rs
103
+++ servo/components/layout/animation.rs
104
@@ -39,7 +39,7 @@ pub fn update_animation_state(constellation_chan: &IpcSender<ConstellationMsg>,
105
             // run.
106
             if let Some(ref mut animations) = running_animations.get_mut(node) {
107
                 // TODO: This being linear is probably not optimal.
108
-                for mut anim in animations.iter_mut() {
109
+                for anim in animations.iter_mut() {
110
                     if let Animation::Keyframes(_, ref anim_name, ref mut anim_state) = *anim {
111
                         if *name == *anim_name {
112
                             debug!("update_animation_state: Found other animation {}", name);
113
diff --git servo/components/layout/construct.rs servo/components/layout/construct.rs
114
index c863219941e4..7ef391b42183 100644
115
--- servo/components/layout/construct.rs
116
+++ servo/components/layout/construct.rs
117
@@ -1921,7 +1921,7 @@ impl Legalizer {
118
     /// true for anonymous block children of flex flows.
119
     fn try_to_add_child(&mut self, context: &SharedStyleContext, parent: &mut FlowRef, child: &mut FlowRef)
120
                         -> bool {
121
-        let mut parent = self.stack.last_mut().unwrap_or(parent);
122
+        let parent = self.stack.last_mut().unwrap_or(parent);
123
         let (parent_class, child_class) = (parent.class(), child.class());
124
         match (parent_class, child_class) {
125
             (FlowClass::TableWrapper, FlowClass::Table) |
126
@@ -1962,7 +1962,7 @@ impl Legalizer {
127
                     } else {
128
                         IS_BLOCK_FLEX_ITEM
129
                     };
130
-                    let mut block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
131
+                    let block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
132
                     block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
133
                     block.fragment.flags.insert(flag);
134
                 }
135
@@ -1979,7 +1979,7 @@ impl Legalizer {
136
                     } else {
137
                         IS_BLOCK_FLEX_ITEM
138
                     };
139
-                    let mut block = FlowRef::deref_mut(child).as_mut_block();
140
+                    let block = FlowRef::deref_mut(child).as_mut_block();
141
                     block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
142
                     block.fragment.flags.insert(flag);
143
                 }
144
diff --git servo/components/layout/display_list_builder.rs servo/components/layout/display_list_builder.rs
145
index f8b26899b57d..783574afd2a3 100644
146
--- servo/components/layout/display_list_builder.rs
147
+++ servo/components/layout/display_list_builder.rs
148
@@ -2718,7 +2718,7 @@ impl InlineFlowDisplayListBuilding for InlineFlow {
149
         self.base.scroll_root_id = Some(state.current_scroll_root_id);
150
         self.base.clip = state.clip_stack.last().cloned().unwrap_or_else(max_rect);
151
 
152
-        for mut fragment in self.fragments.fragments.iter_mut() {
153
+        for fragment in self.fragments.fragments.iter_mut() {
154
             let previous_containing_block_scroll_root_id = state.containing_block_scroll_root_id;
155
             if establishes_containing_block_for_absolute(fragment.style.get_box().position) {
156
                 state.containing_block_scroll_root_id = state.current_scroll_root_id;
157
diff --git servo/components/layout/flex.rs servo/components/layout/flex.rs
158
index 353c939f58b9..d79580f8cd0d 100644
159
--- servo/components/layout/flex.rs
160
+++ servo/components/layout/flex.rs
161
@@ -415,7 +415,7 @@ impl FlexFlow {
162
 
163
         let items = &mut self.items[start..];
164
         let mut children = self.block_flow.base.children.random_access_mut();
165
-        for mut item in items {
166
+        for item in items {
167
             let kid = children.get(item.index);
168
             item.init_sizes(kid, container_size, self.main_mode);
169
             let outer_main_size = item.outer_main_size(kid, self.main_mode);
170
@@ -607,7 +607,7 @@ impl FlexFlow {
171
 
172
             let mut children = self.block_flow.base.children.random_access_mut();
173
             for item in items.iter_mut() {
174
-                let mut block = children.get(item.index).as_mut_block();
175
+                let block = children.get(item.index).as_mut_block();
176
 
177
                 block.base.block_container_writing_mode = container_mode;
178
                 block.base.block_container_inline_size = inline_size;
179
@@ -659,7 +659,7 @@ impl FlexFlow {
180
 
181
         let mut children = self.block_flow.base.children.random_access_mut();
182
         for item in &mut self.items {
183
-            let mut base = flow::mut_base(children.get(item.index));
184
+            let base = flow::mut_base(children.get(item.index));
185
             if !self.main_reverse {
186
                 base.position.start.b = cur_b;
187
                 cur_b = cur_b + base.position.size.block;
188
diff --git servo/components/layout/inline.rs servo/components/layout/inline.rs
189
index d5813d9bea22..10e091c3c66d 100644
190
--- servo/components/layout/inline.rs
191
+++ servo/components/layout/inline.rs
192
@@ -435,7 +435,7 @@ impl LineBreaker {
193
             return
194
         }
195
         let last_fragment_index = self.pending_line.range.end() - FragmentIndex(1);
196
-        let mut fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
197
+        let fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
198
 
199
         let old_fragment_inline_size = fragment.border_box.size.inline;
200
 
201
@@ -1047,7 +1047,7 @@ impl InlineFlow {
202
         let space_per_expansion_opportunity = slack_inline_size / expansion_opportunities as i32;
203
         for fragment_index in line.range.each_index() {
204
             let fragment = fragments.get_mut(fragment_index.to_usize());
205
-            let mut scanned_text_fragment_info = match fragment.specific {
206
+            let scanned_text_fragment_info = match fragment.specific {
207
                 SpecificFragmentInfo::ScannedText(ref mut info) if !info.range.is_empty() => info,
208
                 _ => continue
209
             };
210
diff --git servo/components/layout/sequential.rs servo/components/layout/sequential.rs
211
index f6f8ce429e4f..4986ebb6c852 100644
212
--- servo/components/layout/sequential.rs
213
+++ servo/components/layout/sequential.rs
214
@@ -133,7 +133,7 @@ pub fn store_overflow(layout_context: &LayoutContext, flow: &mut Flow) {
215
         return;
216
     }
217
 
218
-    for mut kid in flow::mut_base(flow).child_iter_mut() {
219
+    for kid in flow::mut_base(flow).child_iter_mut() {
220
         store_overflow(layout_context, kid);
221
     }
222
 
223
diff --git servo/components/layout/table_cell.rs servo/components/layout/table_cell.rs
224
index 7ef02e28db65..fd807989b463 100644
225
--- servo/components/layout/table_cell.rs
226
+++ servo/components/layout/table_cell.rs
227
@@ -136,7 +136,7 @@ impl TableCellFlow {
228
         }
229
 
230
         for kid in flow::mut_base(self).children.iter_mut() {
231
-            let mut kid_base = flow::mut_base(kid);
232
+            let kid_base = flow::mut_base(kid);
233
             if !kid_base.flags.contains(IS_ABSOLUTELY_POSITIONED) {
234
                 kid_base.position.start.b += offset
235
             }
236
diff --git servo/components/layout/text.rs servo/components/layout/text.rs
237
index 6e1c7b2a43a1..9a207a2bb84e 100644
238
--- servo/components/layout/text.rs
239
+++ servo/components/layout/text.rs
240
@@ -460,7 +460,7 @@ fn split_first_fragment_at_newline_if_necessary(fragments: &mut LinkedList<Fragm
241
     }
242
 
243
     let new_fragment = {
244
-        let mut first_fragment = fragments.front_mut().unwrap();
245
+        let first_fragment = fragments.front_mut().unwrap();
246
         let string_before;
247
         let selection_before;
248
         {
249
diff --git servo/components/net/cookie_storage.rs servo/components/net/cookie_storage.rs
250
index f255f57b56d2..b3147ef4dd32 100644
251
--- servo/components/net/cookie_storage.rs
252
+++ servo/components/net/cookie_storage.rs
253
@@ -103,7 +103,7 @@ impl CookieStorage {
254
 
255
         // Step 12
256
         let domain = reg_host(&cookie.cookie.domain().as_ref().unwrap_or(&""));
257
-        let mut cookies = self.cookies_map.entry(domain).or_insert(vec![]);
258
+        let cookies = self.cookies_map.entry(domain).or_insert(vec![]);
259
 
260
         if cookies.len() == self.max_per_host {
261
             let old_len = cookies.len();
262
diff --git servo/components/profile/heartbeats.rs servo/components/profile/heartbeats.rs
263
index 4661dad61836..0d474fe3a111 100644
264
--- servo/components/profile/heartbeats.rs
265
+++ servo/components/profile/heartbeats.rs
266
@@ -33,7 +33,7 @@ pub fn cleanup() {
267
         )
268
     );
269
     if let Some(mut hbs) = hbs_opt_box {
270
-        for (_, mut v) in hbs.iter_mut() {
271
+        for (_, v) in hbs.iter_mut() {
272
             // log any remaining heartbeat records before dropping
273
             log_heartbeat_records(v);
274
         }
275
@@ -65,7 +65,7 @@ pub fn maybe_heartbeat(category: &ProfilerCategory,
276
                 if !(*hbs_ptr).contains_key(category) {
277
                     maybe_create_heartbeat(&mut (*hbs_ptr), category.clone());
278
                 }
279
-                if let Some(mut h) = (*hbs_ptr).get_mut(category) {
280
+                if let Some(h) = (*hbs_ptr).get_mut(category) {
281
                     (*h).heartbeat(0, 1, start_time, end_time, start_energy, end_energy);
282
                 }
283
             }
284
diff --git servo/components/script/dom/bindings/js.rs servo/components/script/dom/bindings/js.rs
285
index 975ddeda13b0..abfd9f47eff1 100644
286
--- servo/components/script/dom/bindings/js.rs
287
+++ servo/components/script/dom/bindings/js.rs
288
@@ -469,7 +469,7 @@ impl RootCollection {
289
     /// Start tracking a stack-based root
290
     unsafe fn root(&self, untracked_reflector: *const Reflector) {
291
         debug_assert!(thread_state::get().is_script());
292
-        let mut roots = &mut *self.roots.get();
293
+        let roots = &mut *self.roots.get();
294
         roots.push(untracked_reflector);
295
         assert!(!(*untracked_reflector).get_jsobject().is_null())
296
     }
297
@@ -479,7 +479,7 @@ impl RootCollection {
298
         assert!(!tracked_reflector.is_null());
299
         assert!(!(*tracked_reflector).get_jsobject().is_null());
300
         debug_assert!(thread_state::get().is_script());
301
-        let mut roots = &mut *self.roots.get();
302
+        let roots = &mut *self.roots.get();
303
         match roots.iter().rposition(|r| *r == tracked_reflector) {
304
             Some(idx) => {
305
                 roots.remove(idx);
306
diff --git servo/components/script/dom/cssstyledeclaration.rs servo/components/script/dom/cssstyledeclaration.rs
307
index 0732c9af9e45..ddf085b34913 100644
308
--- servo/components/script/dom/cssstyledeclaration.rs
309
+++ servo/components/script/dom/cssstyledeclaration.rs
310
@@ -238,7 +238,7 @@ impl CSSStyleDeclaration {
311
             return Err(Error::NoModificationAllowed);
312
         }
313
 
314
-        self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
315
+        self.owner.mutate_associated_block(|pdb, changed| {
316
             if value.is_empty() {
317
                 // Step 3
318
                 *changed = pdb.remove_property(&id);
319
@@ -360,7 +360,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
320
             _ => return Ok(()),
321
         };
322
 
323
-        self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
324
+        self.owner.mutate_associated_block(|pdb, changed| {
325
             // Step 5 & 6
326
             *changed = pdb.set_importance(&id, importance);
327
         });
328
@@ -388,7 +388,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
329
         };
330
 
331
         let mut string = String::new();
332
-        self.owner.mutate_associated_block(|mut pdb, mut changed| {
333
+        self.owner.mutate_associated_block(|pdb, changed| {
334
             pdb.property_value_to_css(&id, &mut string).unwrap();
335
             *changed = pdb.remove_property(&id);
336
         });
337
@@ -438,7 +438,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
338
         }
339
 
340
         let quirks_mode = window.Document().quirks_mode();
341
-        self.owner.mutate_associated_block(|mut pdb, mut _changed| {
342
+        self.owner.mutate_associated_block(|pdb, _changed| {
343
             // Step 3
344
             *pdb = parse_style_attribute(&value,
345
                                          &self.owner.base_url(),
346
diff --git servo/components/script/dom/cssstylerule.rs servo/components/script/dom/cssstylerule.rs
347
index ea121ef900a9..12e9cdcc8694 100644
348
--- servo/components/script/dom/cssstylerule.rs
349
+++ servo/components/script/dom/cssstylerule.rs
350
@@ -99,7 +99,7 @@ impl CSSStyleRuleMethods for CSSStyleRule {
351
         if let Ok(mut s) = SelectorList::parse(&parser, &mut css_parser) {
352
             // This mirrors what we do in CSSStyleOwner::mutate_associated_block.
353
             let mut guard = self.cssrule.shared_lock().write();
354
-            let mut stylerule = self.stylerule.write_with(&mut guard);
355
+            let stylerule = self.stylerule.write_with(&mut guard);
356
             mem::swap(&mut stylerule.selectors, &mut s);
357
             // It seems like we will want to avoid having to invalidate all
358
             // stylesheets eventually!
359
diff --git servo/components/script/dom/document.rs servo/components/script/dom/document.rs
360
index 90ea06fbe7b4..71bb02eaa364 100644
361
--- servo/components/script/dom/document.rs
362
+++ servo/components/script/dom/document.rs
363
@@ -633,7 +633,7 @@ impl Document {
364
         // reset_form_owner_for_listeners -> reset_form_owner -> GetElementById
365
         {
366
             let mut id_map = self.id_map.borrow_mut();
367
-            let mut elements = id_map.entry(id.clone()).or_insert(Vec::new());
368
+            let elements = id_map.entry(id.clone()).or_insert(Vec::new());
369
             elements.insert_pre_order(element, root.r().upcast::<Node>());
370
         }
371
         self.reset_form_owner_for_listeners(&id);
372
@@ -642,7 +642,7 @@ impl Document {
373
     pub fn register_form_id_listener<T: ?Sized + FormControl>(&self, id: DOMString, listener: &T) {
374
         let mut map = self.form_id_listener_map.borrow_mut();
375
         let listener = listener.to_element();
376
-        let mut set = map.entry(Atom::from(id)).or_insert(HashSet::new());
377
+        let set = map.entry(Atom::from(id)).or_insert(HashSet::new());
378
         set.insert(JS::from_ref(listener));
379
     }
380
 
381
@@ -1572,7 +1572,7 @@ impl Document {
382
     /// https://html.spec.whatwg.org/multipage/#dom-window-cancelanimationframe
383
     pub fn cancel_animation_frame(&self, ident: u32) {
384
         let mut list = self.animation_frame_list.borrow_mut();
385
-        if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == ident) {
386
+        if let Some(pair) = list.iter_mut().find(|pair| pair.0 == ident) {
387
             pair.1 = None;
388
         }
389
     }
390
@@ -2399,7 +2399,7 @@ impl Document {
391
         if entry.snapshot.is_none() {
392
             entry.snapshot = Some(Snapshot::new(el.html_element_in_html_document()));
393
         }
394
-        let mut snapshot = entry.snapshot.as_mut().unwrap();
395
+        let snapshot = entry.snapshot.as_mut().unwrap();
396
         if snapshot.state.is_none() {
397
             snapshot.state = Some(el.state());
398
         }
399
@@ -2426,7 +2426,7 @@ impl Document {
400
             entry.hint.insert(RESTYLE_SELF);
401
         }
402
 
403
-        let mut snapshot = entry.snapshot.as_mut().unwrap();
404
+        let snapshot = entry.snapshot.as_mut().unwrap();
405
         if attr.local_name() == &local_name!("id") {
406
             snapshot.id_changed = true;
407
         } else if attr.local_name() == &local_name!("class") {
408
@@ -4028,7 +4028,7 @@ impl PendingInOrderScriptVec {
409
 
410
     fn loaded(&self, element: &HTMLScriptElement, result: ScriptResult) {
411
         let mut scripts = self.scripts.borrow_mut();
412
-        let mut entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
413
+        let entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
414
         entry.loaded(result);
415
     }
416
 
417
diff --git servo/components/script/dom/medialist.rs servo/components/script/dom/medialist.rs
418
index 0064d0445095..ae20f5aa0422 100644
419
--- servo/components/script/dom/medialist.rs
420
+++ servo/components/script/dom/medialist.rs
421
@@ -63,7 +63,7 @@ impl MediaListMethods for MediaList {
422
     // https://drafts.csswg.org/cssom/#dom-medialist-mediatext
423
     fn SetMediaText(&self, value: DOMString) {
424
         let mut guard = self.shared_lock().write();
425
-        let mut media_queries = self.media_queries.write_with(&mut guard);
426
+        let media_queries = self.media_queries.write_with(&mut guard);
427
         // Step 2
428
         if value.is_empty() {
429
             // Step 1
430
@@ -154,7 +154,7 @@ impl MediaListMethods for MediaList {
431
         // Step 3
432
         let m_serialized = m.unwrap().to_css_string();
433
         let mut guard = self.shared_lock().write();
434
-        let mut media_list = self.media_queries.write_with(&mut guard);
435
+        let media_list = self.media_queries.write_with(&mut guard);
436
         let new_vec = media_list.media_queries.drain(..)
437
                                 .filter(|q| m_serialized != q.to_css_string())
438
                                 .collect();
439
diff --git servo/components/script/dom/range.rs servo/components/script/dom/range.rs
440
index fa849a0fc1a2..1e65caedc9dd 100644
441
--- servo/components/script/dom/range.rs
442
+++ servo/components/script/dom/range.rs
443
@@ -1049,7 +1049,7 @@ impl WeakRangeVec {
444
         let offset = context.index();
445
         let parent = context.parent;
446
         unsafe {
447
-            let mut ranges = &mut *self.cell.get();
448
+            let ranges = &mut *self.cell.get();
449
 
450
             ranges.update(|entry| {
451
                 let range = entry.root().unwrap();
452
@@ -1076,7 +1076,7 @@ impl WeakRangeVec {
453
         }
454
 
455
         unsafe {
456
-            let mut ranges = &mut *self.cell.get();
457
+            let ranges = &mut *self.cell.get();
458
 
459
             ranges.update(|entry| {
460
                 let range = entry.root().unwrap();
461
diff --git servo/components/script/dom/servoparser/async_html.rs servo/components/script/dom/servoparser/async_html.rs
462
index 59411fda1c73..70d2008f49f6 100644
463
--- servo/components/script/dom/servoparser/async_html.rs
464
+++ servo/components/script/dom/servoparser/async_html.rs
465
@@ -568,7 +568,7 @@ impl TreeSink for Sink {
466
         }
467
         let node = self.new_parse_node();
468
         {
469
-            let mut data = self.get_parse_node_data_mut(&target.id);
470
+            let data = self.get_parse_node_data_mut(&target.id);
471
             data.contents = Some(node.clone());
472
         }
473
         self.send_op(ParseOperation::GetTemplateContents { target: target.id, contents: node.id });
474
@@ -596,7 +596,7 @@ impl TreeSink for Sink {
475
         let mut node = self.new_parse_node();
476
         node.qual_name = Some(name.clone());
477
         {
478
-            let mut node_data = self.get_parse_node_data_mut(&node.id);
479
+            let node_data = self.get_parse_node_data_mut(&node.id);
480
             node_data.is_integration_point = html_attrs.iter()
481
             .any(|attr| {
482
                 let attr_value = &String::from(attr.value.clone());
483
diff --git servo/components/script/dom/url.rs servo/components/script/dom/url.rs
484
index a02a735638fc..41de4dcc0c72 100644
485
--- servo/components/script/dom/url.rs
486
+++ servo/components/script/dom/url.rs
487
@@ -96,8 +96,8 @@ impl URL {
488
 
489
     // https://w3c.github.io/FileAPI/#dfn-createObjectURL
490
     pub fn CreateObjectURL(global: &GlobalScope, blob: &Blob) -> DOMString {
491
-        /// XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
492
-        ///      and should not be trusted. See issue https://github.com/servo/servo/issues/11722
493
+        // XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
494
+        //      and should not be trusted. See issue https://github.com/servo/servo/issues/11722
495
         let origin = get_blob_origin(&global.get_url());
496
 
497
         let id = blob.get_blob_url_id();
498
diff --git servo/components/script/dom/vrdisplay.rs servo/components/script/dom/vrdisplay.rs
499
index 3f73a577fad7..54f06fb928f2 100644
500
--- servo/components/script/dom/vrdisplay.rs
501
+++ servo/components/script/dom/vrdisplay.rs
502
@@ -268,7 +268,7 @@ impl VRDisplayMethods for VRDisplay {
503
     fn CancelAnimationFrame(&self, handle: u32) {
504
         if self.presenting.get() {
505
             let mut list = self.raf_callback_list.borrow_mut();
506
-            if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == handle) {
507
+            if let Some(pair) = list.iter_mut().find(|pair| pair.0 == handle) {
508
                 pair.1 = None;
509
             }
510
         } else {
511
diff --git servo/components/script/dom/webglrenderingcontext.rs servo/components/script/dom/webglrenderingcontext.rs
512
index 73d4ddba1b90..62c92b42785c 100644
513
--- servo/components/script/dom/webglrenderingcontext.rs
514
+++ servo/components/script/dom/webglrenderingcontext.rs
515
@@ -2434,7 +2434,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
516
         }
517
 
518
         typedarray!(in(cx) let mut pixels_data: ArrayBufferView = pixels);
519
-        let (array_type, mut data) = match { pixels_data.as_mut() } {
520
+        let (array_type, data) = match { pixels_data.as_mut() } {
521
             Ok(data) => (data.get_array_type(), data.as_mut_slice()),
522
             Err(_) => return Err(Error::Type("Not an ArrayBufferView".to_owned())),
523
         };
524
diff --git servo/components/script/dom/xmlhttprequest.rs servo/components/script/dom/xmlhttprequest.rs
525
index 6ed2dda1851f..e6652d79d706 100644
526
--- servo/components/script/dom/xmlhttprequest.rs
527
+++ servo/components/script/dom/xmlhttprequest.rs
528
@@ -627,7 +627,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
529
 
530
                 if !content_type_set {
531
                     let ct = request.headers.get_mut::<ContentType>();
532
-                    if let Some(mut ct) = ct {
533
+                    if let Some(ct) = ct {
534
                         if let Some(encoding) = encoding {
535
                             for param in &mut (ct.0).2 {
536
                                 if param.0 == MimeAttr::Charset {
537
diff --git servo/components/script/lib.rs servo/components/script/lib.rs
538
index e1a1ab592cb7..5824d6f2e490 100644
539
--- servo/components/script/lib.rs
540
+++ servo/components/script/lib.rs
541
@@ -9,7 +9,6 @@
542
 #![feature(mpsc_select)]
543
 #![feature(nonzero)]
544
 #![feature(on_unimplemented)]
545
-#![feature(option_entry)]
546
 #![feature(plugin)]
547
 #![feature(proc_macro)]
548
 #![feature(stmt_expr_attributes)]
549
diff --git servo/components/script_plugins/unrooted_must_root.rs servo/components/script_plugins/unrooted_must_root.rs
550
index 5dbd2b1a3bdd..f3f5e60ab62a 100644
551
--- servo/components/script_plugins/unrooted_must_root.rs
552
+++ servo/components/script_plugins/unrooted_must_root.rs
553
@@ -182,7 +182,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
554
         }
555
 
556
         match expr.node {
557
-            /// Trait casts from #[must_root] types are not allowed
558
+            // Trait casts from #[must_root] types are not allowed
559
             hir::ExprCast(ref subexpr, _) => require_rooted(cx, self.in_new_function, &*subexpr),
560
             // This catches assignments... the main point of this would be to catch mutable
561
             // references to `JS<T>`.
562
@@ -206,13 +206,21 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
563
     fn visit_pat(&mut self, pat: &'tcx hir::Pat) {
564
         let cx = self.cx;
565
 
566
-        if let hir::PatKind::Binding(hir::BindingMode::BindByValue(_), _, _, _) = pat.node {
567
-            let ty = cx.tables.pat_ty(pat);
568
-            if is_unrooted_ty(cx, ty, self.in_new_function) {
569
-                cx.span_lint(UNROOTED_MUST_ROOT,
570
-                            pat.span,
571
-                            &format!("Expression of type {:?} must be rooted", ty))
572
+        // We want to detect pattern bindings that move a value onto the stack.
573
+        // When "default binding modes" https://github.com/rust-lang/rust/issues/42640
574
+        // are implemented, the `Unannotated` case could cause false-positives.
575
+        // These should be fixable by adding an explicit `ref`.
576
+        match pat.node {
577
+            hir::PatKind::Binding(hir::BindingAnnotation::Unannotated, _, _, _) |
578
+            hir::PatKind::Binding(hir::BindingAnnotation::Mutable, _, _, _) => {
579
+                let ty = cx.tables.pat_ty(pat);
580
+                if is_unrooted_ty(cx, ty, self.in_new_function) {
581
+                    cx.span_lint(UNROOTED_MUST_ROOT,
582
+                                pat.span,
583
+                                &format!("Expression of type {:?} must be rooted", ty))
584
+                }
585
             }
586
+            _ => {}
587
         }
588
 
589
         visit::walk_pat(self, pat);
590
diff --git servo/components/selectors/matching.rs servo/components/selectors/matching.rs
591
index 7bd9814d26fb..8f6b2fa6aa54 100644
592
--- servo/components/selectors/matching.rs
593
+++ servo/components/selectors/matching.rs
594
@@ -458,7 +458,7 @@ where
595
 /// Matches a complex selector.
596
 pub fn matches_complex_selector<E, F>(mut iter: SelectorIter<E::Impl>,
597
                                       element: &E,
598
-                                      mut context: &mut LocalMatchingContext<E::Impl>,
599
+                                      context: &mut LocalMatchingContext<E::Impl>,
600
                                       flags_setter: &mut F)
601
                                       -> bool
602
     where E: Element,
603
diff --git servo/components/selectors/parser.rs servo/components/selectors/parser.rs
604
index 490399ce38ce..6b2c1f2b4e86 100644
605
--- servo/components/selectors/parser.rs
606
+++ servo/components/selectors/parser.rs
607
@@ -1464,7 +1464,7 @@ fn parse_negation<'i, 't, P, E, Impl>(parser: &P,
608
 fn parse_compound_selector<'i, 't, P, E, Impl>(
609
     parser: &P,
610
     input: &mut CssParser<'i, 't>,
611
-    mut builder: &mut SelectorBuilder<Impl>)
612
+    builder: &mut SelectorBuilder<Impl>)
613
     -> Result<bool, ParseError<'i, SelectorParseError<'i, E>>>
614
     where P: Parser<'i, Impl=Impl, Error=E>, Impl: SelectorImpl
615
 {
616
diff --git servo/components/style/invalidation/element/invalidator.rs servo/components/style/invalidation/element/invalidator.rs
617
index 848c5cd13dc8..b8510ba3169b 100644
618
--- servo/components/style/invalidation/element/invalidator.rs
619
+++ servo/components/style/invalidation/element/invalidator.rs
620
@@ -154,7 +154,7 @@ impl<'a, 'b: 'a, E> TreeStyleInvalidator<'a, 'b, E>
621
             trace!(" > visitedness change, force subtree restyle");
622
             // We can't just return here because there may also be attribute
623
             // changes as well that imply additional hints.
624
-            let mut data = self.data.as_mut().unwrap();
625
+            let data = self.data.as_mut().unwrap();
626
             data.restyle.hint.insert(RestyleHint::restyle_subtree());
627
         }
628
 
629
diff --git servo/components/style/matching.rs servo/components/style/matching.rs
630
index b62bc54bf768..f58d7cd123e6 100644
631
--- servo/components/style/matching.rs
632
+++ servo/components/style/matching.rs
633
@@ -440,7 +440,7 @@ pub trait MatchMethods : TElement {
634
     fn finish_restyle(
635
         &self,
636
         context: &mut StyleContext<Self>,
637
-        mut data: &mut ElementData,
638
+        data: &mut ElementData,
639
         mut new_styles: ElementStyles,
640
         important_rules_changed: bool,
641
     ) -> ChildCascadeRequirement {
642
diff --git servo/components/style/properties/properties.mako.rs servo/components/style/properties/properties.mako.rs
643
index d98e173db5ba..81ff00fb6d5e 100644
644
--- servo/components/style/properties/properties.mako.rs
645
+++ servo/components/style/properties/properties.mako.rs
646
@@ -3364,7 +3364,7 @@ pub fn modify_border_style_for_inline_sides(style: &mut Arc<ComputedValues>,
647
                 return;
648
             }
649
         }
650
-        let mut style = Arc::make_mut(style);
651
+        let style = Arc::make_mut(style);
652
         let border = Arc::make_mut(&mut style.border);
653
         match side {
654
             PhysicalSide::Left => {
655
diff --git servo/components/style/style_adjuster.rs servo/components/style/style_adjuster.rs
656
index 366641ebe0bc..6e51fa74072a 100644
657
--- servo/components/style/style_adjuster.rs
658
+++ servo/components/style/style_adjuster.rs
659
@@ -269,7 +269,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
660
 
661
         if overflow_x != original_overflow_x ||
662
            overflow_y != original_overflow_y {
663
-            let mut box_style = self.style.mutate_box();
664
+            let box_style = self.style.mutate_box();
665
             box_style.set_overflow_x(overflow_x);
666
             box_style.set_overflow_y(overflow_y);
667
         }
668
diff --git servo/components/style/style_resolver.rs servo/components/style/style_resolver.rs
669
index cf512c4fbdd2..3fc1d57cc8f7 100644
670
--- servo/components/style/style_resolver.rs
671
+++ servo/components/style/style_resolver.rs
672
@@ -247,7 +247,7 @@ where
673
                         Some(&*primary_style.style)
674
                     };
675
 
676
-                for (i, mut inputs) in pseudo_array.iter_mut().enumerate() {
677
+                for (i, inputs) in pseudo_array.iter_mut().enumerate() {
678
                     if let Some(inputs) = inputs.take() {
679
                         let pseudo = PseudoElement::from_eager_index(i);
680
                         pseudo_styles.set(
681
diff --git servo/components/style/stylesheets/rule_list.rs servo/components/style/stylesheets/rule_list.rs
682
index 82e78015400d..14b3dc5e7696 100644
683
--- servo/components/style/stylesheets/rule_list.rs
684
+++ servo/components/style/stylesheets/rule_list.rs
685
@@ -150,7 +150,7 @@ impl CssRulesHelpers for RawOffsetArc<Locked<CssRules>> {
686
 
687
         {
688
             let mut write_guard = lock.write();
689
-            let mut rules = self.write_with(&mut write_guard);
690
+            let rules = self.write_with(&mut write_guard);
691
             // Step 5
692
             // Computes the maximum allowed parser state at a given index.
693
             let rev_state = rules.0.get(index).map_or(State::Body, CssRule::rule_state);
694
diff --git servo/components/style/stylesheets/rule_parser.rs servo/components/style/stylesheets/rule_parser.rs
695
index 007d7e11026e..f0d224e498a7 100644
696
--- servo/components/style/stylesheets/rule_parser.rs
697
+++ servo/components/style/stylesheets/rule_parser.rs
698
@@ -209,7 +209,7 @@ impl<'a, 'i> AtRuleParser<'i> for TopLevelRuleParser<'a> {
699
                 let id = register_namespace(&url)
700
                     .map_err(|()| StyleParseError::UnspecifiedError)?;
701
 
702
-                let mut namespaces = self.namespaces.as_mut().unwrap();
703
+                let namespaces = self.namespaces.as_mut().unwrap();
704
 
705
                 let opt_prefix = if let Ok(prefix) = prefix_result {
706
                     let prefix = Prefix::from(prefix.as_ref());
707
diff --git servo/components/style/stylesheets/rules_iterator.rs servo/components/style/stylesheets/rules_iterator.rs
708
index 95a3ab8b3885..65e1b637ae52 100644
709
--- servo/components/style/stylesheets/rules_iterator.rs
710
+++ servo/components/style/stylesheets/rules_iterator.rs
711
@@ -70,7 +70,7 @@ impl<'a, 'b, C> Iterator for RulesIterator<'a, 'b, C>
712
 
713
             let rule;
714
             let sub_iter = {
715
-                let mut nested_iter = self.stack.last_mut().unwrap();
716
+                let nested_iter = self.stack.last_mut().unwrap();
717
                 rule = match nested_iter.next() {
718
                     Some(r) => r,
719
                     None => {
720
diff --git servo/components/webdriver_server/lib.rs servo/components/webdriver_server/lib.rs
721
index bd2f667f9892..28a4885f0d41 100644
722
--- servo/components/webdriver_server/lib.rs
723
+++ servo/components/webdriver_server/lib.rs
724
@@ -702,7 +702,7 @@ impl Handler {
725
     fn handle_set_timeouts(&mut self,
726
                            parameters: &TimeoutsParameters)
727
                            -> WebDriverResult<WebDriverResponse> {
728
-        let mut session = self.session
729
+        let session = self.session
730
             .as_mut()
731
             .ok_or(WebDriverError::new(ErrorStatus::SessionNotCreated, ""))?;
732
 
733
diff --git servo/rust-commit-hash servo/rust-commit-hash
734
index d4f08fe97644..a08d23cd1a71 100644
735
--- servo/rust-commit-hash
736
+++ servo/rust-commit-hash
737
@@ -1 +1 @@
738
-599be0d18f4c6ddf36366d2a5a2ca6dc65886896
739
+13d94d5fa8129a34f5c77a1bcd76983f5aed2434
740
diff --git servo/tests/unit/style/stylist.rs servo/tests/unit/style/stylist.rs
741
index da9a9478957a..52067b501788 100644
742
--- servo/tests/unit/style/stylist.rs
743
+++ servo/tests/unit/style/stylist.rs
744
@@ -51,19 +51,6 @@ fn get_mock_rules(css_selectors: &[&str]) -> (Vec<Vec<Rule>>, SharedRwLock) {
745
     }).collect(), shared_lock)
746
 }
747
 
748
-fn get_mock_map(selectors: &[&str]) -> (SelectorMap<Rule>, SharedRwLock) {
749
-    let mut map = SelectorMap::<Rule>::new();
750
-    let (selector_rules, shared_lock) = get_mock_rules(selectors);
751
-
752
-    for rules in selector_rules.into_iter() {
753
-        for rule in rules.into_iter() {
754
-            map.insert(rule, QuirksMode::NoQuirks)
755
-        }
756
-    }
757
-
758
-    (map, shared_lock)
759
-}
760
-
761
 fn parse_selectors(selectors: &[&str]) -> Vec<Selector<SelectorImpl>> {
762
     selectors.iter()
763
              .map(|x| SelectorParser::parse_author_origin_no_namespace(x).unwrap().0
(-)a/www/firefox/files/patch-servo18126 (-232 lines)
Removed Link Here
1
commit f0acf27d189d
2
Author: Simon Sapin <simon.sapin@exyr.org>
3
Date:   Thu Aug 17 11:05:32 2017 -0500
4
5
    servo: Merge #18126 - geckolib: Fix some warnings (treated as error) new in Rust Nigthly (from servo:glow-fox); r=emilio
6
    
7
    Source-Repo: https://github.com/servo/servo
8
    Source-Revision: cc86ca2bcdec5e89ee5279085ea38db63ef41af9
9
    
10
    --HG--
11
    extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
12
    extra : subtree_revision : 0586dbc81f1411c89821605a6dae4ebd0af8f0d5
13
---
14
 servo/components/style/gecko/conversions.rs            |  2 +-
15
 servo/components/style/gecko/wrapper.rs                |  2 +-
16
 .../style/gecko_bindings/sugar/ns_t_array.rs           |  4 ++--
17
 servo/components/style/properties/gecko.mako.rs        | 18 +++++++++---------
18
 servo/components/style/style_adjuster.rs               |  4 ++--
19
 servo/ports/geckolib/glue.rs                           | 12 ++++++------
20
 6 files changed, 21 insertions(+), 21 deletions(-)
21
22
diff --git servo/components/style/gecko/conversions.rs servo/components/style/gecko/conversions.rs
23
index 8f3fb6bf2d0f..51015997c5c1 100644
24
--- servo/components/style/gecko/conversions.rs
25
+++ servo/components/style/gecko/conversions.rs
26
@@ -348,7 +348,7 @@ impl nsStyleImage {
27
             // NB: stops are guaranteed to be none in the gecko side by
28
             // default.
29
 
30
-            let mut gecko_stop = unsafe {
31
+            let gecko_stop = unsafe {
32
                 &mut (*gecko_gradient).mStops[index]
33
             };
34
             let mut coord = nsStyleCoord::null();
35
diff --git servo/components/style/gecko/wrapper.rs servo/components/style/gecko/wrapper.rs
36
index 034dd94590e2..c402ddaf15bd 100644
37
--- servo/components/style/gecko/wrapper.rs
38
+++ servo/components/style/gecko/wrapper.rs
39
@@ -424,7 +424,7 @@ impl<'lb> GeckoXBLBinding<'lb> {
40
         }
41
     }
42
 
43
-    fn each_xbl_stylist<F>(self, mut f: &mut F)
44
+    fn each_xbl_stylist<F>(self, f: &mut F)
45
     where
46
         F: FnMut(&Stylist),
47
     {
48
diff --git servo/components/style/gecko_bindings/sugar/ns_t_array.rs servo/components/style/gecko_bindings/sugar/ns_t_array.rs
49
index 6bc389702f54..068e10ddea1b 100644
50
--- servo/components/style/gecko_bindings/sugar/ns_t_array.rs
51
+++ servo/components/style/gecko_bindings/sugar/ns_t_array.rs
52
@@ -90,7 +90,7 @@ impl<T> nsTArray<T> {
53
         // this can leak
54
         debug_assert!(len >= self.len() as u32);
55
         self.ensure_capacity(len as usize);
56
-        let mut header = self.header_mut();
57
+        let header = self.header_mut();
58
         header.mLength = len;
59
     }
60
 
61
@@ -99,7 +99,7 @@ impl<T> nsTArray<T> {
62
     /// This will not leak since it only works on POD types (and thus doesn't assert)
63
     pub unsafe fn set_len_pod(&mut self, len: u32) where T: Copy {
64
         self.ensure_capacity(len as usize);
65
-        let mut header = unsafe { self.header_mut() };
66
+        let header = unsafe { self.header_mut() };
67
         header.mLength = len;
68
     }
69
 }
70
diff --git servo/components/style/properties/gecko.mako.rs servo/components/style/properties/gecko.mako.rs
71
index 9a2ab2135fc5..bc41ef139af5 100644
72
--- servo/components/style/properties/gecko.mako.rs
73
+++ servo/components/style/properties/gecko.mako.rs
74
@@ -4136,14 +4136,14 @@ fn static_assert() {
75
                     fn init_shadow(filter: &mut nsStyleFilter) -> &mut nsCSSShadowArray {
76
                         unsafe {
77
                             let ref mut union = filter.__bindgen_anon_1;
78
-                            let mut shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
79
+                            let shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
80
                             *shadow_array = Gecko_NewCSSShadowArray(1);
81
 
82
                             &mut **shadow_array
83
                         }
84
                     }
85
 
86
-                    let mut gecko_shadow = init_shadow(gecko_filter);
87
+                    let gecko_shadow = init_shadow(gecko_filter);
88
                     gecko_shadow.mArray[0].set_from_simple_shadow(shadow);
89
                 },
90
                 Url(ref url) => {
91
@@ -4665,14 +4665,14 @@ fn static_assert() {
92
                     unsafe {
93
                         // We have to be very careful to avoid a copy here!
94
                         let ref mut union = ${ident}.__bindgen_anon_1;
95
-                        let mut shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
96
+                        let shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
97
                         *shape = Gecko_NewBasicShape(ty);
98
                         &mut **shape
99
                     }
100
                 }
101
                 match servo_shape {
102
                     BasicShape::Inset(inset) => {
103
-                        let mut shape = init_shape(${ident}, StyleBasicShapeType::Inset);
104
+                        let shape = init_shape(${ident}, StyleBasicShapeType::Inset);
105
                         unsafe { shape.mCoordinates.set_len(4) };
106
 
107
                         // set_len() can't call constructors, so the coordinates
108
@@ -4694,7 +4694,7 @@ fn static_assert() {
109
                         set_corners_from_radius(inset.round, &mut shape.mRadius);
110
                     }
111
                     BasicShape::Circle(circ) => {
112
-                        let mut shape = init_shape(${ident}, StyleBasicShapeType::Circle);
113
+                        let shape = init_shape(${ident}, StyleBasicShapeType::Circle);
114
                         unsafe { shape.mCoordinates.set_len(1) };
115
                         shape.mCoordinates[0].leaky_set_null();
116
                         circ.radius.to_gecko_style_coord(&mut shape.mCoordinates[0]);
117
@@ -4702,7 +4702,7 @@ fn static_assert() {
118
                         shape.mPosition = circ.position.into();
119
                     }
120
                     BasicShape::Ellipse(el) => {
121
-                        let mut shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
122
+                        let shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
123
                         unsafe { shape.mCoordinates.set_len(2) };
124
                         shape.mCoordinates[0].leaky_set_null();
125
                         el.semiaxis_x.to_gecko_style_coord(&mut shape.mCoordinates[0]);
126
@@ -4712,7 +4712,7 @@ fn static_assert() {
127
                         shape.mPosition = el.position.into();
128
                     }
129
                     BasicShape::Polygon(poly) => {
130
-                        let mut shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
131
+                        let shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
132
                         unsafe {
133
                             shape.mCoordinates.set_len(poly.coordinates.len() as u32 * 2);
134
                         }
135
@@ -4797,7 +4797,7 @@ clip-path
136
             bindings::Gecko_nsStyleSVG_SetDashArrayLength(&mut self.gecko, v.len() as u32);
137
         }
138
 
139
-        for (mut gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
140
+        for (gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
141
             match servo {
142
                 Either::First(number) => gecko.set_value(CoordDataValue::Factor(number)),
143
                 Either::Second(lop) => gecko.set(lop),
144
@@ -4885,7 +4885,7 @@ clip-path
145
         }
146
 
147
         self.gecko.mContextPropsBits = 0;
148
-        for (mut gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
149
+        for (gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
150
             if servo.0 == atom!("fill") {
151
                 self.gecko.mContextPropsBits |= structs::NS_STYLE_CONTEXT_PROPERTY_FILL as u8;
152
             } else if servo.0 == atom!("stroke") {
153
diff --git servo/components/style/style_adjuster.rs servo/components/style/style_adjuster.rs
154
index 03b15916b237..366641ebe0bc 100644
155
--- servo/components/style/style_adjuster.rs
156
+++ servo/components/style/style_adjuster.rs
157
@@ -167,7 +167,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
158
         // When 'contain: paint', update overflow from 'visible' to 'clip'.
159
         if self.style.get_box().clone_contain().contains(contain::PAINT) {
160
             if self.style.get_box().clone_overflow_x() == overflow::visible {
161
-                let mut box_style = self.style.mutate_box();
162
+                let box_style = self.style.mutate_box();
163
                 box_style.set_overflow_x(overflow::_moz_hidden_unscrollable);
164
                 box_style.set_overflow_y(overflow::_moz_hidden_unscrollable);
165
             }
166
@@ -182,7 +182,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
167
         use properties::longhands::font_style::computed_value::T as font_style;
168
         use properties::longhands::font_weight::computed_value::T as font_weight;
169
         if self.style.get_font().clone__moz_math_variant() != moz_math_variant::none {
170
-            let mut font_style = self.style.mutate_font();
171
+            let font_style = self.style.mutate_font();
172
             // Sadly we don't have a nice name for the computed value
173
             // of "font-weight: normal".
174
             font_style.set_font_weight(font_weight::normal());
175
diff --git servo/ports/geckolib/glue.rs servo/ports/geckolib/glue.rs
176
index 977728286fc3..fa09bee29553 100644
177
--- servo/ports/geckolib/glue.rs
178
+++ servo/ports/geckolib/glue.rs
179
@@ -815,7 +815,7 @@ pub extern "C" fn Servo_StyleSet_AppendStyleSheet(
180
 ) {
181
     let global_style_data = &*GLOBAL_STYLE_DATA;
182
     let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
183
-    let mut data = &mut *data;
184
+    let data = &mut *data;
185
     let guard = global_style_data.shared_lock.read();
186
     data.stylesheets.append_stylesheet(
187
         &data.stylist,
188
@@ -867,7 +867,7 @@ pub extern "C" fn Servo_StyleSet_PrependStyleSheet(
189
 ) {
190
     let global_style_data = &*GLOBAL_STYLE_DATA;
191
     let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
192
-    let mut data = &mut *data;
193
+    let data = &mut *data;
194
     let guard = global_style_data.shared_lock.read();
195
     data.stylesheets.prepend_stylesheet(
196
         &data.stylist,
197
@@ -885,7 +885,7 @@ pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
198
 ) {
199
     let global_style_data = &*GLOBAL_STYLE_DATA;
200
     let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
201
-    let mut data = &mut *data;
202
+    let data = &mut *data;
203
     let guard = global_style_data.shared_lock.read();
204
     data.stylesheets.insert_stylesheet_before(
205
         &data.stylist,
206
@@ -903,7 +903,7 @@ pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
207
 ) {
208
     let global_style_data = &*GLOBAL_STYLE_DATA;
209
     let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
210
-    let mut data = &mut *data;
211
+    let data = &mut *data;
212
     let guard = global_style_data.shared_lock.read();
213
     data.stylesheets.remove_stylesheet(
214
         &data.stylist,
215
@@ -1274,7 +1274,7 @@ pub extern "C" fn Servo_StyleRule_GetSpecificityAtIndex(
216
     specificity: *mut u64
217
 ) {
218
     read_locked_arc(rule, |rule: &StyleRule| {
219
-        let mut specificity =  unsafe { specificity.as_mut().unwrap() };
220
+        let specificity =  unsafe { specificity.as_mut().unwrap() };
221
         let index = index as usize;
222
         if index >= rule.selectors.0.len() {
223
             *specificity = 0;
224
@@ -2775,7 +2775,7 @@ pub extern "C" fn Servo_NoteExplicitHints(element: RawGeckoElementBorrowed,
225
 pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed,
226
                                        was_restyled: *mut bool) -> nsChangeHint
227
 {
228
-    let mut was_restyled =  unsafe { was_restyled.as_mut().unwrap() };
229
+    let was_restyled =  unsafe { was_restyled.as_mut().unwrap() };
230
     let element = GeckoElement(element);
231
 
232
     let damage = match element.mutate_data() {

Return to bug 222693