Compare commits
6 commits
aramo/140.
...
ecne
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ff85d7c623 | ||
|
|
a5f93cb214 | ||
|
|
8eb1f1732f | ||
|
|
450538011a | ||
|
|
30225f2e73 | ||
|
|
7d0f5dab3b |
6328 changed files with 597419 additions and 643605 deletions
|
|
@ -5,13 +5,13 @@
|
|||
[source.crates-io]
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/IceCatGraphics/aa-stroke?rev=a821fa621c2def48e90c82774b4c6563b5a8ea4a"]
|
||||
git = "https://github.com/IceCatGraphics/aa-stroke"
|
||||
[source."git+https://github.com/FirefoxGraphics/aa-stroke?rev=a821fa621c2def48e90c82774b4c6563b5a8ea4a"]
|
||||
git = "https://github.com/FirefoxGraphics/aa-stroke"
|
||||
rev = "a821fa621c2def48e90c82774b4c6563b5a8ea4a"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/IceCatGraphics/wpf-gpu-raster?rev=99979da091fd58fba8477e7fcdf5ec0727102916"]
|
||||
git = "https://github.com/IceCatGraphics/wpf-gpu-raster"
|
||||
[source."git+https://github.com/FirefoxGraphics/wpf-gpu-raster?rev=99979da091fd58fba8477e7fcdf5ec0727102916"]
|
||||
git = "https://github.com/FirefoxGraphics/wpf-gpu-raster"
|
||||
rev = "99979da091fd58fba8477e7fcdf5ec0727102916"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
|
|
@ -45,6 +45,11 @@ git = "https://github.com/gfx-rs/wgpu"
|
|||
rev = "88862f1fa3fd0f0c1010e9fc999dcfe47b5ae8fc"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/glandium/allocator-api2?rev=ad5f3d56a5a4519eff52af4ff85293431466ef5c"]
|
||||
git = "https://github.com/glandium/allocator-api2"
|
||||
rev = "ad5f3d56a5a4519eff52af4ff85293431466ef5c"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/glandium/rust-objc?rev=4de89f5aa9851ceca4d40e7ac1e2759410c04324"]
|
||||
git = "https://github.com/glandium/rust-objc"
|
||||
rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324"
|
||||
|
|
@ -70,9 +75,9 @@ git = "https://github.com/jfkthame/mapped_hyph.git"
|
|||
rev = "eff105f6ad7ec9b79816cfc1985a28e5340ad14b"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954"]
|
||||
[source."git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6"]
|
||||
git = "https://github.com/mozilla/application-services"
|
||||
rev = "9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/audioipc?rev=e6f44a2bd1e57d11dfc737632a9e849077632330"]
|
||||
|
|
@ -80,9 +85,9 @@ git = "https://github.com/mozilla/audioipc"
|
|||
rev = "e6f44a2bd1e57d11dfc737632a9e849077632330"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=2407441a2f67341a0e13b4ba6547555e387c671c"]
|
||||
[source."git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=bebaa23317332c95734df76e25193c24a83a6840"]
|
||||
git = "https://github.com/mozilla/cubeb-coreaudio-rs"
|
||||
rev = "2407441a2f67341a0e13b4ba6547555e387c671c"
|
||||
rev = "bebaa23317332c95734df76e25193c24a83a6840"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/cubeb-pulse-rs?rev=8678dcab1c287de79c4c184ccc2e065bc62b70e2"]
|
||||
|
|
@ -95,9 +100,9 @@ git = "https://github.com/mozilla/midir.git"
|
|||
rev = "85156e360a37d851734118104619f86bd18e94c6"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/mp4parse-rust?rev=e64650a686e5c5732395cd059e17cfd3b1e5b63b"]
|
||||
[source."git+https://github.com/mozilla/mp4parse-rust?rev=25ebfa59a21dc0d223052d73a2fafdd55307c2d7"]
|
||||
git = "https://github.com/mozilla/mp4parse-rust"
|
||||
rev = "e64650a686e5c5732395cd059e17cfd3b1e5b63b"
|
||||
rev = "25ebfa59a21dc0d223052d73a2fafdd55307c2d7"
|
||||
replace-with = "vendored-sources"
|
||||
|
||||
[source."git+https://github.com/mozilla/neqo?tag=v0.13.4"]
|
||||
|
|
|
|||
|
|
@ -263,8 +263,7 @@ jobs:
|
|||
- mozilla-release
|
||||
- mozilla-esr140
|
||||
when:
|
||||
- {weekday: 'Monday', hour: 8, minute: 0}
|
||||
- {weekday: 'Thursday', hour: 8, minute: 0}
|
||||
- {weekday: 'Monday', hour: 5, minute: 0}
|
||||
|
||||
- name: daily-beta-perf
|
||||
job:
|
||||
|
|
|
|||
7
icecat/.gitignore
vendored
7
icecat/.gitignore
vendored
|
|
@ -37,6 +37,10 @@ ID
|
|||
# third-party packages is dealt with by the script vendoring them.
|
||||
*.egg-info/
|
||||
|
||||
# Ignore pywebsocket3 intermediate files.
|
||||
testing/web-platform/tests/tools/third_party/pywebsocket3/pywebsocket3.egg-info
|
||||
testing/web-platform/tests/tools/third_party/pywebsocket3/build
|
||||
|
||||
# Vim swap files.
|
||||
.*.sw[a-z]
|
||||
.sw[a-z]
|
||||
|
|
@ -369,3 +373,6 @@ toolkit/crashreporter/minidump-analyzer/analyzer-test/target/
|
|||
|
||||
# Ignore mozperftest artifacts folder
|
||||
/artifacts/
|
||||
|
||||
# Ignore personal preferences files
|
||||
CLAUDE.local.md
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ tasks:
|
|||
description: 'Created by a [cron task](https://icecat-ci-tc.services.mozilla.com/tasks/${cron.task_id}) (${treeherder_link})'
|
||||
|
||||
provisionerId: "${trustDomain}-${repository.level}"
|
||||
workerType: "decision-gcp"
|
||||
workerType: "decision"
|
||||
|
||||
tags:
|
||||
$if: 'tasks_for == "hg-push"'
|
||||
|
|
|
|||
|
|
@ -22,4 +22,4 @@
|
|||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
Merge day clobber 2025-08-18
|
||||
Merge day clobber 2026-03-23
|
||||
56
icecat/Cargo.lock
generated
56
icecat/Cargo.lock
generated
|
|
@ -5,7 +5,7 @@ version = 3
|
|||
[[package]]
|
||||
name = "aa-stroke"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/IceCatGraphics/aa-stroke?rev=a821fa621c2def48e90c82774b4c6563b5a8ea4a#a821fa621c2def48e90c82774b4c6563b5a8ea4a"
|
||||
source = "git+https://github.com/FirefoxGraphics/aa-stroke?rev=a821fa621c2def48e90c82774b4c6563b5a8ea4a#a821fa621c2def48e90c82774b4c6563b5a8ea4a"
|
||||
dependencies = [
|
||||
"euclid",
|
||||
]
|
||||
|
|
@ -27,7 +27,8 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "allocator-api2"
|
||||
version = "0.2.999"
|
||||
version = "0.2.21"
|
||||
source = "git+https://github.com/glandium/allocator-api2?rev=ad5f3d56a5a4519eff52af4ff85293431466ef5c#ad5f3d56a5a4519eff52af4ff85293431466ef5c"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
|
@ -973,7 +974,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "context_id"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"chrono",
|
||||
"error-support",
|
||||
|
|
@ -1085,7 +1086,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "coreaudio-sys-utils"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=2407441a2f67341a0e13b4ba6547555e387c671c#2407441a2f67341a0e13b4ba6547555e387c671c"
|
||||
source = "git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=bebaa23317332c95734df76e25193c24a83a6840#bebaa23317332c95734df76e25193c24a83a6840"
|
||||
dependencies = [
|
||||
"core-foundation-sys",
|
||||
"coreaudio-sys",
|
||||
|
|
@ -1165,6 +1166,7 @@ dependencies = [
|
|||
name = "crash_helper_common"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"getrandom 0.3.3",
|
||||
"minidump-writer",
|
||||
"nix 0.30.1",
|
||||
"num-derive",
|
||||
|
|
@ -1396,7 +1398,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "cubeb-coreaudio"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=2407441a2f67341a0e13b4ba6547555e387c671c#2407441a2f67341a0e13b4ba6547555e387c671c"
|
||||
source = "git+https://github.com/mozilla/cubeb-coreaudio-rs?rev=bebaa23317332c95734df76e25193c24a83a6840#bebaa23317332c95734df76e25193c24a83a6840"
|
||||
dependencies = [
|
||||
"atomic",
|
||||
"audio-mixer",
|
||||
|
|
@ -1912,7 +1914,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "error-support"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"env_logger",
|
||||
"error-support-macros",
|
||||
|
|
@ -1925,7 +1927,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "error-support-macros"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -2042,9 +2044,9 @@ dependencies = [
|
|||
]
|
||||
|
||||
[[package]]
|
||||
name = "icecat-versioning"
|
||||
name = "firefox-versioning"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"serde_json",
|
||||
"thiserror 1.999.999",
|
||||
|
|
@ -3385,7 +3387,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "interrupt-support"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"parking_lot",
|
||||
|
|
@ -4605,7 +4607,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "mp4parse"
|
||||
version = "0.17.0"
|
||||
source = "git+https://github.com/mozilla/mp4parse-rust?rev=e64650a686e5c5732395cd059e17cfd3b1e5b63b#e64650a686e5c5732395cd059e17cfd3b1e5b63b"
|
||||
source = "git+https://github.com/mozilla/mp4parse-rust?rev=25ebfa59a21dc0d223052d73a2fafdd55307c2d7#25ebfa59a21dc0d223052d73a2fafdd55307c2d7"
|
||||
dependencies = [
|
||||
"bitreader",
|
||||
"byteorder",
|
||||
|
|
@ -4622,7 +4624,7 @@ version = "0.1.0"
|
|||
[[package]]
|
||||
name = "mp4parse_capi"
|
||||
version = "0.17.0"
|
||||
source = "git+https://github.com/mozilla/mp4parse-rust?rev=e64650a686e5c5732395cd059e17cfd3b1e5b63b#e64650a686e5c5732395cd059e17cfd3b1e5b63b"
|
||||
source = "git+https://github.com/mozilla/mp4parse-rust?rev=25ebfa59a21dc0d223052d73a2fafdd55307c2d7#25ebfa59a21dc0d223052d73a2fafdd55307c2d7"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"fallible_collections",
|
||||
|
|
@ -5115,7 +5117,7 @@ checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
|
|||
[[package]]
|
||||
name = "payload-support"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_derive",
|
||||
|
|
@ -5622,7 +5624,7 @@ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
|
|||
[[package]]
|
||||
name = "relevancy"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"base64 0.21.999",
|
||||
|
|
@ -5646,12 +5648,12 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "remote_settings"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"camino",
|
||||
"error-support",
|
||||
"icecat-versioning",
|
||||
"firefox-versioning",
|
||||
"jexl-eval",
|
||||
"parking_lot",
|
||||
"regex",
|
||||
|
|
@ -5947,10 +5949,10 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "search"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"error-support",
|
||||
"icecat-versioning",
|
||||
"firefox-versioning",
|
||||
"parking_lot",
|
||||
"remote_settings",
|
||||
"serde",
|
||||
|
|
@ -6239,7 +6241,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "sql-support"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"error-support",
|
||||
"interrupt-support",
|
||||
|
|
@ -6438,7 +6440,7 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
|
|||
[[package]]
|
||||
name = "suggest"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"chrono",
|
||||
|
|
@ -6491,7 +6493,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "sync-guid"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"base64 0.21.999",
|
||||
"rand",
|
||||
|
|
@ -6502,7 +6504,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "sync15"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"error-support",
|
||||
|
|
@ -6541,7 +6543,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "tabs"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"error-support",
|
||||
|
|
@ -6899,7 +6901,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
|
|||
[[package]]
|
||||
name = "types"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"rusqlite 0.33.0",
|
||||
"serde",
|
||||
|
|
@ -7311,7 +7313,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
|||
[[package]]
|
||||
name = "viaduct"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"error-support",
|
||||
"ffi-support",
|
||||
|
|
@ -7480,7 +7482,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "webext-storage"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=9b46be5beedb6a1d859014a71bac58e2d722f954#9b46be5beedb6a1d859014a71bac58e2d722f954"
|
||||
source = "git+https://github.com/mozilla/application-services?rev=f5907a411e52a3985d0369d71c486eb507c2c4e6#f5907a411e52a3985d0369d71c486eb507c2c4e6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"error-support",
|
||||
|
|
@ -7899,7 +7901,7 @@ dependencies = [
|
|||
[[package]]
|
||||
name = "wpf-gpu-raster"
|
||||
version = "0.1.0"
|
||||
source = "git+https://github.com/IceCatGraphics/wpf-gpu-raster?rev=99979da091fd58fba8477e7fcdf5ec0727102916#99979da091fd58fba8477e7fcdf5ec0727102916"
|
||||
source = "git+https://github.com/FirefoxGraphics/wpf-gpu-raster?rev=99979da091fd58fba8477e7fcdf5ec0727102916#99979da091fd58fba8477e7fcdf5ec0727102916"
|
||||
dependencies = [
|
||||
"typed-arena-nomut",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -264,16 +264,17 @@ wr_malloc_size_of = { path = "gfx/wr/wr_malloc_size_of" }
|
|||
# objc 0.2.7 + fa7ca43b862861dd1cd000d7ad01e6e0266cda13
|
||||
objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" }
|
||||
|
||||
# application-services overrides to make updating them all simpler.
|
||||
context_id = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
relevancy = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
search = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
sql-support = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
suggest = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
sync15 = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
tabs = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
viaduct = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
webext-storage = { git = "https://github.com/mozilla/application-services", rev = "9b46be5beedb6a1d859014a71bac58e2d722f954" }
|
||||
# allocator-api2 + f95e3419ce41883904fcb2279b52aa35b5f04d76 + fdd92751afa7ce34408b677004b429d597e72c90
|
||||
allocator-api2 = { git = "https://github.com/glandium/allocator-api2", rev = "ad5f3d56a5a4519eff52af4ff85293431466ef5c" }
|
||||
|
||||
allocator-api2 = { path = "third_party/rust/allocator-api2" }
|
||||
# application-services overrides to make updating them all simpler.
|
||||
context_id = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
relevancy = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
search = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
sql-support = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
suggest = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
sync15 = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
tabs = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
viaduct = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
webext-storage = { git = "https://github.com/mozilla/application-services", rev = "f5907a411e52a3985d0369d71c486eb507c2c4e6" }
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ using namespace mozilla::a11y;
|
|||
// AccIterator
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
AccIterator::AccIterator(const LocalAccessible* aAccessible,
|
||||
AccIterator::AccIterator(LocalAccessible* aAccessible,
|
||||
filters::FilterFuncPtr aFilterFunc)
|
||||
: mFilterFunc(aFilterFunc) {
|
||||
mState = new IteratorState(aAccessible);
|
||||
|
|
@ -63,7 +63,7 @@ LocalAccessible* AccIterator::Next() {
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
// nsAccIterator::IteratorState
|
||||
|
||||
AccIterator::IteratorState::IteratorState(const LocalAccessible* aParent,
|
||||
AccIterator::IteratorState::IteratorState(LocalAccessible* aParent,
|
||||
IteratorState* mParentState)
|
||||
: mParent(aParent), mIndex(0), mParentState(mParentState) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class AccIterable {
|
|||
*/
|
||||
class AccIterator : public AccIterable {
|
||||
public:
|
||||
AccIterator(const LocalAccessible* aRoot, filters::FilterFuncPtr aFilterFunc);
|
||||
AccIterator(LocalAccessible* aRoot, filters::FilterFuncPtr aFilterFunc);
|
||||
virtual ~AccIterator();
|
||||
|
||||
/**
|
||||
|
|
@ -57,10 +57,10 @@ class AccIterator : public AccIterable {
|
|||
AccIterator& operator=(const AccIterator&);
|
||||
|
||||
struct IteratorState {
|
||||
explicit IteratorState(const LocalAccessible* aParent,
|
||||
explicit IteratorState(LocalAccessible* aParent,
|
||||
IteratorState* mParentState = nullptr);
|
||||
|
||||
const LocalAccessible* mParent;
|
||||
RefPtr<LocalAccessible> mParent;
|
||||
int32_t mIndex;
|
||||
IteratorState* mParentState;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -71,10 +71,14 @@ void CachedTableAccessible::Invalidate(Accessible* aAcc) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (Accessible* table = nsAccUtils::TableFor(aAcc)) {
|
||||
Accessible* table = nsAccUtils::TableFor(aAcc);
|
||||
while (table && table->IsTable()) {
|
||||
// Destroy the instance (if any). We'll create a new one the next time it
|
||||
// is requested.
|
||||
// is requested. Climb up the heirarcy to invalidate parent tables as well.
|
||||
sCachedTables->Remove(table);
|
||||
// The table may be a direct child of another table, invalidate that one as
|
||||
// well.
|
||||
table = table->Parent();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -536,7 +536,7 @@ static dom::Selection* GetDOMSelection(const nsIContent* aStartContent,
|
|||
return startFrameSel ? &startFrameSel->NormalSelection() : nullptr;
|
||||
}
|
||||
|
||||
std::pair<nsIContent*, uint32_t> TextLeafPoint::ToDOMPoint(
|
||||
std::pair<RefPtr<nsIContent>, uint32_t> TextLeafPoint::ToDOMPoint(
|
||||
bool aIncludeGenerated) const {
|
||||
if (!(*this) || !mAcc->IsLocal()) {
|
||||
MOZ_ASSERT_UNREACHABLE("Invalid point");
|
||||
|
|
|
|||
|
|
@ -188,7 +188,7 @@ class TextLeafPoint final {
|
|||
/**
|
||||
* Translate given TextLeafPoint into a DOM point.
|
||||
*/
|
||||
MOZ_CAN_RUN_SCRIPT std::pair<nsIContent*, uint32_t> ToDOMPoint(
|
||||
MOZ_CAN_RUN_SCRIPT std::pair<RefPtr<nsIContent>, uint32_t> ToDOMPoint(
|
||||
bool aIncludeGenerated = true) const;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -1768,11 +1768,12 @@ void DocAccessible::DoInitialUpdate() {
|
|||
}
|
||||
#endif
|
||||
|
||||
// Fire reorder event after the document tree is constructed. Note, since
|
||||
// this reorder event is processed by parent document then events targeted to
|
||||
// this document may be fired prior to this reorder event. If this is
|
||||
// a problem then consider to keep event processing per tab document.
|
||||
if (!IsRoot()) {
|
||||
// Fire a reorder event on the OuterDocAccessible after the document tree is
|
||||
// constructed. Note that since this reorder event is processed by the parent
|
||||
// document, events targeted to this child document may be fired prior to this
|
||||
// reorder event. We don't fire a reorder event for remote documents; the
|
||||
// parent process handles that.
|
||||
if (!IPCDoc() && !IsRoot()) {
|
||||
RefPtr<AccReorderEvent> reorderEvent = new AccReorderEvent(LocalParent());
|
||||
ParentDocument()->FireDelayedEvent(reorderEvent);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -859,16 +859,15 @@ void HyperTextAccessible::ReplaceText(const nsAString& aText) {
|
|||
return;
|
||||
}
|
||||
|
||||
RefPtr<EditorBase> editorBase = GetEditor();
|
||||
|
||||
SetSelectionBoundsAt(TextLeafRange::kRemoveAllExistingSelectedRanges, 0,
|
||||
CharacterCount());
|
||||
|
||||
RefPtr<EditorBase> editorBase = GetEditor();
|
||||
if (!editorBase) {
|
||||
return;
|
||||
if (editorBase) {
|
||||
DebugOnly<nsresult> rv = editorBase->InsertTextAsAction(aText);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Failed to insert the new text");
|
||||
}
|
||||
|
||||
DebugOnly<nsresult> rv = editorBase->InsertTextAsAction(aText);
|
||||
NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "Failed to insert the new text");
|
||||
}
|
||||
|
||||
void HyperTextAccessible::InsertText(const nsAString& aText,
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ DocAccessibleParent::DocAccessibleParent()
|
|||
mTopLevel(false),
|
||||
mTopLevelInContentProcess(false),
|
||||
mShutdown(false),
|
||||
mIsInitialTreeDone(false),
|
||||
mFocus(0),
|
||||
mCaretId(0),
|
||||
mCaretOffset(-1),
|
||||
|
|
@ -117,6 +118,11 @@ mozilla::ipc::IPCResult DocAccessibleParent::ProcessShowEvent(
|
|||
return IPC_OK();
|
||||
#endif
|
||||
}
|
||||
|
||||
if (parent->IsOuterDoc()) {
|
||||
return IPC_FAIL(this, "Cannot attach non-doc to OuterDoc");
|
||||
}
|
||||
|
||||
lastParent = parent;
|
||||
lastParentID = accData.ParentID();
|
||||
|
||||
|
|
@ -145,7 +151,9 @@ mozilla::ipc::IPCResult DocAccessibleParent::ProcessShowEvent(
|
|||
// Otherwise, clients might crawl the incomplete subtree and they won't get
|
||||
// mutation events for the remaining pieces.
|
||||
if (aComplete || root != child) {
|
||||
AttachChild(parent, childIdx, child);
|
||||
if (!AttachChild(parent, childIdx, child)) {
|
||||
return IPC_FAIL(this, "failed to attach child");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +182,9 @@ mozilla::ipc::IPCResult DocAccessibleParent::ProcessShowEvent(
|
|||
MOZ_ASSERT(rootParent);
|
||||
root = GetAccessible(mPendingShowChild);
|
||||
MOZ_ASSERT(root);
|
||||
AttachChild(rootParent, mPendingShowIndex, root);
|
||||
if (!AttachChild(rootParent, mPendingShowIndex, root)) {
|
||||
return IPC_FAIL(this, "failed to attach pending show child");
|
||||
}
|
||||
mPendingShowChild = 0;
|
||||
mPendingShowParent = 0;
|
||||
mPendingShowIndex = 0;
|
||||
|
|
@ -218,6 +228,11 @@ mozilla::ipc::IPCResult DocAccessibleParent::ProcessShowEvent(
|
|||
|
||||
RemoteAccessible* DocAccessibleParent::CreateAcc(
|
||||
const AccessibleData& aAccData) {
|
||||
if (aAccData.ID() == 0) {
|
||||
MOZ_ASSERT_UNREACHABLE("An ID of 0 is reserved for the document itself");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RemoteAccessible* newProxy;
|
||||
if ((newProxy = GetAccessible(aAccData.ID()))) {
|
||||
// This is a move. Reuse the Accessible; don't destroy it.
|
||||
|
|
@ -234,6 +249,11 @@ RemoteAccessible* DocAccessibleParent::CreateAcc(
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
if (aAccData.GenericTypes() & eDocument) {
|
||||
MOZ_ASSERT_UNREACHABLE("Invalid acc type");
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
newProxy = new RemoteAccessible(aAccData.ID(), this, aAccData.Role(),
|
||||
aAccData.Type(), aAccData.GenericTypes(),
|
||||
aAccData.RoleMapEntryIndex());
|
||||
|
|
@ -246,9 +266,20 @@ RemoteAccessible* DocAccessibleParent::CreateAcc(
|
|||
return newProxy;
|
||||
}
|
||||
|
||||
void DocAccessibleParent::AttachChild(RemoteAccessible* aParent,
|
||||
bool DocAccessibleParent::AttachChild(RemoteAccessible* aParent,
|
||||
uint32_t aIndex,
|
||||
RemoteAccessible* aChild) {
|
||||
if (aChild->RemoteParent()) {
|
||||
MOZ_ASSERT_UNREACHABLE(
|
||||
"Attempt to attach child which already has a parent!");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (aParent == aChild) {
|
||||
MOZ_ASSERT_UNREACHABLE("Attempt to make an accessible its own child!");
|
||||
return false;
|
||||
}
|
||||
|
||||
aParent->AddChildAt(aIndex, aChild);
|
||||
aChild->SetParent(aParent);
|
||||
// ProxyCreated might have already been called if aChild is being moved.
|
||||
|
|
@ -269,11 +300,16 @@ void DocAccessibleParent::AttachChild(RemoteAccessible* aParent,
|
|||
}
|
||||
MOZ_ASSERT(bridge->GetEmbedderAccessibleDoc() == this);
|
||||
if (DocAccessibleParent* childDoc = bridge->GetDocAccessibleParent()) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(!childDoc->RemoteParent(),
|
||||
"Pending OOP child doc shouldn't have parent "
|
||||
"once new OuterDoc is attached");
|
||||
AddChildDoc(childDoc, aChild->ID(), false);
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void DocAccessibleParent::ShutdownOrPrepareForMove(RemoteAccessible* aAcc) {
|
||||
|
|
@ -286,6 +322,10 @@ void DocAccessibleParent::ShutdownOrPrepareForMove(RemoteAccessible* aAcc) {
|
|||
// the show event. For now, clear all of them by moving them to a temporary.
|
||||
auto children{std::move(aAcc->mChildren)};
|
||||
for (RemoteAccessible* child : children) {
|
||||
if (child == aAcc) {
|
||||
MOZ_ASSERT_UNREACHABLE(
|
||||
"Somehow an accessible got added as a child of itself!");
|
||||
}
|
||||
ShutdownOrPrepareForMove(child);
|
||||
}
|
||||
}
|
||||
|
|
@ -603,6 +643,18 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvMutationEvents(
|
|||
|
||||
mozilla::ipc::IPCResult DocAccessibleParent::RecvRequestAckMutationEvents() {
|
||||
if (!mShutdown) {
|
||||
if (!mIsInitialTreeDone) {
|
||||
// This is the first request for an ACK, which means we now have the
|
||||
// initial tree.
|
||||
mIsInitialTreeDone = true;
|
||||
// If this document is already bound to its embedder, fire a reorder event
|
||||
// to notify the client that the embedded document is available. If not,
|
||||
// this will be handled when this document is bound in AddChildDoc.
|
||||
if (RemoteAccessible* parent = RemoteParent()) {
|
||||
parent->Document()->FireEvent(parent,
|
||||
nsIAccessibleEvent::EVENT_REORDER);
|
||||
}
|
||||
}
|
||||
Unused << SendAckMutationEvents();
|
||||
}
|
||||
return IPC_OK();
|
||||
|
|
@ -864,7 +916,10 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvBindChildDoc(
|
|||
MOZ_ASSERT(CheckDocTree());
|
||||
|
||||
auto childDoc = static_cast<DocAccessibleParent*>(aChildDoc.get());
|
||||
childDoc->Unbind();
|
||||
if (childDoc->IsShutdown()) {
|
||||
return IPC_FAIL(this, "Attempt to bind a shutdown child doc");
|
||||
}
|
||||
|
||||
ipc::IPCResult result = AddChildDoc(childDoc, aID, false);
|
||||
MOZ_ASSERT(result);
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
|
|
@ -882,6 +937,15 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvBindChildDoc(
|
|||
ipc::IPCResult DocAccessibleParent::AddChildDoc(DocAccessibleParent* aChildDoc,
|
||||
uint64_t aParentID,
|
||||
bool aCreating) {
|
||||
if (aChildDoc->RemoteParent()) {
|
||||
return IPC_FAIL(this,
|
||||
"Attempt to add child doc which already has a parent");
|
||||
}
|
||||
|
||||
if (aChildDoc->IsShutdown()) {
|
||||
return IPC_FAIL(this, "Attempt to add a shutdown child doc");
|
||||
}
|
||||
|
||||
// We do not use GetAccessible here because we want to be sure to not get the
|
||||
// document it self.
|
||||
ProxyEntry* e = mAccessibles.GetEntry(aParentID);
|
||||
|
|
@ -930,11 +994,20 @@ ipc::IPCResult DocAccessibleParent::AddChildDoc(DocAccessibleParent* aChildDoc,
|
|||
aChildDoc->SetEmulatedWindowHandle(mEmulatedWindowHandle);
|
||||
}
|
||||
#endif // defined(XP_WIN)
|
||||
// We need to fire a reorder event on the outer doc accessible.
|
||||
// For same-process documents, this is fired by the content process, but
|
||||
// this isn't possible when the document is in a different process to its
|
||||
// embedder.
|
||||
// FireEvent fires both OS and XPCOM events.
|
||||
}
|
||||
// We need to fire a reorder event on the embedder. We do this here rather
|
||||
// than in the content process for two reasons:
|
||||
// 1. It isn't possible for the content process to fire a reorder event on the
|
||||
// embedder when the embedded document is in a different process to its
|
||||
// embedder.
|
||||
// 2. Doing it here ensures that the event is fired after the child document
|
||||
// is bound. Otherwise, there could be a short period where the content
|
||||
// process has fired the reorder event, but the child document isn't bound
|
||||
// yet.
|
||||
// However, if the initial tree hasn't been received yet, we don't want to
|
||||
// fire the reorder event yet. That gets handled in
|
||||
// RecvRequestAckMutationEvents.
|
||||
if (aChildDoc->mIsInitialTreeDone) {
|
||||
FireEvent(outerDoc, nsIAccessibleEvent::EVENT_REORDER);
|
||||
}
|
||||
|
||||
|
|
@ -975,6 +1048,9 @@ void DocAccessibleParent::Destroy() {
|
|||
// If we are already shutdown that is because our containing tab parent is
|
||||
// shutting down in which case we don't need to do anything.
|
||||
if (mShutdown) {
|
||||
// Just in case there is a cycle in the document heirarchy.
|
||||
mParent = nullptr;
|
||||
mIndexInParent = -1;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1012,6 +1088,8 @@ void DocAccessibleParent::Destroy() {
|
|||
RemoteAccessible* acc = iter.Get()->mProxy;
|
||||
MOZ_ASSERT(acc != this);
|
||||
if (acc->IsTable()) {
|
||||
// Prevents the invalidation code from trying to walk up the tree.
|
||||
acc->SetParent(nullptr);
|
||||
CachedTableAccessible::Invalidate(acc);
|
||||
}
|
||||
ProxyDestroyed(acc);
|
||||
|
|
@ -1057,6 +1135,9 @@ void DocAccessibleParent::ActorDestroy(ActorDestroyReason aWhy) {
|
|||
if (!mShutdown) {
|
||||
ACQUIRE_ANDROID_LOCK
|
||||
Destroy();
|
||||
} else if (RemoteParent()) {
|
||||
ACQUIRE_ANDROID_LOCK
|
||||
Unbind();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -325,11 +325,14 @@ class DocAccessibleParent : public RemoteAccessible,
|
|||
};
|
||||
|
||||
RemoteAccessible* CreateAcc(const AccessibleData& aAccData);
|
||||
void AttachChild(RemoteAccessible* aParent, uint32_t aIndex,
|
||||
bool AttachChild(RemoteAccessible* aParent, uint32_t aIndex,
|
||||
RemoteAccessible* aChild);
|
||||
[[nodiscard]] bool CheckDocTree() const;
|
||||
xpcAccessibleGeneric* GetXPCAccessible(RemoteAccessible* aProxy);
|
||||
|
||||
/**
|
||||
* Fire an event to both OS and XPCOM consumers.
|
||||
*/
|
||||
void FireEvent(RemoteAccessible* aAcc, const uint32_t& aType);
|
||||
|
||||
/**
|
||||
|
|
@ -365,9 +368,10 @@ class DocAccessibleParent : public RemoteAccessible,
|
|||
uint32_t mPendingShowIndex = 0;
|
||||
nsTHashSet<uint64_t> mMovingIDs;
|
||||
uint64_t mActorID;
|
||||
bool mTopLevel;
|
||||
bool mTopLevelInContentProcess;
|
||||
bool mShutdown;
|
||||
bool mTopLevel : 1;
|
||||
bool mTopLevelInContentProcess : 1;
|
||||
bool mShutdown : 1;
|
||||
bool mIsInitialTreeDone : 1;
|
||||
RefPtr<dom::CanonicalBrowsingContext> mBrowsingContext;
|
||||
|
||||
nsTHashSet<RefPtr<dom::BrowserBridgeParent>> mPendingOOPChildDocs;
|
||||
|
|
|
|||
|
|
@ -429,6 +429,13 @@ static void AppendTextToAttributedString(
|
|||
|
||||
static RefPtr<AccAttributes> GetTextAttributes(TextLeafPoint aPoint) {
|
||||
RefPtr<AccAttributes> attrs = aPoint.GetTextAttributes();
|
||||
if (!attrs) {
|
||||
// If we can't fetch text attributes for the given point, return null.
|
||||
// We avoid creating a new AccAttributes here because our AttributedText()
|
||||
// code below relies on this null return value to indicate we're dealing
|
||||
// with a non-text control.
|
||||
return nullptr;
|
||||
}
|
||||
// Mac expects some object properties to be exposed as text attributes. We
|
||||
// add these here rather than in utils::StringAttributesFromAccAttributes so
|
||||
// we can use AccAttributes::Equal to determine whether we need to start a new
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ support-files = [
|
|||
["browser_hidden_iframe.js"]
|
||||
https_first_disabled = true
|
||||
|
||||
["browser_iframe_recreation.js"]
|
||||
|
||||
["browser_nested_iframe.js"]
|
||||
|
||||
["browser_reframe_root.js"]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
addAccessibleTask(
|
||||
`test`,
|
||||
async function testRecreation(browser, iframeDocAcc, topDocAcc) {
|
||||
let iframe = findAccessibleChildByID(topDocAcc, DEFAULT_IFRAME_ID);
|
||||
is(iframeDocAcc.parent, iframe, "iframe doc's parent is iframe");
|
||||
// The ARIA role currently causes re-creation. If that ever changes, we'll
|
||||
// need to switch to another technique here.
|
||||
info("Change iframe's role to recreate it");
|
||||
let shown = waitForEvent(EVENT_SHOW, DEFAULT_IFRAME_ID);
|
||||
let reordered = waitForEvent(EVENT_REORDER, DEFAULT_IFRAME_ID);
|
||||
await SpecialPowers.spawn(
|
||||
topDocAcc.browsingContext,
|
||||
[DEFAULT_IFRAME_ID],
|
||||
id => {
|
||||
content.document.getElementById(id).role = "foo";
|
||||
}
|
||||
);
|
||||
iframe = (await shown).accessible;
|
||||
await reordered;
|
||||
is(iframeDocAcc.parent, iframe, "iframe doc's parent is iframe");
|
||||
},
|
||||
{ chrome: false, topLevel: false, iframe: true, remoteIframe: true }
|
||||
);
|
||||
|
|
@ -276,3 +276,35 @@ addAccessibleTask(
|
|||
ok(!attributedText[2].AXHighlight);
|
||||
}
|
||||
);
|
||||
|
||||
// Test the <mark> element, in conjunction with content that will
|
||||
// prevent the creation of a text attributes object.
|
||||
addAccessibleTask(
|
||||
`<mark>a<button></button>b</mark>`,
|
||||
async function testMarkNoAttributes(browser, accDoc) {
|
||||
const macDoc = accDoc.nativeInterface.QueryInterface(
|
||||
Ci.nsIAccessibleMacInterface
|
||||
);
|
||||
const range = macDoc.getParameterizedAttributeValue(
|
||||
"AXTextMarkerRangeForUnorderedTextMarkers",
|
||||
[
|
||||
macDoc.getAttributeValue("AXStartTextMarker"),
|
||||
macDoc.getAttributeValue("AXEndTextMarker"),
|
||||
]
|
||||
);
|
||||
const attributedText = macDoc.getParameterizedAttributeValue(
|
||||
"AXAttributedStringForTextMarkerRange",
|
||||
range
|
||||
);
|
||||
ok(attributedText, "Document has attributed text");
|
||||
is(attributedText.length, 3, "3 pieces of attributed text exist");
|
||||
|
||||
ok(attributedText[0].AXHighlight, "0th pos text has highlight");
|
||||
is(attributedText[0].string, "a", "0th pos text is string `a`");
|
||||
|
||||
ok(!attributedText[1].AXHighlight, "1st pos text has no highlight");
|
||||
|
||||
ok(attributedText[2].AXHighlight, "2nd pos text has highlight");
|
||||
is(attributedText[2].string, "b", "2nd pos text is string `b`");
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -16,25 +16,9 @@ function getSiteBlockedErrorDetails(docShell) {
|
|||
Ci.nsIClassifiedChannel
|
||||
);
|
||||
if (classifiedChannel) {
|
||||
let httpChannel = docShell.failedChannel.QueryInterface(
|
||||
Ci.nsIHttpChannel
|
||||
);
|
||||
|
||||
let reportUri = httpChannel.URI;
|
||||
|
||||
// Remove the query to avoid leaking sensitive data
|
||||
if (reportUri instanceof Ci.nsIURL) {
|
||||
reportUri = reportUri.mutate().setQuery("").finalize();
|
||||
}
|
||||
|
||||
let triggeringPrincipal = docShell.failedChannel.loadInfo
|
||||
? docShell.failedChannel.loadInfo.triggeringPrincipal
|
||||
: null;
|
||||
blockedInfo = {
|
||||
list: classifiedChannel.matchedList,
|
||||
triggeringPrincipal,
|
||||
provider: classifiedChannel.matchedProvider,
|
||||
uri: reportUri.asciiSpec,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -177,8 +177,11 @@ export class BlockedSiteParent extends EscapablePageParent {
|
|||
// site, so that they don't lose track after, e.g., tab switching.
|
||||
// We can't use browser.contentPrincipal which is principal of about:blocked
|
||||
// Create one from uri with current principal origin attributes
|
||||
|
||||
// Remove the query to avoid leaking sensitive data
|
||||
let uri = browsingContext.currentURI.mutate().setQuery("").finalize();
|
||||
let principal = Services.scriptSecurityManager.createContentPrincipal(
|
||||
Services.io.newURI(blockedInfo.uri),
|
||||
uri,
|
||||
browsingContext.currentWindowGlobal.documentPrincipal.originAttributes
|
||||
);
|
||||
Services.perms.addFromPrincipal(
|
||||
|
|
@ -206,10 +209,10 @@ export class BlockedSiteParent extends EscapablePageParent {
|
|||
let title;
|
||||
let chromeWin = browsingContext.topChromeWindow;
|
||||
if (reason === "malware") {
|
||||
let reportUrl = lazy.SafeBrowsing.getReportURL(
|
||||
"MalwareMistake",
|
||||
blockedInfo
|
||||
);
|
||||
let reportUrl = lazy.SafeBrowsing.getReportURL("MalwareMistake", {
|
||||
...blockedInfo,
|
||||
uri: uri.asciiSpec,
|
||||
});
|
||||
title = lazy.browserBundle.GetStringFromName(
|
||||
"safebrowsing.reportedAttackSite"
|
||||
);
|
||||
|
|
@ -233,10 +236,10 @@ export class BlockedSiteParent extends EscapablePageParent {
|
|||
};
|
||||
}
|
||||
} else if (reason === "phishing") {
|
||||
let reportUrl = lazy.SafeBrowsing.getReportURL(
|
||||
"PhishMistake",
|
||||
blockedInfo
|
||||
);
|
||||
let reportUrl = lazy.SafeBrowsing.getReportURL("PhishMistake", {
|
||||
...blockedInfo,
|
||||
uri: uri.asciiSpec,
|
||||
});
|
||||
title = lazy.browserBundle.GetStringFromName(
|
||||
"safebrowsing.deceptiveSite"
|
||||
);
|
||||
|
|
@ -281,16 +284,15 @@ export class BlockedSiteParent extends EscapablePageParent {
|
|||
buttons
|
||||
);
|
||||
|
||||
// Allow users to override and continue through to the site.
|
||||
// Note that we have to use the passed URI info and can't just
|
||||
// rely on the document URI, because the latter contains
|
||||
// additional query parameters that should be stripped.
|
||||
let triggeringPrincipal =
|
||||
blockedInfo.triggeringPrincipal ||
|
||||
Services.scriptSecurityManager.createNullPrincipal({});
|
||||
let activeSHEntry = browsingContext.activeSessionHistoryEntry;
|
||||
if (!activeSHEntry) {
|
||||
console.error("No active session history entry found");
|
||||
return;
|
||||
}
|
||||
|
||||
browsingContext.fixupAndLoadURIString(blockedInfo.uri, {
|
||||
triggeringPrincipal,
|
||||
// Allow users to override and continue through to the site.
|
||||
browsingContext.loadURI(uri, {
|
||||
triggeringPrincipal: activeSHEntry.triggeringPrincipal,
|
||||
loadFlags: Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CLASSIFIER,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -142,9 +142,7 @@ export class DOMFullscreenParent extends JSWindowActorParent {
|
|||
case "DOMFullscreen:NewOrigin": {
|
||||
// Don't show the warning if we've already exited fullscreen.
|
||||
if (window.document.fullscreen) {
|
||||
window.PointerlockFsWarning.showFullScreen(
|
||||
aMessage.data.originNoSuffix
|
||||
);
|
||||
window.PointerlockFsWarning.showFullScreen(topBrowsingContext);
|
||||
}
|
||||
this.updateFullscreenWindowReference(window);
|
||||
break;
|
||||
|
|
@ -222,7 +220,7 @@ export class DOMFullscreenParent extends JSWindowActorParent {
|
|||
|
||||
if (!this.hasBeenDestroyed() && this.requestOrigin) {
|
||||
window.PointerlockFsWarning.showFullScreen(
|
||||
this.requestOrigin.manager.documentPrincipal.originNoSuffix
|
||||
this.requestOrigin.browsingContext
|
||||
);
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/CmdLineAndEnvUtils.h"
|
||||
#include "mozilla/DebugOnly.h"
|
||||
#include "mozilla/DynamicallyLinkedFunctionPtr.h"
|
||||
#include "mozilla/glue/Debug.h"
|
||||
#include "mozilla/GeckoArgs.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
|
|
@ -19,12 +18,14 @@
|
|||
#include "mozilla/SafeMode.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
#include "mozilla/WindowsConsole.h"
|
||||
#include "mozilla/WindowsProcessMitigations.h"
|
||||
#include "mozilla/WindowsVersion.h"
|
||||
#include "mozilla/WinHeaderOnlyUtils.h"
|
||||
#include "nsWindowsHelpers.h"
|
||||
|
||||
#include <windows.h>
|
||||
#include <processthreadsapi.h>
|
||||
#include <shlwapi.h>
|
||||
|
||||
#include "DllBlocklistInit.h"
|
||||
#include "ErrorHandler.h"
|
||||
|
|
@ -111,16 +112,82 @@ static nsReturnRef<HANDLE> CreateJobAndAssignProcess(HANDLE aProcess) {
|
|||
return job.out();
|
||||
}
|
||||
|
||||
#if !defined( \
|
||||
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON)
|
||||
# define PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON \
|
||||
(0x00000001ULL << 60)
|
||||
#endif // !defined(PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON)
|
||||
enum class VCRuntimeDLLDir : bool {
|
||||
Application,
|
||||
System,
|
||||
};
|
||||
static bool GetMSVCP140VersionInfo(VCRuntimeDLLDir aDir,
|
||||
uint64_t& aOutVersion) {
|
||||
wchar_t dllPath[MAX_PATH];
|
||||
if (aDir == VCRuntimeDLLDir::Application) {
|
||||
DWORD size = ::GetModuleFileNameW(nullptr, dllPath, MAX_PATH);
|
||||
if (!size ||
|
||||
(size == MAX_PATH && ::GetLastError() == ERROR_INSUFFICIENT_BUFFER) ||
|
||||
!::PathRemoveFileSpecW(dllPath)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
MOZ_ASSERT(aDir == VCRuntimeDLLDir::System);
|
||||
UINT size = ::GetSystemDirectoryW(dllPath, MAX_PATH);
|
||||
if (!size || size >= MAX_PATH) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF)
|
||||
# define PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF \
|
||||
(0x00000002ULL << 40)
|
||||
#endif // !defined(PROCESS_CREATION_MITIGATION_POLICY_CONTROL_FLOW_GUARD_ALWAYS_OFF)
|
||||
if (!::PathAppendW(dllPath, L"msvcp140.dll")) {
|
||||
return false;
|
||||
}
|
||||
HMODULE crt =
|
||||
::LoadLibraryExW(dllPath, nullptr, LOAD_LIBRARY_AS_IMAGE_RESOURCE);
|
||||
if (!crt) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mozilla::nt::PEHeaders headers{crt};
|
||||
bool result = headers.GetVersionInfo(aOutVersion);
|
||||
::FreeLibrary(crt);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Choose whether we want to favor loading DLLs from the system directory over
|
||||
* the application directory. This choice automatically propagates to all child
|
||||
* processes. In particular, it determines whether child processes will load
|
||||
* Visual C++ runtime DLLs from the system or the application directory at
|
||||
* startup.
|
||||
*
|
||||
* Whenever possible, we want all processes to favor loading DLLs from the
|
||||
* system directory. But if old Visual C++ runtime DLLs are installed
|
||||
* system-wide, then we must favor loading from the application directory
|
||||
* instead to ensure compatibility, at least during startup. So in this case we
|
||||
* only apply the delayed variant of the mitigation and only in sandboxed
|
||||
* processes, which is the best compromise (see SandboxBroker::LaunchApp).
|
||||
*
|
||||
* This function is called from the launcher process *and* the browser process.
|
||||
* This is because if the launcher process is disabled, we still want the
|
||||
* browser process to go through this code so that it enforces the correct
|
||||
* choice for itself and for child processes.
|
||||
*/
|
||||
static void EnablePreferLoadFromSystem32IfCompatible() {
|
||||
// We may already have the mitigation if we are the browser process and we
|
||||
// inherited it from the launcher process.
|
||||
if (!mozilla::IsPreferLoadFromSystem32Available() ||
|
||||
mozilla::IsPreferLoadFromSystem32Enabled()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Only bail out if (1) there is a conflict because the two DLLs exist *and*
|
||||
// (2) the version of the system DLL is problematic.
|
||||
uint64_t systemDirVersion = 0, appDirVersion = 0;
|
||||
if (GetMSVCP140VersionInfo(VCRuntimeDLLDir::System, systemDirVersion) &&
|
||||
GetMSVCP140VersionInfo(VCRuntimeDLLDir::Application, appDirVersion) &&
|
||||
systemDirVersion < appDirVersion) {
|
||||
return;
|
||||
}
|
||||
|
||||
mozilla::DebugOnly<bool> setOk = mozilla::EnablePreferLoadFromSystem32();
|
||||
MOZ_ASSERT(setOk);
|
||||
}
|
||||
|
||||
/**
|
||||
* Any mitigation policies that should be set on the browser process should go
|
||||
|
|
@ -128,10 +195,11 @@ static nsReturnRef<HANDLE> CreateJobAndAssignProcess(HANDLE aProcess) {
|
|||
*/
|
||||
static void SetMitigationPolicies(mozilla::ProcThreadAttributes& aAttrs,
|
||||
const bool aIsSafeMode) {
|
||||
if (mozilla::IsWin10AnniversaryUpdateOrLater()) {
|
||||
aAttrs.AddMitigationPolicy(
|
||||
PROCESS_CREATION_MITIGATION_POLICY_IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON);
|
||||
}
|
||||
// Note: Do *not* handle IMAGE_LOAD_PREFER_SYSTEM32_ALWAYS_ON here. For this
|
||||
// mitigation we rely on EnablePreferLoadFromSystem32IfCompatible().
|
||||
// The launcher process or the browser process will choose whether we
|
||||
// want to apply the mitigation or not, and child processes will
|
||||
// automatically inherit that choice.
|
||||
|
||||
#if defined(_M_ARM64)
|
||||
// Disable CFG on older versions of ARM64 Windows to avoid a crash in COM.
|
||||
|
|
@ -286,6 +354,9 @@ Maybe<int> LauncherMain(int& argc, wchar_t* argv[],
|
|||
return Nothing();
|
||||
}
|
||||
|
||||
// Called from the launcher process *and* the browser process.
|
||||
EnablePreferLoadFromSystem32IfCompatible();
|
||||
|
||||
#if defined(MOZ_LAUNCHER_PROCESS)
|
||||
LauncherRegistryInfo regInfo;
|
||||
Maybe<bool> runAsLauncher = RunAsLauncherProcess(regInfo, argc, argv);
|
||||
|
|
@ -309,22 +380,6 @@ Maybe<int> LauncherMain(int& argc, wchar_t* argv[],
|
|||
return Nothing();
|
||||
}
|
||||
|
||||
// Make sure that the launcher process itself has image load policies set
|
||||
if (IsWin10AnniversaryUpdateOrLater()) {
|
||||
static const StaticDynamicallyLinkedFunctionPtr<
|
||||
decltype(&SetProcessMitigationPolicy)>
|
||||
pSetProcessMitigationPolicy(L"kernel32.dll",
|
||||
"SetProcessMitigationPolicy");
|
||||
if (pSetProcessMitigationPolicy) {
|
||||
PROCESS_MITIGATION_IMAGE_LOAD_POLICY imgLoadPol = {};
|
||||
imgLoadPol.PreferSystem32Images = 1;
|
||||
|
||||
DebugOnly<BOOL> setOk = pSetProcessMitigationPolicy(
|
||||
ProcessImageLoadPolicy, &imgLoadPol, sizeof(imgLoadPol));
|
||||
MOZ_ASSERT(setOk);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(MOZ_SANDBOX)
|
||||
// Ensure the relevant mitigations are enforced.
|
||||
mozilla::sandboxing::ApplyParentProcessMitigations();
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ OS_LIBS += [
|
|||
"oleaut32",
|
||||
"ole32",
|
||||
"rpcrt4",
|
||||
"shlwapi",
|
||||
"version",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -852,6 +852,13 @@ customElements.define(
|
|||
BrowserAddonUI.openAddonsMgr(
|
||||
"addons://detail/" + encodeURIComponent(addonId)
|
||||
);
|
||||
// The settings link element has its href set to "#" to be
|
||||
// accessible with keyboard navigation, and so we call
|
||||
// preventDefault to avoid the "#" href to be implicitly
|
||||
// added to the browser chrome window url (See Bug 1983869
|
||||
// for more details of the regression that the implicit
|
||||
// change to the chrome window urls triggers).
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -389,7 +389,7 @@
|
|||
<menuitem id="context-printframe"
|
||||
data-l10n-id="main-context-menu-frame-print"
|
||||
/>
|
||||
<menuseparator/>
|
||||
<menuseparator id="print-frame-sep"/>
|
||||
<menuitem id="context-take-frame-screenshot"
|
||||
data-l10n-id="main-context-menu-take-frame-screenshot"
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -49,10 +49,16 @@ var PointerlockFsWarning = {
|
|||
}
|
||||
},
|
||||
|
||||
showFullScreen(aOrigin) {
|
||||
// Show info that top level has entered fullscreen. Ultimately, it is always
|
||||
// ancestors who are in control and can with various means make the user believe
|
||||
// a site has entered fullscreen while displaying it's own content.
|
||||
// We try to make it clear to the user that it's the top level that is actually in fullscreen
|
||||
showFullScreen(browsingContext) {
|
||||
const origin =
|
||||
browsingContext.top.currentWindowGlobal.documentPrincipal.originNoSuffix;
|
||||
let timeout = Services.prefs.getIntPref("full-screen-api.warning.timeout");
|
||||
let delay = Services.prefs.getIntPref("full-screen-api.warning.delay");
|
||||
this.show(aOrigin, "fullscreen-warning", timeout, delay);
|
||||
this.show(origin, "fullscreen-warning", timeout, delay);
|
||||
},
|
||||
|
||||
// Shows a warning that the site has entered fullscreen or
|
||||
|
|
@ -103,10 +109,9 @@ var PointerlockFsWarning = {
|
|||
} else {
|
||||
textElem.removeAttribute("hidden");
|
||||
// Document's principal's URI has a host. Display a warning including it.
|
||||
let { DownloadUtils } = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/DownloadUtils.sys.mjs"
|
||||
);
|
||||
let displayHost = DownloadUtils.getURIHost(uri.spec)[0];
|
||||
let displayHost = BrowserUtils.formatURIForDisplay(uri, {
|
||||
onlyBaseDomain: true,
|
||||
});
|
||||
let l10nString = {
|
||||
"fullscreen-warning": "fullscreen-warning-domain",
|
||||
"pointerlock-warning": "pointerlock-warning-domain",
|
||||
|
|
|
|||
|
|
@ -1953,10 +1953,13 @@ var XULBrowserWindow = {
|
|||
if (url) {
|
||||
url = Services.textToSubURI.unEscapeURIForUI(url);
|
||||
|
||||
// Encode bidirectional formatting characters.
|
||||
// (RFC 3987 sections 3.2 and 4.1 paragraph 6)
|
||||
/**
|
||||
* Encode bidirectional formatting characters.
|
||||
* @see https://url.spec.whatwg.org/#url-rendering-i18n
|
||||
* @see https://www.unicode.org/reports/tr9/#Directional_Formatting_Characters
|
||||
*/
|
||||
url = url.replace(
|
||||
/[\u200e\u200f\u202a\u202b\u202c\u202d\u202e]/g,
|
||||
/[\u061c\u200e\u200f\u202a-\u202e\u2066-\u2069]/g,
|
||||
encodeURIComponent
|
||||
);
|
||||
|
||||
|
|
@ -2227,7 +2230,7 @@ var XULBrowserWindow = {
|
|||
|
||||
// Ensure we close any remaining open locationspecific panels
|
||||
if (!isSameDocument) {
|
||||
closeOpenPanels("panel[locationspecific='true']");
|
||||
closeOpenPanels(":is(panel, menupopup)[locationspecific='true']");
|
||||
}
|
||||
|
||||
gPermissionPanel.onLocationChange();
|
||||
|
|
|
|||
|
|
@ -67,6 +67,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
|
|||
false
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
lazy,
|
||||
"gPrintEnabled",
|
||||
"print.enabled",
|
||||
false
|
||||
);
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
lazy,
|
||||
"QueryStringStripper",
|
||||
|
|
@ -838,7 +845,8 @@ export class nsContextMenu {
|
|||
"context-print-selection",
|
||||
!this.inAboutDevtoolsToolbox &&
|
||||
this.isContentSelected &&
|
||||
this.selectionInfo.isDocumentLevelSelection
|
||||
this.selectionInfo.isDocumentLevelSelection &&
|
||||
lazy.gPrintEnabled
|
||||
);
|
||||
|
||||
var shouldShow = !(
|
||||
|
|
@ -946,6 +954,8 @@ export class nsContextMenu {
|
|||
this.showItem("context-openframeintab", !this.inSrcdocFrame);
|
||||
this.showItem("context-openframe", !this.inSrcdocFrame);
|
||||
this.showItem("context-bookmarkframe", !this.inSrcdocFrame);
|
||||
this.showItem("context-printframe", lazy.gPrintEnabled);
|
||||
this.showItem("print-frame-sep", lazy.gPrintEnabled);
|
||||
|
||||
// Hide menu entries for images, show otherwise
|
||||
if (this.inFrame) {
|
||||
|
|
|
|||
|
|
@ -60,6 +60,9 @@ skip-if = [
|
|||
"os == 'linux' && os_version == '18.04' && processor == 'x86_64' && swgl", # Bug 1949995
|
||||
]
|
||||
|
||||
["browser_fullscreen_toplevel_warning.js"]
|
||||
support-files = ["fullscreen.html"]
|
||||
|
||||
["browser_fullscreen_warning.js"]
|
||||
support-files = ["fullscreen.html"]
|
||||
skip-if = [
|
||||
|
|
|
|||
|
|
@ -0,0 +1,184 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
const FULLSCREEN_PATH =
|
||||
"/browser/browser/base/content/test/fullscreen/fullscreen.html";
|
||||
|
||||
function getWarningDomain(warning) {
|
||||
let textElem = warning.querySelector(".pointerlockfswarning-domain-text");
|
||||
if (textElem.hidden) {
|
||||
return null;
|
||||
}
|
||||
let args = textElem.getAttribute("data-l10n-args");
|
||||
return args ? JSON.parse(args).domain : null;
|
||||
}
|
||||
|
||||
async function waitForWarningState(aWarningElement, aExpectedState) {
|
||||
await BrowserTestUtils.waitForAttribute(aExpectedState, aWarningElement, "");
|
||||
}
|
||||
|
||||
add_setup(async function init() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["test.wait300msAfterTabSwitch", true],
|
||||
["full-screen-api.enabled", true],
|
||||
["full-screen-api.allow-trusted-requests-only", false],
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
// Bug 2021080 - Verify the fullscreen warning always displays the top-level domain,
|
||||
// not the origin of the cross-origin frame that requested fullscreen.
|
||||
add_task(async function test_fullscreen_warning_cross_origin_shows_toplevel() {
|
||||
await BrowserTestUtils.withNewTab("https://example.com", async browser => {
|
||||
let warning = document.getElementById("fullscreen-warning");
|
||||
|
||||
await SpecialPowers.spawn(browser, [FULLSCREEN_PATH], async path => {
|
||||
let iframe = content.document.createElement("iframe");
|
||||
iframe.allow = "fullscreen";
|
||||
iframe.src = `https://example.org${path}`;
|
||||
let loaded = new Promise(r =>
|
||||
iframe.addEventListener("load", r, { once: true })
|
||||
);
|
||||
content.document.body.appendChild(iframe);
|
||||
await loaded;
|
||||
});
|
||||
|
||||
let warningShown = waitForWarningState(warning, "onscreen");
|
||||
await SpecialPowers.spawn(browser, [], async () => {
|
||||
let frame = content.document.querySelector("iframe");
|
||||
frame.focus();
|
||||
await SpecialPowers.spawn(frame, [], () => {
|
||||
content.document.getElementById("request").click();
|
||||
});
|
||||
});
|
||||
await warningShown;
|
||||
|
||||
let activeOrigin = await SpecialPowers.spawn(browser, [], async () => {
|
||||
let frame = content.document.querySelector("iframe");
|
||||
return SpecialPowers.spawn(frame, [], () => content.location.hostname);
|
||||
});
|
||||
is(
|
||||
activeOrigin,
|
||||
"example.org",
|
||||
"Cross-origin frame (example.org) is the active fullscreen document"
|
||||
);
|
||||
is(
|
||||
getWarningDomain(warning),
|
||||
"example.com",
|
||||
"Warning shows top-level domain, not the active fullscreen frame's domain"
|
||||
);
|
||||
|
||||
let warningHidden = waitForWarningState(warning, "hidden");
|
||||
let exitPromise = BrowserTestUtils.waitForEvent(
|
||||
document,
|
||||
"fullscreenchange",
|
||||
false,
|
||||
() => !document.fullscreenElement
|
||||
);
|
||||
document.getElementById("fullscreen-exit-button").click();
|
||||
await Promise.all([exitPromise, warningHidden]);
|
||||
});
|
||||
});
|
||||
|
||||
// Bug 2021080 - Verify the fullscreen warning shows the top-level domain when each
|
||||
// of three nested cross-origin frames (top, middle, inner) requests fullscreen.
|
||||
add_task(async function test_fullscreen_warning_three_nested_origins() {
|
||||
await BrowserTestUtils.withNewTab("https://example.com", async browser => {
|
||||
let warning = document.getElementById("fullscreen-warning");
|
||||
|
||||
// Build a 3-level nested structure:
|
||||
// example.com (div > iframe[example.org (div > iframe[example.net])])
|
||||
await SpecialPowers.spawn(browser, [FULLSCREEN_PATH], async path => {
|
||||
let topDiv = content.document.createElement("div");
|
||||
content.document.body.appendChild(topDiv);
|
||||
|
||||
let middleFrame = content.document.createElement("iframe");
|
||||
middleFrame.allow = "fullscreen";
|
||||
middleFrame.src = `https://example.org${path}`;
|
||||
let loaded = new Promise(r =>
|
||||
middleFrame.addEventListener("load", r, { once: true })
|
||||
);
|
||||
topDiv.appendChild(middleFrame);
|
||||
await loaded;
|
||||
|
||||
await SpecialPowers.spawn(middleFrame, [path], async innerPath => {
|
||||
let middleDiv = content.document.createElement("div");
|
||||
content.document.body.appendChild(middleDiv);
|
||||
|
||||
let innerFrame = content.document.createElement("iframe");
|
||||
innerFrame.allow = "fullscreen";
|
||||
innerFrame.src = `https://example.net${innerPath}`;
|
||||
let innerLoaded = new Promise(r =>
|
||||
innerFrame.addEventListener("load", r, { once: true })
|
||||
);
|
||||
middleDiv.appendChild(innerFrame);
|
||||
await innerLoaded;
|
||||
});
|
||||
});
|
||||
|
||||
async function exitFullscreen() {
|
||||
let warningHidden = waitForWarningState(warning, "hidden");
|
||||
let exitPromise = BrowserTestUtils.waitForEvent(
|
||||
document,
|
||||
"fullscreenchange",
|
||||
false,
|
||||
() => !document.fullscreenElement
|
||||
);
|
||||
document.getElementById("fullscreen-exit-button").click();
|
||||
await Promise.all([exitPromise, warningHidden]);
|
||||
}
|
||||
|
||||
// Step 1: Top-level (example.com) requests fullscreen on its div.
|
||||
let warningShown = waitForWarningState(warning, "onscreen");
|
||||
await SpecialPowers.spawn(browser, [], () => {
|
||||
content.document.querySelector("div").requestFullscreen();
|
||||
});
|
||||
await warningShown;
|
||||
is(
|
||||
getWarningDomain(warning),
|
||||
"example.com",
|
||||
"Top-level fullscreen: warning shows top-level domain"
|
||||
);
|
||||
await exitFullscreen();
|
||||
|
||||
// Step 2: Middle frame (example.org) requests fullscreen on its div.
|
||||
warningShown = waitForWarningState(warning, "onscreen");
|
||||
await SpecialPowers.spawn(browser, [], async () => {
|
||||
let middleFrame = content.document.querySelector("iframe");
|
||||
middleFrame.focus();
|
||||
await SpecialPowers.spawn(middleFrame, [], () => {
|
||||
content.document.querySelector("div").requestFullscreen();
|
||||
});
|
||||
});
|
||||
await warningShown;
|
||||
is(
|
||||
getWarningDomain(warning),
|
||||
"example.com",
|
||||
"Middle frame fullscreen: warning shows top-level domain"
|
||||
);
|
||||
await exitFullscreen();
|
||||
|
||||
// Step 3: Inner frame (example.net) requests fullscreen on an element.
|
||||
warningShown = waitForWarningState(warning, "onscreen");
|
||||
await SpecialPowers.spawn(browser, [], async () => {
|
||||
let middleFrame = content.document.querySelector("iframe");
|
||||
await SpecialPowers.spawn(middleFrame, [], async () => {
|
||||
let innerFrame = content.document.querySelector("iframe");
|
||||
innerFrame.focus();
|
||||
await SpecialPowers.spawn(innerFrame, [], () => {
|
||||
content.document.getElementById("request").click();
|
||||
});
|
||||
});
|
||||
});
|
||||
await warningShown;
|
||||
is(
|
||||
getWarningDomain(warning),
|
||||
"example.com",
|
||||
"Inner frame fullscreen: warning shows top-level domain"
|
||||
);
|
||||
await exitFullscreen();
|
||||
});
|
||||
});
|
||||
|
|
@ -127,6 +127,9 @@ let JSWINDOWACTORS = {
|
|||
},
|
||||
},
|
||||
matches: ["about:messagepreview", "about:messagepreview?*"],
|
||||
remoteTypes: ["privilegedabout"],
|
||||
enablePreference:
|
||||
"browser.newtabpage.activity-stream.asrouter.devtoolsEnabled",
|
||||
},
|
||||
|
||||
AboutPocket: {
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@ static const RedirEntry kRedirMap[] = {
|
|||
{"messagepreview",
|
||||
"chrome://browser/content/messagepreview/messagepreview.html",
|
||||
nsIAboutModule::URI_MUST_LOAD_IN_CHILD |
|
||||
nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS |
|
||||
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
|
||||
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT},
|
||||
{"pocket-saved", "chrome://pocket/content/panels/saved.html",
|
||||
|
|
|
|||
|
|
@ -969,13 +969,6 @@ export default class LoginItem extends HTMLElement {
|
|||
}
|
||||
|
||||
_updatePasswordRevealState() {
|
||||
if (
|
||||
window.AboutLoginsUtils &&
|
||||
window.AboutLoginsUtils.passwordRevealVisible === false
|
||||
) {
|
||||
this._revealCheckbox.hidden = true;
|
||||
}
|
||||
|
||||
let { checked } = this._revealCheckbox;
|
||||
let inputType = checked ? "text" : "password";
|
||||
this._passwordInput.type = inputType;
|
||||
|
|
@ -988,6 +981,13 @@ export default class LoginItem extends HTMLElement {
|
|||
this._revealCheckbox.hidden = false;
|
||||
}
|
||||
|
||||
if (
|
||||
window.AboutLoginsUtils &&
|
||||
window.AboutLoginsUtils.passwordRevealVisible === false
|
||||
) {
|
||||
this._revealCheckbox.hidden = true;
|
||||
}
|
||||
|
||||
// Swap which <input> is in the document depending on whether we need the
|
||||
// real .value (which means that the primary password was already entered,
|
||||
// if applicable)
|
||||
|
|
|
|||
|
|
@ -551,11 +551,8 @@ async function getAutofillRecords(data) {
|
|||
// JSActors, but that would import a lot of code for a targeting attribute.
|
||||
return 0;
|
||||
}
|
||||
let records = await actor?.receiveMessage({
|
||||
name: "FormAutofill:GetRecords",
|
||||
data,
|
||||
});
|
||||
return records?.records?.length ?? 0;
|
||||
let records = await actor?.getRecords(data);
|
||||
return records?.length ?? 0;
|
||||
}
|
||||
|
||||
// Attribution data can be encoded multiple times so we need this function to
|
||||
|
|
|
|||
|
|
@ -1418,15 +1418,10 @@ add_task(async function test_creditCardsSaved() {
|
|||
gBrowser.selectedBrowser.browsingContext.currentWindowGlobal.getActor(
|
||||
"FormAutofill"
|
||||
),
|
||||
"receiveMessage"
|
||||
"getRecords"
|
||||
)
|
||||
.withArgs(
|
||||
sandbox.match({
|
||||
name: "FormAutofill:GetRecords",
|
||||
data: { collectionName: "creditCards" },
|
||||
})
|
||||
)
|
||||
.resolves({ records: [creditcard] })
|
||||
.withArgs(sandbox.match({ collectionName: "creditCards" }))
|
||||
.resolves([creditcard])
|
||||
.callThrough();
|
||||
|
||||
is(
|
||||
|
|
@ -1435,8 +1430,8 @@ add_task(async function test_creditCardsSaved() {
|
|||
"Should return 1 when 1 credit card is saved"
|
||||
);
|
||||
ok(
|
||||
stub.calledWithMatch({ name: "FormAutofill:GetRecords" }),
|
||||
"Targeting called FormAutofill:GetRecords"
|
||||
stub.calledWithMatch({ collectionName: "creditCards" }),
|
||||
"Targeting called getRecords"
|
||||
);
|
||||
|
||||
sandbox.restore();
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
|
|||
const lazy = {};
|
||||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs",
|
||||
BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs",
|
||||
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
|
||||
Downloads: "resource://gre/modules/Downloads.sys.mjs",
|
||||
|
|
@ -600,7 +601,13 @@ DownloadsViewUI.DownloadElementShell.prototype = {
|
|||
this.showStatus(stateLabel, hoverStatus);
|
||||
return;
|
||||
}
|
||||
let [displayHost] = lazy.DownloadUtils.getURIHost(this.download.source.url);
|
||||
let uri = URL.parse(this.download.source.url)?.URI;
|
||||
let displayHost = uri
|
||||
? lazy.BrowserUtils.formatURIForDisplay(uri, {
|
||||
onlyBaseDomain: true,
|
||||
})
|
||||
: "";
|
||||
|
||||
let [displayDate] = lazy.DownloadUtils.getReadableDates(
|
||||
new Date(this.download.endTime)
|
||||
);
|
||||
|
|
|
|||
|
|
@ -1576,6 +1576,27 @@ export var Policies = {
|
|||
},
|
||||
},
|
||||
|
||||
GenerativeAI: {
|
||||
onBeforeAddons(manager, param) {
|
||||
const defaultValue = "Enabled" in param ? param.Enabled : undefined;
|
||||
|
||||
const features = [
|
||||
["Chatbot", ["browser.ml.chat.enabled", "browser.ml.chat.page"]],
|
||||
["LinkPreviews", ["browser.ml.linkPreview.optin"]],
|
||||
["TabGroups", ["browser.tabs.groups.smart.userEnabled"]],
|
||||
];
|
||||
|
||||
for (const [key, prefs] of features) {
|
||||
const value = key in param ? param[key] : defaultValue;
|
||||
if (value !== undefined) {
|
||||
for (const pref of prefs) {
|
||||
PoliciesUtils.setDefaultPref(pref, value, param.Locked);
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
GoToIntranetSiteForSingleWordEntryInAddressBar: {
|
||||
onBeforeAddons(manager, param) {
|
||||
setAndLockPref("browser.fixup.dns_first_for_single_words", param);
|
||||
|
|
@ -2080,6 +2101,7 @@ export var Policies = {
|
|||
"security.tls.hello_downgrade_check",
|
||||
"security.tls.version.enable-deprecated",
|
||||
"security.warn_submit_secure_to_insecure",
|
||||
"security.webauthn.always_allow_direct_attestation",
|
||||
];
|
||||
const blockedPrefs = [
|
||||
"app.update.channel",
|
||||
|
|
|
|||
|
|
@ -850,6 +850,27 @@
|
|||
}
|
||||
},
|
||||
|
||||
"GenerativeAI": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"Chatbot": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"LinkPreviews": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"TabGroups": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"Enabled": {
|
||||
"type": "boolean"
|
||||
},
|
||||
"Locked": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"GoToIntranetSiteForSingleWordEntryInAddressBar": {
|
||||
"type": "boolean"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -4,6 +4,41 @@
|
|||
"use strict";
|
||||
|
||||
add_task(async function test_hidden_reveal_password() {
|
||||
let login = Cc["@mozilla.org/login-manager/loginInfo;1"].createInstance(
|
||||
Ci.nsILoginInfo
|
||||
);
|
||||
login.init("https://example.com", "", null, "username", "password");
|
||||
login.QueryInterface(Ci.nsILoginMetaInfo);
|
||||
login.timePasswordChanged = Date.now();
|
||||
await Services.logins.addLoginAsync(login);
|
||||
|
||||
await setupPolicyEngineWithJson({
|
||||
policies: {
|
||||
DisablePasswordReveal: true,
|
||||
},
|
||||
});
|
||||
|
||||
let aboutLoginsTab = await BrowserTestUtils.openNewForegroundTab({
|
||||
gBrowser,
|
||||
url: "about:logins",
|
||||
});
|
||||
|
||||
let browser = gBrowser.selectedBrowser;
|
||||
|
||||
await SpecialPowers.spawn(browser, [], () => {
|
||||
let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
|
||||
|
||||
let passwordReveal = loginItem.shadowRoot.querySelector(
|
||||
".reveal-password-checkbox"
|
||||
);
|
||||
is(passwordReveal.hidden, true, "Password reveal button should be hidden");
|
||||
});
|
||||
BrowserTestUtils.removeTab(aboutLoginsTab);
|
||||
|
||||
await Services.logins.removeAllLogins();
|
||||
});
|
||||
|
||||
add_task(async function test_bug_1696948() {
|
||||
await setupPolicyEngineWithJson({
|
||||
policies: {
|
||||
DisablePasswordReveal: true,
|
||||
|
|
|
|||
|
|
@ -1184,6 +1184,38 @@ const POLICIES_TESTS = [
|
|||
// browser/components/enterprisepolicies/tests/browser/browser_policy_usermessaging.js
|
||||
},
|
||||
},
|
||||
|
||||
// Bug 1981587
|
||||
{
|
||||
policies: {
|
||||
Preferences: {
|
||||
"security.webauthn.always_allow_direct_attestation": {
|
||||
Value: true,
|
||||
Status: "locked",
|
||||
},
|
||||
},
|
||||
},
|
||||
lockedPrefs: {
|
||||
"security.webauthn.always_allow_direct_attestation": true,
|
||||
},
|
||||
},
|
||||
|
||||
// GenerativeAI
|
||||
{
|
||||
policies: {
|
||||
GenerativeAI: {
|
||||
Enabled: false,
|
||||
Chatbot: true,
|
||||
Locked: true,
|
||||
},
|
||||
},
|
||||
lockedPrefs: {
|
||||
"browser.ml.chat.enabled": true,
|
||||
"browser.ml.chat.page": true,
|
||||
"browser.ml.linkPreview.optin": false,
|
||||
"browser.tabs.groups.smart.userEnabled": false,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
add_task(async function test_policy_simple_prefs() {
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ export const LinkPreview = {
|
|||
},
|
||||
|
||||
get canShowKeyPoints() {
|
||||
return this._isRegionSupported();
|
||||
return this._isRegionSupported() && !this._isDisabledByPolicy();
|
||||
},
|
||||
|
||||
get canShowLegacy() {
|
||||
|
|
@ -751,6 +751,17 @@ export const LinkPreview = {
|
|||
return !disallowedRegions.includes(userRegion);
|
||||
},
|
||||
|
||||
/**
|
||||
* Checks if key points generation is disabled by policy.
|
||||
*
|
||||
* @returns {boolean} True if disabled by policy, false otherwise.
|
||||
*/
|
||||
_isDisabledByPolicy() {
|
||||
return (
|
||||
!lazy.optin && Services.prefs.prefIsLocked("browser.ml.linkPreview.optin")
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates an Open Graph (OG) card using meta information from the page.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -419,6 +419,13 @@ class LinkPreviewCard extends MozLitElement {
|
|||
return "";
|
||||
}
|
||||
|
||||
if (
|
||||
!this.optin &&
|
||||
Services.prefs.prefIsLocked("browser.ml.linkPreview.optin")
|
||||
) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Determine if there's any generation error state
|
||||
const isGenerationError =
|
||||
this.isMissingDataErrorState || this.generationError;
|
||||
|
|
|
|||
|
|
@ -450,3 +450,54 @@ add_task(async function test_no_optin_or_keypoints_in_disallowed_region() {
|
|||
panel.remove();
|
||||
generateStub.restore();
|
||||
});
|
||||
|
||||
/**
|
||||
* Test when the preference is false and locked, the opt-in prompt will not
|
||||
* be shown and no attempt will be made to generate key points.
|
||||
*/
|
||||
add_task(async function test_locked_preference() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [
|
||||
["browser.ml.linkPreview.enabled", true],
|
||||
["browser.ml.linkPreview.optin", false],
|
||||
["browser.ml.linkPreview.collapsed", false],
|
||||
],
|
||||
});
|
||||
|
||||
Services.prefs.lockPref("browser.ml.linkPreview.optin");
|
||||
|
||||
const generateStub = sinon.stub(LinkPreviewModel, "generateTextAI");
|
||||
|
||||
LinkPreview.keyboardComboActive = true;
|
||||
XULBrowserWindow.setOverLink(
|
||||
"https://example.com/browser/browser/components/genai/tests/browser/data/readableEn.html",
|
||||
{}
|
||||
);
|
||||
|
||||
let panel = await TestUtils.waitForCondition(() =>
|
||||
document.getElementById("link-preview-panel")
|
||||
);
|
||||
await BrowserTestUtils.waitForEvent(panel, "popupshown");
|
||||
const card = panel.querySelector("link-preview-card");
|
||||
ok(card, "card created for link preview");
|
||||
|
||||
ok(
|
||||
!LinkPreview.canShowKeyPoints,
|
||||
"LinkPreview should indicate key points cannot be shown"
|
||||
);
|
||||
|
||||
// Verify that the opt-in element is NOT present
|
||||
const modelOptinElement = card.shadowRoot.querySelector("model-optin");
|
||||
ok(!modelOptinElement, "model-optin element should NOT be present");
|
||||
|
||||
is(
|
||||
generateStub.callCount,
|
||||
0,
|
||||
"generateTextAI should not be called in a disallowed region"
|
||||
);
|
||||
|
||||
panel.remove();
|
||||
generateStub.restore();
|
||||
|
||||
Services.prefs.unlockPref("browser.ml.linkPreview.optin");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -513,7 +513,9 @@ export class FxviewTabRowBase extends MozLitElement {
|
|||
|
||||
formatURIForDisplay(uriString) {
|
||||
return !window.IS_STORYBOOK
|
||||
? lazy.BrowserUtils.formatURIStringForDisplay(uriString)
|
||||
? lazy.BrowserUtils.formatURIStringForDisplay(uriString, {
|
||||
showFilenameForLocalURIs: true,
|
||||
})
|
||||
: uriString;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,9 @@ export const LOGGING_PREF = "browser.tabs.icecat-view.logLevel";
|
|||
export const MAX_TABS_FOR_RECENT_BROWSING = 5;
|
||||
|
||||
export function formatURIForDisplay(uriString) {
|
||||
return lazy.BrowserUtils.formatURIStringForDisplay(uriString);
|
||||
return lazy.BrowserUtils.formatURIStringForDisplay(uriString, {
|
||||
showFilenameForLocalURIs: true,
|
||||
});
|
||||
}
|
||||
|
||||
export function convertTimestamp(
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ const lazy = {};
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
HistoryController: "resource:///modules/HistoryController.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
ProfileAge: "resource://gre/modules/ProfileAge.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
@ -214,7 +215,8 @@ class HistoryInView extends ViewPage {
|
|||
return (
|
||||
this.profileAge < 8 &&
|
||||
!this.hasImportedHistoryPref &&
|
||||
!this.importHistoryDismissedPref
|
||||
!this.importHistoryDismissedPref &&
|
||||
Services.policies.isAllowed("profileImport")
|
||||
);
|
||||
}
|
||||
|
||||
|
|
@ -247,6 +249,7 @@ class HistoryInView extends ViewPage {
|
|||
@click=${this.openInNewPrivateWindow}
|
||||
data-l10n-id="fxviewtabrow-open-in-private-window"
|
||||
data-l10n-attrs="accesskey"
|
||||
?hidden=${!lazy.PrivateBrowsingUtils.enabled}
|
||||
></panel-item>
|
||||
<hr />
|
||||
<panel-item
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@
|
|||
#include placesContextMenu.inc.xhtml
|
||||
#include bookmarksHistoryTooltip.inc.xhtml
|
||||
<box id="sidebar-panel-header" align="center">
|
||||
<h4 data-l10n-id="sidebar-menu-bookmarks-2"></h4>
|
||||
<html:h4 data-l10n-id="sidebar-menu-bookmarks-2"></html:h4>
|
||||
<html:moz-button
|
||||
id="sidebar-panel-close"
|
||||
type="icon ghost"
|
||||
|
|
|
|||
|
|
@ -797,6 +797,15 @@ class PlacesViewBase {
|
|||
}
|
||||
|
||||
if (popup._placesNode && PlacesUIUtils.getViewForNode(popup) == this) {
|
||||
if (this.#isPopupForRecursiveFolderShortcut(popup)) {
|
||||
// Show as an empty container for now. We may want to show a better
|
||||
// message in the future, but since we are likely to remove recursive
|
||||
// shortcuts in maintenance at a certain point, this should be enough.
|
||||
this._setEmptyPopupStatus(popup, true);
|
||||
popup._built = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!popup._placesNode.containerOpen) {
|
||||
popup._placesNode.containerOpen = true;
|
||||
}
|
||||
|
|
@ -819,6 +828,33 @@ class PlacesViewBase {
|
|||
aObject.removeEventListener(aEventNames[i], this, aCapturing);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Walks up the parent chain to detect whether a folder shortcut resolves to
|
||||
* a folder already present in the ancestry.
|
||||
*
|
||||
* @param {DOMElement} popup
|
||||
* @returns {boolean} Whether this popup is for a recursive folder shortcut.
|
||||
*/
|
||||
#isPopupForRecursiveFolderShortcut(popup) {
|
||||
if (
|
||||
!popup._placesNode ||
|
||||
!PlacesUtils.nodeIsFolderOrShortcut(popup._placesNode)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
let guid = PlacesUtils.getConcreteItemGuid(popup._placesNode);
|
||||
for (
|
||||
let parentView = popup.parentNode?.parentNode;
|
||||
parentView?._placesNode;
|
||||
parentView = parentView.parentNode?.parentNode
|
||||
) {
|
||||
if (PlacesUtils.getConcreteItemGuid(parentView._placesNode) == guid) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@ skip-if = ["verify && debug && os == 'win'"]
|
|||
|
||||
["browser_paste_resets_cut_highlights.js"]
|
||||
|
||||
["browser_recursive_hierarchies.js"]
|
||||
|
||||
["browser_remove_bookmarks.js"]
|
||||
|
||||
["browser_sidebar_bookmarks_telemetry.js"]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,160 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/**
|
||||
* Verify that menu popups are not populated when doing so would create a
|
||||
* recursive hierarchy. Some consumers may walk menu trees and could enter an
|
||||
* infinite loop if recursion were allowed.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
async function openMenuAndWaitForPopup(menu) {
|
||||
let popup = menu.menupopup;
|
||||
let popupShown = BrowserTestUtils.waitForEvent(popup, "popupshown");
|
||||
// This seems necessary, at least for the toolbar.
|
||||
EventUtils.synthesizeNativeMouseEvent({
|
||||
type: "mousemove",
|
||||
target: menu,
|
||||
atCenter: true,
|
||||
});
|
||||
menu.open = true;
|
||||
await popupShown;
|
||||
return popup;
|
||||
}
|
||||
|
||||
function findNode(guid, view) {
|
||||
for (let node of view.childNodes) {
|
||||
console.log("visiting node", node, node._placesNode?.bookmarkGuid);
|
||||
if (node._placesNode?.bookmarkGuid == guid) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function fakeOpenMenu(popup) {
|
||||
popup.dispatchEvent(new MouseEvent("popupshowing", { bubbles: true }));
|
||||
popup.dispatchEvent(new MouseEvent("popupshown", { bubbles: true }));
|
||||
}
|
||||
|
||||
function findPlacesNode(guid, container) {
|
||||
for (let i = 0; i < container.childCount; i++) {
|
||||
let node = container.getChild(i);
|
||||
if (node.bookmarkGuid == guid) {
|
||||
return node;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
add_task(async function test() {
|
||||
// Make sure the bookmarks bar is visible and restore its state on cleanup.
|
||||
let toolbar = document.getElementById("PersonalToolbar");
|
||||
ok(toolbar, "PersonalToolbar should not be null");
|
||||
if (toolbar.collapsed) {
|
||||
await promiseSetToolbarVisibility(toolbar, true);
|
||||
registerCleanupFunction(function () {
|
||||
return promiseSetToolbarVisibility(toolbar, false);
|
||||
});
|
||||
}
|
||||
|
||||
let menubar = document.getElementById("toolbar-menubar");
|
||||
// Force the menu to be shown.
|
||||
const kAutohide = menubar.getAttribute("autohide");
|
||||
menubar.removeAttribute("autohide");
|
||||
registerCleanupFunction(function () {
|
||||
menubar.setAttribute("autohide", kAutohide);
|
||||
});
|
||||
|
||||
registerCleanupFunction(PlacesUtils.bookmarks.eraseEverything);
|
||||
|
||||
// Create a folder structure with a recursive shortcut.
|
||||
let folderA = await PlacesUtils.bookmarks.insert({
|
||||
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
|
||||
title: "Folder A",
|
||||
type: PlacesUtils.bookmarks.TYPE_FOLDER,
|
||||
});
|
||||
let selfShortcut = await PlacesUtils.bookmarks.insert({
|
||||
parentGuid: folderA.guid,
|
||||
title: "Shortcut to A",
|
||||
url: `place:parent=${folderA.guid}`,
|
||||
});
|
||||
let toolbarShortcut = await PlacesUtils.bookmarks.insert({
|
||||
parentGuid: folderA.guid,
|
||||
title: "Shortcut to toolbar",
|
||||
url: `place:parent=${PlacesUtils.bookmarks.toolbarGuid}`,
|
||||
});
|
||||
|
||||
// This also ensures that toolbar content is updated.
|
||||
Assert.ok(!(await PlacesToolbarHelper.getIsEmpty()), "Toolbar is not empty");
|
||||
|
||||
// Open the popup for the shortcut from the bookmarks toolbar.
|
||||
let toolbarItems = document.getElementById("PlacesToolbarItems");
|
||||
let folderANode = findNode(folderA.guid, toolbarItems);
|
||||
let folderAPopup = await openMenuAndWaitForPopup(folderANode);
|
||||
let selfShortcutNode = findNode(selfShortcut.guid, folderAPopup);
|
||||
let selfShortcutPopup = await openMenuAndWaitForPopup(selfShortcutNode);
|
||||
|
||||
Assert.ok(
|
||||
!selfShortcutPopup._placesNode.containerOpen,
|
||||
"Self shortcut container is not open"
|
||||
);
|
||||
Assert.ok(
|
||||
selfShortcutPopup.hasAttribute("emptyplacesresult"),
|
||||
"Self shortcut popup is empty"
|
||||
);
|
||||
|
||||
let toolbarShortcutNode = findNode(
|
||||
toolbarShortcut.guid,
|
||||
folderANode.menupopup
|
||||
);
|
||||
let toolbarShortcutPopup = await openMenuAndWaitForPopup(toolbarShortcutNode);
|
||||
|
||||
Assert.ok(
|
||||
!toolbarShortcutPopup._placesNode.containerOpen,
|
||||
"Toolbar shortcut container is not open"
|
||||
);
|
||||
Assert.ok(
|
||||
toolbarShortcutPopup.hasAttribute("emptyplacesresult"),
|
||||
"Toolbar shortcut popup is empty"
|
||||
);
|
||||
|
||||
// Also insert a toolbar shortcut in the bookmarks menu and check the
|
||||
// previously inserted recursive toolbar shortcut there.
|
||||
info("Test native bookmarks menu");
|
||||
let shortcutInMenu = await PlacesUtils.bookmarks.insert({
|
||||
parentGuid: PlacesUtils.bookmarks.menuGuid,
|
||||
title: "Shortcut to menu",
|
||||
url: `place:parent=${PlacesUtils.bookmarks.menuGuid}`,
|
||||
});
|
||||
|
||||
if (Services.appinfo.nativeMenubar) {
|
||||
// With native menubar we can only simulate popupshowing as we cannot
|
||||
// directly open menus.
|
||||
let bookmarksMenuPopup = document.getElementById("bookmarksMenuPopup");
|
||||
fakeOpenMenu(bookmarksMenuPopup);
|
||||
let shortcutInMenuNode = findNode(shortcutInMenu.guid, bookmarksMenuPopup);
|
||||
fakeOpenMenu(shortcutInMenuNode.menupopup);
|
||||
Assert.ok(
|
||||
!shortcutInMenuNode.menupopup._placesNode.containerOpen,
|
||||
"menu shortcut container is not open"
|
||||
);
|
||||
} else {
|
||||
let bookmarksMenu = document.getElementById("bookmarksMenu");
|
||||
let bookmarksPopup = await openMenuAndWaitForPopup(bookmarksMenu);
|
||||
let shortcutInMenuNode = findNode(shortcutInMenu.guid, bookmarksPopup);
|
||||
let shortcutInMenuPopup = await openMenuAndWaitForPopup(
|
||||
shortcutInMenuNode,
|
||||
true
|
||||
);
|
||||
Assert.ok(
|
||||
!shortcutInMenuPopup._placesNode.containerOpen,
|
||||
"Toolbar shortcut container is not open"
|
||||
);
|
||||
Assert.ok(
|
||||
shortcutInMenuPopup.hasAttribute("emptyplacesresult"),
|
||||
"Toolbar shortcut popup is empty"
|
||||
);
|
||||
}
|
||||
});
|
||||
|
|
@ -14,8 +14,8 @@ add_task(async function test_recover_storeID() {
|
|||
await SelectableProfileService.init();
|
||||
|
||||
Assert.ok(
|
||||
!ProfilesDatastoreService.initialized,
|
||||
"Didn't initialize the datastore service"
|
||||
ProfilesDatastoreService.initialized,
|
||||
"Initialized the datastore service"
|
||||
);
|
||||
Assert.ok(
|
||||
!SelectableProfileService.initialized,
|
||||
|
|
|
|||
|
|
@ -3,10 +3,14 @@
|
|||
const PATH_NET = TEST_PATH + "file_dummy.html";
|
||||
const PATH_ORG = PATH_NET.replace("example.net", "example.org");
|
||||
|
||||
add_task(async function () {
|
||||
async function runTest(defaultZoom) {
|
||||
let tab1, tab1Zoom;
|
||||
|
||||
tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, PATH_NET);
|
||||
|
||||
tab1Zoom = ZoomManager.getZoomForBrowser(tab1.linkedBrowser);
|
||||
is(tab1Zoom, defaultZoom, "We are starting with the default zoom.");
|
||||
|
||||
await FullZoom.setZoom(1.25, tab1.linkedBrowser);
|
||||
tab1Zoom = ZoomManager.getZoomForBrowser(tab1.linkedBrowser);
|
||||
|
||||
|
|
@ -46,7 +50,7 @@ add_task(async function () {
|
|||
|
||||
is(
|
||||
tab1Zoom,
|
||||
1.0,
|
||||
defaultZoom,
|
||||
"privacy.resistFingerprinting is true, site-specific zoom should be reset when clearing FPP state for tab1"
|
||||
);
|
||||
|
||||
|
|
@ -55,4 +59,29 @@ add_task(async function () {
|
|||
BrowserTestUtils.removeTab(tab1);
|
||||
|
||||
await SpecialPowers.popPrefEnv();
|
||||
}
|
||||
|
||||
add_task(async function () {
|
||||
await runTest(1.0);
|
||||
|
||||
let defaultZoom = 1.5;
|
||||
let context = Cu.createLoadContext();
|
||||
let cps2 = Cc["@mozilla.org/content-pref/service;1"].getService(
|
||||
Ci.nsIContentPrefService2
|
||||
);
|
||||
let { promise, resolve, reject } = Promise.withResolvers();
|
||||
cps2.setGlobal(FullZoom.name, defaultZoom, context, {
|
||||
handleError(error) {
|
||||
reject(error);
|
||||
},
|
||||
handleCompletion() {
|
||||
resolve();
|
||||
},
|
||||
});
|
||||
await promise;
|
||||
try {
|
||||
await runTest(defaultZoom);
|
||||
} finally {
|
||||
cps2.removeGlobal(FullZoom.name, context);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "mozilla/Result.h"
|
||||
#include "mozilla/ResultVariant.h"
|
||||
#include "mozilla/UniquePtr.h"
|
||||
#include "mozilla/WindowsVersion.h"
|
||||
#include "mozilla/WinHeaderOnlyUtils.h"
|
||||
#include "mozilla/widget/WinTaskbar.h"
|
||||
#include "WinUtils.h"
|
||||
|
|
@ -186,7 +187,16 @@ Win11PinToTaskBarResult PinCurrentAppToTaskbarWin11(
|
|||
Win11PinToTaskBarResult unlockStatus =
|
||||
UnlockLimitedAccessFeature(Win11LimitedAccessFeatureType::Taskbar);
|
||||
if (unlockStatus.result != Win11PinToTaskBarResultStatus::Success) {
|
||||
return unlockStatus;
|
||||
// Limited Access Feature no longer necessary for Windows 11 26200 Build
|
||||
// 7840, and possibly other channels.
|
||||
if (!IsWin11OrLater()) {
|
||||
return unlockStatus;
|
||||
}
|
||||
|
||||
TASKBAR_PINNING_LOG(
|
||||
LogLevel::Warning,
|
||||
"Limited Access Feature failed to unlock, attempting to use Taskbar "
|
||||
"Pinning API assuming LAF is no longer necessary.");
|
||||
}
|
||||
|
||||
HRESULT hr;
|
||||
|
|
@ -407,7 +417,16 @@ Win11PinToTaskBarResult IsCurrentAppPinnedToTaskbarWin11(bool aCheckOnly) {
|
|||
Win11PinToTaskBarResult unlockStatus =
|
||||
UnlockLimitedAccessFeature(Win11LimitedAccessFeatureType::Taskbar);
|
||||
if (unlockStatus.result != Win11PinToTaskBarResultStatus::Success) {
|
||||
return unlockStatus;
|
||||
// Limited Access Feature no longer necessary for Windows 11 26200 Build
|
||||
// 7840, and possibly other channels.
|
||||
if (!IsWin11OrLater()) {
|
||||
return unlockStatus;
|
||||
}
|
||||
|
||||
TASKBAR_PINNING_LOG(
|
||||
LogLevel::Warning,
|
||||
"Limited Access Feature failed to unlock, attempting to use Taskbar "
|
||||
"Pinning API assuming LAF is no longer necessary.");
|
||||
}
|
||||
|
||||
HRESULT hr;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ import { SidebarPage } from "./sidebar-page.mjs";
|
|||
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
HistoryController: "resource:///modules/HistoryController.sys.mjs",
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
Sanitizer: "resource:///modules/Sanitizer.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
@ -72,6 +73,10 @@ export class SidebarHistory extends SidebarPage {
|
|||
if (!this.triggerNode) {
|
||||
e.preventDefault();
|
||||
}
|
||||
let privateWindowMenuItem = this._contextMenu.querySelector(
|
||||
"#sidebar-history-context-open-in-private-window"
|
||||
);
|
||||
privateWindowMenuItem.hidden = !lazy.PrivateBrowsingUtils.enabled;
|
||||
}
|
||||
|
||||
handleCommandEvent(e) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
const lazy = {};
|
||||
ChromeUtils.defineESModuleGetters(lazy, {
|
||||
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
|
||||
SyncedTabsController: "resource:///modules/SyncedTabsController.sys.mjs",
|
||||
});
|
||||
|
||||
|
|
@ -75,6 +76,11 @@ class SyncedTabsInSidebar extends SidebarPage {
|
|||
);
|
||||
// Enable the feature only if the device supports it
|
||||
closeTabMenuItem.disabled = !this.triggerNode.canClose;
|
||||
|
||||
let privateWindowMenuItem = contextMenu.querySelector(
|
||||
"#sidebar-synced-tabs-context-open-in-private-window"
|
||||
);
|
||||
privateWindowMenuItem.hidden = !lazy.PrivateBrowsingUtils.enabled;
|
||||
}
|
||||
|
||||
handleCommandEvent(e) {
|
||||
|
|
|
|||
|
|
@ -159,6 +159,9 @@ const DEFAULT_ACTIONS = {
|
|||
l10nCommands: ["quickactions-cmd-print"],
|
||||
label: "quickactions-print2",
|
||||
icon: "chrome://global/skin/icons/print.svg",
|
||||
isVisible: () => {
|
||||
return Services.prefs.getBoolPref("print.enabled");
|
||||
},
|
||||
onPick: () => {
|
||||
lazy.BrowserWindowTracker.getTopWindow()
|
||||
.document.getElementById("cmd_print")
|
||||
|
|
@ -193,6 +196,9 @@ const DEFAULT_ACTIONS = {
|
|||
l10nCommands: ["quickactions-cmd-savepdf2"],
|
||||
label: "quickactions-savepdf",
|
||||
icon: "chrome://global/skin/icons/print.svg",
|
||||
isVisible: () => {
|
||||
return Services.prefs.getBoolPref("print.enabled");
|
||||
},
|
||||
onPick: () => {
|
||||
// This writes over the users last used printer which we
|
||||
// should not do. Refactor to launch the print preview with
|
||||
|
|
|
|||
|
|
@ -82,11 +82,6 @@ export class AddonSuggestions extends SuggestProvider {
|
|||
return null;
|
||||
}
|
||||
|
||||
if (suggestion.source == "rust") {
|
||||
suggestion.icon = suggestion.iconUrl;
|
||||
delete suggestion.iconUrl;
|
||||
}
|
||||
|
||||
// Set UTM params unless they're already defined. This allows remote
|
||||
// settings or Merino to override them if need be.
|
||||
let url = new URL(suggestion.url);
|
||||
|
|
@ -100,6 +95,8 @@ export class AddonSuggestions extends SuggestProvider {
|
|||
url: url.href,
|
||||
originalUrl: suggestion.url,
|
||||
shouldShowUrl: true,
|
||||
// Rust uses `iconUrl` but Merino uses `icon`.
|
||||
icon: suggestion.iconUrl ?? suggestion.icon,
|
||||
title: suggestion.title,
|
||||
description: suggestion.description,
|
||||
bottomTextL10n: { id: "icecat-suggest-addons-recommended" },
|
||||
|
|
|
|||
|
|
@ -60,5 +60,5 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"required": ["providerId", "searchPageRegexp", "includeParams"]
|
||||
"required": ["providerId", "searchPageRegexp"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -943,8 +943,10 @@ class _QuickSuggestTestUtils {
|
|||
source = "rust",
|
||||
provider = "Yelp",
|
||||
isTopPick = false,
|
||||
// The default Yelp suggestedIndex is 0, unlike most other Suggest
|
||||
// suggestion types, which use -1.
|
||||
// The logic for the default Yelp `suggestedIndex` is complex and depends on
|
||||
// whether `UrlbarProviderSearchSuggestions` is active and whether search
|
||||
// suggestions are shown first. By default -- when the answer to both of
|
||||
// those questions is Yes -- Yelp's `suggestedIndex` is 0.
|
||||
suggestedIndex = 0,
|
||||
isSuggestedIndexRelativeToGroup = true,
|
||||
originalUrl = undefined,
|
||||
|
|
|
|||
|
|
@ -263,10 +263,16 @@ async function doDismissOneTest({
|
|||
"quicksuggest-dismissals-changed"
|
||||
);
|
||||
|
||||
let actualResult = await getActualResult({
|
||||
providers: [UrlbarProviderQuickSuggest.name],
|
||||
query: queriesForDismissals[0].query,
|
||||
expectedResult: result,
|
||||
});
|
||||
|
||||
triggerCommand({
|
||||
result,
|
||||
command,
|
||||
feature,
|
||||
result: actualResult,
|
||||
expectedCountsByCall: {
|
||||
removeResult: 1,
|
||||
},
|
||||
|
|
@ -280,7 +286,7 @@ async function doDismissOneTest({
|
|||
"canClearDismissedSuggestions should return true after triggering command"
|
||||
);
|
||||
Assert.ok(
|
||||
await QuickSuggest.isResultDismissed(result),
|
||||
await QuickSuggest.isResultDismissed(actualResult),
|
||||
"The result should be dismissed"
|
||||
);
|
||||
|
||||
|
|
@ -374,10 +380,16 @@ async function doDismissAllTest({ feature, result, command, pref, queries }) {
|
|||
"quicksuggest-dismissals-changed"
|
||||
);
|
||||
|
||||
let actualResult = await getActualResult({
|
||||
providers: [UrlbarProviderQuickSuggest.name],
|
||||
query: queries[0].query,
|
||||
expectedResult: result,
|
||||
});
|
||||
|
||||
triggerCommand({
|
||||
result,
|
||||
command,
|
||||
feature,
|
||||
result: actualResult,
|
||||
expectedCountsByCall: {
|
||||
removeResult: 1,
|
||||
},
|
||||
|
|
@ -442,6 +454,44 @@ async function doDismissAllTest({ feature, result, command, pref, queries }) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Does a search, asserts an actual result exists that matches the given result,
|
||||
* and returns it.
|
||||
*
|
||||
* @param {object} options
|
||||
* Options object.
|
||||
* @param {SuggestFeature} options.query
|
||||
* The search string.
|
||||
* @param {UrlbarResult} options.expectedResult
|
||||
* The expected result.
|
||||
* @param {string[]} [options.providers]
|
||||
* The providers to query.
|
||||
*/
|
||||
async function getActualResult({
|
||||
query,
|
||||
expectedResult,
|
||||
providers = [UrlbarProviderQuickSuggest.name],
|
||||
}) {
|
||||
info("Doing search to get an actual result: " + JSON.stringify(query));
|
||||
let context = createContext(query, {
|
||||
providers,
|
||||
isPrivate: false,
|
||||
});
|
||||
await check_results({
|
||||
context,
|
||||
matches: [expectedResult],
|
||||
});
|
||||
|
||||
let actualResult = context.results.find(
|
||||
r =>
|
||||
r.providerName == UrlbarProviderQuickSuggest.name &&
|
||||
r.payload.provider == expectedResult.payload.provider
|
||||
);
|
||||
Assert.ok(actualResult, "Search should have returned a matching result");
|
||||
|
||||
return actualResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Does some "show less frequently" tests where the cap is set in remote
|
||||
* settings and Nimbus. See `doOneShowLessFrequentlyTest()`. This function
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ ac_add_options --disable-geckodriver # Bug 1489320
|
|||
ac_add_options --disable-update-agent # Bug 1561797
|
||||
ac_add_options --disable-default-browser-agent # Relies on toast notifications which don't build on mingw.
|
||||
ac_add_options --disable-notification-server # Toast notifications don't build on mingw.
|
||||
ac_add_options --disable-zucchini # Bug 1975960: SEH unavailable in mingwclang on win32
|
||||
|
||||
# Find our toolchain
|
||||
HOST_CC="$MOZ_FETCHES_DIR/clang/bin/clang"
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ ac_add_options --disable-geckodriver # Bug 1489320
|
|||
ac_add_options --disable-update-agent # Bug 1561797
|
||||
ac_add_options --disable-default-browser-agent # Relies on toast notifications which don't build on mingw.
|
||||
ac_add_options --disable-notification-server # Toast notifications don't build on mingw.
|
||||
ac_add_options --disable-zucchini # Bug 1975960: SEH unavailable in mingwclang on win32, disable on win64 for parity
|
||||
|
||||
# Find our toolchain
|
||||
HOST_CC="$MOZ_FETCHES_DIR/clang/bin/clang"
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
140.3.1
|
||||
140.10.1
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
140.3.1esr
|
||||
140.10.1esr
|
||||
|
|
|
|||
|
|
@ -13,5 +13,5 @@ MOZ_BRANDING_DIRECTORY=browser/branding/unofficial
|
|||
MOZ_OFFICIAL_BRANDING_DIRECTORY=browser/branding/official
|
||||
# IceCat settings
|
||||
MOZ_APP_BASENAME=IceCat
|
||||
MOZ_APP_VERSION=140.3.1
|
||||
MOZ_APP_VERSION=140.10.1
|
||||
MOZ_DATA_REPORTING=0
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ add_setup(async () => {
|
|||
});
|
||||
|
||||
await setStorage(TEST_ADDRESS_1);
|
||||
await setStorage(TEST_CREDIT_CARD_1);
|
||||
|
||||
registerCleanupFunction(async () => {
|
||||
await removeAllRecords();
|
||||
|
|
@ -101,7 +102,7 @@ add_task(
|
|||
|
||||
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
||||
await new Promise(resolve => {
|
||||
setTimeout(resolve, FormAutofill.refillOnSiteClearingFields);
|
||||
setTimeout(resolve, FormAutofill.refillOnSiteClearingFieldsTimeout);
|
||||
});
|
||||
|
||||
return await SpecialPowers.spawn(
|
||||
|
|
@ -116,3 +117,56 @@ add_task(
|
|||
Assert.equal(orgaValue, "", "Element was not refilled");
|
||||
}
|
||||
);
|
||||
|
||||
add_task(async function address_field_not_refilled_after_reformat_by_site() {
|
||||
const value = await BrowserTestUtils.withNewTab(
|
||||
CREDITCARD_FORM_URL,
|
||||
async browser => {
|
||||
const selectorToTriggerAutocompletion = "#cc-number";
|
||||
const elementValueToVerifyAutofill = TEST_CREDIT_CARD_1["cc-number"];
|
||||
|
||||
info("Triggering autocompletion.");
|
||||
await openPopupOn(browser, selectorToTriggerAutocompletion);
|
||||
await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
|
||||
await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, browser);
|
||||
await waitForAutofill(
|
||||
browser,
|
||||
selectorToTriggerAutocompletion,
|
||||
elementValueToVerifyAutofill
|
||||
);
|
||||
|
||||
const formatValue = TEST_CREDIT_CARD_1["cc-number"]
|
||||
.replace(/(.{4})/g, "$1 ")
|
||||
.trim();
|
||||
await SpecialPowers.spawn(
|
||||
browser,
|
||||
[selectorToTriggerAutocompletion, formatValue],
|
||||
async (ccNumberSelector, reformatValue) => {
|
||||
const ccNumberInput =
|
||||
content.document.querySelector(ccNumberSelector);
|
||||
|
||||
info("Simulating site reformats an input");
|
||||
ccNumberInput.value = reformatValue;
|
||||
}
|
||||
);
|
||||
|
||||
/* eslint-disable mozilla/no-arbitrary-setTimeout */
|
||||
await new Promise(resolve => {
|
||||
setTimeout(resolve, FormAutofill.refillOnSiteClearingFieldsTimeout);
|
||||
});
|
||||
|
||||
return await SpecialPowers.spawn(
|
||||
browser,
|
||||
[selectorToTriggerAutocompletion],
|
||||
async ccNumberSelector => {
|
||||
return content.document.querySelector(ccNumberSelector).value;
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
const formatValue = TEST_CREDIT_CARD_1["cc-number"]
|
||||
.replace(/(.{4})/g, "$1 ")
|
||||
.trim();
|
||||
Assert.equal(value, formatValue, "Element was not refilled");
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1473,6 +1473,9 @@ async function triggerCapture(browser, submitButtonSelector, fillSelectors) {
|
|||
* @param {object} patterns.captureExpectedRecord
|
||||
* The expected saved record after capturing the form. Keyed by field name. This
|
||||
* parameter is only used when `options.testCapture` is set.
|
||||
* @param {boolean} patterns.useTestYear
|
||||
* Set to the current year to assign while running the test, useful for credit
|
||||
* card expiry tests with a manual set of year options in the dropdown.
|
||||
* @param {object} patterns.only
|
||||
* This parameter is used solely for debugging purposes. When set to true,
|
||||
* it restricts the execution to only the specified testcase.
|
||||
|
|
@ -1597,16 +1600,32 @@ async function add_heuristic_tests(
|
|||
const sleepAfterFocus = contexts.length > 1;
|
||||
|
||||
for (const context of contexts) {
|
||||
await SpecialPowers.spawn(context, [], async () => {
|
||||
const elements = Array.from(
|
||||
content.document.querySelectorAll("input, select")
|
||||
);
|
||||
// Focus on each field in the test document to trigger autofill field detection
|
||||
// on all the fields.
|
||||
elements.forEach(element => {
|
||||
element.focus();
|
||||
});
|
||||
});
|
||||
await SpecialPowers.spawn(
|
||||
context,
|
||||
[testPattern.useTestYear],
|
||||
async year => {
|
||||
let FormAutofillHeuristics;
|
||||
if (year) {
|
||||
FormAutofillHeuristics = ChromeUtils.importESModule(
|
||||
"resource://gre/modules/shared/FormAutofillHeuristics.sys.mjs"
|
||||
).FormAutofillHeuristics;
|
||||
FormAutofillHeuristics.useTestYear = year;
|
||||
}
|
||||
|
||||
const elements = Array.from(
|
||||
content.document.querySelectorAll("input, select")
|
||||
);
|
||||
// Focus on each field in the test document to trigger autofill field detection
|
||||
// on all the fields.
|
||||
elements.forEach(element => {
|
||||
element.focus();
|
||||
});
|
||||
|
||||
if (year) {
|
||||
FormAutofillHeuristics.useTestYear = null;
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
try {
|
||||
await BrowserTestUtils.synthesizeKey("VK_ESCAPE", {}, context);
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ support-files = [
|
|||
["browser_BestBuy.js"]
|
||||
|
||||
["browser_CDW.js"]
|
||||
skip-if = ["true"] # Bug 1939626
|
||||
|
||||
["browser_CostCo.js"]
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ add_heuristic_tests(
|
|||
},
|
||||
{
|
||||
fixturePath: "Checkout_BillingPaymentInfo.html",
|
||||
useTestYear: 2024,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@ add_heuristic_tests(
|
|||
},
|
||||
{
|
||||
fixturePath: "Payment.html",
|
||||
useTestYear: 2025,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ add_heuristic_tests(
|
|||
[
|
||||
{
|
||||
fixturePath: "Payment.html",
|
||||
useTestYear: 2024,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ add_heuristic_tests(
|
|||
[
|
||||
{
|
||||
fixturePath: "Checkout_Payment.html",
|
||||
useTestYear: 2024,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ add_heuristic_tests(
|
|||
[
|
||||
{
|
||||
fixturePath: "index.html",
|
||||
useTestYear: 2024,
|
||||
expectedResult: [
|
||||
{
|
||||
default: {
|
||||
|
|
|
|||
|
|
@ -3332,7 +3332,10 @@
|
|||
"interventions": [
|
||||
{
|
||||
"platforms": ["all"],
|
||||
"ua_string": ["Chrome", "add_IceCat_as_Gecko"]
|
||||
"content_scripts": {
|
||||
"js": ["bug1950282-f1tv.formula1.com-unblock-icecat.js"]
|
||||
},
|
||||
"ua_string": ["Chrome"]
|
||||
},
|
||||
{
|
||||
"platforms": ["linux"],
|
||||
|
|
@ -3695,5 +3698,32 @@
|
|||
"ua_string": ["Chrome", "add_IceCat_as_Gecko"]
|
||||
}
|
||||
]
|
||||
},
|
||||
"1996823": {
|
||||
"label": "rogers.com and fido.ca",
|
||||
"bugs": {
|
||||
"1996823": {
|
||||
"issue": "page-fails-to-load",
|
||||
"matches": [
|
||||
"*://www.rogers.com/bbapp/bbapi.js*",
|
||||
"*://www.fido.ca/bbapp/bbapi.js*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"interventions": [
|
||||
{
|
||||
"platforms": ["all"],
|
||||
"replace_string_in_request": [
|
||||
{
|
||||
"find": "window\\.location\\.href = link;",
|
||||
"replace": "let url = new URL(window.location.href); url.hash = link; window.location.href = url.href;",
|
||||
"urls": [
|
||||
"*://www.rogers.com/bbapp/bbapi.js*",
|
||||
"*://www.fido.ca/bbapp/bbapi.js*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,184 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* Bug 1950282 - UA spoof for f1tv.formula1.com
|
||||
*
|
||||
* This site is deliberately blocking IceCat, possibly due to bug 1992579.
|
||||
*/
|
||||
|
||||
/* globals cloneInto, exportFunction */
|
||||
|
||||
console.info(
|
||||
"The window environment is being altered for compatibility reasons. If you're a web developer working on this site, please get in touch with developer-outreach@mozilla.com. See https://bugzilla.mozilla.org/show_bug.cgi?id=1950282 for details."
|
||||
);
|
||||
|
||||
delete window.wrappedJSObject.InstallTrigger;
|
||||
delete window.wrappedJSObject.mozInnerScreenX;
|
||||
delete window.wrappedJSObject.mozInnerScreenY;
|
||||
delete window.wrappedJSObject.MozConsentBanner;
|
||||
|
||||
const nav = Object.getPrototypeOf(navigator.wrappedJSObject);
|
||||
const vendor = Object.getOwnPropertyDescriptor(nav, "vendor");
|
||||
vendor.get = exportFunction(() => "Google Inc.", window);
|
||||
Object.defineProperty(nav, "vendor", vendor);
|
||||
|
||||
const css = CSS.wrappedJSObject;
|
||||
const supports = Object.getOwnPropertyDescriptor(css, "supports");
|
||||
const oldSupports = supports.value;
|
||||
supports.value = exportFunction(function (query) {
|
||||
if (query.includes("moz-")) {
|
||||
return false;
|
||||
}
|
||||
return oldSupports.call(this, query);
|
||||
}, window);
|
||||
Object.defineProperty(css, "supports", supports);
|
||||
|
||||
function generateTimeStamp(base, factor = 10) {
|
||||
if (base) {
|
||||
// increase another timestamp by a little
|
||||
return (base + Math.random() * factor).toString().substr(0, 14);
|
||||
}
|
||||
const r = Math.random().toString();
|
||||
const d10 = `1${r.substr(5, 9)}`;
|
||||
const d3 = r.substr(2, 3);
|
||||
return parseFloat(`${d10}.${d3}`);
|
||||
}
|
||||
|
||||
const startLoadTime = generateTimeStamp();
|
||||
const commitLoadTime = generateTimeStamp(startLoadTime);
|
||||
const firstPaintTime = generateTimeStamp(commitLoadTime);
|
||||
const finishDocumentLoadTime = generateTimeStamp(firstPaintTime);
|
||||
const finishLoadTime = generateTimeStamp(finishDocumentLoadTime);
|
||||
|
||||
const csi = cloneInto(
|
||||
{
|
||||
onloadT: parseInt(finishDocumentLoadTime * 100),
|
||||
pageT: generateTimeStamp().toString().substr(-11),
|
||||
startE: parseInt(parseFloat(startLoadTime * 100)),
|
||||
tran: 10 + parseInt(4 + Math.random() * 4),
|
||||
},
|
||||
window
|
||||
);
|
||||
|
||||
const loadTimes = cloneInto(
|
||||
{
|
||||
commitLoadTime,
|
||||
connectionInfo: "h3",
|
||||
finishDocumentLoadTime,
|
||||
finishLoadTime,
|
||||
firstPaintAfterLoadTime: 0,
|
||||
firstPaintTime,
|
||||
navigationType: "Other",
|
||||
npnNegotiatedProtocol: "h3",
|
||||
requestTime: startLoadTime,
|
||||
startLoadTime,
|
||||
wasAlternateProtocolAvailable: false,
|
||||
wasFetchedViaSpdy: true,
|
||||
wasNpnNegotiated: true,
|
||||
},
|
||||
window
|
||||
);
|
||||
|
||||
window.wrappedJSObject.chrome = cloneInto(
|
||||
{
|
||||
app: {
|
||||
InstallState: {
|
||||
DISABLED: "disabled",
|
||||
INSTALLED: "installed",
|
||||
NOT_INSTALLED: "not_installed",
|
||||
},
|
||||
RunningState: {
|
||||
CANNOT_RUN: "cannot_run",
|
||||
READY_TO_RUN: "ready_to_run",
|
||||
RUNNING: "running",
|
||||
},
|
||||
getDetails() {
|
||||
return null;
|
||||
},
|
||||
getIsInstalled() {
|
||||
return false;
|
||||
},
|
||||
installState() {
|
||||
return undefined;
|
||||
},
|
||||
isInstalled: false,
|
||||
runningState() {
|
||||
return window.chrome.app.InstallState.NOT_INSTALLED;
|
||||
},
|
||||
},
|
||||
csi() {
|
||||
return csi;
|
||||
},
|
||||
loadTimes() {
|
||||
return loadTimes;
|
||||
},
|
||||
},
|
||||
window,
|
||||
{ cloneFunctions: true }
|
||||
);
|
||||
|
||||
const ua = navigator.userAgent;
|
||||
const mobile = ua.includes("Mobile") || ua.includes("Tablet");
|
||||
|
||||
// Very roughly matches Chromium's GetPlatformForUAMetadata()
|
||||
let platform = "Linux";
|
||||
if (mobile) {
|
||||
platform = "Android";
|
||||
} else if (navigator.platform.startsWith("Win")) {
|
||||
platform = "Windows";
|
||||
} else if (navigator.platform.startsWith("Mac")) {
|
||||
platform = "macOS";
|
||||
}
|
||||
|
||||
const version = (ua.match(/IceCat\/([0-9]+)/) || ["", "58.0"])[1];
|
||||
|
||||
// These match Chrome's output as of version 126.
|
||||
const brands = [
|
||||
{
|
||||
brand: "Not/A)Brand",
|
||||
version: "8",
|
||||
},
|
||||
{
|
||||
brand: "Chromium",
|
||||
version,
|
||||
},
|
||||
{
|
||||
brand: "Google Chrome",
|
||||
version,
|
||||
},
|
||||
];
|
||||
|
||||
const userAgentData = cloneInto(
|
||||
{
|
||||
brands,
|
||||
mobile,
|
||||
platform,
|
||||
getHighEntropyValues() {
|
||||
return window.wrappedJSObject.Promise.resolve(
|
||||
cloneInto(
|
||||
{
|
||||
brands,
|
||||
mobile,
|
||||
platform,
|
||||
platformVersion: "19.0.0",
|
||||
},
|
||||
window
|
||||
)
|
||||
);
|
||||
},
|
||||
},
|
||||
window,
|
||||
{ cloneFunctions: true }
|
||||
);
|
||||
|
||||
Object.defineProperty(window.navigator.wrappedJSObject, "userAgentData", {
|
||||
get: exportFunction(function () {
|
||||
return userAgentData;
|
||||
}, window),
|
||||
|
||||
set: exportFunction(function () {}, window),
|
||||
});
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
"manifest_version": 2,
|
||||
"name": "Web Compatibility Interventions",
|
||||
"description": "Urgent post-release fixes for web compatibility.",
|
||||
"version": "140.8.0",
|
||||
"version": "140.12.0",
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"id": "webcompat@mozilla.org",
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
5
icecat/browser/locales/en-US/browser/permissions.ftl
Normal file
5
icecat/browser/locales/en-US/browser/permissions.ftl
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
perm-persistent-storage-remember = Remember this decision
|
||||
|
|
@ -135,6 +135,8 @@ policy-IceCatHome2 = Configure { -icecat-home-brand-name }.
|
|||
|
||||
policy-IceCatSuggest = Configure { -icecat-suggest-brand-name }.
|
||||
|
||||
policy-GenerativeAI = Configure generative AI features.
|
||||
|
||||
policy-GoToIntranetSiteForSingleWordEntryInAddressBar = Force direct intranet site navigation instead of searching when typing single word entries in the address bar.
|
||||
|
||||
policy-Handlers = Configure default application handlers.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"af": {
|
||||
"pin": false,
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"an": {
|
||||
"pin": false,
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ar": {
|
||||
"pin": false,
|
||||
|
|
@ -77,7 +77,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ast": {
|
||||
"pin": false,
|
||||
|
|
@ -97,7 +97,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"az": {
|
||||
"pin": false,
|
||||
|
|
@ -117,7 +117,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"be": {
|
||||
"pin": false,
|
||||
|
|
@ -137,7 +137,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"bg": {
|
||||
"pin": false,
|
||||
|
|
@ -157,7 +157,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"bn": {
|
||||
"pin": false,
|
||||
|
|
@ -177,7 +177,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"br": {
|
||||
"pin": false,
|
||||
|
|
@ -197,7 +197,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"bs": {
|
||||
"pin": false,
|
||||
|
|
@ -217,7 +217,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ca": {
|
||||
"pin": false,
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ca-valencia": {
|
||||
"pin": false,
|
||||
|
|
@ -257,7 +257,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"cak": {
|
||||
"pin": false,
|
||||
|
|
@ -277,7 +277,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"cs": {
|
||||
"pin": false,
|
||||
|
|
@ -297,7 +297,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"cy": {
|
||||
"pin": false,
|
||||
|
|
@ -317,7 +317,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"da": {
|
||||
"pin": false,
|
||||
|
|
@ -337,7 +337,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"de": {
|
||||
"pin": false,
|
||||
|
|
@ -357,7 +357,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"dsb": {
|
||||
"pin": false,
|
||||
|
|
@ -377,7 +377,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"el": {
|
||||
"pin": false,
|
||||
|
|
@ -397,7 +397,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"en-CA": {
|
||||
"pin": false,
|
||||
|
|
@ -417,7 +417,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"en-GB": {
|
||||
"pin": false,
|
||||
|
|
@ -437,7 +437,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"eo": {
|
||||
"pin": false,
|
||||
|
|
@ -457,7 +457,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"es-AR": {
|
||||
"pin": false,
|
||||
|
|
@ -477,7 +477,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"es-CL": {
|
||||
"pin": false,
|
||||
|
|
@ -497,7 +497,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"es-ES": {
|
||||
"pin": false,
|
||||
|
|
@ -517,7 +517,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"es-MX": {
|
||||
"pin": false,
|
||||
|
|
@ -537,7 +537,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"et": {
|
||||
"pin": false,
|
||||
|
|
@ -557,7 +557,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"eu": {
|
||||
"pin": false,
|
||||
|
|
@ -577,7 +577,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"fa": {
|
||||
"pin": false,
|
||||
|
|
@ -597,7 +597,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ff": {
|
||||
"pin": false,
|
||||
|
|
@ -617,7 +617,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"fi": {
|
||||
"pin": false,
|
||||
|
|
@ -637,7 +637,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"fr": {
|
||||
"pin": false,
|
||||
|
|
@ -657,7 +657,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"fur": {
|
||||
"pin": false,
|
||||
|
|
@ -677,7 +677,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"fy-NL": {
|
||||
"pin": false,
|
||||
|
|
@ -697,7 +697,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ga-IE": {
|
||||
"pin": false,
|
||||
|
|
@ -717,7 +717,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"gd": {
|
||||
"pin": false,
|
||||
|
|
@ -737,7 +737,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"gl": {
|
||||
"pin": false,
|
||||
|
|
@ -757,7 +757,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"gn": {
|
||||
"pin": false,
|
||||
|
|
@ -777,7 +777,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"gu-IN": {
|
||||
"pin": false,
|
||||
|
|
@ -797,7 +797,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"he": {
|
||||
"pin": false,
|
||||
|
|
@ -817,7 +817,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"hi-IN": {
|
||||
"pin": false,
|
||||
|
|
@ -837,7 +837,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"hr": {
|
||||
"pin": false,
|
||||
|
|
@ -857,7 +857,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"hsb": {
|
||||
"pin": false,
|
||||
|
|
@ -877,7 +877,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"hu": {
|
||||
"pin": false,
|
||||
|
|
@ -897,7 +897,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"hy-AM": {
|
||||
"pin": false,
|
||||
|
|
@ -917,7 +917,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ia": {
|
||||
"pin": false,
|
||||
|
|
@ -937,7 +937,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"id": {
|
||||
"pin": false,
|
||||
|
|
@ -957,7 +957,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"is": {
|
||||
"pin": false,
|
||||
|
|
@ -977,7 +977,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"it": {
|
||||
"pin": false,
|
||||
|
|
@ -997,7 +997,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ja": {
|
||||
"pin": false,
|
||||
|
|
@ -1015,7 +1015,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ja-JP-mac": {
|
||||
"pin": false,
|
||||
|
|
@ -1023,7 +1023,7 @@
|
|||
"macosx64",
|
||||
"macosx64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ka": {
|
||||
"pin": false,
|
||||
|
|
@ -1043,7 +1043,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"kab": {
|
||||
"pin": false,
|
||||
|
|
@ -1063,7 +1063,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"kk": {
|
||||
"pin": false,
|
||||
|
|
@ -1083,7 +1083,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"km": {
|
||||
"pin": false,
|
||||
|
|
@ -1103,7 +1103,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"kn": {
|
||||
"pin": false,
|
||||
|
|
@ -1123,7 +1123,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ko": {
|
||||
"pin": false,
|
||||
|
|
@ -1143,7 +1143,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"lij": {
|
||||
"pin": false,
|
||||
|
|
@ -1163,7 +1163,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"lt": {
|
||||
"pin": false,
|
||||
|
|
@ -1183,7 +1183,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"lv": {
|
||||
"pin": false,
|
||||
|
|
@ -1203,7 +1203,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"mk": {
|
||||
"pin": false,
|
||||
|
|
@ -1223,7 +1223,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"mr": {
|
||||
"pin": false,
|
||||
|
|
@ -1243,7 +1243,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ms": {
|
||||
"pin": false,
|
||||
|
|
@ -1263,7 +1263,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"my": {
|
||||
"pin": false,
|
||||
|
|
@ -1283,7 +1283,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"nb-NO": {
|
||||
"pin": false,
|
||||
|
|
@ -1303,7 +1303,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ne-NP": {
|
||||
"pin": false,
|
||||
|
|
@ -1323,7 +1323,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"nl": {
|
||||
"pin": false,
|
||||
|
|
@ -1343,7 +1343,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"nn-NO": {
|
||||
"pin": false,
|
||||
|
|
@ -1363,7 +1363,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"oc": {
|
||||
"pin": false,
|
||||
|
|
@ -1383,7 +1383,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"pa-IN": {
|
||||
"pin": false,
|
||||
|
|
@ -1403,7 +1403,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"pl": {
|
||||
"pin": false,
|
||||
|
|
@ -1423,7 +1423,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"pt-BR": {
|
||||
"pin": false,
|
||||
|
|
@ -1443,7 +1443,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"pt-PT": {
|
||||
"pin": false,
|
||||
|
|
@ -1463,7 +1463,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"rm": {
|
||||
"pin": false,
|
||||
|
|
@ -1483,7 +1483,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ro": {
|
||||
"pin": false,
|
||||
|
|
@ -1503,7 +1503,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ru": {
|
||||
"pin": false,
|
||||
|
|
@ -1523,7 +1523,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sat": {
|
||||
"pin": false,
|
||||
|
|
@ -1543,7 +1543,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sc": {
|
||||
"pin": false,
|
||||
|
|
@ -1563,7 +1563,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sco": {
|
||||
"pin": false,
|
||||
|
|
@ -1583,7 +1583,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"si": {
|
||||
"pin": false,
|
||||
|
|
@ -1603,7 +1603,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sk": {
|
||||
"pin": false,
|
||||
|
|
@ -1623,7 +1623,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"skr": {
|
||||
"pin": false,
|
||||
|
|
@ -1643,7 +1643,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sl": {
|
||||
"pin": false,
|
||||
|
|
@ -1663,7 +1663,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"son": {
|
||||
"pin": false,
|
||||
|
|
@ -1683,7 +1683,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sq": {
|
||||
"pin": false,
|
||||
|
|
@ -1703,7 +1703,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sr": {
|
||||
"pin": false,
|
||||
|
|
@ -1723,7 +1723,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"sv-SE": {
|
||||
"pin": false,
|
||||
|
|
@ -1743,7 +1743,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"szl": {
|
||||
"pin": false,
|
||||
|
|
@ -1763,7 +1763,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ta": {
|
||||
"pin": false,
|
||||
|
|
@ -1783,7 +1783,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"te": {
|
||||
"pin": false,
|
||||
|
|
@ -1803,7 +1803,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"tg": {
|
||||
"pin": false,
|
||||
|
|
@ -1823,7 +1823,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"th": {
|
||||
"pin": false,
|
||||
|
|
@ -1843,7 +1843,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"tl": {
|
||||
"pin": false,
|
||||
|
|
@ -1863,7 +1863,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"tr": {
|
||||
"pin": false,
|
||||
|
|
@ -1883,7 +1883,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"trs": {
|
||||
"pin": false,
|
||||
|
|
@ -1903,7 +1903,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"uk": {
|
||||
"pin": false,
|
||||
|
|
@ -1923,7 +1923,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"ur": {
|
||||
"pin": false,
|
||||
|
|
@ -1943,7 +1943,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"uz": {
|
||||
"pin": false,
|
||||
|
|
@ -1963,7 +1963,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"vi": {
|
||||
"pin": false,
|
||||
|
|
@ -1983,7 +1983,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"xh": {
|
||||
"pin": false,
|
||||
|
|
@ -2003,7 +2003,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"zh-CN": {
|
||||
"pin": false,
|
||||
|
|
@ -2023,7 +2023,7 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
},
|
||||
"zh-TW": {
|
||||
"pin": false,
|
||||
|
|
@ -2043,6 +2043,6 @@
|
|||
"win64-aarch64-devedition",
|
||||
"win64-devedition"
|
||||
],
|
||||
"revision": "64046fdc97c1b1886a479dead61e6dc5428ae6e6"
|
||||
"revision": "412690f1368e37f70af57eecabb93497167eb9ba"
|
||||
}
|
||||
}
|
||||
|
|
@ -99,6 +99,10 @@ ChromeUtils.defineLazyGetter(lazy, "gBrowserBundle", function () {
|
|||
);
|
||||
});
|
||||
|
||||
ChromeUtils.defineLazyGetter(lazy, "gFluentStrings", function () {
|
||||
return new Localization(["browser/permissions.ftl"], true /* aSync */);
|
||||
});
|
||||
|
||||
import { SITEPERMS_ADDON_PROVIDER_PREF } from "resource://gre/modules/addons/siteperms-addon-utils.sys.mjs";
|
||||
|
||||
XPCOMUtils.defineLazyPreferenceGetter(
|
||||
|
|
@ -1167,11 +1171,25 @@ class PersistentStoragePermissionPrompt extends PermissionPromptForRequest {
|
|||
let learnMoreURL =
|
||||
Services.urlFormatter.formatURLPref("app.support.baseURL") +
|
||||
"storage-permissions";
|
||||
return {
|
||||
let options = {
|
||||
learnMoreURL,
|
||||
displayURI: false,
|
||||
name: this.getPrincipalName(),
|
||||
};
|
||||
|
||||
options.checkbox = {
|
||||
show: !lazy.PrivateBrowsingUtils.isWindowPrivate(
|
||||
this.browser.ownerGlobal
|
||||
),
|
||||
};
|
||||
|
||||
if (options.checkbox.show) {
|
||||
options.checkbox.label = lazy.gFluentStrings.formatValueSync(
|
||||
"perm-persistent-storage-remember"
|
||||
);
|
||||
}
|
||||
|
||||
return options;
|
||||
}
|
||||
|
||||
get notificationID() {
|
||||
|
|
|
|||
|
|
@ -264,3 +264,46 @@ option(
|
|||
)
|
||||
|
||||
set_config("MOZ_NOTIFICATION_SERVER", True, when="--enable-notification-server")
|
||||
|
||||
# Supported patch formats for the updater
|
||||
# =======================================
|
||||
|
||||
|
||||
@depends(target, when="--enable-updater")
|
||||
def zucchini_is_available(target):
|
||||
# Desktop Linux, macOS or Windows: we exclude Android by checking for GNU.
|
||||
return (target.os, target.kernel) == ("GNU", "Linux") or target.os in (
|
||||
"OSX",
|
||||
"WINNT",
|
||||
)
|
||||
|
||||
|
||||
with only_when(~zucchini_is_available):
|
||||
set_config("MOZ_BSPATCH", True, when="--enable-updater")
|
||||
set_define("MOZ_BSPATCH", True, when="--enable-updater")
|
||||
|
||||
|
||||
with only_when(zucchini_is_available):
|
||||
option(
|
||||
"--disable-bspatch",
|
||||
help="Disable bspatch support",
|
||||
)
|
||||
|
||||
set_config("MOZ_BSPATCH", True, when="--enable-bspatch")
|
||||
set_define("MOZ_BSPATCH", True, when="--enable-bspatch")
|
||||
|
||||
option(
|
||||
"--disable-zucchini",
|
||||
help="Disable zucchini support",
|
||||
)
|
||||
|
||||
set_config("MOZ_ZUCCHINI", True, when="--enable-zucchini")
|
||||
set_define("MOZ_ZUCCHINI", True, when="--enable-zucchini")
|
||||
|
||||
@depends("--enable-bspatch", "--enable-zucchini")
|
||||
def check_at_least_one_patch_format(bspatch, zucchini):
|
||||
if not bspatch and not zucchini:
|
||||
die(
|
||||
"You must enable at least one patch format when --enable-updater "
|
||||
"is used. Use --enable-bspatch or --enable-zucchini."
|
||||
)
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -10,4 +10,4 @@
|
|||
# hardcoded milestones in the tree from these two files.
|
||||
#--------------------------------------------------------
|
||||
|
||||
140.3.1
|
||||
140.10.1
|
||||
|
|
|
|||
|
|
@ -845,6 +845,7 @@ system_headers = [
|
|||
"sys/msg.h",
|
||||
"sys/param.h",
|
||||
"sys/pda.h",
|
||||
"sys/platform/ppc.h",
|
||||
"sys/poll.h",
|
||||
"sys/ppc.h",
|
||||
"sys/prctl.h",
|
||||
|
|
|
|||
|
|
@ -157,8 +157,12 @@ ifeq (official, $(MOZ_BRANDING))
|
|||
MOZ_DEFINES += -DMOZ_OFFICIAL_BRANDING
|
||||
endif
|
||||
ifneq (,$(DEB_PARALLEL_JOBS))
|
||||
ifneq (,$(filter armhf, $(DEB_HOST_ARCH)))
|
||||
MOZ_DEFINES += -DDEB_PARALLEL_JOBS=1
|
||||
else
|
||||
MOZ_DEFINES += -DDEB_PARALLEL_JOBS=$(DEB_PARALLEL_JOBS)
|
||||
endif
|
||||
endif
|
||||
|
||||
MOZ_EXECUTABLES_$(MOZ_PKG_NAME) += $(MOZ_LIBDIR)/$(MOZ_PKG_BASENAME).sh \
|
||||
$(NULL)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,57 @@
|
|||
icecat (140.10.1-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.10.1-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Mon, 04 May 2026 16:44:54 -0600
|
||||
|
||||
icecat (140.10.0-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.10.0-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Tue, 28 Apr 2026 03:08:30 -0600
|
||||
|
||||
icecat (140.9.0-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.9.0-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Sat, 28 Mar 2026 01:16:35 -0600
|
||||
|
||||
icecat (140.8.0-2gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.8.0-2gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Tue, 10 Mar 2026 23:20:02 -0600
|
||||
|
||||
icecat (140.7.1-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.7.1-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Mon, 16 Feb 2026 22:12:00 -0600
|
||||
|
||||
icecat (140.7.0-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.7.0-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Sat, 17 Jan 2026 21:13:41 -0600
|
||||
|
||||
icecat (140.6.0-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.6.0-1gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Sun, 14 Dec 2025 03:53:59 -0600
|
||||
|
||||
icecat (140.5.0-2gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.5.0-2gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Thu, 13 Nov 2025 03:42:08 -0600
|
||||
|
||||
icecat (140.4.0-2gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.4.0-2gnu1)
|
||||
|
||||
-- Capitulo Mexicano de Software Libre <devel@cmxsl.org> Wed, 15 Oct 2025 02:20:36 -0600
|
||||
|
||||
icecat (140.3.1-1gnu1+build1-0.12.0) ecne; urgency=medium
|
||||
|
||||
* New upstream stable release (icecat-140.3.1-1gnu1)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,11 @@ ac_add_options --disable-updater
|
|||
ac_add_options --enable-application=browser
|
||||
ac_add_options --with-distribution-id=org.trisquel
|
||||
%%if DEB_BUILD_ARCH_BITS == 32
|
||||
%%if DEB_HOST_ARCH == armhf
|
||||
ac_add_options --disable-debug-symbols
|
||||
%%else
|
||||
ac_add_options --enable-debug-symbols=-g1
|
||||
%%endif
|
||||
%%else
|
||||
ac_add_options --enable-debug-symbols
|
||||
%%endif
|
||||
|
|
|
|||
30
icecat/debian/patches/armhf-rustc-lto-off.patch
Normal file
30
icecat/debian/patches/armhf-rustc-lto-off.patch
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
Description: Do not enable LTO for rustc when building on armhf,
|
||||
to work around OOM failures on Launchpad builders. Note that this alone is not
|
||||
sufficient, because by default cargo will also enable full LTO when building
|
||||
with a release profile, so the top-level Cargo.toml file needs to be
|
||||
conditionally patched (this is done in debian/build/rules.mk).
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
Author: Nathan Pratte Teodosio <nteodosio@ubuntu.com>
|
||||
Forwarded: not-needed
|
||||
|
||||
--- a/config/makefiles/rust.mk
|
||||
+++ b/config/makefiles/rust.mk
|
||||
@@ -70,10 +70,18 @@ ifndef MOZ_DEBUG_RUST
|
||||
# Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045.
|
||||
ifndef MOZ_CODE_COVERAGE
|
||||
ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
|
||||
+ifneq (,$(filter arm,$(TARGET_CPU)))
|
||||
+cargo_rustc_flags += -Clto=off
|
||||
+else
|
||||
cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat)
|
||||
+endif
|
||||
endif
|
||||
# We need -Cembed-bitcode=yes for all crates when using -Clto.
|
||||
+ifneq (,$(filter arm,$(TARGET_CPU)))
|
||||
+RUSTFLAGS += -Cembed-bitcode=no
|
||||
+else
|
||||
RUSTFLAGS += -Cembed-bitcode=yes
|
||||
+endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
|
@ -1,22 +0,0 @@
|
|||
Description: Do not enable LTO for rustc when building on arm64 and armhf,
|
||||
to work around OOM failures on Launchpad builders. Note that this alone is not
|
||||
sufficient, because by default cargo will also enable full LTO when building
|
||||
with a release profile, so the top-level Cargo.toml file needs to be
|
||||
conditionally patched (this is done in debian/build/rules.mk).
|
||||
Author: Olivier Tilloy <olivier.tilloy@canonical.com>
|
||||
Forwarded: not-needed
|
||||
|
||||
--- a/config/makefiles/rust.mk
|
||||
+++ b/config/makefiles/rust.mk
|
||||
@@ -70,8 +70,10 @@ ifndef MOZ_DEBUG_RUST
|
||||
# Never enable when coverage is enabled to work around https://github.com/rust-lang/rust/issues/90045.
|
||||
ifndef MOZ_CODE_COVERAGE
|
||||
ifeq (,$(findstring gkrust_gtest,$(RUST_LIBRARY_FILE)))
|
||||
+ifeq (,$(filter aarch64 arm,$(TARGET_CPU)))
|
||||
cargo_rustc_flags += -Clto$(if $(filter full,$(MOZ_LTO_RUST_CROSS)),=fat)
|
||||
endif
|
||||
+endif
|
||||
# We need -Cembed-bitcode=yes for all crates when using -Clto.
|
||||
RUSTFLAGS += -Cembed-bitcode=yes
|
||||
endif
|
||||
|
||||
|
|
@ -7,7 +7,7 @@ webrtc-fix-compiler-flags-for-armhf.patch
|
|||
s390x-ycbcr.patch
|
||||
reduce-rust-debuginfo.patch
|
||||
armhf-reduce-linker-memory-use.patch
|
||||
armhf-rustc-thin-lto.patch
|
||||
armhf-rustc-lto-off.patch
|
||||
ppc64el-workaround-bug-1555531.patch
|
||||
ppc64el-workaround-gcc-ice.patch
|
||||
armhf-clang-no-integrated-as-for-neon.patch
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and
|
|||
|
||||
["browser_aboutdebugging_serviceworker_start.js"]
|
||||
skip-if = [
|
||||
"os == 'linux' && os_version == '18.04' && processor == 'x86_64' && tsan", # Bug 1947358, Bug 2030884
|
||||
"os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && tsan", # Bug 1947358
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -96,8 +96,11 @@ fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and
|
|||
["browser_application_panel_start-service-worker.js"]
|
||||
fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and/or labeled
|
||||
skip-if = [
|
||||
"os == 'linux' && os_version == '18.04' && processor == 'x86_64' && tsan", # Bug 1608640
|
||||
"os == 'linux' && os_version == '24.04' && processor == 'x86_64' && display == 'x11' && tsan", # Bug 1608640
|
||||
"os == 'linux' && processor == 'x86_64' && tsan", # Bug 1608640, Bug 2030884
|
||||
"os == 'linux' && processor == 'x86_64' && asan", # Bug 1781479, Bug 2030884
|
||||
"os == 'mac' && os_version == '14.70' && processor == 'x86_64'", # Bug 1980084, Bug 2030884
|
||||
"os == 'win' && os_version == '11.26100' && processor == 'x86_64' && asan", # Bug 1781479, Bug 2030884
|
||||
"os == 'win' && os_version == '11.26200' && processor == 'x86_64' && asan", # Bug 1781479, Bug 2030884
|
||||
]
|
||||
|
||||
["browser_application_panel_target-switching.js"]
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue