mirror of
https://git.FreeBSD.org/ports.git
synced 2025-02-01 10:59:55 +00:00
www/firefox: update to 57.0 (marketed as "Firefox Quantum")
Not a MFH candidate due to POLA violation per redesigned UI, broken legacy addons and auto-reviewed new addons. Changes: https://www.mozilla.org/firefox/57.0/releasenotes/ PR: 222693 Tested by: pi, tobik, TrueOS
This commit is contained in:
parent
45587e15f8
commit
eb864e519d
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=454194
@ -37,12 +37,12 @@ RUN_DEPENDS+= libxul>=45:www/libxul
|
||||
.elif ${gecko_ARGS:Mfirefox}
|
||||
|
||||
_GECKO_DEFAULT_VERSION= 52
|
||||
_GECKO_VERSIONS= 52 56
|
||||
_GECKO_VERSIONS= 52 57
|
||||
_GECKO_TYPE= firefox
|
||||
|
||||
# Dependence lines for different Firefox versions
|
||||
52_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr
|
||||
56_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox
|
||||
57_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox
|
||||
|
||||
.if exists(${LOCALBASE}/bin/firefox)
|
||||
_GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null
|
||||
|
@ -2,10 +2,10 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= firefox-i18n
|
||||
PORTVERSION= 56.0.2
|
||||
PORTVERSION= 57.0
|
||||
CATEGORIES= www
|
||||
MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \
|
||||
MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi
|
||||
MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build4/linux-i686/xpi
|
||||
PKGNAMEPREFIX=
|
||||
DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/}
|
||||
DIST_SUBDIR= xpi/${DISTNAME}
|
||||
@ -15,7 +15,7 @@ COMMENT= Localized interface for Firefox
|
||||
|
||||
EXTRACT_DEPENDS= zip:archivers/zip
|
||||
|
||||
USES= zip:infozip gecko:firefox,56,build
|
||||
USES= zip:infozip gecko:firefox,57,build
|
||||
USE_XPI= firefox
|
||||
|
||||
NO_ARCH= yes
|
||||
|
@ -1,191 +1,191 @@
|
||||
TIMESTAMP = 1508873487
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ach.xpi) = a78c4900c9dac71ea312d5ceda13987f4f8418ab078374c0e292cd30ce79aa23
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ach.xpi) = 454896
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/af.xpi) = e0ea5e99eb7cedd0c3893ae4baa3ca2af7f814bc069dcbf921069dcaba762fc6
|
||||
SIZE (xpi/firefox-i18n-56.0.2/af.xpi) = 456214
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/an.xpi) = 18e3c4e6f85fb296bd955b110ba2c6a381ba4ba8de3a0e2990bc4618f9438593
|
||||
SIZE (xpi/firefox-i18n-56.0.2/an.xpi) = 475863
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ar.xpi) = c8dcb494321e5ef34092b7555ec67147461b387803df895c30858314f0509acb
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ar.xpi) = 500711
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/as.xpi) = e77f99a72083b49e30f453d1f40ac670e42e6a637b8bb4e7c914f74b24e6b582
|
||||
SIZE (xpi/firefox-i18n-56.0.2/as.xpi) = 508237
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ast.xpi) = e4fe6028af88b67dce678e6a1215cda2c2aa0cbe76eb95947c46e08d93bb23bc
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ast.xpi) = 469157
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/az.xpi) = 5d9cd26da6e1afe41c9d032054b066a9e0a13f7cfd9701e8126147f405ae6f1a
|
||||
SIZE (xpi/firefox-i18n-56.0.2/az.xpi) = 484984
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/be.xpi) = 647318eb3b3060ba2384ecf4b4b96fb70fb54f1428c20f776d8d99f75eed5f49
|
||||
SIZE (xpi/firefox-i18n-56.0.2/be.xpi) = 531385
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/bg.xpi) = a844374d3453747f30382acf6019d379596f812f68d49ba7245a18993cea5ffb
|
||||
SIZE (xpi/firefox-i18n-56.0.2/bg.xpi) = 528789
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/bn-BD.xpi) = caafe8df84189999ed513e4f88e91f8b8c35e8a1d13fa54bd54f3a0654ec1f02
|
||||
SIZE (xpi/firefox-i18n-56.0.2/bn-BD.xpi) = 542772
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/bn-IN.xpi) = 4278938cf3be47f2e7a865a2221c10f383b8c7930f71b2bd0c4ce09c1ff8a3c8
|
||||
SIZE (xpi/firefox-i18n-56.0.2/bn-IN.xpi) = 534450
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/br.xpi) = 65e8b0a3e55e99701e0ecfb9cdb0775afc0946f23eab34d4ada4f0d973d2076d
|
||||
SIZE (xpi/firefox-i18n-56.0.2/br.xpi) = 464256
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/bs.xpi) = fef54b5ba9231eaedbe216c1f9e7c86d831ed032d1fcd6e5dd15a06619ad69ac
|
||||
SIZE (xpi/firefox-i18n-56.0.2/bs.xpi) = 472256
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ca.xpi) = 11dc866f5f2a16622fa45c36c174150293e123bfd970890e4403ed224d6e4eb6
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ca.xpi) = 480364
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/cak.xpi) = 1ed05bcdb3977850ae21847f70122111ff459cc6669130ec9db5ccf11dde117f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/cak.xpi) = 489507
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/cs.xpi) = 1191121195a77ec1315ec379b307819f1ce6b15bfa1bb9fc31ec0148cb08bcf5
|
||||
SIZE (xpi/firefox-i18n-56.0.2/cs.xpi) = 485090
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/cy.xpi) = a04d0d37f46b89d2aba85eebc1524daba41b3a6db468e61a924e83b2814d8845
|
||||
SIZE (xpi/firefox-i18n-56.0.2/cy.xpi) = 466288
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/da.xpi) = 3822d31c6b83317216f5124d603d9a8b8180a06d2407426dd90b71891c155f0c
|
||||
SIZE (xpi/firefox-i18n-56.0.2/da.xpi) = 460091
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/de.xpi) = ee02b96baf96be7e69ff12f06576a270e48ca454cc8f93c51070ebdd9c2a03f7
|
||||
SIZE (xpi/firefox-i18n-56.0.2/de.xpi) = 473856
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/dsb.xpi) = 227588519f2ae092f6cbf0531287c5c36b7037c3355cc0d9e0e024d4e84472e3
|
||||
SIZE (xpi/firefox-i18n-56.0.2/dsb.xpi) = 489897
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/el.xpi) = ace7c78e28297ea4dcc90a2b8c2881afc812a2416ae4cdba499749349bc2d3f3
|
||||
SIZE (xpi/firefox-i18n-56.0.2/el.xpi) = 554120
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/en-GB.xpi) = 55fb37a478f2521b1b1543498d373ade08126c3ac71127bfbde504d8a3f95e16
|
||||
SIZE (xpi/firefox-i18n-56.0.2/en-GB.xpi) = 447375
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/en-US.xpi) = 618f390c9a36aed65860d6ad20444c9c6224471d0a394de92a21262291327ff2
|
||||
SIZE (xpi/firefox-i18n-56.0.2/en-US.xpi) = 446951
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/en-ZA.xpi) = 2fa254426d945152e9eb01cc02a8f86415fa5425aefed9825bd1dea9b6d0b76a
|
||||
SIZE (xpi/firefox-i18n-56.0.2/en-ZA.xpi) = 445916
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/eo.xpi) = f1d9e7acc5bb36a2acfb1659ad0857e5d2c9800836d096f41ceb87977a6e7377
|
||||
SIZE (xpi/firefox-i18n-56.0.2/eo.xpi) = 468952
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/es-AR.xpi) = 12f34c15fb4cf11e5c007ea19a97f91370a66e192cc3c0aed5405659be36eaa3
|
||||
SIZE (xpi/firefox-i18n-56.0.2/es-AR.xpi) = 475449
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/es-CL.xpi) = 5239da279a01681c00ece001d1477abba04b41d50fd442e761140ba93b68870f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/es-CL.xpi) = 479922
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/es-ES.xpi) = 98b7422e833226916953ac89201652f406f84c805d293ab949adae475fc03a7c
|
||||
SIZE (xpi/firefox-i18n-56.0.2/es-ES.xpi) = 365631
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/es-MX.xpi) = 9516c169b883f8208c996f461221e9bb917e2e56c1f67d01f67026a8f5de3a1b
|
||||
SIZE (xpi/firefox-i18n-56.0.2/es-MX.xpi) = 482565
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/et.xpi) = dff5cbe5b933511fc10c1209dde31c45a521c9e687d909f4915eaf3eac8a3ad3
|
||||
SIZE (xpi/firefox-i18n-56.0.2/et.xpi) = 462104
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/eu.xpi) = d47fe44fcab9328102334596678fe89289d8de44cd9018e13e1bcc70823ec6ec
|
||||
SIZE (xpi/firefox-i18n-56.0.2/eu.xpi) = 467884
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/fa.xpi) = 8f25e71eb0ee9ad9e90d9948012713013ee03b6fe1b3837b1d903c5102be0a93
|
||||
SIZE (xpi/firefox-i18n-56.0.2/fa.xpi) = 522909
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ff.xpi) = b8416ca244cb8c99744dc3c6daa55d893754ed051ea9731f57b49edc2f0e18f1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ff.xpi) = 463098
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/fi.xpi) = 1c6ecc0d72a500f5a77a8fdde5e288ce2c578bc1b1de3d1a062e6d7a71765130
|
||||
SIZE (xpi/firefox-i18n-56.0.2/fi.xpi) = 461923
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/fr.xpi) = 3aa8e3e74e35a4e1ca948cb83b42bb9b2c95ec6abdbc8b0872129f6f75d4e2e1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/fr.xpi) = 484561
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/fy-NL.xpi) = 21b16ee4d0a232d6860c9fa6db296544e13e9500796451a98adebcdf35f88c66
|
||||
SIZE (xpi/firefox-i18n-56.0.2/fy-NL.xpi) = 478044
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ga-IE.xpi) = 4d780a2c0f362742f069842ae2d7ddf3dd8177e66405c9c570ef52b2e7de1f32
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ga-IE.xpi) = 489379
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/gd.xpi) = 9e4e1ffc31853fe3e0d4e9e23cd1ccdf0be1b50182cefc9581b902370a3ae2fc
|
||||
SIZE (xpi/firefox-i18n-56.0.2/gd.xpi) = 476927
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/gl.xpi) = 7dc3615f3eca3bc09472207b8d78644923526dd51651a6a04cf8449bf78cca4b
|
||||
SIZE (xpi/firefox-i18n-56.0.2/gl.xpi) = 466468
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/gn.xpi) = 32d64cb5ceb3a8b53abafd0699d9697f190e137155484fc06968efe3ab2da294
|
||||
SIZE (xpi/firefox-i18n-56.0.2/gn.xpi) = 485790
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/gu-IN.xpi) = 574654d88abc8d620d5d29c09a281738ff463f8a0e09386373005a4c33cd7adf
|
||||
SIZE (xpi/firefox-i18n-56.0.2/gu-IN.xpi) = 513740
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/he.xpi) = aa4437d071736c8009ff81f79cf51348fa7ce02d82dd603cc08c00997de79ddc
|
||||
SIZE (xpi/firefox-i18n-56.0.2/he.xpi) = 488495
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/hi-IN.xpi) = 9faa3d8242f2e13e82334c91018137a23a88374d6d8bcbdbca0bac69b709487d
|
||||
SIZE (xpi/firefox-i18n-56.0.2/hi-IN.xpi) = 538303
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/hr.xpi) = 78ea8859fc47c3fd35055ad7dacd3c89192619f637d1b10a5515db49c1aabd63
|
||||
SIZE (xpi/firefox-i18n-56.0.2/hr.xpi) = 475058
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/hsb.xpi) = 7e868a01a8c881319703dd2d40aa7a90a2a6afda350a93cdee785c1cee3e334c
|
||||
SIZE (xpi/firefox-i18n-56.0.2/hsb.xpi) = 487599
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/hu.xpi) = ba7c06ffe790cb31450c47ffc73c0ef402e759e8d6798c284ab3004aa9b1a154
|
||||
SIZE (xpi/firefox-i18n-56.0.2/hu.xpi) = 490102
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/hy-AM.xpi) = 5a78e97fe3b0a106a9839714e2a811d52501e5c427ba9c943bdcbdd2beb303cb
|
||||
SIZE (xpi/firefox-i18n-56.0.2/hy-AM.xpi) = 527711
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/id.xpi) = 916e89bb2bf8fcd0671a1cfe34944643e3f3bb1aeccf6bc7b86329e1f3261cb3
|
||||
SIZE (xpi/firefox-i18n-56.0.2/id.xpi) = 459066
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/is.xpi) = f424cf833f52cb6a57933e6173bad7a1df2e01b9233feb0abfab0e9f3fd13a78
|
||||
SIZE (xpi/firefox-i18n-56.0.2/is.xpi) = 467447
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/it.xpi) = 49e286eecc3e31a2581f728783f25717b994e466a1329f5121efff04d3400ccd
|
||||
SIZE (xpi/firefox-i18n-56.0.2/it.xpi) = 358695
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ja.xpi) = f981b5dd41b2d2479034720d4d8d4ec98b936e5d4b092e954057a3135b802d93
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ja.xpi) = 527926
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ka.xpi) = c84ec7d427a84290cc760cf35a900a188621c7c8fbc3b48f63d7c000642eb3c1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ka.xpi) = 509096
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/kab.xpi) = e8ffa26d1acef0cfb554eced0b86656c4ac504b5459bb8fd3eb86c5292df7b3e
|
||||
SIZE (xpi/firefox-i18n-56.0.2/kab.xpi) = 477420
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/kk.xpi) = 5c918b32273f6a107c6a8d78be58c9e757884dcc28951949db39bba705c95d37
|
||||
SIZE (xpi/firefox-i18n-56.0.2/kk.xpi) = 534932
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/km.xpi) = 52c280027d92449fda3cd321a091b2f65f401d417bff7fdce692191b748f99c2
|
||||
SIZE (xpi/firefox-i18n-56.0.2/km.xpi) = 549344
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/kn.xpi) = 03120c4eb742e750c46f266fceb69cd1a8b97d3cf5bd0f2a55485d25af502272
|
||||
SIZE (xpi/firefox-i18n-56.0.2/kn.xpi) = 545517
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ko.xpi) = 60171b4d104a456df4a7fc60dc506eaa0ced1a32a216461bbddd2a215200f61b
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ko.xpi) = 502895
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/lij.xpi) = b0b07f9e4be734145b6472ef506b4cb99c85eea98ece31dad6efa2003d59f893
|
||||
SIZE (xpi/firefox-i18n-56.0.2/lij.xpi) = 467275
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/lt.xpi) = 09302dfb196300ae49c47cf4a9a1ac9ec4df954defa8abd19bdd985852af94b5
|
||||
SIZE (xpi/firefox-i18n-56.0.2/lt.xpi) = 488753
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/lv.xpi) = 9f47b7ef87c55320d6d67a15f61a87b0cc9e891a5aeac382badfe3e3b27b51e4
|
||||
SIZE (xpi/firefox-i18n-56.0.2/lv.xpi) = 481628
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/mai.xpi) = f16a670648ebdc3b914620d7fbe4f6095952f65c658901ecfcfbbc37645f5fdb
|
||||
SIZE (xpi/firefox-i18n-56.0.2/mai.xpi) = 524702
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/mk.xpi) = e537b92b6af439a1c1b9e667939f146b7a2ad17eae3d4f9075d1ad70bb958b0f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/mk.xpi) = 507818
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ml.xpi) = 5714a5481f111e1467a596973c824e9d09cb1e464cc74c332582d5079b495efd
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ml.xpi) = 547547
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/mr.xpi) = 2993e10fa67e526691859805b5bf928be5607d59ceedbbb7aa68962688fa6723
|
||||
SIZE (xpi/firefox-i18n-56.0.2/mr.xpi) = 536673
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ms.xpi) = 7b4a6353a3b2e6e2fc923dc43191c0bc463aeacc9d9eaadb032f93f00376b6df
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ms.xpi) = 466107
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/my.xpi) = 9ef461ae9ec46bc6198456411232ed37a0ed68f11d4bc587d2b8b4d8247868d5
|
||||
SIZE (xpi/firefox-i18n-56.0.2/my.xpi) = 536722
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/nb-NO.xpi) = ee407654fbfad2523ec72fc921b9072772bacc231636b460ac239c406a43132f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/nb-NO.xpi) = 465575
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/nl.xpi) = bbba1d13636b0f03868d202893eb995f3112a56ac2453bbdde6b8fb856fe49b1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/nl.xpi) = 469053
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/nn-NO.xpi) = 8120d52f0e9a0ecd870a0ea0d3b887df12b129d3bfda7c83f09e4036907d08e6
|
||||
SIZE (xpi/firefox-i18n-56.0.2/nn-NO.xpi) = 466208
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/or.xpi) = 325acd5539ec48f65320ff0f5768fbdced82c788750f7c0cd00bf2a264751e32
|
||||
SIZE (xpi/firefox-i18n-56.0.2/or.xpi) = 518165
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/pa-IN.xpi) = 2e3bcfc268606f1496226ca549df40e9c6b8b9f972cdd7f84d4d5c4b32173294
|
||||
SIZE (xpi/firefox-i18n-56.0.2/pa-IN.xpi) = 509046
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/pl.xpi) = c6123361207e67bfd6f859c65c369fa0b22561fbb46b548d9b322433f209a712
|
||||
SIZE (xpi/firefox-i18n-56.0.2/pl.xpi) = 377524
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/pt-BR.xpi) = 3a45de0fd1d0b18123e4f97de1de8f57c043a8c621a02f5267643fc5fb12c8bf
|
||||
SIZE (xpi/firefox-i18n-56.0.2/pt-BR.xpi) = 470954
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/pt-PT.xpi) = b8412464435c2e3c79017bc7ecc6b7b7d7715b1b47d0ca5f6e7c320d2c2b87d1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/pt-PT.xpi) = 472803
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/rm.xpi) = 2054926b1f43459aa857234466b686553555e2afc2e6072ef3883f28b2ebc676
|
||||
SIZE (xpi/firefox-i18n-56.0.2/rm.xpi) = 467019
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ro.xpi) = d69ce50c34f429d4a6724b4b8d954bb3f78e5a7fb42302c2e9de9e5f870c4e0e
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ro.xpi) = 470785
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ru.xpi) = 2339cce445c2c01de77fd89079c121301dfcc082f9f8e3b0f640d0f42a648cac
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ru.xpi) = 541437
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/si.xpi) = 79c3fa18f421923b48505b74e39cd4fab474685584bb5daf71f41ebd8a388402
|
||||
SIZE (xpi/firefox-i18n-56.0.2/si.xpi) = 515921
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/sk.xpi) = 0292ae81d9ae0af15489b2b420f3156cb2f7266cd881deaa4c9e164c987271c7
|
||||
SIZE (xpi/firefox-i18n-56.0.2/sk.xpi) = 495563
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/sl.xpi) = bea8af482218c1bfde800e3461f64d008b46b1419745127fe838a29724098b5f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/sl.xpi) = 473806
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/son.xpi) = 6f93b52c42355adafc0778516defce16af99a17ee41ec0d25003ab39bfc6dda1
|
||||
SIZE (xpi/firefox-i18n-56.0.2/son.xpi) = 464322
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/sq.xpi) = 867d12980a8d3ee7ae28faa4f09f63ed405f9ea18b6c0c776da8194ecda937ed
|
||||
SIZE (xpi/firefox-i18n-56.0.2/sq.xpi) = 479511
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/sr.xpi) = b300ada0279186be68dbf292d41d446828acc71e3dcca94cf88a2ef34b38abc9
|
||||
SIZE (xpi/firefox-i18n-56.0.2/sr.xpi) = 504487
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/sv-SE.xpi) = 0ccdf643e1f62ff1e41ceb3fe9c35191aece0efcbfc6b24293f88f7ef1d55043
|
||||
SIZE (xpi/firefox-i18n-56.0.2/sv-SE.xpi) = 473949
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ta.xpi) = 0186d38239a9db92394562eb70a6960eeeee052abce62bc3672c8644a37cb859
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ta.xpi) = 530646
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/te.xpi) = 789359330bdfefb1fc379582b098c040cdb6a46f770e2c80b1695a7eb634db40
|
||||
SIZE (xpi/firefox-i18n-56.0.2/te.xpi) = 549585
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/th.xpi) = abeb0f7ff018d44efbcea4cba5c0c62a78f42f6395ea1535f757f2045064c880
|
||||
SIZE (xpi/firefox-i18n-56.0.2/th.xpi) = 520297
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/tr.xpi) = b3798722e3a732e422a1fbff8d1c9ca7716b3fe9b2f21cc219432ec998556e26
|
||||
SIZE (xpi/firefox-i18n-56.0.2/tr.xpi) = 480549
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/uk.xpi) = 6854f076f5ef93e72a4f38f03a8dadc61e3a2f8afa402783bbd00bcc63b6f14f
|
||||
SIZE (xpi/firefox-i18n-56.0.2/uk.xpi) = 535436
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/ur.xpi) = 01a4d64725be568e148d88dab405545f76a24a695d499a236a2be0599489324a
|
||||
SIZE (xpi/firefox-i18n-56.0.2/ur.xpi) = 527354
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/uz.xpi) = 79092d2f830adbf05cc884aa014fa9348e3449fa206cf91286d5bfb40ebe729c
|
||||
SIZE (xpi/firefox-i18n-56.0.2/uz.xpi) = 475101
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/vi.xpi) = 65633b00c1a124a23bfda2bdb7666ab8e12e113c956930cc975f838e3de04038
|
||||
SIZE (xpi/firefox-i18n-56.0.2/vi.xpi) = 487150
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/xh.xpi) = af99554dc838c042310acbb0a7c2623d61ff3b3045667cf301cffeb29821c008
|
||||
SIZE (xpi/firefox-i18n-56.0.2/xh.xpi) = 477838
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/zh-CN.xpi) = f2a1bb04222fbca3845b00694342a74c8d54cbf1a64104d96f1856879aed0abf
|
||||
SIZE (xpi/firefox-i18n-56.0.2/zh-CN.xpi) = 498979
|
||||
SHA256 (xpi/firefox-i18n-56.0.2/zh-TW.xpi) = 8c547d631522048d060be5305c277024e8038386dcad232ed742b1edf14a9471
|
||||
SIZE (xpi/firefox-i18n-56.0.2/zh-TW.xpi) = 497765
|
||||
TIMESTAMP = 1510498738
|
||||
SHA256 (xpi/firefox-i18n-57.0/ach.xpi) = ff5bbdfcca5270cf978173eb13ce10bfb4b51dbd1faeb9b69c50f689a1eb3dc4
|
||||
SIZE (xpi/firefox-i18n-57.0/ach.xpi) = 441112
|
||||
SHA256 (xpi/firefox-i18n-57.0/af.xpi) = 65459a5914dba1de876bee7d867699ff033a9722a957675f973b5cf1213366b9
|
||||
SIZE (xpi/firefox-i18n-57.0/af.xpi) = 442205
|
||||
SHA256 (xpi/firefox-i18n-57.0/an.xpi) = d24b77cfdf3d5badd492c04f5984171bedbafcee31fb447930925e2c911e5261
|
||||
SIZE (xpi/firefox-i18n-57.0/an.xpi) = 462777
|
||||
SHA256 (xpi/firefox-i18n-57.0/ar.xpi) = 06b0d8f7f34eb661f8f4944c26ddeee81e84bb00dd07dec4f1f06e54f1cdbe6f
|
||||
SIZE (xpi/firefox-i18n-57.0/ar.xpi) = 488159
|
||||
SHA256 (xpi/firefox-i18n-57.0/as.xpi) = 8229d02b5f8b88dea2a6e8f83db6c335c951ebf786f4d73fe28dde8457ae4d59
|
||||
SIZE (xpi/firefox-i18n-57.0/as.xpi) = 491074
|
||||
SHA256 (xpi/firefox-i18n-57.0/ast.xpi) = 0f46b1d36c23ec86656208241e692f2f4fef6338285dd54621939a53672d497d
|
||||
SIZE (xpi/firefox-i18n-57.0/ast.xpi) = 455503
|
||||
SHA256 (xpi/firefox-i18n-57.0/az.xpi) = 68db90d2cc24227407dc20cb8721b5f89ae875fc3e0248981bf5349b2348030d
|
||||
SIZE (xpi/firefox-i18n-57.0/az.xpi) = 466042
|
||||
SHA256 (xpi/firefox-i18n-57.0/be.xpi) = 9e9c151874180d2ccf6ac1e7e7a59a5d2e72f9543bb6c128416fad177a2f01cb
|
||||
SIZE (xpi/firefox-i18n-57.0/be.xpi) = 516091
|
||||
SHA256 (xpi/firefox-i18n-57.0/bg.xpi) = 10c386468c1d34676a7d4e3992f14d853cd29f61bd1d12b04f3f1b66ebb8993b
|
||||
SIZE (xpi/firefox-i18n-57.0/bg.xpi) = 510349
|
||||
SHA256 (xpi/firefox-i18n-57.0/bn-BD.xpi) = 11b541a18a34fee16337dd8648a36e45b6c5371e9c17a845985120e6a7b1997d
|
||||
SIZE (xpi/firefox-i18n-57.0/bn-BD.xpi) = 527188
|
||||
SHA256 (xpi/firefox-i18n-57.0/bn-IN.xpi) = f8c912705b760607456a140506f3120e9d7c9f0ee17508d4cbd1eb3e18bc895d
|
||||
SIZE (xpi/firefox-i18n-57.0/bn-IN.xpi) = 516175
|
||||
SHA256 (xpi/firefox-i18n-57.0/br.xpi) = 4c76bf9c4b39dac467de391527072ca6d81c83a9ccbead46dbbbb76a8ab7c252
|
||||
SIZE (xpi/firefox-i18n-57.0/br.xpi) = 451865
|
||||
SHA256 (xpi/firefox-i18n-57.0/bs.xpi) = 4d3c483b4e3a20a852ddb5fe6a0d1f447366310dee446317017ebdf332e129c1
|
||||
SIZE (xpi/firefox-i18n-57.0/bs.xpi) = 459649
|
||||
SHA256 (xpi/firefox-i18n-57.0/ca.xpi) = 21fc2934acb751e89badbf215aad67085c310cbb627e44277d9592aaf213a837
|
||||
SIZE (xpi/firefox-i18n-57.0/ca.xpi) = 466640
|
||||
SHA256 (xpi/firefox-i18n-57.0/cak.xpi) = 95c3cff1bd43dc2f14e99a0c10d8f101beb4e940f810279a2912571ddeff6326
|
||||
SIZE (xpi/firefox-i18n-57.0/cak.xpi) = 475934
|
||||
SHA256 (xpi/firefox-i18n-57.0/cs.xpi) = c579929028397c8f93ed7193cc4f2a6511a5b503d59d02d6599701d7fab393db
|
||||
SIZE (xpi/firefox-i18n-57.0/cs.xpi) = 469456
|
||||
SHA256 (xpi/firefox-i18n-57.0/cy.xpi) = 3442262d271a47173226ae327be47524ab0237b0ebaea73c61c61177463f81fa
|
||||
SIZE (xpi/firefox-i18n-57.0/cy.xpi) = 455787
|
||||
SHA256 (xpi/firefox-i18n-57.0/da.xpi) = 538e9cce1e72af3ce6c6bbfe0a310529099dc95100546974e8b0a228860854a3
|
||||
SIZE (xpi/firefox-i18n-57.0/da.xpi) = 448415
|
||||
SHA256 (xpi/firefox-i18n-57.0/de.xpi) = bb4c883efe6f393ed47d91712901ca0bff04951db9e83ab5c981811e60512461
|
||||
SIZE (xpi/firefox-i18n-57.0/de.xpi) = 460812
|
||||
SHA256 (xpi/firefox-i18n-57.0/dsb.xpi) = 51ef0a8a83770dab060779d6b34478a60d080e743b8c446b791a89236161f29e
|
||||
SIZE (xpi/firefox-i18n-57.0/dsb.xpi) = 479506
|
||||
SHA256 (xpi/firefox-i18n-57.0/el.xpi) = 2009672fb40a593061fba725ad6fb5c6b52b330a7724e3e5203c8885df5fce81
|
||||
SIZE (xpi/firefox-i18n-57.0/el.xpi) = 534482
|
||||
SHA256 (xpi/firefox-i18n-57.0/en-GB.xpi) = 404f4dd5d724ceacdd49b63f303ceeae4608f8e989992ebca71198251023fc7f
|
||||
SIZE (xpi/firefox-i18n-57.0/en-GB.xpi) = 435622
|
||||
SHA256 (xpi/firefox-i18n-57.0/en-US.xpi) = ac8b76c6ad2f10b62c784cb97b30b7c8cf0b466102a3732199a2ce5f355aa0db
|
||||
SIZE (xpi/firefox-i18n-57.0/en-US.xpi) = 441879
|
||||
SHA256 (xpi/firefox-i18n-57.0/en-ZA.xpi) = f1d21809cccea7d4bc649b7337ebde96f3b42185d154e603dbae241e5d8876d1
|
||||
SIZE (xpi/firefox-i18n-57.0/en-ZA.xpi) = 432019
|
||||
SHA256 (xpi/firefox-i18n-57.0/eo.xpi) = 599314153f217433a53671ac0c118be5a6953094bcd94fe8230f192ca5d8995a
|
||||
SIZE (xpi/firefox-i18n-57.0/eo.xpi) = 454908
|
||||
SHA256 (xpi/firefox-i18n-57.0/es-AR.xpi) = 6f6d9805f9bba0fac0afce20bdfb1116c1c441cb5463fc271e8a3cec2cfe2bfe
|
||||
SIZE (xpi/firefox-i18n-57.0/es-AR.xpi) = 462978
|
||||
SHA256 (xpi/firefox-i18n-57.0/es-CL.xpi) = 141b2502ed61b7ac439910c252c6de9388ab6a6783fb290e77208367317b4fdc
|
||||
SIZE (xpi/firefox-i18n-57.0/es-CL.xpi) = 465514
|
||||
SHA256 (xpi/firefox-i18n-57.0/es-ES.xpi) = 73409303fc344d642f2343fd683694b534291c6ca5a8f8c63ee27b13e2ffe8ab
|
||||
SIZE (xpi/firefox-i18n-57.0/es-ES.xpi) = 353623
|
||||
SHA256 (xpi/firefox-i18n-57.0/es-MX.xpi) = dd136cbdbe64a77341d8345c388f6ca63e5acbf65ba2f7ef7d61af52bdbcbf61
|
||||
SIZE (xpi/firefox-i18n-57.0/es-MX.xpi) = 468760
|
||||
SHA256 (xpi/firefox-i18n-57.0/et.xpi) = e5683bf2280fd070dad6855af2f60bd433d9200af66ec0976f5045d5d44e8e30
|
||||
SIZE (xpi/firefox-i18n-57.0/et.xpi) = 447277
|
||||
SHA256 (xpi/firefox-i18n-57.0/eu.xpi) = 562f0ad72e23e6b37969c6b75fd7343cbceb67cfb3db570525b796c3a214b2b2
|
||||
SIZE (xpi/firefox-i18n-57.0/eu.xpi) = 454671
|
||||
SHA256 (xpi/firefox-i18n-57.0/fa.xpi) = 39891a98174cdf50dfea0a69e896049ef8aa66be1c694149eb7da3ff421045a2
|
||||
SIZE (xpi/firefox-i18n-57.0/fa.xpi) = 510827
|
||||
SHA256 (xpi/firefox-i18n-57.0/ff.xpi) = 0b9a56e8b6378b13db3011957c9e040c3b2e74afe8de34d0333b9029b15d3f38
|
||||
SIZE (xpi/firefox-i18n-57.0/ff.xpi) = 454014
|
||||
SHA256 (xpi/firefox-i18n-57.0/fi.xpi) = b81be3f2dd15873dae20b4eced377e3e8d3b40de59d7735c72444e87dc7f476e
|
||||
SIZE (xpi/firefox-i18n-57.0/fi.xpi) = 446242
|
||||
SHA256 (xpi/firefox-i18n-57.0/fr.xpi) = 59578e90b9832f216d01755cd52bc5956fa646bc420131f3b00ce09faa8d6271
|
||||
SIZE (xpi/firefox-i18n-57.0/fr.xpi) = 472720
|
||||
SHA256 (xpi/firefox-i18n-57.0/fy-NL.xpi) = 529719f9de24ed1a1573d8a55f91d2cbafdaa37d06c65ced206815622668fe8f
|
||||
SIZE (xpi/firefox-i18n-57.0/fy-NL.xpi) = 465907
|
||||
SHA256 (xpi/firefox-i18n-57.0/ga-IE.xpi) = 563933a54d94fa031fb309157d806b50e694ae42e6723d9a5b6e442fd5d53f21
|
||||
SIZE (xpi/firefox-i18n-57.0/ga-IE.xpi) = 475962
|
||||
SHA256 (xpi/firefox-i18n-57.0/gd.xpi) = 69089bd588762270bd6592b544ed7886b4d092b915cdabb4ffee6c9c499ed924
|
||||
SIZE (xpi/firefox-i18n-57.0/gd.xpi) = 465121
|
||||
SHA256 (xpi/firefox-i18n-57.0/gl.xpi) = ca5195dad2f043d4b530b414061c92f835fe0f9c2f0e8a64de0e3a73079e4e6d
|
||||
SIZE (xpi/firefox-i18n-57.0/gl.xpi) = 452030
|
||||
SHA256 (xpi/firefox-i18n-57.0/gn.xpi) = a118e4b81c47da417fe79af3d95788e04aaf42d433e8984d026851c41cd5ee11
|
||||
SIZE (xpi/firefox-i18n-57.0/gn.xpi) = 471954
|
||||
SHA256 (xpi/firefox-i18n-57.0/gu-IN.xpi) = 0cf3579447aa63d495d5ee744d7b7dcd16eb6779c8e398f75a3c12841c1f2461
|
||||
SIZE (xpi/firefox-i18n-57.0/gu-IN.xpi) = 511989
|
||||
SHA256 (xpi/firefox-i18n-57.0/he.xpi) = a2c770fab1787623f9a62a5579e7e2f5e8561ba38f8223ef11c75227abd5c7f3
|
||||
SIZE (xpi/firefox-i18n-57.0/he.xpi) = 471920
|
||||
SHA256 (xpi/firefox-i18n-57.0/hi-IN.xpi) = a07ecdd23d74ea5ae916b4a94ad513696e4000f703ea3e06cdff9c579748e1c2
|
||||
SIZE (xpi/firefox-i18n-57.0/hi-IN.xpi) = 526109
|
||||
SHA256 (xpi/firefox-i18n-57.0/hr.xpi) = f88a0964a4e55a4b904e3e466d78f853b58f99007f920277651b4176f48c1cbd
|
||||
SIZE (xpi/firefox-i18n-57.0/hr.xpi) = 460720
|
||||
SHA256 (xpi/firefox-i18n-57.0/hsb.xpi) = bbdb24808af0f07be665ffc8cadf687ef30c47075d0b1ef78a58311ddbf99f7f
|
||||
SIZE (xpi/firefox-i18n-57.0/hsb.xpi) = 476500
|
||||
SHA256 (xpi/firefox-i18n-57.0/hu.xpi) = 23767b357e4ae9a470605a7bf5e5231301ffe3d65fea8e11c07f82f53e1fd9c2
|
||||
SIZE (xpi/firefox-i18n-57.0/hu.xpi) = 476603
|
||||
SHA256 (xpi/firefox-i18n-57.0/hy-AM.xpi) = 8106177a21fbfb382dfe26b6106ba35128a03fc25d06b492f948c7a661303add
|
||||
SIZE (xpi/firefox-i18n-57.0/hy-AM.xpi) = 510824
|
||||
SHA256 (xpi/firefox-i18n-57.0/id.xpi) = a3cce07b6c2369bfed1c47af5fd3de8254603efe8b7d3e3929ddba32d824237a
|
||||
SIZE (xpi/firefox-i18n-57.0/id.xpi) = 444040
|
||||
SHA256 (xpi/firefox-i18n-57.0/is.xpi) = b608ebb8f34a93968fcef85d1c463e32489e999b92197f9b21b094d76db29767
|
||||
SIZE (xpi/firefox-i18n-57.0/is.xpi) = 452655
|
||||
SHA256 (xpi/firefox-i18n-57.0/it.xpi) = b035b10133444b23fbef2c66c8548fdd6703ec304d8a854c5fbec42e79f9778a
|
||||
SIZE (xpi/firefox-i18n-57.0/it.xpi) = 347170
|
||||
SHA256 (xpi/firefox-i18n-57.0/ja.xpi) = a7e3af1bbc6bdf3ec139e77e3cc1e39b072dd68b0a434ef96cc288e7424eea8c
|
||||
SIZE (xpi/firefox-i18n-57.0/ja.xpi) = 508551
|
||||
SHA256 (xpi/firefox-i18n-57.0/ka.xpi) = 09dd38e2f51b0228dd0302e4afcc6ee6f6f2d89956172c27518cb9c7423e155e
|
||||
SIZE (xpi/firefox-i18n-57.0/ka.xpi) = 492355
|
||||
SHA256 (xpi/firefox-i18n-57.0/kab.xpi) = f673912bcc909e9046008803886cf4322653871e7b5b121645566c2b92b5fc39
|
||||
SIZE (xpi/firefox-i18n-57.0/kab.xpi) = 462530
|
||||
SHA256 (xpi/firefox-i18n-57.0/kk.xpi) = 4d93c3e6f982f4b10d614f6d237f8fac8887c347f1ce11aa6728d0918d552a87
|
||||
SIZE (xpi/firefox-i18n-57.0/kk.xpi) = 519248
|
||||
SHA256 (xpi/firefox-i18n-57.0/km.xpi) = 11cb79e402ba96e678fa27bdbd39bb7ec48533eac89f884334b65ad9335eef54
|
||||
SIZE (xpi/firefox-i18n-57.0/km.xpi) = 530079
|
||||
SHA256 (xpi/firefox-i18n-57.0/kn.xpi) = 1230fe7d27fbc3af7196b7258bee255b4d85dd232c117a0a4d515ddef74328c9
|
||||
SIZE (xpi/firefox-i18n-57.0/kn.xpi) = 531315
|
||||
SHA256 (xpi/firefox-i18n-57.0/ko.xpi) = 1d992cbc4f30bff88b40d46c55ceef223f7b66ad489e073a859655461edacb28
|
||||
SIZE (xpi/firefox-i18n-57.0/ko.xpi) = 487304
|
||||
SHA256 (xpi/firefox-i18n-57.0/lij.xpi) = 4e9e6e0661c4bea860128dd870596154e68c3367624fd6cbc690e2c341157f21
|
||||
SIZE (xpi/firefox-i18n-57.0/lij.xpi) = 452340
|
||||
SHA256 (xpi/firefox-i18n-57.0/lt.xpi) = ce3bdff82d4f6baef44d2913e4da76b83e50dd0c9e3102e444425d379e2347f7
|
||||
SIZE (xpi/firefox-i18n-57.0/lt.xpi) = 474955
|
||||
SHA256 (xpi/firefox-i18n-57.0/lv.xpi) = 25bb6e484402d0c7909544031c2fe84f04b8cb0d563c902427542ca8b0f0a996
|
||||
SIZE (xpi/firefox-i18n-57.0/lv.xpi) = 465242
|
||||
SHA256 (xpi/firefox-i18n-57.0/mai.xpi) = 7f3dafefb77ef7d5e73dd9a762b9d51f05c7c739933561b3a0d53c7798fff9d9
|
||||
SIZE (xpi/firefox-i18n-57.0/mai.xpi) = 507395
|
||||
SHA256 (xpi/firefox-i18n-57.0/mk.xpi) = ac348da0f832916715da5111083a4e2b72a7d16b9c96c04a1cc4d5d3e6c862a7
|
||||
SIZE (xpi/firefox-i18n-57.0/mk.xpi) = 490852
|
||||
SHA256 (xpi/firefox-i18n-57.0/ml.xpi) = a4be2963a72230143283d674ddcc3c28c5f09636524af145f5f53ecce0322572
|
||||
SIZE (xpi/firefox-i18n-57.0/ml.xpi) = 528255
|
||||
SHA256 (xpi/firefox-i18n-57.0/mr.xpi) = 410200d49c82a8ba5a0ecae914e1da3f04798506d9625acbc10c5ed3b99cec9d
|
||||
SIZE (xpi/firefox-i18n-57.0/mr.xpi) = 521289
|
||||
SHA256 (xpi/firefox-i18n-57.0/ms.xpi) = c1b61b1325581a5c2d927a675b19e9d2e34c708bbc45ce5f6c03f386de5b33e5
|
||||
SIZE (xpi/firefox-i18n-57.0/ms.xpi) = 451254
|
||||
SHA256 (xpi/firefox-i18n-57.0/my.xpi) = 512cb14ae373275c4755c478ac1dce4c51be15cde0b2aaaca5b29c3e45df0a5b
|
||||
SIZE (xpi/firefox-i18n-57.0/my.xpi) = 517702
|
||||
SHA256 (xpi/firefox-i18n-57.0/nb-NO.xpi) = a57311847934d5dcff18066ff7bd323f2c2406fa3df4c8e258b8d9d0939b1be8
|
||||
SIZE (xpi/firefox-i18n-57.0/nb-NO.xpi) = 451556
|
||||
SHA256 (xpi/firefox-i18n-57.0/nl.xpi) = 303f6a0b8379bbbd6db4ac45e6eb5397d725259ac67eec50a15b32686916d000
|
||||
SIZE (xpi/firefox-i18n-57.0/nl.xpi) = 458317
|
||||
SHA256 (xpi/firefox-i18n-57.0/nn-NO.xpi) = eb127fad8c44a4721fc1cf1d901d0c2aff16041b8bc54d2d3951b03bfac94600
|
||||
SIZE (xpi/firefox-i18n-57.0/nn-NO.xpi) = 452003
|
||||
SHA256 (xpi/firefox-i18n-57.0/or.xpi) = dc0f59099e8d0592b3e61d8d5c88ae22b9a1067fd89911b7799f8b43d13a2f6b
|
||||
SIZE (xpi/firefox-i18n-57.0/or.xpi) = 500863
|
||||
SHA256 (xpi/firefox-i18n-57.0/pa-IN.xpi) = 33348a739ae6b01c3629def78a855ea6ea816e0253b696e58ba9ccbff3fa37d6
|
||||
SIZE (xpi/firefox-i18n-57.0/pa-IN.xpi) = 495270
|
||||
SHA256 (xpi/firefox-i18n-57.0/pl.xpi) = fff4c80385e9eec79ec93d4fc35f84301fa28c8a527591196d719f675c9ffe2b
|
||||
SIZE (xpi/firefox-i18n-57.0/pl.xpi) = 364229
|
||||
SHA256 (xpi/firefox-i18n-57.0/pt-BR.xpi) = d50347c7a26681e87fe6b5978a8fc05f8d7a885ba440cc51da03b66875fbd76a
|
||||
SIZE (xpi/firefox-i18n-57.0/pt-BR.xpi) = 457153
|
||||
SHA256 (xpi/firefox-i18n-57.0/pt-PT.xpi) = b77f50f7b02a78dc24dc32e9bff82b46bf2e37a62f978c1fe5ac172f6bf63f26
|
||||
SIZE (xpi/firefox-i18n-57.0/pt-PT.xpi) = 459998
|
||||
SHA256 (xpi/firefox-i18n-57.0/rm.xpi) = 695b5483ecc003296cd25b0b441c73c73c475457466fd7cff3f39a8491a44910
|
||||
SIZE (xpi/firefox-i18n-57.0/rm.xpi) = 451057
|
||||
SHA256 (xpi/firefox-i18n-57.0/ro.xpi) = 591ecab4f6e3869da69e612f847a832a802050471655565d29aa8c76febe7b7e
|
||||
SIZE (xpi/firefox-i18n-57.0/ro.xpi) = 455509
|
||||
SHA256 (xpi/firefox-i18n-57.0/ru.xpi) = 3b7355af69378f3bf0642d8f93c2c1fb6a9665ddd5a2b6aec4865baa8cd7713f
|
||||
SIZE (xpi/firefox-i18n-57.0/ru.xpi) = 527005
|
||||
SHA256 (xpi/firefox-i18n-57.0/si.xpi) = 3392da245426ca4480b478455b61b6d53fe5741e7c0c3772a610e622b0248715
|
||||
SIZE (xpi/firefox-i18n-57.0/si.xpi) = 498323
|
||||
SHA256 (xpi/firefox-i18n-57.0/sk.xpi) = 5ac2035fdb85fb5bb789b6f2723e69bd23e6a15f6a4dfb184c08100aafead6ba
|
||||
SIZE (xpi/firefox-i18n-57.0/sk.xpi) = 480395
|
||||
SHA256 (xpi/firefox-i18n-57.0/sl.xpi) = 6c55623bb30635ac67abcd3fab3b4cc30de5fefea2ae0bbb99f15be7c7843245
|
||||
SIZE (xpi/firefox-i18n-57.0/sl.xpi) = 459376
|
||||
SHA256 (xpi/firefox-i18n-57.0/son.xpi) = ac13a973cacd9e4c84401cd11095c0a0f307d07ebb0719174adcfcf957188316
|
||||
SIZE (xpi/firefox-i18n-57.0/son.xpi) = 450929
|
||||
SHA256 (xpi/firefox-i18n-57.0/sq.xpi) = 2b999472e0e6550b63782d15aa713bac47b3ddcf8a212673a30fd6e55090215c
|
||||
SIZE (xpi/firefox-i18n-57.0/sq.xpi) = 465050
|
||||
SHA256 (xpi/firefox-i18n-57.0/sr.xpi) = 75849a57f9b44b73445b302279dcb626389670a20dc3a404ad5db774c3ceaa00
|
||||
SIZE (xpi/firefox-i18n-57.0/sr.xpi) = 487002
|
||||
SHA256 (xpi/firefox-i18n-57.0/sv-SE.xpi) = 87ec5cbe45db203cfd1fd49ab7d2fb78df72fdcd4867e2dcc16727463100bb06
|
||||
SIZE (xpi/firefox-i18n-57.0/sv-SE.xpi) = 459664
|
||||
SHA256 (xpi/firefox-i18n-57.0/ta.xpi) = 74382122b90dbd76d128d5a860d40ddc839f315ee7cecbcdb73c2fbf20169199
|
||||
SIZE (xpi/firefox-i18n-57.0/ta.xpi) = 513225
|
||||
SHA256 (xpi/firefox-i18n-57.0/te.xpi) = a40de1d2174392d96bda8cfe65c8e374f4c833add0e1719d6c44616b571e6855
|
||||
SIZE (xpi/firefox-i18n-57.0/te.xpi) = 530692
|
||||
SHA256 (xpi/firefox-i18n-57.0/th.xpi) = 9d7cff5544312d33d44a2728f095e095e646ae2cd904e014fe69ca8016440884
|
||||
SIZE (xpi/firefox-i18n-57.0/th.xpi) = 502450
|
||||
SHA256 (xpi/firefox-i18n-57.0/tr.xpi) = fa1e8613954cae82fa460eb840af561df5857320a33ec5a1f8b032e3ed558dee
|
||||
SIZE (xpi/firefox-i18n-57.0/tr.xpi) = 465580
|
||||
SHA256 (xpi/firefox-i18n-57.0/uk.xpi) = b477818ae7061f7523625380e93fbe9bdfc385279e7e96cb06e98e6ed5915d86
|
||||
SIZE (xpi/firefox-i18n-57.0/uk.xpi) = 518137
|
||||
SHA256 (xpi/firefox-i18n-57.0/ur.xpi) = d9b3f9e18241a5abb31906792bae33c6b6b579631678c97236291e388e8bc195
|
||||
SIZE (xpi/firefox-i18n-57.0/ur.xpi) = 511133
|
||||
SHA256 (xpi/firefox-i18n-57.0/uz.xpi) = 4d4fe1f56e5c86f779753eed44f1b5d3f1cceb3a6f46950d175ed31c9f7ff39d
|
||||
SIZE (xpi/firefox-i18n-57.0/uz.xpi) = 461693
|
||||
SHA256 (xpi/firefox-i18n-57.0/vi.xpi) = ce81dbf85ddd901acb8c9cf7cfd331d2dfe6f4a7f5e4d799d664ff867bd5d40b
|
||||
SIZE (xpi/firefox-i18n-57.0/vi.xpi) = 471319
|
||||
SHA256 (xpi/firefox-i18n-57.0/xh.xpi) = be4d359e06a8a10cfda658a6e7c1e13ff857fd767d76882bedfd1aada3a6900c
|
||||
SIZE (xpi/firefox-i18n-57.0/xh.xpi) = 464460
|
||||
SHA256 (xpi/firefox-i18n-57.0/zh-CN.xpi) = 040736b596b614e55ac09aefa3e9f04211f16cb257ea0c2d274ca0df99b787b6
|
||||
SIZE (xpi/firefox-i18n-57.0/zh-CN.xpi) = 483624
|
||||
SHA256 (xpi/firefox-i18n-57.0/zh-TW.xpi) = fa5cf52246a289bc91d60519697977cbd6f999f5bda7eb715cb8303af543b752
|
||||
SIZE (xpi/firefox-i18n-57.0/zh-TW.xpi) = 482346
|
||||
|
@ -2,27 +2,26 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= firefox
|
||||
DISTVERSION= 56.0.2
|
||||
DISTVERSION= 57.0
|
||||
DISTVERSIONSUFFIX=.source
|
||||
PORTREVISION= 10
|
||||
PORTEPOCH= 1
|
||||
CATEGORIES= www ipv6
|
||||
MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \
|
||||
MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source
|
||||
MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build4/source
|
||||
|
||||
MAINTAINER= gecko@FreeBSD.org
|
||||
COMMENT= Web browser based on the browser portion of Mozilla
|
||||
|
||||
BUILD_DEPENDS= nspr>=4.16:devel/nspr \
|
||||
nss>=3.32.1:security/nss \
|
||||
BUILD_DEPENDS= nspr>=4.17:devel/nspr \
|
||||
nss>=3.33:security/nss \
|
||||
icu>=59.1,1:devel/icu \
|
||||
libevent>=2.1.8:devel/libevent \
|
||||
harfbuzz>=1.4.7:print/harfbuzz \
|
||||
harfbuzz>=1.5.1:print/harfbuzz \
|
||||
graphite2>=1.3.10:graphics/graphite2 \
|
||||
png>=1.6.31:graphics/png \
|
||||
libvorbis>=1.3.5,3:audio/libvorbis \
|
||||
libvpx>=1.5.0:multimedia/libvpx \
|
||||
sqlite3>=3.19.3:databases/sqlite3 \
|
||||
sqlite3>=3.20.1:databases/sqlite3 \
|
||||
${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3 \
|
||||
v4l_compat>0:multimedia/v4l_compat \
|
||||
autoconf-2.13:devel/autoconf213 \
|
||||
|
@ -1,3 +1,3 @@
|
||||
TIMESTAMP = 1508873487
|
||||
SHA256 (firefox-56.0.2.source.tar.xz) = 6f7d284c31383a9860d7b52f05f866526d5a7c31e3ef2959d79122ba074f5ca1
|
||||
SIZE (firefox-56.0.2.source.tar.xz) = 255658916
|
||||
TIMESTAMP = 1510498738
|
||||
SHA256 (firefox-57.0.source.tar.xz) = 603af00155be87f2c9c58047dd0072971f1cdab1f632695aae6ad072efefbb8f
|
||||
SIZE (firefox-57.0.source.tar.xz) = 250728772
|
||||
|
@ -1,148 +0,0 @@
|
||||
commit 99ad73e4743d
|
||||
Author: Jonathan Kew <jkew@mozilla.com>
|
||||
Date: Sat Sep 16 11:49:47 2017 +0100
|
||||
|
||||
Bug 1399540 - patch 1 - Failure to decode an individual label within the IDN should not block decoding of other valid punycode labels. r=valentin
|
||||
---
|
||||
netwerk/dns/nsIDNService.cpp | 25 ++++++++++++++++---------
|
||||
1 file changed, 16 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git netwerk/dns/nsIDNService.cpp netwerk/dns/nsIDNService.cpp
|
||||
index 9cc8fdcf6fa1..3adcddf654e1 100644
|
||||
--- netwerk/dns/nsIDNService.cpp
|
||||
+++ netwerk/dns/nsIDNService.cpp
|
||||
@@ -300,6 +300,10 @@ nsresult nsIDNService::ACEtoUTF8(const nsACString & input, nsACString & _retval,
|
||||
// RFC 3490 - 4.2 ToUnicode
|
||||
// ToUnicode never fails. If any step fails, then the original input
|
||||
// sequence is returned immediately in that step.
|
||||
+ //
|
||||
+ // Note that this refers to the decoding of a single label.
|
||||
+ // ACEtoUTF8 may be called with a sequence of labels separated by dots;
|
||||
+ // this test applies individually to each label.
|
||||
|
||||
uint32_t len = 0, offset = 0;
|
||||
nsAutoCString decodedBuf;
|
||||
@@ -313,13 +317,15 @@ nsresult nsIDNService::ACEtoUTF8(const nsACString & input, nsACString & _retval,
|
||||
while (start != end) {
|
||||
len++;
|
||||
if (*start++ == '.') {
|
||||
- if (NS_FAILED(decodeACE(Substring(input, offset, len - 1), decodedBuf,
|
||||
- flag))) {
|
||||
- _retval.Assign(input);
|
||||
- return NS_OK;
|
||||
+ nsDependentCSubstring origLabel(input, offset, len - 1);
|
||||
+ if (NS_FAILED(decodeACE(origLabel, decodedBuf, flag))) {
|
||||
+ // If decoding failed, use the original input sequence
|
||||
+ // for this label.
|
||||
+ _retval.Append(origLabel);
|
||||
+ } else {
|
||||
+ _retval.Append(decodedBuf);
|
||||
}
|
||||
|
||||
- _retval.Append(decodedBuf);
|
||||
_retval.Append('.');
|
||||
offset += len;
|
||||
len = 0;
|
||||
@@ -327,11 +333,12 @@ nsresult nsIDNService::ACEtoUTF8(const nsACString & input, nsACString & _retval,
|
||||
}
|
||||
// decode the last node
|
||||
if (len) {
|
||||
- if (NS_FAILED(decodeACE(Substring(input, offset, len), decodedBuf,
|
||||
- flag)))
|
||||
- _retval.Assign(input);
|
||||
- else
|
||||
+ nsDependentCSubstring origLabel(input, offset, len);
|
||||
+ if (NS_FAILED(decodeACE(origLabel, decodedBuf, flag))) {
|
||||
+ _retval.Append(origLabel);
|
||||
+ } else {
|
||||
_retval.Append(decodedBuf);
|
||||
+ }
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
||||
commit eddd7a4f4eae
|
||||
Author: Jonathan Kew <jkew@mozilla.com>
|
||||
Date: Sat Sep 16 11:49:56 2017 +0100
|
||||
|
||||
Bug 1399540 - patch 2 - Handle invalid punycode better in stringPrep to avoid mangling display of fake-punycode labels. r=valentin
|
||||
---
|
||||
netwerk/dns/nsIDNService.cpp | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git netwerk/dns/nsIDNService.cpp netwerk/dns/nsIDNService.cpp
|
||||
index 3adcddf654e1..4c45a2d52e45 100644
|
||||
--- netwerk/dns/nsIDNService.cpp
|
||||
+++ netwerk/dns/nsIDNService.cpp
|
||||
@@ -222,7 +222,15 @@ nsIDNService::IDNA2008StringPrep(const nsAString& input,
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
- // Output the result of nameToUnicode even if there were errors
|
||||
+ // Output the result of nameToUnicode even if there were errors.
|
||||
+ // But in the case of invalid punycode, the uidna_labelToUnicode result
|
||||
+ // appears to get an appended U+FFFD REPLACEMENT CHARACTER, which will
|
||||
+ // confuse our subsequent processing, so we drop that.
|
||||
+ // (https://bugzilla.mozilla.org/show_bug.cgi?id=1399540#c9)
|
||||
+ if ((info.errors & UIDNA_ERROR_PUNYCODE) &&
|
||||
+ outLen > 0 && outputBuffer[outLen - 1] == 0xfffd) {
|
||||
+ --outLen;
|
||||
+ }
|
||||
ICUUtils::AssignUCharArrayToString(outputBuffer, outLen, output);
|
||||
|
||||
if (flag == eStringPrepIgnoreErrors) {
|
||||
|
||||
commit 2a3883ef55d2
|
||||
Author: Jonathan Kew <jkew@mozilla.com>
|
||||
Date: Sat Sep 16 11:50:08 2017 +0100
|
||||
|
||||
Bug 1399540 - Add some IDN testcases with mixed punycode and non-punycode labels. r=valentin
|
||||
---
|
||||
netwerk/test/unit/test_idn_urls.js | 25 ++++++++++++++++---------
|
||||
1 file changed, 16 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git netwerk/test/unit/test_idn_urls.js netwerk/test/unit/test_idn_urls.js
|
||||
index 358854093f65..0d8cf3216293 100644
|
||||
--- netwerk/test/unit/test_idn_urls.js
|
||||
+++ netwerk/test/unit/test_idn_urls.js
|
||||
@@ -286,10 +286,17 @@ const testcases = [
|
||||
// Thai (also tests that node with over 63 UTF-8 octets doesn't fail)
|
||||
["เครื่องทําน้ําทําน้ําแข็ง",
|
||||
"xn--22cdjb2fanb9fyepcbbb9dwh4a3igze4fdcd",
|
||||
- false, true, true]
|
||||
+ false, true, true],
|
||||
+
|
||||
+ // Effect of adding valid or invalid subdomains (bug 1399540)
|
||||
+ ["䕮䕵䕶䕱.ascii", "xn--google.ascii", false, true, true],
|
||||
+ ["ascii.䕮䕵䕶䕱", "ascii.xn--google", false, true, true],
|
||||
+ ["中国123.䕮䕵䕶䕱", "xn--123-u68dy61b.xn--google", false, true, true],
|
||||
+ ["䕮䕵䕶䕱.中国123", "xn--google.xn--123-u68dy61b", false, true, true],
|
||||
+ ["xn--accountlogin.䕮䕵䕶䕱", "xn--accountlogin.xn--google", false, true, true],
|
||||
+ ["䕮䕵䕶䕱.xn--accountlogin", "xn--google.xn--accountlogin", false, true, true],
|
||||
];
|
||||
|
||||
-
|
||||
const profiles = ["ASCII", "high", "moderate"];
|
||||
|
||||
function run_test() {
|
||||
@@ -311,13 +318,13 @@ function run_test() {
|
||||
var expectedUnicode = test[2 + i];
|
||||
var isASCII = {};
|
||||
|
||||
- var result;
|
||||
- try {
|
||||
- result = idnService.convertToDisplayIDN(URL, isASCII);
|
||||
- } catch(e) {
|
||||
- result = ".com";
|
||||
- }
|
||||
- if (punycodeURL.substr(0, 4) == "xn--") {
|
||||
+ var result;
|
||||
+ try {
|
||||
+ result = idnService.convertToDisplayIDN(URL, isASCII);
|
||||
+ } catch(e) {
|
||||
+ result = ".com";
|
||||
+ }
|
||||
+ if (punycodeURL.substr(0, 4) == "xn--" || punycodeURL.indexOf(".xn--") > 0) {
|
||||
// test convertToDisplayIDN with a Unicode URL and with a
|
||||
// Punycode URL if we have one
|
||||
do_check_eq(escape(result),
|
@ -1,25 +0,0 @@
|
||||
commit deccfad4c8ba
|
||||
Author: Matt Woodrow <mwoodrow@mozilla.com>
|
||||
Date: Thu Oct 12 13:10:27 2017 +1300
|
||||
|
||||
Bug 1261175. r=tnikkel, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 8281ed36bd4946af69af747b199814cc1a51fb52
|
||||
---
|
||||
view/nsViewManager.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git view/nsViewManager.cpp view/nsViewManager.cpp
|
||||
index f3540f3478da..230512c0dcc0 100644
|
||||
--- view/nsViewManager.cpp
|
||||
+++ view/nsViewManager.cpp
|
||||
@@ -100,7 +100,7 @@ nsViewManager::~nsViewManager()
|
||||
gViewManagers = nullptr;
|
||||
}
|
||||
|
||||
- mPresShell = nullptr;
|
||||
+ MOZ_RELEASE_ASSERT(!mPresShell, "Releasing nsViewManager without having called Destroy on the PresShell!");
|
||||
}
|
||||
|
||||
// We don't hold a reference to the presentation context because it
|
@ -1,121 +0,0 @@
|
||||
commit d9ad239a35bf
|
||||
Author: Blake Kaplan <mrbkap@gmail.com>
|
||||
Date: Wed Aug 16 16:39:32 2017 -0700
|
||||
|
||||
Bug 1325923 - Implement the "cookie averse document" concept. r=Ehsan
|
||||
|
||||
See https://html.spec.whatwg.org/multipage/dom.html#resource-metadata-management:cookie-averse-document-object
|
||||
|
||||
MozReview-Commit-ID: GndxqhU77cS
|
||||
---
|
||||
dom/base/nsIDocument.h | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git dom/base/nsIDocument.h dom/base/nsIDocument.h
|
||||
index e834f5785cad..921e03e107d1 100644
|
||||
--- dom/base/nsIDocument.h
|
||||
+++ dom/base/nsIDocument.h
|
||||
@@ -2073,6 +2073,34 @@ public:
|
||||
return mMarkedCCGeneration;
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Returns whether this document is cookie averse. See
|
||||
+ * https://html.spec.whatwg.org/multipage/dom.html#cookie-averse-document-object
|
||||
+ */
|
||||
+ bool IsCookieAverse() const
|
||||
+ {
|
||||
+ // If we are a document that "has no browsing context."
|
||||
+ if (!GetInnerWindow()) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ // If we are a document "whose URL's scheme is not a network scheme."
|
||||
+ // NB: Explicitly allow file: URIs to store cookies.
|
||||
+ nsCOMPtr<nsIURI> codebaseURI;
|
||||
+ NodePrincipal()->GetURI(getter_AddRefs(codebaseURI));
|
||||
+
|
||||
+ if (!codebaseURI) {
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ nsAutoCString scheme;
|
||||
+ codebaseURI->GetScheme(scheme);
|
||||
+ return !scheme.EqualsLiteral("http") &&
|
||||
+ !scheme.EqualsLiteral("https") &&
|
||||
+ !scheme.EqualsLiteral("ftp") &&
|
||||
+ !scheme.EqualsLiteral("file");
|
||||
+ }
|
||||
+
|
||||
bool IsLoadedAsData()
|
||||
{
|
||||
return mLoadedAsData;
|
||||
|
||||
commit 10775852824c
|
||||
Author: Blake Kaplan <mrbkap@gmail.com>
|
||||
Date: Wed Aug 16 16:58:19 2017 -0700
|
||||
|
||||
Bug 1325923 - Use this new API. r=Ehsan
|
||||
|
||||
MozReview-Commit-ID: 6tuaEqQA551
|
||||
---
|
||||
dom/base/nsContentSink.cpp | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git dom/base/nsContentSink.cpp dom/base/nsContentSink.cpp
|
||||
index c52761c8521f..c3e9f43846d4 100644
|
||||
--- dom/base/nsContentSink.cpp
|
||||
+++ dom/base/nsContentSink.cpp
|
||||
@@ -843,6 +843,12 @@ nsContentSink::ProcessMETATag(nsIContent* aContent)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
+ // Don't allow setting cookies in <meta http-equiv> in cookie averse
|
||||
+ // documents.
|
||||
+ if (nsGkAtoms::setcookie->Equals(header) && mDocument->IsCookieAverse()) {
|
||||
+ return NS_OK;
|
||||
+ }
|
||||
+
|
||||
nsAutoString result;
|
||||
aContent->GetAttr(kNameSpaceID_None, nsGkAtoms::content, result);
|
||||
if (!result.IsEmpty()) {
|
||||
|
||||
commit f48bc2cbf262
|
||||
Author: Blake Kaplan <mrbkap@gmail.com>
|
||||
Date: Wed Aug 16 17:22:31 2017 -0700
|
||||
|
||||
Bug 1325923 - Use this API where we're supposed to. r=Ehsan
|
||||
|
||||
MozReview-Commit-ID: HGU5YtUzv9U
|
||||
---
|
||||
dom/html/nsHTMLDocument.cpp | 10 ++++++++++
|
||||
1 file changed, 10 insertions(+)
|
||||
|
||||
diff --git dom/html/nsHTMLDocument.cpp dom/html/nsHTMLDocument.cpp
|
||||
index fa3d614854d9..b146698b6494 100644
|
||||
--- dom/html/nsHTMLDocument.cpp
|
||||
+++ dom/html/nsHTMLDocument.cpp
|
||||
@@ -1347,6 +1347,11 @@ nsHTMLDocument::GetCookie(nsAString& aCookie, ErrorResult& rv)
|
||||
return;
|
||||
}
|
||||
|
||||
+ // If the document is a cookie-averse Document... return the empty string.
|
||||
+ if (IsCookieAverse()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
// not having a cookie service isn't an error
|
||||
nsCOMPtr<nsICookieService> service = do_GetService(NS_COOKIESERVICE_CONTRACTID);
|
||||
if (service) {
|
||||
@@ -1400,6 +1405,11 @@ nsHTMLDocument::SetCookie(const nsAString& aCookie, ErrorResult& rv)
|
||||
return;
|
||||
}
|
||||
|
||||
+ // If the document is a cookie-averse Document... do nothing.
|
||||
+ if (IsCookieAverse()) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
// not having a cookie service isn't an error
|
||||
nsCOMPtr<nsICookieService> service = do_GetService(NS_COOKIESERVICE_CONTRACTID);
|
||||
if (service && mDocumentURI) {
|
@ -1,117 +0,0 @@
|
||||
commit e215b167b9b9
|
||||
Author: cku <cku@mozilla.com>
|
||||
Date: Tue Oct 3 11:29:19 2017 +0800
|
||||
|
||||
Bug 1343147 - Do not double applying transform vector of the root frame in a glyph mask into the target context. r=mstange, a=ritu
|
||||
|
||||
When we generate the glyph mask for a transformed frame in
|
||||
GenerateAndPushTextMask, the transform vector had been applied into aContext[1],
|
||||
so we should find a way to prevent applying the vector again when painting the
|
||||
glyph mask.
|
||||
|
||||
In bug 1299715, I tried to prevent double apply at [2], it caused two problems:
|
||||
1. We only skip generating nsDisplayTransform, but we may still create a
|
||||
nsDisplayPerspactive bellow. Since the parent of a nsDisplayPerspective must be
|
||||
a nsDisplayTransform, which have been ignored, so we hit this assertion.
|
||||
2. We skip all transform for all frames while painting the glyph mask, which is
|
||||
not correct. We should only skip double applying transform vector of the root
|
||||
frame.
|
||||
|
||||
This patch fixes both of these issues:
|
||||
a. We will still create a nsDisplayTransform for the root frame if need. But
|
||||
the transform matrix we apply into the target context will be an identity
|
||||
matrix, so we fix #1 above.
|
||||
b. In #a, we change the transform matrix to an identity matrix only for the root
|
||||
frame of the glyph mask, so we fix #2.
|
||||
|
||||
[1]
|
||||
https://hg.mozilla.org/mozilla-central/file/59e5ec5729db/layout/painting/nsDisplayList.cpp#l752
|
||||
[2]
|
||||
https://hg.mozilla.org/mozilla-central/file/ce2c129f0a87/layout/generic/nsFrame.cpp#l2806
|
||||
|
||||
MozReview-Commit-ID: 973lkQQxLB6
|
||||
|
||||
--HG--
|
||||
extra : source : 84451d723686bc47b81c44ed2ddf6c61f3e35915
|
||||
---
|
||||
layout/generic/nsFrame.cpp | 13 +++++--------
|
||||
layout/painting/nsDisplayList.cpp | 9 ++++++++-
|
||||
2 files changed, 13 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git layout/generic/nsFrame.cpp layout/generic/nsFrame.cpp
|
||||
index 37f2e2801220..dbfd61b7e142 100644
|
||||
--- layout/generic/nsFrame.cpp
|
||||
+++ layout/generic/nsFrame.cpp
|
||||
@@ -2803,14 +2803,11 @@ nsIFrame::BuildDisplayListForStackingContext(nsDisplayListBuilder* aBuilder,
|
||||
buildingDisplayList.SetReferenceFrameAndCurrentOffset(outerReferenceFrame,
|
||||
GetOffsetToCrossDoc(outerReferenceFrame));
|
||||
|
||||
- if (!aBuilder->IsForGenerateGlyphMask() &&
|
||||
- !aBuilder->IsForPaintingSelectionBG()) {
|
||||
- nsDisplayTransform *transformItem =
|
||||
- new (aBuilder) nsDisplayTransform(aBuilder, this,
|
||||
- &resultList, dirtyRect, 0,
|
||||
- allowAsyncAnimation);
|
||||
- resultList.AppendNewToTop(transformItem);
|
||||
- }
|
||||
+ nsDisplayTransform *transformItem =
|
||||
+ new (aBuilder) nsDisplayTransform(aBuilder, this,
|
||||
+ &resultList, dirtyRect, 0,
|
||||
+ allowAsyncAnimation);
|
||||
+ resultList.AppendNewToTop(transformItem);
|
||||
|
||||
if (hasPerspective) {
|
||||
if (clipCapturedBy == ContainerItemType::ePerspective) {
|
||||
diff --git layout/painting/nsDisplayList.cpp layout/painting/nsDisplayList.cpp
|
||||
index 801e1ea2fb4d..6477bda52f01 100644
|
||||
--- layout/painting/nsDisplayList.cpp
|
||||
+++ layout/painting/nsDisplayList.cpp
|
||||
@@ -7976,11 +7976,18 @@ already_AddRefed<Layer> nsDisplayTransform::BuildLayer(nsDisplayListBuilder *aBu
|
||||
LayerManager *aManager,
|
||||
const ContainerLayerParameters& aContainerParameters)
|
||||
{
|
||||
+ // While generating a glyph mask, the transform vector of the root frame had
|
||||
+ // been applied into the target context, so stop applying it again here.
|
||||
+ const bool shouldSkipTransform =
|
||||
+ (aBuilder->RootReferenceFrame() == mFrame) &&
|
||||
+ (aBuilder->IsForGenerateGlyphMask() || aBuilder->IsForPaintingSelectionBG());
|
||||
+
|
||||
/* For frames without transform, it would not be removed for
|
||||
* backface hidden here. But, it would be removed by the init
|
||||
* function of nsDisplayTransform.
|
||||
*/
|
||||
- const Matrix4x4& newTransformMatrix = GetTransformForRendering();
|
||||
+ const Matrix4x4 newTransformMatrix =
|
||||
+ shouldSkipTransform ? Matrix4x4(): GetTransformForRendering();
|
||||
|
||||
uint32_t flags = FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR;
|
||||
RefPtr<ContainerLayer> container = aManager->GetLayerBuilder()->
|
||||
diff --git dom/svg/crashtests/1343147.svg dom/svg/crashtests/1343147.svg
|
||||
new file mode 100644
|
||||
index 000000000000..d9c2611ca822
|
||||
--- /dev/null
|
||||
+++ dom/svg/crashtests/1343147.svg
|
||||
@@ -0,0 +1,13 @@
|
||||
+<svg xmlns="http://www.w3.org/2000/svg">
|
||||
+<style>
|
||||
+<![CDATA[
|
||||
+ svg {
|
||||
+ background-image: linear-gradient(lime, lime);
|
||||
+ background-clip: text;
|
||||
+ }
|
||||
+ text { transform: skewy(30grad); }
|
||||
+ g { perspective: 0; }
|
||||
+]]>
|
||||
+</style>
|
||||
+ <g><text>hello</text></g>
|
||||
+</svg>
|
||||
diff --git dom/svg/crashtests/crashtests.list dom/svg/crashtests/crashtests.list
|
||||
index 1727a206ec4f..57ab320161e2 100644
|
||||
--- dom/svg/crashtests/crashtests.list
|
||||
+++ dom/svg/crashtests/crashtests.list
|
||||
@@ -90,4 +90,5 @@ load 1329849-5.svg
|
||||
load 1329849-6.svg
|
||||
load 1329093-1.html
|
||||
load 1329093-2.html
|
||||
+load 1343147.svg
|
||||
load 1402798.html
|
@ -1,262 +0,0 @@
|
||||
commit e530ba4d4394
|
||||
Author: Thomas Wisniewski <wisniewskit@gmail.com>
|
||||
Date: Tue Jul 4 20:59:26 2017 -0400
|
||||
|
||||
Bug 1355576 - Add ability to clear all localStorage with the browsingData API; r=bsilverberg,janv
|
||||
|
||||
MozReview-Commit-ID: 4UUqg62yIo9
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : 9c6154bbe878fc3921d22027fdc90dbdaed05be9
|
||||
---
|
||||
browser/components/extensions/ext-browsingData.js | 10 +++
|
||||
.../extensions/schemas/browsing_data.json | 1 -
|
||||
.../extensions/test/browser/browser-common.ini | 1 +
|
||||
.../browser_ext_browsingData_localStorage.js | 93 ++++++++++++++++++++++
|
||||
.../test/xpcshell/test_ext_browsingData.js | 4 +-
|
||||
dom/storage/LocalStorageManager.cpp | 3 +-
|
||||
dom/storage/StorageObserver.cpp | 12 +++
|
||||
.../extensions/schemas/browsing_data.json | 1 -
|
||||
8 files changed, 120 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git browser/components/extensions/ext-browsingData.js browser/components/extensions/ext-browsingData.js
|
||||
index fd59141dd15d..109ec9601487 100644
|
||||
--- browser/components/extensions/ext-browsingData.js
|
||||
+++ browser/components/extensions/ext-browsingData.js
|
||||
@@ -83,6 +83,10 @@ const clearHistory = options => {
|
||||
return sanitizer.items.history.clear(makeRange(options));
|
||||
};
|
||||
|
||||
+const clearLocalStorage = async function(options) {
|
||||
+ Services.obs.notifyObservers(null, "extension:purge-localStorage");
|
||||
+};
|
||||
+
|
||||
const clearPasswords = async function(options) {
|
||||
let loginManager = Services.logins;
|
||||
let yieldCounter = 0;
|
||||
@@ -152,6 +156,9 @@ const doRemoval = (options, dataToRemove, extension) => {
|
||||
case "history":
|
||||
removalPromises.push(clearHistory(options));
|
||||
break;
|
||||
+ case "localStorage":
|
||||
+ removalPromises.push(clearLocalStorage(options));
|
||||
+ break;
|
||||
case "passwords":
|
||||
removalPromises.push(clearPasswords(options));
|
||||
break;
|
||||
@@ -225,6 +232,9 @@ this.browsingData = class extends ExtensionAPI {
|
||||
removeHistory(options) {
|
||||
return doRemoval(options, {history: true});
|
||||
},
|
||||
+ removeLocalStorage(options) {
|
||||
+ return doRemoval(options, {localStorage: true});
|
||||
+ },
|
||||
removePasswords(options) {
|
||||
return doRemoval(options, {passwords: true});
|
||||
},
|
||||
diff --git browser/components/extensions/schemas/browsing_data.json browser/components/extensions/schemas/browsing_data.json
|
||||
index a780f5640c8f..7755714eb898 100644
|
||||
--- browser/components/extensions/schemas/browsing_data.json
|
||||
+++ browser/components/extensions/schemas/browsing_data.json
|
||||
@@ -341,7 +341,6 @@
|
||||
"description": "Clears websites' local storage data.",
|
||||
"type": "function",
|
||||
"async": "callback",
|
||||
- "unsupported": true,
|
||||
"parameters": [
|
||||
{
|
||||
"$ref": "RemovalOptions",
|
||||
diff --git browser/components/extensions/test/browser/browser-common.ini browser/components/extensions/test/browser/browser-common.ini
|
||||
index 464b8ba18f37..e3f7700f3939 100644
|
||||
--- browser/components/extensions/test/browser/browser-common.ini
|
||||
+++ browser/components/extensions/test/browser/browser-common.ini
|
||||
@@ -46,6 +46,7 @@ skip-if = (os == 'win' && !debug) # bug 1352668
|
||||
[browser_ext_browserAction_theme_icons.js]
|
||||
[browser_ext_browsingData_formData.js]
|
||||
[browser_ext_browsingData_history.js]
|
||||
+[browser_ext_browsingData_localStorage.js]
|
||||
[browser_ext_browsingData_pluginData.js]
|
||||
[browser_ext_browsingData_serviceWorkers.js]
|
||||
[browser_ext_commands_execute_browser_action.js]
|
||||
diff --git browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js
|
||||
new file mode 100644
|
||||
index 000000000000..215f26d1fcb6
|
||||
--- /dev/null
|
||||
+++ browser/components/extensions/test/browser/browser_ext_browsingData_localStorage.js
|
||||
@@ -0,0 +1,93 @@
|
||||
+/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
|
||||
+/* vim: set sts=2 sw=2 et tw=80: */
|
||||
+"use strict";
|
||||
+
|
||||
+add_task(async function testLocalStorage() {
|
||||
+ async function background() {
|
||||
+ function openTabs() {
|
||||
+ let promise = new Promise(resolve => {
|
||||
+ let tabURLs = [
|
||||
+ "http://example.com/",
|
||||
+ "http://example.net/",
|
||||
+ ];
|
||||
+
|
||||
+ let tabs;
|
||||
+ let waitingCount = tabURLs.length;
|
||||
+
|
||||
+ let listener = async msg => {
|
||||
+ if (msg !== "content-script-ready" || --waitingCount) {
|
||||
+ return;
|
||||
+ }
|
||||
+ browser.runtime.onMessage.removeListener(listener);
|
||||
+ resolve(Promise.all(tabs));
|
||||
+ };
|
||||
+
|
||||
+ browser.runtime.onMessage.addListener(listener);
|
||||
+
|
||||
+ tabs = tabURLs.map(url => {
|
||||
+ return browser.tabs.create({url: url});
|
||||
+ });
|
||||
+ });
|
||||
+
|
||||
+ return promise;
|
||||
+ }
|
||||
+
|
||||
+ function sendMessageToTabs(tabs, message) {
|
||||
+ return Promise.all(
|
||||
+ tabs.map(tab => { return browser.tabs.sendMessage(tab.id, message); }));
|
||||
+ }
|
||||
+
|
||||
+ let tabs = await openTabs();
|
||||
+
|
||||
+ await sendMessageToTabs(tabs, "resetLocalStorage");
|
||||
+ await sendMessageToTabs(tabs, "checkLocalStorageSet");
|
||||
+ await browser.browsingData.removeLocalStorage({});
|
||||
+ await sendMessageToTabs(tabs, "checkLocalStorageCleared");
|
||||
+
|
||||
+ await sendMessageToTabs(tabs, "resetLocalStorage");
|
||||
+ await sendMessageToTabs(tabs, "checkLocalStorageSet");
|
||||
+ await browser.browsingData.remove({}, {localStorage: true});
|
||||
+ await sendMessageToTabs(tabs, "checkLocalStorageCleared");
|
||||
+
|
||||
+ browser.tabs.remove(tabs.map(tab => tab.id));
|
||||
+
|
||||
+ browser.test.notifyPass("done");
|
||||
+ }
|
||||
+
|
||||
+ function contentScript() {
|
||||
+ browser.runtime.onMessage.addListener(msg => {
|
||||
+ if (msg === "resetLocalStorage") {
|
||||
+ localStorage.clear();
|
||||
+ localStorage.setItem("test", "test");
|
||||
+ } else if (msg === "checkLocalStorageSet") {
|
||||
+ browser.test.assertEq("test", localStorage.getItem("test"));
|
||||
+ } else if (msg === "checkLocalStorageCleared") {
|
||||
+ browser.test.assertEq(null, localStorage.getItem("test"));
|
||||
+ }
|
||||
+ });
|
||||
+ browser.runtime.sendMessage("content-script-ready");
|
||||
+ }
|
||||
+
|
||||
+ let extension = ExtensionTestUtils.loadExtension({
|
||||
+ background,
|
||||
+ manifest: {
|
||||
+ "permissions": ["browsingData"],
|
||||
+ "content_scripts": [{
|
||||
+ "matches": [
|
||||
+ "http://example.com/",
|
||||
+ "http://example.net/",
|
||||
+ ],
|
||||
+ "js": ["content-script.js"],
|
||||
+ "run_at": "document_start",
|
||||
+ }],
|
||||
+ },
|
||||
+ files: {
|
||||
+ "content-script.js": contentScript,
|
||||
+ },
|
||||
+ });
|
||||
+
|
||||
+ await extension.startup();
|
||||
+ await extension.awaitFinish("done");
|
||||
+ await extension.unload();
|
||||
+});
|
||||
+
|
||||
diff --git browser/components/extensions/test/xpcshell/test_ext_browsingData.js browser/components/extensions/test/xpcshell/test_ext_browsingData.js
|
||||
index 0c1c4874ca44..0b8972058e64 100644
|
||||
--- browser/components/extensions/test/xpcshell/test_ext_browsingData.js
|
||||
+++ browser/components/extensions/test/xpcshell/test_ext_browsingData.js
|
||||
@@ -44,7 +44,7 @@ add_task(async function testInvalidArguments() {
|
||||
|
||||
add_task(async function testUnimplementedDataType() {
|
||||
function background() {
|
||||
- browser.browsingData.remove({}, {localStorage: true});
|
||||
+ browser.browsingData.remove({}, {indexedDB: true});
|
||||
browser.test.sendMessage("finished");
|
||||
}
|
||||
|
||||
@@ -61,6 +61,6 @@ add_task(async function testUnimplementedDataType() {
|
||||
await extension.unload();
|
||||
});
|
||||
|
||||
- let warningObserved = messages.find(line => /Firefox does not support dataTypes: localStorage/.test(line));
|
||||
+ let warningObserved = messages.find(line => /Firefox does not support dataTypes: indexedDB/.test(line));
|
||||
ok(warningObserved, "Warning issued when calling remove with an unimplemented dataType.");
|
||||
});
|
||||
diff --git dom/storage/LocalStorageManager.cpp dom/storage/LocalStorageManager.cpp
|
||||
index a161de2bc596..f366e7874a90 100644
|
||||
--- dom/storage/LocalStorageManager.cpp
|
||||
+++ dom/storage/LocalStorageManager.cpp
|
||||
@@ -386,7 +386,8 @@ LocalStorageManager::Observe(const char* aTopic,
|
||||
}
|
||||
|
||||
// Clear everything, caches + database
|
||||
- if (!strcmp(aTopic, "cookie-cleared")) {
|
||||
+ if (!strcmp(aTopic, "cookie-cleared") ||
|
||||
+ !strcmp(aTopic, "extension:purge-localStorage-caches")) {
|
||||
ClearCaches(LocalStorageCache::kUnloadComplete, pattern, EmptyCString());
|
||||
return NS_OK;
|
||||
}
|
||||
diff --git dom/storage/StorageObserver.cpp dom/storage/StorageObserver.cpp
|
||||
index e5b010f88c7b..48d484748209 100644
|
||||
--- dom/storage/StorageObserver.cpp
|
||||
+++ dom/storage/StorageObserver.cpp
|
||||
@@ -66,6 +66,7 @@ StorageObserver::Init()
|
||||
obs->AddObserver(sSelf, "browser:purge-domain-data", true);
|
||||
obs->AddObserver(sSelf, "last-pb-context-exited", true);
|
||||
obs->AddObserver(sSelf, "clear-origin-attributes-data", true);
|
||||
+ obs->AddObserver(sSelf, "extension:purge-localStorage", true);
|
||||
|
||||
// Shutdown
|
||||
obs->AddObserver(sSelf, "profile-after-change", true);
|
||||
@@ -270,6 +271,23 @@ StorageObserver::Observe(nsISupports* aSubject,
|
||||
|
||||
Notify("session-only-cleared", NS_ConvertUTF8toUTF16(originSuffix),
|
||||
originScope);
|
||||
+
|
||||
+ return NS_OK;
|
||||
+ }
|
||||
+
|
||||
+ if (!strcmp(aTopic, "extension:purge-localStorage")) {
|
||||
+ StorageDBChild* storageChild = StorageDBChild::GetOrCreate();
|
||||
+ if (NS_WARN_IF(!storageChild)) {
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+ }
|
||||
+
|
||||
+ storageChild->AsyncClearAll();
|
||||
+
|
||||
+ if (XRE_IsParentProcess()) {
|
||||
+ storageChild->SendClearAll();
|
||||
+ }
|
||||
+
|
||||
+ Notify("extension:purge-localStorage-caches");
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
diff --git mobile/android/components/extensions/schemas/browsing_data.json mobile/android/components/extensions/schemas/browsing_data.json
|
||||
index 483a462d422c..1019c1a23953 100644
|
||||
--- mobile/android/components/extensions/schemas/browsing_data.json
|
||||
+++ mobile/android/components/extensions/schemas/browsing_data.json
|
||||
@@ -345,7 +345,6 @@
|
||||
"description": "Clears websites' local storage data.",
|
||||
"type": "function",
|
||||
"async": "callback",
|
||||
- "unsupported": true,
|
||||
"parameters": [
|
||||
{
|
||||
"$ref": "RemovalOptions",
|
@ -1,60 +0,0 @@
|
||||
commit 97515a9302ed
|
||||
Author: James Cheng <jacheng@mozilla.com>
|
||||
Date: Mon Oct 9 13:40:12 2017 -0400
|
||||
|
||||
Bug 1365894 - Make SystemGroupImpl be a normal ref-counted object. r=ehsan, a=ritu
|
||||
|
||||
MozReview-Commit-ID: LUcoBhNx2M5
|
||||
|
||||
--HG--
|
||||
extra : source : 3959033a31666770047dd460979032464a48ba66
|
||||
---
|
||||
xpcom/threads/SystemGroup.cpp | 18 +++++-------------
|
||||
1 file changed, 5 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git xpcom/threads/SystemGroup.cpp xpcom/threads/SystemGroup.cpp
|
||||
index a95ecc6cdd77..04bf3bd248ef 100644
|
||||
--- xpcom/threads/SystemGroup.cpp
|
||||
+++ xpcom/threads/SystemGroup.cpp
|
||||
@@ -16,7 +16,7 @@ class SystemGroupImpl final : public SchedulerGroup
|
||||
{
|
||||
public:
|
||||
SystemGroupImpl();
|
||||
- ~SystemGroupImpl() {}
|
||||
+ NS_INLINE_DECL_THREADSAFE_REFCOUNTING(SystemGroupImpl)
|
||||
|
||||
static void InitStatic();
|
||||
static void ShutdownStatic();
|
||||
@@ -24,20 +24,12 @@ public:
|
||||
|
||||
static bool Initialized() { return !!sSingleton; }
|
||||
|
||||
- NS_METHOD_(MozExternalRefCountType) AddRef(void)
|
||||
- {
|
||||
- return 2;
|
||||
- }
|
||||
- NS_METHOD_(MozExternalRefCountType) Release(void)
|
||||
- {
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
private:
|
||||
- static UniquePtr<SystemGroupImpl> sSingleton;
|
||||
+ ~SystemGroupImpl() = default;
|
||||
+ static StaticRefPtr<SystemGroupImpl> sSingleton;
|
||||
};
|
||||
|
||||
-UniquePtr<SystemGroupImpl> SystemGroupImpl::sSingleton;
|
||||
+StaticRefPtr<SystemGroupImpl> SystemGroupImpl::sSingleton;
|
||||
|
||||
SystemGroupImpl::SystemGroupImpl()
|
||||
{
|
||||
@@ -49,7 +41,7 @@ SystemGroupImpl::InitStatic()
|
||||
{
|
||||
MOZ_ASSERT(!sSingleton);
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
- sSingleton = MakeUnique<SystemGroupImpl>();
|
||||
+ sSingleton = new SystemGroupImpl();
|
||||
}
|
||||
|
||||
/* static */ void
|
@ -1,128 +0,0 @@
|
||||
commit dfe9efffb57b
|
||||
Author: Marco Bonardo <mbonardo@mozilla.com>
|
||||
Date: Wed Oct 4 11:13:19 2017 +0200
|
||||
|
||||
Bug 1366420. r=standard8, a=ritu
|
||||
|
||||
MozReview-Commit-ID: FOIqr5RdRjz
|
||||
|
||||
--HG--
|
||||
extra : source : 08312cdfb2304264e6871357fe2e6e7831272d21
|
||||
---
|
||||
toolkit/components/places/BookmarkHTMLUtils.jsm | 2 +-
|
||||
.../unit/test_bookmarks_html_escape_entities.js | 81 ++++++++++++++++++++++
|
||||
toolkit/components/places/tests/unit/xpcshell.ini | 1 +
|
||||
3 files changed, 83 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git toolkit/components/places/BookmarkHTMLUtils.jsm toolkit/components/places/BookmarkHTMLUtils.jsm
|
||||
index 653e29fc5875..f4c1e7495d32 100644
|
||||
--- toolkit/components/places/BookmarkHTMLUtils.jsm
|
||||
+++ toolkit/components/places/BookmarkHTMLUtils.jsm
|
||||
@@ -1143,7 +1143,7 @@ BookmarkExporter.prototype = {
|
||||
if (aItem.charset)
|
||||
this._writeAttribute("LAST_CHARSET", escapeHtmlEntities(aItem.charset));
|
||||
if (aItem.tags)
|
||||
- this._writeAttribute("TAGS", aItem.tags);
|
||||
+ this._writeAttribute("TAGS", escapeHtmlEntities(aItem.tags));
|
||||
this._writeLine(">" + escapeHtmlEntities(aItem.title) + "</A>");
|
||||
this._writeDescription(aItem, aIndent);
|
||||
},
|
||||
diff --git toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js
|
||||
new file mode 100644
|
||||
index 000000000000..73c5e0e0744d
|
||||
--- /dev/null
|
||||
+++ toolkit/components/places/tests/unit/test_bookmarks_html_escape_entities.js
|
||||
@@ -0,0 +1,81 @@
|
||||
+/* Any copyright is dedicated to the Public Domain.
|
||||
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
+
|
||||
+"use strict";
|
||||
+
|
||||
+// Checks that html entities are escaped in bookmarks.html files.
|
||||
+
|
||||
+const DESCRIPTION_ANNO = "bookmarkProperties/description";
|
||||
+
|
||||
+add_task(async function() {
|
||||
+ // Removes bookmarks.html if the file already exists.
|
||||
+ let HTMLFile = OS.Path.join(OS.Constants.Path.profileDir, "bookmarks.html");
|
||||
+ if ((await OS.File.exists(HTMLFile))) {
|
||||
+ await OS.File.remove(HTMLFile);
|
||||
+ }
|
||||
+
|
||||
+ let unescaped = '<unescaped="test">';
|
||||
+ // Adds bookmarks and tags to the database.
|
||||
+ const url = 'http://www.google.it/"/';
|
||||
+ let bm = await PlacesUtils.bookmarks.insert({
|
||||
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
|
||||
+ url,
|
||||
+ title: unescaped
|
||||
+ });
|
||||
+ await PlacesUtils.keywords.insert({ url, keyword: unescaped, postData: unescaped })
|
||||
+ let uri = Services.io.newURI(url);
|
||||
+ PlacesUtils.tagging.tagURI(uri, [unescaped]);
|
||||
+ await PlacesUtils.setCharsetForURI(uri, unescaped);
|
||||
+ PlacesUtils.annotations.setItemAnnotation(
|
||||
+ await PlacesUtils.promiseItemId(bm.guid),
|
||||
+ DESCRIPTION_ANNO, unescaped, 0, PlacesUtils.annotations.EXPIRE_NEVER);
|
||||
+
|
||||
+ // Exports the bookmarks as a HTML file.
|
||||
+ await BookmarkHTMLUtils.exportToFile(HTMLFile);
|
||||
+ await PlacesUtils.bookmarks.remove(bm);
|
||||
+
|
||||
+ // Check there are no unescaped entities in the html file.
|
||||
+ let xml = await new Promise((resolve, reject) => {
|
||||
+ let xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]
|
||||
+ .createInstance(Ci.nsIXMLHttpRequest);
|
||||
+ xhr.onload = () => {
|
||||
+ try {
|
||||
+ resolve(xhr.responseXML);
|
||||
+ } catch (e) {
|
||||
+ reject(e);
|
||||
+ }
|
||||
+ };
|
||||
+ xhr.onabort = xhr.onerror = xhr.ontimeout = () => {
|
||||
+ reject(new Error("xmlhttprequest failed"));
|
||||
+ };
|
||||
+ xhr.open("GET", OS.Path.toFileURI(HTMLFile));
|
||||
+ xhr.responseType = "document";
|
||||
+ xhr.overrideMimeType("text/html");
|
||||
+ xhr.send();
|
||||
+ });
|
||||
+
|
||||
+ let checksCount = 6;
|
||||
+ for (let current = xml; current;
|
||||
+ current = current.firstChild || current.nextSibling || current.parentNode.nextSibling) {
|
||||
+ switch (current.nodeType) {
|
||||
+ case Ci.nsIDOMNode.ELEMENT_NODE:
|
||||
+ for (let {name, value} of current.attributes) {
|
||||
+ do_print("Found attribute: " + name);
|
||||
+ // Check tags, keyword, postData and charSet.
|
||||
+ if (["tags", "last_charset", "shortcuturl", "post_data"].includes(name)) {
|
||||
+ Assert.equal(value, unescaped, `Attribute ${name} should be complete`);
|
||||
+ checksCount--;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ case Ci.nsIDOMNode.TEXT_NODE:
|
||||
+ // Check Title and description.
|
||||
+ if (!current.data.startsWith("\n") && !current.data.includes("Bookmarks")) {
|
||||
+ Assert.equal(current.data.trim(), unescaped, "Text node should be complete");
|
||||
+ checksCount--;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ Assert.equal(checksCount, 0, "All the checks ran")
|
||||
+});
|
||||
diff --git toolkit/components/places/tests/unit/xpcshell.ini toolkit/components/places/tests/unit/xpcshell.ini
|
||||
index 6952e4158753..776e7e548f92 100644
|
||||
--- toolkit/components/places/tests/unit/xpcshell.ini
|
||||
+++ toolkit/components/places/tests/unit/xpcshell.ini
|
||||
@@ -67,6 +67,7 @@ skip-if = (os == "win" && os_version == "5.1") # Bug 1158887
|
||||
[test_bookmarks_json.js]
|
||||
[test_bookmarks_html.js]
|
||||
[test_bookmarks_html_corrupt.js]
|
||||
+[test_bookmarks_html_escape_entities.js]
|
||||
[test_bookmarks_html_import_tags.js]
|
||||
[test_bookmarks_html_singleframe.js]
|
||||
[test_bookmarks_restore_notification.js]
|
@ -1,66 +0,0 @@
|
||||
commit 4a1737e0c456
|
||||
Author: David Keeler <dkeeler@mozilla.com>
|
||||
Date: Fri Sep 15 14:47:54 2017 -0700
|
||||
|
||||
Bug 1369561 - Address misc. SnprintfLiteral correctness nits. r=jld, r=froydnj, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : f5533b6cd09c35eef381e311940b5bd5231d3553
|
||||
---
|
||||
security/sandbox/linux/SandboxUtil.cpp | 17 ++++++++++-------
|
||||
xpcom/base/nsSystemInfo.cpp | 2 +-
|
||||
2 files changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git security/sandbox/linux/SandboxUtil.cpp security/sandbox/linux/SandboxUtil.cpp
|
||||
index ad6003ecaad5..999329882364 100644
|
||||
--- security/sandbox/linux/SandboxUtil.cpp
|
||||
+++ security/sandbox/linux/SandboxUtil.cpp
|
||||
@@ -62,7 +62,6 @@ UnshareUserNamespace()
|
||||
uid_t uid = getuid();
|
||||
gid_t gid = getgid();
|
||||
char buf[80];
|
||||
- size_t len;
|
||||
|
||||
if (syscall(__NR_unshare, CLONE_NEWUSER) != 0) {
|
||||
return false;
|
||||
@@ -84,17 +83,21 @@ UnshareUserNamespace()
|
||||
// current thread. However, CLONE_NEWUSER can be unshared only in a
|
||||
// single-threaded process, so those are equivalent if we reach this
|
||||
// point.
|
||||
- len = size_t(SprintfLiteral(buf, "%u %u 1\n", uid, uid));
|
||||
- MOZ_ASSERT(len < sizeof(buf));
|
||||
- if (!WriteStringToFile("/proc/self/uid_map", buf, len)) {
|
||||
+ int len = SprintfLiteral(buf, "%u %u 1\n", uid, uid);
|
||||
+ if (len >= int(sizeof(buf)) || len < 0) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!WriteStringToFile("/proc/self/uid_map", buf, size_t(len))) {
|
||||
MOZ_CRASH("Failed to write /proc/self/uid_map");
|
||||
}
|
||||
|
||||
Unused << WriteStringToFile("/proc/self/setgroups", "deny", 4);
|
||||
|
||||
- len = size_t(SprintfLiteral(buf, "%u %u 1\n", gid, gid));
|
||||
- MOZ_ASSERT(len < sizeof(buf));
|
||||
- if (!WriteStringToFile("/proc/self/gid_map", buf, len)) {
|
||||
+ len = SprintfLiteral(buf, "%u %u 1\n", gid, gid);
|
||||
+ if (len >= int(sizeof(buf)) || len < 0) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ if (!WriteStringToFile("/proc/self/gid_map", buf, size_t(len))) {
|
||||
MOZ_CRASH("Failed to write /proc/self/gid_map");
|
||||
}
|
||||
return true;
|
||||
diff --git xpcom/base/nsSystemInfo.cpp xpcom/base/nsSystemInfo.cpp
|
||||
index e5a7fe97be03..782dc9abf37d 100644
|
||||
--- xpcom/base/nsSystemInfo.cpp
|
||||
+++ xpcom/base/nsSystemInfo.cpp
|
||||
@@ -706,7 +706,7 @@ nsSystemInfo::Init()
|
||||
}
|
||||
|
||||
nsAutoCString secondaryLibrary;
|
||||
- if (gtkver_len > 0) {
|
||||
+ if (gtkver_len > 0 && gtkver_len < int(sizeof(gtkver))) {
|
||||
secondaryLibrary.Append(nsDependentCSubstring(gtkver, gtkver_len));
|
||||
}
|
||||
|
@ -1,100 +0,0 @@
|
||||
commit c79086d4c25c
|
||||
Author: Jonathan Kew <jkew@mozilla.com>
|
||||
Date: Wed Sep 27 11:16:35 2017 +0100
|
||||
|
||||
Bug 1370497 - Check ScriptExtensions property of combining marks when available. r=valentin, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 6bd2d96c0c3d952b205e1bb2f6915cbc820a61a1
|
||||
extra : amend_source : b0c6b6fbea0bf77c8d1527e131d3773b4d959ea0
|
||||
---
|
||||
netwerk/dns/nsIDNService.cpp | 45 ++++++++++++++++++++++++++++++++------
|
||||
netwerk/test/unit/test_idn_urls.js | 5 +++++
|
||||
2 files changed, 43 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git netwerk/dns/nsIDNService.cpp netwerk/dns/nsIDNService.cpp
|
||||
index 4c45a2d52e45..e07910a7e70d 100644
|
||||
--- netwerk/dns/nsIDNService.cpp
|
||||
+++ netwerk/dns/nsIDNService.cpp
|
||||
@@ -26,6 +26,7 @@
|
||||
const bool kIDNA2008_TransitionalProcessing = false;
|
||||
|
||||
#include "ICUUtils.h"
|
||||
+#include "unicode/uscript.h"
|
||||
#endif
|
||||
|
||||
using namespace mozilla::unicode;
|
||||
@@ -900,8 +901,8 @@ bool nsIDNService::isLabelSafe(const nsAString &label)
|
||||
}
|
||||
|
||||
// Check for mixed numbering systems
|
||||
- if (GetGeneralCategory(ch) ==
|
||||
- HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) {
|
||||
+ auto genCat = GetGeneralCategory(ch);
|
||||
+ if (genCat == HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER) {
|
||||
uint32_t zeroCharacter = ch - GetNumericValue(ch);
|
||||
if (savedNumberingSystem == 0) {
|
||||
// If we encounter a decimal number, save the zero character from that
|
||||
@@ -912,11 +913,41 @@ bool nsIDNService::isLabelSafe(const nsAString &label)
|
||||
}
|
||||
}
|
||||
|
||||
- // Check for consecutive non-spacing marks
|
||||
- if (previousChar != 0 &&
|
||||
- previousChar == ch &&
|
||||
- GetGeneralCategory(ch) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
|
||||
- return false;
|
||||
+ if (genCat == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) {
|
||||
+ // Check for consecutive non-spacing marks.
|
||||
+ if (previousChar != 0 && previousChar == ch) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // Check for marks whose expected script doesn't match the base script.
|
||||
+ if (lastScript != Script::INVALID) {
|
||||
+ const size_t kMaxScripts = 32; // more than ample for current values
|
||||
+ // of ScriptExtensions property
|
||||
+ UScriptCode scripts[kMaxScripts];
|
||||
+ UErrorCode errorCode = U_ZERO_ERROR;
|
||||
+ int nScripts = uscript_getScriptExtensions(ch, scripts, kMaxScripts,
|
||||
+ &errorCode);
|
||||
+ MOZ_ASSERT(U_SUCCESS(errorCode), "uscript_getScriptExtensions failed");
|
||||
+ if (U_FAILURE(errorCode)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ // nScripts will always be >= 1, because even for undefined characters
|
||||
+ // uscript_getScriptExtensions will return Script::INVALID.
|
||||
+ // If the mark just has script=COMMON or INHERITED, we can't check any
|
||||
+ // more carefully, but if it has specific scriptExtension codes, then
|
||||
+ // assume those are the only valid scripts to use it with.
|
||||
+ if (nScripts > 1 ||
|
||||
+ (Script(scripts[0]) != Script::COMMON &&
|
||||
+ Script(scripts[0]) != Script::INHERITED)) {
|
||||
+ while (--nScripts >= 0) {
|
||||
+ if (Script(scripts[nScripts]) == lastScript) {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ if (nScripts == -1) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
|
||||
// Simplified/Traditional Chinese check temporarily disabled -- bug 857481
|
||||
diff --git netwerk/test/unit/test_idn_urls.js netwerk/test/unit/test_idn_urls.js
|
||||
index 0d8cf3216293..f39a9650a13b 100644
|
||||
--- netwerk/test/unit/test_idn_urls.js
|
||||
+++ netwerk/test/unit/test_idn_urls.js
|
||||
@@ -295,6 +295,11 @@ const testcases = [
|
||||
["䕮䕵䕶䕱.中国123", "xn--google.xn--123-u68dy61b", false, true, true],
|
||||
["xn--accountlogin.䕮䕵䕶䕱", "xn--accountlogin.xn--google", false, true, true],
|
||||
["䕮䕵䕶䕱.xn--accountlogin", "xn--google.xn--accountlogin", false, true, true],
|
||||
+
|
||||
+ // Arabic diacritic not allowed in Latin text (bug 1370497)
|
||||
+ ["goo\u0650gle", "xn--google-yri", false, false, false],
|
||||
+ // ...but Arabic diacritics are allowed on Arabic text
|
||||
+ ["العَرَبِي", "xn--mgbc0a5a6cxbzabt", false, true, true],
|
||||
];
|
||||
|
||||
const profiles = ["ASCII", "high", "moderate"];
|
@ -1,37 +0,0 @@
|
||||
commit b481800095d4
|
||||
Author: Stone Shih <sshih@mozilla.com>
|
||||
Date: Tue Sep 19 15:41:52 2017 +0800
|
||||
|
||||
Bug 1375146 - Revise sending drag event. r=smaug, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : d4496b8befbf0ef5ae124a9fbda37ad5b885f9e1
|
||||
---
|
||||
dom/events/EventStateManager.cpp | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git dom/events/EventStateManager.cpp dom/events/EventStateManager.cpp
|
||||
index b94dc0c88e01..1f48884058de 100644
|
||||
--- dom/events/EventStateManager.cpp
|
||||
+++ dom/events/EventStateManager.cpp
|
||||
@@ -1292,8 +1292,9 @@ EventStateManager::DispatchCrossProcessEvent(WidgetEvent* aEvent,
|
||||
return;
|
||||
}
|
||||
case eDragEventClass: {
|
||||
- if (remote->Manager()->IsContentParent()) {
|
||||
- remote->Manager()->AsContentParent()->MaybeInvokeDragSession(remote);
|
||||
+ RefPtr<TabParent> tabParent = remote;
|
||||
+ if (tabParent->Manager()->IsContentParent()) {
|
||||
+ tabParent->Manager()->AsContentParent()->MaybeInvokeDragSession(tabParent);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIDragSession> dragSession = nsContentUtils::GetDragSession();
|
||||
@@ -1309,7 +1310,7 @@ EventStateManager::DispatchCrossProcessEvent(WidgetEvent* aEvent,
|
||||
}
|
||||
}
|
||||
|
||||
- remote->SendRealDragEvent(*aEvent->AsDragEvent(), action, dropEffect);
|
||||
+ tabParent->SendRealDragEvent(*aEvent->AsDragEvent(), action, dropEffect);
|
||||
return;
|
||||
}
|
||||
case ePluginEventClass: {
|
@ -1,929 +0,0 @@
|
||||
commit 2b68b38709b1
|
||||
Author: Andrew McCreight <continuation@gmail.com>
|
||||
Date: Tue Aug 22 14:24:11 2017 -0700
|
||||
|
||||
Bug 1377587, part 1 - Always act like __exposedProps__ is missing. r=krizsa
|
||||
|
||||
This patch gently removes support for __exposedProps__ by changing
|
||||
ExposedPropertiesOnly::check() to always return false, while still
|
||||
failing silently in deny for some kinds of access.
|
||||
|
||||
The tests that I changed all involve testing the behavior with
|
||||
__exposedProps__. I adjusted them to expect it to fail, or to adjust
|
||||
the error message they get when they fail. That seemed better than
|
||||
deleting them entirely.
|
||||
|
||||
Note that test_bug1065185.html had a bug, so that it never executed
|
||||
the first case. I fixed that, and then fixed up the test to work when
|
||||
__exposedProps__ is not supported.
|
||||
|
||||
This also removes various bits of the test framework that use
|
||||
__exposedProps__, but don't actually need to.
|
||||
|
||||
MozReview-Commit-ID: 8fvkAmITmXY
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : ef7e2c55adc12511f17f3865ebb46c343875f0b3
|
||||
---
|
||||
addon-sdk/source/lib/sdk/console/plain-text.js | 10 --
|
||||
addon-sdk/source/lib/sdk/test/loader.js | 5 -
|
||||
.../addons/e10s-content/lib/test-content-script.js | 6 +-
|
||||
addon-sdk/source/test/test-content-script.js | 6 +-
|
||||
devtools/server/tests/unit/test_objectgrips-17.js | 4 -
|
||||
dom/base/nsDeprecatedOperationList.h | 1 -
|
||||
dom/base/test/chrome/cpows_child.js | 12 +-
|
||||
dom/locales/en-US/chrome/dom/dom.properties | 2 -
|
||||
js/xpconnect/src/XPCJSRuntime.cpp | 1 -
|
||||
js/xpconnect/src/xpcprivate.h | 1 -
|
||||
js/xpconnect/tests/chrome/test_bug1065185.html | 6 +-
|
||||
js/xpconnect/tests/chrome/test_cows.xul | 80 +++------
|
||||
js/xpconnect/tests/chrome/test_exposeInDerived.xul | 13 +-
|
||||
js/xpconnect/tests/unit/test_bug1082450.js | 20 +--
|
||||
js/xpconnect/tests/unit/test_bug780370.js | 7 +-
|
||||
js/xpconnect/tests/unit/test_bug813901.js | 2 +-
|
||||
js/xpconnect/tests/unit/test_bug853709.js | 4 +-
|
||||
js/xpconnect/tests/unit/test_bug854558.js | 2 +-
|
||||
js/xpconnect/tests/unit/test_bug930091.js | 2 +-
|
||||
js/xpconnect/wrappers/AccessCheck.cpp | 179 ---------------------
|
||||
js/xpconnect/wrappers/AccessCheck.h | 11 +-
|
||||
js/xpconnect/wrappers/ChromeObjectWrapper.h | 6 +-
|
||||
js/xpconnect/wrappers/WrapperFactory.cpp | 4 +-
|
||||
js/xpconnect/wrappers/XrayWrapper.cpp | 2 +-
|
||||
testing/mochitest/tests/SimpleTest/ChromePowers.js | 9 --
|
||||
.../specialpowers/content/MockPermissionPrompt.jsm | 12 --
|
||||
.../components/addoncompat/RemoteAddonsParent.jsm | 2 +-
|
||||
27 files changed, 74 insertions(+), 335 deletions(-)
|
||||
|
||||
diff --git addon-sdk/source/lib/sdk/console/plain-text.js addon-sdk/source/lib/sdk/console/plain-text.js
|
||||
index 0e44cf106d52..07b8eb629e12 100644
|
||||
--- addon-sdk/source/lib/sdk/console/plain-text.js
|
||||
+++ addon-sdk/source/lib/sdk/console/plain-text.js
|
||||
@@ -62,16 +62,6 @@ function PlainTextConsole(print, innerID) {
|
||||
}
|
||||
});
|
||||
|
||||
- // We defined the `__exposedProps__` in our console chrome object.
|
||||
- //
|
||||
- // Meanwhile we're investigating with the platform team if `__exposedProps__`
|
||||
- // are needed, or are just a left-over.
|
||||
-
|
||||
- console.__exposedProps__ = Object.keys(ConsoleAPI.prototype).reduce(function(exposed, prop) {
|
||||
- exposed[prop] = "r";
|
||||
- return exposed;
|
||||
- }, {});
|
||||
-
|
||||
Object.freeze(console);
|
||||
return console;
|
||||
};
|
||||
diff --git addon-sdk/source/lib/sdk/test/loader.js addon-sdk/source/lib/sdk/test/loader.js
|
||||
index 33ba2ca5a029..b555de63f02a 100644
|
||||
--- addon-sdk/source/lib/sdk/test/loader.js
|
||||
+++ addon-sdk/source/lib/sdk/test/loader.js
|
||||
@@ -53,11 +53,6 @@ function HookedPlainTextConsole(hook, print, innerID) {
|
||||
this.exception = hook.bind(null, "exception", innerID);
|
||||
this.time = hook.bind(null, "time", innerID);
|
||||
this.timeEnd = hook.bind(null, "timeEnd", innerID);
|
||||
-
|
||||
- this.__exposedProps__ = {
|
||||
- log: "rw", info: "rw", warn: "rw", error: "rw", debug: "rw",
|
||||
- exception: "rw", time: "rw", timeEnd: "rw"
|
||||
- };
|
||||
}
|
||||
|
||||
// Creates a custom loader instance whose console module is hooked in order
|
||||
diff --git addon-sdk/source/test/addons/e10s-content/lib/test-content-script.js addon-sdk/source/test/addons/e10s-content/lib/test-content-script.js
|
||||
index 477895e40481..3dccfec618d3 100644
|
||||
--- addon-sdk/source/test/addons/e10s-content/lib/test-content-script.js
|
||||
+++ addon-sdk/source/test/addons/e10s-content/lib/test-content-script.js
|
||||
@@ -444,7 +444,7 @@ exports["test Highlight toString Behavior"] = createProxyTest("", function (help
|
||||
let strToString = helper.rawWindow.Object.prototype.toString.call("");
|
||||
assert.ok(/\[object String.*\]/.test(strToString), "strings are strings");
|
||||
|
||||
- let o = {__exposedProps__:{}};
|
||||
+ let o = {};
|
||||
let objToString = helper.rawWindow.Object.prototype.toString.call(o);
|
||||
assert.ok(/\[object Object.*\]/.test(objToString), "objects are objects");
|
||||
|
||||
@@ -622,10 +622,6 @@ exports["test Functions"] = createProxyTest("", function (helper) {
|
||||
helper.rawWindow.isEqual = function isEqual(a, b) {
|
||||
return a == b;
|
||||
};
|
||||
- // bug 784116: workaround in order to allow proxy code to cache proxies on
|
||||
- // these functions:
|
||||
- helper.rawWindow.callFunction.__exposedProps__ = {__proxy: 'rw'};
|
||||
- helper.rawWindow.isEqual.__exposedProps__ = {__proxy: 'rw'};
|
||||
|
||||
helper.createWorker(
|
||||
'new ' + function ContentScriptScope() {
|
||||
diff --git addon-sdk/source/test/test-content-script.js addon-sdk/source/test/test-content-script.js
|
||||
index 709fb5a3aa91..a02e66f65eea 100644
|
||||
--- addon-sdk/source/test/test-content-script.js
|
||||
+++ addon-sdk/source/test/test-content-script.js
|
||||
@@ -444,7 +444,7 @@ exports["test Highlight toString Behavior"] = createProxyTest("", function (help
|
||||
let strToString = helper.rawWindow.Object.prototype.toString.call("");
|
||||
assert.ok(/\[object String.*\]/.test(strToString), "strings are strings");
|
||||
|
||||
- let o = {__exposedProps__:{}};
|
||||
+ let o = {};
|
||||
let objToString = helper.rawWindow.Object.prototype.toString.call(o);
|
||||
assert.ok(/\[object Object.*\]/.test(objToString), "objects are objects");
|
||||
|
||||
@@ -622,10 +622,6 @@ exports["test Functions"] = createProxyTest("", function (helper) {
|
||||
helper.rawWindow.isEqual = function isEqual(a, b) {
|
||||
return a == b;
|
||||
};
|
||||
- // bug 784116: workaround in order to allow proxy code to cache proxies on
|
||||
- // these functions:
|
||||
- helper.rawWindow.callFunction.__exposedProps__ = {__proxy: 'rw'};
|
||||
- helper.rawWindow.isEqual.__exposedProps__ = {__proxy: 'rw'};
|
||||
|
||||
helper.createWorker(
|
||||
'new ' + function ContentScriptScope() {
|
||||
diff --git dom/base/nsDeprecatedOperationList.h dom/base/nsDeprecatedOperationList.h
|
||||
index 2523187c63a7..adcf4d9d8202 100644
|
||||
--- dom/base/nsDeprecatedOperationList.h
|
||||
+++ dom/base/nsDeprecatedOperationList.h
|
||||
@@ -21,7 +21,6 @@ DEPRECATED_OPERATION(NodeValue)
|
||||
DEPRECATED_OPERATION(TextContent)
|
||||
DEPRECATED_OPERATION(EnablePrivilege)
|
||||
DEPRECATED_OPERATION(DOMExceptionCode)
|
||||
-DEPRECATED_OPERATION(NoExposedProps)
|
||||
DEPRECATED_OPERATION(MutationEvent)
|
||||
DEPRECATED_OPERATION(Components)
|
||||
DEPRECATED_OPERATION(PrefixedVisibilityAPI)
|
||||
diff --git dom/base/test/chrome/cpows_child.js dom/base/test/chrome/cpows_child.js
|
||||
index 6d240a7eaa51..fc7e3f2c9d0f 100644
|
||||
--- dom/base/test/chrome/cpows_child.js
|
||||
+++ dom/base/test/chrome/cpows_child.js
|
||||
@@ -105,7 +105,13 @@ function parent_test(finish)
|
||||
|
||||
addMessageListener("cpows:from_parent", (msg) => {
|
||||
let obj = msg.objects.obj;
|
||||
- ok(obj.a == 1, "correct value from parent");
|
||||
+ if (is_remote) {
|
||||
+ ok(obj.a == undefined, "__exposedProps__ should not work");
|
||||
+ } else {
|
||||
+ // The same process test is not run as content, so the field can
|
||||
+ // be accessed even though __exposedProps__ has been removed.
|
||||
+ ok(obj.a == 1, "correct value from parent");
|
||||
+ }
|
||||
|
||||
// Test that a CPOW reference to a function in the chrome process
|
||||
// is callable from unprivileged content. Greasemonkey uses this
|
||||
@@ -260,11 +266,11 @@ function lifetime_test(finish)
|
||||
var obj = {"will_die": {"f": 1}};
|
||||
let [result] = sendRpcMessage("cpows:lifetime_test_1", {}, {obj: obj});
|
||||
ok(result == 10, "got sync result");
|
||||
- ok(obj.wont_die.f == 2, "got reverse CPOW");
|
||||
+ ok(obj.wont_die.f == undefined, "got reverse CPOW");
|
||||
obj.will_die = null;
|
||||
Components.utils.schedulePreciseGC(function() {
|
||||
addMessageListener("cpows:lifetime_test_3", (msg) => {
|
||||
- ok(obj.wont_die.f == 2, "reverse CPOW still works");
|
||||
+ ok(obj.wont_die.f == undefined, "reverse CPOW still works");
|
||||
finish();
|
||||
});
|
||||
sendRpcMessage("cpows:lifetime_test_2");
|
||||
diff --git dom/locales/en-US/chrome/dom/dom.properties dom/locales/en-US/chrome/dom/dom.properties
|
||||
index 5c94a580287a..ac9dbed58e08 100644
|
||||
--- dom/locales/en-US/chrome/dom/dom.properties
|
||||
+++ dom/locales/en-US/chrome/dom/dom.properties
|
||||
@@ -154,8 +154,6 @@ MediaEMENoCapabilitiesDeprecatedWarning=Calling navigator.requestMediaKeySystemA
|
||||
MediaEMENoCodecsDeprecatedWarning=Calling navigator.requestMediaKeySystemAccess() (at %S) passing a candidate MediaKeySystemConfiguration containing audioCapabilities or videoCapabilities without a contentType with a “codecs” string is deprecated and will soon become unsupported.
|
||||
# LOCALIZATION NOTE: Do not translate "DOMException", "code" and "name"
|
||||
DOMExceptionCodeWarning=Use of DOMException’s code attribute is deprecated. Use name instead.
|
||||
-# LOCALIZATION NOTE: Do not translate "__exposedProps__"
|
||||
-NoExposedPropsWarning=Exposing chrome JS objects to content without __exposedProps__ is insecure and deprecated. See https://developer.mozilla.org/en/XPConnect_wrappers for more information.
|
||||
# LOCALIZATION NOTE: Do not translate "Mutation Event" and "MutationObserver"
|
||||
MutationEventWarning=Use of Mutation Events is deprecated. Use MutationObserver instead.
|
||||
# LOCALIZATION NOTE: Do not translate "Components"
|
||||
diff --git js/xpconnect/src/XPCJSRuntime.cpp js/xpconnect/src/XPCJSRuntime.cpp
|
||||
index 455b9f8e963f..ff9aea0a41eb 100644
|
||||
--- js/xpconnect/src/XPCJSRuntime.cpp
|
||||
+++ js/xpconnect/src/XPCJSRuntime.cpp
|
||||
@@ -93,7 +93,6 @@ const char* const XPCJSRuntime::mStrings[] = {
|
||||
"item", // IDX_ITEM
|
||||
"__proto__", // IDX_PROTO
|
||||
"__iterator__", // IDX_ITERATOR
|
||||
- "__exposedProps__", // IDX_EXPOSEDPROPS
|
||||
"eval", // IDX_EVAL
|
||||
"controllers", // IDX_CONTROLLERS
|
||||
"Controllers", // IDX_CONTROLLERS_CLASS
|
||||
diff --git js/xpconnect/src/xpcprivate.h js/xpconnect/src/xpcprivate.h
|
||||
index fb7e43c22cd0..5d877f09d301 100644
|
||||
--- js/xpconnect/src/xpcprivate.h
|
||||
+++ js/xpconnect/src/xpcprivate.h
|
||||
@@ -460,7 +460,6 @@ public:
|
||||
IDX_ITEM ,
|
||||
IDX_PROTO ,
|
||||
IDX_ITERATOR ,
|
||||
- IDX_EXPOSEDPROPS ,
|
||||
IDX_EVAL ,
|
||||
IDX_CONTROLLERS ,
|
||||
IDX_CONTROLLERS_CLASS ,
|
||||
diff --git js/xpconnect/tests/chrome/test_bug1065185.html js/xpconnect/tests/chrome/test_bug1065185.html
|
||||
index cdd65326f9c8..7ea81fc8aa6f 100644
|
||||
--- js/xpconnect/tests/chrome/test_bug1065185.html
|
||||
+++ js/xpconnect/tests/chrome/test_bug1065185.html
|
||||
@@ -25,11 +25,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1065185
|
||||
|
||||
var gLoadCount = 0;
|
||||
function loaded() {
|
||||
- switch(++gLoadCount) {
|
||||
+ switch(gLoadCount++) {
|
||||
case 0:
|
||||
- doMonitor([]);
|
||||
+ doMonitor([/access to property "a"/i]);
|
||||
window[0].wrappedJSObject.probe = { a: 2, __exposedProps__: { 'a': 'r' } };
|
||||
- is(window[0].eval('probe.a'), 2, "Accessed exposed prop");
|
||||
+ is(window[0].eval('probe.a'), undefined, "Accessed exposed prop");
|
||||
endMonitor();
|
||||
break;
|
||||
case 1:
|
||||
diff --git js/xpconnect/tests/chrome/test_cows.xul js/xpconnect/tests/chrome/test_cows.xul
|
||||
index 75c5250dd150..adfdd686540b 100644
|
||||
--- js/xpconnect/tests/chrome/test_cows.xul
|
||||
+++ js/xpconnect/tests/chrome/test_cows.xul
|
||||
@@ -49,13 +49,6 @@ sandbox.getCOW = getCOW;
|
||||
const TEST_API = ['is', 'isnot', 'ok', 'todo_is', 'todo_isnot', 'todo'];
|
||||
TEST_API.forEach(function(name) { sandbox[name] = window[name]; });
|
||||
|
||||
-sandbox.alienObject = {
|
||||
- __exposedProps__: {funProp: 'r'},
|
||||
- funProp: function foo(x) {
|
||||
- return x + 1;
|
||||
- }
|
||||
-};
|
||||
-
|
||||
sandbox.chromeGet = function (obj, prop) { return obj[prop]; };
|
||||
|
||||
function COWTests() {
|
||||
@@ -74,17 +67,6 @@ function COWTests() {
|
||||
// functions like assertIsWritable(myObj, 'someproperty') might
|
||||
// be useful.
|
||||
|
||||
- function isProp(obj, propName, value, desc) {
|
||||
- try {
|
||||
- is(obj[propName], value, "getting " + propName + " on " + desc);
|
||||
- ok(propName in obj,
|
||||
- propName + " on " + desc + " should exist");
|
||||
- ok(Object.hasOwnProperty.call(obj, propName),
|
||||
- propName + " on " + desc + " should exist");
|
||||
- } catch (e) {
|
||||
- ok(false, "getting " + propName + " on " + desc + " threw " + e);
|
||||
- }
|
||||
- }
|
||||
function isPropHidden(obj, propName, desc) {
|
||||
try {
|
||||
is(obj[propName], undefined,
|
||||
@@ -103,7 +85,7 @@ function COWTests() {
|
||||
var empty = {};
|
||||
var nonempty = {foo: 42, bar: 33};
|
||||
is(getCOW(empty).foo, undefined,
|
||||
- "shouldn't throw when accessing exposed properties that doesn't exist");
|
||||
+ "shouldn't throw when accessing exposed properties that don't exist");
|
||||
|
||||
PROPS_TO_TEST.forEach(function(name) {
|
||||
isPropHidden(getCOW(nonempty), name, "object without exposedProps");
|
||||
@@ -135,18 +117,12 @@ function COWTests() {
|
||||
var strict = { __exposedProps__: { foo: "r" }, foo: "foo property" };
|
||||
var strictCOWr = getCOW(strict);
|
||||
PROPS_TO_TEST.forEach(function(name) {
|
||||
- if (name == "foo") {
|
||||
- isProp(strictCOWr, name, "foo property",
|
||||
- "object with exposed 'foo'");
|
||||
- }
|
||||
- else {
|
||||
- isPropHidden(strictCOW, name, "object with exposed 'foo'");
|
||||
- }
|
||||
+ isPropHidden(strictCOW, name, "object with exposed 'foo'");
|
||||
});
|
||||
- is(getNames(strictCOWr).length, 1,
|
||||
- "object with exposedProps only enumerate exposed props");
|
||||
- is(getNames(strictCOWr)[0], "foo",
|
||||
- "object with exposedProps only enumerate exposed props");
|
||||
+ is(getNames(strictCOWr).length, 0,
|
||||
+ "exposed props does not enumerate anything");
|
||||
+ is(getNames(strictCOWr)[0], undefined,
|
||||
+ "exposed props does not enumerate anything");
|
||||
|
||||
// Test writable property
|
||||
var writable = getCOW({ __exposedProps__: {foo: 'w'}});
|
||||
@@ -154,25 +130,18 @@ function COWTests() {
|
||||
ok(!("foo" in writable),
|
||||
"non-existing write-only property shouldn't exist");
|
||||
writable.foo = 5;
|
||||
- is(chromeGet(writable, "foo"), 5, "writing to a write-only exposed prop works");
|
||||
- todo("foo" in writable,
|
||||
- "existing write-only property should exist");
|
||||
- } catch (e) {
|
||||
- ok(false, "writing to a write-only exposed prop shouldn't throw " + e);
|
||||
- }
|
||||
- try {
|
||||
- writable.foo;
|
||||
- todo(false, "reading from a write-only exposed prop should throw");
|
||||
+ ok(false, "writing to a write-only exposed prop should throw");
|
||||
} catch (e) {
|
||||
- todo(/Permission denied/.test(e),
|
||||
- "reading from a write-only exposed prop should throw");
|
||||
+ ok(/Permission denied/.test(e),
|
||||
+ "writing to a write-only exposed prop should throw the right error");
|
||||
}
|
||||
+ is(writable.foo, undefined,
|
||||
+ "reading from a write-only exposed prop should return undefined");
|
||||
try {
|
||||
delete writable.foo;
|
||||
- is(chromeGet(writable, "foo"), undefined,
|
||||
- "deleting a write-only exposed prop works");
|
||||
+ ok(false, "deleting a write-only exposed prop should throw");
|
||||
} catch (e) {
|
||||
- ok(false, "deleting a write-only exposed prop shouldn't throw " + e);
|
||||
+ ok(true, "deleting a write-only exposed prop should throw " + e);
|
||||
}
|
||||
|
||||
// Test readable property
|
||||
@@ -180,8 +149,8 @@ function COWTests() {
|
||||
foo: 5,
|
||||
bar: 6 };
|
||||
try {
|
||||
- isProp(getCOW(readable), "foo", 5,
|
||||
- "reading from a readable exposed prop works");
|
||||
+ isPropHidden(getCOW(readable), "foo", undefined,
|
||||
+ "reading from a readable exposed prop shouldn't work");
|
||||
} catch (e) {
|
||||
ok(false, "reading from a readable exposed prop shouldn't throw " + e);
|
||||
}
|
||||
@@ -202,8 +171,7 @@ function COWTests() {
|
||||
|
||||
try {
|
||||
var props = getNames(getCOW(readable));
|
||||
- is(props.length, 1, "COW w/ one exposed prop should enumerate once");
|
||||
- is(props[0], 'foo', "COW w/ one exposed prop should enumerate it");
|
||||
+ is(props.length, 0, "COW w/ one exposed prop should not enumerate");
|
||||
} catch (e) {
|
||||
ok(false, "COW w/ a readable prop should not raise exc " +
|
||||
"on enumeration: " + e);
|
||||
@@ -215,21 +183,17 @@ function COWTests() {
|
||||
ok(!("foo" in readwrite),
|
||||
"non-existing readwrite property shouldn't exist");
|
||||
readwrite.foo = 5;
|
||||
- is(readwrite.foo, 5, "writing to a readwrite exposed prop looks like it worked");
|
||||
- is(chromeGet(readwrite, "foo"), 5, "writing to a readwrite exposed prop works");
|
||||
- ok("foo" in readwrite,
|
||||
- "existing readwrite property should exist");
|
||||
+ ok(false, "writing to a readwrite exposed prop should throw");
|
||||
} catch (e) {
|
||||
- ok(false, "writing to a readwrite exposed prop shouldn't throw " + e);
|
||||
+ ok(/Permission denied/.test(e),
|
||||
+ "writing to a readwrite exposed prop should throw the right error");
|
||||
}
|
||||
try {
|
||||
delete readwrite.foo;
|
||||
- is(readwrite.foo, undefined, "deleting readwrite prop looks like it worked");
|
||||
- ok(!("foo" in readwrite), "deleting readwrite prop looks like it really worked");
|
||||
- is(chromeGet(readwrite, "foo"), undefined,
|
||||
- "deleting a readwrite exposed prop works");
|
||||
+ ok(false, "deleting a readwrite prop should throw");
|
||||
} catch (e) {
|
||||
- ok(false, "deleting a readwrite exposed prop shouldn't throw " + e);
|
||||
+ ok(/Permission denied/.test(e),
|
||||
+ "deleting a readwrite exposed prop should throw the right error");
|
||||
}
|
||||
|
||||
// Readables and functions
|
||||
diff --git js/xpconnect/tests/chrome/test_exposeInDerived.xul js/xpconnect/tests/chrome/test_exposeInDerived.xul
|
||||
index 2ed3bb91e7fd..7e6c24e56db1 100644
|
||||
--- js/xpconnect/tests/chrome/test_exposeInDerived.xul
|
||||
+++ js/xpconnect/tests/chrome/test_exposeInDerived.xul
|
||||
@@ -17,7 +17,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=804630
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
- /** Test to make sure that COWed objects can expose properties from their prototypes. **/
|
||||
+ /** Test to make sure that COWed objects can't expose properties from their prototypes. **/
|
||||
const Cu = Components.utils;
|
||||
|
||||
// Set up the sandbox.
|
||||
@@ -25,7 +25,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=804630
|
||||
sb.ok = ok;
|
||||
sb.is = is;
|
||||
|
||||
- // Make a chrome object that exposes objects off its prototype.
|
||||
+ // Make a chrome object that tries to expose objects off its prototype.
|
||||
sb.proto = { read: 42, readWrite: 32, __exposedProps__: {} };
|
||||
sb.obj = { __exposedProps__: { read: 'r', readWrite: 'rw' } };
|
||||
sb.obj.__proto__ = sb.proto;
|
||||
@@ -36,10 +36,11 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=804630
|
||||
'try { proto.readWrite = 12; wrote = true; } catch(e) {} ' +
|
||||
' ok(!wrote, "Should not write proto property");', sb);
|
||||
|
||||
- // Make sure we can access the exposed properties via the derived object.
|
||||
- Cu.evalInSandbox('is(obj.read, 42, "obj.read accessible");', sb);
|
||||
- Cu.evalInSandbox('is(obj.readWrite, 32, "obj.readWrite is readable");', sb);
|
||||
- Cu.evalInSandbox('obj.readWrite = 8; is(obj.readWrite, 8, "obj.readWrite is writable");', sb);
|
||||
+ // Make sure we can't access the exposed properties via the derived object.
|
||||
+ Cu.evalInSandbox('is(obj.read, undefined, "obj.read inaccessible");', sb);
|
||||
+ Cu.evalInSandbox('is(obj.readWrite, undefined, "obj.readWrite is not readable");', sb);
|
||||
+ Cu.evalInSandbox('try { obj.readWrite = 8; ok(false, "obj.readWrite is not writable"); } catch (e) {};',
|
||||
+ sb);
|
||||
|
||||
]]>
|
||||
</script>
|
||||
diff --git js/xpconnect/tests/unit/test_bug1082450.js js/xpconnect/tests/unit/test_bug1082450.js
|
||||
index 07f45f06beef..5880fcbcd4e6 100644
|
||||
--- js/xpconnect/tests/unit/test_bug1082450.js
|
||||
+++ js/xpconnect/tests/unit/test_bug1082450.js
|
||||
@@ -5,9 +5,9 @@ function run_test() {
|
||||
function checkThrows(str, rgxp) {
|
||||
try {
|
||||
sb.eval(str);
|
||||
- do_check_true(false);
|
||||
+ do_check_true(false, "eval should have thrown");
|
||||
} catch (e) {
|
||||
- do_check_true(rgxp.test(e));
|
||||
+ do_check_true(rgxp.test(e), "error message should match");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,12 +29,12 @@ function run_test() {
|
||||
chromeCallableValueProp: 'r' }
|
||||
};
|
||||
|
||||
- do_check_eq(sb.eval('exposed.simpleValueProp'), 42);
|
||||
- do_check_eq(sb.eval('exposed.objectValueProp.val'), 42);
|
||||
- checkThrows('exposed.getterProp;', /privileged accessor/i);
|
||||
- checkThrows('exposed.setterProp = 42;', /privileged accessor/i);
|
||||
- checkThrows('exposed.getterSetterProp;', /privileged accessor/i);
|
||||
- checkThrows('exposed.getterSetterProp = 42;', /privileged accessor/i);
|
||||
- do_check_eq(sb.eval('exposed.contentCallableValueProp()'), 42);
|
||||
- checkThrows('exposed.chromeCallableValueProp();', /privileged or cross-origin callable/i);
|
||||
+ do_check_eq(sb.eval('exposed.simpleValueProp'), undefined);
|
||||
+ do_check_eq(sb.eval('exposed.objectValueProp'), undefined);
|
||||
+ do_check_eq(sb.eval('exposed.getterProp;'), undefined);
|
||||
+ do_check_eq(sb.eval('exposed.getterSetterProp;'), undefined);
|
||||
+ checkThrows('exposed.setterProp = 42;', /Permission denied/i);
|
||||
+ checkThrows('exposed.getterSetterProp = 42;', /Permission denied/i);
|
||||
+ do_check_eq(sb.eval('exposed.contentCallableValueProp'), undefined);
|
||||
+ checkThrows('exposed.chromeCallableValueProp();', /is not a function/i);
|
||||
}
|
||||
diff --git js/xpconnect/tests/unit/test_bug780370.js js/xpconnect/tests/unit/test_bug780370.js
|
||||
index 40d6f9748015..7ae757f0cd01 100644
|
||||
--- js/xpconnect/tests/unit/test_bug780370.js
|
||||
+++ js/xpconnect/tests/unit/test_bug780370.js
|
||||
@@ -14,10 +14,5 @@ function run_test()
|
||||
var sb = Cu.Sandbox("http://www.example.com");
|
||||
sb.obj = { foo: 42, __exposedProps__: { hasOwnProperty: 'r' } };
|
||||
do_check_eq(Cu.evalInSandbox('typeof obj.foo', sb), 'undefined', "COW works as expected");
|
||||
- try {
|
||||
- Cu.evalInSandbox('obj.hasOwnProperty', sb);
|
||||
- do_check_true(false);
|
||||
- } catch (e) {
|
||||
- do_check_true(/privileged or cross-origin callable/i.test(e));
|
||||
- }
|
||||
+ do_check_eq(Cu.evalInSandbox('obj.hasOwnProperty', sb), undefined);
|
||||
}
|
||||
diff --git js/xpconnect/tests/unit/test_bug813901.js js/xpconnect/tests/unit/test_bug813901.js
|
||||
index 42f981581b51..2efc6539e879 100644
|
||||
--- js/xpconnect/tests/unit/test_bug813901.js
|
||||
+++ js/xpconnect/tests/unit/test_bug813901.js
|
||||
@@ -21,5 +21,5 @@ function run_test() {
|
||||
checkThrows('obj.foo = 3;', sb, /denied/);
|
||||
Cu.evalInSandbox("var p = {__exposedProps__: {foo: 'rw'}};", sb);
|
||||
sb.obj.__proto__ = sb.p;
|
||||
- checkThrows('obj.foo = 4;', sb, /__exposedProps__/);
|
||||
+ checkThrows('obj.foo = 4;', sb, /denied/);
|
||||
}
|
||||
diff --git js/xpconnect/tests/unit/test_bug853709.js js/xpconnect/tests/unit/test_bug853709.js
|
||||
index c7e51757dc63..1667d2241f93 100644
|
||||
--- js/xpconnect/tests/unit/test_bug853709.js
|
||||
+++ js/xpconnect/tests/unit/test_bug853709.js
|
||||
@@ -8,7 +8,7 @@ function setupChromeSandbox() {
|
||||
function checkDefineThrows(sb, obj, prop, desc) {
|
||||
var result = Cu.evalInSandbox('(function() { try { Object.defineProperty(' + obj + ', "' + prop + '", ' + desc.toSource() + '); return "nothrow"; } catch (e) { return e.toString(); }})();', sb);
|
||||
do_check_neq(result, 'nothrow');
|
||||
- do_check_true(!!/denied/.exec(result));
|
||||
+ do_check_true(!!/denied|prohibited/.exec(result));
|
||||
do_check_true(result.indexOf(prop) != -1); // Make sure the prop name is in the error message.
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ function run_test() {
|
||||
contentSB.chromeObj = chromeSB.chromeObj;
|
||||
contentSB.chromeArr = chromeSB.chromeArr;
|
||||
|
||||
- do_check_eq(Cu.evalInSandbox('chromeObj.a', contentSB), 2);
|
||||
+ do_check_eq(Cu.evalInSandbox('chromeObj.a', contentSB), undefined);
|
||||
try {
|
||||
Cu.evalInSandbox('chromeArr[1]', contentSB);
|
||||
do_check_true(false);
|
||||
diff --git js/xpconnect/tests/unit/test_bug854558.js js/xpconnect/tests/unit/test_bug854558.js
|
||||
index d60d23a5baf8..574194dc3f52 100644
|
||||
--- js/xpconnect/tests/unit/test_bug854558.js
|
||||
+++ js/xpconnect/tests/unit/test_bug854558.js
|
||||
@@ -7,5 +7,5 @@ function run_test() {
|
||||
contentSB.foo = chromeSB.foo;
|
||||
do_check_eq(Cu.evalInSandbox('foo.a', contentSB), undefined, "Default deny with no __exposedProps__");
|
||||
Cu.evalInSandbox('this.foo.__exposedProps__ = {a: "r"}', chromeSB);
|
||||
- do_check_eq(Cu.evalInSandbox('foo.a', contentSB), 2, "works with __exposedProps__");
|
||||
+ do_check_eq(Cu.evalInSandbox('foo.a', contentSB), undefined, "Still not allowed with __exposedProps__");
|
||||
}
|
||||
diff --git js/xpconnect/tests/unit/test_bug930091.js js/xpconnect/tests/unit/test_bug930091.js
|
||||
index aa11d5db2640..ecb2a60aed11 100644
|
||||
--- js/xpconnect/tests/unit/test_bug930091.js
|
||||
+++ js/xpconnect/tests/unit/test_bug930091.js
|
||||
@@ -5,7 +5,7 @@ function checkThrows(fn) {
|
||||
fn();
|
||||
ok(false, "Should have thrown");
|
||||
} catch (e) {
|
||||
- do_check_true(/denied|insecure/.test(e));
|
||||
+ do_check_true(/denied|insecure|prohibited/.test(e));
|
||||
}
|
||||
}
|
||||
|
||||
diff --git js/xpconnect/wrappers/AccessCheck.cpp js/xpconnect/wrappers/AccessCheck.cpp
|
||||
index 07599ce7906a..b730310731e2 100644
|
||||
--- js/xpconnect/wrappers/AccessCheck.cpp
|
||||
+++ js/xpconnect/wrappers/AccessCheck.cpp
|
||||
@@ -252,20 +252,6 @@ AccessCheck::checkPassToPrivilegedCode(JSContext* cx, HandleObject wrapper, Hand
|
||||
return true;
|
||||
}
|
||||
|
||||
- // COWs are fine to pass to chrome if and only if they have __exposedProps__,
|
||||
- // since presumably content should never have a reason to pass an opaque
|
||||
- // object back to chrome.
|
||||
- if (AccessCheck::isChrome(js::UncheckedUnwrap(wrapper)) && WrapperFactory::IsCOW(obj)) {
|
||||
- RootedObject target(cx, js::UncheckedUnwrap(obj));
|
||||
- JSAutoCompartment ac(cx, target);
|
||||
- RootedId id(cx, GetJSIDByIndex(cx, XPCJSContext::IDX_EXPOSEDPROPS));
|
||||
- bool found = false;
|
||||
- if (!JS_HasPropertyById(cx, target, id, &found))
|
||||
- return false;
|
||||
- if (found)
|
||||
- return true;
|
||||
- }
|
||||
-
|
||||
// Same-origin wrappers are fine.
|
||||
if (AccessCheck::wrapperSubsumes(obj))
|
||||
return true;
|
||||
@@ -323,171 +309,6 @@ AccessCheck::reportCrossOriginDenial(JSContext* cx, JS::HandleId id,
|
||||
MOZ_ALWAYS_TRUE(rv.MaybeSetPendingException(cx));
|
||||
}
|
||||
|
||||
-enum Access { READ = (1<<0), WRITE = (1<<1), NO_ACCESS = 0 };
|
||||
-
|
||||
-static void
|
||||
-EnterAndThrowASCII(JSContext* cx, JSObject* wrapper, const char* msg)
|
||||
-{
|
||||
- JSAutoCompartment ac(cx, wrapper);
|
||||
- JS_ReportErrorASCII(cx, "%s", msg);
|
||||
-}
|
||||
-
|
||||
-bool
|
||||
-ExposedPropertiesOnly::check(JSContext* cx, HandleObject wrapper, HandleId id, Wrapper::Action act)
|
||||
-{
|
||||
- RootedObject wrappedObject(cx, Wrapper::wrappedObject(wrapper));
|
||||
-
|
||||
- if (act == Wrapper::CALL)
|
||||
- return false;
|
||||
-
|
||||
- // For the case of getting a property descriptor, we allow if either GET or SET
|
||||
- // is allowed, and rely on FilteringWrapper to filter out any disallowed accessors.
|
||||
- if (act == Wrapper::GET_PROPERTY_DESCRIPTOR) {
|
||||
- return check(cx, wrapper, id, Wrapper::GET) ||
|
||||
- check(cx, wrapper, id, Wrapper::SET);
|
||||
- }
|
||||
-
|
||||
- RootedId exposedPropsId(cx, GetJSIDByIndex(cx, XPCJSContext::IDX_EXPOSEDPROPS));
|
||||
-
|
||||
- // We need to enter the wrappee's compartment to look at __exposedProps__,
|
||||
- // but we want to be in the wrapper's compartment if we call Deny().
|
||||
- //
|
||||
- // Unfortunately, |cx| can be in either compartment when we call ::check. :-(
|
||||
- JSAutoCompartment ac(cx, wrappedObject);
|
||||
-
|
||||
- bool found = false;
|
||||
- if (!JS_HasPropertyById(cx, wrappedObject, exposedPropsId, &found))
|
||||
- return false;
|
||||
-
|
||||
- // If no __exposedProps__ existed, deny access.
|
||||
- if (!found) {
|
||||
- // Previously we automatically granted access to indexed properties and
|
||||
- // .length for Array COWs. We're not doing that anymore, so make sure to
|
||||
- // let people know what's going on.
|
||||
- bool isArray;
|
||||
- if (!JS_IsArrayObject(cx, wrappedObject, &isArray))
|
||||
- return false;
|
||||
- if (!isArray)
|
||||
- isArray = JS_IsTypedArrayObject(wrappedObject);
|
||||
- bool isIndexedAccessOnArray = isArray && JSID_IS_INT(id) && JSID_TO_INT(id) >= 0;
|
||||
- bool isLengthAccessOnArray = isArray && JSID_IS_STRING(id) &&
|
||||
- JS_FlatStringEqualsAscii(JSID_TO_FLAT_STRING(id), "length");
|
||||
- if (isIndexedAccessOnArray || isLengthAccessOnArray) {
|
||||
- JSAutoCompartment ac2(cx, wrapper);
|
||||
- ReportWrapperDenial(cx, id, WrapperDenialForCOW,
|
||||
- "Access to elements and length of privileged Array not permitted");
|
||||
- }
|
||||
-
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- if (id == JSID_VOID)
|
||||
- return true;
|
||||
-
|
||||
- Rooted<PropertyDescriptor> desc(cx);
|
||||
- if (!JS_GetPropertyDescriptorById(cx, wrappedObject, exposedPropsId, &desc))
|
||||
- return false;
|
||||
-
|
||||
- if (!desc.object())
|
||||
- return false;
|
||||
-
|
||||
- if (desc.hasGetterOrSetter()) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "__exposedProps__ must be a value property");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- RootedValue exposedProps(cx, desc.value());
|
||||
- if (exposedProps.isNullOrUndefined())
|
||||
- return false;
|
||||
-
|
||||
- if (!exposedProps.isObject()) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "__exposedProps__ must be undefined, null, or an Object");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- RootedObject hallpass(cx, &exposedProps.toObject());
|
||||
-
|
||||
- if (!AccessCheck::subsumes(js::UncheckedUnwrap(hallpass), wrappedObject)) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "Invalid __exposedProps__");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- Access access = NO_ACCESS;
|
||||
-
|
||||
- if (!JS_GetPropertyDescriptorById(cx, hallpass, id, &desc)) {
|
||||
- return false; // Error
|
||||
- }
|
||||
- if (!desc.object() || !desc.enumerable())
|
||||
- return false;
|
||||
-
|
||||
- if (!desc.value().isString()) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "property must be a string");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- JSFlatString* flat = JS_FlattenString(cx, desc.value().toString());
|
||||
- if (!flat)
|
||||
- return false;
|
||||
-
|
||||
- size_t length = JS_GetStringLength(JS_FORGET_STRING_FLATNESS(flat));
|
||||
-
|
||||
- for (size_t i = 0; i < length; ++i) {
|
||||
- char16_t ch = JS_GetFlatStringCharAt(flat, i);
|
||||
- switch (ch) {
|
||||
- case 'r':
|
||||
- if (access & READ) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "duplicate 'readable' property flag");
|
||||
- return false;
|
||||
- }
|
||||
- access = Access(access | READ);
|
||||
- break;
|
||||
-
|
||||
- case 'w':
|
||||
- if (access & WRITE) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "duplicate 'writable' property flag");
|
||||
- return false;
|
||||
- }
|
||||
- access = Access(access | WRITE);
|
||||
- break;
|
||||
-
|
||||
- default:
|
||||
- EnterAndThrowASCII(cx, wrapper, "properties can only be readable or read and writable");
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (access == NO_ACCESS) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "specified properties must have a permission bit set");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- if ((act == Wrapper::SET && !(access & WRITE)) ||
|
||||
- (act != Wrapper::SET && !(access & READ))) {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- // Inspect the property on the underlying object to check for red flags.
|
||||
- if (!JS_GetPropertyDescriptorById(cx, wrappedObject, id, &desc))
|
||||
- return false;
|
||||
-
|
||||
- // Reject accessor properties.
|
||||
- if (desc.hasGetterOrSetter()) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "Exposing privileged accessor properties is prohibited");
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
- // Reject privileged or cross-origin callables.
|
||||
- if (desc.value().isObject()) {
|
||||
- RootedObject maybeCallable(cx, js::UncheckedUnwrap(&desc.value().toObject()));
|
||||
- if (JS::IsCallable(maybeCallable) && !AccessCheck::subsumes(wrapper, maybeCallable)) {
|
||||
- EnterAndThrowASCII(cx, wrapper, "Exposing privileged or cross-origin callable is prohibited");
|
||||
- return false;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return true;
|
||||
-}
|
||||
-
|
||||
bool
|
||||
ExposedPropertiesOnly::deny(JSContext* cx, js::Wrapper::Action act, HandleId id,
|
||||
bool mayThrow)
|
||||
diff --git js/xpconnect/wrappers/AccessCheck.h js/xpconnect/wrappers/AccessCheck.h
|
||||
index 678dce3e0b81..c4873760ab7a 100644
|
||||
--- js/xpconnect/wrappers/AccessCheck.h
|
||||
+++ js/xpconnect/wrappers/AccessCheck.h
|
||||
@@ -104,10 +104,15 @@ struct CrossOriginAccessiblePropertiesOnly : public Policy {
|
||||
}
|
||||
};
|
||||
|
||||
-// This policy only permits access to properties if they appear in the
|
||||
-// objects exposed properties list.
|
||||
+// This class used to support permitting access to properties if they
|
||||
+// appeared in an access list on the object, but now it acts like an
|
||||
+// Opaque wrapper, with the exception that it fails silently for GET,
|
||||
+// ENUMERATE, and GET_PROPERTY_DESCRIPTOR. This is done for backwards
|
||||
+// compatibility. See bug 1397513.
|
||||
struct ExposedPropertiesOnly : public Policy {
|
||||
- static bool check(JSContext* cx, JS::HandleObject wrapper, JS::HandleId id, js::Wrapper::Action act);
|
||||
+ static bool check(JSContext* cx, JS::HandleObject wrapper, JS::HandleId id, js::Wrapper::Action act) {
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
static bool deny(JSContext* cx, js::Wrapper::Action act, JS::HandleId id,
|
||||
bool mayThrow);
|
||||
diff --git js/xpconnect/wrappers/ChromeObjectWrapper.h js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
index 8b273e470814..c17feed10b9a 100644
|
||||
--- js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
+++ js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
@@ -16,9 +16,9 @@ namespace xpc {
|
||||
struct ExposedPropertiesOnly;
|
||||
|
||||
// When a vanilla chrome JS object is exposed to content, we use a wrapper that
|
||||
-// supports __exposedProps__ for legacy reasons. For extra security, we override
|
||||
-// the traps that allow content to pass an object to chrome, and perform extra
|
||||
-// security checks on them.
|
||||
+// fails silently on GET, ENUMERATE, and GET_PROPERTY_DESCRIPTOR for legacy
|
||||
+// reasons. For extra security, we override the traps that allow content to pass
|
||||
+// an object to chrome, and perform extra security checks on them.
|
||||
#define ChromeObjectWrapperBase \
|
||||
FilteringWrapper<js::CrossCompartmentSecurityWrapper, ExposedPropertiesOnly>
|
||||
|
||||
diff --git js/xpconnect/wrappers/WrapperFactory.cpp js/xpconnect/wrappers/WrapperFactory.cpp
|
||||
index 6296f69fbea4..760d2c9afda8 100644
|
||||
--- js/xpconnect/wrappers/WrapperFactory.cpp
|
||||
+++ js/xpconnect/wrappers/WrapperFactory.cpp
|
||||
@@ -514,8 +514,8 @@ WrapperFactory::Rewrap(JSContext* cx, HandleObject existing, HandleObject obj)
|
||||
wrapper = &FilteringWrapper<CrossCompartmentSecurityWrapper, OpaqueWithCall>::singleton;
|
||||
}
|
||||
|
||||
- // For Vanilla JSObjects exposed from chrome to content, we use a wrapper
|
||||
- // that supports __exposedProps__. We'd like to get rid of these eventually,
|
||||
+ // For vanilla JSObjects exposed from chrome to content, we use a wrapper
|
||||
+ // that fails silently in a few cases. We'd like to get rid of this eventually,
|
||||
// but in their current form they don't cause much trouble.
|
||||
else if (IdentifyStandardInstance(obj) == JSProto_Object) {
|
||||
wrapper = &ChromeObjectWrapper::singleton;
|
||||
diff --git js/xpconnect/wrappers/XrayWrapper.cpp js/xpconnect/wrappers/XrayWrapper.cpp
|
||||
index 44dd7cb47146..28e29ea13d93 100644
|
||||
--- js/xpconnect/wrappers/XrayWrapper.cpp
|
||||
+++ js/xpconnect/wrappers/XrayWrapper.cpp
|
||||
@@ -291,7 +291,7 @@ ReportWrapperDenial(JSContext* cx, HandleId id, WrapperDenialType type, const ch
|
||||
MOZ_ASSERT(type == WrapperDenialForCOW);
|
||||
errorMessage.emplace("Security wrapper denied access to property %s on privileged "
|
||||
"Javascript object. Support for exposing privileged objects "
|
||||
- "to untrusted content via __exposedProps__ is being gradually "
|
||||
+ "to untrusted content via __exposedProps__ has been "
|
||||
"removed - use WebIDL bindings or Components.utils.cloneInto "
|
||||
"instead. Note that only the first denied property access from a "
|
||||
"given global object will be reported.",
|
||||
diff --git testing/mochitest/tests/SimpleTest/ChromePowers.js testing/mochitest/tests/SimpleTest/ChromePowers.js
|
||||
index 97de578157c0..7fbf66e2fd00 100644
|
||||
--- testing/mochitest/tests/SimpleTest/ChromePowers.js
|
||||
+++ testing/mochitest/tests/SimpleTest/ChromePowers.js
|
||||
@@ -104,15 +104,6 @@ ChromePowers.prototype.executeAfterFlushingMessageQueue = function(aCallback) {
|
||||
aCallback();
|
||||
};
|
||||
|
||||
-// Expose everything but internal APIs (starting with underscores) to
|
||||
-// web content. We cannot use Object.keys to view SpecialPowers.prototype since
|
||||
-// we are using the functions from SpecialPowersAPI.prototype
|
||||
-ChromePowers.prototype.__exposedProps__ = {};
|
||||
-for (var i in ChromePowers.prototype) {
|
||||
- if (i.charAt(0) != "_")
|
||||
- ChromePowers.prototype.__exposedProps__[i] = "r";
|
||||
-}
|
||||
-
|
||||
if ((window.parent !== null) &&
|
||||
(window.parent !== undefined) &&
|
||||
(window.parent.wrappedJSObject.SpecialPowers) &&
|
||||
diff --git testing/specialpowers/content/MockPermissionPrompt.jsm testing/specialpowers/content/MockPermissionPrompt.jsm
|
||||
index 71d0f5d2768a..1d86cc00e360 100644
|
||||
--- testing/specialpowers/content/MockPermissionPrompt.jsm
|
||||
+++ testing/specialpowers/content/MockPermissionPrompt.jsm
|
||||
@@ -83,15 +83,3 @@ MockPermissionPromptInstance.prototype = {
|
||||
request.allow();
|
||||
}
|
||||
};
|
||||
-
|
||||
-// Expose everything to content. We call reset() here so that all of the relevant
|
||||
-// lazy expandos get added.
|
||||
-MockPermissionPrompt.reset();
|
||||
-function exposeAll(obj) {
|
||||
- var props = {};
|
||||
- for (var prop in obj)
|
||||
- props[prop] = "rw";
|
||||
- obj.__exposedProps__ = props;
|
||||
-}
|
||||
-exposeAll(MockPermissionPrompt);
|
||||
-exposeAll(MockPermissionPromptInstance.prototype);
|
||||
diff --git toolkit/components/addoncompat/RemoteAddonsParent.jsm toolkit/components/addoncompat/RemoteAddonsParent.jsm
|
||||
index 1adbc0397729..d640c47d31f8 100644
|
||||
--- toolkit/components/addoncompat/RemoteAddonsParent.jsm
|
||||
+++ toolkit/components/addoncompat/RemoteAddonsParent.jsm
|
||||
@@ -735,7 +735,7 @@ var SandboxParent = {
|
||||
if (rest.length) {
|
||||
// Do a shallow copy of the options object into the child
|
||||
// process. This way we don't have to access it through a Chrome
|
||||
- // object wrapper, which would require __exposedProps__.
|
||||
+ // object wrapper, which would not let us access any properties.
|
||||
//
|
||||
// The only object property here is sandboxPrototype. We assume
|
||||
// it's a child process object (since that's what Greasemonkey
|
||||
commit f89c72edb79e
|
||||
Author: Andrew McCreight <continuation@gmail.com>
|
||||
Date: Thu Sep 7 11:17:16 2017 -0700
|
||||
|
||||
Bug 1377587, part 2 - Rename ExposedPropertiesOnly to OpaqueWithSilentFailing. r=krizsa
|
||||
|
||||
This class doesn't have anything to do with __exposedProps__ any more,
|
||||
so give it a more descriptive name. We'd still like to remove it
|
||||
entirely eventually.
|
||||
|
||||
MozReview-Commit-ID: 87KCpG6f8rI
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : 98a51a6af0fc8446dbcd8efa083d6c79286279d3
|
||||
---
|
||||
js/xpconnect/wrappers/AccessCheck.cpp | 4 ++--
|
||||
js/xpconnect/wrappers/AccessCheck.h | 2 +-
|
||||
js/xpconnect/wrappers/ChromeObjectWrapper.h | 4 ++--
|
||||
3 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git js/xpconnect/wrappers/AccessCheck.cpp js/xpconnect/wrappers/AccessCheck.cpp
|
||||
index b730310731e2..620f1f678f51 100644
|
||||
--- js/xpconnect/wrappers/AccessCheck.cpp
|
||||
+++ js/xpconnect/wrappers/AccessCheck.cpp
|
||||
@@ -310,8 +310,8 @@ AccessCheck::reportCrossOriginDenial(JSContext* cx, JS::HandleId id,
|
||||
}
|
||||
|
||||
bool
|
||||
-ExposedPropertiesOnly::deny(JSContext* cx, js::Wrapper::Action act, HandleId id,
|
||||
- bool mayThrow)
|
||||
+OpaqueWithSilentFailing::deny(JSContext* cx, js::Wrapper::Action act, HandleId id,
|
||||
+ bool mayThrow)
|
||||
{
|
||||
// Fail silently for GET, ENUMERATE, and GET_PROPERTY_DESCRIPTOR.
|
||||
if (act == js::Wrapper::GET || act == js::Wrapper::ENUMERATE ||
|
||||
diff --git js/xpconnect/wrappers/AccessCheck.h js/xpconnect/wrappers/AccessCheck.h
|
||||
index c4873760ab7a..6783258f8d94 100644
|
||||
--- js/xpconnect/wrappers/AccessCheck.h
|
||||
+++ js/xpconnect/wrappers/AccessCheck.h
|
||||
@@ -109,7 +109,7 @@ struct CrossOriginAccessiblePropertiesOnly : public Policy {
|
||||
// Opaque wrapper, with the exception that it fails silently for GET,
|
||||
// ENUMERATE, and GET_PROPERTY_DESCRIPTOR. This is done for backwards
|
||||
// compatibility. See bug 1397513.
|
||||
-struct ExposedPropertiesOnly : public Policy {
|
||||
+struct OpaqueWithSilentFailing : public Policy {
|
||||
static bool check(JSContext* cx, JS::HandleObject wrapper, JS::HandleId id, js::Wrapper::Action act) {
|
||||
return false;
|
||||
}
|
||||
diff --git js/xpconnect/wrappers/ChromeObjectWrapper.h js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
index c17feed10b9a..da4870237501 100644
|
||||
--- js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
+++ js/xpconnect/wrappers/ChromeObjectWrapper.h
|
||||
@@ -13,14 +13,14 @@
|
||||
|
||||
namespace xpc {
|
||||
|
||||
-struct ExposedPropertiesOnly;
|
||||
+struct OpaqueWithSilentFailing;
|
||||
|
||||
// When a vanilla chrome JS object is exposed to content, we use a wrapper that
|
||||
// fails silently on GET, ENUMERATE, and GET_PROPERTY_DESCRIPTOR for legacy
|
||||
// reasons. For extra security, we override the traps that allow content to pass
|
||||
// an object to chrome, and perform extra security checks on them.
|
||||
#define ChromeObjectWrapperBase \
|
||||
- FilteringWrapper<js::CrossCompartmentSecurityWrapper, ExposedPropertiesOnly>
|
||||
+ FilteringWrapper<js::CrossCompartmentSecurityWrapper, OpaqueWithSilentFailing>
|
||||
|
||||
class ChromeObjectWrapper : public ChromeObjectWrapperBase
|
||||
{
|
||||
|
@ -1,362 +0,0 @@
|
||||
commit 256e249566d8
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Fri Aug 4 14:11:17 2017 +0200
|
||||
|
||||
Bug 1381761 - Treating 'data:' documents as unique, opaque origins should still inherit the CSP. r=smaug,dveditz
|
||||
---
|
||||
caps/moz.build | 1 +
|
||||
caps/nsScriptSecurityManager.cpp | 96 +++++++++++++++++++++++++---------------
|
||||
2 files changed, 62 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git caps/moz.build caps/moz.build
|
||||
index 46331e93f097..af369e3268e0 100644
|
||||
--- caps/moz.build
|
||||
+++ caps/moz.build
|
||||
@@ -56,6 +56,7 @@ LOCAL_INCLUDES += [
|
||||
'/docshell/base',
|
||||
'/dom/base',
|
||||
'/js/xpconnect/src',
|
||||
+ '/netwerk/base',
|
||||
]
|
||||
|
||||
if CONFIG['ENABLE_TESTS']:
|
||||
diff --git caps/nsScriptSecurityManager.cpp caps/nsScriptSecurityManager.cpp
|
||||
index a930b324a6a2..90695ebd126f 100644
|
||||
--- caps/nsScriptSecurityManager.cpp
|
||||
+++ caps/nsScriptSecurityManager.cpp
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "nsIWindowWatcher.h"
|
||||
#include "nsIConsoleService.h"
|
||||
#include "nsIObserverService.h"
|
||||
+#include "nsIOService.h"
|
||||
#include "nsIContent.h"
|
||||
#include "nsDOMJSUtils.h"
|
||||
#include "nsAboutProtocolUtils.h"
|
||||
@@ -265,6 +266,61 @@ nsScriptSecurityManager::GetChannelResultPrincipalIfNotSandboxed(nsIChannel* aCh
|
||||
/*aIgnoreSandboxing*/ true);
|
||||
}
|
||||
|
||||
+static void
|
||||
+InheritAndSetCSPOnPrincipalIfNeeded(nsIChannel* aChannel, nsIPrincipal* aPrincipal)
|
||||
+{
|
||||
+ // loading a data: URI into an iframe, or loading frame[srcdoc] need
|
||||
+ // to inherit the CSP (see Bug 1073952, 1381761).
|
||||
+ MOZ_ASSERT(aChannel && aPrincipal, "need a valid channel and principal");
|
||||
+ if (!aChannel) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsCOMPtr<nsILoadInfo> loadInfo = aChannel->GetLoadInfo();
|
||||
+ if (!loadInfo ||
|
||||
+ loadInfo->GetExternalContentPolicyType() != nsIContentPolicy::TYPE_SUBDOCUMENT) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsCOMPtr<nsIURI> uri;
|
||||
+ nsresult rv = aChannel->GetURI(getter_AddRefs(uri));
|
||||
+ NS_ENSURE_SUCCESS_VOID(rv);
|
||||
+ nsAutoCString URISpec;
|
||||
+ rv = uri->GetSpec(URISpec);
|
||||
+ NS_ENSURE_SUCCESS_VOID(rv);
|
||||
+
|
||||
+ bool isSrcDoc = URISpec.EqualsLiteral("about:srcdoc");
|
||||
+ bool isData = (NS_SUCCEEDED(uri->SchemeIs("data", &isData)) && isData);
|
||||
+
|
||||
+ if (!isSrcDoc && !isData) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsCOMPtr<nsIPrincipal> principalToInherit = loadInfo->PrincipalToInherit();
|
||||
+ if (!principalToInherit) {
|
||||
+ principalToInherit = loadInfo->TriggeringPrincipal();
|
||||
+ }
|
||||
+ nsCOMPtr<nsIContentSecurityPolicy> originalCSP;
|
||||
+ principalToInherit->GetCsp(getter_AddRefs(originalCSP));
|
||||
+ if (!originalCSP) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ // if the principalToInherit had a CSP, add it to the before
|
||||
+ // created NullPrincipal (unless it already has one)
|
||||
+ MOZ_ASSERT(aPrincipal->GetIsNullPrincipal(),
|
||||
+ "inheriting the CSP only valid for NullPrincipal");
|
||||
+ nsCOMPtr<nsIContentSecurityPolicy> nullPrincipalCSP;
|
||||
+ aPrincipal->GetCsp(getter_AddRefs(nullPrincipalCSP));
|
||||
+ if (nullPrincipalCSP) {
|
||||
+ MOZ_ASSERT(nullPrincipalCSP == originalCSP,
|
||||
+ "There should be no other CSP here.");
|
||||
+ // CSPs are equal, no need to set it again.
|
||||
+ return;
|
||||
+ }
|
||||
+ aPrincipal->SetCsp(originalCSP);
|
||||
+}
|
||||
+
|
||||
nsresult
|
||||
nsScriptSecurityManager::GetChannelResultPrincipal(nsIChannel* aChannel,
|
||||
nsIPrincipal** aPrincipal,
|
||||
@@ -295,40 +351,7 @@ nsScriptSecurityManager::GetChannelResultPrincipal(nsIChannel* aChannel,
|
||||
if (!aIgnoreSandboxing && loadInfo->GetLoadingSandboxed()) {
|
||||
MOZ_ALWAYS_TRUE(NS_SUCCEEDED(loadInfo->GetSandboxedLoadingPrincipal(aPrincipal)));
|
||||
MOZ_ASSERT(*aPrincipal);
|
||||
- // if the new NullPrincipal (above) loads an iframe[srcdoc], we
|
||||
- // need to inherit an existing CSP to avoid bypasses (bug 1073952).
|
||||
- // We continue inheriting for nested frames with e.g., data: URLs.
|
||||
- if (loadInfo->GetExternalContentPolicyType() == nsIContentPolicy::TYPE_SUBDOCUMENT) {
|
||||
- nsCOMPtr<nsIURI> uri;
|
||||
- aChannel->GetURI(getter_AddRefs(uri));
|
||||
- nsAutoCString URISpec;
|
||||
- uri->GetSpec(URISpec);
|
||||
- bool isData = (NS_SUCCEEDED(uri->SchemeIs("data", &isData)) && isData);
|
||||
- if (URISpec.EqualsLiteral("about:srcdoc") || isData) {
|
||||
- nsCOMPtr<nsIPrincipal> principalToInherit = loadInfo->PrincipalToInherit();
|
||||
- if (!principalToInherit) {
|
||||
- principalToInherit = loadInfo->TriggeringPrincipal();
|
||||
- }
|
||||
- nsCOMPtr<nsIContentSecurityPolicy> originalCSP;
|
||||
- principalToInherit->GetCsp(getter_AddRefs(originalCSP));
|
||||
- if (originalCSP) {
|
||||
- // if the principalToInherit had a CSP,
|
||||
- // add it to the newly created NullPrincipal
|
||||
- // (unless it already has one)
|
||||
- nsCOMPtr<nsIContentSecurityPolicy> nullPrincipalCSP;
|
||||
- (*aPrincipal)->GetCsp(getter_AddRefs(nullPrincipalCSP));
|
||||
- if (nullPrincipalCSP) {
|
||||
- MOZ_ASSERT(nullPrincipalCSP == originalCSP,
|
||||
- "There should be no other CSP here.");
|
||||
- // CSPs are equal, no need to set it again.
|
||||
- return NS_OK;
|
||||
- } else {
|
||||
- nsresult rv = (*aPrincipal)->SetCsp(originalCSP);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
+ InheritAndSetCSPOnPrincipalIfNeeded(aChannel, *aPrincipal);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@@ -376,7 +399,10 @@ nsScriptSecurityManager::GetChannelResultPrincipal(nsIChannel* aChannel,
|
||||
}
|
||||
}
|
||||
}
|
||||
- return GetChannelURIPrincipal(aChannel, aPrincipal);
|
||||
+ nsresult rv = GetChannelURIPrincipal(aChannel, aPrincipal);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ InheritAndSetCSPOnPrincipalIfNeeded(aChannel, *aPrincipal);
|
||||
+ return NS_OK;
|
||||
}
|
||||
|
||||
/* The principal of the URI that this channel is loading. This is never
|
||||
|
||||
commit 9427f1bbd826
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Fri Aug 4 14:10:21 2017 +0200
|
||||
|
||||
Bug 1381761 - Convert test browser_911547.js to comply with new data: URI inheritance model. r=dveditz
|
||||
---
|
||||
.../components/sessionstore/test/browser_911547.js | 47 ++++++++++++++++------
|
||||
.../sessionstore/test/browser_911547_sample.html | 6 +--
|
||||
2 files changed, 37 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git browser/components/sessionstore/test/browser_911547.js browser/components/sessionstore/test/browser_911547.js
|
||||
index f0da70ed8f8c..cb95ddad7f2a 100644
|
||||
--- browser/components/sessionstore/test/browser_911547.js
|
||||
+++ browser/components/sessionstore/test/browser_911547.js
|
||||
@@ -1,11 +1,17 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
-// This tests that session restore component does restore the right content
|
||||
-// security policy with the document.
|
||||
-// The policy being tested disallows inline scripts
|
||||
+// This test is two fold:
|
||||
+// a) if security.data_uri.unique_opaque_origin == false, then
|
||||
+// this tests that session restore component does restore the right
|
||||
+// content security policy with the document. (The policy being
|
||||
+// tested disallows inline scripts).
|
||||
+// b) if security.data_uri.unique_opaque_origin == true, then
|
||||
+// this tests that data: URIs do not inherit the CSP from
|
||||
+// it's enclosing context.
|
||||
|
||||
add_task(async function test() {
|
||||
+ let dataURIPref = Services.prefs.getBoolPref("security.data_uri.unique_opaque_origin");
|
||||
// create a tab that has a CSP
|
||||
let testURL = "http://mochi.test:8888/browser/browser/components/sessionstore/test/browser_911547_sample.html";
|
||||
let tab = gBrowser.selectedTab = BrowserTestUtils.addTab(gBrowser, testURL);
|
||||
@@ -16,23 +22,33 @@ add_task(async function test() {
|
||||
|
||||
// this is a baseline to ensure CSP is active
|
||||
// attempt to inject and run a script via inline (pre-restore, allowed)
|
||||
- await injectInlineScript(browser, `document.getElementById("test_id").value = "fail";`);
|
||||
+ await injectInlineScript(browser, `document.getElementById("test_id1").value = "id1_modified";`);
|
||||
|
||||
let loadedPromise = promiseBrowserLoaded(browser);
|
||||
await ContentTask.spawn(browser, null, function() {
|
||||
- is(content.document.getElementById("test_id").value, "ok",
|
||||
+ is(content.document.getElementById("test_id1").value, "id1_initial",
|
||||
"CSP should block the inline script that modifies test_id");
|
||||
|
||||
- // attempt to click a link to a data: URI (will inherit the CSP of the
|
||||
- // origin document) and navigate to the data URI in the link.
|
||||
+
|
||||
+ // (a) if security.data_uri.unique_opaque_origin == false:
|
||||
+ // attempt to click a link to a data: URI (will inherit the CSP of
|
||||
+ // the origin document) and navigate to the data URI in the link.
|
||||
+ // (b) if security.data_uri.unique_opaque_origin == true:
|
||||
+ // attempt to click a link to a data: URI (will *not* inherit the CSP of
|
||||
+ // the origin document) and navigate to the data URI in the link.
|
||||
content.document.getElementById("test_data_link").click();
|
||||
});
|
||||
|
||||
await loadedPromise;
|
||||
|
||||
- await ContentTask.spawn(browser, null, function() {
|
||||
- is(content.document.getElementById("test_id2").value, "ok",
|
||||
- "CSP should block the script loaded by the clicked data URI");
|
||||
+ await ContentTask.spawn(browser, {dataURIPref}, function( {dataURIPref}) { // eslint-disable-line
|
||||
+ if (dataURIPref) {
|
||||
+ is(content.document.getElementById("test_id2").value, "id2_modified",
|
||||
+ "data: URI should *not* inherit the CSP of the enclosing context");
|
||||
+ } else {
|
||||
+ is(content.document.getElementById("test_id2").value, "id2_initial",
|
||||
+ "CSP should block the script loaded by the clicked data URI");
|
||||
+ }
|
||||
});
|
||||
|
||||
// close the tab
|
||||
@@ -43,9 +59,14 @@ add_task(async function test() {
|
||||
await promiseTabRestored(tab);
|
||||
browser = tab.linkedBrowser;
|
||||
|
||||
- await ContentTask.spawn(browser, null, function() {
|
||||
- is(content.document.getElementById("test_id2").value, "ok",
|
||||
- "CSP should block the script loaded by the clicked data URI after restore");
|
||||
+ await ContentTask.spawn(browser, {dataURIPref}, function({dataURIPref}) { // eslint-disable-line
|
||||
+ if (dataURIPref) {
|
||||
+ is(content.document.getElementById("test_id2").value, "id2_modified",
|
||||
+ "data: URI should *not* inherit the CSP of the enclosing context");
|
||||
+ } else {
|
||||
+ is(content.document.getElementById("test_id2").value, "id2_initial",
|
||||
+ "CSP should block the script loaded by the clicked data URI after restore");
|
||||
+ }
|
||||
});
|
||||
|
||||
// clean up
|
||||
diff --git browser/components/sessionstore/test/browser_911547_sample.html browser/components/sessionstore/test/browser_911547_sample.html
|
||||
index ccc2011593d4..73cb99ee41f1 100644
|
||||
--- browser/components/sessionstore/test/browser_911547_sample.html
|
||||
+++ browser/components/sessionstore/test/browser_911547_sample.html
|
||||
@@ -8,12 +8,12 @@
|
||||
|
||||
<!--
|
||||
this element gets modified by an injected script;
|
||||
- that script should be blocked by CSP.
|
||||
+ that script should be blocked by CSP if security.data_uri.unique_opaque_origin == false;
|
||||
Inline scripts can modify it, but not data uris.
|
||||
-->
|
||||
- <input type="text" id="test_id" value="ok">
|
||||
+ <input type="text" id="test_id1" value="id1_initial">
|
||||
|
||||
- <a id="test_data_link" href="data:text/html;charset=utf-8,<input type='text' id='test_id2' value='ok'/> <script>document.getElementById('test_id2').value = 'fail';</script>">Test Link</a>
|
||||
+ <a id="test_data_link" href="data:text/html;charset=utf-8,<input type='text' id='test_id2' value='id2_initial'/> <script>document.getElementById('test_id2').value = 'id2_modified';</script>">Test Link</a>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
commit 8b999864f0bb
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Fri Aug 4 14:10:38 2017 +0200
|
||||
|
||||
Bug 1381761 - Test data: URIs inherit the CSP even if treated as unique, opaque origins. r=dveditz
|
||||
---
|
||||
.../test/csp/file_data_csp_inheritance.html | 21 +++++++++++++
|
||||
dom/security/test/csp/mochitest.ini | 2 ++
|
||||
.../test/csp/test_data_csp_inheritance.html | 34 ++++++++++++++++++++++
|
||||
3 files changed, 57 insertions(+)
|
||||
|
||||
diff --git dom/security/test/csp/file_data_csp_inheritance.html dom/security/test/csp/file_data_csp_inheritance.html
|
||||
new file mode 100644
|
||||
index 000000000000..299c30255aa6
|
||||
--- /dev/null
|
||||
+++ dom/security/test/csp/file_data_csp_inheritance.html
|
||||
@@ -0,0 +1,21 @@
|
||||
+<!DOCTYPE HTML>
|
||||
+<html>
|
||||
+<head>
|
||||
+ <title>Bug 1381761 - Treating 'data:' documents as unique, opaque origins should still inherit the CSP</title>
|
||||
+ <meta charset="utf-8">
|
||||
+ <meta http-equiv="Content-Security-Policy" content= "img-src 'none'"/>
|
||||
+</head>
|
||||
+<body>
|
||||
+<iframe id="dataFrame" src="data:text/html,<body>should inherit csp</body>"></iframe>
|
||||
+
|
||||
+<script type="application/javascript">
|
||||
+ // get the csp in JSON notation from the principal
|
||||
+ var frame = document.getElementById("dataFrame");
|
||||
+ var principal = SpecialPowers.wrap(frame.contentDocument).nodePrincipal;
|
||||
+ var cspJSON = principal.cspJSON;
|
||||
+ var result = principal.cspJSON ? "dataInheritsCSP" : "dataDoesNotInheritCSP";
|
||||
+ window.parent.postMessage({result}, "*");
|
||||
+</script>
|
||||
+
|
||||
+</body>
|
||||
+</html>
|
||||
diff --git dom/security/test/csp/mochitest.ini dom/security/test/csp/mochitest.ini
|
||||
index ba391ad59799..09f80b2969d7 100644
|
||||
--- dom/security/test/csp/mochitest.ini
|
||||
+++ dom/security/test/csp/mochitest.ini
|
||||
@@ -217,6 +217,7 @@ support-files =
|
||||
file_ignore_xfo.html^headers^
|
||||
file_ro_ignore_xfo.html
|
||||
file_ro_ignore_xfo.html^headers^
|
||||
+ file_data_csp_inheritance.html
|
||||
file_report_font_cache-1.html
|
||||
file_report_font_cache-2.html
|
||||
file_report_font_cache-2.html^headers^
|
||||
@@ -308,4 +309,5 @@ tags = mcb
|
||||
[test_websocket_self.html]
|
||||
skip-if = toolkit == 'android'
|
||||
[test_ignore_xfo.html]
|
||||
+[test_data_csp_inheritance.html]
|
||||
[test_data_csp_merge.html]
|
||||
diff --git dom/security/test/csp/test_data_csp_inheritance.html dom/security/test/csp/test_data_csp_inheritance.html
|
||||
new file mode 100644
|
||||
index 000000000000..3afc4f7c02bc
|
||||
--- /dev/null
|
||||
+++ dom/security/test/csp/test_data_csp_inheritance.html
|
||||
@@ -0,0 +1,34 @@
|
||||
+<!DOCTYPE HTML>
|
||||
+<html>
|
||||
+<head>
|
||||
+ <title>Bug 1381761 - Treating 'data:' documents as unique, opaque origins should still inherit the CSP</title>
|
||||
+ <!-- Including SimpleTest.js so we can use waitForExplicitFinish !-->
|
||||
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
+</head>
|
||||
+<body>
|
||||
+<iframe style="width:100%;" id="testframe"></iframe>
|
||||
+
|
||||
+<script class="testbody" type="text/javascript">
|
||||
+
|
||||
+SimpleTest.waitForExplicitFinish();
|
||||
+
|
||||
+/* Description of the test:
|
||||
+ * We load an iframe using a meta CSP which includes another iframe
|
||||
+ * using a data: URI. We make sure the CSP gets inherited into
|
||||
+ * the data: URI iframe.
|
||||
+ */
|
||||
+
|
||||
+window.addEventListener("message", receiveMessage);
|
||||
+function receiveMessage(event) {
|
||||
+ window.removeEventListener("message", receiveMessage);
|
||||
+ is(event.data.result, "dataInheritsCSP",
|
||||
+ "data: URI iframe inherits CSP from including context");
|
||||
+ SimpleTest.finish();
|
||||
+}
|
||||
+
|
||||
+document.getElementById("testframe").src = "file_data_csp_inheritance.html";
|
||||
+
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
@ -1,200 +0,0 @@
|
||||
commit 6b3da0609f95
|
||||
Author: Byron Campen [:bwc] <docfaraday@gmail.com>
|
||||
Date: Thu Sep 14 12:19:24 2017 -0500
|
||||
|
||||
Bug 1383019: Move more logic under the protection of nsTimerImpl::mMutex, and simplify. r=froydnj, a=abillings
|
||||
|
||||
MozReview-Commit-ID: JjYScKwyika
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : a5a8a17f86459ace51d9250454bd4cf1433130b0
|
||||
---
|
||||
xpcom/threads/TimerThread.cpp | 12 ++++++----
|
||||
xpcom/threads/TimerThread.h | 32 -------------------------
|
||||
xpcom/threads/nsTimerImpl.cpp | 56 +++++++++++++++++++++----------------------
|
||||
xpcom/threads/nsTimerImpl.h | 5 ++--
|
||||
4 files changed, 36 insertions(+), 69 deletions(-)
|
||||
|
||||
diff --git xpcom/threads/TimerThread.cpp xpcom/threads/TimerThread.cpp
|
||||
index b91b27b2073a..99a40d91b3c0 100644
|
||||
--- xpcom/threads/TimerThread.cpp
|
||||
+++ xpcom/threads/TimerThread.cpp
|
||||
@@ -331,7 +331,7 @@ TimerThread::Shutdown()
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
- nsTArray<UniquePtr<Entry>> timers;
|
||||
+ nsTArray<RefPtr<nsTimerImpl>> timers;
|
||||
{
|
||||
// lock scope
|
||||
MonitorAutoLock lock(mMonitor);
|
||||
@@ -350,12 +350,14 @@ TimerThread::Shutdown()
|
||||
// might potentially call some code reentering the same lock
|
||||
// that leads to unexpected behavior or deadlock.
|
||||
// See bug 422472.
|
||||
- mTimers.SwapElements(timers);
|
||||
+ for (const UniquePtr<Entry>& entry : mTimers) {
|
||||
+ timers.AppendElement(entry->Take());
|
||||
+ }
|
||||
+
|
||||
+ mTimers.Clear();
|
||||
}
|
||||
|
||||
- uint32_t timersCount = timers.Length();
|
||||
- for (uint32_t i = 0; i < timersCount; i++) {
|
||||
- RefPtr<nsTimerImpl> timer = timers[i]->Take();
|
||||
+ for (const RefPtr<nsTimerImpl>& timer : timers) {
|
||||
if (timer) {
|
||||
timer->Cancel();
|
||||
}
|
||||
diff --git xpcom/threads/TimerThread.h xpcom/threads/TimerThread.h
|
||||
index f65c501c50e8..6610f5bf387b 100644
|
||||
--- xpcom/threads/TimerThread.h
|
||||
+++ xpcom/threads/TimerThread.h
|
||||
@@ -129,36 +129,4 @@ private:
|
||||
uint32_t mAllowedEarlyFiringMicroseconds;
|
||||
};
|
||||
|
||||
-struct TimerAdditionComparator
|
||||
-{
|
||||
- TimerAdditionComparator(const mozilla::TimeStamp& aNow,
|
||||
- nsTimerImpl* aTimerToInsert) :
|
||||
- now(aNow)
|
||||
-#ifdef DEBUG
|
||||
- , timerToInsert(aTimerToInsert)
|
||||
-#endif
|
||||
- {
|
||||
- }
|
||||
-
|
||||
- bool LessThan(nsTimerImpl* aFromArray, nsTimerImpl* aNewTimer) const
|
||||
- {
|
||||
- MOZ_ASSERT(aNewTimer == timerToInsert, "Unexpected timer ordering");
|
||||
-
|
||||
- // Skip any overdue timers.
|
||||
- return aFromArray->mTimeout <= now ||
|
||||
- aFromArray->mTimeout <= aNewTimer->mTimeout;
|
||||
- }
|
||||
-
|
||||
- bool Equals(nsTimerImpl* aFromArray, nsTimerImpl* aNewTimer) const
|
||||
- {
|
||||
- return false;
|
||||
- }
|
||||
-
|
||||
-private:
|
||||
- const mozilla::TimeStamp& now;
|
||||
-#ifdef DEBUG
|
||||
- const nsTimerImpl* const timerToInsert;
|
||||
-#endif
|
||||
-};
|
||||
-
|
||||
#endif /* TimerThread_h___ */
|
||||
diff --git xpcom/threads/nsTimerImpl.cpp xpcom/threads/nsTimerImpl.cpp
|
||||
index f6803791fe45..735271af089a 100644
|
||||
--- xpcom/threads/nsTimerImpl.cpp
|
||||
+++ xpcom/threads/nsTimerImpl.cpp
|
||||
@@ -133,16 +133,8 @@ nsTimer::Release(void)
|
||||
NS_LOG_RELEASE(this, count, "nsTimer");
|
||||
|
||||
if (count == 1) {
|
||||
- if (!mImpl->CancelCheckIfFiring()) {
|
||||
- // Last ref, in nsTimerImpl::mITimer. Make sure the cycle is broken.
|
||||
- // (when Cancel fails, nsTimerImpl::Fire is in progress, which has grabbed
|
||||
- // another ref to the nsITimer since we checked the value of mRefCnt
|
||||
- // above)
|
||||
- // If there is a nsTimerEvent in a queue for this timer, the nsTimer will
|
||||
- // live until that event pops, otherwise the nsTimerImpl will go away and
|
||||
- // the nsTimer along with it.
|
||||
- mImpl = nullptr;
|
||||
- }
|
||||
+ // Last ref, in nsTimerImpl::mITimer. Make sure the cycle is broken.
|
||||
+ mImpl->CancelImpl(true);
|
||||
} else if (count == 0) {
|
||||
delete this;
|
||||
}
|
||||
@@ -322,31 +314,37 @@ nsTimerImpl::Init(nsIObserver* aObserver, uint32_t aDelay, uint32_t aType)
|
||||
return InitCommon(aDelay, aType, mozilla::Move(cb));
|
||||
}
|
||||
|
||||
-bool
|
||||
-nsTimerImpl::CancelCheckIfFiring()
|
||||
+nsresult
|
||||
+nsTimerImpl::Cancel()
|
||||
{
|
||||
- Callback cb;
|
||||
+ CancelImpl(false);
|
||||
+ return NS_OK;
|
||||
+}
|
||||
|
||||
- MutexAutoLock lock(mMutex);
|
||||
+void
|
||||
+nsTimerImpl::CancelImpl(bool aClearITimer)
|
||||
+{
|
||||
+ Callback cbTrash;
|
||||
+ RefPtr<nsITimer> timerTrash;
|
||||
|
||||
- if (gThread) {
|
||||
- gThread->RemoveTimer(this);
|
||||
- }
|
||||
+ {
|
||||
+ MutexAutoLock lock(mMutex);
|
||||
+ if (gThread) {
|
||||
+ gThread->RemoveTimer(this);
|
||||
+ }
|
||||
|
||||
- cb.swap(mCallback);
|
||||
- ++mGeneration;
|
||||
+ cbTrash.swap(mCallback);
|
||||
+ ++mGeneration;
|
||||
|
||||
- if (mCallbackDuringFire.mType != Callback::Type::Unknown) {
|
||||
- return true;
|
||||
+ // Don't clear this if we're firing; once Fire returns, we'll get this call
|
||||
+ // again.
|
||||
+ if (aClearITimer &&
|
||||
+ (mCallbackDuringFire.mType == Callback::Type::Unknown)) {
|
||||
+ MOZ_RELEASE_ASSERT(mITimer, "mITimer was nulled already! "
|
||||
+ "This indicates that someone has messed up the refcount on nsTimer!");
|
||||
+ timerTrash.swap(mITimer);
|
||||
+ }
|
||||
}
|
||||
- return false;
|
||||
-}
|
||||
-
|
||||
-nsresult
|
||||
-nsTimerImpl::Cancel()
|
||||
-{
|
||||
- (void)CancelCheckIfFiring();
|
||||
- return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
diff --git xpcom/threads/nsTimerImpl.h xpcom/threads/nsTimerImpl.h
|
||||
index 4b26cd21d80a..1cb530c0be3d 100644
|
||||
--- xpcom/threads/nsTimerImpl.h
|
||||
+++ xpcom/threads/nsTimerImpl.h
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
static void Shutdown();
|
||||
|
||||
void SetDelayInternal(uint32_t aDelay, TimeStamp aBase = TimeStamp::Now());
|
||||
- bool CancelCheckIfFiring();
|
||||
+ void CancelImpl(bool aClearITimer);
|
||||
|
||||
void Fire(int32_t aGeneration);
|
||||
|
||||
@@ -211,7 +211,7 @@ public:
|
||||
static double sDeltaSum;
|
||||
static double sDeltaSumSquared;
|
||||
static double sDeltaNum;
|
||||
- const RefPtr<nsITimer> mITimer;
|
||||
+ RefPtr<nsITimer> mITimer;
|
||||
mozilla::Mutex mMutex;
|
||||
Callback mCallback;
|
||||
Callback mCallbackDuringFire;
|
||||
@@ -225,7 +225,6 @@ public:
|
||||
|
||||
friend class TimerThread;
|
||||
friend class nsTimerEvent;
|
||||
- friend struct TimerAdditionComparator;
|
||||
|
||||
NS_DECL_THREADSAFE_ISUPPORTS
|
||||
NS_FORWARD_SAFE_NSITIMER(mImpl);
|
@ -1,218 +0,0 @@
|
||||
commit 485ed2f2b015
|
||||
Author: Jan de Mooij <jdemooij@mozilla.com>
|
||||
Date: Mon Sep 18 15:08:44 2017 +0200
|
||||
|
||||
Bug 1384121 part 1 - Don't sweep ObjectGroups under IC helper functions. r=bhackett
|
||||
---
|
||||
js/src/jit/IonCacheIRCompiler.cpp | 4 ++--
|
||||
js/src/vm/ObjectGroup.h | 2 ++
|
||||
js/src/vm/TypeInference-inl.h | 29 ++++++++++++++++++++++-------
|
||||
js/src/vm/UnboxedObject.cpp | 2 +-
|
||||
4 files changed, 27 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git js/src/jit/IonCacheIRCompiler.cpp js/src/jit/IonCacheIRCompiler.cpp
|
||||
index b11aed7966b6..bbfbdae57b12 100644
|
||||
--- js/src/jit/IonCacheIRCompiler.cpp
|
||||
+++ js/src/jit/IonCacheIRCompiler.cpp
|
||||
@@ -1324,9 +1324,9 @@ IonCacheIRCompiler::emitCallStringSplitResult()
|
||||
static bool
|
||||
GroupHasPropertyTypes(ObjectGroup* group, jsid* id, Value* v)
|
||||
{
|
||||
- if (group->unknownProperties())
|
||||
+ if (group->unknownPropertiesDontCheckGeneration())
|
||||
return true;
|
||||
- HeapTypeSet* propTypes = group->maybeGetProperty(*id);
|
||||
+ HeapTypeSet* propTypes = group->maybeGetPropertyDontCheckGeneration(*id);
|
||||
if (!propTypes)
|
||||
return true;
|
||||
if (!propTypes->nonConstantProperty())
|
||||
diff --git js/src/vm/ObjectGroup.h js/src/vm/ObjectGroup.h
|
||||
index 237b5a152576..0eba71ee084f 100644
|
||||
--- js/src/vm/ObjectGroup.h
|
||||
+++ js/src/vm/ObjectGroup.h
|
||||
@@ -390,6 +390,7 @@ class ObjectGroup : public gc::TenuredCell
|
||||
|
||||
/* Get a property only if it already exists. */
|
||||
MOZ_ALWAYS_INLINE HeapTypeSet* maybeGetProperty(jsid id);
|
||||
+ MOZ_ALWAYS_INLINE HeapTypeSet* maybeGetPropertyDontCheckGeneration(jsid id);
|
||||
|
||||
/*
|
||||
* Iterate through the group's properties. getPropertyCount overapproximates
|
||||
@@ -471,6 +472,7 @@ class ObjectGroup : public gc::TenuredCell
|
||||
}
|
||||
|
||||
inline uint32_t basePropertyCount();
|
||||
+ inline uint32_t basePropertyCountDontCheckGeneration();
|
||||
|
||||
private:
|
||||
inline void setBasePropertyCount(uint32_t count);
|
||||
diff --git js/src/vm/TypeInference-inl.h js/src/vm/TypeInference-inl.h
|
||||
index f7cd3459ef19..f2b0b9a52fbc 100644
|
||||
--- js/src/vm/TypeInference-inl.h
|
||||
+++ js/src/vm/TypeInference-inl.h
|
||||
@@ -369,10 +369,10 @@ TypeMonitorCall(JSContext* cx, const js::CallArgs& args, bool constructing)
|
||||
MOZ_ALWAYS_INLINE bool
|
||||
TrackPropertyTypes(JSObject* obj, jsid id)
|
||||
{
|
||||
- if (obj->hasLazyGroup() || obj->group()->unknownProperties())
|
||||
+ if (obj->hasLazyGroup() || obj->group()->unknownPropertiesDontCheckGeneration())
|
||||
return false;
|
||||
|
||||
- if (obj->isSingleton() && !obj->group()->maybeGetProperty(id))
|
||||
+ if (obj->isSingleton() && !obj->group()->maybeGetPropertyDontCheckGeneration(id))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
@@ -410,7 +410,7 @@ HasTrackedPropertyType(JSObject* obj, jsid id, TypeSet::Type type)
|
||||
MOZ_ASSERT(id == IdToTypeId(id));
|
||||
MOZ_ASSERT(TrackPropertyTypes(obj, id));
|
||||
|
||||
- if (HeapTypeSet* types = obj->group()->maybeGetProperty(id)) {
|
||||
+ if (HeapTypeSet* types = obj->group()->maybeGetPropertyDontCheckGeneration(id)) {
|
||||
if (!types->hasType(type))
|
||||
return false;
|
||||
// Non-constant properties are only relevant for singleton objects.
|
||||
@@ -1074,10 +1074,18 @@ TypeSet::getObjectClass(unsigned i) const
|
||||
// ObjectGroup
|
||||
/////////////////////////////////////////////////////////////////////
|
||||
|
||||
+inline uint32_t
|
||||
+ObjectGroup::basePropertyCountDontCheckGeneration()
|
||||
+{
|
||||
+ uint32_t flags = flagsDontCheckGeneration();
|
||||
+ return (flags & OBJECT_FLAG_PROPERTY_COUNT_MASK) >> OBJECT_FLAG_PROPERTY_COUNT_SHIFT;
|
||||
+}
|
||||
+
|
||||
inline uint32_t
|
||||
ObjectGroup::basePropertyCount()
|
||||
{
|
||||
- return (flags() & OBJECT_FLAG_PROPERTY_COUNT_MASK) >> OBJECT_FLAG_PROPERTY_COUNT_SHIFT;
|
||||
+ maybeSweep(nullptr);
|
||||
+ return basePropertyCountDontCheckGeneration();
|
||||
}
|
||||
|
||||
inline void
|
||||
@@ -1134,14 +1142,14 @@ ObjectGroup::getProperty(JSContext* cx, JSObject* obj, jsid id)
|
||||
}
|
||||
|
||||
MOZ_ALWAYS_INLINE HeapTypeSet*
|
||||
-ObjectGroup::maybeGetProperty(jsid id)
|
||||
+ObjectGroup::maybeGetPropertyDontCheckGeneration(jsid id)
|
||||
{
|
||||
MOZ_ASSERT(JSID_IS_VOID(id) || JSID_IS_EMPTY(id) || JSID_IS_STRING(id) || JSID_IS_SYMBOL(id));
|
||||
MOZ_ASSERT_IF(!JSID_IS_EMPTY(id), id == IdToTypeId(id));
|
||||
- MOZ_ASSERT(!unknownProperties());
|
||||
+ MOZ_ASSERT(!unknownPropertiesDontCheckGeneration());
|
||||
|
||||
Property* prop = TypeHashSet::Lookup<jsid, Property, Property>
|
||||
- (propertySet, basePropertyCount(), id);
|
||||
+ (propertySet, basePropertyCountDontCheckGeneration(), id);
|
||||
|
||||
if (!prop)
|
||||
return nullptr;
|
||||
@@ -1150,6 +1158,13 @@ ObjectGroup::maybeGetProperty(jsid id)
|
||||
return &prop->types;
|
||||
}
|
||||
|
||||
+MOZ_ALWAYS_INLINE HeapTypeSet*
|
||||
+ObjectGroup::maybeGetProperty(jsid id)
|
||||
+{
|
||||
+ maybeSweep(nullptr);
|
||||
+ return maybeGetPropertyDontCheckGeneration(id);
|
||||
+}
|
||||
+
|
||||
inline unsigned
|
||||
ObjectGroup::getPropertyCount()
|
||||
{
|
||||
diff --git js/src/vm/UnboxedObject.cpp js/src/vm/UnboxedObject.cpp
|
||||
index c155b7dc47c9..4e007489a67e 100644
|
||||
--- js/src/vm/UnboxedObject.cpp
|
||||
+++ js/src/vm/UnboxedObject.cpp
|
||||
@@ -363,7 +363,7 @@ UnboxedPlainObject::ensureExpando(JSContext* cx, Handle<UnboxedPlainObject*> obj
|
||||
bool
|
||||
UnboxedPlainObject::containsUnboxedOrExpandoProperty(JSContext* cx, jsid id) const
|
||||
{
|
||||
- if (layout().lookup(id))
|
||||
+ if (layoutDontCheckGeneration().lookup(id))
|
||||
return true;
|
||||
|
||||
if (maybeExpando() && maybeExpando()->containsShapeOrElement(cx, id))
|
||||
commit e240cf665f74
|
||||
Author: Jan de Mooij <jdemooij@mozilla.com>
|
||||
Date: Wed Sep 20 12:13:54 2017 +0200
|
||||
|
||||
Bug 1384121 part 2 - Add asserts to catch similar bugs and fix some false positives. r=nbp
|
||||
---
|
||||
js/src/jit/Bailouts.cpp | 4 ----
|
||||
js/src/jit/JSJitFrameIter.cpp | 2 ++
|
||||
js/src/jit/VMFunctions.cpp | 1 -
|
||||
js/src/jit/arm/Trampoline-arm.cpp | 9 ++++++---
|
||||
js/src/jit/arm64/Trampoline-arm64.cpp | 9 ++++++---
|
||||
js/src/jit/mips32/Trampoline-mips32.cpp | 9 ++++++---
|
||||
js/src/jit/mips64/Trampoline-mips64.cpp | 9 ++++++---
|
||||
js/src/jit/x64/Trampoline-x64.cpp | 9 ++++++---
|
||||
js/src/jit/x86/Trampoline-x86.cpp | 9 ++++++---
|
||||
js/src/vm/ObjectGroup-inl.h | 1 +
|
||||
js/src/vm/Stack.cpp | 2 ++
|
||||
js/src/vm/TypeInference.cpp | 3 +++
|
||||
12 files changed, 44 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git js/src/jit/JSJitFrameIter.cpp js/src/jit/JSJitFrameIter.cpp
|
||||
index 3774b327d21c..ae76bc2abaf0 100644
|
||||
--- js/src/jit/JitFrameIterator.cpp
|
||||
+++ js/src/jit/JitFrameIterator.cpp
|
||||
@@ -25,6 +25,8 @@ JSJitFrameIter::JSJitFrameIter(const JitActivation* activation)
|
||||
current_ = activation_->bailoutData()->fp();
|
||||
frameSize_ = activation_->bailoutData()->topFrameSize();
|
||||
type_ = JitFrame_Bailout;
|
||||
+ } else {
|
||||
+ MOZ_ASSERT(!TlsContext.get()->inUnsafeCallWithABI);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git js/src/vm/ObjectGroup-inl.h js/src/vm/ObjectGroup-inl.h
|
||||
index 7e023ecbad8e..d7caa63d8725 100644
|
||||
--- js/src/vm/ObjectGroup-inl.h
|
||||
+++ js/src/vm/ObjectGroup-inl.h
|
||||
@@ -16,6 +16,7 @@ ObjectGroup::needsSweep()
|
||||
{
|
||||
// Note: this can be called off thread during compacting GCs, in which case
|
||||
// nothing will be running on the active thread.
|
||||
+ MOZ_ASSERT(!TlsContext.get()->inUnsafeCallWithABI);
|
||||
return generation() != zoneFromAnyThread()->types.generation;
|
||||
}
|
||||
|
||||
diff --git js/src/vm/Stack.cpp js/src/vm/Stack.cpp
|
||||
index d3c0038db5ca..0406195abd56 100644
|
||||
--- js/src/vm/Stack.cpp
|
||||
+++ js/src/vm/Stack.cpp
|
||||
@@ -605,6 +605,8 @@ FrameIter::popInterpreterFrame()
|
||||
void
|
||||
FrameIter::settleOnActivation()
|
||||
{
|
||||
+ MOZ_ASSERT(!data_.cx_->inUnsafeCallWithABI);
|
||||
+
|
||||
while (true) {
|
||||
if (data_.activations_.done()) {
|
||||
data_.state_ = DONE;
|
||||
diff --git js/src/vm/TypeInference.cpp js/src/vm/TypeInference.cpp
|
||||
index f0562a4355f8..eba18e34397e 100644
|
||||
--- js/src/vm/TypeInference.cpp
|
||||
+++ js/src/vm/TypeInference.cpp
|
||||
@@ -4428,6 +4428,8 @@ ObjectGroup::sweep(AutoClearTypeInferenceStateOnOOM* oom)
|
||||
/* static */ void
|
||||
JSScript::maybeSweepTypes(AutoClearTypeInferenceStateOnOOM* oom)
|
||||
{
|
||||
+ MOZ_ASSERT(!TlsContext.get()->inUnsafeCallWithABI);
|
||||
+
|
||||
if (!types_ || typesGeneration() == zone()->types.generation)
|
||||
return;
|
||||
|
||||
@@ -4611,6 +4613,7 @@ AutoClearTypeInferenceStateOnOOM::AutoClearTypeInferenceStateOnOOM(Zone* zone)
|
||||
: zone(zone), oom(false)
|
||||
{
|
||||
MOZ_RELEASE_ASSERT(CurrentThreadCanAccessZone(zone));
|
||||
+ MOZ_ASSERT(!TlsContext.get()->inUnsafeCallWithABI);
|
||||
zone->types.setSweepingTypes(true);
|
||||
}
|
||||
|
@ -1,796 +0,0 @@
|
||||
diff --git widget/gtk/nsLookAndFeel.cpp widget/gtk/nsLookAndFeel.cpp
|
||||
index 6bb3e27c6653..f4c35d82200a 100644
|
||||
--- widget/gtk/nsLookAndFeel.cpp
|
||||
+++ widget/gtk/nsLookAndFeel.cpp
|
||||
@@ -29,11 +29,9 @@
|
||||
|
||||
#include "mozilla/gfx/2D.h"
|
||||
|
||||
-#if MOZ_WIDGET_GTK != 2
|
||||
#include <cairo-gobject.h>
|
||||
#include "WidgetStyleCache.h"
|
||||
#include "prenv.h"
|
||||
-#endif
|
||||
|
||||
using mozilla::LookAndFeel;
|
||||
|
||||
@@ -49,9 +47,6 @@ using mozilla::LookAndFeel;
|
||||
|
||||
nsLookAndFeel::nsLookAndFeel()
|
||||
: nsXPLookAndFeel(),
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- mStyle(nullptr),
|
||||
-#endif
|
||||
mDefaultFontCached(false), mButtonFontCached(false),
|
||||
mFieldFontCached(false), mMenuFontCached(false),
|
||||
mInitialized(false)
|
||||
@@ -66,12 +61,8 @@ nsLookAndFeel::NativeInit()
|
||||
|
||||
nsLookAndFeel::~nsLookAndFeel()
|
||||
{
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- g_object_unref(mStyle);
|
||||
-#endif
|
||||
}
|
||||
|
||||
-#if MOZ_WIDGET_GTK != 2
|
||||
// Modifies color |*aDest| as if a pattern of color |aSource| was painted with
|
||||
// CAIRO_OPERATOR_OVER to a surface with color |*aDest|.
|
||||
static void
|
||||
@@ -228,42 +219,19 @@ GetBorderColors(GtkStyleContext* aContext,
|
||||
*aDarkColor = GDK_RGBA_TO_NS_RGBA(darkColor);
|
||||
return ret;
|
||||
}
|
||||
-#endif
|
||||
|
||||
nsresult
|
||||
nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
{
|
||||
EnsureInit();
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 3)
|
||||
GdkRGBA gdk_color;
|
||||
-#endif
|
||||
nsresult res = NS_OK;
|
||||
|
||||
switch (aID) {
|
||||
// These colors don't seem to be used for anything anymore in Mozilla
|
||||
// (except here at least TextSelectBackground and TextSelectForeground)
|
||||
// The CSS2 colors below are used.
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- case eColorID_WindowBackground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_WindowForeground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_WidgetBackground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_WidgetForeground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_WidgetSelectBackground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
- case eColorID_WidgetSelectForeground:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
-#else
|
||||
case eColorID_WindowBackground:
|
||||
case eColorID_WidgetBackground:
|
||||
case eColorID_TextBackground:
|
||||
@@ -303,35 +271,12 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
case eColorID__moz_html_cellhighlighttext:
|
||||
aColor = sTextSelectedText;
|
||||
break;
|
||||
-#endif
|
||||
case eColorID_Widget3DHighlight:
|
||||
aColor = NS_RGB(0xa0,0xa0,0xa0);
|
||||
break;
|
||||
case eColorID_Widget3DShadow:
|
||||
aColor = NS_RGB(0x40,0x40,0x40);
|
||||
break;
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- case eColorID_TextBackground:
|
||||
- // not used?
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_TextForeground:
|
||||
- // not used?
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_TextSelectBackground:
|
||||
- case eColorID_IMESelectedRawTextBackground:
|
||||
- case eColorID_IMESelectedConvertedTextBackground:
|
||||
- // still used
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
- case eColorID_TextSelectForeground:
|
||||
- case eColorID_IMESelectedRawTextForeground:
|
||||
- case eColorID_IMESelectedConvertedTextForeground:
|
||||
- // still used
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
-#endif
|
||||
case eColorID_IMERawInputBackground:
|
||||
case eColorID_IMEConvertedTextBackground:
|
||||
aColor = NS_TRANSPARENT;
|
||||
@@ -352,53 +297,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
aColor = NS_RGB(0xff, 0, 0);
|
||||
break;
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- // css2 http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
|
||||
- case eColorID_activeborder:
|
||||
- // active window border
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_activecaption:
|
||||
- // active window caption background
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_appworkspace:
|
||||
- // MDI background color
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_background:
|
||||
- // desktop background
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_captiontext:
|
||||
- // text in active window caption, size box, and scrollbar arrow box (!)
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_graytext:
|
||||
- // disabled text in windows, menus, etc.
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
|
||||
- break;
|
||||
- case eColorID_highlight:
|
||||
- // background of selected item
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
- case eColorID_highlighttext:
|
||||
- // text of selected item
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
- case eColorID_inactiveborder:
|
||||
- // inactive window border
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID_inactivecaption:
|
||||
- // inactive window caption
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_INSENSITIVE]);
|
||||
- break;
|
||||
- case eColorID_inactivecaptiontext:
|
||||
- // text in inactive window caption
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_INSENSITIVE]);
|
||||
- break;
|
||||
-#else
|
||||
// css2 http://www.w3.org/TR/REC-CSS2/ui.html#system-colors
|
||||
case eColorID_activeborder: {
|
||||
// active window border
|
||||
@@ -433,7 +331,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
ReleaseStyleContext(style);
|
||||
break;
|
||||
}
|
||||
-#endif
|
||||
case eColorID_infobackground:
|
||||
// tooltip background color
|
||||
aColor = sInfoBackground;
|
||||
@@ -452,11 +349,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
break;
|
||||
case eColorID_scrollbar:
|
||||
// scrollbar gray area
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_ACTIVE]);
|
||||
-#else
|
||||
aColor = sMozScrollbar;
|
||||
-#endif
|
||||
break;
|
||||
|
||||
case eColorID_threedlightshadow:
|
||||
@@ -465,11 +358,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
case eColorID_threedface:
|
||||
case eColorID_buttonface:
|
||||
// 3-D face color
|
||||
-#if (MOZ_WIDGET_GTK == 3)
|
||||
aColor = sMozWindowBackground;
|
||||
-#else
|
||||
- aColor = sButtonBackground;
|
||||
-#endif
|
||||
break;
|
||||
|
||||
case eColorID_buttontext:
|
||||
@@ -491,56 +380,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
aColor = sFrameInnerDarkBorder;
|
||||
break;
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- case eColorID_threeddarkshadow:
|
||||
- // 3-D shadow outer edge color
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->black);
|
||||
- break;
|
||||
-
|
||||
- case eColorID_window:
|
||||
- case eColorID_windowframe:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
-
|
||||
- case eColorID_windowtext:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
-
|
||||
- case eColorID__moz_eventreerow:
|
||||
- case eColorID__moz_field:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID__moz_fieldtext:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID__moz_dialog:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID__moz_dialogtext:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_NORMAL]);
|
||||
- break;
|
||||
- case eColorID__moz_dragtargetzone:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_SELECTED]);
|
||||
- break;
|
||||
- case eColorID__moz_buttondefault:
|
||||
- // default button border color
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->black);
|
||||
- break;
|
||||
- case eColorID__moz_buttonhoverface:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->bg[GTK_STATE_PRELIGHT]);
|
||||
- break;
|
||||
- case eColorID__moz_buttonhovertext:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->fg[GTK_STATE_PRELIGHT]);
|
||||
- break;
|
||||
- case eColorID__moz_cellhighlight:
|
||||
- case eColorID__moz_html_cellhighlight:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->base[GTK_STATE_ACTIVE]);
|
||||
- break;
|
||||
- case eColorID__moz_cellhighlighttext:
|
||||
- case eColorID__moz_html_cellhighlighttext:
|
||||
- aColor = GDK_COLOR_TO_NS_RGB(mStyle->text[GTK_STATE_ACTIVE]);
|
||||
- break;
|
||||
-#else
|
||||
case eColorID_threeddarkshadow:
|
||||
// Hardcode to black
|
||||
aColor = NS_RGB(0x00,0x00,0x00);
|
||||
@@ -574,7 +413,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
case eColorID__moz_buttonhovertext:
|
||||
aColor = sButtonHoverText;
|
||||
break;
|
||||
-#endif
|
||||
case eColorID__moz_menuhover:
|
||||
aColor = sMenuHover;
|
||||
break;
|
||||
@@ -590,11 +428,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
case eColorID__moz_comboboxtext:
|
||||
aColor = sComboBoxText;
|
||||
break;
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- case eColorID__moz_combobox:
|
||||
- aColor = sComboBoxBackground;
|
||||
- break;
|
||||
-#endif
|
||||
case eColorID__moz_menubartext:
|
||||
aColor = sMenuBarText;
|
||||
break;
|
||||
@@ -602,11 +435,7 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
aColor = sMenuBarHoverText;
|
||||
break;
|
||||
case eColorID__moz_gtk_info_bar_text:
|
||||
-#if (MOZ_WIDGET_GTK == 3)
|
||||
aColor = sInfoBarText;
|
||||
-#else
|
||||
- aColor = sInfoText;
|
||||
-#endif
|
||||
break;
|
||||
default:
|
||||
/* default color is BLACK */
|
||||
@@ -618,27 +447,6 @@ nsLookAndFeel::NativeGetColor(ColorID aID, nscolor& aColor)
|
||||
return res;
|
||||
}
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
-static void darken_gdk_color(GdkColor *src, GdkColor *dest)
|
||||
-{
|
||||
- gdouble red;
|
||||
- gdouble green;
|
||||
- gdouble blue;
|
||||
-
|
||||
- red = (gdouble) src->red / 65535.0;
|
||||
- green = (gdouble) src->green / 65535.0;
|
||||
- blue = (gdouble) src->blue / 65535.0;
|
||||
-
|
||||
- red *= 0.93;
|
||||
- green *= 0.93;
|
||||
- blue *= 0.93;
|
||||
-
|
||||
- dest->red = red * 65535.0;
|
||||
- dest->green = green * 65535.0;
|
||||
- dest->blue = blue * 65535.0;
|
||||
-}
|
||||
-#endif
|
||||
-
|
||||
static int32_t CheckWidgetStyle(GtkWidget* aWidget, const char* aStyle, int32_t aResult) {
|
||||
gboolean value = FALSE;
|
||||
gtk_widget_style_get(aWidget, aStyle, &value, nullptr);
|
||||
@@ -826,14 +634,8 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
|
||||
res = NS_ERROR_NOT_IMPLEMENTED;
|
||||
break;
|
||||
case eIntID_TouchEnabled:
|
||||
-#if MOZ_WIDGET_GTK == 3
|
||||
aResult = mozilla::widget::WidgetUtils::IsTouchDeviceSupportPresent();
|
||||
break;
|
||||
-#else
|
||||
- aResult = 0;
|
||||
- res = NS_ERROR_NOT_IMPLEMENTED;
|
||||
-#endif
|
||||
- break;
|
||||
case eIntID_MacGraphiteTheme:
|
||||
aResult = 0;
|
||||
res = NS_ERROR_NOT_IMPLEMENTED;
|
||||
@@ -905,24 +707,20 @@ nsLookAndFeel::GetFloatImpl(FloatID aID, float &aResult)
|
||||
}
|
||||
|
||||
static void
|
||||
-GetSystemFontInfo(GtkWidget *aWidget,
|
||||
+GetSystemFontInfo(GtkStyleContext *aStyle,
|
||||
nsString *aFontName,
|
||||
gfxFontStyle *aFontStyle)
|
||||
{
|
||||
- GtkSettings *settings = gtk_widget_get_settings(aWidget);
|
||||
-
|
||||
aFontStyle->style = NS_FONT_STYLE_NORMAL;
|
||||
|
||||
- gchar *fontname;
|
||||
- g_object_get(settings, "gtk-font-name", &fontname, nullptr);
|
||||
-
|
||||
+ // As in
|
||||
+ // https://git.gnome.org/browse/gtk+/tree/gtk/gtkwidget.c?h=3.22.19#n10333
|
||||
PangoFontDescription *desc;
|
||||
- desc = pango_font_description_from_string(fontname);
|
||||
+ gtk_style_context_get(aStyle, gtk_style_context_get_state(aStyle),
|
||||
+ "font", &desc, nullptr);
|
||||
|
||||
aFontStyle->systemFont = true;
|
||||
|
||||
- g_free(fontname);
|
||||
-
|
||||
NS_NAMED_LITERAL_STRING(quote, "\"");
|
||||
NS_ConvertUTF8toUTF16 family(pango_font_description_get_family(desc));
|
||||
*aFontName = quote + family + quote;
|
||||
@@ -953,96 +751,28 @@ GetSystemFontInfo(GtkWidget *aWidget,
|
||||
pango_font_description_free(desc);
|
||||
}
|
||||
|
||||
-static void
|
||||
-GetSystemFontInfo(LookAndFeel::FontID aID,
|
||||
- nsString *aFontName,
|
||||
- gfxFontStyle *aFontStyle)
|
||||
-{
|
||||
- if (aID == LookAndFeel::eFont_Widget) {
|
||||
- GtkWidget *label = gtk_label_new("M");
|
||||
- GtkWidget *parent = gtk_fixed_new();
|
||||
- GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
|
||||
-
|
||||
- gtk_container_add(GTK_CONTAINER(parent), label);
|
||||
- gtk_container_add(GTK_CONTAINER(window), parent);
|
||||
-
|
||||
- gtk_widget_ensure_style(label);
|
||||
- GetSystemFontInfo(label, aFontName, aFontStyle);
|
||||
- gtk_widget_destroy(window); // no unref, windows are different
|
||||
-
|
||||
- } else if (aID == LookAndFeel::eFont_Button) {
|
||||
- GtkWidget *label = gtk_label_new("M");
|
||||
- GtkWidget *parent = gtk_fixed_new();
|
||||
- GtkWidget *button = gtk_button_new();
|
||||
- GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
|
||||
-
|
||||
- gtk_container_add(GTK_CONTAINER(button), label);
|
||||
- gtk_container_add(GTK_CONTAINER(parent), button);
|
||||
- gtk_container_add(GTK_CONTAINER(window), parent);
|
||||
-
|
||||
- gtk_widget_ensure_style(label);
|
||||
- GetSystemFontInfo(label, aFontName, aFontStyle);
|
||||
- gtk_widget_destroy(window); // no unref, windows are different
|
||||
-
|
||||
- } else if (aID == LookAndFeel::eFont_Field) {
|
||||
- GtkWidget *entry = gtk_entry_new();
|
||||
- GtkWidget *parent = gtk_fixed_new();
|
||||
- GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
|
||||
-
|
||||
- gtk_container_add(GTK_CONTAINER(parent), entry);
|
||||
- gtk_container_add(GTK_CONTAINER(window), parent);
|
||||
-
|
||||
- gtk_widget_ensure_style(entry);
|
||||
- GetSystemFontInfo(entry, aFontName, aFontStyle);
|
||||
- gtk_widget_destroy(window); // no unref, windows are different
|
||||
-
|
||||
- } else {
|
||||
- MOZ_ASSERT(aID == LookAndFeel::eFont_Menu, "unexpected font ID");
|
||||
- GtkWidget *accel_label = gtk_accel_label_new("M");
|
||||
- GtkWidget *menuitem = gtk_menu_item_new();
|
||||
- GtkWidget *menu = gtk_menu_new();
|
||||
- g_object_ref_sink(menu);
|
||||
-
|
||||
- gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
|
||||
- gtk_menu_shell_append((GtkMenuShell *)GTK_MENU(menu), menuitem);
|
||||
-
|
||||
- gtk_widget_ensure_style(accel_label);
|
||||
- GetSystemFontInfo(accel_label, aFontName, aFontStyle);
|
||||
- g_object_unref(menu);
|
||||
- }
|
||||
-}
|
||||
-
|
||||
bool
|
||||
nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
|
||||
gfxFontStyle& aFontStyle,
|
||||
float aDevPixPerCSSPixel)
|
||||
{
|
||||
- nsString *cachedFontName = nullptr;
|
||||
- gfxFontStyle *cachedFontStyle = nullptr;
|
||||
- bool *isCached = nullptr;
|
||||
-
|
||||
switch (aID) {
|
||||
case eFont_Menu: // css2
|
||||
case eFont_PullDownMenu: // css3
|
||||
- cachedFontName = &mMenuFontName;
|
||||
- cachedFontStyle = &mMenuFontStyle;
|
||||
- isCached = &mMenuFontCached;
|
||||
- aID = eFont_Menu;
|
||||
- break;
|
||||
+ aFontName = mMenuFontName;
|
||||
+ aFontStyle = mMenuFontStyle;
|
||||
+ return true;
|
||||
|
||||
case eFont_Field: // css3
|
||||
case eFont_List: // css3
|
||||
- cachedFontName = &mFieldFontName;
|
||||
- cachedFontStyle = &mFieldFontStyle;
|
||||
- isCached = &mFieldFontCached;
|
||||
- aID = eFont_Field;
|
||||
- break;
|
||||
+ aFontName = mFieldFontName;
|
||||
+ aFontStyle = mFieldFontStyle;
|
||||
+ return true;
|
||||
|
||||
case eFont_Button: // css3
|
||||
- cachedFontName = &mButtonFontName;
|
||||
- cachedFontStyle = &mButtonFontStyle;
|
||||
- isCached = &mButtonFontCached;
|
||||
- break;
|
||||
+ aFontName = mButtonFontName;
|
||||
+ aFontStyle = mButtonFontStyle;
|
||||
+ return true;
|
||||
|
||||
case eFont_Caption: // css2
|
||||
case eFont_Icon: // css2
|
||||
@@ -1057,21 +787,11 @@ nsLookAndFeel::GetFontImpl(FontID aID, nsString& aFontName,
|
||||
case eFont_Dialog: // css3
|
||||
case eFont_Tooltips: // moz
|
||||
case eFont_Widget: // moz
|
||||
- cachedFontName = &mDefaultFontName;
|
||||
- cachedFontStyle = &mDefaultFontStyle;
|
||||
- isCached = &mDefaultFontCached;
|
||||
- aID = eFont_Widget;
|
||||
- break;
|
||||
- }
|
||||
-
|
||||
- if (!*isCached) {
|
||||
- GetSystemFontInfo(aID, cachedFontName, cachedFontStyle);
|
||||
- *isCached = true;
|
||||
+ default:
|
||||
+ aFontName = mDefaultFontName;
|
||||
+ aFontStyle = mDefaultFontStyle;
|
||||
+ return true;
|
||||
}
|
||||
-
|
||||
- aFontName = *cachedFontName;
|
||||
- aFontStyle = *cachedFontStyle;
|
||||
- return true;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -1087,70 +807,6 @@ nsLookAndFeel::EnsureInit()
|
||||
// gtk does non threadsafe refcounting
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- NS_ASSERTION(!mStyle, "already initialized");
|
||||
- // GtkInvisibles come with a refcount that is not floating
|
||||
- // (since their initialization code calls g_object_ref_sink) and
|
||||
- // their destroy code releases that reference (which means they
|
||||
- // have to be explicitly destroyed, since calling unref enough
|
||||
- // to cause destruction would lead to *another* unref).
|
||||
- // However, this combination means that it's actually still ok
|
||||
- // to use the normal pattern, which is to g_object_ref_sink
|
||||
- // after construction, and then destroy *and* unref when we're
|
||||
- // done. (Though we could skip the g_object_ref_sink and the
|
||||
- // corresponding g_object_unref, but that's particular to
|
||||
- // GtkInvisibles and GtkWindows.)
|
||||
- GtkWidget *widget = gtk_invisible_new();
|
||||
- g_object_ref_sink(widget); // effectively g_object_ref (see above)
|
||||
-
|
||||
- gtk_widget_ensure_style(widget);
|
||||
- mStyle = gtk_style_copy(gtk_widget_get_style(widget));
|
||||
-
|
||||
- gtk_widget_destroy(widget);
|
||||
- g_object_unref(widget);
|
||||
-
|
||||
- // tooltip foreground and background
|
||||
- GtkStyle *style = gtk_rc_get_style_by_paths(gtk_settings_get_default(),
|
||||
- "gtk-tooltips", "GtkWindow",
|
||||
- GTK_TYPE_WINDOW);
|
||||
- if (style) {
|
||||
- sInfoBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
|
||||
- sInfoText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-
|
||||
- // menu foreground & menu background
|
||||
- GtkWidget *accel_label = gtk_accel_label_new("M");
|
||||
- GtkWidget *menuitem = gtk_menu_item_new();
|
||||
- GtkWidget *menu = gtk_menu_new();
|
||||
-
|
||||
- g_object_ref_sink(menu);
|
||||
-
|
||||
- gtk_container_add(GTK_CONTAINER(menuitem), accel_label);
|
||||
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
|
||||
-
|
||||
- gtk_widget_set_style(accel_label, nullptr);
|
||||
- gtk_widget_set_style(menu, nullptr);
|
||||
- gtk_widget_realize(menu);
|
||||
- gtk_widget_realize(accel_label);
|
||||
-
|
||||
- style = gtk_widget_get_style(accel_label);
|
||||
- if (style) {
|
||||
- sMenuText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-
|
||||
- style = gtk_widget_get_style(menu);
|
||||
- if (style) {
|
||||
- sMenuBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-
|
||||
- style = gtk_widget_get_style(menuitem);
|
||||
- if (style) {
|
||||
- sMenuHover = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_PRELIGHT]);
|
||||
- sMenuHoverText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_PRELIGHT]);
|
||||
- }
|
||||
-
|
||||
- g_object_unref(menu);
|
||||
-#else
|
||||
GdkRGBA color;
|
||||
GtkStyleContext *style;
|
||||
|
||||
@@ -1195,6 +851,12 @@ nsLookAndFeel::EnsureInit()
|
||||
}
|
||||
}
|
||||
|
||||
+ // The label is not added to a parent widget, but shared for constructing
|
||||
+ // different style contexts. The node hierarchy is constructed only on
|
||||
+ // the label style context.
|
||||
+ GtkWidget *labelWidget = gtk_label_new("M");
|
||||
+ g_object_ref_sink(labelWidget);
|
||||
+
|
||||
// Scrollbar colors
|
||||
style = ClaimStyleContext(MOZ_GTK_SCROLLBAR_TROUGH_VERTICAL);
|
||||
gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &color);
|
||||
@@ -1208,6 +870,13 @@ nsLookAndFeel::EnsureInit()
|
||||
gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
|
||||
sMozWindowText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
ReleaseStyleContext(style);
|
||||
+ style = ClaimStyleContext(MOZ_GTK_WINDOW_CONTAINER);
|
||||
+ {
|
||||
+ GtkStyleContext* labelStyle = CreateStyleForWidget(labelWidget, style);
|
||||
+ GetSystemFontInfo(labelStyle, &mDefaultFontName, &mDefaultFontStyle);
|
||||
+ g_object_unref(labelStyle);
|
||||
+ }
|
||||
+ ReleaseStyleContext(style);
|
||||
|
||||
// tooltip foreground and background
|
||||
style = ClaimStyleContext(MOZ_GTK_TOOLTIP);
|
||||
@@ -1224,6 +893,9 @@ nsLookAndFeel::EnsureInit()
|
||||
{
|
||||
GtkStyleContext* accelStyle =
|
||||
CreateStyleForWidget(gtk_accel_label_new("M"), style);
|
||||
+
|
||||
+ GetSystemFontInfo(accelStyle, &mMenuFontName, &mMenuFontStyle);
|
||||
+
|
||||
gtk_style_context_get_color(accelStyle, GTK_STATE_FLAG_NORMAL, &color);
|
||||
sMenuText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
gtk_style_context_get_color(accelStyle, GTK_STATE_FLAG_INSENSITIVE, &color);
|
||||
@@ -1243,17 +915,8 @@ nsLookAndFeel::EnsureInit()
|
||||
gtk_style_context_get_color(style, GTK_STATE_FLAG_PRELIGHT, &color);
|
||||
sMenuHoverText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
ReleaseStyleContext(style);
|
||||
-#endif
|
||||
|
||||
- // button styles
|
||||
GtkWidget *parent = gtk_fixed_new();
|
||||
- GtkWidget *button = gtk_button_new();
|
||||
- GtkWidget *label = gtk_label_new("M");
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- GtkWidget *combobox = gtk_combo_box_new();
|
||||
- GtkWidget *comboboxLabel = gtk_label_new("M");
|
||||
- gtk_container_add(GTK_CONTAINER(combobox), comboboxLabel);
|
||||
-#endif
|
||||
GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
|
||||
GtkWidget *treeView = gtk_tree_view_new();
|
||||
GtkWidget *linkButton = gtk_link_button_new("http://example.com/");
|
||||
@@ -1262,94 +925,14 @@ nsLookAndFeel::EnsureInit()
|
||||
GtkWidget *entry = gtk_entry_new();
|
||||
GtkWidget *textView = gtk_text_view_new();
|
||||
|
||||
- gtk_container_add(GTK_CONTAINER(button), label);
|
||||
- gtk_container_add(GTK_CONTAINER(parent), button);
|
||||
gtk_container_add(GTK_CONTAINER(parent), treeView);
|
||||
gtk_container_add(GTK_CONTAINER(parent), linkButton);
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- gtk_container_add(GTK_CONTAINER(parent), combobox);
|
||||
-#endif
|
||||
gtk_container_add(GTK_CONTAINER(parent), menuBar);
|
||||
gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), menuBarItem);
|
||||
gtk_container_add(GTK_CONTAINER(window), parent);
|
||||
gtk_container_add(GTK_CONTAINER(parent), entry);
|
||||
gtk_container_add(GTK_CONTAINER(parent), textView);
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- gtk_widget_set_style(button, nullptr);
|
||||
- gtk_widget_set_style(label, nullptr);
|
||||
- gtk_widget_set_style(treeView, nullptr);
|
||||
- gtk_widget_set_style(linkButton, nullptr);
|
||||
- gtk_widget_set_style(combobox, nullptr);
|
||||
- gtk_widget_set_style(comboboxLabel, nullptr);
|
||||
- gtk_widget_set_style(menuBar, nullptr);
|
||||
- gtk_widget_set_style(entry, nullptr);
|
||||
-
|
||||
- gtk_widget_realize(button);
|
||||
- gtk_widget_realize(label);
|
||||
- gtk_widget_realize(treeView);
|
||||
- gtk_widget_realize(linkButton);
|
||||
- gtk_widget_realize(combobox);
|
||||
- gtk_widget_realize(comboboxLabel);
|
||||
- gtk_widget_realize(menuBar);
|
||||
- gtk_widget_realize(entry);
|
||||
-
|
||||
- style = gtk_widget_get_style(label);
|
||||
- if (style) {
|
||||
- sButtonText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-
|
||||
- style = gtk_widget_get_style(comboboxLabel);
|
||||
- if (style) {
|
||||
- sComboBoxText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
- style = gtk_widget_get_style(combobox);
|
||||
- if (style) {
|
||||
- sComboBoxBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-
|
||||
- style = gtk_widget_get_style(menuBar);
|
||||
- if (style) {
|
||||
- sMenuBarText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_NORMAL]);
|
||||
- sMenuBarHoverText = GDK_COLOR_TO_NS_RGB(style->fg[GTK_STATE_SELECTED]);
|
||||
- }
|
||||
-
|
||||
- // GTK's guide to fancy odd row background colors:
|
||||
- // 1) Check if a theme explicitly defines an odd row color
|
||||
- // 2) If not, check if it defines an even row color, and darken it
|
||||
- // slightly by a hardcoded value (gtkstyle.c)
|
||||
- // 3) If neither are defined, take the base background color and
|
||||
- // darken that by a hardcoded value
|
||||
- colorValuePtr = nullptr;
|
||||
- gtk_widget_style_get(treeView,
|
||||
- "odd-row-color", &colorValuePtr,
|
||||
- nullptr);
|
||||
-
|
||||
- if (colorValuePtr) {
|
||||
- colorValue = *colorValuePtr;
|
||||
- } else {
|
||||
- gtk_widget_style_get(treeView,
|
||||
- "even-row-color", &colorValuePtr,
|
||||
- nullptr);
|
||||
- if (colorValuePtr)
|
||||
- darken_gdk_color(colorValuePtr, &colorValue);
|
||||
- else
|
||||
- darken_gdk_color(&treeView->style->base[GTK_STATE_NORMAL], &colorValue);
|
||||
- }
|
||||
-
|
||||
- sOddCellBackground = GDK_COLOR_TO_NS_RGB(colorValue);
|
||||
- if (colorValuePtr)
|
||||
- gdk_color_free(colorValuePtr);
|
||||
-
|
||||
- style = gtk_widget_get_style(button);
|
||||
- if (style) {
|
||||
- sButtonBackground = GDK_COLOR_TO_NS_RGB(style->bg[GTK_STATE_NORMAL]);
|
||||
- sFrameOuterLightBorder =
|
||||
- GDK_COLOR_TO_NS_RGB(style->light[GTK_STATE_NORMAL]);
|
||||
- sFrameInnerDarkBorder =
|
||||
- GDK_COLOR_TO_NS_RGB(style->dark[GTK_STATE_NORMAL]);
|
||||
- }
|
||||
-#else
|
||||
// Text colors
|
||||
GdkRGBA bgColor;
|
||||
// If the text window background is translucent, then the background of
|
||||
@@ -1381,8 +964,10 @@ nsLookAndFeel::EnsureInit()
|
||||
// Button text color
|
||||
style = ClaimStyleContext(MOZ_GTK_BUTTON);
|
||||
{
|
||||
- GtkStyleContext* labelStyle =
|
||||
- CreateStyleForWidget(gtk_label_new("M"), style);
|
||||
+ GtkStyleContext* labelStyle = CreateStyleForWidget(labelWidget, style);
|
||||
+
|
||||
+ GetSystemFontInfo(labelStyle, &mButtonFontName, &mButtonFontStyle);
|
||||
+
|
||||
gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_NORMAL, &color);
|
||||
sButtonText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
gtk_style_context_get_color(labelStyle, GTK_STATE_FLAG_PRELIGHT, &color);
|
||||
@@ -1446,7 +1031,6 @@ nsLookAndFeel::EnsureInit()
|
||||
gtk_style_context_add_class(style, GTK_STYLE_CLASS_INFO);
|
||||
gtk_style_context_get_color(style, GTK_STATE_FLAG_NORMAL, &color);
|
||||
sInfoBarText = GDK_RGBA_TO_NS_RGBA(color);
|
||||
-#endif
|
||||
// Some themes have a unified menu bar, and support window dragging on it
|
||||
gboolean supports_menubar_drag = FALSE;
|
||||
GParamSpec *param_spec =
|
||||
@@ -1493,7 +1074,11 @@ nsLookAndFeel::EnsureInit()
|
||||
"cursor-aspect-ratio", &sCaretRatio,
|
||||
nullptr);
|
||||
|
||||
+ GetSystemFontInfo(gtk_widget_get_style_context(entry),
|
||||
+ &mFieldFontName, &mFieldFontStyle);
|
||||
+
|
||||
gtk_widget_destroy(window);
|
||||
+ g_object_unref(labelWidget);
|
||||
}
|
||||
|
||||
// virtual
|
||||
@@ -1515,11 +1100,6 @@ nsLookAndFeel::RefreshImpl()
|
||||
mFieldFontCached = false;
|
||||
mMenuFontCached = false;
|
||||
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- g_object_unref(mStyle);
|
||||
- mStyle = nullptr;
|
||||
-#endif
|
||||
-
|
||||
mInitialized = false;
|
||||
}
|
||||
|
||||
diff --git widget/gtk/nsLookAndFeel.h widget/gtk/nsLookAndFeel.h
|
||||
index 9a4015e95415..38cd51c056d6 100644
|
||||
--- widget/gtk/nsLookAndFeel.h
|
||||
+++ widget/gtk/nsLookAndFeel.h
|
||||
@@ -33,9 +33,6 @@ public:
|
||||
virtual bool GetEchoPasswordImpl();
|
||||
|
||||
protected:
|
||||
-#if (MOZ_WIDGET_GTK == 2)
|
||||
- struct _GtkStyle *mStyle;
|
||||
-#endif
|
||||
|
||||
// Cached fonts
|
||||
bool mDefaultFontCached;
|
||||
@@ -63,7 +60,6 @@ protected:
|
||||
nscolor sMenuHoverText;
|
||||
nscolor sButtonText;
|
||||
nscolor sButtonHoverText;
|
||||
- nscolor sButtonBackground;
|
||||
nscolor sFrameOuterLightBorder;
|
||||
nscolor sFrameInnerDarkBorder;
|
||||
nscolor sOddCellBackground;
|
||||
@@ -77,9 +73,7 @@ protected:
|
||||
nscolor sTextSelectedText;
|
||||
nscolor sTextSelectedBackground;
|
||||
nscolor sMozScrollbar;
|
||||
-#if (MOZ_WIDGET_GTK == 3)
|
||||
nscolor sInfoBarText;
|
||||
-#endif
|
||||
char16_t sInvisibleCharacter;
|
||||
float sCaretRatio;
|
||||
bool sMenuSupportsDrag;
|
@ -1,89 +0,0 @@
|
||||
commit efbe3a9af876
|
||||
Author: Manish Goregaokar <manishearth@gmail.com>
|
||||
Date: Wed Aug 2 11:24:35 2017 -0700
|
||||
|
||||
Bug 1386887 - Clean up FFI lifetimes to work on nightly; r=emilio
|
||||
|
||||
MozReview-Commit-ID: 5WAIVd6p2du
|
||||
---
|
||||
layout/style/ServoBindingList.h | 4 ++--
|
||||
layout/style/ServoBindingTypes.h | 2 ++
|
||||
layout/style/ServoBindings.h | 4 ++--
|
||||
layout/style/ServoBindings.toml | 4 +++-
|
||||
4 files changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git layout/style/ServoBindingList.h layout/style/ServoBindingList.h
|
||||
index 6c669ebb3d3e..87ade14ea4de 100644
|
||||
--- layout/style/ServoBindingList.h
|
||||
+++ layout/style/ServoBindingList.h
|
||||
@@ -379,10 +379,10 @@ SERVO_BINDING_FUNC(Servo_DeclarationBlock_HasCSSWideKeyword, bool,
|
||||
nsCSSPropertyID property)
|
||||
// Compose animation value for a given property.
|
||||
// |base_values| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
|
||||
-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
|
||||
+// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
|
||||
SERVO_BINDING_FUNC(Servo_AnimationCompose, void,
|
||||
RawServoAnimationValueMapBorrowedMut animation_values,
|
||||
- void* base_values,
|
||||
+ RawServoAnimationValueTableBorrowed base_values,
|
||||
nsCSSPropertyID property,
|
||||
RawGeckoAnimationPropertySegmentBorrowed animation_segment,
|
||||
RawGeckoAnimationPropertySegmentBorrowed last_segment,
|
||||
diff --git layout/style/ServoBindingTypes.h layout/style/ServoBindingTypes.h
|
||||
index aaf4fc27e1b9..69be15ee9f51 100644
|
||||
--- layout/style/ServoBindingTypes.h
|
||||
+++ layout/style/ServoBindingTypes.h
|
||||
@@ -54,6 +54,8 @@ class nsXBLBinding;
|
||||
using mozilla::dom::StyleChildrenIterator;
|
||||
using mozilla::ServoElementSnapshot;
|
||||
|
||||
+typedef void* RawServoAnimationValueTableBorrowed;
|
||||
+
|
||||
typedef nsINode RawGeckoNode;
|
||||
typedef mozilla::dom::Element RawGeckoElement;
|
||||
typedef nsIDocument RawGeckoDocument;
|
||||
diff --git layout/style/ServoBindings.h layout/style/ServoBindings.h
|
||||
index 493ca63f932b..c6ced6d1fedb 100644
|
||||
--- layout/style/ServoBindings.h
|
||||
+++ layout/style/ServoBindings.h
|
||||
@@ -268,9 +268,9 @@ double Gecko_GetPositionInSegment(
|
||||
// Get servo's AnimationValue for |aProperty| from the cached base style
|
||||
// |aBaseStyles|.
|
||||
// |aBaseStyles| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
|
||||
-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
|
||||
+// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
|
||||
RawServoAnimationValueBorrowedOrNull Gecko_AnimationGetBaseStyle(
|
||||
- void* aBaseStyles,
|
||||
+ RawServoAnimationValueTableBorrowed aBaseStyles,
|
||||
nsCSSPropertyID aProperty);
|
||||
void Gecko_StyleTransition_SetUnsupportedProperty(
|
||||
mozilla::StyleTransition* aTransition,
|
||||
diff --git layout/style/ServoBindings.toml layout/style/ServoBindings.toml
|
||||
index 11e372541235..3c3902beea80 100644
|
||||
--- layout/style/ServoBindings.toml
|
||||
+++ layout/style/ServoBindings.toml
|
||||
@@ -357,6 +357,7 @@ raw-lines = [
|
||||
"pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;",
|
||||
"pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;",
|
||||
"pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;",
|
||||
+ "pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();"
|
||||
]
|
||||
whitelist-functions = ["Servo_.*", "Gecko_.*"]
|
||||
structs-types = [
|
||||
@@ -389,7 +390,7 @@ structs-types = [
|
||||
"RawGeckoPresContext",
|
||||
"RawGeckoPresContextOwned",
|
||||
"RawGeckoStyleAnimationList",
|
||||
- "RawGeckoStyleChildrenIteratorBorrowedMut",
|
||||
+ "RawGeckoStyleChildrenIterator",
|
||||
"RawGeckoServoStyleRuleList",
|
||||
"RawGeckoURLExtraData",
|
||||
"RawGeckoXBLBinding",
|
||||
@@ -526,6 +527,7 @@ servo-borrow-types = [
|
||||
"RawGeckoFontFaceRuleList",
|
||||
"RawGeckoServoStyleRuleList",
|
||||
"RawGeckoServoAnimationValueList",
|
||||
+ "RawGeckoStyleChildrenIterator",
|
||||
]
|
||||
fixups = [
|
||||
# hack for gecko-owned string
|
@ -1,14 +0,0 @@
|
||||
https://github.com/kinetiknz/cubeb/commit/16f9ccc064f2
|
||||
|
||||
--- media/libcubeb/src/cubeb_jack.cpp.orig 2017-07-07 05:37:16 UTC
|
||||
+++ media/libcubeb/src/cubeb_jack.cpp
|
||||
@@ -8,7 +8,9 @@
|
||||
*/
|
||||
#define _DEFAULT_SOURCE
|
||||
#define _BSD_SOURCE
|
||||
+#ifndef __FreeBSD__
|
||||
#define _POSIX_SOURCE
|
||||
+#endif
|
||||
#include <dlfcn.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
@ -1,49 +0,0 @@
|
||||
commit e1c252eab1f4
|
||||
Author: Milan Sreckovic <milan@mozilla.com>
|
||||
Date: Mon Oct 23 16:22:47 2017 -0400
|
||||
|
||||
Bug 1387799 - Keep an extra reference. r=jrmuizel, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 8199078921c6b4c0ee4c984100d33750dfe8e144
|
||||
---
|
||||
gfx/layers/ipc/CompositorBridgeChild.cpp | 11 ++++++++---
|
||||
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git gfx/layers/ipc/CompositorBridgeChild.cpp gfx/layers/ipc/CompositorBridgeChild.cpp
|
||||
index 9419f4b2da36..55fd9c10871b 100644
|
||||
--- gfx/layers/ipc/CompositorBridgeChild.cpp
|
||||
+++ gfx/layers/ipc/CompositorBridgeChild.cpp
|
||||
@@ -523,10 +523,14 @@ CompositorBridgeChild::RecvHideAllPlugins(const uintptr_t& aParentWidget)
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult
|
||||
-CompositorBridgeChild::RecvDidComposite(const uint64_t& aId, const uint64_t& aTransactionId,
|
||||
+CompositorBridgeChild::RecvDidComposite(const uint64_t& aId,
|
||||
+ const uint64_t& aTransactionId,
|
||||
const TimeStamp& aCompositeStart,
|
||||
const TimeStamp& aCompositeEnd)
|
||||
{
|
||||
+ // Hold a reference to keep texture pools alive. See bug 1387799
|
||||
+ AutoTArray<RefPtr<TextureClientPool>,2> texturePools = mTexturePools;
|
||||
+
|
||||
if (mLayerManager) {
|
||||
MOZ_ASSERT(aId == 0);
|
||||
MOZ_ASSERT(mLayerManager->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
|
||||
@@ -541,13 +545,14 @@ CompositorBridgeChild::RecvDidComposite(const uint64_t& aId, const uint64_t& aTr
|
||||
}
|
||||
}
|
||||
|
||||
- for (size_t i = 0; i < mTexturePools.Length(); i++) {
|
||||
- mTexturePools[i]->ReturnDeferredClients();
|
||||
+ for (size_t i = 0; i < texturePools.Length(); i++) {
|
||||
+ texturePools[i]->ReturnDeferredClients();
|
||||
}
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
+
|
||||
void
|
||||
CompositorBridgeChild::ActorDestroy(ActorDestroyReason aWhy)
|
||||
{
|
@ -1,42 +0,0 @@
|
||||
commit a1341ccf6d63
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Sun Aug 6 11:37:09 2017 +0200
|
||||
|
||||
Bug 1387811 - Follow up for Test within Bug 1381761: CSP JSON is never null, hence it's better to check actual contents of JSON for testing. r=dveditz
|
||||
---
|
||||
dom/security/test/csp/file_data_csp_inheritance.html | 6 ++++--
|
||||
dom/security/test/csp/test_data_csp_inheritance.html | 4 +++-
|
||||
2 files changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git dom/security/test/csp/file_data_csp_inheritance.html dom/security/test/csp/file_data_csp_inheritance.html
|
||||
index 299c30255aa6..cbb4865343db 100644
|
||||
--- dom/security/test/csp/file_data_csp_inheritance.html
|
||||
+++ dom/security/test/csp/file_data_csp_inheritance.html
|
||||
@@ -13,8 +13,10 @@
|
||||
var frame = document.getElementById("dataFrame");
|
||||
var principal = SpecialPowers.wrap(frame.contentDocument).nodePrincipal;
|
||||
var cspJSON = principal.cspJSON;
|
||||
- var result = principal.cspJSON ? "dataInheritsCSP" : "dataDoesNotInheritCSP";
|
||||
- window.parent.postMessage({result}, "*");
|
||||
+ var cspOBJ = JSON.parse(principal.cspJSON);
|
||||
+ // make sure we got >>one<< policy
|
||||
+ var policies = cspOBJ["csp-policies"];
|
||||
+ window.parent.postMessage({result: policies.length}, "*");
|
||||
</script>
|
||||
|
||||
</body>
|
||||
diff --git dom/security/test/csp/test_data_csp_inheritance.html dom/security/test/csp/test_data_csp_inheritance.html
|
||||
index 3afc4f7c02bc..bde2f5617e65 100644
|
||||
--- dom/security/test/csp/test_data_csp_inheritance.html
|
||||
+++ dom/security/test/csp/test_data_csp_inheritance.html
|
||||
@@ -22,7 +22,9 @@ SimpleTest.waitForExplicitFinish();
|
||||
window.addEventListener("message", receiveMessage);
|
||||
function receiveMessage(event) {
|
||||
window.removeEventListener("message", receiveMessage);
|
||||
- is(event.data.result, "dataInheritsCSP",
|
||||
+ // toplevel CSP should apply to data: URI iframe hence resulting
|
||||
+ // in 1 applied policy.
|
||||
+ is(event.data.result, 1,
|
||||
"data: URI iframe inherits CSP from including context");
|
||||
SimpleTest.finish();
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
commit 8687f49efa88
|
||||
Author: sotaro <sotaro.ikeda.g@gmail.com>
|
||||
Date: Wed Aug 23 13:49:29 2017 +0900
|
||||
|
||||
Bug 1387845 - Add more NS_BUILD_REFCNT_LOGGING in AtomicRefCountedWithFinalize r=nical
|
||||
---
|
||||
gfx/layers/AtomicRefCountedWithFinalize.h | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git gfx/layers/AtomicRefCountedWithFinalize.h gfx/layers/AtomicRefCountedWithFinalize.h
|
||||
index 37f0a9f592a1..9941ccb13f2d 100644
|
||||
--- gfx/layers/AtomicRefCountedWithFinalize.h
|
||||
+++ gfx/layers/AtomicRefCountedWithFinalize.h
|
||||
@@ -101,8 +101,12 @@ public:
|
||||
private:
|
||||
void AddRef() {
|
||||
MOZ_ASSERT(mRefCount >= 0, "AddRef() during/after Finalize()/dtor.");
|
||||
- mRefCount++;
|
||||
- NS_LOG_ADDREF(this, mRefCount, mName, sizeof(*this));
|
||||
+#ifdef NS_BUILD_REFCNT_LOGGING
|
||||
+ int currCount = ++mRefCount;
|
||||
+ NS_LOG_ADDREF(this, currCount, mName, sizeof(*this));
|
||||
+#else
|
||||
+ ++mRefCount;
|
||||
+#endif
|
||||
}
|
||||
|
||||
void Release() {
|
||||
@@ -118,7 +122,9 @@ private:
|
||||
++mRefCount;
|
||||
return;
|
||||
}
|
||||
+#ifdef NS_BUILD_REFCNT_LOGGING
|
||||
NS_LOG_RELEASE(this, currCount, mName);
|
||||
+#endif
|
||||
|
||||
if (0 == currCount) {
|
||||
mRefCount = detail::DEAD;
|
@ -1,144 +0,0 @@
|
||||
commit d20c7d929c84
|
||||
Author: Ethan <ettseng@mozilla.com>
|
||||
Date: Fri Sep 1 17:29:44 2017 +0800
|
||||
|
||||
Bug 1393283 - Use the last ESR version as the spoofed Firefox version. r=tihuang, r=mcmanus
|
||||
---
|
||||
.../test/browser/browser_navigator.js | 2 +-
|
||||
netwerk/protocol/http/nsHttpHandler.cpp | 16 +++----
|
||||
.../resistfingerprinting/nsRFPService.cpp | 56 ++++++++++++++++++++++
|
||||
.../components/resistfingerprinting/nsRFPService.h | 3 ++
|
||||
4 files changed, 66 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git browser/components/resistfingerprinting/test/browser/browser_navigator.js browser/components/resistfingerprinting/test/browser/browser_navigator.js
|
||||
index 25c393d8bb2a..9f52e34a9451 100644
|
||||
--- browser/components/resistfingerprinting/test/browser/browser_navigator.js
|
||||
+++ browser/components/resistfingerprinting/test/browser/browser_navigator.js
|
||||
@@ -91,7 +91,7 @@ add_task(async function setup() {
|
||||
|
||||
let appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo);
|
||||
let appVersion = parseInt(appInfo.version);
|
||||
- let spoofedVersion = appVersion - (appVersion % 10);
|
||||
+ let spoofedVersion = appVersion - ((appVersion - 3) % 7);
|
||||
spoofedUserAgent = `Mozilla/5.0 (${SPOOFED_OSCPU}; rv:${spoofedVersion}.0) Gecko/20100101 Firefox/${spoofedVersion}.0`;
|
||||
});
|
||||
|
||||
diff --git netwerk/protocol/http/nsHttpHandler.cpp netwerk/protocol/http/nsHttpHandler.cpp
|
||||
index 31d0f8832732..b957d835b52f 100644
|
||||
--- netwerk/protocol/http/nsHttpHandler.cpp
|
||||
+++ netwerk/protocol/http/nsHttpHandler.cpp
|
||||
@@ -461,16 +461,12 @@ nsHttpHandler::Init()
|
||||
mAppVersion.AssignLiteral(MOZ_APP_UA_VERSION);
|
||||
}
|
||||
|
||||
- // Generating the spoofed userAgent for fingerprinting resistance.
|
||||
- // The browser version will be rounded down to a multiple of 10.
|
||||
- // By doing so, the anonymity group will cover more versions instead of one
|
||||
- // version.
|
||||
- uint32_t spoofedVersion = mAppVersion.ToInteger(&rv);
|
||||
- if (NS_SUCCEEDED(rv)) {
|
||||
- spoofedVersion = spoofedVersion - (spoofedVersion % 10);
|
||||
- mSpoofedUserAgent.Assign(nsPrintfCString(
|
||||
- "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
|
||||
- SPOOFED_OSCPU, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
|
||||
+ // Generating the spoofed User Agent for fingerprinting resistance.
|
||||
+ rv = nsRFPService::GetSpoofedUserAgent(mSpoofedUserAgent);
|
||||
+ if (NS_FAILED(rv)) {
|
||||
+ // Empty mSpoofedUserAgent to make sure the unsuccessful spoofed UA string
|
||||
+ // will not be used anywhere.
|
||||
+ mSpoofedUserAgent.Truncate();
|
||||
}
|
||||
|
||||
mSessionStartTime = NowInSeconds();
|
||||
diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
index 94554200c3b8..96a2940c04a0 100644
|
||||
--- toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
+++ toolkit/components/resistfingerprinting/nsRFPService.cpp
|
||||
@@ -18,10 +18,13 @@
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "nsString.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
+#include "nsPrintfCString.h"
|
||||
|
||||
#include "nsIObserverService.h"
|
||||
#include "nsIPrefBranch.h"
|
||||
#include "nsIPrefService.h"
|
||||
+#include "nsIXULAppInfo.h"
|
||||
+#include "nsIXULRuntime.h"
|
||||
#include "nsJSUtils.h"
|
||||
|
||||
#include "prenv.h"
|
||||
@@ -162,6 +165,59 @@ nsRFPService::GetSpoofedPresentedFrames(double aTime, uint32_t aWidth, uint32_t
|
||||
return NSToIntFloor(time * sVideoFramesPerSec * ((100 - boundedDroppedRatio) / 100.0));
|
||||
}
|
||||
|
||||
+/* static */
|
||||
+nsresult
|
||||
+nsRFPService::GetSpoofedUserAgent(nsACString &userAgent)
|
||||
+{
|
||||
+ // This function generates the spoofed value of User Agent.
|
||||
+ // We spoof the values of the platform and Firefox version, which could be
|
||||
+ // used as fingerprinting sources to identify individuals.
|
||||
+ // Reference of the format of User Agent:
|
||||
+ // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorID/userAgent
|
||||
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent
|
||||
+
|
||||
+ nsresult rv;
|
||||
+ nsCOMPtr<nsIXULAppInfo> appInfo =
|
||||
+ do_GetService("@mozilla.org/xre/app-info;1", &rv);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ nsAutoCString appVersion;
|
||||
+ rv = appInfo->GetVersion(appVersion);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ // The browser version will be spoofed as the last ESR version.
|
||||
+ // By doing so, the anonymity group will cover more versions instead of one
|
||||
+ // version.
|
||||
+ uint32_t firefoxVersion = appVersion.ToInteger(&rv);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ // Starting from Firefox 10, Firefox ESR was released once every seven
|
||||
+ // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on.
|
||||
+ // We infer the last and closest ESR version based on this rule.
|
||||
+ nsCOMPtr<nsIXULRuntime> runtime =
|
||||
+ do_GetService("@mozilla.org/xre/runtime;1", &rv);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ nsAutoCString updateChannel;
|
||||
+ rv = runtime->GetDefaultUpdateChannel(updateChannel);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
+
|
||||
+ // If we are running in Firefox ESR, determine whether the formula of ESR
|
||||
+ // version has changed. Once changed, we must update the formula in this
|
||||
+ // function.
|
||||
+ if (updateChannel.Equals("esr")) {
|
||||
+ MOZ_ASSERT(((firefoxVersion % 7) == 3),
|
||||
+ "Please udpate ESR version formula in nsRFPService.cpp");
|
||||
+ }
|
||||
+
|
||||
+ uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7);
|
||||
+ userAgent.Assign(nsPrintfCString(
|
||||
+ "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0",
|
||||
+ SPOOFED_OSCPU, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion));
|
||||
+
|
||||
+ return rv;
|
||||
+}
|
||||
+
|
||||
nsresult
|
||||
nsRFPService::Init()
|
||||
{
|
||||
diff --git toolkit/components/resistfingerprinting/nsRFPService.h toolkit/components/resistfingerprinting/nsRFPService.h
|
||||
index cf1f688bb992..bad80383883b 100644
|
||||
--- toolkit/components/resistfingerprinting/nsRFPService.h
|
||||
+++ toolkit/components/resistfingerprinting/nsRFPService.h
|
||||
@@ -49,6 +49,9 @@ public:
|
||||
static uint32_t GetSpoofedDroppedFrames(double aTime, uint32_t aWidth, uint32_t aHeight);
|
||||
static uint32_t GetSpoofedPresentedFrames(double aTime, uint32_t aWidth, uint32_t aHeight);
|
||||
|
||||
+ // This method generates the spoofed value of User Agent.
|
||||
+ static nsresult GetSpoofedUserAgent(nsACString &userAgent);
|
||||
+
|
||||
private:
|
||||
nsresult Init();
|
||||
|
@ -1,387 +0,0 @@
|
||||
commit e70d76485c22
|
||||
Author: Thomas Nguyen <tnguyen@mozilla.com>
|
||||
Date: Tue Sep 5 17:14:54 2017 +0800
|
||||
|
||||
Bug 1394031 - Remove mCryptoHash members of nsUrlClassifierDBServiceWorker and ProtocolParser
|
||||
|
||||
The usage of cryptoHash consists of a complete set of Init, Update, and Finish, there's
|
||||
no reason to keep it around
|
||||
|
||||
MozReview-Commit-ID: 7bT9IsWEM5m
|
||||
---
|
||||
toolkit/components/url-classifier/Classifier.cpp | 5 +---
|
||||
toolkit/components/url-classifier/Classifier.h | 2 --
|
||||
toolkit/components/url-classifier/Entries.h | 12 ++++++----
|
||||
.../components/url-classifier/ProtocolParser.cpp | 15 ++++--------
|
||||
toolkit/components/url-classifier/ProtocolParser.h | 4 ----
|
||||
.../url-classifier/nsUrlClassifierDBService.cpp | 8 -------
|
||||
.../url-classifier/nsUrlClassifierDBService.h | 3 ---
|
||||
.../url-classifier/tests/gtest/Common.cpp | 3 +--
|
||||
.../url-classifier/tests/gtest/TestCaching.cpp | 28 ++++++++--------------
|
||||
.../url-classifier/tests/gtest/TestClassifier.cpp | 3 +--
|
||||
.../tests/gtest/TestLookupCacheV4.cpp | 3 +--
|
||||
.../tests/unit/head_urlclassifier.js | 3 +++
|
||||
12 files changed, 29 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git toolkit/components/url-classifier/Classifier.cpp toolkit/components/url-classifier/Classifier.cpp
|
||||
index 68169925d2d0..404e31e2421e 100644
|
||||
--- toolkit/components/url-classifier/Classifier.cpp
|
||||
+++ toolkit/components/url-classifier/Classifier.cpp
|
||||
@@ -257,9 +257,6 @@ Classifier::Open(nsIFile& aCacheDirectory)
|
||||
rv = CreateStoreDirectory();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
- mCryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID, &rv);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
-
|
||||
// Build the list of know urlclassifier lists
|
||||
// XXX: Disk IO potentially on the main thread during startup
|
||||
RegenActiveTables();
|
||||
@@ -470,7 +467,7 @@ Classifier::Check(const nsACString& aSpec,
|
||||
// Now check each lookup fragment against the entries in the DB.
|
||||
for (uint32_t i = 0; i < fragments.Length(); i++) {
|
||||
Completion lookupHash;
|
||||
- lookupHash.FromPlaintext(fragments[i], mCryptoHash);
|
||||
+ lookupHash.FromPlaintext(fragments[i]);
|
||||
|
||||
if (LOG_ENABLED()) {
|
||||
nsAutoCString checking;
|
||||
diff --git toolkit/components/url-classifier/Classifier.h toolkit/components/url-classifier/Classifier.h
|
||||
index 83cbcecf5ee8..e8bf890dc95a 100644
|
||||
--- toolkit/components/url-classifier/Classifier.h
|
||||
+++ toolkit/components/url-classifier/Classifier.h
|
||||
@@ -13,7 +13,6 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsIFile.h"
|
||||
-#include "nsICryptoHash.h"
|
||||
#include "nsDataHashtable.h"
|
||||
|
||||
class nsIThread;
|
||||
@@ -207,7 +206,6 @@ private:
|
||||
nsCOMPtr<nsIFile> mBackupDirectory;
|
||||
nsCOMPtr<nsIFile> mUpdatingDirectory; // For update only.
|
||||
nsCOMPtr<nsIFile> mToDeleteDirectory;
|
||||
- nsCOMPtr<nsICryptoHash> mCryptoHash;
|
||||
nsTArray<LookupCache*> mLookupCaches; // For query only.
|
||||
nsTArray<nsCString> mActiveTablesCache;
|
||||
uint32_t mHashKey;
|
||||
diff --git toolkit/components/url-classifier/Entries.h toolkit/components/url-classifier/Entries.h
|
||||
index bb32204db0f3..d664b57f1d27 100644
|
||||
--- toolkit/components/url-classifier/Entries.h
|
||||
+++ toolkit/components/url-classifier/Entries.h
|
||||
@@ -35,21 +35,25 @@ struct SafebrowsingHash
|
||||
typedef SafebrowsingHash<S, Comparator> self_type;
|
||||
uint8_t buf[S];
|
||||
|
||||
- nsresult FromPlaintext(const nsACString& aPlainText, nsICryptoHash* aHash) {
|
||||
+ nsresult FromPlaintext(const nsACString& aPlainText) {
|
||||
// From the protocol doc:
|
||||
// Each entry in the chunk is composed
|
||||
// of the SHA 256 hash of a suffix/prefix expression.
|
||||
+ nsresult rv;
|
||||
+ nsCOMPtr<nsICryptoHash> hash =
|
||||
+ do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID, &rv);
|
||||
+ NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
- nsresult rv = aHash->Init(nsICryptoHash::SHA256);
|
||||
+ rv = hash->Init(nsICryptoHash::SHA256);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
- rv = aHash->Update
|
||||
+ rv = hash->Update
|
||||
(reinterpret_cast<const uint8_t*>(aPlainText.BeginReading()),
|
||||
aPlainText.Length());
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsAutoCString hashed;
|
||||
- rv = aHash->Finish(false, hashed);
|
||||
+ rv = hash->Finish(false, hashed);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
NS_ASSERTION(hashed.Length() >= sHashSize,
|
||||
diff --git toolkit/components/url-classifier/ProtocolParser.cpp toolkit/components/url-classifier/ProtocolParser.cpp
|
||||
index 5f61c7bbcf6b..d4fce581e394 100644
|
||||
--- toolkit/components/url-classifier/ProtocolParser.cpp
|
||||
+++ toolkit/components/url-classifier/ProtocolParser.cpp
|
||||
@@ -80,13 +80,6 @@ ProtocolParser::~ProtocolParser()
|
||||
CleanupUpdates();
|
||||
}
|
||||
|
||||
-nsresult
|
||||
-ProtocolParser::Init(nsICryptoHash* aHasher)
|
||||
-{
|
||||
- mCryptoHash = aHasher;
|
||||
- return NS_OK;
|
||||
-}
|
||||
-
|
||||
void
|
||||
ProtocolParser::CleanupUpdates()
|
||||
{
|
||||
@@ -404,7 +397,7 @@ ProtocolParserV2::ProcessPlaintextChunk(const nsACString& aChunk)
|
||||
if (mChunkState.type == CHUNK_ADD) {
|
||||
if (mChunkState.hashSize == COMPLETE_SIZE) {
|
||||
Completion hash;
|
||||
- hash.FromPlaintext(line, mCryptoHash);
|
||||
+ hash.FromPlaintext(line);
|
||||
nsresult rv = mTableUpdate->NewAddComplete(mChunkState.num, hash);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
@@ -412,7 +405,7 @@ ProtocolParserV2::ProcessPlaintextChunk(const nsACString& aChunk)
|
||||
} else {
|
||||
NS_ASSERTION(mChunkState.hashSize == 4, "Only 32- or 4-byte hashes can be used for add chunks.");
|
||||
Prefix hash;
|
||||
- hash.FromPlaintext(line, mCryptoHash);
|
||||
+ hash.FromPlaintext(line);
|
||||
nsresult rv = mTableUpdate->NewAddPrefix(mChunkState.num, hash);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
@@ -433,7 +426,7 @@ ProtocolParserV2::ProcessPlaintextChunk(const nsACString& aChunk)
|
||||
|
||||
if (mChunkState.hashSize == COMPLETE_SIZE) {
|
||||
Completion hash;
|
||||
- hash.FromPlaintext(Substring(iter, end), mCryptoHash);
|
||||
+ hash.FromPlaintext(Substring(iter, end));
|
||||
nsresult rv = mTableUpdate->NewSubComplete(addChunk, hash, mChunkState.num);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
@@ -441,7 +434,7 @@ ProtocolParserV2::ProcessPlaintextChunk(const nsACString& aChunk)
|
||||
} else {
|
||||
NS_ASSERTION(mChunkState.hashSize == 4, "Only 32- or 4-byte hashes can be used for add chunks.");
|
||||
Prefix hash;
|
||||
- hash.FromPlaintext(Substring(iter, end), mCryptoHash);
|
||||
+ hash.FromPlaintext(Substring(iter, end));
|
||||
nsresult rv = mTableUpdate->NewSubPrefix(addChunk, hash, mChunkState.num);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
diff --git toolkit/components/url-classifier/ProtocolParser.h toolkit/components/url-classifier/ProtocolParser.h
|
||||
index 329911621f18..066e8892df7b 100644
|
||||
--- toolkit/components/url-classifier/ProtocolParser.h
|
||||
+++ toolkit/components/url-classifier/ProtocolParser.h
|
||||
@@ -7,7 +7,6 @@
|
||||
#define ProtocolParser_h__
|
||||
|
||||
#include "HashStore.h"
|
||||
-#include "nsICryptoHMAC.h"
|
||||
#include "safebrowsing.pb.h"
|
||||
|
||||
namespace mozilla {
|
||||
@@ -28,8 +27,6 @@ public:
|
||||
|
||||
nsresult Status() const { return mUpdateStatus; }
|
||||
|
||||
- nsresult Init(nsICryptoHash* aHasher);
|
||||
-
|
||||
#ifdef MOZ_SAFEBROWSING_DUMP_FAILED_UPDATES
|
||||
virtual nsCString GetRawTableUpdates() const { return mPending; }
|
||||
#endif
|
||||
@@ -73,7 +70,6 @@ protected:
|
||||
nsTArray<TableUpdate*> mTableUpdates;
|
||||
|
||||
nsTArray<ForwardedUpdate> mForwards;
|
||||
- nsCOMPtr<nsICryptoHash> mCryptoHash;
|
||||
|
||||
// The table names that were requested from the client.
|
||||
nsTArray<nsCString> mRequestedTables;
|
||||
diff --git toolkit/components/url-classifier/nsUrlClassifierDBService.cpp toolkit/components/url-classifier/nsUrlClassifierDBService.cpp
|
||||
index 6d82c25de7cf..40de1b4130b0 100644
|
||||
--- toolkit/components/url-classifier/nsUrlClassifierDBService.cpp
|
||||
+++ toolkit/components/url-classifier/nsUrlClassifierDBService.cpp
|
||||
@@ -8,8 +8,6 @@
|
||||
#include "nsAppDirectoryServiceDefs.h"
|
||||
#include "nsArrayUtils.h"
|
||||
#include "nsCRT.h"
|
||||
-#include "nsICryptoHash.h"
|
||||
-#include "nsICryptoHMAC.h"
|
||||
#include "nsIDirectoryService.h"
|
||||
#include "nsIKeyModule.h"
|
||||
#include "nsIObserverService.h"
|
||||
@@ -467,8 +465,6 @@ nsUrlClassifierDBServiceWorker::BeginStream(const nsACString &table)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
|
||||
- mProtocolParser->Init(mCryptoHash);
|
||||
-
|
||||
if (!table.IsEmpty()) {
|
||||
mProtocolParser->SetCurrentTable(table);
|
||||
}
|
||||
@@ -809,7 +805,6 @@ nsUrlClassifierDBServiceWorker::CloseDb()
|
||||
mClassifier = nullptr;
|
||||
}
|
||||
|
||||
- mCryptoHash = nullptr;
|
||||
LOG(("urlclassifier db closed\n"));
|
||||
|
||||
return NS_OK;
|
||||
@@ -944,9 +939,6 @@ nsUrlClassifierDBServiceWorker::OpenDb()
|
||||
}
|
||||
|
||||
nsresult rv;
|
||||
- mCryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID, &rv);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
-
|
||||
nsAutoPtr<Classifier> classifier(new (fallible) Classifier());
|
||||
if (!classifier) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
diff --git toolkit/components/url-classifier/nsUrlClassifierDBService.h toolkit/components/url-classifier/nsUrlClassifierDBService.h
|
||||
index 8d284f5b0842..a4c5952e91bb 100644
|
||||
--- toolkit/components/url-classifier/nsUrlClassifierDBService.h
|
||||
+++ toolkit/components/url-classifier/nsUrlClassifierDBService.h
|
||||
@@ -270,9 +270,6 @@ private:
|
||||
|
||||
bool IsSameAsLastResults(CacheResultArray& aResult);
|
||||
|
||||
- // Can only be used on the background thread
|
||||
- nsCOMPtr<nsICryptoHash> mCryptoHash;
|
||||
-
|
||||
nsAutoPtr<mozilla::safebrowsing::Classifier> mClassifier;
|
||||
// The class that actually parses the update chunks.
|
||||
nsAutoPtr<ProtocolParser> mProtocolParser;
|
||||
diff --git toolkit/components/url-classifier/tests/gtest/Common.cpp toolkit/components/url-classifier/tests/gtest/Common.cpp
|
||||
index 2d11cf87ccca..812151f569a4 100644
|
||||
--- toolkit/components/url-classifier/tests/gtest/Common.cpp
|
||||
+++ toolkit/components/url-classifier/tests/gtest/Common.cpp
|
||||
@@ -152,8 +152,7 @@ nsCString
|
||||
GeneratePrefix(const nsCString& aFragment, uint8_t aLength)
|
||||
{
|
||||
Completion complete;
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- complete.FromPlaintext(aFragment, cryptoHash);
|
||||
+ complete.FromPlaintext(aFragment);
|
||||
|
||||
nsCString hash;
|
||||
hash.Assign((const char *)complete.buf, aLength);
|
||||
diff --git toolkit/components/url-classifier/tests/gtest/TestCaching.cpp toolkit/components/url-classifier/tests/gtest/TestCaching.cpp
|
||||
index b280f7c61af6..7a9f5cdbb0e7 100644
|
||||
--- toolkit/components/url-classifier/tests/gtest/TestCaching.cpp
|
||||
+++ toolkit/components/url-classifier/tests/gtest/TestCaching.cpp
|
||||
@@ -18,14 +18,11 @@ SetupCacheEntry(LookupCacheV2* aLookupCache,
|
||||
MissPrefixArray misses;
|
||||
MissPrefixArray emptyMisses;
|
||||
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash =
|
||||
- do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
-
|
||||
AddComplete* add = completes.AppendElement(fallible);
|
||||
- add->complete.FromPlaintext(aCompletion, cryptoHash);
|
||||
+ add->complete.FromPlaintext(aCompletion);
|
||||
|
||||
Prefix* prefix = misses.AppendElement(fallible);
|
||||
- prefix->FromPlaintext(aCompletion, cryptoHash);
|
||||
+ prefix->FromPlaintext(aCompletion);
|
||||
|
||||
// Setup positive cache first otherwise negative cache expiry will be
|
||||
// overwritten.
|
||||
@@ -45,9 +42,7 @@ SetupCacheEntry(LookupCacheV4* aLookupCache,
|
||||
FullHashResponseMap map;
|
||||
|
||||
Prefix prefix;
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash =
|
||||
- do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- prefix.FromPlaintext(aCompletion, cryptoHash);
|
||||
+ prefix.FromPlaintext(aCompletion);
|
||||
|
||||
CachedFullHashResponse* response = map.LookupOrAdd(prefix.ToUint32());
|
||||
|
||||
@@ -104,8 +99,7 @@ TestCache(const _Fragment& aFragment,
|
||||
T* aCache = nullptr)
|
||||
{
|
||||
Completion lookupHash;
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- lookupHash.FromPlaintext(aFragment, cryptoHash);
|
||||
+ lookupHash.FromPlaintext(aFragment);
|
||||
|
||||
TestCache<T>(lookupHash, aExpectedHas, aExpectedConfirmed, aExpectedInCache, aCache);
|
||||
}
|
||||
@@ -148,13 +142,12 @@ TEST(UrlClassifierCaching, InNegativeCacheNotExpired)
|
||||
{
|
||||
// Create a fullhash whose prefix matches the prefix in negative cache
|
||||
// but completion doesn't match any fullhash in positive cache.
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
|
||||
Completion prefix;
|
||||
- prefix.FromPlaintext(_Fragment("cache.notexpired.com/"), cryptoHash);
|
||||
+ prefix.FromPlaintext(_Fragment("cache.notexpired.com/"));
|
||||
|
||||
Completion fullhash;
|
||||
- fullhash.FromPlaintext(_Fragment("firefox.com/"), cryptoHash);
|
||||
+ fullhash.FromPlaintext(_Fragment("firefox.com/"));
|
||||
|
||||
// Overwrite the 4-byte prefix of `fullhash` so that it conflicts with `prefix`.
|
||||
// Since "cache.notexpired.com" is added to database in TestCache as a
|
||||
@@ -171,13 +164,12 @@ TEST(UrlClassifierCaching, InNegativeCacheNotExpired)
|
||||
TEST(UrlClassifierCaching, InNegativeCacheExpired)
|
||||
{
|
||||
// Create a fullhash whose prefix is in the cache.
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
|
||||
Completion prefix;
|
||||
- prefix.FromPlaintext(_Fragment("cache.expired.com/"), cryptoHash);
|
||||
+ prefix.FromPlaintext(_Fragment("cache.expired.com/"));
|
||||
|
||||
Completion fullhash;
|
||||
- fullhash.FromPlaintext(_Fragment("firefox.com/"), cryptoHash);
|
||||
+ fullhash.FromPlaintext(_Fragment("firefox.com/"));
|
||||
|
||||
memcpy(fullhash.buf, prefix.buf, 10);
|
||||
|
||||
@@ -255,7 +247,7 @@ TEST(UrlClassifierCaching, NegativeCacheExpireV2)
|
||||
|
||||
MissPrefixArray misses;
|
||||
Prefix* prefix = misses.AppendElement(fallible);
|
||||
- prefix->FromPlaintext(NEG_CACHE_EXPIRED_URL, cryptoHash);
|
||||
+ prefix->FromPlaintext(NEG_CACHE_EXPIRED_URL);
|
||||
|
||||
AddCompleteArray dummy;
|
||||
cache->AddGethashResultToCache(dummy, misses, EXPIRED_TIME_SEC);
|
||||
@@ -275,7 +267,7 @@ TEST(UrlClassifierCaching, NegativeCacheExpireV4)
|
||||
FullHashResponseMap map;
|
||||
Prefix prefix;
|
||||
nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- prefix.FromPlaintext(NEG_CACHE_EXPIRED_URL, cryptoHash);
|
||||
+ prefix.FromPlaintext(NEG_CACHE_EXPIRED_URL);
|
||||
CachedFullHashResponse* response = map.LookupOrAdd(prefix.ToUint32());
|
||||
|
||||
response->negativeCacheExpirySec = EXPIRED_TIME_SEC;
|
||||
diff --git toolkit/components/url-classifier/tests/gtest/TestClassifier.cpp toolkit/components/url-classifier/tests/gtest/TestClassifier.cpp
|
||||
index a4d21581315e..23b7e9ef59d1 100644
|
||||
--- toolkit/components/url-classifier/tests/gtest/TestClassifier.cpp
|
||||
+++ toolkit/components/url-classifier/tests/gtest/TestClassifier.cpp
|
||||
@@ -71,8 +71,7 @@ TestReadNoiseEntries(Classifier* classifier,
|
||||
const nsCString& aFragment)
|
||||
{
|
||||
Completion lookupHash;
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- lookupHash.FromPlaintext(aFragment, cryptoHash);
|
||||
+ lookupHash.FromPlaintext(aFragment);
|
||||
LookupResult result;
|
||||
result.hash.complete = lookupHash;
|
||||
|
||||
diff --git toolkit/components/url-classifier/tests/gtest/TestLookupCacheV4.cpp toolkit/components/url-classifier/tests/gtest/TestLookupCacheV4.cpp
|
||||
index b2ed091ae308..3fbea2d9d475 100644
|
||||
--- toolkit/components/url-classifier/tests/gtest/TestLookupCacheV4.cpp
|
||||
+++ toolkit/components/url-classifier/tests/gtest/TestLookupCacheV4.cpp
|
||||
@@ -17,8 +17,7 @@ TestHasPrefix(const _Fragment& aFragment, bool aExpectedHas, bool aExpectedCompl
|
||||
UniquePtr<LookupCache> cache = SetupLookupCache<LookupCacheV4>(array);
|
||||
|
||||
Completion lookupHash;
|
||||
- nsCOMPtr<nsICryptoHash> cryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
|
||||
- lookupHash.FromPlaintext(aFragment, cryptoHash);
|
||||
+ lookupHash.FromPlaintext(aFragment);
|
||||
|
||||
bool has, confirmed;
|
||||
uint32_t matchLength;
|
||||
diff --git toolkit/components/url-classifier/tests/unit/head_urlclassifier.js toolkit/components/url-classifier/tests/unit/head_urlclassifier.js
|
||||
index f52ded37c2e9..61b0c170d457 100644
|
||||
--- toolkit/components/url-classifier/tests/unit/head_urlclassifier.js
|
||||
+++ toolkit/components/url-classifier/tests/unit/head_urlclassifier.js
|
||||
@@ -17,6 +17,9 @@ do_get_profile();
|
||||
|
||||
var dirSvc = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
|
||||
|
||||
+// Ensure PSM is initialized before the test
|
||||
+Cc["@mozilla.org/psm;1"].getService(Ci.nsISupports);
|
||||
+
|
||||
var iosvc = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
|
||||
|
||||
var secMan = Cc["@mozilla.org/scriptsecuritymanager;1"]
|
@ -1,24 +0,0 @@
|
||||
commit a51675964a63
|
||||
Author: Jeff Gilbert <jgilbert@mozilla.com>
|
||||
Date: Tue Oct 17 17:14:29 2017 -0700
|
||||
|
||||
Bug 1394265 - Set MAX_COMBINED_TEXTURE_IMAGE_UNITS to 0 if GetIntegeriv fails. - r=daoshengmu a=ritu
|
||||
|
||||
MozReview-Commit-ID: 5h6UPXczKhb
|
||||
---
|
||||
dom/canvas/WebGLContextValidate.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git dom/canvas/WebGLContextValidate.cpp dom/canvas/WebGLContextValidate.cpp
|
||||
index a8334e546414..ebf0aa8c2d78 100644
|
||||
--- dom/canvas/WebGLContextValidate.cpp
|
||||
+++ dom/canvas/WebGLContextValidate.cpp
|
||||
@@ -554,7 +554,7 @@ WebGLContext::InitAndValidateGL(FailureReason* const out_failReason)
|
||||
if (MinCapabilityMode())
|
||||
mGLMaxTextureUnits = MINVALUE_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS;
|
||||
else
|
||||
- gl->fGetIntegerv(LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &mGLMaxTextureUnits);
|
||||
+ mGLMaxTextureUnits = gl->GetIntAs<GLint>(LOCAL_GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
|
||||
|
||||
if (mGLMaxTextureUnits < 8) {
|
||||
const nsPrintfCString reason("GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: %d is < 8!",
|
@ -1,60 +0,0 @@
|
||||
commit a2b75aa9409c
|
||||
Author: Tooru Fujisawa <arai_a@mac.com>
|
||||
Date: Sun Sep 17 19:52:04 2017 +0900
|
||||
|
||||
Bug 1394530 - Stop using optimized path for non PromiseObject. r=till, a=sledru
|
||||
|
||||
--HG--
|
||||
extra : source : 079ff8998fd50540948d3262a3a8b1f4d61b43e9
|
||||
---
|
||||
js/src/builtin/Promise.cpp | 21 ++++++++++++++++-----
|
||||
1 file changed, 16 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git js/src/builtin/Promise.cpp js/src/builtin/Promise.cpp
|
||||
index 1cb1cff0682e..e316f090504d 100644
|
||||
--- js/src/builtin/Promise.cpp
|
||||
+++ js/src/builtin/Promise.cpp
|
||||
@@ -2365,6 +2365,15 @@ NewReactionRecord(JSContext* cx, HandleObject resultPromise, HandleValue onFulfi
|
||||
HandleValue onRejected, HandleObject resolve, HandleObject reject,
|
||||
HandleObject incumbentGlobalObject)
|
||||
{
|
||||
+ // Either of the following conditions must be met:
|
||||
+ // * resultPromise is a PromiseObject
|
||||
+ // * resolve and reject are callable
|
||||
+ // except for Async Generator, there resultPromise can be nullptr.
|
||||
+ MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), resolve);
|
||||
+ MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), IsCallable(resolve));
|
||||
+ MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), reject);
|
||||
+ MOZ_ASSERT_IF(resultPromise && !resultPromise->is<PromiseObject>(), IsCallable(reject));
|
||||
+
|
||||
Rooted<PromiseReactionRecord*> reaction(cx, NewObjectWithClassProto<PromiseReactionRecord>(cx));
|
||||
if (!reaction)
|
||||
return nullptr;
|
||||
@@ -3072,7 +3081,7 @@ BlockOnPromise(JSContext* cx, HandleValue promiseVal, HandleObject blockedPromis
|
||||
// rejected promises list.
|
||||
bool addToDependent = true;
|
||||
|
||||
- if (C == PromiseCtor) {
|
||||
+ if (C == PromiseCtor && resultPromise->is<PromiseObject>()) {
|
||||
addToDependent = false;
|
||||
} else {
|
||||
// 25.4.5.3., step 4.
|
||||
@@ -3131,12 +3140,14 @@ BlockOnPromise(JSContext* cx, HandleValue promiseVal, HandleObject blockedPromis
|
||||
return false;
|
||||
}
|
||||
|
||||
- // If the object to depend on isn't a, maybe-wrapped, Promise instance,
|
||||
- // we ignore it. All this does is lose some small amount of debug
|
||||
- // information in scenarios that are highly unlikely to occur in useful
|
||||
- // code.
|
||||
+ // If either the object to depend on or the object that gets blocked isn't
|
||||
+ // a, maybe-wrapped, Promise instance, we ignore it. All this does is lose
|
||||
+ // some small amount of debug information in scenarios that are highly
|
||||
+ // unlikely to occur in useful code.
|
||||
if (!unwrappedPromiseObj->is<PromiseObject>())
|
||||
return true;
|
||||
+ if (!blockedPromise_->is<PromiseObject>())
|
||||
+ return true;
|
||||
|
||||
Rooted<PromiseObject*> promise(cx, &unwrappedPromiseObj->as<PromiseObject>());
|
||||
return AddPromiseReaction(cx, promise, UndefinedHandleValue, UndefinedHandleValue,
|
@ -1,49 +0,0 @@
|
||||
commit 8ab8a207d511
|
||||
Author: Jamie Nicol <jnicol@mozilla.com>
|
||||
Date: Mon Oct 9 17:48:59 2017 +0100
|
||||
|
||||
Bug 1395138 - Hold reference to layers in ContainerLayerComposite::mPrepared. r=mattwoodrow, a=sledru
|
||||
|
||||
MozReview-Commit-ID: 6qUDRnRcFAw
|
||||
---
|
||||
gfx/layers/composite/ContainerLayerComposite.cpp | 9 +++++----
|
||||
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git gfx/layers/composite/ContainerLayerComposite.cpp gfx/layers/composite/ContainerLayerComposite.cpp
|
||||
index aad2993629fc..28d9e79925a0 100755
|
||||
--- gfx/layers/composite/ContainerLayerComposite.cpp
|
||||
+++ gfx/layers/composite/ContainerLayerComposite.cpp
|
||||
@@ -161,12 +161,12 @@ static gfx::IntRect ContainerVisibleRect(ContainerT* aContainer)
|
||||
/* all of the per-layer prepared data we need to maintain */
|
||||
struct PreparedLayer
|
||||
{
|
||||
- PreparedLayer(LayerComposite *aLayer,
|
||||
+ PreparedLayer(Layer *aLayer,
|
||||
RenderTargetIntRect aClipRect,
|
||||
Maybe<gfx::Polygon>&& aGeometry)
|
||||
: mLayer(aLayer), mClipRect(aClipRect), mGeometry(Move(aGeometry)) {}
|
||||
|
||||
- LayerComposite* mLayer;
|
||||
+ RefPtr<Layer> mLayer;
|
||||
RenderTargetIntRect mClipRect;
|
||||
Maybe<Polygon> mGeometry;
|
||||
};
|
||||
@@ -230,7 +230,8 @@ ContainerPrepare(ContainerT* aContainer,
|
||||
CULLING_LOG("Preparing sublayer %p\n", layerToRender->GetLayer());
|
||||
|
||||
layerToRender->Prepare(clipRect);
|
||||
- aContainer->mPrepared->mLayers.AppendElement(PreparedLayer(layerToRender, clipRect,
|
||||
+ aContainer->mPrepared->mLayers.AppendElement(PreparedLayer(layerToRender->GetLayer(),
|
||||
+ clipRect,
|
||||
Move(layer.geometry)));
|
||||
}
|
||||
|
||||
@@ -408,7 +409,7 @@ RenderLayers(ContainerT* aContainer, LayerManagerComposite* aManager,
|
||||
PreparedLayer& preparedData = aContainer->mPrepared->mLayers[i];
|
||||
|
||||
const gfx::IntRect clipRect = preparedData.mClipRect.ToUnknownRect();
|
||||
- LayerComposite* layerToRender = preparedData.mLayer;
|
||||
+ LayerComposite* layerToRender = static_cast<LayerComposite*>(preparedData.mLayer->ImplData());
|
||||
const Maybe<gfx::Polygon>& childGeometry = preparedData.mGeometry;
|
||||
|
||||
Layer* layer = layerToRender->GetLayer();
|
@ -1,48 +0,0 @@
|
||||
commit 2bffd0136caf
|
||||
Author: Olli Pettay <Olli.Pettay@helsinki.fi>
|
||||
Date: Fri Oct 20 11:02:29 2017 +0100
|
||||
|
||||
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
|
||||
|
||||
--HG--
|
||||
extra : source : b609906f34b50f8e4236d0fee8d01338181dd906
|
||||
---
|
||||
dom/base/nsNodeUtils.cpp | 21 +++++++++------------
|
||||
1 file changed, 9 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git dom/base/nsNodeUtils.cpp dom/base/nsNodeUtils.cpp
|
||||
index dd958aa443ce..20e714d54065 100644
|
||||
--- dom/base/nsNodeUtils.cpp
|
||||
+++ dom/base/nsNodeUtils.cpp
|
||||
@@ -605,6 +605,15 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (aNodesWithProperties && aNode->HasProperties()) {
|
||||
+ bool ok = aNodesWithProperties->AppendObject(aNode);
|
||||
+ MOZ_RELEASE_ASSERT(ok, "Out of memory");
|
||||
+ if (aClone) {
|
||||
+ ok = aNodesWithProperties->AppendObject(clone);
|
||||
+ MOZ_RELEASE_ASSERT(ok, "Out of memory");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
if (aDeep && (!aClone || !aNode->IsNodeOfType(nsINode::eATTRIBUTE))) {
|
||||
// aNode's children.
|
||||
for (nsIContent* cloneChild = aNode->GetFirstChild();
|
||||
@@ -664,15 +673,6 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
||||
}
|
||||
#endif
|
||||
|
||||
- if (aNodesWithProperties && aNode->HasProperties()) {
|
||||
- bool ok = aNodesWithProperties->AppendObject(aNode);
|
||||
- if (aClone) {
|
||||
- ok = ok && aNodesWithProperties->AppendObject(clone);
|
||||
- }
|
||||
-
|
||||
- NS_ENSURE_TRUE(ok, NS_ERROR_OUT_OF_MEMORY);
|
||||
- }
|
||||
-
|
||||
clone.forget(aResult);
|
||||
|
||||
return NS_OK;
|
@ -1,104 +0,0 @@
|
||||
commit aec4b24e060f
|
||||
Author: Jan-Ivar Bruaroey <jib@mozilla.com>
|
||||
Date: Thu Sep 21 10:45:56 2017 -0400
|
||||
|
||||
Bug 1399922 - Use a static mutex for getting deviceId keys in MediaParent. r=jesup, a=sledru
|
||||
|
||||
MozReview-Commit-ID: E6pzyAM4jOQ
|
||||
|
||||
--HG--
|
||||
extra : source : b030607a3ddbc015d30dbffc5eba0789cae6db62
|
||||
---
|
||||
dom/media/systemservices/MediaParent.cpp | 32 +++++++++++++++++++++-----------
|
||||
1 file changed, 21 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git dom/media/systemservices/MediaParent.cpp dom/media/systemservices/MediaParent.cpp
|
||||
index c7798dd73dc6..485f9bdee808 100644
|
||||
--- dom/media/systemservices/MediaParent.cpp
|
||||
+++ dom/media/systemservices/MediaParent.cpp
|
||||
@@ -37,6 +37,7 @@ mozilla::LazyLogModule gMediaParentLog("MediaParent");
|
||||
namespace mozilla {
|
||||
namespace media {
|
||||
|
||||
+StaticMutex sOriginKeyStoreMutex;
|
||||
static OriginKeyStore* sOriginKeyStore = nullptr;
|
||||
|
||||
class OriginKeyStore : public nsISupports
|
||||
@@ -396,6 +397,7 @@ class OriginKeyStore : public nsISupports
|
||||
private:
|
||||
virtual ~OriginKeyStore()
|
||||
{
|
||||
+ StaticMutexAutoLock lock(sOriginKeyStoreMutex);
|
||||
sOriginKeyStore = nullptr;
|
||||
LOG((__FUNCTION__));
|
||||
}
|
||||
@@ -404,6 +406,7 @@ public:
|
||||
static OriginKeyStore* Get()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
+ StaticMutexAutoLock lock(sOriginKeyStoreMutex);
|
||||
if (!sOriginKeyStore) {
|
||||
sOriginKeyStore = new OriginKeyStore();
|
||||
}
|
||||
@@ -447,8 +450,8 @@ Parent<Super>::RecvGetPrincipalKey(const uint32_t& aRequestId,
|
||||
return IPCResult(this, false);
|
||||
}
|
||||
|
||||
- // Then over to stream-transport thread to do the actual file io.
|
||||
- // Stash a pledge to hold the answer and get an id for this request.
|
||||
+ // Then over to stream-transport thread (a thread pool) to do the actual
|
||||
+ // file io. Stash a pledge to hold the answer and get an id for this request.
|
||||
|
||||
RefPtr<Pledge<nsCString>> p = new Pledge<nsCString>();
|
||||
uint32_t id = mOutstandingPledges.Append(*p);
|
||||
@@ -460,14 +463,18 @@ Parent<Super>::RecvGetPrincipalKey(const uint32_t& aRequestId,
|
||||
rv = sts->Dispatch(NewRunnableFrom([this, that, id, profileDir,
|
||||
aPrincipalInfo, aPersist]() -> nsresult {
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
- mOriginKeyStore->mOriginKeys.SetProfileDir(profileDir);
|
||||
+ StaticMutexAutoLock lock(sOriginKeyStoreMutex);
|
||||
+ if (!sOriginKeyStore) {
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+ }
|
||||
+ sOriginKeyStore->mOriginKeys.SetProfileDir(profileDir);
|
||||
|
||||
nsresult rv;
|
||||
nsAutoCString result;
|
||||
if (IsPincipalInfoPrivate(aPrincipalInfo)) {
|
||||
- rv = mOriginKeyStore->mPrivateBrowsingOriginKeys.GetPrincipalKey(aPrincipalInfo, result);
|
||||
+ rv = sOriginKeyStore->mPrivateBrowsingOriginKeys.GetPrincipalKey(aPrincipalInfo, result);
|
||||
} else {
|
||||
- rv = mOriginKeyStore->mOriginKeys.GetPrincipalKey(aPrincipalInfo, result, aPersist);
|
||||
+ rv = sOriginKeyStore->mOriginKeys.GetPrincipalKey(aPrincipalInfo, result, aPersist);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
@@ -518,19 +525,22 @@ Parent<Super>::RecvSanitizeOriginKeys(const uint64_t& aSinceWhen,
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return IPCResult(this, false);
|
||||
}
|
||||
- // Over to stream-transport thread to do the file io.
|
||||
+ // Over to stream-transport thread (a thread pool) to do the file io.
|
||||
|
||||
nsCOMPtr<nsIEventTarget> sts = do_GetService(NS_STREAMTRANSPORTSERVICE_CONTRACTID);
|
||||
MOZ_ASSERT(sts);
|
||||
- RefPtr<OriginKeyStore> store(mOriginKeyStore);
|
||||
|
||||
- rv = sts->Dispatch(NewRunnableFrom([profileDir, store, aSinceWhen,
|
||||
+ rv = sts->Dispatch(NewRunnableFrom([profileDir, aSinceWhen,
|
||||
aOnlyPrivateBrowsing]() -> nsresult {
|
||||
MOZ_ASSERT(!NS_IsMainThread());
|
||||
- store->mPrivateBrowsingOriginKeys.Clear(aSinceWhen);
|
||||
+ StaticMutexAutoLock lock(sOriginKeyStoreMutex);
|
||||
+ if (!sOriginKeyStore) {
|
||||
+ return NS_ERROR_FAILURE;
|
||||
+ }
|
||||
+ sOriginKeyStore->mPrivateBrowsingOriginKeys.Clear(aSinceWhen);
|
||||
if (!aOnlyPrivateBrowsing) {
|
||||
- store->mOriginKeys.SetProfileDir(profileDir);
|
||||
- store->mOriginKeys.Clear(aSinceWhen);
|
||||
+ sOriginKeyStore->mOriginKeys.SetProfileDir(profileDir);
|
||||
+ sOriginKeyStore->mOriginKeys.Clear(aSinceWhen);
|
||||
}
|
||||
return NS_OK;
|
||||
}), NS_DISPATCH_NORMAL);
|
@ -1,120 +0,0 @@
|
||||
commit 677c707a4f11
|
||||
Author: Jon Coppeard <jcoppeard@mozilla.com>
|
||||
Date: Mon Oct 9 10:03:20 2017 +0100
|
||||
|
||||
Bug 1400003 - Mark Heap<T> and barrier classes as MOZ_NON_MEMMOVABLE. r=sfink, r=froydnj, a=lizzard
|
||||
|
||||
--HG--
|
||||
extra : source : 6ad5b916c9659aeb4b901d8f9ec7f121dc2c4418
|
||||
---
|
||||
js/public/RootingAPI.h | 10 +++++++++-
|
||||
js/src/gc/Barrier.h | 5 ++++-
|
||||
xpcom/ds/nsTArray.h | 27 +++++++++++++--------------
|
||||
3 files changed, 26 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git js/public/RootingAPI.h js/public/RootingAPI.h
|
||||
index 74a61af93703..f8ec7c5a1f5b 100644
|
||||
--- js/public/RootingAPI.h
|
||||
+++ js/public/RootingAPI.h
|
||||
@@ -231,7 +231,7 @@ AssertGCThingIsNotAnObjectSubclass(js::gc::Cell* cell) {}
|
||||
* Type T must be a public GC pointer type.
|
||||
*/
|
||||
template <typename T>
|
||||
-class Heap : public js::HeapBase<T, Heap<T>>
|
||||
+class MOZ_NON_MEMMOVABLE Heap : public js::HeapBase<T, Heap<T>>
|
||||
{
|
||||
// Please note: this can actually also be used by nsXBLMaybeCompiled<T>, for legacy reasons.
|
||||
static_assert(js::IsHeapConstructibleType<T>::value,
|
||||
@@ -1246,6 +1246,14 @@ class JS_PUBLIC_API(ObjectPtr)
|
||||
|
||||
explicit ObjectPtr(JSObject* obj) : value(obj) {}
|
||||
|
||||
+ ObjectPtr(const ObjectPtr& other) : value(other.value) {}
|
||||
+
|
||||
+ ObjectPtr(ObjectPtr&& other)
|
||||
+ : value(other.value)
|
||||
+ {
|
||||
+ other.value = nullptr;
|
||||
+ }
|
||||
+
|
||||
/* Always call finalize before the destructor. */
|
||||
~ObjectPtr() { MOZ_ASSERT(!value); }
|
||||
|
||||
diff --git js/src/gc/Barrier.h js/src/gc/Barrier.h
|
||||
index 9c4f53975752..1740315c14e9 100644
|
||||
--- js/src/gc/Barrier.h
|
||||
+++ js/src/gc/Barrier.h
|
||||
@@ -318,8 +318,11 @@ struct InternalBarrierMethods<jsid>
|
||||
};
|
||||
|
||||
// Base class of all barrier types.
|
||||
+//
|
||||
+// This is marked non-memmovable since post barriers added by derived classes
|
||||
+// can add pointers to class instances to the store buffer.
|
||||
template <typename T>
|
||||
-class BarrieredBase
|
||||
+class MOZ_NON_MEMMOVABLE BarrieredBase
|
||||
{
|
||||
protected:
|
||||
// BarrieredBase is not directly instantiable.
|
||||
diff --git xpcom/ds/nsTArray.h xpcom/ds/nsTArray.h
|
||||
index 424a50ba421e..4e9b57126bfb 100644
|
||||
--- xpcom/ds/nsTArray.h
|
||||
+++ xpcom/ds/nsTArray.h
|
||||
@@ -37,6 +37,7 @@
|
||||
namespace JS {
|
||||
template<class T>
|
||||
class Heap;
|
||||
+class ObjectPtr;
|
||||
} /* namespace JS */
|
||||
|
||||
class nsRegion;
|
||||
@@ -708,7 +709,7 @@ struct nsTArray_CopyWithConstructors
|
||||
template<class E>
|
||||
struct MOZ_NEEDS_MEMMOVABLE_TYPE nsTArray_CopyChooser
|
||||
{
|
||||
- typedef nsTArray_CopyWithMemutils Type;
|
||||
+ using Type = nsTArray_CopyWithMemutils;
|
||||
};
|
||||
|
||||
//
|
||||
@@ -719,14 +720,18 @@ struct MOZ_NEEDS_MEMMOVABLE_TYPE nsTArray_CopyChooser
|
||||
template<> \
|
||||
struct nsTArray_CopyChooser<T> \
|
||||
{ \
|
||||
- typedef nsTArray_CopyWithConstructors<T> Type; \
|
||||
+ using Type = nsTArray_CopyWithConstructors<T>; \
|
||||
};
|
||||
|
||||
-template<class E>
|
||||
-struct nsTArray_CopyChooser<JS::Heap<E>>
|
||||
-{
|
||||
- typedef nsTArray_CopyWithConstructors<JS::Heap<E>> Type;
|
||||
-};
|
||||
+#define DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(T) \
|
||||
+ template<typename S> \
|
||||
+ struct nsTArray_CopyChooser<T<S>> \
|
||||
+ { \
|
||||
+ using Type = nsTArray_CopyWithConstructors<T<S>>; \
|
||||
+ };
|
||||
+
|
||||
+DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(JS::Heap)
|
||||
+DECLARE_USE_COPY_CONSTRUCTORS_FOR_TEMPLATE(std::function)
|
||||
|
||||
DECLARE_USE_COPY_CONSTRUCTORS(nsRegion)
|
||||
DECLARE_USE_COPY_CONSTRUCTORS(nsIntRegion)
|
||||
@@ -740,13 +745,7 @@ DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::indexedDB::SerializedStructuredClone
|
||||
DECLARE_USE_COPY_CONSTRUCTORS(JSStructuredCloneData)
|
||||
DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::MessagePortMessage)
|
||||
DECLARE_USE_COPY_CONSTRUCTORS(mozilla::SourceBufferTask)
|
||||
-
|
||||
-template<typename T>
|
||||
-struct nsTArray_CopyChooser<std::function<T>>
|
||||
-{
|
||||
- typedef nsTArray_CopyWithConstructors<std::function<T>> Type;
|
||||
-};
|
||||
-
|
||||
+DECLARE_USE_COPY_CONSTRUCTORS(JS::ObjectPtr)
|
||||
|
||||
//
|
||||
// Base class for nsTArray_Impl that is templated on element type and derived
|
@ -1,27 +0,0 @@
|
||||
commit 62b41b600acc
|
||||
Author: Dragana Damjanovic <dd.mozilla@gmail.com>
|
||||
Date: Mon Oct 9 14:59:32 2017 -0400
|
||||
|
||||
Bug 1400554 - Cancel a time in TLSFilterTransaction if transaction is canceled. r=mcmanus, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 67315954145e9cae0efe8c5323452a70a13c5484
|
||||
---
|
||||
netwerk/protocol/http/TunnelUtils.cpp | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git netwerk/protocol/http/TunnelUtils.cpp netwerk/protocol/http/TunnelUtils.cpp
|
||||
index d0f6ef0b1873..0cf3ea4f3008 100644
|
||||
--- netwerk/protocol/http/TunnelUtils.cpp
|
||||
+++ netwerk/protocol/http/TunnelUtils.cpp
|
||||
@@ -126,6 +126,10 @@ TLSFilterTransaction::Close(nsresult aReason)
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (mTimer) {
|
||||
+ mTimer->Cancel();
|
||||
+ mTimer = nullptr;
|
||||
+ }
|
||||
mTransaction->Close(aReason);
|
||||
mTransaction = nullptr;
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
commit 5d3c733f43dd
|
||||
Author: Gabriele Svelto <gsvelto@mozilla.com>
|
||||
Date: Fri Sep 22 15:06:22 2017 +0200
|
||||
|
||||
Bug 1401339 - Look for libcurl under platform-specific paths; r=Dexter a=sylvestre
|
||||
|
||||
MozReview-Commit-ID: 6wijqLsar56
|
||||
|
||||
--HG--
|
||||
extra : source : ebd3c3b2d64442c2b5eb7ab3e87c4b423311f3f4
|
||||
---
|
||||
.../pingsender/pingsender_unix_common.cpp | 40 +++++++++++++++-------
|
||||
1 file changed, 28 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
index b1cea81f6288..ae20f4114193 100644
|
||||
--- toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
+++ toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
@@ -80,29 +80,45 @@ CurlWrapper::~CurlWrapper()
|
||||
bool
|
||||
CurlWrapper::Init()
|
||||
{
|
||||
- // libcurl might show up under different names, try them all until we find it
|
||||
+ const char* libcurlPaths[] = {
|
||||
+ "/usr/lib",
|
||||
+#ifdef XP_LINUX
|
||||
+ "/usr/lib32",
|
||||
+ "/usr/lib64",
|
||||
+ "/usr/lib/i386-linux-gnu", // Debian 32-bit x86
|
||||
+ "/usr/lib/x86_64-linux-gnu", // Debian 64-bit x86
|
||||
+#endif // XP_LINUX
|
||||
+ };
|
||||
+
|
||||
const char* libcurlNames[] = {
|
||||
+#ifdef XP_LINUX
|
||||
"libcurl.so",
|
||||
"libcurl.so.4",
|
||||
// Debian gives libcurl a different name when it is built against GnuTLS
|
||||
+ "libcurl-gnutls.so",
|
||||
"libcurl-gnutls.so.4",
|
||||
- // Older libcurl if we can't find anything better
|
||||
+ // Older versions in case we find nothing better
|
||||
"libcurl.so.3",
|
||||
-#ifndef HAVE_64BIT_BUILD
|
||||
- // 32-bit versions on 64-bit hosts
|
||||
- "/usr/lib32/libcurl.so",
|
||||
- "/usr/lib32/libcurl.so.4",
|
||||
- "/usr/lib32/libcurl-gnutls.so.4",
|
||||
- "/usr/lib32/libcurl.so.3",
|
||||
-#endif
|
||||
+ "libcurl-gnutls.so.3", // See above for Debian
|
||||
+#elif defined(XP_MACOSX)
|
||||
// macOS
|
||||
"libcurl.dylib",
|
||||
"libcurl.4.dylib",
|
||||
- "libcurl.3.dylib"
|
||||
+ "libcurl.3.dylib",
|
||||
+#endif
|
||||
};
|
||||
|
||||
- for (const char* libname : libcurlNames) {
|
||||
- mLib = dlopen(libname, RTLD_NOW);
|
||||
+ // libcurl might show up under different names, try them all until we find it
|
||||
+
|
||||
+ for (const char* libpath : libcurlPaths) {
|
||||
+ for (const char* libname : libcurlNames) {
|
||||
+ string fullpath = string(libpath) + "/" + libname;
|
||||
+ mLib = dlopen(fullpath.c_str(), RTLD_NOW);
|
||||
+
|
||||
+ if (mLib) {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
if (mLib) {
|
||||
break;
|
@ -1,27 +0,0 @@
|
||||
commit d0ed05261f20
|
||||
Author: jason laster <jlaster@mozilla.com>
|
||||
Date: Wed Sep 20 10:52:54 2017 -0400
|
||||
|
||||
Bug 1401573 - Fix PoE, Link, and linux issue. r=nchevobbe
|
||||
|
||||
MozReview-Commit-ID: 35TA6bhW1Wr
|
||||
---
|
||||
devtools/client/debugger/new/debugger.js | 68 +++++++++++++++++-----
|
||||
devtools/client/debugger/new/panel.js | 27 ++++++++-
|
||||
.../new/test/mochitest/browser_dbg-expressions.js | 2 +-
|
||||
3 files changed, 79 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git devtools/client/debugger/new/debugger.js devtools/client/debugger/new/debugger.js
|
||||
index f52a3e380ab6..c1213180cb13 100644
|
||||
--- devtools/client/debugger/new/debugger.js
|
||||
+++ devtools/client/debugger/new/debugger.js
|
||||
@@ -29493,7 +29493,8 @@ return /******/ (function(modules) { // webpackBootstr
|
||||
}
|
||||
|
||||
function getKeyForOS(os, action) {
|
||||
- return KEYS[os][action];
|
||||
+ var osActions = KEYS[os] || KEYS.Linux;
|
||||
+ return osActions[action];
|
||||
}
|
||||
|
||||
function formatKey(action) {
|
@ -1,31 +0,0 @@
|
||||
commit 38e6bb85066b
|
||||
Author: Jon Coppeard <jcoppeard@mozilla.com>
|
||||
Date: Fri Sep 22 13:09:44 2017 +0100
|
||||
|
||||
Bug 1401804 - Fix IsMarkedBlack check used in gray marking asserts r=sfink a=sylvestre
|
||||
---
|
||||
js/src/gc/Barrier.cpp | 11 ++---------
|
||||
1 file changed, 2 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git js/src/gc/Barrier.cpp js/src/gc/Barrier.cpp
|
||||
index 5a5dfbe9bed0..0c42d16e7117 100644
|
||||
--- js/src/gc/Barrier.cpp
|
||||
+++ js/src/gc/Barrier.cpp
|
||||
@@ -33,15 +33,8 @@ RuntimeFromActiveCooperatingThreadIsHeapMajorCollecting(JS::shadow::Zone* shadow
|
||||
bool
|
||||
IsMarkedBlack(JSObject* obj)
|
||||
{
|
||||
- // Note: we assume conservatively that Nursery things will be live.
|
||||
- if (!obj->isTenured())
|
||||
- return true;
|
||||
-
|
||||
- gc::TenuredCell& tenured = obj->asTenured();
|
||||
- if (tenured.isMarkedAny() || tenured.arena()->allocatedDuringIncremental)
|
||||
- return true;
|
||||
-
|
||||
- return false;
|
||||
+ return obj->isMarkedBlack() ||
|
||||
+ (obj->isTenured() && obj->asTenured().arena()->allocatedDuringIncremental);
|
||||
}
|
||||
|
||||
bool
|
@ -1,199 +0,0 @@
|
||||
commit 3b1474dc71b8
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Mon Oct 2 09:11:57 2017 +0200
|
||||
|
||||
Bug 1402363 - Explicitly cancel channel after mixed content redirect. r=honza, r=kate, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 2773796df8a337e5de31811acb4662ce67955f93
|
||||
---
|
||||
dom/security/nsMixedContentBlocker.cpp | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git dom/security/nsMixedContentBlocker.cpp dom/security/nsMixedContentBlocker.cpp
|
||||
index 46760e69cb91..28740da9efca 100644
|
||||
--- dom/security/nsMixedContentBlocker.cpp
|
||||
+++ dom/security/nsMixedContentBlocker.cpp
|
||||
@@ -394,7 +394,11 @@ nsMixedContentBlocker::AsyncOnChannelRedirect(nsIChannel* aOldChannel,
|
||||
nullptr, // aExtra
|
||||
requestingPrincipal,
|
||||
&decision);
|
||||
- NS_ENSURE_SUCCESS(rv, rv);
|
||||
+ if (NS_FAILED(rv)) {
|
||||
+ autoCallback.DontCallback();
|
||||
+ aOldChannel->Cancel(NS_ERROR_DOM_BAD_URI);
|
||||
+ return NS_BINDING_FAILED;
|
||||
+ }
|
||||
|
||||
if (nsMixedContentBlocker::sSendHSTSPriming) {
|
||||
// The LoadInfo passed in is for the original channel, HSTS priming needs to
|
||||
@@ -419,6 +423,7 @@ nsMixedContentBlocker::AsyncOnChannelRedirect(nsIChannel* aOldChannel,
|
||||
// If the channel is about to load mixed content, abort the channel
|
||||
if (!NS_CP_ACCEPTED(decision)) {
|
||||
autoCallback.DontCallback();
|
||||
+ aOldChannel->Cancel(NS_ERROR_DOM_BAD_URI);
|
||||
return NS_BINDING_FAILED;
|
||||
}
|
||||
|
||||
|
||||
commit a709f413ebbd (tag: FIREFOX_57_0b5_RELEASE, tag: FIREFOX_57_0b5_BUILD1)
|
||||
Author: Christoph Kerschbaumer <ckerschb@christophkerschbaumer.com>
|
||||
Date: Mon Oct 2 09:12:12 2017 +0200
|
||||
|
||||
Bug 1402363 - Test Mixed Content Redirect Blocking. r=tanvi, r=kate, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : fcefba24074f60e2d3296996e20a8dd8bc6bebe0
|
||||
---
|
||||
.../test/mixedcontentblocker/file_redirect.html | 31 ++++++++++++++
|
||||
.../mixedcontentblocker/file_redirect_handler.sjs | 29 +++++++++++++
|
||||
.../test/mixedcontentblocker/mochitest.ini | 3 ++
|
||||
.../test/mixedcontentblocker/test_redirect.html | 50 ++++++++++++++++++++++
|
||||
4 files changed, 113 insertions(+)
|
||||
|
||||
diff --git dom/security/test/mixedcontentblocker/file_redirect.html dom/security/test/mixedcontentblocker/file_redirect.html
|
||||
new file mode 100644
|
||||
index 000000000000..99e187379139
|
||||
--- /dev/null
|
||||
+++ dom/security/test/mixedcontentblocker/file_redirect.html
|
||||
@@ -0,0 +1,31 @@
|
||||
+<!DOCTYPE HTML>
|
||||
+<html>
|
||||
+<head>
|
||||
+ <title>Bug1402363: Test mixed content redirects</title>
|
||||
+</head>
|
||||
+<body>
|
||||
+
|
||||
+<script type="text/javascript">
|
||||
+ const PATH = "https://example.com/tests/dom/security/test/mixedcontentblocker/";
|
||||
+
|
||||
+ // check a fetch redirect from https to https (should be allowed)
|
||||
+ fetch(PATH + "file_redirect_handler.sjs?https-to-https-redirect", {
|
||||
+ method: 'get'
|
||||
+ }).then(function(response) {
|
||||
+ window.parent.postMessage("https-to-https-loaded", "*");
|
||||
+ }).catch(function(err) {
|
||||
+ window.parent.postMessage("https-to-https-blocked", "*");
|
||||
+ });
|
||||
+
|
||||
+ // check a fetch redirect from https to http (should be blocked)
|
||||
+ fetch(PATH + "file_redirect_handler.sjs?https-to-http-redirect", {
|
||||
+ method: 'get'
|
||||
+ }).then(function(response) {
|
||||
+ window.parent.postMessage("https-to-http-loaded", "*");
|
||||
+ }).catch(function(err) {
|
||||
+ window.parent.postMessage("https-to-http-blocked", "*");
|
||||
+ });
|
||||
+
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
||||
diff --git dom/security/test/mixedcontentblocker/file_redirect_handler.sjs dom/security/test/mixedcontentblocker/file_redirect_handler.sjs
|
||||
new file mode 100644
|
||||
index 000000000000..88dc849fe9a7
|
||||
--- /dev/null
|
||||
+++ dom/security/test/mixedcontentblocker/file_redirect_handler.sjs
|
||||
@@ -0,0 +1,29 @@
|
||||
+// custom *.sjs file for
|
||||
+// Bug 1402363: Test Mixed Content Redirect Blocking.
|
||||
+
|
||||
+const URL_PATH = "example.com/tests/dom/security/test/mixedcontentblocker/";
|
||||
+
|
||||
+function handleRequest(request, response) {
|
||||
+ response.setHeader("Cache-Control", "no-cache", false);
|
||||
+ let queryStr = request.queryString;
|
||||
+
|
||||
+ if (queryStr === "https-to-https-redirect") {
|
||||
+ response.setStatusLine("1.1", 302, "Found");
|
||||
+ response.setHeader("Location",
|
||||
+ "https://" + URL_PATH + "file_redirect_handler.sjs?load", false);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (queryStr === "https-to-http-redirect") {
|
||||
+ response.setStatusLine("1.1", 302, "Found");
|
||||
+ response.setHeader("Location",
|
||||
+ "http://" + URL_PATH + "file_redirect_handler.sjs?load", false);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (queryStr === "load") {
|
||||
+ response.setHeader("Content-Type", "text/html", false);
|
||||
+ response.write("foo");
|
||||
+ return;
|
||||
+ }
|
||||
+}
|
||||
diff --git dom/security/test/mixedcontentblocker/mochitest.ini dom/security/test/mixedcontentblocker/mochitest.ini
|
||||
index 7eed89effbce..9daf1f0ae73b 100644
|
||||
--- dom/security/test/mixedcontentblocker/mochitest.ini
|
||||
+++ dom/security/test/mixedcontentblocker/mochitest.ini
|
||||
@@ -14,6 +14,8 @@ support-files =
|
||||
file_server.sjs
|
||||
!/dom/media/test/320x240.ogv
|
||||
!/image/test/mochitest/blue.png
|
||||
+ file_redirect.html
|
||||
+ file_redirect_handler.sjs
|
||||
|
||||
[test_main.html]
|
||||
skip-if = toolkit == 'android' #TIMED_OUT
|
||||
@@ -21,3 +23,4 @@ skip-if = toolkit == 'android' #TIMED_OUT
|
||||
skip-if = toolkit == 'android' || (os=='linux' && bits==32) #Android: TIMED_OUT; Linux32:bug 1324870
|
||||
[test_frameNavigation.html]
|
||||
skip-if = toolkit == 'android' #TIMED_OUT
|
||||
+[test_redirect.html]
|
||||
diff --git dom/security/test/mixedcontentblocker/test_redirect.html dom/security/test/mixedcontentblocker/test_redirect.html
|
||||
new file mode 100644
|
||||
index 000000000000..f4aeef3d9895
|
||||
--- /dev/null
|
||||
+++ dom/security/test/mixedcontentblocker/test_redirect.html
|
||||
@@ -0,0 +1,50 @@
|
||||
+<!DOCTYPE HTML>
|
||||
+<html>
|
||||
+<head>
|
||||
+ <title>Bug1402363: Test mixed content redirects</title>
|
||||
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
+</head>
|
||||
+
|
||||
+<body onload='startTest()'>
|
||||
+<iframe style="width:100%;height:300px;" id="testframe"></iframe>
|
||||
+
|
||||
+<script class="testbody" type="text/javascript">
|
||||
+
|
||||
+SimpleTest.waitForExplicitFinish();
|
||||
+
|
||||
+const PATH = "https://example.com/tests/dom/security/test/mixedcontentblocker/";
|
||||
+let testcounter = 0;
|
||||
+
|
||||
+window.addEventListener("message", receiveMessage);
|
||||
+function receiveMessage(event) {
|
||||
+ if (event.data === "https-to-https-loaded") {
|
||||
+ ok(true, "https to https fetch redirect should be allowed");
|
||||
+ }
|
||||
+ else if (event.data === "https-to-http-blocked") {
|
||||
+ ok(true, "https to http fetch redirect should be blocked");
|
||||
+ }
|
||||
+ else {
|
||||
+ ok(false, "sanity: we should never enter that branch (" + event.data + ")");
|
||||
+ }
|
||||
+ testcounter++;
|
||||
+ if (testcounter < 2) {
|
||||
+ return;
|
||||
+ }
|
||||
+ window.removeEventListener("message", receiveMessage);
|
||||
+ SimpleTest.finish();
|
||||
+}
|
||||
+
|
||||
+function startTest() {
|
||||
+ SpecialPowers.pushPrefEnv({
|
||||
+ 'set': [["security.mixed_content.use_hsts", false],
|
||||
+ ["security.mixed_content.send_hsts_priming", false]]
|
||||
+ }, function () {
|
||||
+ let testframe = document.getElementById("testframe");
|
||||
+ testframe.src = PATH + "file_redirect.html";
|
||||
+ });
|
||||
+}
|
||||
+
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
@ -1,181 +0,0 @@
|
||||
commit 44b4458e2d21
|
||||
Author: Emilio Cobos Álvarez <emilio@crisal.io>
|
||||
Date: Mon Sep 25 18:25:29 2017 +0200
|
||||
|
||||
Bug 1402442 - Properly remove display: contents pseudo-frames. r=mats, a=ritu
|
||||
|
||||
MozReview-Commit-ID: 4pjVLQfv3YR
|
||||
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
|
||||
|
||||
--HG--
|
||||
extra : source : faa69ac1c14b79838cc0aac842b470a110542ebd
|
||||
extra : amend_source : 3a76e0123bf3f7d10295000cc44fd8bdddf700df
|
||||
---
|
||||
layout/base/nsCSSFrameConstructor.cpp | 26 +++++++++++++++-------
|
||||
testing/web-platform/meta/MANIFEST.json | 25 +++++++++++++++++++++
|
||||
...dynamic-generated-content-fieldset-001.html.ini | 4 ++++
|
||||
...dynamic-generated-content-fieldset-001-ref.html | 16 +++++++++++++
|
||||
...nts-dynamic-generated-content-fieldset-001.html | 26 ++++++++++++++++++++++
|
||||
5 files changed, 89 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git layout/base/nsCSSFrameConstructor.cpp layout/base/nsCSSFrameConstructor.cpp
|
||||
index 99b1211b399b..4fce3fb381a7 100644
|
||||
--- layout/base/nsCSSFrameConstructor.cpp
|
||||
+++ layout/base/nsCSSFrameConstructor.cpp
|
||||
@@ -1698,6 +1698,17 @@ nsCSSFrameConstructor::NotifyDestroyingFrame(nsIFrame* aFrame)
|
||||
nsFrameManager::NotifyDestroyingFrame(aFrame);
|
||||
}
|
||||
|
||||
+static bool
|
||||
+HasGeneratedContent(const nsIContent* aChild)
|
||||
+{
|
||||
+ if (!aChild->MayHaveAnonymousChildren()) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return nsLayoutUtils::GetBeforeFrame(aChild) ||
|
||||
+ nsLayoutUtils::GetAfterFrame(aChild);
|
||||
+}
|
||||
+
|
||||
struct nsGenConInitializer {
|
||||
nsAutoPtr<nsGenConNode> mNode;
|
||||
nsGenConList* mList;
|
||||
@@ -8642,16 +8653,15 @@ nsCSSFrameConstructor::ContentRemoved(nsIContent* aCo
|
||||
MOZ_ASSERT(!childFrame || !GetDisplayContentsStyleFor(aChild),
|
||||
"display:contents nodes shouldn't have a frame");
|
||||
if (!childFrame && GetDisplayContentsStyleFor(aChild)) {
|
||||
- nsIContent* ancestor = aContainer;
|
||||
- MOZ_ASSERT(ancestor, "display: contents on the root?");
|
||||
- while (!ancestor->GetPrimaryFrame()) {
|
||||
- // FIXME(emilio): Should this use the flattened tree parent instead?
|
||||
- ancestor = ancestor->GetParent();
|
||||
- MOZ_ASSERT(ancestor, "we can't have a display: contents subtree root!");
|
||||
- }
|
||||
+ if (HasGeneratedContent(aChild)) {
|
||||
+ nsIContent* ancestor = aContainer;
|
||||
+ MOZ_ASSERT(ancestor, "display: contents on the root?");
|
||||
+ while (!ancestor->GetPrimaryFrame()) {
|
||||
+ // FIXME(emilio): Should this use the flattened tree parent instead?
|
||||
+ ancestor = ancestor->GetParent();
|
||||
+ MOZ_ASSERT(ancestor, "we can't have a display: contents subtree root!");
|
||||
+ }
|
||||
|
||||
- nsIFrame* ancestorFrame = ancestor->GetPrimaryFrame();
|
||||
- if (ancestorFrame->GetProperty(nsIFrame::GenConProperty())) {
|
||||
*aDidReconstruct = true;
|
||||
LAYOUT_PHASE_TEMP_EXIT();
|
||||
|
||||
diff --git testing/web-platform/meta/MANIFEST.json testing/web-platform/meta/MANIFEST.json
|
||||
index 5f05321c5a70..8aed4a4b5078 100644
|
||||
--- testing/web-platform/meta/MANIFEST.json
|
||||
+++ testing/web-platform/meta/MANIFEST.json
|
||||
@@ -102975,6 +102975,18 @@
|
||||
{}
|
||||
]
|
||||
],
|
||||
+ "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html": [
|
||||
+ [
|
||||
+ "/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html",
|
||||
+ [
|
||||
+ [
|
||||
+ "/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html",
|
||||
+ "=="
|
||||
+ ]
|
||||
+ ],
|
||||
+ {}
|
||||
+ ]
|
||||
+ ],
|
||||
"css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html": [
|
||||
[
|
||||
"/css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html",
|
||||
@@ -227658,6 +227670,11 @@
|
||||
{}
|
||||
]
|
||||
],
|
||||
+ "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html": [
|
||||
+ [
|
||||
+ {}
|
||||
+ ]
|
||||
+ ],
|
||||
"css/css-display-3/display-contents-flex-001-ref.html": [
|
||||
[
|
||||
{}
|
||||
@@ -502880,6 +502897,14 @@
|
||||
"a2d7c9368ed8c01ca06c36646666270e85aee070",
|
||||
"reftest"
|
||||
],
|
||||
+ "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html": [
|
||||
+ "30ec5c8ddacfbfef8434c37ca7a0a766f2bbc89a",
|
||||
+ "support"
|
||||
+ ],
|
||||
+ "css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html": [
|
||||
+ "984bebb3c3b8661aedef4a229848dfa818bb1f4a",
|
||||
+ "reftest"
|
||||
+ ],
|
||||
"css/css-display-3/display-contents-dynamic-inline-flex-001-inline.html": [
|
||||
"40fb07e8ada1530e6835ff2d4e49c5571ffb0baa",
|
||||
"reftest"
|
||||
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
|
||||
new file mode 100644
|
||||
index 000000000000..63c7442a2362
|
||||
--- /dev/null
|
||||
+++ testing/web-platform/meta/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html.ini
|
||||
@@ -0,0 +1,4 @@
|
||||
+[display-contents-dynamic-generated-content-fieldset-001.html]
|
||||
+ type: reftest
|
||||
+ expected:
|
||||
+ if not stylo: FAIL
|
||||
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
|
||||
new file mode 100644
|
||||
index 000000000000..651bc19b83e9
|
||||
--- /dev/null
|
||||
+++ testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001-ref.html
|
||||
@@ -0,0 +1,16 @@
|
||||
+<!doctype html>
|
||||
+<meta charset="utf-8">
|
||||
+<title>CSS Reftest Reference</title>
|
||||
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
+<style>
|
||||
+div {
|
||||
+ display: contents;
|
||||
+ border: 10px solid red;
|
||||
+}
|
||||
+</style>
|
||||
+<p>
|
||||
+ Test passes if there is no red text and no red border.
|
||||
+</p>
|
||||
+<fieldset>
|
||||
+ <div></div>
|
||||
+</fieldset>
|
||||
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
|
||||
new file mode 100644
|
||||
index 000000000000..8f8a0ba47971
|
||||
--- /dev/null
|
||||
+++ testing/web-platform/tests/css/css-display-3/display-contents-dynamic-generated-content-fieldset-001.html
|
||||
@@ -0,0 +1,26 @@
|
||||
+<!doctype html>
|
||||
+<meta charset="utf-8">
|
||||
+<title>CSS Test: Dynamic changes to display: contents generated content in fieldsets.</title>
|
||||
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
|
||||
+<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
|
||||
+<link rel="match" href="display-contents-dynamic-generated-content-fieldset-001-ref.html">
|
||||
+<style>
|
||||
+.after::after {
|
||||
+ content: "FAIL";
|
||||
+ color: red;
|
||||
+}
|
||||
+div {
|
||||
+ display: contents;
|
||||
+ border: 10px solid red;
|
||||
+}
|
||||
+</style>
|
||||
+<p>
|
||||
+ Test passes if there is no red text and no red border.
|
||||
+</p>
|
||||
+<fieldset>
|
||||
+ <div class="after"></div>
|
||||
+</fieldset>
|
||||
+<script>
|
||||
+document.body.offsetHeight;
|
||||
+document.querySelector("div").classList.remove("after");
|
||||
+</script>
|
@ -1,66 +0,0 @@
|
||||
commit 434da479b6e1
|
||||
Author: Jan de Mooij <jdemooij@mozilla.com>
|
||||
Date: Wed Sep 27 14:43:36 2017 +0200
|
||||
|
||||
Bug 1402876 - Remove unnecessary InvalidateCompilerOutputsForScript call. r=nbp, a=sledru
|
||||
|
||||
--HG--
|
||||
extra : source : c1a158ca2b1cfc009cd1545538cacbc4feabc48b
|
||||
---
|
||||
js/src/jit/Ion.cpp | 3 ---
|
||||
js/src/vm/TypeInference.cpp | 12 ------------
|
||||
js/src/vm/TypeInference.h | 4 ----
|
||||
3 files changed, 19 deletions(-)
|
||||
|
||||
diff --git js/src/jit/Ion.cpp js/src/jit/Ion.cpp
|
||||
index ba583fe12297..f205b83d2893 100644
|
||||
--- js/src/jit/Ion.cpp
|
||||
+++ js/src/jit/Ion.cpp
|
||||
@@ -574,9 +574,6 @@ jit::LinkIonScript(JSContext* cx, HandleScript calleeScript)
|
||||
// doesn't has code to handle it after linking happened. So it's
|
||||
// not OK to throw a catchable exception from there.
|
||||
cx->clearPendingException();
|
||||
-
|
||||
- // Reset the TypeZone's compiler output for this script, if any.
|
||||
- InvalidateCompilerOutputsForScript(cx, calleeScript);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git js/src/vm/TypeInference.cpp js/src/vm/TypeInference.cpp
|
||||
index de98bb654fa8..70d6dfc19d20 100644
|
||||
--- js/src/vm/TypeInference.cpp
|
||||
+++ js/src/vm/TypeInference.cpp
|
||||
@@ -1511,18 +1511,6 @@ js::FinishCompilation(JSContext* cx, HandleScript script, CompilerConstraintList
|
||||
return true;
|
||||
}
|
||||
|
||||
-void
|
||||
-js::InvalidateCompilerOutputsForScript(JSContext* cx, HandleScript script)
|
||||
-{
|
||||
- TypeZone& types = cx->zone()->types;
|
||||
- if (types.compilerOutputs) {
|
||||
- for (auto& co : *types.compilerOutputs) {
|
||||
- if (co.script() == script)
|
||||
- co.invalidate();
|
||||
- }
|
||||
- }
|
||||
-}
|
||||
-
|
||||
static void
|
||||
CheckDefinitePropertiesTypeSet(JSContext* cx, TemporaryTypeSet* frozen, StackTypeSet* actual)
|
||||
{
|
||||
diff --git js/src/vm/TypeInference.h js/src/vm/TypeInference.h
|
||||
index df2d496ca879..318c3e813b1a 100644
|
||||
--- js/src/vm/TypeInference.h
|
||||
+++ js/src/vm/TypeInference.h
|
||||
@@ -1299,10 +1299,6 @@ bool
|
||||
FinishCompilation(JSContext* cx, HandleScript script, CompilerConstraintList* constraints,
|
||||
RecompileInfo* precompileInfo, bool* isValidOut);
|
||||
|
||||
-// Reset any CompilerOutput present for a script.
|
||||
-void
|
||||
-InvalidateCompilerOutputsForScript(JSContext* cx, HandleScript script);
|
||||
-
|
||||
// Update the actual types in any scripts queried by constraints with any
|
||||
// speculative types added during the definite properties analysis.
|
||||
void
|
@ -1,40 +0,0 @@
|
||||
commit 6bf098b436b0
|
||||
Author: Gijs Kruitbosch <gijskruitbosch@gmail.com>
|
||||
Date: Mon Sep 25 17:24:26 2017 +0100
|
||||
|
||||
Bug 1402896 - Make the url bar strip javascript even when preceded by control characters. r=mak, a=sledru
|
||||
|
||||
MozReview-Commit-ID: 5ZO8n5lfvnl
|
||||
|
||||
--HG--
|
||||
extra : source : 638e145f6bba437642d55f7b2baf5458df61419a
|
||||
---
|
||||
browser/base/content/browser.js | 2 +-
|
||||
.../content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js | 1 +
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git browser/base/content/browser.js browser/base/content/browser.js
|
||||
index 8b0fb0276d19..b73ab2a3dd7e 100755
|
||||
--- browser/base/content/browser.js
|
||||
+++ browser/base/content/browser.js
|
||||
@@ -6128,7 +6128,7 @@ function stripUnsafeProtocolOnPaste(pasteData) {
|
||||
// LOAD_FLAGS_DISALLOW_INHERIT_PRINCIPAL for those.
|
||||
let changed = false;
|
||||
let pasteDataNoJS = pasteData.replace(/\r?\n/g, "")
|
||||
- .replace(/^(?:\s*javascript:)+/i,
|
||||
+ .replace(/^(?:\W*javascript:)+/i,
|
||||
() => {
|
||||
changed = true;
|
||||
return "";
|
||||
diff --git browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
|
||||
index 6f6682d51688..27129297b0a3 100644
|
||||
--- browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
|
||||
+++ browser/base/content/test/urlbar/browser_removeUnsafeProtocolsFromURLBarPaste.js
|
||||
@@ -7,6 +7,7 @@ var pairs = [
|
||||
["javascript:", ""],
|
||||
["javascript:1+1", "1+1"],
|
||||
["javascript:document.domain", "document.domain"],
|
||||
+ [" \u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009javascript:document.domain", "document.domain"],
|
||||
["java\nscript:foo", "foo"],
|
||||
["http://\nexample.com", "http://example.com"],
|
||||
["http://\nexample.com\n", "http://example.com"],
|
@ -1,51 +0,0 @@
|
||||
commit 6149574dc0f9
|
||||
Author: Gabriele Svelto <gsvelto@mozilla.com>
|
||||
Date: Tue Sep 26 09:35:03 2017 +0200
|
||||
|
||||
Bug 1402966 - Search for libcurl in more paths to support various *BSDs. r=Dexter, a=sledru
|
||||
|
||||
MozReview-Commit-ID: J4ykuSVEa0y
|
||||
|
||||
--HG--
|
||||
extra : source : 4741b93cfdf29517ff8eae863825fdc2ab5bd7bd
|
||||
---
|
||||
.../telemetry/pingsender/pingsender_unix_common.cpp | 16 ++++++++++------
|
||||
1 file changed, 10 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
index ae20f4114193..7817e93e3d1f 100644
|
||||
--- toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
+++ toolkit/components/telemetry/pingsender/pingsender_unix_common.cpp
|
||||
@@ -88,10 +88,19 @@ CurlWrapper::Init()
|
||||
"/usr/lib/i386-linux-gnu", // Debian 32-bit x86
|
||||
"/usr/lib/x86_64-linux-gnu", // Debian 64-bit x86
|
||||
#endif // XP_LINUX
|
||||
+#if !defined(XP_MACOSX) && !defined(XP_LINUX) // Various BSDs
|
||||
+ "/usr/local/lib", // FreeBSD, OpenBSD
|
||||
+ "/usr/pkg/lib", // NetBSD
|
||||
+#endif // !defined(XP_MACOSX) && !defined(XP_LINUX)
|
||||
};
|
||||
|
||||
const char* libcurlNames[] = {
|
||||
-#ifdef XP_LINUX
|
||||
+#if defined(XP_MACOSX)
|
||||
+ // macOS
|
||||
+ "libcurl.dylib",
|
||||
+ "libcurl.4.dylib",
|
||||
+ "libcurl.3.dylib",
|
||||
+#else // Linux, *BSD, ...
|
||||
"libcurl.so",
|
||||
"libcurl.so.4",
|
||||
// Debian gives libcurl a different name when it is built against GnuTLS
|
||||
@@ -100,11 +109,6 @@ CurlWrapper::Init()
|
||||
// Older versions in case we find nothing better
|
||||
"libcurl.so.3",
|
||||
"libcurl-gnutls.so.3", // See above for Debian
|
||||
-#elif defined(XP_MACOSX)
|
||||
- // macOS
|
||||
- "libcurl.dylib",
|
||||
- "libcurl.4.dylib",
|
||||
- "libcurl.3.dylib",
|
||||
#endif
|
||||
};
|
||||
|
@ -1,392 +0,0 @@
|
||||
commit 474ae0592f23
|
||||
Author: Boris Zbarsky <bzbarsky@mit.edu>
|
||||
Date: Thu Sep 28 22:05:43 2017 -0400
|
||||
|
||||
Bug 1403646 - Make sure dead object proxies have the same background-finalization status as the wrapper they replace. r=jonco, a=sledru
|
||||
|
||||
MozReview-Commit-ID: GTKbR0azcRy
|
||||
|
||||
--HG--
|
||||
extra : source : 296e1b4704deb1c6b3f9a6f5fc56688e89c01117
|
||||
---
|
||||
js/src/proxy/DeadObjectProxy.cpp | 204 +++++++++++++++++++++++++++------------
|
||||
js/src/proxy/DeadObjectProxy.h | 13 ++-
|
||||
2 files changed, 156 insertions(+), 61 deletions(-)
|
||||
|
||||
diff --git js/src/proxy/DeadObjectProxy.cpp js/src/proxy/DeadObjectProxy.cpp
|
||||
index 3bd7a405c002..658880a07616 100644
|
||||
--- js/src/proxy/DeadObjectProxy.cpp
|
||||
+++ js/src/proxy/DeadObjectProxy.cpp
|
||||
@@ -20,73 +20,81 @@ ReportDead(JSContext *cx)
|
||||
JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_DEAD_OBJECT);
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::getOwnPropertyDescriptor(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
- MutableHandle<PropertyDescriptor> desc) const
|
||||
+DeadObjectProxy<CC, BF>::getOwnPropertyDescriptor(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
+ MutableHandle<PropertyDescriptor> desc) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::defineProperty(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
- Handle<PropertyDescriptor> desc,
|
||||
- ObjectOpResult& result) const
|
||||
+DeadObjectProxy<CC, BF>::defineProperty(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
+ Handle<PropertyDescriptor> desc,
|
||||
+ ObjectOpResult& result) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::ownPropertyKeys(JSContext* cx, HandleObject wrapper,
|
||||
- AutoIdVector& props) const
|
||||
+DeadObjectProxy<CC, BF>::ownPropertyKeys(JSContext* cx, HandleObject wrapper,
|
||||
+ AutoIdVector& props) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::delete_(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
- ObjectOpResult& result) const
|
||||
+DeadObjectProxy<CC, BF>::delete_(JSContext* cx, HandleObject wrapper, HandleId id,
|
||||
+ ObjectOpResult& result) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::getPrototype(JSContext* cx, HandleObject proxy,
|
||||
- MutableHandleObject protop) const
|
||||
+DeadObjectProxy<CC, BF>::getPrototype(JSContext* cx, HandleObject proxy,
|
||||
+ MutableHandleObject protop) const
|
||||
{
|
||||
protop.set(nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::getPrototypeIfOrdinary(JSContext* cx, HandleObject proxy, bool* isOrdinary,
|
||||
- MutableHandleObject protop) const
|
||||
+DeadObjectProxy<CC, BF>::getPrototypeIfOrdinary(JSContext* cx, HandleObject proxy, bool* isOrdinary,
|
||||
+ MutableHandleObject protop) const
|
||||
{
|
||||
*isOrdinary = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::preventExtensions(JSContext* cx, HandleObject proxy,
|
||||
- ObjectOpResult& result) const
|
||||
+DeadObjectProxy<CC, BF>::preventExtensions(JSContext* cx, HandleObject proxy,
|
||||
+ ObjectOpResult& result) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::isExtensible(JSContext* cx, HandleObject proxy, bool* extensible) const
|
||||
+DeadObjectProxy<CC, BF>::isExtensible(JSContext* cx, HandleObject proxy, bool* extensible) const
|
||||
{
|
||||
// This is kind of meaningless, but dead-object semantics aside,
|
||||
// [[Extensible]] always being true is consistent with other proxy types.
|
||||
@@ -94,95 +102,141 @@ DeadObjectProxy<CC>::isExtensible(JSContext* cx, HandleObject proxy, bool* exten
|
||||
return true;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::call(JSContext* cx, HandleObject wrapper, const CallArgs& args) const
|
||||
+DeadObjectProxy<CC, BF>::call(JSContext* cx, HandleObject wrapper, const CallArgs& args) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::construct(JSContext* cx, HandleObject wrapper, const CallArgs& args) const
|
||||
+DeadObjectProxy<CC, BF>::construct(JSContext* cx, HandleObject wrapper, const CallArgs& args) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::nativeCall(JSContext* cx, IsAcceptableThis test, NativeImpl impl,
|
||||
- const CallArgs& args) const
|
||||
+DeadObjectProxy<CC, BF>::nativeCall(JSContext* cx, IsAcceptableThis test, NativeImpl impl,
|
||||
+ const CallArgs& args) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::hasInstance(JSContext* cx, HandleObject proxy, MutableHandleValue v,
|
||||
- bool* bp) const
|
||||
+DeadObjectProxy<CC, BF>::hasInstance(JSContext* cx, HandleObject proxy, MutableHandleValue v,
|
||||
+ bool* bp) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::getBuiltinClass(JSContext* cx, HandleObject proxy, ESClass* cls) const
|
||||
+DeadObjectProxy<CC, BF>::getBuiltinClass(JSContext* cx, HandleObject proxy, ESClass* cls) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
bool
|
||||
-DeadObjectProxy<CC>::isArray(JSContext* cx, HandleObject obj, JS::IsArrayAnswer* answer) const
|
||||
+DeadObjectProxy<CC, BF>::isArray(JSContext* cx, HandleObject obj, JS::IsArrayAnswer* answer) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return false;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
const char*
|
||||
-DeadObjectProxy<CC>::className(JSContext* cx, HandleObject wrapper) const
|
||||
+DeadObjectProxy<CC, BF>::className(JSContext* cx, HandleObject wrapper) const
|
||||
{
|
||||
return "DeadObject";
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
JSString*
|
||||
-DeadObjectProxy<CC>::fun_toString(JSContext* cx, HandleObject proxy, bool isToSource) const
|
||||
+DeadObjectProxy<CC, BF>::fun_toString(JSContext* cx, HandleObject proxy, bool isToSource) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BF>
|
||||
RegExpShared*
|
||||
-DeadObjectProxy<CC>::regexp_toShared(JSContext* cx, HandleObject proxy) const
|
||||
+DeadObjectProxy<CC, BF>::regexp_toShared(JSContext* cx, HandleObject proxy) const
|
||||
{
|
||||
ReportDead(cx);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <>
|
||||
-const char DeadObjectProxy<DeadProxyNotCallableNotConstructor>::family = 0;
|
||||
+const char DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::family = 0;
|
||||
template <>
|
||||
-const char DeadObjectProxy<DeadProxyNotCallableIsConstructor>::family = 0;
|
||||
+const char DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::family = 0;
|
||||
template <>
|
||||
-const char DeadObjectProxy<DeadProxyIsCallableNotConstructor>::family = 0;
|
||||
+const char DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::family = 0;
|
||||
template <>
|
||||
-const char DeadObjectProxy<DeadProxyIsCallableIsConstructor>::family = 0;
|
||||
+const char DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::family = 0;
|
||||
+template <>
|
||||
+const char DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::family = 0;
|
||||
+template <>
|
||||
+const char DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::family = 0;
|
||||
+template <>
|
||||
+const char DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::family = 0;
|
||||
+template <>
|
||||
+const char DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::family = 0;
|
||||
|
||||
bool
|
||||
js::IsDeadProxyObject(JSObject* obj)
|
||||
{
|
||||
- return IsDerivedProxyObject(obj, DeadObjectProxy<DeadProxyNotCallableNotConstructor>::singleton()) ||
|
||||
- IsDerivedProxyObject(obj, DeadObjectProxy<DeadProxyIsCallableIsConstructor>::singleton()) ||
|
||||
- IsDerivedProxyObject(obj, DeadObjectProxy<DeadProxyIsCallableNotConstructor>::singleton()) ||
|
||||
- IsDerivedProxyObject(obj, DeadObjectProxy<DeadProxyNotCallableIsConstructor>::singleton());
|
||||
+ return
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton()) ||
|
||||
+ IsDerivedProxyObject(obj,
|
||||
+ DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton());
|
||||
}
|
||||
|
||||
|
||||
@@ -190,19 +244,48 @@ const BaseProxyHandler*
|
||||
js::SelectDeadProxyHandler(ProxyObject* obj)
|
||||
{
|
||||
// When nuking scripted proxies, isCallable and isConstructor values for
|
||||
- // the proxy needs to be preserved.
|
||||
+ // the proxy needs to be preserved. So does background-finalization status.
|
||||
uint32_t callable = obj->handler()->isCallable(obj);
|
||||
uint32_t constructor = obj->handler()->isConstructor(obj);
|
||||
+ bool finalizeInBackground = obj->handler()->finalizeInBackground(obj->private_());
|
||||
|
||||
if (callable) {
|
||||
- if (constructor)
|
||||
- return DeadObjectProxy<DeadProxyIsCallableIsConstructor>::singleton();
|
||||
- return DeadObjectProxy<DeadProxyIsCallableNotConstructor>::singleton();
|
||||
+ if (constructor) {
|
||||
+ if (finalizeInBackground) {
|
||||
+ return DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton();
|
||||
+ } else {
|
||||
+ return DeadObjectProxy<DeadProxyIsCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ if (finalizeInBackground) {
|
||||
+ return DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton();
|
||||
+ }
|
||||
+
|
||||
+ return DeadObjectProxy<DeadProxyIsCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton();
|
||||
+ }
|
||||
+
|
||||
+ if (constructor) {
|
||||
+ if (finalizeInBackground) {
|
||||
+ return DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton();
|
||||
+ }
|
||||
+
|
||||
+ return DeadObjectProxy<DeadProxyNotCallableIsConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton();
|
||||
+ }
|
||||
+
|
||||
+ if (finalizeInBackground) {
|
||||
+ return DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton();
|
||||
}
|
||||
|
||||
- if (constructor)
|
||||
- return DeadObjectProxy<DeadProxyNotCallableIsConstructor>::singleton();
|
||||
- return DeadObjectProxy<DeadProxyNotCallableNotConstructor>::singleton();
|
||||
+ return DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::No>::singleton();
|
||||
}
|
||||
|
||||
JSObject*
|
||||
@@ -214,7 +297,8 @@ js::NewDeadProxyObject(JSContext* cx, JSObject* origObj)
|
||||
if (origObj && origObj->is<ProxyObject>())
|
||||
handler = SelectDeadProxyHandler(&origObj->as<ProxyObject>());
|
||||
else
|
||||
- handler = DeadObjectProxy<DeadProxyNotCallableNotConstructor>::singleton();
|
||||
+ handler = DeadObjectProxy<DeadProxyNotCallableNotConstructor,
|
||||
+ DeadProxyBackgroundFinalized::Yes>::singleton();
|
||||
|
||||
return NewProxyObject(cx, handler, NullHandleValue, nullptr, ProxyOptions());
|
||||
}
|
||||
diff --git js/src/proxy/DeadObjectProxy.h js/src/proxy/DeadObjectProxy.h
|
||||
index 42f21288d0e3..f29c972cf10a 100644
|
||||
--- js/src/proxy/DeadObjectProxy.h
|
||||
+++ js/src/proxy/DeadObjectProxy.h
|
||||
@@ -21,7 +21,14 @@ enum DeadProxyIsCallableIsConstructorOption
|
||||
DeadProxyIsCallableIsConstructor
|
||||
};
|
||||
|
||||
-template <DeadProxyIsCallableIsConstructorOption CC>
|
||||
+enum class DeadProxyBackgroundFinalized
|
||||
+{
|
||||
+ Yes,
|
||||
+ No
|
||||
+};
|
||||
+
|
||||
+template <DeadProxyIsCallableIsConstructorOption CC,
|
||||
+ DeadProxyBackgroundFinalized BackgroundFinalized>
|
||||
class DeadObjectProxy : public BaseProxyHandler
|
||||
{
|
||||
public:
|
||||
@@ -70,6 +77,10 @@ class DeadObjectProxy : public BaseProxyHandler
|
||||
return CC == DeadProxyIsCallableIsConstructor || CC == DeadProxyNotCallableIsConstructor;
|
||||
}
|
||||
|
||||
+ virtual bool finalizeInBackground(const JS::Value& priv) const override {
|
||||
+ return BackgroundFinalized == DeadProxyBackgroundFinalized::Yes;
|
||||
+ }
|
||||
+
|
||||
static const DeadObjectProxy* singleton() {
|
||||
static DeadObjectProxy singleton;
|
||||
return &singleton;
|
@ -1,299 +0,0 @@
|
||||
commit 5647dde295f4
|
||||
Author: Emilio Cobos Álvarez <emilio@crisal.io>
|
||||
Date: Wed Oct 4 11:36:20 2017 +0200
|
||||
|
||||
Bug 1404324 - Use the placeholder state to remove out-of-flows that aren't real descendants of the destruction root. r=bz, a=ritu
|
||||
|
||||
Using the style of the frame can mess things up when we reparent them due to
|
||||
::first-line before removing them.
|
||||
|
||||
MozReview-Commit-ID: 3Dt0wF2XRAH
|
||||
|
||||
--HG--
|
||||
extra : source : 5a034cdb513208dd19adf0babf30ee734968a78f
|
||||
extra : histedit_source : 4cd958939c5a76e013695e931d721454268a0dc7%2C96bdeda302c567493c7db5105f306595d25332e1
|
||||
---
|
||||
layout/base/nsCSSFrameConstructor.cpp | 8 +++---
|
||||
layout/base/nsLayoutUtils.cpp | 46 +++------------------------------
|
||||
layout/generic/nsPlaceholderFrame.cpp | 27 ++++++++++++++++---
|
||||
layout/generic/nsPlaceholderFrame.h | 21 ++++++++-------
|
||||
layout/style/crashtests/1404324-1.html | 12 +++++++++
|
||||
layout/style/crashtests/1404324-2.html | 10 +++++++
|
||||
layout/style/crashtests/1404324-3.html | 14 ++++++++++
|
||||
layout/style/crashtests/crashtests.list | 3 +++
|
||||
8 files changed, 83 insertions(+), 58 deletions(-)
|
||||
|
||||
diff --git layout/base/nsCSSFrameConstructor.cpp layout/base/nsCSSFrameConstructor.cpp
|
||||
index c840416fd6a7..99b1211b399b 100644
|
||||
--- layout/base/nsCSSFrameConstructor.cpp
|
||||
+++ layout/base/nsCSSFrameConstructor.cpp
|
||||
@@ -1260,8 +1260,10 @@ nsFrameConstructorState::GetOutOfFlowFrameItems(nsIFrame* aNewFrame,
|
||||
if (disp->mTopLayer != NS_STYLE_TOP_LAYER_NONE) {
|
||||
*aPlaceholderType = PLACEHOLDER_FOR_TOPLAYER;
|
||||
if (disp->mPosition == NS_STYLE_POSITION_FIXED) {
|
||||
+ *aPlaceholderType |= PLACEHOLDER_FOR_FIXEDPOS;
|
||||
return &mTopLayerFixedItems;
|
||||
}
|
||||
+ *aPlaceholderType |= PLACEHOLDER_FOR_ABSPOS;
|
||||
return &mTopLayerAbsoluteItems;
|
||||
}
|
||||
if (disp->mPosition == NS_STYLE_POSITION_ABSOLUTE) {
|
||||
@@ -1303,11 +1305,11 @@ nsFrameConstructorState::ConstructBackdropFrameFor(nsIContent* aContent,
|
||||
nsAbsoluteItems* frameItems = GetOutOfFlowFrameItems(backdropFrame,
|
||||
true, true, false,
|
||||
&placeholderType);
|
||||
- MOZ_ASSERT(placeholderType == PLACEHOLDER_FOR_TOPLAYER);
|
||||
+ MOZ_ASSERT(placeholderType & PLACEHOLDER_FOR_TOPLAYER);
|
||||
|
||||
nsIFrame* placeholder = nsCSSFrameConstructor::
|
||||
CreatePlaceholderFrameFor(mPresShell, aContent, backdropFrame,
|
||||
- frame, nullptr, PLACEHOLDER_FOR_TOPLAYER);
|
||||
+ frame, nullptr, placeholderType);
|
||||
nsFrameList temp(placeholder, placeholder);
|
||||
frame->SetInitialChildList(nsIFrame::kBackdropList, temp);
|
||||
|
||||
@@ -1361,7 +1363,7 @@ nsFrameConstructorState::AddChild(nsIFrame* aNewFrame,
|
||||
// Add the placeholder frame to the flow
|
||||
aFrameItems.AddChild(placeholderFrame);
|
||||
|
||||
- if (placeholderType == PLACEHOLDER_FOR_TOPLAYER) {
|
||||
+ if (placeholderType & PLACEHOLDER_FOR_TOPLAYER) {
|
||||
ConstructBackdropFrameFor(aContent, aNewFrame);
|
||||
}
|
||||
}
|
||||
diff --git layout/base/nsLayoutUtils.cpp layout/base/nsLayoutUtils.cpp
|
||||
index cb010c0a1a80..94ead9830c25 100644
|
||||
--- layout/base/nsLayoutUtils.cpp
|
||||
+++ layout/base/nsLayoutUtils.cpp
|
||||
@@ -1525,6 +1525,8 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
|
||||
{
|
||||
nsIFrame::ChildListID id = nsIFrame::kPrincipalList;
|
||||
|
||||
+ MOZ_DIAGNOSTIC_ASSERT(!(aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW));
|
||||
+
|
||||
if (aChildFrame->GetStateBits() & NS_FRAME_IS_OVERFLOW_CONTAINER) {
|
||||
nsIFrame* pif = aChildFrame->GetPrevInFlow();
|
||||
if (pif->GetParent() == aChildFrame->GetParent()) {
|
||||
@@ -1533,35 +1535,6 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
|
||||
else {
|
||||
id = nsIFrame::kOverflowContainersList;
|
||||
}
|
||||
- }
|
||||
- // See if the frame is moved out of the flow
|
||||
- else if (aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW) {
|
||||
- // Look at the style information to tell
|
||||
- const nsStyleDisplay* disp = aChildFrame->StyleDisplay();
|
||||
-
|
||||
- if (NS_STYLE_POSITION_ABSOLUTE == disp->mPosition) {
|
||||
- id = nsIFrame::kAbsoluteList;
|
||||
- } else if (NS_STYLE_POSITION_FIXED == disp->mPosition) {
|
||||
- if (nsLayoutUtils::IsReallyFixedPos(aChildFrame)) {
|
||||
- id = nsIFrame::kFixedList;
|
||||
- } else {
|
||||
- id = nsIFrame::kAbsoluteList;
|
||||
- }
|
||||
-#ifdef MOZ_XUL
|
||||
- } else if (StyleDisplay::MozPopup == disp->mDisplay) {
|
||||
- // Out-of-flows that are DISPLAY_POPUP must be kids of the root popup set
|
||||
-#ifdef DEBUG
|
||||
- nsIFrame* parent = aChildFrame->GetParent();
|
||||
- NS_ASSERTION(parent && parent->IsPopupSetFrame(), "Unexpected parent");
|
||||
-#endif // DEBUG
|
||||
-
|
||||
- id = nsIFrame::kPopupList;
|
||||
-#endif // MOZ_XUL
|
||||
- } else {
|
||||
- NS_ASSERTION(aChildFrame->IsFloating(), "not a floated frame");
|
||||
- id = nsIFrame::kFloatList;
|
||||
- }
|
||||
-
|
||||
} else {
|
||||
LayoutFrameType childType = aChildFrame->Type();
|
||||
if (LayoutFrameType::MenuPopup == childType) {
|
||||
@@ -1596,19 +1569,8 @@ nsLayoutUtils::GetChildListNameFor(nsIFrame* aChildFrame)
|
||||
nsContainerFrame* parent = aChildFrame->GetParent();
|
||||
bool found = parent->GetChildList(id).ContainsFrame(aChildFrame);
|
||||
if (!found) {
|
||||
- if (!(aChildFrame->GetStateBits() & NS_FRAME_OUT_OF_FLOW)) {
|
||||
- found = parent->GetChildList(nsIFrame::kOverflowList)
|
||||
- .ContainsFrame(aChildFrame);
|
||||
- }
|
||||
- else if (aChildFrame->IsFloating()) {
|
||||
- found = parent->GetChildList(nsIFrame::kOverflowOutOfFlowList)
|
||||
- .ContainsFrame(aChildFrame);
|
||||
- if (!found) {
|
||||
- found = parent->GetChildList(nsIFrame::kPushedFloatsList)
|
||||
- .ContainsFrame(aChildFrame);
|
||||
- }
|
||||
- }
|
||||
- // else it's positioned and should have been on the 'id' child list.
|
||||
+ found = parent->GetChildList(nsIFrame::kOverflowList)
|
||||
+ .ContainsFrame(aChildFrame);
|
||||
NS_POSTCONDITION(found, "not in child list");
|
||||
}
|
||||
#endif
|
||||
diff --git layout/generic/nsPlaceholderFrame.cpp layout/generic/nsPlaceholderFrame.cpp
|
||||
index 7da2582ae526..4b2e1bf84b36 100644
|
||||
--- layout/generic/nsPlaceholderFrame.cpp
|
||||
+++ layout/generic/nsPlaceholderFrame.cpp
|
||||
@@ -25,9 +25,9 @@ using namespace mozilla::gfx;
|
||||
|
||||
nsIFrame*
|
||||
NS_NewPlaceholderFrame(nsIPresShell* aPresShell, nsStyleContext* aContext,
|
||||
- nsFrameState aTypeBit)
|
||||
+ nsFrameState aTypeBits)
|
||||
{
|
||||
- return new (aPresShell) nsPlaceholderFrame(aContext, aTypeBit);
|
||||
+ return new (aPresShell) nsPlaceholderFrame(aContext, aTypeBits);
|
||||
}
|
||||
|
||||
NS_IMPL_FRAMEARENA_HELPERS(nsPlaceholderFrame)
|
||||
@@ -155,6 +155,26 @@ nsPlaceholderFrame::Reflow(nsPresContext* aPresContext,
|
||||
NS_FRAME_SET_TRUNCATION(aStatus, aReflowInput, aDesiredSize);
|
||||
}
|
||||
|
||||
+static nsIFrame::ChildListID
|
||||
+ChildListIDForOutOfFlow(nsFrameState aPlaceholderState, nsIFrame* aChild)
|
||||
+{
|
||||
+ if (aPlaceholderState & PLACEHOLDER_FOR_FLOAT) {
|
||||
+ return nsIFrame::kFloatList;
|
||||
+ }
|
||||
+ if (aPlaceholderState & PLACEHOLDER_FOR_POPUP) {
|
||||
+ return nsIFrame::kPopupList;
|
||||
+ }
|
||||
+ if (aPlaceholderState & PLACEHOLDER_FOR_FIXEDPOS) {
|
||||
+ return nsLayoutUtils::IsReallyFixedPos(aChild)
|
||||
+ ? nsIFrame::kFixedList : nsIFrame::kAbsoluteList;
|
||||
+ }
|
||||
+ if (aPlaceholderState & PLACEHOLDER_FOR_ABSPOS) {
|
||||
+ return nsIFrame::kAbsoluteList;
|
||||
+ }
|
||||
+ MOZ_DIAGNOSTIC_ASSERT(false, "unknown list");
|
||||
+ return nsIFrame::kFloatList;
|
||||
+}
|
||||
+
|
||||
void
|
||||
nsPlaceholderFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
||||
{
|
||||
@@ -162,12 +182,13 @@ nsPlaceholderFrame::DestroyFrom(nsIFrame* aDestructRoot)
|
||||
if (oof) {
|
||||
mOutOfFlowFrame = nullptr;
|
||||
oof->DeleteProperty(nsIFrame::PlaceholderFrameProperty());
|
||||
+
|
||||
// If aDestructRoot is not an ancestor of the out-of-flow frame,
|
||||
// then call RemoveFrame on it here.
|
||||
// Also destroy it here if it's a popup frame. (Bug 96291)
|
||||
if ((GetStateBits() & PLACEHOLDER_FOR_POPUP) ||
|
||||
!nsLayoutUtils::IsProperAncestorFrame(aDestructRoot, oof)) {
|
||||
- ChildListID listId = nsLayoutUtils::GetChildListNameFor(oof);
|
||||
+ ChildListID listId = ChildListIDForOutOfFlow(GetStateBits(), oof);
|
||||
nsFrameManager* fm = PresContext()->GetPresShell()->FrameManager();
|
||||
fm->RemoveFrame(listId, oof);
|
||||
}
|
||||
diff --git layout/generic/nsPlaceholderFrame.h layout/generic/nsPlaceholderFrame.h
|
||||
index e270c76cdd31..2af9b4ccbc93 100644
|
||||
--- layout/generic/nsPlaceholderFrame.h
|
||||
+++ layout/generic/nsPlaceholderFrame.h
|
||||
@@ -40,7 +40,7 @@
|
||||
|
||||
nsIFrame* NS_NewPlaceholderFrame(nsIPresShell* aPresShell,
|
||||
nsStyleContext* aContext,
|
||||
- nsFrameState aTypeBit);
|
||||
+ nsFrameState aTypeBits);
|
||||
|
||||
#define PLACEHOLDER_TYPE_MASK (PLACEHOLDER_FOR_FLOAT | \
|
||||
PLACEHOLDER_FOR_ABSPOS | \
|
||||
@@ -65,18 +65,19 @@ public:
|
||||
*/
|
||||
friend nsIFrame* NS_NewPlaceholderFrame(nsIPresShell* aPresShell,
|
||||
nsStyleContext* aContext,
|
||||
- nsFrameState aTypeBit);
|
||||
- nsPlaceholderFrame(nsStyleContext* aContext, nsFrameState aTypeBit)
|
||||
+ nsFrameState aTypeBits);
|
||||
+ nsPlaceholderFrame(nsStyleContext* aContext, nsFrameState aTypeBits)
|
||||
: nsFrame(aContext, kClassID)
|
||||
, mOutOfFlowFrame(nullptr)
|
||||
{
|
||||
- NS_PRECONDITION(aTypeBit == PLACEHOLDER_FOR_FLOAT ||
|
||||
- aTypeBit == PLACEHOLDER_FOR_ABSPOS ||
|
||||
- aTypeBit == PLACEHOLDER_FOR_FIXEDPOS ||
|
||||
- aTypeBit == PLACEHOLDER_FOR_POPUP ||
|
||||
- aTypeBit == PLACEHOLDER_FOR_TOPLAYER,
|
||||
- "Unexpected type bit");
|
||||
- AddStateBits(aTypeBit);
|
||||
+ MOZ_ASSERT(aTypeBits == PLACEHOLDER_FOR_FLOAT ||
|
||||
+ aTypeBits == PLACEHOLDER_FOR_ABSPOS ||
|
||||
+ aTypeBits == PLACEHOLDER_FOR_FIXEDPOS ||
|
||||
+ aTypeBits == PLACEHOLDER_FOR_POPUP ||
|
||||
+ aTypeBits == (PLACEHOLDER_FOR_TOPLAYER | PLACEHOLDER_FOR_ABSPOS) ||
|
||||
+ aTypeBits == (PLACEHOLDER_FOR_TOPLAYER | PLACEHOLDER_FOR_FIXEDPOS),
|
||||
+ "Unexpected type bit");
|
||||
+ AddStateBits(aTypeBits);
|
||||
}
|
||||
|
||||
// Get/Set the associated out of flow frame
|
||||
diff --git layout/style/crashtests/1404324-1.html layout/style/crashtests/1404324-1.html
|
||||
new file mode 100644
|
||||
index 000000000000..574a5437cb1b
|
||||
--- /dev/null
|
||||
+++ layout/style/crashtests/1404324-1.html
|
||||
@@ -0,0 +1,12 @@
|
||||
+<style></style>
|
||||
+<script>
|
||||
+document.documentElement.className = 'c1'
|
||||
+o1 = document.createElement('form')
|
||||
+o2 = document.createElement('e')
|
||||
+o1.className = 'c2'
|
||||
+document.documentElement.appendChild(o1)
|
||||
+document.documentElement.appendChild(o2)
|
||||
+document.styleSheets[0].insertRule('.c1:first-line, .c2 { position:fixed', 0);
|
||||
+document.documentElement.getBoundingClientRect()
|
||||
+document.styleSheets[0].cssRules[0].style.position = 'relative'
|
||||
+</script>
|
||||
diff --git layout/style/crashtests/1404324-2.html layout/style/crashtests/1404324-2.html
|
||||
new file mode 100644
|
||||
index 000000000000..797347d5c058
|
||||
--- /dev/null
|
||||
+++ layout/style/crashtests/1404324-2.html
|
||||
@@ -0,0 +1,10 @@
|
||||
+<style>
|
||||
+ del, *::first-line {
|
||||
+ position: absolute;
|
||||
+ }
|
||||
+</style>
|
||||
+<del></del>
|
||||
+<script>
|
||||
+ document.documentElement.offsetTop;
|
||||
+ document.styleSheets[0].cssRules[0].style.position = 'sticky'
|
||||
+</script>
|
||||
diff --git layout/style/crashtests/1404324-3.html layout/style/crashtests/1404324-3.html
|
||||
new file mode 100644
|
||||
index 000000000000..3b06f12a2bf6
|
||||
--- /dev/null
|
||||
+++ layout/style/crashtests/1404324-3.html
|
||||
@@ -0,0 +1,14 @@
|
||||
+<style>
|
||||
+del {
|
||||
+ position: absolute;
|
||||
+}
|
||||
+
|
||||
+body::first-line {
|
||||
+ color: red;
|
||||
+}
|
||||
+</style>
|
||||
+<del></del>
|
||||
+<script>
|
||||
+ document.documentElement.offsetTop;
|
||||
+ document.styleSheets[0].cssRules[0].style.position = 'sticky'
|
||||
+</script>
|
||||
diff --git layout/style/crashtests/crashtests.list layout/style/crashtests/crashtests.list
|
||||
index be9a46c52bfa..5eaba6935ee2 100644
|
||||
--- layout/style/crashtests/crashtests.list
|
||||
+++ layout/style/crashtests/crashtests.list
|
||||
@@ -238,3 +238,6 @@ load 1403615.html
|
||||
load 1387481-1.html
|
||||
load 1387499.html
|
||||
load 1391577.html
|
||||
+asserts-if(stylo,1) load 1404324-1.html # bug 1405605
|
||||
+load 1404324-2.html
|
||||
+load 1404324-3.html
|
@ -1,111 +0,0 @@
|
||||
commit 3eff0850dd67
|
||||
Author: Jan de Mooij <jdemooij@mozilla.com>
|
||||
Date: Thu Oct 26 16:15:35 2017 +0200
|
||||
|
||||
Bug 1404636 - Special-case typed arrays in PropertyReadNeedsTypeBarrier. r=bhackett, a=lizzard
|
||||
|
||||
--HG--
|
||||
extra : source : 74d76655c9192b20dc69ddfa40c38e65fa9a47e3
|
||||
---
|
||||
js/src/jit/IonBuilder.cpp | 26 --------------------------
|
||||
js/src/jit/MIR.cpp | 8 ++++++++
|
||||
js/src/jit/MIR.h | 23 +++++++++++++++++++++++
|
||||
3 files changed, 31 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git js/src/jit/IonBuilder.cpp js/src/jit/IonBuilder.cpp
|
||||
index 0f78e9d5d3b7..f0ef380da2bc 100644
|
||||
--- js/src/jit/IonBuilder.cpp
|
||||
+++ js/src/jit/IonBuilder.cpp
|
||||
@@ -7825,9 +7825,6 @@ IonBuilder::getElemTryTypedObject(bool* emitted, MDefinition* obj, MDefinition*
|
||||
MOZ_CRASH("Bad kind");
|
||||
}
|
||||
|
||||
-static MIRType
|
||||
-MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble);
|
||||
-
|
||||
bool
|
||||
IonBuilder::checkTypedObjectIndexInBounds(uint32_t elemSize,
|
||||
MDefinition* obj,
|
||||
@@ -8793,29 +8790,6 @@ IonBuilder::convertShiftToMaskForStaticTypedArray(MDefinition* id,
|
||||
return ptr;
|
||||
}
|
||||
|
||||
-static MIRType
|
||||
-MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble)
|
||||
-{
|
||||
- switch (arrayType) {
|
||||
- case Scalar::Int8:
|
||||
- case Scalar::Uint8:
|
||||
- case Scalar::Uint8Clamped:
|
||||
- case Scalar::Int16:
|
||||
- case Scalar::Uint16:
|
||||
- case Scalar::Int32:
|
||||
- return MIRType::Int32;
|
||||
- case Scalar::Uint32:
|
||||
- return observedDouble ? MIRType::Double : MIRType::Int32;
|
||||
- case Scalar::Float32:
|
||||
- return MIRType::Float32;
|
||||
- case Scalar::Float64:
|
||||
- return MIRType::Double;
|
||||
- default:
|
||||
- break;
|
||||
- }
|
||||
- MOZ_CRASH("Unknown typed array type");
|
||||
-}
|
||||
-
|
||||
AbortReasonOr<Ok>
|
||||
IonBuilder::jsop_getelem_typed(MDefinition* obj, MDefinition* index,
|
||||
Scalar::Type arrayType)
|
||||
diff --git js/src/jit/MIR.cpp js/src/jit/MIR.cpp
|
||||
index bac5948bfc21..ef286b7d546c 100644
|
||||
--- js/src/jit/MIR.cpp
|
||||
+++ js/src/jit/MIR.cpp
|
||||
@@ -6235,6 +6235,14 @@ PropertyReadNeedsTypeBarrier(CompilerConstraintList* constraints,
|
||||
return BarrierKind::TypeSet;
|
||||
}
|
||||
|
||||
+ if (!name && IsTypedArrayClass(key->clasp())) {
|
||||
+ Scalar::Type arrayType = Scalar::Type(key->clasp() - &TypedArrayObject::classes[0]);
|
||||
+ MIRType type = MIRTypeForTypedArrayRead(arrayType, true);
|
||||
+ if (observed->mightBeMIRType(type))
|
||||
+ return BarrierKind::NoBarrier;
|
||||
+ return BarrierKind::TypeSet;
|
||||
+ }
|
||||
+
|
||||
jsid id = name ? NameToId(name) : JSID_VOID;
|
||||
HeapTypeSetKey property = key->property(id);
|
||||
if (property.maybeTypes()) {
|
||||
diff --git js/src/jit/MIR.h js/src/jit/MIR.h
|
||||
index d6d895b2caf2..16824b3f67ad 100644
|
||||
--- js/src/jit/MIR.h
|
||||
+++ js/src/jit/MIR.h
|
||||
@@ -15107,6 +15107,29 @@ ArrayPrototypeHasIndexedProperty(IonBuilder* builder, JSScript* script);
|
||||
AbortReasonOr<bool>
|
||||
TypeCanHaveExtraIndexedProperties(IonBuilder* builder, TemporaryTypeSet* types);
|
||||
|
||||
+inline MIRType
|
||||
+MIRTypeForTypedArrayRead(Scalar::Type arrayType, bool observedDouble)
|
||||
+{
|
||||
+ switch (arrayType) {
|
||||
+ case Scalar::Int8:
|
||||
+ case Scalar::Uint8:
|
||||
+ case Scalar::Uint8Clamped:
|
||||
+ case Scalar::Int16:
|
||||
+ case Scalar::Uint16:
|
||||
+ case Scalar::Int32:
|
||||
+ return MIRType::Int32;
|
||||
+ case Scalar::Uint32:
|
||||
+ return observedDouble ? MIRType::Double : MIRType::Int32;
|
||||
+ case Scalar::Float32:
|
||||
+ return MIRType::Float32;
|
||||
+ case Scalar::Float64:
|
||||
+ return MIRType::Double;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+ MOZ_CRASH("Unknown typed array type");
|
||||
+}
|
||||
+
|
||||
} // namespace jit
|
||||
} // namespace js
|
||||
|
@ -1,170 +0,0 @@
|
||||
commit 2c8bf0ecbc5d
|
||||
Author: Andrea Marchesini <amarchesini@mozilla.com>
|
||||
Date: Wed Oct 4 14:18:19 2017 +0200
|
||||
|
||||
Bug 1404910 - WebSocket should consider the corrent top-level window principal. r=smaug, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : c543c0a50db700883b57c052710c97b5ef731e1f
|
||||
---
|
||||
dom/base/WebSocket.cpp | 15 ++++---
|
||||
dom/base/test/iframe_webSocket_sandbox.html | 65 +++++++++++++++++++++++++++++
|
||||
dom/base/test/mochitest.ini | 3 ++
|
||||
dom/base/test/test_webSocket_sandbox.html | 34 +++++++++++++++
|
||||
4 files changed, 109 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git dom/base/WebSocket.cpp dom/base/WebSocket.cpp
|
||||
index dc2c1c70107b..982c67cd2abd 100644
|
||||
--- dom/base/WebSocket.cpp
|
||||
+++ dom/base/WebSocket.cpp
|
||||
@@ -1666,18 +1666,17 @@ WebSocketImpl::Init(JSContext* aCx,
|
||||
nsCOMPtr<nsPIDOMWindowInner> innerWindow;
|
||||
|
||||
while (true) {
|
||||
- if (principal) {
|
||||
- bool isNullPrincipal = true;
|
||||
- isNullPrincipal = principal->GetIsNullPrincipal();
|
||||
- if (isNullPrincipal || nsContentUtils::IsSystemPrincipal(principal)) {
|
||||
- break;
|
||||
- }
|
||||
+ if (principal && !principal->GetIsNullPrincipal()) {
|
||||
+ break;
|
||||
}
|
||||
|
||||
if (!innerWindow) {
|
||||
innerWindow = do_QueryInterface(globalObject);
|
||||
- if (NS_WARN_IF(!innerWindow)) {
|
||||
- return NS_ERROR_DOM_SECURITY_ERR;
|
||||
+ if (!innerWindow) {
|
||||
+ // If we are in a XPConnect sandbox or in a JS component,
|
||||
+ // innerWindow will be null. There is nothing on top of this to be
|
||||
+ // considered.
|
||||
+ break;
|
||||
}
|
||||
}
|
||||
|
||||
diff --git dom/base/test/iframe_webSocket_sandbox.html dom/base/test/iframe_webSocket_sandbox.html
|
||||
new file mode 100644
|
||||
index 000000000000..d889a79b05da
|
||||
--- /dev/null
|
||||
+++ dom/base/test/iframe_webSocket_sandbox.html
|
||||
@@ -0,0 +1,65 @@
|
||||
+<html><body>
|
||||
+<iframe id="frame" sandbox="allow-scripts allow-popups"></iframe>
|
||||
+<script type="application/javascript;version=1.8">
|
||||
+onmessage = function(e) {
|
||||
+ parent.postMessage(e.data, '*');
|
||||
+}
|
||||
+
|
||||
+var ifr = document.getElementById('frame');
|
||||
+
|
||||
+if (location.search == '?nested') {
|
||||
+ var url = new URL(location);
|
||||
+ url.search = "";
|
||||
+ ifr.src = url.href;
|
||||
+} else if (location.search == '?popup') {
|
||||
+ var url = new URL(location);
|
||||
+ url.search = "?opener";
|
||||
+
|
||||
+ ifr.srcdoc = "<html><script>" +
|
||||
+ "window.open('" + url.href + "', 'foobar');" +
|
||||
+ "onmessage = function(e) { " +
|
||||
+ " parent.postMessage(e.data, '*'); " +
|
||||
+ "}" +
|
||||
+ "</scr" + "ipt></html>";
|
||||
+} else if (location.search == '?opener') {
|
||||
+ try{
|
||||
+ var socket = new WebSocket('ws://mochi.test:8888/tests/dom/base/test/file_websocket_basic');
|
||||
+ socket.onerror = function(e) {
|
||||
+ opener.postMessage('WS onerror', '*');
|
||||
+ close();
|
||||
+ };
|
||||
+ socket.onopen = function(event) {
|
||||
+ opener.postMessage('WS onopen', '*');
|
||||
+ close();
|
||||
+ };
|
||||
+ } catch(e) {
|
||||
+ if (e.name == 'SecurityError') {
|
||||
+ opener.postMessage('WS Throws!', '*');
|
||||
+ } else {
|
||||
+ opener.postMessage('WS Throws something else!', '*');
|
||||
+ }
|
||||
+ close();
|
||||
+ }
|
||||
+} else {
|
||||
+ ifr.srcdoc = `
|
||||
+ <html><script>
|
||||
+ try{
|
||||
+ var socket = new WebSocket('ws://mochi.test:8888/tests/dom/base/test/file_websocket_basic');
|
||||
+ socket.onerror = function(e) {
|
||||
+ parent.postMessage('WS onerror', '*');
|
||||
+ };
|
||||
+ socket.onopen = function(event) {
|
||||
+ parent.postMessage('WS onopen', '*');
|
||||
+ };
|
||||
+ } catch(e) {
|
||||
+ if (e.name == 'SecurityError') {
|
||||
+ parent.postMessage('WS Throws!', '*');
|
||||
+ } else {
|
||||
+ parent.postMessage('WS Throws something else!', '*');
|
||||
+ }
|
||||
+ }
|
||||
+ </scr`+`ipt>
|
||||
+ </html>`;
|
||||
+}
|
||||
+</script>
|
||||
+</body></html>
|
||||
diff --git dom/base/test/mochitest.ini dom/base/test/mochitest.ini
|
||||
index 670dd5ae0a06..5d59fe1ea7b8 100644
|
||||
--- dom/base/test/mochitest.ini
|
||||
+++ dom/base/test/mochitest.ini
|
||||
@@ -804,6 +804,9 @@ skip-if = toolkit == 'android'
|
||||
skip-if = toolkit == 'android'
|
||||
[test_websocket_permessage_deflate.html]
|
||||
skip-if = toolkit == 'android'
|
||||
+[test_webSocket_sandbox.html]
|
||||
+skip-if = toolkit == 'android'
|
||||
+support-files = iframe_webSocket_sandbox.html
|
||||
[test_websocket1.html]
|
||||
skip-if = toolkit == 'android'
|
||||
[test_websocket2.html]
|
||||
diff --git dom/base/test/test_webSocket_sandbox.html dom/base/test/test_webSocket_sandbox.html
|
||||
new file mode 100644
|
||||
index 000000000000..b343fa784f39
|
||||
--- /dev/null
|
||||
+++ dom/base/test/test_webSocket_sandbox.html
|
||||
@@ -0,0 +1,34 @@
|
||||
+<!DOCTYPE HTML>
|
||||
+<html>
|
||||
+<head>
|
||||
+ <title>Bug 1252751</title>
|
||||
+ <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
+</head>
|
||||
+<body>
|
||||
+<div id="container"></div>
|
||||
+<iframe id="frame"></iframe>
|
||||
+<script type="application/javascript;version=1.8">
|
||||
+var urls = [ "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html",
|
||||
+ "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html?nested",
|
||||
+ "https://example.com/tests/dom/base/test/iframe_webSocket_sandbox.html?popup" ];
|
||||
+
|
||||
+onmessage = function(e) {
|
||||
+ is(e.data, "WS Throws!", "ws://URI cannot be used by a https iframe");
|
||||
+ runTest();
|
||||
+}
|
||||
+
|
||||
+function runTest() {
|
||||
+ if (!urls.length) {
|
||||
+ SimpleTest.finish();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ document.getElementById("frame").src = urls.shift();
|
||||
+}
|
||||
+
|
||||
+SimpleTest.waitForExplicitFinish();
|
||||
+runTest();
|
||||
+</script>
|
||||
+</body>
|
||||
+</html>
|
@ -1,53 +0,0 @@
|
||||
commit 3708901c15ba
|
||||
Author: Byron Campen [:bwc] <docfaraday@gmail.com>
|
||||
Date: Thu Oct 12 12:12:40 2017 -0500
|
||||
|
||||
Bug 1406154 - Ensure that we avoid truncating the interface description strings in a couple of corner cases. r=drno, a=sledru
|
||||
|
||||
MozReview-Commit-ID: KMTpbkvA4N
|
||||
|
||||
--HG--
|
||||
extra : source : 5c8d4905c2bdbb3cfa0db5e07a3cd6ba4eb23fdd
|
||||
---
|
||||
media/mtransport/nrinterfaceprioritizer.cpp | 2 +-
|
||||
media/mtransport/third_party/nICEr/src/net/transport_addr.c | 6 +++++-
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git media/mtransport/nrinterfaceprioritizer.cpp media/mtransport/nrinterfaceprioritizer.cpp
|
||||
index 37756991239c..34b941c53a45 100644
|
||||
--- media/mtransport/nrinterfaceprioritizer.cpp
|
||||
+++ media/mtransport/nrinterfaceprioritizer.cpp
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
bool Init(const nr_local_addr& local_addr) {
|
||||
ifname_ = local_addr.addr.ifname;
|
||||
|
||||
- char buf[MAXIFNAME + 41];
|
||||
+ char buf[MAXIFNAME + 47];
|
||||
int r = nr_transport_addr_fmt_ifname_addr_string(&local_addr.addr, buf, sizeof(buf));
|
||||
if (r) {
|
||||
MOZ_MTLOG(ML_ERROR, "Error formatting interface key.");
|
||||
diff --git media/mtransport/third_party/nICEr/src/net/transport_addr.c media/mtransport/third_party/nICEr/src/net/transport_addr.c
|
||||
index 99564a08e8b9..ae849f43387e 100644
|
||||
--- media/mtransport/third_party/nICEr/src/net/transport_addr.c
|
||||
+++ media/mtransport/third_party/nICEr/src/net/transport_addr.c
|
||||
@@ -98,7 +98,8 @@ int nr_transport_addr_fmt_addr_string(nr_transport_addr *addr)
|
||||
int nr_transport_addr_fmt_ifname_addr_string(const nr_transport_addr *addr, char *buf, int len)
|
||||
{
|
||||
int _status;
|
||||
- char buffer[40];
|
||||
+ /* leave room for a fully-expanded IPV4-mapped IPV6 address */
|
||||
+ char buffer[46];
|
||||
|
||||
switch(addr->ip_version){
|
||||
case NR_IPV4:
|
||||
@@ -114,7 +115,10 @@ int nr_transport_addr_fmt_ifname_addr_string(const nr_transport_addr *addr, char
|
||||
default:
|
||||
ABORT(R_INTERNAL);
|
||||
}
|
||||
+ buffer[sizeof(buffer) - 1] = '\0';
|
||||
+
|
||||
snprintf(buf,len,"%s:%s",addr->ifname,buffer);
|
||||
+ buf[len - 1] = '\0';
|
||||
|
||||
_status=0;
|
||||
abort:
|
@ -1,36 +0,0 @@
|
||||
commit c79dd79bdb5c
|
||||
Author: André Bargull <andre.bargull@gmail.com>
|
||||
Date: Thu Oct 12 09:20:07 2017 -0700
|
||||
|
||||
Bug 1406398 - Avoid rooting the object twice in EnumerableOwnProperties. r=jandem, a=lizzard
|
||||
|
||||
--HG--
|
||||
extra : source : c2cecb6d6f9bb85f258a66cf8e94c1860adde7e5
|
||||
---
|
||||
js/src/builtin/Object.cpp | 6 ++----
|
||||
1 file changed, 2 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git js/src/builtin/Object.cpp js/src/builtin/Object.cpp
|
||||
index dff377a1cd97..ff4dd029cb52 100644
|
||||
--- js/src/builtin/Object.cpp
|
||||
+++ js/src/builtin/Object.cpp
|
||||
@@ -1246,9 +1246,6 @@ EnumerableOwnProperties(JSContext* cx, const JS::CallArgs& args, EnumerableOwnPr
|
||||
RootedId id(cx);
|
||||
RootedValue key(cx);
|
||||
RootedValue value(cx);
|
||||
- RootedNativeObject nobj(cx);
|
||||
- if (obj->is<NativeObject>())
|
||||
- nobj = &obj->as<NativeObject>();
|
||||
RootedShape shape(cx);
|
||||
Rooted<PropertyDescriptor> desc(cx);
|
||||
// Step 4.
|
||||
@@ -1265,7 +1262,8 @@ EnumerableOwnProperties(JSContext* cx, const JS::CallArgs& args, EnumerableOwnPr
|
||||
}
|
||||
|
||||
// Step 4.a.i.
|
||||
- if (nobj) {
|
||||
+ if (obj->is<NativeObject>()) {
|
||||
+ HandleNativeObject nobj = obj.as<NativeObject>();
|
||||
if (JSID_IS_INT(id) && nobj->containsDenseElement(JSID_TO_INT(id))) {
|
||||
value = nobj->getDenseOrTypedArrayElement(JSID_TO_INT(id));
|
||||
} else {
|
@ -1,47 +0,0 @@
|
||||
commit f2e38d27a7e3
|
||||
Author: Emilio Cobos Álvarez <emilio@crisal.io>
|
||||
Date: Tue Oct 24 17:44:12 2017 -0400
|
||||
|
||||
Bug 1406750 - Use GetStyleContextNoFlush in UpdateCurrentStyleSources, and avoid flushing mPresShell twice. r=bz, a=abillings
|
||||
|
||||
MozReview-Commit-ID: Nfu9FZcIzQ
|
||||
|
||||
--HG--
|
||||
extra : source : c73db1c3b6e78a5fad216ca7cc7e4ce312c30a98
|
||||
extra : amend_source : 9b31fa281368a9dc39a4a949cb85ae2f354a4308
|
||||
---
|
||||
layout/style/nsComputedDOMStyle.cpp | 14 ++++++++++----
|
||||
1 file changed, 10 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git layout/style/nsComputedDOMStyle.cpp layout/style/nsComputedDOMStyle.cpp
|
||||
index 062e00ffebc5..1aa07e691d4a 100644
|
||||
--- layout/style/nsComputedDOMStyle.cpp
|
||||
+++ layout/style/nsComputedDOMStyle.cpp
|
||||
@@ -832,6 +832,11 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
|
||||
return;
|
||||
}
|
||||
|
||||
+ nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
|
||||
+ if (presShellForContent && presShellForContent != mPresShell) {
|
||||
+ presShellForContent->FlushPendingNotifications(FlushType::Style);
|
||||
+ }
|
||||
+
|
||||
// We need to use GetUndisplayedRestyleGeneration instead of
|
||||
// GetRestyleGeneration, because the caching of mStyleContext is an
|
||||
// optimization that is useful only for displayed elements.
|
||||
@@ -922,10 +927,11 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
|
||||
#endif
|
||||
// Need to resolve a style context
|
||||
RefPtr<nsStyleContext> resolvedStyleContext =
|
||||
- nsComputedDOMStyle::GetStyleContext(mContent->AsElement(),
|
||||
- mPseudo,
|
||||
- mPresShell,
|
||||
- mStyleType);
|
||||
+ nsComputedDOMStyle::GetStyleContextNoFlush(
|
||||
+ mContent->AsElement(),
|
||||
+ mPseudo,
|
||||
+ presShellForContent ? presShellForContent.get() : mPresShell,
|
||||
+ mStyleType);
|
||||
if (!resolvedStyleContext) {
|
||||
ClearStyleContext();
|
||||
return;
|
@ -1,48 +0,0 @@
|
||||
commit 5666a545d8a1
|
||||
Author: David Anderson <danderson@mozilla.com>
|
||||
Date: Mon Oct 23 16:18:24 2017 -0400
|
||||
|
||||
Bug 1407032 - Reorder when GPUProcessHosts are destroyed. r=rhunt, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 2fb069813d832de4338028cf84c8dab483ba0fda
|
||||
---
|
||||
gfx/ipc/GPUProcessHost.cpp | 19 ++++++-------------
|
||||
1 file changed, 6 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git gfx/ipc/GPUProcessHost.cpp gfx/ipc/GPUProcessHost.cpp
|
||||
index 544baea242cf..249decc52a95 100644
|
||||
--- gfx/ipc/GPUProcessHost.cpp
|
||||
+++ gfx/ipc/GPUProcessHost.cpp
|
||||
@@ -190,25 +190,18 @@ GPUProcessHost::Shutdown()
|
||||
void
|
||||
GPUProcessHost::OnChannelClosed()
|
||||
{
|
||||
- if (!mShutdownRequested) {
|
||||
+ mChannelClosed = true;
|
||||
+
|
||||
+ if (!mShutdownRequested && mListener) {
|
||||
// This is an unclean shutdown. Notify our listener that we're going away.
|
||||
- mChannelClosed = true;
|
||||
- if (mListener) {
|
||||
- mListener->OnProcessUnexpectedShutdown(this);
|
||||
- }
|
||||
+ mListener->OnProcessUnexpectedShutdown(this);
|
||||
+ } else {
|
||||
+ DestroyProcess();
|
||||
}
|
||||
|
||||
// Release the actor.
|
||||
GPUChild::Destroy(Move(mGPUChild));
|
||||
MOZ_ASSERT(!mGPUChild);
|
||||
-
|
||||
- // If the owner of GPUProcessHost already requested shutdown, we can now
|
||||
- // schedule destruction. Otherwise we must wait for someone to call
|
||||
- // Shutdown. Note that GPUProcessManager calls Shutdown within
|
||||
- // OnProcessUnexpectedShutdown.
|
||||
- if (mShutdownRequested) {
|
||||
- DestroyProcess();
|
||||
- }
|
||||
}
|
||||
|
||||
void
|
@ -1,28 +0,0 @@
|
||||
commit b2d46387afc9
|
||||
Author: Boris Zbarsky <bzbarsky@mit.edu>
|
||||
Date: Wed Oct 11 22:19:06 2017 -0400
|
||||
|
||||
Bug 1407375 - Make sure to call NodeInfoChanged whenever we change the nodeinfo on a node. r=peterv, a=ritu
|
||||
|
||||
MozReview-Commit-ID: 71k1jv8thFA
|
||||
|
||||
--HG--
|
||||
extra : source : 51ff2d13e50c1e8f7731e4c7243064bb96d2e4d0
|
||||
---
|
||||
dom/base/nsNodeUtils.cpp | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git dom/base/nsNodeUtils.cpp dom/base/nsNodeUtils.cpp
|
||||
index 64ab9e852966..dd958aa443ce 100644
|
||||
--- dom/base/nsNodeUtils.cpp
|
||||
+++ dom/base/nsNodeUtils.cpp
|
||||
@@ -593,6 +593,9 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNode, bool aClone, bool aDeep,
|
||||
aNode->OwnerDoc()->UnregisterActivityObserver(aNode->AsElement());
|
||||
}
|
||||
aNode->mNodeInfo.swap(newNodeInfo);
|
||||
+ if (elem) {
|
||||
+ elem->NodeInfoChanged(newDoc);
|
||||
+ }
|
||||
if (wasRegistered) {
|
||||
aNode->OwnerDoc()->RegisterActivityObserver(aNode->AsElement());
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
commit a8fee72c6fc1
|
||||
Author: Andrew McCreight <continuation@gmail.com>
|
||||
Date: Fri Oct 20 16:11:26 2017 -0400
|
||||
|
||||
Bug 1407740 - Fix a crash by setting a flag to true. r=bz, a=lizzard
|
||||
|
||||
--HG--
|
||||
extra : source : 23d3b458f69c56b0f3b2b8faa1453f79e32ce70c
|
||||
---
|
||||
docshell/base/nsDocShell.cpp | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git docshell/base/nsDocShell.cpp docshell/base/nsDocShell.cpp
|
||||
index 6748a2722e5a..f7dc1508a74d 100644
|
||||
--- docshell/base/nsDocShell.cpp
|
||||
+++ docshell/base/nsDocShell.cpp
|
||||
@@ -881,6 +881,9 @@ nsDocShell::~nsDocShell()
|
||||
{
|
||||
MOZ_ASSERT(!mObserved);
|
||||
|
||||
+ // Avoid notifying observers while we're in the dtor.
|
||||
+ mIsBeingDestroyed = true;
|
||||
+
|
||||
Destroy();
|
||||
|
||||
nsCOMPtr<nsISHistoryInternal> shPrivate(do_QueryInterface(mSessionHistory));
|
@ -1,35 +0,0 @@
|
||||
commit 390b56f13f00
|
||||
Author: Andrea Marchesini <amarchesini@mozilla.com>
|
||||
Date: Fri Oct 13 07:11:40 2017 +0200
|
||||
|
||||
Bug 1407751 - DefineOSFileConstants should return false if OSFileConstants service is not initialized. r=froydnj, a=ritu
|
||||
|
||||
--HG--
|
||||
extra : source : 2f76e40db328035331dd6aa79d0e5fbf04db7c96
|
||||
---
|
||||
dom/system/OSFileConstants.cpp | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git dom/system/OSFileConstants.cpp dom/system/OSFileConstants.cpp
|
||||
index edafe9f1c560..3cd77f6c3c12 100644
|
||||
--- dom/system/OSFileConstants.cpp
|
||||
+++ dom/system/OSFileConstants.cpp
|
||||
@@ -346,6 +346,7 @@ void CleanupOSFileConstants()
|
||||
|
||||
gInitialized = false;
|
||||
delete gPaths;
|
||||
+ gPaths = nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -874,9 +875,7 @@ bool SetStringProperty(JSContext *cx, JS::Handle<JSObject*> aObject, const char
|
||||
*/
|
||||
bool DefineOSFileConstants(JSContext *cx, JS::Handle<JSObject*> global)
|
||||
{
|
||||
- MOZ_ASSERT(gInitialized);
|
||||
-
|
||||
- if (gPaths == nullptr) {
|
||||
+ if (!gInitialized || gPaths == nullptr) {
|
||||
// If an initialization error was ignored, we may end up with
|
||||
// |gInitialized == true| but |gPaths == nullptr|. We cannot
|
||||
// |MOZ_ASSERT| this, as this would kill precompile_cache.js,
|
@ -1,25 +0,0 @@
|
||||
commit 988e61cc6282
|
||||
Author: Andrew McCreight <continuation@gmail.com>
|
||||
Date: Mon Oct 23 10:18:42 2017 -0400
|
||||
|
||||
Bug 1408005 - Clear gApplicationReputationService in the dtor. r=francois, a=abillings
|
||||
|
||||
--HG--
|
||||
extra : source : 1613834d8d1145200886a039f733b1e066c63cbd
|
||||
---
|
||||
toolkit/components/downloads/ApplicationReputation.cpp | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git toolkit/components/downloads/ApplicationReputation.cpp toolkit/components/downloads/ApplicationReputation.cpp
|
||||
index b19841d8235d..18bc3b71728d 100644
|
||||
--- toolkit/components/downloads/ApplicationReputation.cpp
|
||||
+++ toolkit/components/downloads/ApplicationReputation.cpp
|
||||
@@ -1576,6 +1576,8 @@ ApplicationReputationService::ApplicationReputationService()
|
||||
|
||||
ApplicationReputationService::~ApplicationReputationService() {
|
||||
LOG(("Application reputation service shutting down"));
|
||||
+ MOZ_ASSERT(gApplicationReputationService == this);
|
||||
+ gApplicationReputationService = nullptr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
@ -1,37 +0,0 @@
|
||||
commit 81f184512a09
|
||||
Author: Jan de Mooij <jdemooij@mozilla.com>
|
||||
Date: Wed Oct 25 11:30:17 2017 +0200
|
||||
|
||||
Bug 1408412 - Use ARGS_LENGTH_MAX as upper bound in MArgumentsLength::computeRange. r=nbp, a=lizzard
|
||||
|
||||
--HG--
|
||||
extra : source : aaf54dce048a85806833529a5d53ecc46156ef47
|
||||
---
|
||||
js/src/jit/RangeAnalysis.cpp | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git js/src/jit/RangeAnalysis.cpp js/src/jit/RangeAnalysis.cpp
|
||||
index a3daefa848a7..19715ccc250a 100644
|
||||
--- js/src/jit/RangeAnalysis.cpp
|
||||
+++ js/src/jit/RangeAnalysis.cpp
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "jit/MIRGenerator.h"
|
||||
#include "jit/MIRGraph.h"
|
||||
#include "js/Conversions.h"
|
||||
+#include "vm/ArgumentsObject.h"
|
||||
#include "vm/TypedArrayObject.h"
|
||||
|
||||
#include "jsopcodeinlines.h"
|
||||
@@ -1845,9 +1846,9 @@ MArgumentsLength::computeRange(TempAllocator& alloc)
|
||||
{
|
||||
// This is is a conservative upper bound on what |TooManyActualArguments|
|
||||
// checks. If exceeded, Ion will not be entered in the first place.
|
||||
- MOZ_ASSERT(JitOptions.maxStackArgs <= UINT32_MAX,
|
||||
- "NewUInt32Range requires a uint32 value");
|
||||
- setRange(Range::NewUInt32Range(alloc, 0, JitOptions.maxStackArgs));
|
||||
+ static_assert(ARGS_LENGTH_MAX <= UINT32_MAX,
|
||||
+ "NewUInt32Range requires a uint32 value");
|
||||
+ setRange(Range::NewUInt32Range(alloc, 0, ARGS_LENGTH_MAX));
|
||||
}
|
||||
|
||||
void
|
@ -1,55 +0,0 @@
|
||||
commit 5b8d4bd1ffaa
|
||||
Author: Jonathan Kew <jkew@mozilla.com>
|
||||
Date: Wed Oct 18 10:24:03 2017 +0100
|
||||
|
||||
Bug 1408782 - Force punycode display for IDNs with a <dotless-i, combining mark above> sequence. r=valentin a=ritu
|
||||
---
|
||||
netwerk/dns/nsIDNService.cpp | 9 +++++++++
|
||||
netwerk/test/unit/test_idn_urls.js | 7 +++++++
|
||||
2 files changed, 16 insertions(+)
|
||||
|
||||
diff --git netwerk/dns/nsIDNService.cpp netwerk/dns/nsIDNService.cpp
|
||||
index e07910a7e70d..a89b4301ea07 100644
|
||||
--- netwerk/dns/nsIDNService.cpp
|
||||
+++ netwerk/dns/nsIDNService.cpp
|
||||
@@ -867,6 +867,7 @@ bool nsIDNService::isLabelSafe(const nsAString &label)
|
||||
|
||||
Script lastScript = Script::INVALID;
|
||||
uint32_t previousChar = 0;
|
||||
+ uint32_t baseChar = 0; // last non-diacritic seen (base char for marks)
|
||||
uint32_t savedNumberingSystem = 0;
|
||||
// Simplified/Traditional Chinese check temporarily disabled -- bug 857481
|
||||
#if 0
|
||||
@@ -948,6 +949,14 @@ bool nsIDNService::isLabelSafe(const nsAString &label)
|
||||
}
|
||||
}
|
||||
}
|
||||
+ // Check for diacritics on dotless-i, which would be indistinguishable
|
||||
+ // from normal accented letter i.
|
||||
+ if (baseChar == 0x0131 &&
|
||||
+ ((ch >= 0x0300 && ch <= 0x0314) || ch == 0x031a)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+ } else {
|
||||
+ baseChar = ch;
|
||||
}
|
||||
|
||||
// Simplified/Traditional Chinese check temporarily disabled -- bug 857481
|
||||
diff --git netwerk/test/unit/test_idn_urls.js netwerk/test/unit/test_idn_urls.js
|
||||
index f39a9650a13b..e0d73ca512ee 100644
|
||||
--- netwerk/test/unit/test_idn_urls.js
|
||||
+++ netwerk/test/unit/test_idn_urls.js
|
||||
@@ -300,6 +300,13 @@ const testcases = [
|
||||
["goo\u0650gle", "xn--google-yri", false, false, false],
|
||||
// ...but Arabic diacritics are allowed on Arabic text
|
||||
["العَرَبِي", "xn--mgbc0a5a6cxbzabt", false, true, true],
|
||||
+
|
||||
+ // Accents above dotless-i are not allowed
|
||||
+ ["na\u0131\u0308ve", "xn--nave-mza04z", false, false, false],
|
||||
+ ["d\u0131\u0302ner", "xn--dner-lza40z", false, false, false],
|
||||
+ // but the corresponding accented-i (based on dotted i) is OK
|
||||
+ ["na\u00efve.com", "xn--nave-6pa.com", false, true, true],
|
||||
+ ["d\u00eener.com", "xn--dner-0pa.com", false, true, true],
|
||||
];
|
||||
|
||||
const profiles = ["ASCII", "high", "moderate"];
|
@ -1,34 +0,0 @@
|
||||
commit 53a3958e0a76
|
||||
Author: Valentin Gosu <valentin.gosu@gmail.com>
|
||||
Date: Sat Oct 28 00:15:01 2017 +0200
|
||||
|
||||
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
|
||||
|
||||
MozReview-Commit-ID: 7o8XKHioP1p
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : 33d4044b4901cee460cc69a0bae1fe0e84dab2aa
|
||||
extra : source : ff9e841ff8544053f184d2e425500d5dd13ee14d
|
||||
---
|
||||
netwerk/protocol/http/HttpBaseChannel.cpp | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git netwerk/protocol/http/HttpBaseChannel.cpp netwerk/protocol/http/HttpBaseChannel.cpp
|
||||
index 8a5c4d8d9f45..16e59241e2fc 100644
|
||||
--- netwerk/protocol/http/HttpBaseChannel.cpp
|
||||
+++ netwerk/protocol/http/HttpBaseChannel.cpp
|
||||
@@ -4088,6 +4088,14 @@ HttpBaseChannel::GetPerformance()
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
+ // We only add to the document's performance object if it has the same
|
||||
+ // principal as the one triggering the load. This is to prevent navigations
|
||||
+ // triggered _by_ the iframe from showing up in the parent document's
|
||||
+ // performance entries if they have different origins.
|
||||
+ if (!mLoadInfo->TriggeringPrincipal()->Equals(loadingDocument->NodePrincipal())) {
|
||||
+ return nullptr;
|
||||
+ }
|
||||
+
|
||||
nsCOMPtr<nsPIDOMWindowInner> innerWindow = loadingDocument->GetInnerWindow();
|
||||
if (!innerWindow) {
|
||||
return nullptr;
|
@ -1,27 +0,0 @@
|
||||
Bug 1409680 - Extend --disable-debug-symbols to Rust code.
|
||||
|
||||
This reduces disk I/O and memory usage during build that already lacks
|
||||
debugging symbols from C++ code, allowing to use more jobs on 32bit hosts.
|
||||
|
||||
--disable-debug-symbols build on FreeBSD 10.3 i386 (8 cores) host:
|
||||
Max RSS before: libxul - 612 Mb, libgkrust - 1908 Mb
|
||||
Max RSS after: libxul - 444 Mb, libgkrust - 1471 Mb
|
||||
Binary before: libxul - 203 Mb, libgkrust - 732 Mb
|
||||
Binary after: libxul - 123 Mb, libgkrust - 301 Mb
|
||||
|
||||
--- config/rules.mk.orig 2017-09-14 20:15:53 UTC
|
||||
+++ config/rules.mk
|
||||
@@ -906,11 +906,13 @@ ifdef MOZ_USING_SCCACHE
|
||||
sccache_wrap := RUSTC_WRAPPER='$(CCACHE)'
|
||||
endif
|
||||
|
||||
+ifdef MOZ_DEBUG_SYMBOLS
|
||||
# XXX hack to work around dsymutil failing on cross-OSX builds (bug 1380381)
|
||||
ifeq ($(HOST_OS_ARCH)-$(OS_ARCH),Linux-Darwin)
|
||||
default_rustflags += -C debuginfo=1
|
||||
else
|
||||
default_rustflags += -C debuginfo=2
|
||||
+endif
|
||||
endif
|
||||
|
||||
# We use the + prefix to pass down the jobserver fds to cargo, but we
|
@ -1,44 +0,0 @@
|
||||
commit da2637dd8a23
|
||||
Author: David Keeler <dkeeler@mozilla.com>
|
||||
Date: Wed Oct 25 09:54:13 2017 -0700
|
||||
|
||||
Bug 1411458 - Confirm we actually have a PKCS#7 signedData content info. r=jcj, a=ritu
|
||||
|
||||
MozReview-Commit-ID: GKfL1C0EPWt
|
||||
|
||||
--HG--
|
||||
extra : source : 22a772cfa62ae6908751b1cdd98a9234f2ea6105
|
||||
---
|
||||
security/manager/ssl/nsDataSignatureVerifier.cpp | 6 ++++++
|
||||
security/nss.symbols | 1 +
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git security/manager/ssl/nsDataSignatureVerifier.cpp security/manager/ssl/nsDataSignatureVerifier.cpp
|
||||
index f78740365e1a..2527431dd9ae 100644
|
||||
--- security/manager/ssl/nsDataSignatureVerifier.cpp
|
||||
+++ security/manager/ssl/nsDataSignatureVerifier.cpp
|
||||
@@ -170,6 +170,12 @@ VerifyCMSDetachedSignatureIncludingCertificate(
|
||||
return NS_ERROR_CMS_VERIFY_NO_CONTENT_INFO;
|
||||
}
|
||||
|
||||
+ // We're expecting this to be a PKCS#7 signedData content info.
|
||||
+ if (NSS_CMSContentInfo_GetContentTypeTag(cinfo)
|
||||
+ != SEC_OID_PKCS7_SIGNED_DATA) {
|
||||
+ return NS_ERROR_CMS_VERIFY_NO_CONTENT_INFO;
|
||||
+ }
|
||||
+
|
||||
// signedData is non-owning
|
||||
NSSCMSSignedData* signedData =
|
||||
static_cast<NSSCMSSignedData*>(NSS_CMSContentInfo_GetContent(cinfo));
|
||||
diff --git security/nss.symbols security/nss.symbols
|
||||
index 626fc64d96f9..517a577a8de4 100644
|
||||
--- security/nss.symbols
|
||||
+++ security/nss.symbols
|
||||
@@ -181,6 +181,7 @@ HASH_ResultLenByOidTag
|
||||
HASH_Update
|
||||
NSSBase64_EncodeItem_Util
|
||||
NSS_CMSContentInfo_GetContent
|
||||
+NSS_CMSContentInfo_GetContentTypeTag
|
||||
NSS_CMSContentInfo_SetContent_Data
|
||||
NSS_CMSContentInfo_SetContent_EnvelopedData
|
||||
NSS_CMSContentInfo_SetContent_SignedData
|
@ -1,42 +0,0 @@
|
||||
commit 4bb201af8ede
|
||||
Author: Emilio Cobos Álvarez <emilio@crisal.io>
|
||||
Date: Sun Oct 29 17:39:20 2017 -0400
|
||||
|
||||
Bug 1412252 - Only fetch mPresShell after flushing the relevant content pres shell. r=bz, a=ritu
|
||||
|
||||
MozReview-Commit-ID: BkcYtu2MsNs
|
||||
|
||||
--HG--
|
||||
extra : rebase_source : aaf4e69af1cfb4e6becd491f3f4a6e4924cb307a
|
||||
extra : source : 044406030675adf7dfdb0317fca3852fa1ea3ff7
|
||||
---
|
||||
layout/style/nsComputedDOMStyle.cpp | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git layout/style/nsComputedDOMStyle.cpp layout/style/nsComputedDOMStyle.cpp
|
||||
index 1aa07e691d4a..1eb9fbebdc8d 100644
|
||||
--- layout/style/nsComputedDOMStyle.cpp
|
||||
+++ layout/style/nsComputedDOMStyle.cpp
|
||||
@@ -826,17 +826,17 @@ nsComputedDOMStyle::UpdateCurrentStyleSources(bool aNeedsLayoutFlush)
|
||||
mFlushedPendingReflows = aNeedsLayoutFlush;
|
||||
#endif
|
||||
|
||||
+ nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
|
||||
+ if (presShellForContent && presShellForContent != document->GetShell()) {
|
||||
+ presShellForContent->FlushPendingNotifications(FlushType::Style);
|
||||
+ }
|
||||
+
|
||||
mPresShell = document->GetShell();
|
||||
if (!mPresShell || !mPresShell->GetPresContext()) {
|
||||
ClearStyleContext();
|
||||
return;
|
||||
}
|
||||
|
||||
- nsCOMPtr<nsIPresShell> presShellForContent = GetPresShellForContent(mContent);
|
||||
- if (presShellForContent && presShellForContent != mPresShell) {
|
||||
- presShellForContent->FlushPendingNotifications(FlushType::Style);
|
||||
- }
|
||||
-
|
||||
// We need to use GetUndisplayedRestyleGeneration instead of
|
||||
// GetRestyleGeneration, because the caching of mStyleContext is an
|
||||
// optimization that is useful only for displayed elements.
|
@ -261,7 +261,7 @@ index 9297e4d6f501..d8e273887e4b 100644
|
||||
+option('--with-system-harfbuzz',
|
||||
+ help="Use system harfbuzz (located with pkgconfig)")
|
||||
+
|
||||
+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.4.7',
|
||||
+system_harfbuzz = pkg_check_modules('MOZ_HARFBUZZ', 'harfbuzz >= 1.5.1',
|
||||
+ when='--with-system-harfbuzz')
|
||||
+
|
||||
+set_config('MOZ_SYSTEM_HARFBUZZ', depends_if(system_harfbuzz)(lambda _: True))
|
||||
|
@ -1,11 +1,11 @@
|
||||
--- build/pgo/profileserver.py.orig 2011-02-24 21:49:47.000000000 +0100
|
||||
+++ build/pgo/profileserver.py 2011-02-24 21:50:30.000000000 +0100
|
||||
@@ -59,7 +59,7 @@ if __name__ == '__main__':
|
||||
env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
|
||||
print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
|
||||
--- build/pgo/profileserver.py.orig 2017-09-15 04:15:39 UTC
|
||||
+++ build/pgo/profileserver.py
|
||||
@@ -87,7 +87,7 @@ if __name__ == '__main__':
|
||||
env["MOZ_JAR_LOG_FILE"] = os.path.abspath(jarlog)
|
||||
print "jarlog: %s" % env["MOZ_JAR_LOG_FILE"]
|
||||
|
||||
- cmdargs = ["http://localhost:%d/index.html" % PORT]
|
||||
+ cmdargs = ["http://127.0.0.1:%d/index.html" % PORT]
|
||||
runner = FirefoxRunner(profile=profile,
|
||||
binary=build.get_binary_path(where="staged-package"),
|
||||
cmdargs=cmdargs,
|
||||
- cmdargs = ["http://localhost:%d/index.html" % PORT]
|
||||
+ cmdargs = ["http://127.0.0.1:%d/index.html" % PORT]
|
||||
runner = FirefoxRunner(profile=profile,
|
||||
binary=build.get_binary_path(
|
||||
where="staged-package"),
|
||||
|
@ -1,53 +0,0 @@
|
||||
commit 4cbdfa028752
|
||||
Author: Manish Goregaokar <manishsmail@gmail.com>
|
||||
Date: Tue Aug 1 12:57:42 2017 -0500
|
||||
|
||||
servo: Merge #17934 - Remove doc comment on statement (from Manishearth:doc-comment); r=canaltinova
|
||||
|
||||
rustc warns about these now
|
||||
|
||||
Source-Repo: https://github.com/servo/servo
|
||||
Source-Revision: b49311c65a083a9b8eb03741bf7ea980b64f1e03
|
||||
|
||||
--HG--
|
||||
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
|
||||
extra : subtree_revision : 6b3c7d7f4ffeb9e271c52d418cda42cac5dd378d
|
||||
---
|
||||
servo/components/style/values/specified/image.rs | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git servo/components/style/values/specified/image.rs servo/components/style/values/specified/image.rs
|
||||
index 37ed00ccf443..687c6f17d432 100644
|
||||
--- servo/components/style/values/specified/image.rs
|
||||
+++ servo/components/style/values/specified/image.rs
|
||||
@@ -686,14 +686,14 @@ impl LineDirection {
|
||||
input.try(|i| {
|
||||
let to_ident = i.try(|i| i.expect_ident_matching("to"));
|
||||
match *compat_mode {
|
||||
- /// `to` keyword is mandatory in modern syntax.
|
||||
+ // `to` keyword is mandatory in modern syntax.
|
||||
CompatMode::Modern => to_ident?,
|
||||
// Fall back to Modern compatibility mode in case there is a `to` keyword.
|
||||
// According to Gecko, `-moz-linear-gradient(to ...)` should serialize like
|
||||
// `linear-gradient(to ...)`.
|
||||
CompatMode::Moz if to_ident.is_ok() => *compat_mode = CompatMode::Modern,
|
||||
- /// There is no `to` keyword in webkit prefixed syntax. If it's consumed,
|
||||
- /// parsing should throw an error.
|
||||
+ // There is no `to` keyword in webkit prefixed syntax. If it's consumed,
|
||||
+ // parsing should throw an error.
|
||||
CompatMode::WebKit if to_ident.is_ok() => {
|
||||
return Err(SelectorParseError::UnexpectedIdent("to".into()).into())
|
||||
},
|
||||
diff --git servo/components/style/properties/gecko.mako.rs servo/components/style/properties/gecko.mako.rs
|
||||
index 37ed00ccf443..687c6f17d432 100644
|
||||
--- servo/components/style/properties/gecko.mako.rs
|
||||
+++ servo/components/style/properties/gecko.mako.rs
|
||||
@@ -2081,7 +2081,7 @@ fn static_assert() {
|
||||
return (parent_size, parent_unconstrained_size)
|
||||
}
|
||||
|
||||
- /// XXXManishearth this should also handle text zoom
|
||||
+ // XXXManishearth this should also handle text zoom
|
||||
let min = Au(parent.gecko.mScriptMinSize);
|
||||
|
||||
let scale = (parent.gecko.mScriptSizeMultiplier as f32).powi(delta as i32);
|
@ -1,110 +0,0 @@
|
||||
commit 9f5c1f2e4b5b
|
||||
Author: Manish Goregaokar <manishsmail@gmail.com>
|
||||
Date: Thu Aug 3 16:27:12 2017 -0500
|
||||
|
||||
servo: Merge #17969 - Update stylo code to work on nightly (from Manishearth:rustup); r=emilio
|
||||
|
||||
r=emilio https://bugzilla.mozilla.org/show_bug.cgi?id=1386887
|
||||
|
||||
Source-Repo: https://github.com/servo/servo
|
||||
Source-Revision: 7cee7d7fcc4194e410fa8a308a77d37ac452778a
|
||||
|
||||
--HG--
|
||||
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
|
||||
extra : subtree_revision : d9c874ebcfa1e64c86265d0ed2e5cff65d9133be
|
||||
---
|
||||
servo/components/style/gecko/generated/bindings.rs | 12 +++++++++---
|
||||
servo/components/style/gecko/wrapper.rs | 7 ++++++-
|
||||
servo/ports/geckolib/glue.rs | 3 ++-
|
||||
3 files changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git servo/components/style/gecko/generated/bindings.rs servo/components/style/gecko/generated/bindings.rs
|
||||
index e46bdfe1e1ea..b6703ab95bf7 100644
|
||||
--- servo/components/style/gecko/generated/bindings.rs
|
||||
+++ servo/components/style/gecko/generated/bindings.rs
|
||||
@@ -8,6 +8,7 @@ type nsAString_internal = nsAString;
|
||||
pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;
|
||||
pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
|
||||
pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;
|
||||
+pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();
|
||||
use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;
|
||||
use gecko_bindings::structs::mozilla::css::ErrorReporter;
|
||||
use gecko_bindings::structs::mozilla::css::ImageValue;
|
||||
@@ -37,7 +38,7 @@ use gecko_bindings::structs::RawServoStyleRule;
|
||||
use gecko_bindings::structs::RawGeckoPresContext;
|
||||
use gecko_bindings::structs::RawGeckoPresContextOwned;
|
||||
use gecko_bindings::structs::RawGeckoStyleAnimationList;
|
||||
-use gecko_bindings::structs::RawGeckoStyleChildrenIteratorBorrowedMut;
|
||||
+use gecko_bindings::structs::RawGeckoStyleChildrenIterator;
|
||||
use gecko_bindings::structs::RawGeckoServoStyleRuleList;
|
||||
use gecko_bindings::structs::RawGeckoURLExtraData;
|
||||
use gecko_bindings::structs::RawGeckoXBLBinding;
|
||||
@@ -320,6 +321,10 @@ pub type RawGeckoServoAnimationValueListBorrowed<'a> = &'a RawGeckoServoAnimatio
|
||||
pub type RawGeckoServoAnimationValueListBorrowedOrNull<'a> = Option<&'a RawGeckoServoAnimationValueList>;
|
||||
pub type RawGeckoServoAnimationValueListBorrowedMut<'a> = &'a mut RawGeckoServoAnimationValueList;
|
||||
pub type RawGeckoServoAnimationValueListBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoServoAnimationValueList>;
|
||||
+pub type RawGeckoStyleChildrenIteratorBorrowed<'a> = &'a RawGeckoStyleChildrenIterator;
|
||||
+pub type RawGeckoStyleChildrenIteratorBorrowedOrNull<'a> = Option<&'a RawGeckoStyleChildrenIterator>;
|
||||
+pub type RawGeckoStyleChildrenIteratorBorrowedMut<'a> = &'a mut RawGeckoStyleChildrenIterator;
|
||||
+pub type RawGeckoStyleChildrenIteratorBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoStyleChildrenIterator>;
|
||||
pub type ServoCssRulesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoCssRules>;
|
||||
pub type ServoCssRulesBorrowed<'a> = &'a ServoCssRules;
|
||||
pub type ServoCssRulesBorrowedOrNull<'a> = Option<&'a ServoCssRules>;
|
||||
@@ -840,7 +845,7 @@ extern "C" {
|
||||
}
|
||||
extern "C" {
|
||||
pub fn Gecko_AnimationGetBaseStyle(aBaseStyles:
|
||||
- *mut ::std::os::raw::c_void,
|
||||
+ RawServoAnimationValueTableBorrowed,
|
||||
aProperty: nsCSSPropertyID)
|
||||
-> RawServoAnimationValueBorrowedOrNull;
|
||||
}
|
||||
@@ -2602,7 +2607,8 @@ extern "C" {
|
||||
extern "C" {
|
||||
pub fn Servo_AnimationCompose(animation_values:
|
||||
RawServoAnimationValueMapBorrowedMut,
|
||||
- base_values: *mut ::std::os::raw::c_void,
|
||||
+ base_values:
|
||||
+ RawServoAnimationValueTableBorrowed,
|
||||
property: nsCSSPropertyID,
|
||||
animation_segment:
|
||||
RawGeckoAnimationPropertySegmentBorrowed,
|
||||
diff --git servo/components/style/gecko/wrapper.rs servo/components/style/gecko/wrapper.rs
|
||||
index dae898692313..6d62f54951cc 100644
|
||||
--- servo/components/style/gecko/wrapper.rs
|
||||
+++ servo/components/style/gecko/wrapper.rs
|
||||
@@ -387,7 +387,12 @@ impl<'a> Iterator for GeckoChildrenIterator<'a> {
|
||||
curr
|
||||
},
|
||||
GeckoChildrenIterator::GeckoIterator(ref mut it) => unsafe {
|
||||
- Gecko_GetNextStyleChild(it).map(GeckoNode)
|
||||
+ // We do this unsafe lengthening of the lifetime here because
|
||||
+ // structs::StyleChildrenIterator is actually StyleChildrenIterator<'a>,
|
||||
+ // however we can't express this easily with bindgen, and it would
|
||||
+ // introduce functions with two input lifetimes into bindgen,
|
||||
+ // which would be out of scope for elision.
|
||||
+ Gecko_GetNextStyleChild(&mut * (it as *mut _)).map(GeckoNode)
|
||||
}
|
||||
}
|
||||
}
|
||||
diff --git servo/ports/geckolib/glue.rs servo/ports/geckolib/glue.rs
|
||||
index 367d24ff87b2..e69959f3710b 100644
|
||||
--- servo/ports/geckolib/glue.rs
|
||||
+++ servo/ports/geckolib/glue.rs
|
||||
@@ -59,6 +59,7 @@ use style::gecko_bindings::bindings::RawGeckoServoStyleRuleListBorrowedMut;
|
||||
use style::gecko_bindings::bindings::RawServoAnimationValueBorrowed;
|
||||
use style::gecko_bindings::bindings::RawServoAnimationValueMapBorrowedMut;
|
||||
use style::gecko_bindings::bindings::RawServoAnimationValueStrong;
|
||||
+use style::gecko_bindings::bindings::RawServoAnimationValueTableBorrowed;
|
||||
use style::gecko_bindings::bindings::RawServoStyleRuleBorrowed;
|
||||
use style::gecko_bindings::bindings::ServoStyleContextBorrowedOrNull;
|
||||
use style::gecko_bindings::bindings::nsTArrayBorrowed_uintptr_t;
|
||||
@@ -374,7 +375,7 @@ pub extern "C" fn Servo_AnimationValues_ComputeDistance(from: RawServoAnimationV
|
||||
|
||||
#[no_mangle]
|
||||
pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMapBorrowedMut,
|
||||
- base_values: *mut ::std::os::raw::c_void,
|
||||
+ base_values: RawServoAnimationValueTableBorrowed,
|
||||
css_property: nsCSSPropertyID,
|
||||
segment: RawGeckoAnimationPropertySegmentBorrowed,
|
||||
last_segment: RawGeckoAnimationPropertySegmentBorrowed,
|
@ -1,763 +0,0 @@
|
||||
commit ea9c8db790e4
|
||||
Author: Simon Sapin <simon.sapin@exyr.org>
|
||||
Date: Tue Aug 15 07:31:04 2017 -0500
|
||||
|
||||
servo: Merge #18046 - Upgrade to rustc 1.21.0-nightly (13d94d5fa 2017-08-10) (from servo:rustup); r=emilio
|
||||
|
||||
Source-Repo: https://github.com/servo/servo
|
||||
Source-Revision: 7d9b82b9efa7b10a2e34d93df5ac535d99518f7a
|
||||
|
||||
--HG--
|
||||
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
|
||||
extra : subtree_revision : e1b3d113c3edaea3c4c07f8b206f2e02922e3caf
|
||||
---
|
||||
servo/Cargo.lock | 6 +++---
|
||||
servo/components/devtools/lib.rs | 2 +-
|
||||
servo/components/layout/animation.rs | 2 +-
|
||||
servo/components/layout/construct.rs | 6 +++---
|
||||
servo/components/layout/display_list_builder.rs | 2 +-
|
||||
servo/components/layout/flex.rs | 6 +++---
|
||||
servo/components/layout/inline.rs | 4 ++--
|
||||
servo/components/layout/sequential.rs | 2 +-
|
||||
servo/components/layout/table_cell.rs | 2 +-
|
||||
servo/components/layout/text.rs | 2 +-
|
||||
servo/components/net/cookie_storage.rs | 2 +-
|
||||
servo/components/profile/heartbeats.rs | 4 ++--
|
||||
servo/components/script/dom/bindings/js.rs | 4 ++--
|
||||
servo/components/script/dom/cssstyledeclaration.rs | 8 ++++----
|
||||
servo/components/script/dom/cssstylerule.rs | 2 +-
|
||||
servo/components/script/dom/document.rs | 12 ++++++------
|
||||
servo/components/script/dom/medialist.rs | 4 ++--
|
||||
servo/components/script/dom/range.rs | 4 ++--
|
||||
.../script/dom/servoparser/async_html.rs | 4 ++--
|
||||
servo/components/script/dom/url.rs | 4 ++--
|
||||
servo/components/script/dom/vrdisplay.rs | 2 +-
|
||||
.../components/script/dom/webglrenderingcontext.rs | 2 +-
|
||||
servo/components/script/dom/xmlhttprequest.rs | 2 +-
|
||||
servo/components/script/lib.rs | 1 -
|
||||
.../script_plugins/unrooted_must_root.rs | 22 +++++++++++++++-------
|
||||
servo/components/selectors/matching.rs | 2 +-
|
||||
servo/components/selectors/parser.rs | 2 +-
|
||||
.../style/invalidation/element/invalidator.rs | 2 +-
|
||||
servo/components/style/matching.rs | 2 +-
|
||||
.../components/style/properties/properties.mako.rs | 2 +-
|
||||
servo/components/style/style_adjuster.rs | 2 +-
|
||||
servo/components/style/style_resolver.rs | 2 +-
|
||||
servo/components/style/stylesheets/rule_list.rs | 2 +-
|
||||
servo/components/style/stylesheets/rule_parser.rs | 2 +-
|
||||
.../components/style/stylesheets/rules_iterator.rs | 2 +-
|
||||
servo/components/style/values/animated/color.rs | 2 +-
|
||||
servo/components/style/values/computed/border.rs | 2 +-
|
||||
servo/components/webdriver_server/lib.rs | 2 +-
|
||||
servo/rust-commit-hash | 2 +-
|
||||
servo/tests/unit/style/stylist.rs | 13 -------------
|
||||
40 files changed, 73 insertions(+), 79 deletions(-)
|
||||
|
||||
diff --git servo/Cargo.lock servo/Cargo.lock
|
||||
index 50dd6e1a785a..2aa7bd8ea3dd 100644
|
||||
--- servo/Cargo.lock
|
||||
+++ servo/Cargo.lock
|
||||
@@ -3577,7 +3577,7 @@ version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
- "xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
+ "xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -3592,7 +3592,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "xcb"
|
||||
-version = "0.7.6"
|
||||
+version = "0.7.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@@ -3918,7 +3918,7 @@ dependencies = [
|
||||
"checksum x11 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db27c597c187da52194a4b8232e7d869503911aab9ff726fefb76d7a830f78ed"
|
||||
"checksum x11-clipboard 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "731230b8edcbb9d99247105e4c9ec0a538594d50ad68d2afa8662195f9db2973"
|
||||
"checksum x11-dl 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "326c500cdc166fd7c70dd8c8a829cd5c0ce7be5a5d98c25817de2b9bdc67faf8"
|
||||
-"checksum xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "63e3a849b73e4e1905e4f4d48f1750429bc86ea9f473632ab382a6f69ecb6b33"
|
||||
+"checksum xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "7cede38417fcdf2f0a9d8abf1cea1c1b066320a8a316e9583a0d717c334fafb2"
|
||||
"checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
|
||||
"checksum xi-unicode 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1"
|
||||
"checksum xml-rs 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7ec6c39eaa68382c8e31e35239402c0a9489d4141a8ceb0c716099a0b515b562"
|
||||
diff --git servo/components/devtools/lib.rs servo/components/devtools/lib.rs
|
||||
index d5a2764a7102..6a25696eaed7 100644
|
||||
--- servo/components/devtools/lib.rs
|
||||
+++ servo/components/devtools/lib.rs
|
||||
@@ -306,7 +306,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>,
|
||||
columnNumber: console_message.columnNumber,
|
||||
},
|
||||
};
|
||||
- for mut stream in &mut *console_actor.streams.borrow_mut() {
|
||||
+ for stream in &mut *console_actor.streams.borrow_mut() {
|
||||
stream.write_json_packet(&msg);
|
||||
}
|
||||
}
|
||||
diff --git servo/components/layout/animation.rs servo/components/layout/animation.rs
|
||||
index e4a2782c1271..ebbba82fcc6a 100644
|
||||
--- servo/components/layout/animation.rs
|
||||
+++ servo/components/layout/animation.rs
|
||||
@@ -39,7 +39,7 @@ pub fn update_animation_state(constellation_chan: &IpcSender<ConstellationMsg>,
|
||||
// run.
|
||||
if let Some(ref mut animations) = running_animations.get_mut(node) {
|
||||
// TODO: This being linear is probably not optimal.
|
||||
- for mut anim in animations.iter_mut() {
|
||||
+ for anim in animations.iter_mut() {
|
||||
if let Animation::Keyframes(_, ref anim_name, ref mut anim_state) = *anim {
|
||||
if *name == *anim_name {
|
||||
debug!("update_animation_state: Found other animation {}", name);
|
||||
diff --git servo/components/layout/construct.rs servo/components/layout/construct.rs
|
||||
index c863219941e4..7ef391b42183 100644
|
||||
--- servo/components/layout/construct.rs
|
||||
+++ servo/components/layout/construct.rs
|
||||
@@ -1921,7 +1921,7 @@ impl Legalizer {
|
||||
/// true for anonymous block children of flex flows.
|
||||
fn try_to_add_child(&mut self, context: &SharedStyleContext, parent: &mut FlowRef, child: &mut FlowRef)
|
||||
-> bool {
|
||||
- let mut parent = self.stack.last_mut().unwrap_or(parent);
|
||||
+ let parent = self.stack.last_mut().unwrap_or(parent);
|
||||
let (parent_class, child_class) = (parent.class(), child.class());
|
||||
match (parent_class, child_class) {
|
||||
(FlowClass::TableWrapper, FlowClass::Table) |
|
||||
@@ -1962,7 +1962,7 @@ impl Legalizer {
|
||||
} else {
|
||||
IS_BLOCK_FLEX_ITEM
|
||||
};
|
||||
- let mut block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
|
||||
+ let block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
|
||||
block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
|
||||
block.fragment.flags.insert(flag);
|
||||
}
|
||||
@@ -1979,7 +1979,7 @@ impl Legalizer {
|
||||
} else {
|
||||
IS_BLOCK_FLEX_ITEM
|
||||
};
|
||||
- let mut block = FlowRef::deref_mut(child).as_mut_block();
|
||||
+ let block = FlowRef::deref_mut(child).as_mut_block();
|
||||
block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
|
||||
block.fragment.flags.insert(flag);
|
||||
}
|
||||
diff --git servo/components/layout/display_list_builder.rs servo/components/layout/display_list_builder.rs
|
||||
index f8b26899b57d..783574afd2a3 100644
|
||||
--- servo/components/layout/display_list_builder.rs
|
||||
+++ servo/components/layout/display_list_builder.rs
|
||||
@@ -2718,7 +2718,7 @@ impl InlineFlowDisplayListBuilding for InlineFlow {
|
||||
self.base.scroll_root_id = Some(state.current_scroll_root_id);
|
||||
self.base.clip = state.clip_stack.last().cloned().unwrap_or_else(max_rect);
|
||||
|
||||
- for mut fragment in self.fragments.fragments.iter_mut() {
|
||||
+ for fragment in self.fragments.fragments.iter_mut() {
|
||||
let previous_containing_block_scroll_root_id = state.containing_block_scroll_root_id;
|
||||
if establishes_containing_block_for_absolute(fragment.style.get_box().position) {
|
||||
state.containing_block_scroll_root_id = state.current_scroll_root_id;
|
||||
diff --git servo/components/layout/flex.rs servo/components/layout/flex.rs
|
||||
index 353c939f58b9..d79580f8cd0d 100644
|
||||
--- servo/components/layout/flex.rs
|
||||
+++ servo/components/layout/flex.rs
|
||||
@@ -415,7 +415,7 @@ impl FlexFlow {
|
||||
|
||||
let items = &mut self.items[start..];
|
||||
let mut children = self.block_flow.base.children.random_access_mut();
|
||||
- for mut item in items {
|
||||
+ for item in items {
|
||||
let kid = children.get(item.index);
|
||||
item.init_sizes(kid, container_size, self.main_mode);
|
||||
let outer_main_size = item.outer_main_size(kid, self.main_mode);
|
||||
@@ -607,7 +607,7 @@ impl FlexFlow {
|
||||
|
||||
let mut children = self.block_flow.base.children.random_access_mut();
|
||||
for item in items.iter_mut() {
|
||||
- let mut block = children.get(item.index).as_mut_block();
|
||||
+ let block = children.get(item.index).as_mut_block();
|
||||
|
||||
block.base.block_container_writing_mode = container_mode;
|
||||
block.base.block_container_inline_size = inline_size;
|
||||
@@ -659,7 +659,7 @@ impl FlexFlow {
|
||||
|
||||
let mut children = self.block_flow.base.children.random_access_mut();
|
||||
for item in &mut self.items {
|
||||
- let mut base = flow::mut_base(children.get(item.index));
|
||||
+ let base = flow::mut_base(children.get(item.index));
|
||||
if !self.main_reverse {
|
||||
base.position.start.b = cur_b;
|
||||
cur_b = cur_b + base.position.size.block;
|
||||
diff --git servo/components/layout/inline.rs servo/components/layout/inline.rs
|
||||
index d5813d9bea22..10e091c3c66d 100644
|
||||
--- servo/components/layout/inline.rs
|
||||
+++ servo/components/layout/inline.rs
|
||||
@@ -435,7 +435,7 @@ impl LineBreaker {
|
||||
return
|
||||
}
|
||||
let last_fragment_index = self.pending_line.range.end() - FragmentIndex(1);
|
||||
- let mut fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
|
||||
+ let fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
|
||||
|
||||
let old_fragment_inline_size = fragment.border_box.size.inline;
|
||||
|
||||
@@ -1047,7 +1047,7 @@ impl InlineFlow {
|
||||
let space_per_expansion_opportunity = slack_inline_size / expansion_opportunities as i32;
|
||||
for fragment_index in line.range.each_index() {
|
||||
let fragment = fragments.get_mut(fragment_index.to_usize());
|
||||
- let mut scanned_text_fragment_info = match fragment.specific {
|
||||
+ let scanned_text_fragment_info = match fragment.specific {
|
||||
SpecificFragmentInfo::ScannedText(ref mut info) if !info.range.is_empty() => info,
|
||||
_ => continue
|
||||
};
|
||||
diff --git servo/components/layout/sequential.rs servo/components/layout/sequential.rs
|
||||
index f6f8ce429e4f..4986ebb6c852 100644
|
||||
--- servo/components/layout/sequential.rs
|
||||
+++ servo/components/layout/sequential.rs
|
||||
@@ -133,7 +133,7 @@ pub fn store_overflow(layout_context: &LayoutContext, flow: &mut Flow) {
|
||||
return;
|
||||
}
|
||||
|
||||
- for mut kid in flow::mut_base(flow).child_iter_mut() {
|
||||
+ for kid in flow::mut_base(flow).child_iter_mut() {
|
||||
store_overflow(layout_context, kid);
|
||||
}
|
||||
|
||||
diff --git servo/components/layout/table_cell.rs servo/components/layout/table_cell.rs
|
||||
index 7ef02e28db65..fd807989b463 100644
|
||||
--- servo/components/layout/table_cell.rs
|
||||
+++ servo/components/layout/table_cell.rs
|
||||
@@ -136,7 +136,7 @@ impl TableCellFlow {
|
||||
}
|
||||
|
||||
for kid in flow::mut_base(self).children.iter_mut() {
|
||||
- let mut kid_base = flow::mut_base(kid);
|
||||
+ let kid_base = flow::mut_base(kid);
|
||||
if !kid_base.flags.contains(IS_ABSOLUTELY_POSITIONED) {
|
||||
kid_base.position.start.b += offset
|
||||
}
|
||||
diff --git servo/components/layout/text.rs servo/components/layout/text.rs
|
||||
index 6e1c7b2a43a1..9a207a2bb84e 100644
|
||||
--- servo/components/layout/text.rs
|
||||
+++ servo/components/layout/text.rs
|
||||
@@ -460,7 +460,7 @@ fn split_first_fragment_at_newline_if_necessary(fragments: &mut LinkedList<Fragm
|
||||
}
|
||||
|
||||
let new_fragment = {
|
||||
- let mut first_fragment = fragments.front_mut().unwrap();
|
||||
+ let first_fragment = fragments.front_mut().unwrap();
|
||||
let string_before;
|
||||
let selection_before;
|
||||
{
|
||||
diff --git servo/components/net/cookie_storage.rs servo/components/net/cookie_storage.rs
|
||||
index f255f57b56d2..b3147ef4dd32 100644
|
||||
--- servo/components/net/cookie_storage.rs
|
||||
+++ servo/components/net/cookie_storage.rs
|
||||
@@ -103,7 +103,7 @@ impl CookieStorage {
|
||||
|
||||
// Step 12
|
||||
let domain = reg_host(&cookie.cookie.domain().as_ref().unwrap_or(&""));
|
||||
- let mut cookies = self.cookies_map.entry(domain).or_insert(vec![]);
|
||||
+ let cookies = self.cookies_map.entry(domain).or_insert(vec![]);
|
||||
|
||||
if cookies.len() == self.max_per_host {
|
||||
let old_len = cookies.len();
|
||||
diff --git servo/components/profile/heartbeats.rs servo/components/profile/heartbeats.rs
|
||||
index 4661dad61836..0d474fe3a111 100644
|
||||
--- servo/components/profile/heartbeats.rs
|
||||
+++ servo/components/profile/heartbeats.rs
|
||||
@@ -33,7 +33,7 @@ pub fn cleanup() {
|
||||
)
|
||||
);
|
||||
if let Some(mut hbs) = hbs_opt_box {
|
||||
- for (_, mut v) in hbs.iter_mut() {
|
||||
+ for (_, v) in hbs.iter_mut() {
|
||||
// log any remaining heartbeat records before dropping
|
||||
log_heartbeat_records(v);
|
||||
}
|
||||
@@ -65,7 +65,7 @@ pub fn maybe_heartbeat(category: &ProfilerCategory,
|
||||
if !(*hbs_ptr).contains_key(category) {
|
||||
maybe_create_heartbeat(&mut (*hbs_ptr), category.clone());
|
||||
}
|
||||
- if let Some(mut h) = (*hbs_ptr).get_mut(category) {
|
||||
+ if let Some(h) = (*hbs_ptr).get_mut(category) {
|
||||
(*h).heartbeat(0, 1, start_time, end_time, start_energy, end_energy);
|
||||
}
|
||||
}
|
||||
diff --git servo/components/script/dom/bindings/js.rs servo/components/script/dom/bindings/js.rs
|
||||
index 975ddeda13b0..abfd9f47eff1 100644
|
||||
--- servo/components/script/dom/bindings/js.rs
|
||||
+++ servo/components/script/dom/bindings/js.rs
|
||||
@@ -469,7 +469,7 @@ impl RootCollection {
|
||||
/// Start tracking a stack-based root
|
||||
unsafe fn root(&self, untracked_reflector: *const Reflector) {
|
||||
debug_assert!(thread_state::get().is_script());
|
||||
- let mut roots = &mut *self.roots.get();
|
||||
+ let roots = &mut *self.roots.get();
|
||||
roots.push(untracked_reflector);
|
||||
assert!(!(*untracked_reflector).get_jsobject().is_null())
|
||||
}
|
||||
@@ -479,7 +479,7 @@ impl RootCollection {
|
||||
assert!(!tracked_reflector.is_null());
|
||||
assert!(!(*tracked_reflector).get_jsobject().is_null());
|
||||
debug_assert!(thread_state::get().is_script());
|
||||
- let mut roots = &mut *self.roots.get();
|
||||
+ let roots = &mut *self.roots.get();
|
||||
match roots.iter().rposition(|r| *r == tracked_reflector) {
|
||||
Some(idx) => {
|
||||
roots.remove(idx);
|
||||
diff --git servo/components/script/dom/cssstyledeclaration.rs servo/components/script/dom/cssstyledeclaration.rs
|
||||
index 0732c9af9e45..ddf085b34913 100644
|
||||
--- servo/components/script/dom/cssstyledeclaration.rs
|
||||
+++ servo/components/script/dom/cssstyledeclaration.rs
|
||||
@@ -238,7 +238,7 @@ impl CSSStyleDeclaration {
|
||||
return Err(Error::NoModificationAllowed);
|
||||
}
|
||||
|
||||
- self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
|
||||
+ self.owner.mutate_associated_block(|pdb, changed| {
|
||||
if value.is_empty() {
|
||||
// Step 3
|
||||
*changed = pdb.remove_property(&id);
|
||||
@@ -360,7 +360,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
|
||||
_ => return Ok(()),
|
||||
};
|
||||
|
||||
- self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
|
||||
+ self.owner.mutate_associated_block(|pdb, changed| {
|
||||
// Step 5 & 6
|
||||
*changed = pdb.set_importance(&id, importance);
|
||||
});
|
||||
@@ -388,7 +388,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
|
||||
};
|
||||
|
||||
let mut string = String::new();
|
||||
- self.owner.mutate_associated_block(|mut pdb, mut changed| {
|
||||
+ self.owner.mutate_associated_block(|pdb, changed| {
|
||||
pdb.property_value_to_css(&id, &mut string).unwrap();
|
||||
*changed = pdb.remove_property(&id);
|
||||
});
|
||||
@@ -438,7 +438,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
|
||||
}
|
||||
|
||||
let quirks_mode = window.Document().quirks_mode();
|
||||
- self.owner.mutate_associated_block(|mut pdb, mut _changed| {
|
||||
+ self.owner.mutate_associated_block(|pdb, _changed| {
|
||||
// Step 3
|
||||
*pdb = parse_style_attribute(&value,
|
||||
&self.owner.base_url(),
|
||||
diff --git servo/components/script/dom/cssstylerule.rs servo/components/script/dom/cssstylerule.rs
|
||||
index ea121ef900a9..12e9cdcc8694 100644
|
||||
--- servo/components/script/dom/cssstylerule.rs
|
||||
+++ servo/components/script/dom/cssstylerule.rs
|
||||
@@ -99,7 +99,7 @@ impl CSSStyleRuleMethods for CSSStyleRule {
|
||||
if let Ok(mut s) = SelectorList::parse(&parser, &mut css_parser) {
|
||||
// This mirrors what we do in CSSStyleOwner::mutate_associated_block.
|
||||
let mut guard = self.cssrule.shared_lock().write();
|
||||
- let mut stylerule = self.stylerule.write_with(&mut guard);
|
||||
+ let stylerule = self.stylerule.write_with(&mut guard);
|
||||
mem::swap(&mut stylerule.selectors, &mut s);
|
||||
// It seems like we will want to avoid having to invalidate all
|
||||
// stylesheets eventually!
|
||||
diff --git servo/components/script/dom/document.rs servo/components/script/dom/document.rs
|
||||
index 90ea06fbe7b4..71bb02eaa364 100644
|
||||
--- servo/components/script/dom/document.rs
|
||||
+++ servo/components/script/dom/document.rs
|
||||
@@ -633,7 +633,7 @@ impl Document {
|
||||
// reset_form_owner_for_listeners -> reset_form_owner -> GetElementById
|
||||
{
|
||||
let mut id_map = self.id_map.borrow_mut();
|
||||
- let mut elements = id_map.entry(id.clone()).or_insert(Vec::new());
|
||||
+ let elements = id_map.entry(id.clone()).or_insert(Vec::new());
|
||||
elements.insert_pre_order(element, root.r().upcast::<Node>());
|
||||
}
|
||||
self.reset_form_owner_for_listeners(&id);
|
||||
@@ -642,7 +642,7 @@ impl Document {
|
||||
pub fn register_form_id_listener<T: ?Sized + FormControl>(&self, id: DOMString, listener: &T) {
|
||||
let mut map = self.form_id_listener_map.borrow_mut();
|
||||
let listener = listener.to_element();
|
||||
- let mut set = map.entry(Atom::from(id)).or_insert(HashSet::new());
|
||||
+ let set = map.entry(Atom::from(id)).or_insert(HashSet::new());
|
||||
set.insert(JS::from_ref(listener));
|
||||
}
|
||||
|
||||
@@ -1572,7 +1572,7 @@ impl Document {
|
||||
/// https://html.spec.whatwg.org/multipage/#dom-window-cancelanimationframe
|
||||
pub fn cancel_animation_frame(&self, ident: u32) {
|
||||
let mut list = self.animation_frame_list.borrow_mut();
|
||||
- if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == ident) {
|
||||
+ if let Some(pair) = list.iter_mut().find(|pair| pair.0 == ident) {
|
||||
pair.1 = None;
|
||||
}
|
||||
}
|
||||
@@ -2399,7 +2399,7 @@ impl Document {
|
||||
if entry.snapshot.is_none() {
|
||||
entry.snapshot = Some(Snapshot::new(el.html_element_in_html_document()));
|
||||
}
|
||||
- let mut snapshot = entry.snapshot.as_mut().unwrap();
|
||||
+ let snapshot = entry.snapshot.as_mut().unwrap();
|
||||
if snapshot.state.is_none() {
|
||||
snapshot.state = Some(el.state());
|
||||
}
|
||||
@@ -2426,7 +2426,7 @@ impl Document {
|
||||
entry.hint.insert(RESTYLE_SELF);
|
||||
}
|
||||
|
||||
- let mut snapshot = entry.snapshot.as_mut().unwrap();
|
||||
+ let snapshot = entry.snapshot.as_mut().unwrap();
|
||||
if attr.local_name() == &local_name!("id") {
|
||||
snapshot.id_changed = true;
|
||||
} else if attr.local_name() == &local_name!("class") {
|
||||
@@ -4028,7 +4028,7 @@ impl PendingInOrderScriptVec {
|
||||
|
||||
fn loaded(&self, element: &HTMLScriptElement, result: ScriptResult) {
|
||||
let mut scripts = self.scripts.borrow_mut();
|
||||
- let mut entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
|
||||
+ let entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
|
||||
entry.loaded(result);
|
||||
}
|
||||
|
||||
diff --git servo/components/script/dom/medialist.rs servo/components/script/dom/medialist.rs
|
||||
index 0064d0445095..ae20f5aa0422 100644
|
||||
--- servo/components/script/dom/medialist.rs
|
||||
+++ servo/components/script/dom/medialist.rs
|
||||
@@ -63,7 +63,7 @@ impl MediaListMethods for MediaList {
|
||||
// https://drafts.csswg.org/cssom/#dom-medialist-mediatext
|
||||
fn SetMediaText(&self, value: DOMString) {
|
||||
let mut guard = self.shared_lock().write();
|
||||
- let mut media_queries = self.media_queries.write_with(&mut guard);
|
||||
+ let media_queries = self.media_queries.write_with(&mut guard);
|
||||
// Step 2
|
||||
if value.is_empty() {
|
||||
// Step 1
|
||||
@@ -154,7 +154,7 @@ impl MediaListMethods for MediaList {
|
||||
// Step 3
|
||||
let m_serialized = m.unwrap().to_css_string();
|
||||
let mut guard = self.shared_lock().write();
|
||||
- let mut media_list = self.media_queries.write_with(&mut guard);
|
||||
+ let media_list = self.media_queries.write_with(&mut guard);
|
||||
let new_vec = media_list.media_queries.drain(..)
|
||||
.filter(|q| m_serialized != q.to_css_string())
|
||||
.collect();
|
||||
diff --git servo/components/script/dom/range.rs servo/components/script/dom/range.rs
|
||||
index fa849a0fc1a2..1e65caedc9dd 100644
|
||||
--- servo/components/script/dom/range.rs
|
||||
+++ servo/components/script/dom/range.rs
|
||||
@@ -1049,7 +1049,7 @@ impl WeakRangeVec {
|
||||
let offset = context.index();
|
||||
let parent = context.parent;
|
||||
unsafe {
|
||||
- let mut ranges = &mut *self.cell.get();
|
||||
+ let ranges = &mut *self.cell.get();
|
||||
|
||||
ranges.update(|entry| {
|
||||
let range = entry.root().unwrap();
|
||||
@@ -1076,7 +1076,7 @@ impl WeakRangeVec {
|
||||
}
|
||||
|
||||
unsafe {
|
||||
- let mut ranges = &mut *self.cell.get();
|
||||
+ let ranges = &mut *self.cell.get();
|
||||
|
||||
ranges.update(|entry| {
|
||||
let range = entry.root().unwrap();
|
||||
diff --git servo/components/script/dom/servoparser/async_html.rs servo/components/script/dom/servoparser/async_html.rs
|
||||
index 59411fda1c73..70d2008f49f6 100644
|
||||
--- servo/components/script/dom/servoparser/async_html.rs
|
||||
+++ servo/components/script/dom/servoparser/async_html.rs
|
||||
@@ -568,7 +568,7 @@ impl TreeSink for Sink {
|
||||
}
|
||||
let node = self.new_parse_node();
|
||||
{
|
||||
- let mut data = self.get_parse_node_data_mut(&target.id);
|
||||
+ let data = self.get_parse_node_data_mut(&target.id);
|
||||
data.contents = Some(node.clone());
|
||||
}
|
||||
self.send_op(ParseOperation::GetTemplateContents { target: target.id, contents: node.id });
|
||||
@@ -596,7 +596,7 @@ impl TreeSink for Sink {
|
||||
let mut node = self.new_parse_node();
|
||||
node.qual_name = Some(name.clone());
|
||||
{
|
||||
- let mut node_data = self.get_parse_node_data_mut(&node.id);
|
||||
+ let node_data = self.get_parse_node_data_mut(&node.id);
|
||||
node_data.is_integration_point = html_attrs.iter()
|
||||
.any(|attr| {
|
||||
let attr_value = &String::from(attr.value.clone());
|
||||
diff --git servo/components/script/dom/url.rs servo/components/script/dom/url.rs
|
||||
index a02a735638fc..41de4dcc0c72 100644
|
||||
--- servo/components/script/dom/url.rs
|
||||
+++ servo/components/script/dom/url.rs
|
||||
@@ -96,8 +96,8 @@ impl URL {
|
||||
|
||||
// https://w3c.github.io/FileAPI/#dfn-createObjectURL
|
||||
pub fn CreateObjectURL(global: &GlobalScope, blob: &Blob) -> DOMString {
|
||||
- /// XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
|
||||
- /// and should not be trusted. See issue https://github.com/servo/servo/issues/11722
|
||||
+ // XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
|
||||
+ // and should not be trusted. See issue https://github.com/servo/servo/issues/11722
|
||||
let origin = get_blob_origin(&global.get_url());
|
||||
|
||||
let id = blob.get_blob_url_id();
|
||||
diff --git servo/components/script/dom/vrdisplay.rs servo/components/script/dom/vrdisplay.rs
|
||||
index 3f73a577fad7..54f06fb928f2 100644
|
||||
--- servo/components/script/dom/vrdisplay.rs
|
||||
+++ servo/components/script/dom/vrdisplay.rs
|
||||
@@ -268,7 +268,7 @@ impl VRDisplayMethods for VRDisplay {
|
||||
fn CancelAnimationFrame(&self, handle: u32) {
|
||||
if self.presenting.get() {
|
||||
let mut list = self.raf_callback_list.borrow_mut();
|
||||
- if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == handle) {
|
||||
+ if let Some(pair) = list.iter_mut().find(|pair| pair.0 == handle) {
|
||||
pair.1 = None;
|
||||
}
|
||||
} else {
|
||||
diff --git servo/components/script/dom/webglrenderingcontext.rs servo/components/script/dom/webglrenderingcontext.rs
|
||||
index 73d4ddba1b90..62c92b42785c 100644
|
||||
--- servo/components/script/dom/webglrenderingcontext.rs
|
||||
+++ servo/components/script/dom/webglrenderingcontext.rs
|
||||
@@ -2434,7 +2434,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||
}
|
||||
|
||||
typedarray!(in(cx) let mut pixels_data: ArrayBufferView = pixels);
|
||||
- let (array_type, mut data) = match { pixels_data.as_mut() } {
|
||||
+ let (array_type, data) = match { pixels_data.as_mut() } {
|
||||
Ok(data) => (data.get_array_type(), data.as_mut_slice()),
|
||||
Err(_) => return Err(Error::Type("Not an ArrayBufferView".to_owned())),
|
||||
};
|
||||
diff --git servo/components/script/dom/xmlhttprequest.rs servo/components/script/dom/xmlhttprequest.rs
|
||||
index 6ed2dda1851f..e6652d79d706 100644
|
||||
--- servo/components/script/dom/xmlhttprequest.rs
|
||||
+++ servo/components/script/dom/xmlhttprequest.rs
|
||||
@@ -627,7 +627,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||
|
||||
if !content_type_set {
|
||||
let ct = request.headers.get_mut::<ContentType>();
|
||||
- if let Some(mut ct) = ct {
|
||||
+ if let Some(ct) = ct {
|
||||
if let Some(encoding) = encoding {
|
||||
for param in &mut (ct.0).2 {
|
||||
if param.0 == MimeAttr::Charset {
|
||||
diff --git servo/components/script/lib.rs servo/components/script/lib.rs
|
||||
index e1a1ab592cb7..5824d6f2e490 100644
|
||||
--- servo/components/script/lib.rs
|
||||
+++ servo/components/script/lib.rs
|
||||
@@ -9,7 +9,6 @@
|
||||
#![feature(mpsc_select)]
|
||||
#![feature(nonzero)]
|
||||
#![feature(on_unimplemented)]
|
||||
-#![feature(option_entry)]
|
||||
#![feature(plugin)]
|
||||
#![feature(proc_macro)]
|
||||
#![feature(stmt_expr_attributes)]
|
||||
diff --git servo/components/script_plugins/unrooted_must_root.rs servo/components/script_plugins/unrooted_must_root.rs
|
||||
index 5dbd2b1a3bdd..f3f5e60ab62a 100644
|
||||
--- servo/components/script_plugins/unrooted_must_root.rs
|
||||
+++ servo/components/script_plugins/unrooted_must_root.rs
|
||||
@@ -182,7 +182,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
|
||||
}
|
||||
|
||||
match expr.node {
|
||||
- /// Trait casts from #[must_root] types are not allowed
|
||||
+ // Trait casts from #[must_root] types are not allowed
|
||||
hir::ExprCast(ref subexpr, _) => require_rooted(cx, self.in_new_function, &*subexpr),
|
||||
// This catches assignments... the main point of this would be to catch mutable
|
||||
// references to `JS<T>`.
|
||||
@@ -206,13 +206,21 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
|
||||
fn visit_pat(&mut self, pat: &'tcx hir::Pat) {
|
||||
let cx = self.cx;
|
||||
|
||||
- if let hir::PatKind::Binding(hir::BindingMode::BindByValue(_), _, _, _) = pat.node {
|
||||
- let ty = cx.tables.pat_ty(pat);
|
||||
- if is_unrooted_ty(cx, ty, self.in_new_function) {
|
||||
- cx.span_lint(UNROOTED_MUST_ROOT,
|
||||
- pat.span,
|
||||
- &format!("Expression of type {:?} must be rooted", ty))
|
||||
+ // We want to detect pattern bindings that move a value onto the stack.
|
||||
+ // When "default binding modes" https://github.com/rust-lang/rust/issues/42640
|
||||
+ // are implemented, the `Unannotated` case could cause false-positives.
|
||||
+ // These should be fixable by adding an explicit `ref`.
|
||||
+ match pat.node {
|
||||
+ hir::PatKind::Binding(hir::BindingAnnotation::Unannotated, _, _, _) |
|
||||
+ hir::PatKind::Binding(hir::BindingAnnotation::Mutable, _, _, _) => {
|
||||
+ let ty = cx.tables.pat_ty(pat);
|
||||
+ if is_unrooted_ty(cx, ty, self.in_new_function) {
|
||||
+ cx.span_lint(UNROOTED_MUST_ROOT,
|
||||
+ pat.span,
|
||||
+ &format!("Expression of type {:?} must be rooted", ty))
|
||||
+ }
|
||||
}
|
||||
+ _ => {}
|
||||
}
|
||||
|
||||
visit::walk_pat(self, pat);
|
||||
diff --git servo/components/selectors/matching.rs servo/components/selectors/matching.rs
|
||||
index 7bd9814d26fb..8f6b2fa6aa54 100644
|
||||
--- servo/components/selectors/matching.rs
|
||||
+++ servo/components/selectors/matching.rs
|
||||
@@ -458,7 +458,7 @@ where
|
||||
/// Matches a complex selector.
|
||||
pub fn matches_complex_selector<E, F>(mut iter: SelectorIter<E::Impl>,
|
||||
element: &E,
|
||||
- mut context: &mut LocalMatchingContext<E::Impl>,
|
||||
+ context: &mut LocalMatchingContext<E::Impl>,
|
||||
flags_setter: &mut F)
|
||||
-> bool
|
||||
where E: Element,
|
||||
diff --git servo/components/selectors/parser.rs servo/components/selectors/parser.rs
|
||||
index 490399ce38ce..6b2c1f2b4e86 100644
|
||||
--- servo/components/selectors/parser.rs
|
||||
+++ servo/components/selectors/parser.rs
|
||||
@@ -1464,7 +1464,7 @@ fn parse_negation<'i, 't, P, E, Impl>(parser: &P,
|
||||
fn parse_compound_selector<'i, 't, P, E, Impl>(
|
||||
parser: &P,
|
||||
input: &mut CssParser<'i, 't>,
|
||||
- mut builder: &mut SelectorBuilder<Impl>)
|
||||
+ builder: &mut SelectorBuilder<Impl>)
|
||||
-> Result<bool, ParseError<'i, SelectorParseError<'i, E>>>
|
||||
where P: Parser<'i, Impl=Impl, Error=E>, Impl: SelectorImpl
|
||||
{
|
||||
diff --git servo/components/style/invalidation/element/invalidator.rs servo/components/style/invalidation/element/invalidator.rs
|
||||
index 848c5cd13dc8..b8510ba3169b 100644
|
||||
--- servo/components/style/invalidation/element/invalidator.rs
|
||||
+++ servo/components/style/invalidation/element/invalidator.rs
|
||||
@@ -154,7 +154,7 @@ impl<'a, 'b: 'a, E> TreeStyleInvalidator<'a, 'b, E>
|
||||
trace!(" > visitedness change, force subtree restyle");
|
||||
// We can't just return here because there may also be attribute
|
||||
// changes as well that imply additional hints.
|
||||
- let mut data = self.data.as_mut().unwrap();
|
||||
+ let data = self.data.as_mut().unwrap();
|
||||
data.restyle.hint.insert(RestyleHint::restyle_subtree());
|
||||
}
|
||||
|
||||
diff --git servo/components/style/matching.rs servo/components/style/matching.rs
|
||||
index b62bc54bf768..f58d7cd123e6 100644
|
||||
--- servo/components/style/matching.rs
|
||||
+++ servo/components/style/matching.rs
|
||||
@@ -440,7 +440,7 @@ pub trait MatchMethods : TElement {
|
||||
fn finish_restyle(
|
||||
&self,
|
||||
context: &mut StyleContext<Self>,
|
||||
- mut data: &mut ElementData,
|
||||
+ data: &mut ElementData,
|
||||
mut new_styles: ElementStyles,
|
||||
important_rules_changed: bool,
|
||||
) -> ChildCascadeRequirement {
|
||||
diff --git servo/components/style/properties/properties.mako.rs servo/components/style/properties/properties.mako.rs
|
||||
index d98e173db5ba..81ff00fb6d5e 100644
|
||||
--- servo/components/style/properties/properties.mako.rs
|
||||
+++ servo/components/style/properties/properties.mako.rs
|
||||
@@ -3364,7 +3364,7 @@ pub fn modify_border_style_for_inline_sides(style: &mut Arc<ComputedValues>,
|
||||
return;
|
||||
}
|
||||
}
|
||||
- let mut style = Arc::make_mut(style);
|
||||
+ let style = Arc::make_mut(style);
|
||||
let border = Arc::make_mut(&mut style.border);
|
||||
match side {
|
||||
PhysicalSide::Left => {
|
||||
diff --git servo/components/style/style_adjuster.rs servo/components/style/style_adjuster.rs
|
||||
index 366641ebe0bc..6e51fa74072a 100644
|
||||
--- servo/components/style/style_adjuster.rs
|
||||
+++ servo/components/style/style_adjuster.rs
|
||||
@@ -269,7 +269,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
|
||||
|
||||
if overflow_x != original_overflow_x ||
|
||||
overflow_y != original_overflow_y {
|
||||
- let mut box_style = self.style.mutate_box();
|
||||
+ let box_style = self.style.mutate_box();
|
||||
box_style.set_overflow_x(overflow_x);
|
||||
box_style.set_overflow_y(overflow_y);
|
||||
}
|
||||
diff --git servo/components/style/style_resolver.rs servo/components/style/style_resolver.rs
|
||||
index cf512c4fbdd2..3fc1d57cc8f7 100644
|
||||
--- servo/components/style/style_resolver.rs
|
||||
+++ servo/components/style/style_resolver.rs
|
||||
@@ -247,7 +247,7 @@ where
|
||||
Some(&*primary_style.style)
|
||||
};
|
||||
|
||||
- for (i, mut inputs) in pseudo_array.iter_mut().enumerate() {
|
||||
+ for (i, inputs) in pseudo_array.iter_mut().enumerate() {
|
||||
if let Some(inputs) = inputs.take() {
|
||||
let pseudo = PseudoElement::from_eager_index(i);
|
||||
pseudo_styles.set(
|
||||
diff --git servo/components/style/stylesheets/rule_list.rs servo/components/style/stylesheets/rule_list.rs
|
||||
index 82e78015400d..14b3dc5e7696 100644
|
||||
--- servo/components/style/stylesheets/rule_list.rs
|
||||
+++ servo/components/style/stylesheets/rule_list.rs
|
||||
@@ -150,7 +150,7 @@ impl CssRulesHelpers for RawOffsetArc<Locked<CssRules>> {
|
||||
|
||||
{
|
||||
let mut write_guard = lock.write();
|
||||
- let mut rules = self.write_with(&mut write_guard);
|
||||
+ let rules = self.write_with(&mut write_guard);
|
||||
// Step 5
|
||||
// Computes the maximum allowed parser state at a given index.
|
||||
let rev_state = rules.0.get(index).map_or(State::Body, CssRule::rule_state);
|
||||
diff --git servo/components/style/stylesheets/rule_parser.rs servo/components/style/stylesheets/rule_parser.rs
|
||||
index 007d7e11026e..f0d224e498a7 100644
|
||||
--- servo/components/style/stylesheets/rule_parser.rs
|
||||
+++ servo/components/style/stylesheets/rule_parser.rs
|
||||
@@ -209,7 +209,7 @@ impl<'a, 'i> AtRuleParser<'i> for TopLevelRuleParser<'a> {
|
||||
let id = register_namespace(&url)
|
||||
.map_err(|()| StyleParseError::UnspecifiedError)?;
|
||||
|
||||
- let mut namespaces = self.namespaces.as_mut().unwrap();
|
||||
+ let namespaces = self.namespaces.as_mut().unwrap();
|
||||
|
||||
let opt_prefix = if let Ok(prefix) = prefix_result {
|
||||
let prefix = Prefix::from(prefix.as_ref());
|
||||
diff --git servo/components/style/stylesheets/rules_iterator.rs servo/components/style/stylesheets/rules_iterator.rs
|
||||
index 95a3ab8b3885..65e1b637ae52 100644
|
||||
--- servo/components/style/stylesheets/rules_iterator.rs
|
||||
+++ servo/components/style/stylesheets/rules_iterator.rs
|
||||
@@ -70,7 +70,7 @@ impl<'a, 'b, C> Iterator for RulesIterator<'a, 'b, C>
|
||||
|
||||
let rule;
|
||||
let sub_iter = {
|
||||
- let mut nested_iter = self.stack.last_mut().unwrap();
|
||||
+ let nested_iter = self.stack.last_mut().unwrap();
|
||||
rule = match nested_iter.next() {
|
||||
Some(r) => r,
|
||||
None => {
|
||||
diff --git servo/components/webdriver_server/lib.rs servo/components/webdriver_server/lib.rs
|
||||
index bd2f667f9892..28a4885f0d41 100644
|
||||
--- servo/components/webdriver_server/lib.rs
|
||||
+++ servo/components/webdriver_server/lib.rs
|
||||
@@ -702,7 +702,7 @@ impl Handler {
|
||||
fn handle_set_timeouts(&mut self,
|
||||
parameters: &TimeoutsParameters)
|
||||
-> WebDriverResult<WebDriverResponse> {
|
||||
- let mut session = self.session
|
||||
+ let session = self.session
|
||||
.as_mut()
|
||||
.ok_or(WebDriverError::new(ErrorStatus::SessionNotCreated, ""))?;
|
||||
|
||||
diff --git servo/rust-commit-hash servo/rust-commit-hash
|
||||
index d4f08fe97644..a08d23cd1a71 100644
|
||||
--- servo/rust-commit-hash
|
||||
+++ servo/rust-commit-hash
|
||||
@@ -1 +1 @@
|
||||
-599be0d18f4c6ddf36366d2a5a2ca6dc65886896
|
||||
+13d94d5fa8129a34f5c77a1bcd76983f5aed2434
|
||||
diff --git servo/tests/unit/style/stylist.rs servo/tests/unit/style/stylist.rs
|
||||
index da9a9478957a..52067b501788 100644
|
||||
--- servo/tests/unit/style/stylist.rs
|
||||
+++ servo/tests/unit/style/stylist.rs
|
||||
@@ -51,19 +51,6 @@ fn get_mock_rules(css_selectors: &[&str]) -> (Vec<Vec<Rule>>, SharedRwLock) {
|
||||
}).collect(), shared_lock)
|
||||
}
|
||||
|
||||
-fn get_mock_map(selectors: &[&str]) -> (SelectorMap<Rule>, SharedRwLock) {
|
||||
- let mut map = SelectorMap::<Rule>::new();
|
||||
- let (selector_rules, shared_lock) = get_mock_rules(selectors);
|
||||
-
|
||||
- for rules in selector_rules.into_iter() {
|
||||
- for rule in rules.into_iter() {
|
||||
- map.insert(rule, QuirksMode::NoQuirks)
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- (map, shared_lock)
|
||||
-}
|
||||
-
|
||||
fn parse_selectors(selectors: &[&str]) -> Vec<Selector<SelectorImpl>> {
|
||||
selectors.iter()
|
||||
.map(|x| SelectorParser::parse_author_origin_no_namespace(x).unwrap().0
|
@ -1,232 +0,0 @@
|
||||
commit f0acf27d189d
|
||||
Author: Simon Sapin <simon.sapin@exyr.org>
|
||||
Date: Thu Aug 17 11:05:32 2017 -0500
|
||||
|
||||
servo: Merge #18126 - geckolib: Fix some warnings (treated as error) new in Rust Nigthly (from servo:glow-fox); r=emilio
|
||||
|
||||
Source-Repo: https://github.com/servo/servo
|
||||
Source-Revision: cc86ca2bcdec5e89ee5279085ea38db63ef41af9
|
||||
|
||||
--HG--
|
||||
extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear
|
||||
extra : subtree_revision : 0586dbc81f1411c89821605a6dae4ebd0af8f0d5
|
||||
---
|
||||
servo/components/style/gecko/conversions.rs | 2 +-
|
||||
servo/components/style/gecko/wrapper.rs | 2 +-
|
||||
.../style/gecko_bindings/sugar/ns_t_array.rs | 4 ++--
|
||||
servo/components/style/properties/gecko.mako.rs | 18 +++++++++---------
|
||||
servo/components/style/style_adjuster.rs | 4 ++--
|
||||
servo/ports/geckolib/glue.rs | 12 ++++++------
|
||||
6 files changed, 21 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git servo/components/style/gecko/conversions.rs servo/components/style/gecko/conversions.rs
|
||||
index 8f3fb6bf2d0f..51015997c5c1 100644
|
||||
--- servo/components/style/gecko/conversions.rs
|
||||
+++ servo/components/style/gecko/conversions.rs
|
||||
@@ -348,7 +348,7 @@ impl nsStyleImage {
|
||||
// NB: stops are guaranteed to be none in the gecko side by
|
||||
// default.
|
||||
|
||||
- let mut gecko_stop = unsafe {
|
||||
+ let gecko_stop = unsafe {
|
||||
&mut (*gecko_gradient).mStops[index]
|
||||
};
|
||||
let mut coord = nsStyleCoord::null();
|
||||
diff --git servo/components/style/gecko/wrapper.rs servo/components/style/gecko/wrapper.rs
|
||||
index 034dd94590e2..c402ddaf15bd 100644
|
||||
--- servo/components/style/gecko/wrapper.rs
|
||||
+++ servo/components/style/gecko/wrapper.rs
|
||||
@@ -424,7 +424,7 @@ impl<'lb> GeckoXBLBinding<'lb> {
|
||||
}
|
||||
}
|
||||
|
||||
- fn each_xbl_stylist<F>(self, mut f: &mut F)
|
||||
+ fn each_xbl_stylist<F>(self, f: &mut F)
|
||||
where
|
||||
F: FnMut(&Stylist),
|
||||
{
|
||||
diff --git servo/components/style/gecko_bindings/sugar/ns_t_array.rs servo/components/style/gecko_bindings/sugar/ns_t_array.rs
|
||||
index 6bc389702f54..068e10ddea1b 100644
|
||||
--- servo/components/style/gecko_bindings/sugar/ns_t_array.rs
|
||||
+++ servo/components/style/gecko_bindings/sugar/ns_t_array.rs
|
||||
@@ -90,7 +90,7 @@ impl<T> nsTArray<T> {
|
||||
// this can leak
|
||||
debug_assert!(len >= self.len() as u32);
|
||||
self.ensure_capacity(len as usize);
|
||||
- let mut header = self.header_mut();
|
||||
+ let header = self.header_mut();
|
||||
header.mLength = len;
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ impl<T> nsTArray<T> {
|
||||
/// This will not leak since it only works on POD types (and thus doesn't assert)
|
||||
pub unsafe fn set_len_pod(&mut self, len: u32) where T: Copy {
|
||||
self.ensure_capacity(len as usize);
|
||||
- let mut header = unsafe { self.header_mut() };
|
||||
+ let header = unsafe { self.header_mut() };
|
||||
header.mLength = len;
|
||||
}
|
||||
}
|
||||
diff --git servo/components/style/properties/gecko.mako.rs servo/components/style/properties/gecko.mako.rs
|
||||
index 9a2ab2135fc5..bc41ef139af5 100644
|
||||
--- servo/components/style/properties/gecko.mako.rs
|
||||
+++ servo/components/style/properties/gecko.mako.rs
|
||||
@@ -4136,14 +4136,14 @@ fn static_assert() {
|
||||
fn init_shadow(filter: &mut nsStyleFilter) -> &mut nsCSSShadowArray {
|
||||
unsafe {
|
||||
let ref mut union = filter.__bindgen_anon_1;
|
||||
- let mut shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
|
||||
+ let shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
|
||||
*shadow_array = Gecko_NewCSSShadowArray(1);
|
||||
|
||||
&mut **shadow_array
|
||||
}
|
||||
}
|
||||
|
||||
- let mut gecko_shadow = init_shadow(gecko_filter);
|
||||
+ let gecko_shadow = init_shadow(gecko_filter);
|
||||
gecko_shadow.mArray[0].set_from_simple_shadow(shadow);
|
||||
},
|
||||
Url(ref url) => {
|
||||
@@ -4665,14 +4665,14 @@ fn static_assert() {
|
||||
unsafe {
|
||||
// We have to be very careful to avoid a copy here!
|
||||
let ref mut union = ${ident}.__bindgen_anon_1;
|
||||
- let mut shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
|
||||
+ let shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
|
||||
*shape = Gecko_NewBasicShape(ty);
|
||||
&mut **shape
|
||||
}
|
||||
}
|
||||
match servo_shape {
|
||||
BasicShape::Inset(inset) => {
|
||||
- let mut shape = init_shape(${ident}, StyleBasicShapeType::Inset);
|
||||
+ let shape = init_shape(${ident}, StyleBasicShapeType::Inset);
|
||||
unsafe { shape.mCoordinates.set_len(4) };
|
||||
|
||||
// set_len() can't call constructors, so the coordinates
|
||||
@@ -4694,7 +4694,7 @@ fn static_assert() {
|
||||
set_corners_from_radius(inset.round, &mut shape.mRadius);
|
||||
}
|
||||
BasicShape::Circle(circ) => {
|
||||
- let mut shape = init_shape(${ident}, StyleBasicShapeType::Circle);
|
||||
+ let shape = init_shape(${ident}, StyleBasicShapeType::Circle);
|
||||
unsafe { shape.mCoordinates.set_len(1) };
|
||||
shape.mCoordinates[0].leaky_set_null();
|
||||
circ.radius.to_gecko_style_coord(&mut shape.mCoordinates[0]);
|
||||
@@ -4702,7 +4702,7 @@ fn static_assert() {
|
||||
shape.mPosition = circ.position.into();
|
||||
}
|
||||
BasicShape::Ellipse(el) => {
|
||||
- let mut shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
|
||||
+ let shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
|
||||
unsafe { shape.mCoordinates.set_len(2) };
|
||||
shape.mCoordinates[0].leaky_set_null();
|
||||
el.semiaxis_x.to_gecko_style_coord(&mut shape.mCoordinates[0]);
|
||||
@@ -4712,7 +4712,7 @@ fn static_assert() {
|
||||
shape.mPosition = el.position.into();
|
||||
}
|
||||
BasicShape::Polygon(poly) => {
|
||||
- let mut shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
|
||||
+ let shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
|
||||
unsafe {
|
||||
shape.mCoordinates.set_len(poly.coordinates.len() as u32 * 2);
|
||||
}
|
||||
@@ -4797,7 +4797,7 @@ clip-path
|
||||
bindings::Gecko_nsStyleSVG_SetDashArrayLength(&mut self.gecko, v.len() as u32);
|
||||
}
|
||||
|
||||
- for (mut gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
|
||||
+ for (gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
|
||||
match servo {
|
||||
Either::First(number) => gecko.set_value(CoordDataValue::Factor(number)),
|
||||
Either::Second(lop) => gecko.set(lop),
|
||||
@@ -4885,7 +4885,7 @@ clip-path
|
||||
}
|
||||
|
||||
self.gecko.mContextPropsBits = 0;
|
||||
- for (mut gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
|
||||
+ for (gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
|
||||
if servo.0 == atom!("fill") {
|
||||
self.gecko.mContextPropsBits |= structs::NS_STYLE_CONTEXT_PROPERTY_FILL as u8;
|
||||
} else if servo.0 == atom!("stroke") {
|
||||
diff --git servo/components/style/style_adjuster.rs servo/components/style/style_adjuster.rs
|
||||
index 03b15916b237..366641ebe0bc 100644
|
||||
--- servo/components/style/style_adjuster.rs
|
||||
+++ servo/components/style/style_adjuster.rs
|
||||
@@ -167,7 +167,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
|
||||
// When 'contain: paint', update overflow from 'visible' to 'clip'.
|
||||
if self.style.get_box().clone_contain().contains(contain::PAINT) {
|
||||
if self.style.get_box().clone_overflow_x() == overflow::visible {
|
||||
- let mut box_style = self.style.mutate_box();
|
||||
+ let box_style = self.style.mutate_box();
|
||||
box_style.set_overflow_x(overflow::_moz_hidden_unscrollable);
|
||||
box_style.set_overflow_y(overflow::_moz_hidden_unscrollable);
|
||||
}
|
||||
@@ -182,7 +182,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
|
||||
use properties::longhands::font_style::computed_value::T as font_style;
|
||||
use properties::longhands::font_weight::computed_value::T as font_weight;
|
||||
if self.style.get_font().clone__moz_math_variant() != moz_math_variant::none {
|
||||
- let mut font_style = self.style.mutate_font();
|
||||
+ let font_style = self.style.mutate_font();
|
||||
// Sadly we don't have a nice name for the computed value
|
||||
// of "font-weight: normal".
|
||||
font_style.set_font_weight(font_weight::normal());
|
||||
diff --git servo/ports/geckolib/glue.rs servo/ports/geckolib/glue.rs
|
||||
index 977728286fc3..fa09bee29553 100644
|
||||
--- servo/ports/geckolib/glue.rs
|
||||
+++ servo/ports/geckolib/glue.rs
|
||||
@@ -815,7 +815,7 @@ pub extern "C" fn Servo_StyleSet_AppendStyleSheet(
|
||||
) {
|
||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
|
||||
- let mut data = &mut *data;
|
||||
+ let data = &mut *data;
|
||||
let guard = global_style_data.shared_lock.read();
|
||||
data.stylesheets.append_stylesheet(
|
||||
&data.stylist,
|
||||
@@ -867,7 +867,7 @@ pub extern "C" fn Servo_StyleSet_PrependStyleSheet(
|
||||
) {
|
||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
|
||||
- let mut data = &mut *data;
|
||||
+ let data = &mut *data;
|
||||
let guard = global_style_data.shared_lock.read();
|
||||
data.stylesheets.prepend_stylesheet(
|
||||
&data.stylist,
|
||||
@@ -885,7 +885,7 @@ pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
|
||||
) {
|
||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
|
||||
- let mut data = &mut *data;
|
||||
+ let data = &mut *data;
|
||||
let guard = global_style_data.shared_lock.read();
|
||||
data.stylesheets.insert_stylesheet_before(
|
||||
&data.stylist,
|
||||
@@ -903,7 +903,7 @@ pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
|
||||
) {
|
||||
let global_style_data = &*GLOBAL_STYLE_DATA;
|
||||
let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
|
||||
- let mut data = &mut *data;
|
||||
+ let data = &mut *data;
|
||||
let guard = global_style_data.shared_lock.read();
|
||||
data.stylesheets.remove_stylesheet(
|
||||
&data.stylist,
|
||||
@@ -1274,7 +1274,7 @@ pub extern "C" fn Servo_StyleRule_GetSpecificityAtIndex(
|
||||
specificity: *mut u64
|
||||
) {
|
||||
read_locked_arc(rule, |rule: &StyleRule| {
|
||||
- let mut specificity = unsafe { specificity.as_mut().unwrap() };
|
||||
+ let specificity = unsafe { specificity.as_mut().unwrap() };
|
||||
let index = index as usize;
|
||||
if index >= rule.selectors.0.len() {
|
||||
*specificity = 0;
|
||||
@@ -2775,7 +2775,7 @@ pub extern "C" fn Servo_NoteExplicitHints(element: RawGeckoElementBorrowed,
|
||||
pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed,
|
||||
was_restyled: *mut bool) -> nsChangeHint
|
||||
{
|
||||
- let mut was_restyled = unsafe { was_restyled.as_mut().unwrap() };
|
||||
+ let was_restyled = unsafe { was_restyled.as_mut().unwrap() };
|
||||
let element = GeckoElement(element);
|
||||
|
||||
let damage = match element.mutate_data() {
|
Loading…
Reference in New Issue
Block a user