Rewild Your Web
18
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: update Servo to 15a400b42a1f0e523fc7da52ce03910ddadf5e7a

Signed-off-by: webbeef <me@webbeef.org>

webbeef f14d4deb 8a4c52dd

+182 -284
+41 -148
Cargo.lock
··· 30 30 ] 31 31 32 32 [[package]] 33 + name = "accesskit_consumer" 34 + version = "0.35.0" 35 + source = "registry+https://github.com/rust-lang/crates.io-index" 36 + checksum = "53cf47daed85312e763fbf85ceca136e0d7abc68e0a7e12abe11f48172bc3b10" 37 + dependencies = [ 38 + "accesskit", 39 + "hashbrown 0.16.1", 40 + ] 41 + 42 + [[package]] 33 43 name = "accountable-refcell" 34 44 version = "0.2.2" 35 45 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 2493 2503 2494 2504 [[package]] 2495 2505 name = "euclid" 2496 - version = "0.22.13" 2506 + version = "0.22.14" 2497 2507 source = "registry+https://github.com/rust-lang/crates.io-index" 2498 - checksum = "df61bf483e837f88d5c2291dcf55c67be7e676b3a51acc48db3a7b163b91ed63" 2508 + checksum = "f1a05365e3b1c6d1650318537c7460c6923f1abdd272ad6842baa2b509957a06" 2499 2509 dependencies = [ 2500 2510 "num-traits", 2501 2511 "serde", ··· 3170 3180 3171 3181 [[package]] 3172 3182 name = "gio-sys" 3173 - version = "0.21.5" 3174 - source = "registry+https://github.com/rust-lang/crates.io-index" 3175 - checksum = "0071fe88dba8e40086c8ff9bbb62622999f49628344b1d1bf490a48a29d80f22" 3176 - dependencies = [ 3177 - "glib-sys 0.21.5", 3178 - "gobject-sys 0.21.5", 3179 - "libc", 3180 - "system-deps 7.0.7", 3181 - "windows-sys 0.61.2", 3182 - ] 3183 - 3184 - [[package]] 3185 - name = "gio-sys" 3186 3183 version = "0.22.0" 3187 3184 source = "registry+https://github.com/rust-lang/crates.io-index" 3188 3185 checksum = "64729ba2772c080448f9f966dba8f4456beeb100d8c28a865ef8a0f2ef4987e1" ··· 3239 3236 3240 3237 [[package]] 3241 3238 name = "glib" 3242 - version = "0.21.5" 3243 - source = "registry+https://github.com/rust-lang/crates.io-index" 3244 - checksum = "16de123c2e6c90ce3b573b7330de19be649080ec612033d397d72da265f1bd8b" 3245 - dependencies = [ 3246 - "bitflags 2.11.0", 3247 - "futures-channel", 3248 - "futures-core", 3249 - "futures-executor", 3250 - "futures-task", 3251 - "futures-util", 3252 - "gio-sys 0.21.5", 3253 - "glib-macros 0.21.5", 3254 - "glib-sys 0.21.5", 3255 - "gobject-sys 0.21.5", 3256 - "libc", 3257 - "memchr", 3258 - "smallvec", 3259 - ] 3260 - 3261 - [[package]] 3262 - name = "glib" 3263 3239 version = "0.22.3" 3264 3240 source = "registry+https://github.com/rust-lang/crates.io-index" 3265 3241 checksum = "039f93465ac17e6cb02d16f16572cd3e43a77e736d5ecc461e71b9c9c5c0569c" ··· 3295 3271 3296 3272 [[package]] 3297 3273 name = "glib-macros" 3298 - version = "0.21.5" 3299 - source = "registry+https://github.com/rust-lang/crates.io-index" 3300 - checksum = "cf59b675301228a696fe01c3073974643365080a76cc3ed5bc2cbc466ad87f17" 3301 - dependencies = [ 3302 - "heck 0.5.0", 3303 - "proc-macro-crate 3.5.0", 3304 - "proc-macro2", 3305 - "quote", 3306 - "syn 2.0.117", 3307 - ] 3308 - 3309 - [[package]] 3310 - name = "glib-macros" 3311 3274 version = "0.22.2" 3312 3275 source = "registry+https://github.com/rust-lang/crates.io-index" 3313 3276 checksum = "bda575994e3689b1bc12f89c3df621ead46ff292623b76b4710a3a5b79be54bb" ··· 3326 3289 dependencies = [ 3327 3290 "libc", 3328 3291 "system-deps 6.2.2", 3329 - ] 3330 - 3331 - [[package]] 3332 - name = "glib-sys" 3333 - version = "0.21.5" 3334 - source = "registry+https://github.com/rust-lang/crates.io-index" 3335 - checksum = "2d95e1a3a19ae464a7286e14af9a90683c64d70c02532d88d87ce95056af3e6c" 3336 - dependencies = [ 3337 - "libc", 3338 - "system-deps 7.0.7", 3339 3292 ] 3340 3293 3341 3294 [[package]] ··· 3422 3375 "glib-sys 0.18.1", 3423 3376 "libc", 3424 3377 "system-deps 6.2.2", 3425 - ] 3426 - 3427 - [[package]] 3428 - name = "gobject-sys" 3429 - version = "0.21.5" 3430 - source = "registry+https://github.com/rust-lang/crates.io-index" 3431 - checksum = "2dca35da0d19a18f4575f3cb99fe1c9e029a2941af5662f326f738a21edaf294" 3432 - dependencies = [ 3433 - "glib-sys 0.21.5", 3434 - "libc", 3435 - "system-deps 7.0.7", 3436 3378 ] 3437 3379 3438 3380 [[package]] ··· 4455 4397 "icu_properties 1.5.1", 4456 4398 "icu_provider 1.5.0", 4457 4399 "icu_provider_adapters", 4458 - "icu_segmenter 1.5.0", 4400 + "icu_segmenter", 4459 4401 "icu_timezone", 4460 4402 "tinystr 0.7.6", 4461 4403 "unicode-bidi", ··· 4640 4582 checksum = "52b1a7fbdbf3958f1be8354cb59ac73f165b7b7082d447ff2090355c9a069120" 4641 4583 4642 4584 [[package]] 4643 - name = "icu_locale" 4644 - version = "2.1.1" 4645 - source = "registry+https://github.com/rust-lang/crates.io-index" 4646 - checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" 4647 - dependencies = [ 4648 - "icu_collections 2.1.1", 4649 - "icu_locale_core", 4650 - "icu_locale_data", 4651 - "icu_provider 2.1.1", 4652 - "potential_utf", 4653 - "tinystr 0.8.2", 4654 - "zerovec 0.11.5", 4655 - ] 4656 - 4657 - [[package]] 4658 4585 name = "icu_locale_core" 4659 4586 version = "2.1.1" 4660 4587 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4662 4589 dependencies = [ 4663 4590 "displaydoc", 4664 4591 "litemap 0.8.1", 4665 - "serde", 4666 4592 "tinystr 0.8.2", 4667 4593 "writeable 0.6.2", 4668 4594 "zerovec 0.11.5", 4669 4595 ] 4670 - 4671 - [[package]] 4672 - name = "icu_locale_data" 4673 - version = "2.1.2" 4674 - source = "registry+https://github.com/rust-lang/crates.io-index" 4675 - checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" 4676 4596 4677 4597 [[package]] 4678 4598 name = "icu_locid" ··· 4851 4771 dependencies = [ 4852 4772 "displaydoc", 4853 4773 "icu_locale_core", 4854 - "serde", 4855 - "stable_deref_trait", 4856 4774 "writeable 0.6.2", 4857 4775 "yoke 0.8.1", 4858 4776 "zerofrom", ··· 4895 4813 "icu_collections 1.5.0", 4896 4814 "icu_locid", 4897 4815 "icu_provider 1.5.0", 4898 - "icu_segmenter_data 1.5.1", 4816 + "icu_segmenter_data", 4899 4817 "utf8_iter", 4900 4818 "zerovec 0.10.4", 4901 4819 ] 4902 4820 4903 4821 [[package]] 4904 - name = "icu_segmenter" 4905 - version = "2.1.2" 4906 - source = "registry+https://github.com/rust-lang/crates.io-index" 4907 - checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" 4908 - dependencies = [ 4909 - "core_maths", 4910 - "icu_collections 2.1.1", 4911 - "icu_locale", 4912 - "icu_provider 2.1.1", 4913 - "icu_segmenter_data 2.1.1", 4914 - "potential_utf", 4915 - "utf8_iter", 4916 - "zerovec 0.11.5", 4917 - ] 4918 - 4919 - [[package]] 4920 4822 name = "icu_segmenter_data" 4921 4823 version = "1.5.1" 4922 4824 source = "registry+https://github.com/rust-lang/crates.io-index" 4923 4825 checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" 4924 - 4925 - [[package]] 4926 - name = "icu_segmenter_data" 4927 - version = "2.1.1" 4928 - source = "registry+https://github.com/rust-lang/crates.io-index" 4929 - checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" 4930 4826 4931 4827 [[package]] 4932 4828 name = "icu_timezone" ··· 7688 7584 source = "registry+https://github.com/rust-lang/crates.io-index" 7689 7585 checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 7690 7586 dependencies = [ 7691 - "serde_core", 7692 - "writeable 0.6.2", 7693 7587 "zerovec 0.11.5", 7694 7588 ] 7695 7589 ··· 8745 8639 8746 8640 [[package]] 8747 8641 name = "selectors" 8748 - version = "0.36.0" 8749 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 8642 + version = "0.36.1" 8643 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 8750 8644 dependencies = [ 8751 8645 "bitflags 2.11.0", 8752 8646 "cssparser", ··· 8890 8784 version = "0.0.1" 8891 8785 dependencies = [ 8892 8786 "accesskit", 8787 + "accesskit_consumer", 8893 8788 "arboard", 8894 8789 "bitflags 2.11.0", 8895 8790 "crossbeam-channel", ··· 9418 9313 "euclid", 9419 9314 "html5ever", 9420 9315 "icu_locid", 9421 - "icu_segmenter 1.5.0", 9316 + "icu_segmenter", 9422 9317 "itertools 0.14.0", 9423 9318 "kurbo 0.12.0", 9424 9319 "log", ··· 9593 9488 version = "0.0.1" 9594 9489 dependencies = [ 9595 9490 "byte-slice-cast", 9596 - "glib 0.21.5", 9597 - "glib-sys 0.21.5", 9491 + "glib 0.22.3", 9492 + "glib-sys 0.22.3", 9598 9493 "gstreamer", 9599 9494 "gstreamer-app", 9600 9495 "gstreamer-audio", ··· 9633 9528 name = "servo-media-gstreamer-render-android" 9634 9529 version = "0.0.1" 9635 9530 dependencies = [ 9636 - "glib 0.21.5", 9531 + "glib 0.22.3", 9637 9532 "gstreamer", 9638 9533 "gstreamer-gl", 9639 9534 "gstreamer-gl-egl", ··· 9646 9541 name = "servo-media-gstreamer-render-unix" 9647 9542 version = "0.0.1" 9648 9543 dependencies = [ 9649 - "glib 0.21.5", 9544 + "glib 0.22.3", 9650 9545 "gstreamer", 9651 9546 "gstreamer-gl", 9652 9547 "gstreamer-gl-egl", ··· 10348 10243 [[package]] 10349 10244 name = "servo_arc" 10350 10245 version = "0.4.3" 10351 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10246 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10352 10247 dependencies = [ 10353 10248 "serde", 10354 10249 "stable_deref_trait", ··· 10812 10707 10813 10708 [[package]] 10814 10709 name = "stylo" 10815 - version = "0.13.0" 10816 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10710 + version = "0.14.0" 10711 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10817 10712 dependencies = [ 10818 10713 "app_units", 10819 10714 "arrayvec", ··· 10824 10719 "derive_more", 10825 10720 "encoding_rs", 10826 10721 "euclid", 10827 - "icu_segmenter 2.1.2", 10722 + "icu_segmenter", 10828 10723 "indexmap", 10829 10724 "itertools 0.14.0", 10830 10725 "itoa", ··· 10868 10763 10869 10764 [[package]] 10870 10765 name = "stylo_atoms" 10871 - version = "0.13.0" 10872 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10766 + version = "0.14.0" 10767 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10873 10768 dependencies = [ 10874 10769 "string_cache", 10875 10770 "string_cache_codegen", ··· 10877 10772 10878 10773 [[package]] 10879 10774 name = "stylo_derive" 10880 - version = "0.13.0" 10881 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10775 + version = "0.14.0" 10776 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10882 10777 dependencies = [ 10883 10778 "darling", 10884 10779 "proc-macro2", ··· 10889 10784 10890 10785 [[package]] 10891 10786 name = "stylo_dom" 10892 - version = "0.13.0" 10893 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10787 + version = "0.14.0" 10788 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10894 10789 dependencies = [ 10895 10790 "bitflags 2.11.0", 10896 10791 "stylo_malloc_size_of", ··· 10898 10793 10899 10794 [[package]] 10900 10795 name = "stylo_malloc_size_of" 10901 - version = "0.13.0" 10902 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10796 + version = "0.14.0" 10797 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10903 10798 dependencies = [ 10904 10799 "app_units", 10905 10800 "cssparser", ··· 10915 10810 10916 10811 [[package]] 10917 10812 name = "stylo_static_prefs" 10918 - version = "0.13.0" 10919 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10813 + version = "0.14.0" 10814 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10920 10815 10921 10816 [[package]] 10922 10817 name = "stylo_traits" 10923 - version = "0.13.0" 10924 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 10818 + version = "0.14.0" 10819 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 10925 10820 dependencies = [ 10926 10821 "app_units", 10927 10822 "bitflags 2.11.0", ··· 11370 11265 checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 11371 11266 dependencies = [ 11372 11267 "displaydoc", 11373 - "serde_core", 11374 11268 "zerovec 0.11.5", 11375 11269 ] 11376 11270 ··· 11402 11296 [[package]] 11403 11297 name = "to_shmem" 11404 11298 version = "0.3.0" 11405 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 11299 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 11406 11300 dependencies = [ 11407 11301 "cssparser", 11408 11302 "servo_arc", ··· 11415 11309 [[package]] 11416 11310 name = "to_shmem_derive" 11417 11311 version = "0.1.0" 11418 - source = "git+https://github.com/servo/stylo?rev=dca3934667dae76c49bb579b268c5eb142d09c6a#dca3934667dae76c49bb579b268c5eb142d09c6a" 11312 + source = "git+https://github.com/servo/stylo?rev=f9d940629a7fd0389cc4ecb58c12927b09286478#f9d940629a7fd0389cc4ecb58c12927b09286478" 11419 11313 dependencies = [ 11420 11314 "darling", 11421 11315 "proc-macro2", ··· 12552 12446 "bytes", 12553 12447 "cookie 0.16.2", 12554 12448 "http 0.2.12", 12555 - "icu_segmenter 1.5.0", 12449 + "icu_segmenter", 12556 12450 "log", 12557 12451 "serde", 12558 12452 "serde_derive", ··· 13992 13886 source = "registry+https://github.com/rust-lang/crates.io-index" 13993 13887 checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 13994 13888 dependencies = [ 13995 - "serde", 13996 13889 "yoke 0.8.1", 13997 13890 "zerofrom", 13998 13891 "zerovec-derive 0.11.2",
+13 -11
Cargo.toml
··· 10 10 authors = ["The Servo Project Developers"] 11 11 license = "MPL-2.0" 12 12 publish = false 13 + description = "The Beaver User Agent" 14 + repository = "https://tangled.org/me.webbeef.org/beaver" 13 15 rust-version = "1.86.0" 14 16 15 17 [workspace.dependencies] ··· 82 84 futures-core = { version = "0.3", default-features = false } 83 85 futures-util = { version = "0.3", default-features = false } 84 86 gleam = "0.15" 85 - glib = "0.21" 86 - glib-sys = "0.21" 87 + glib = "0.22" 88 + glib-sys = "0.22" 87 89 glow = "0.16.0" 88 90 gstreamer = { version = "0.25", features = ["v1_18"] } 89 91 gstreamer-app = "0.25" ··· 186 188 sea-query = { version = "1.0.0-rc.30", default-features = false, features = ["backend-sqlite", "derive"] } 187 189 sea-query-rusqlite = { version = "0.8.0-rc.15" } 188 190 sec1 = "0.7" 189 - selectors = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 191 + selectors = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 190 192 serde = "1.0.228" 191 193 serde_bytes = "0.11" 192 194 serde_core = "1.0.226" ··· 209 211 servo-media-webrtc = { version = "0.0.1", path = "source/components/media/webrtc" } 210 212 servo_allocator = { package = "servo-allocator", version = "0.0.1", path = "source/components/allocator" } 211 213 servo-tracing = { path = "source/components/servo_tracing" } 212 - servo_arc = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 214 + servo_arc = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 213 215 servo-url = { version = "0.0.1", path = "source/components/url" } 214 216 sha1 = "0.10" 215 217 sha2 = "0.10" ··· 220 222 storage_traits = { package = "servo-storage-traits", path = "source/components/shared/storage" } 221 223 string_cache = "0.9" 222 224 strum = { version = "0.27", features = ["derive"] } 223 - stylo = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 224 - stylo_atoms = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 225 - stylo_config = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 226 - stylo_dom = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 227 - stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 228 - stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 229 - stylo_traits = { git = "https://github.com/servo/stylo", rev = "dca3934667dae76c49bb579b268c5eb142d09c6a" } 225 + stylo = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 226 + stylo_atoms = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 227 + stylo_config = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 228 + stylo_dom = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 229 + stylo_malloc_size_of = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 230 + stylo_static_prefs = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 231 + stylo_traits = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 230 232 surfman = { version = "0.11.0", features = ["chains"] } 231 233 syn = { version = "2", default-features = false, features = ["clone-impls", "derive", "parsing"] } 232 234 synstructure = "0.13"
+4 -1
crates/beaver_shell/src/browser_window.rs
··· 324 324 }, 325 325 WindowEvent::PinchGesture { delta, .. } => { 326 326 if let Some(webview) = self.first_webview() { 327 - webview.pinch_zoom(delta as f32 + 1.0, self.webview_relative_mouse_point.get()); 327 + webview.adjust_pinch_zoom( 328 + delta as f32 + 1.0, 329 + self.webview_relative_mouse_point.get(), 330 + ); 328 331 } 329 332 }, 330 333 WindowEvent::ThemeChanged(theme) => {
+1 -1
forkme.lock
··· 1 - efe28fb99e3571e1e53012ae555a50afa20cb844 1 + 15a400b42a1f0e523fc7da52ce03910ddadf5e7a
+4 -4
patches/components/constellation/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -28,6 +28,7 @@ 3 + @@ -30,6 +30,7 @@ 4 4 background_hang_monitor_api = { workspace = true } 5 5 backtrace = { workspace = true } 6 6 base = { workspace = true } ··· 8 8 bluetooth_traits = { workspace = true, optional = true } 9 9 canvas = { workspace = true } 10 10 canvas_traits = { workspace = true } 11 - @@ -39,6 +40,8 @@ 11 + @@ -41,6 +42,8 @@ 12 12 euclid = { workspace = true } 13 13 fonts = { workspace = true } 14 14 ipc-channel = { workspace = true } ··· 17 17 keyboard-types = { workspace = true } 18 18 layout_api = { workspace = true } 19 19 log = { workspace = true } 20 - @@ -47,11 +50,14 @@ 20 + @@ -49,11 +52,14 @@ 21 21 net_traits = { workspace = true } 22 22 paint_api = { workspace = true } 23 23 parking_lot = { workspace = true } ··· 32 32 servo-tracing = { workspace = true } 33 33 servo_config = { workspace = true } 34 34 servo-url = { workspace = true } 35 - @@ -58,6 +64,7 @@ 35 + @@ -60,6 +66,7 @@ 36 36 storage_traits = { workspace = true } 37 37 stylo = { workspace = true } 38 38 stylo_traits = { workspace = true }
+30 -30
patches/components/constellation/constellation.rs.patch
··· 45 45 } 46 46 47 47 #[derive(Debug)] 48 - @@ -510,6 +515,22 @@ 49 - 50 - /// Whether accessibility trees are being built and sent to the underlying platform. 51 - pub(crate) accessibility_active: bool, 48 + @@ -507,6 +512,22 @@ 49 + /// to the `UserContents` need to be forwared to all the `ScriptThread`s that host 50 + /// the relevant `WebView`. 51 + pub(crate) user_contents_for_manager_id: FxHashMap<UserContentManagerId, UserContents>, 52 52 + 53 53 + /// Map from embedded WebView ID to the parent iframe's (browsing_context_id, pipeline_id). 54 54 + /// Used to route events from the embedded webview back to the iframe element. ··· 68 68 } 69 69 70 70 /// State needed to construct a constellation. 71 - @@ -729,6 +750,10 @@ 71 + @@ -725,6 +746,10 @@ 72 + pending_viewport_changes: Default::default(), 72 73 screenshot_readiness_requests: Vec::new(), 73 74 user_contents_for_manager_id: Default::default(), 74 - accessibility_active: false, 75 75 + embedded_webview_to_iframe: FxHashMap::default(), 76 76 + active_ime_webview: None, 77 77 + embedder_error_listeners: Default::default(), ··· 79 79 }; 80 80 81 81 constellation.run(); 82 - @@ -754,6 +779,18 @@ 82 + @@ -750,6 +775,18 @@ 83 83 fn clean_up_finished_script_event_loops(&mut self) { 84 84 self.event_loop_join_handles 85 85 .retain(|join_handle| !join_handle.is_finished()); ··· 98 98 self.event_loops 99 99 .retain(|event_loop| event_loop.upgrade().is_some()); 100 100 } 101 - @@ -1045,6 +1082,11 @@ 101 + @@ -1041,6 +1078,11 @@ 102 102 .get(&webview_id) 103 103 .and_then(|webview| webview.user_content_manager_id); 104 104 ··· 110 110 let new_pipeline_info = NewPipelineInfo { 111 111 parent_info: parent_pipeline_id, 112 112 new_pipeline_id, 113 - @@ -1055,6 +1097,13 @@ 113 + @@ -1051,6 +1093,13 @@ 114 114 viewport_details: initial_viewport_details, 115 115 user_content_manager_id, 116 116 theme, ··· 124 124 }; 125 125 let pipeline = match Pipeline::spawn(new_pipeline_info, event_loop, self, throttled) { 126 126 Ok(pipeline) => pipeline, 127 - @@ -1229,6 +1278,7 @@ 127 + @@ -1217,6 +1266,7 @@ 128 128 BackgroundHangMonitor(HangMonitorAlert), 129 129 Embedder(EmbedderToConstellationMessage), 130 130 FromSWManager(SWManagerMsg), ··· 132 132 RemoveProcess(usize), 133 133 } 134 134 // Get one incoming request. 135 - @@ -1249,6 +1299,15 @@ 135 + @@ -1237,6 +1287,15 @@ 136 136 sel.recv(&self.embedder_to_constellation_receiver); 137 137 sel.recv(&self.swmanager_receiver); 138 138 ··· 148 148 self.process_manager.register(&mut sel); 149 149 150 150 let request = { 151 - @@ -1277,9 +1336,13 @@ 151 + @@ -1265,9 +1324,13 @@ 152 152 .recv(&self.swmanager_receiver) 153 153 .expect("Unexpected SW channel panic in constellation") 154 154 .map(Request::FromSWManager), ··· 163 163 let _ = oper.recv(self.process_manager.receiver_at(process_index)); 164 164 Ok(Request::RemoveProcess(process_index)) 165 165 }, 166 - @@ -1305,6 +1368,9 @@ 166 + @@ -1293,6 +1356,9 @@ 167 167 Request::FromSWManager(message) => { 168 168 self.handle_request_from_swmanager(message); 169 169 }, ··· 173 173 Request::RemoveProcess(index) => self.process_manager.remove(index), 174 174 } 175 175 } 176 - @@ -1534,11 +1600,7 @@ 176 + @@ -1522,11 +1588,7 @@ 177 177 } 178 178 }, 179 179 EmbedderToConstellationMessage::PreferencesUpdated(updates) => { ··· 186 186 let _ = event_loop.send(ScriptThreadMessage::PreferencesUpdated( 187 187 updates 188 188 .iter() 189 - @@ -1565,6 +1627,18 @@ 190 - EmbedderToConstellationMessage::SetAccessibilityActive(active) => { 191 - self.set_accessibility_active(active); 189 + @@ -1553,6 +1615,18 @@ 190 + EmbedderToConstellationMessage::SetAccessibilityActive(webview_id, active) => { 191 + self.set_accessibility_active(webview_id, active); 192 192 }, 193 193 + EmbedderToConstellationMessage::NotifyServoError(error_type, message) => { 194 194 + // Broadcast error only to script threads that have registered ··· 205 205 } 206 206 } 207 207 208 - @@ -1762,7 +1836,13 @@ 208 + @@ -1750,7 +1824,13 @@ 209 209 return warn!("Attempt to add channel name from an unexpected origin."); 210 210 } 211 211 self.broadcast_channels ··· 220 220 }, 221 221 ScriptToConstellationMessage::RemoveBroadcastChannelNameInRouter( 222 222 router_id, 223 - @@ -1776,7 +1856,13 @@ 223 + @@ -1764,7 +1844,13 @@ 224 224 return warn!("Attempt to remove channel name from an unexpected origin."); 225 225 } 226 226 self.broadcast_channels ··· 235 235 }, 236 236 ScriptToConstellationMessage::RemoveBroadcastChannelRouter(router_id, origin) => { 237 237 if self 238 - @@ -1788,6 +1874,12 @@ 238 + @@ -1776,6 +1862,12 @@ 239 239 self.broadcast_channels 240 240 .remove_broadcast_channel_router(router_id); 241 241 }, ··· 248 248 ScriptToConstellationMessage::ScheduleBroadcast(router_id, message) => { 249 249 if self 250 250 .check_origin_against_pipeline(&source_pipeline_id, &message.origin) 251 - @@ -1797,8 +1889,15 @@ 251 + @@ -1785,8 +1877,15 @@ 252 252 "Attempt to schedule broadcast from an origin not matching the origin of the msg." 253 253 ); 254 254 } ··· 265 265 }, 266 266 ScriptToConstellationMessage::PipelineExited => { 267 267 self.handle_pipeline_exited(source_pipeline_id); 268 - @@ -1818,6 +1917,12 @@ 268 + @@ -1806,6 +1905,12 @@ 269 269 ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info) => { 270 270 self.handle_script_new_auxiliary(load_info); 271 271 }, ··· 278 278 ScriptToConstellationMessage::ChangeRunningAnimationsState(animation_state) => { 279 279 self.handle_change_running_animations_state(source_pipeline_id, animation_state) 280 280 }, 281 - @@ -1984,6 +2089,29 @@ 281 + @@ -1972,6 +2077,29 @@ 282 282 new_value, 283 283 ); 284 284 }, ··· 308 308 ScriptToConstellationMessage::MediaSessionEvent(pipeline_id, event) => { 309 309 // Unlikely at this point, but we may receive events coming from 310 310 // different media sessions, so we set the active media session based 311 - @@ -2057,6 +2185,392 @@ 311 + @@ -2045,6 +2173,392 @@ 312 312 let _ = event_loop.send(ScriptThreadMessage::TriggerGarbageCollection); 313 313 } 314 314 }, ··· 701 701 } 702 702 } 703 703 704 - @@ -2376,6 +2890,29 @@ 704 + @@ -2364,6 +2878,29 @@ 705 705 TransferState::TransferInProgress(queue) => queue.push_back(task), 706 706 TransferState::CompletionFailed(queue) => queue.push_back(task), 707 707 TransferState::CompletionRequested(_, queue) => queue.push_back(task), ··· 731 731 } 732 732 } 733 733 734 - @@ -3246,6 +3783,13 @@ 734 + @@ -3243,6 +3780,13 @@ 735 735 /// <https://html.spec.whatwg.org/multipage/#destroy-a-top-level-traversable> 736 736 fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { 737 737 debug!("{webview_id}: Closing"); ··· 745 745 let browsing_context_id = BrowsingContextId::from(webview_id); 746 746 // Step 5. Remove traversable from the user agent's top-level traversable set. 747 747 let browsing_context = 748 - @@ -3522,8 +4066,27 @@ 748 + @@ -3519,8 +4063,27 @@ 749 749 opener_webview_id, 750 750 opener_pipeline_id, 751 751 response_sender, ··· 773 773 let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { 774 774 warn!("Failed to create channel"); 775 775 let _ = response_sender.send(None); 776 - @@ -3622,6 +4185,361 @@ 776 + @@ -3619,6 +4182,361 @@ 777 777 }); 778 778 } 779 779 ··· 1135 1135 #[servo_tracing::instrument(skip_all)] 1136 1136 fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { 1137 1137 let Some(pipeline) = self.pipelines.get(&pipeline_id) else { 1138 - @@ -4747,7 +5665,7 @@ 1138 + @@ -4744,7 +5662,7 @@ 1139 1139 } 1140 1140 1141 1141 #[servo_tracing::instrument(skip_all)] ··· 1144 1144 // Send a flat projection of the history to embedder. 1145 1145 // The final vector is a concatenation of the URLs of the past 1146 1146 // entries, the current entry and the future entries. 1147 - @@ -4850,9 +5768,23 @@ 1147 + @@ -4847,9 +5765,23 @@ 1148 1148 ); 1149 1149 self.embedder_proxy.send(EmbedderMsg::HistoryChanged( 1150 1150 webview_id,
+9 -9
patches/components/constellation/constellation_webview.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -48,6 +48,11 @@ 4 - /// The [`Theme`] that this [`ConstellationWebView`] uses. This is communicated to all 5 - /// `ScriptThread`s so that they know how to render the contents of a particular `WebView. 6 - theme: Theme, 3 + @@ -56,6 +56,11 @@ 4 + /// via [`ScriptThreadMessage::SetAccessibilityActive`] in `set_accessibility_active()` 5 + /// and [`crate::Constellation::set_frame_tree_for_webview()`]. 6 + pub accessibility_active: bool, 7 7 + 8 8 + /// Whether this webview should never receive focus (hidefocus attribute on the iframe). 9 9 + /// When true, focus-related events are processed but focus is not transferred to ··· 12 12 } 13 13 14 14 impl ConstellationWebView { 15 - @@ -57,6 +62,22 @@ 15 + @@ -65,6 +70,22 @@ 16 16 focused_browsing_context_id: BrowsingContextId, 17 17 user_content_manager_id: Option<UserContentManagerId>, 18 18 ) -> Self { ··· 35 35 Self { 36 36 webview_id, 37 37 user_content_manager_id, 38 - @@ -66,6 +87,7 @@ 39 - last_mouse_move_point: Default::default(), 38 + @@ -75,6 +96,7 @@ 40 39 session_history: JointSessionHistory::new(), 41 40 theme: Theme::Light, 41 + accessibility_active: false, 42 42 + hide_focus, 43 43 } 44 44 } 45 45 46 - @@ -85,12 +107,41 @@ 46 + @@ -94,12 +116,41 @@ 47 47 event: &ConstellationInputEvent, 48 48 browsing_contexts: &FxHashMap<BrowsingContextId, BrowsingContext>, 49 49 ) -> Option<PipelineId> { ··· 87 87 let browsing_context_id = if matches!(event.event.event, InputEvent::MouseLeftViewport(_)) { 88 88 self.hovered_browsing_context_id 89 89 .unwrap_or(self.focused_browsing_context_id) 90 - @@ -160,11 +211,9 @@ 90 + @@ -169,11 +220,9 @@ 91 91 92 92 if let InputEvent::MouseMove(_) = &event.event.event { 93 93 update_hovered_browsing_context(Some(pipeline.browsing_context_id), true);
+1 -1
patches/components/layout/layout_impl.rs.patch
··· 44 44 @@ -729,6 +746,7 @@ 45 45 paint_timing_handler: Default::default(), 46 46 user_stylesheets: config.user_stylesheets, 47 - accessibility_active: Cell::new(config.accessibility_active), 47 + accessibility_active: Cell::new(false), 48 48 + page_zoom_for_rendering: Cell::new(config.viewport_details.page_zoom_for_rendering), 49 49 } 50 50 }
+1 -1
patches/components/paint/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -37,6 +37,7 @@ 3 + @@ -39,6 +39,7 @@ 4 4 media = { workspace = true } 5 5 malloc_size_of = { workspace = true } 6 6 paint_api = { workspace = true }
+2 -2
patches/components/paint/painter.rs.patch
··· 278 278 + } 279 279 + } 280 280 + 281 - pub(crate) fn pinch_zoom( 281 + pub(crate) fn adjust_pinch_zoom( 282 282 &mut self, 283 283 webview_id: WebViewId, 284 - @@ -1394,7 +1498,6 @@ 284 + @@ -1401,7 +1505,6 @@ 285 285 result: InputEventResult, 286 286 ) { 287 287 let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else {
+11 -11
patches/components/script/dom/document.rs.patch
··· 25 25 use fonts::WebFontDocumentContext; 26 26 use html5ever::{LocalName, Namespace, QualName, local_name, ns}; 27 27 use hyper_serde::Serde; 28 - @@ -617,6 +620,9 @@ 28 + @@ -622,6 +625,9 @@ 29 29 #[no_trace] 30 30 favicon: RefCell<Option<Image>>, 31 31 ··· 35 35 /// All websockets created that are associated with this document. 36 36 websockets: DOMTracker<WebSocket>, 37 37 38 - @@ -864,6 +870,12 @@ 38 + @@ -869,6 +875,12 @@ 39 39 40 40 // Set the document's activity level, reflow if necessary, and suspend or resume timers. 41 41 self.activity.set(activity); ··· 48 48 let media = ServoMedia::get(); 49 49 let pipeline_id = self.window().pipeline_id(); 50 50 let client_context_id = 51 - @@ -877,6 +889,7 @@ 51 + @@ -882,6 +894,7 @@ 52 52 53 53 self.title_changed(); 54 54 self.notify_embedder_favicon(); ··· 56 56 self.dirty_all_nodes(); 57 57 self.window().resume(CanGc::from_cx(cx)); 58 58 media.resume(&client_context_id); 59 - @@ -1283,6 +1296,9 @@ 59 + @@ -1288,6 +1301,9 @@ 60 60 LoadStatus::Started, 61 61 )); 62 62 self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); ··· 66 66 } 67 67 }, 68 68 DocumentReadyState::Complete => { 69 - @@ -1291,6 +1307,9 @@ 69 + @@ -1296,6 +1312,9 @@ 70 70 self.webview_id(), 71 71 LoadStatus::Complete, 72 72 )); ··· 76 76 } 77 77 update_with_current_instant(&self.dom_complete); 78 78 }, 79 - @@ -1697,7 +1716,13 @@ 79 + @@ -1702,7 +1721,13 @@ 80 80 let window = self.window(); 81 81 if window.is_top_level() { 82 82 let title = self.title().map(String::from); ··· 91 91 } 92 92 } 93 93 94 - @@ -1706,6 +1731,18 @@ 94 + @@ -1711,6 +1736,18 @@ 95 95 window.send_to_embedder(msg); 96 96 } 97 97 ··· 110 110 pub(crate) fn dirty_all_nodes(&self) { 111 111 let root = match self.GetDocumentElement() { 112 112 Some(root) => root, 113 - @@ -3253,9 +3290,59 @@ 113 + @@ -3287,9 +3324,59 @@ 114 114 current_rendering_epoch, 115 115 ); 116 116 ··· 170 170 pub(crate) fn handle_no_longer_waiting_on_asynchronous_image_updates(&self) { 171 171 self.waiting_on_canvas_image_updates.set(false); 172 172 } 173 - @@ -3998,6 +4085,7 @@ 173 + @@ -4032,6 +4119,7 @@ 174 174 active_sandboxing_flag_set: Cell::new(SandboxingFlagSet::empty()), 175 175 creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 176 176 favicon: RefCell::new(None), ··· 178 178 websockets: DOMTracker::new(), 179 179 details_name_groups: Default::default(), 180 180 protocol_handler_automation_mode: Default::default(), 181 - @@ -5102,6 +5190,36 @@ 181 + @@ -5136,6 +5224,36 @@ 182 182 183 183 pub(crate) fn notify_embedder_favicon(&self) { 184 184 if let Some(ref image) = *self.favicon.borrow() { ··· 215 215 self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); 216 216 } 217 217 } 218 - @@ -5161,6 +5279,20 @@ 218 + @@ -5195,6 +5313,20 @@ 219 219 pub(crate) fn set_css_styling_flag(&self, value: bool) { 220 220 self.css_styling_flag.set(value) 221 221 }
+25 -25
patches/components/script/dom/document_event_handler.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -11,12 +11,15 @@ 3 + @@ -12,12 +12,15 @@ 4 4 use std::time::{Duration, Instant}; 5 5 6 6 use base::generic_channel::GenericCallback; ··· 21 21 }; 22 22 #[cfg(feature = "gamepad")] 23 23 use embedder_traits::{ 24 - @@ -32,7 +35,9 @@ 25 - use script_bindings::codegen::GenericBindings::EventBinding::EventMethods; 24 + @@ -34,7 +37,9 @@ 26 25 use script_bindings::codegen::GenericBindings::HTMLElementBinding::HTMLElementMethods; 27 26 use script_bindings::codegen::GenericBindings::HTMLLabelElementBinding::HTMLLabelElementMethods; 27 + use script_bindings::codegen::GenericBindings::KeyboardEventBinding::KeyboardEventMethods; 28 28 +#[cfg(feature = "gamepad")] 29 29 use script_bindings::codegen::GenericBindings::NavigatorBinding::NavigatorMethods; 30 30 +#[cfg(feature = "gamepad")] 31 31 use script_bindings::codegen::GenericBindings::PerformanceBinding::PerformanceMethods; 32 32 use script_bindings::codegen::GenericBindings::TouchBinding::TouchMethods; 33 33 use script_bindings::codegen::GenericBindings::WindowBinding::{ScrollBehavior, WindowMethods}; 34 - @@ -54,12 +59,13 @@ 35 - use crate::dom::bindings::refcounted::Trusted; 34 + @@ -57,12 +62,13 @@ 36 35 use crate::dom::bindings::root::MutNullableDom; 36 + use crate::dom::bindings::trace::NoTrace; 37 37 use crate::dom::clipboardevent::ClipboardEventType; 38 38 -use crate::dom::document::{FireMouseEventType, FocusInitiator}; 39 39 +use crate::dom::document::{Document, FireMouseEventType, FocusInitiator}; ··· 46 46 use crate::dom::inputevent::HitTestResult; 47 47 use crate::dom::interactive_element_command::InteractiveElementCommand; 48 48 use crate::dom::keyboardevent::KeyboardEvent; 49 - @@ -73,6 +79,7 @@ 49 + @@ -76,6 +82,7 @@ 50 50 }; 51 51 use crate::drag_data_store::{DragDataStore, Kind, Mode}; 52 52 use crate::realms::enter_realm; ··· 54 54 55 55 /// A data structure used for tracking the current click count. This can be 56 56 /// reset to 0 if a mouse button event happens at a sufficient distance or time 57 - @@ -136,6 +143,56 @@ 57 + @@ -139,6 +146,56 @@ 58 58 } 59 59 } 60 60 ··· 111 111 /// The [`DocumentEventHandler`] is a structure responsible for handling input events for 112 112 /// the [`crate::Document`] and storing data related to event handling. It exists to 113 113 /// decrease the size of the [`crate::Document`] structure. 114 - @@ -194,6 +251,20 @@ 115 - access_key_handlers: DomRefCell<FxHashMap<char, Dom<HTMLElement>>>, 114 + @@ -197,6 +254,20 @@ 115 + access_key_handlers: DomRefCell<FxHashMap<NoTrace<Code>, Dom<HTMLElement>>>, 116 116 /// <https://html.spec.whatwg.org/multipage/#sequential-focus-navigation-starting-point> 117 117 sequential_focus_navigation_starting_point: MutNullableDom<Node>, 118 118 + /// Long-press state for context menu detection. ··· 132 132 } 133 133 134 134 impl DocumentEventHandler { 135 - @@ -218,6 +289,9 @@ 135 + @@ -221,6 +292,9 @@ 136 136 next_touch_pointer_id: Cell::new(1), 137 137 access_key_handlers: Default::default(), 138 138 sequential_focus_navigation_starting_point: Default::default(), ··· 142 142 } 143 143 } 144 144 145 - @@ -543,6 +617,198 @@ 145 + @@ -546,6 +620,198 @@ 146 146 } 147 147 } 148 148 ··· 341 341 /// <https://w3c.github.io/uievents/#handle-native-mouse-move> 342 342 fn handle_native_mouse_move_event(&self, input_event: &ConstellationInputEvent, can_gc: CanGc) { 343 343 // Ignore all incoming events without a hit test. 344 - @@ -557,6 +823,57 @@ 344 + @@ -560,6 +826,57 @@ 345 345 return; 346 346 } 347 347 ··· 399 399 // Update the cursor when the mouse moves, if it has changed. 400 400 self.set_cursor(Some(hit_test_result.cursor)); 401 401 402 - @@ -782,6 +1099,12 @@ 402 + @@ -785,6 +1102,12 @@ 403 403 return; 404 404 }; 405 405 ··· 412 412 debug!( 413 413 "{:?}: at {:?}", 414 414 event.action, hit_test_result.point_in_frame 415 - @@ -880,18 +1203,25 @@ 415 + @@ -883,18 +1206,25 @@ 416 416 let target_el = element.find_click_focusable_area(); 417 417 418 418 let document = self.window.Document(); ··· 443 443 document.commit_focus_transaction(FocusInitiator::Click, can_gc); 444 444 } 445 445 446 - @@ -901,7 +1231,7 @@ 446 + @@ -904,7 +1234,7 @@ 447 447 self.maybe_show_context_menu( 448 448 node.upcast(), 449 449 &hit_test_result, ··· 452 452 can_gc, 453 453 ); 454 454 } 455 - @@ -1025,9 +1355,30 @@ 455 + @@ -1028,9 +1358,30 @@ 456 456 &self, 457 457 target: &EventTarget, 458 458 hit_test_result: &HitTestResult, ··· 484 484 // <https://w3c.github.io/uievents/#contextmenu> 485 485 let menu_event = PointerEvent::new( 486 486 &self.window, // window 487 - @@ -1041,25 +1392,25 @@ 487 + @@ -1044,25 +1395,25 @@ 488 488 hit_test_result 489 489 .point_relative_to_initial_containing_block 490 490 .to_i32(), ··· 529 529 can_gc, 530 530 ); 531 531 532 - @@ -1075,6 +1426,89 @@ 532 + @@ -1078,6 +1429,89 @@ 533 533 }; 534 534 } 535 535 ··· 619 619 fn handle_touch_event( 620 620 &self, 621 621 event: EmbedderTouchEvent, 622 - @@ -1081,6 +1515,29 @@ 622 + @@ -1084,6 +1518,29 @@ 623 623 input_event: &ConstellationInputEvent, 624 624 can_gc: CanGc, 625 625 ) -> InputEventResult { ··· 649 649 // Ignore all incoming events without a hit test. 650 650 let Some(hit_test_result) = self.window.hit_test_from_input_event(input_event) else { 651 651 self.update_active_touch_points_when_early_return(event); 652 - @@ -1087,6 +1544,16 @@ 652 + @@ -1090,6 +1547,16 @@ 653 653 return Default::default(); 654 654 }; 655 655 ··· 666 666 let TouchId(identifier) = event.touch_id; 667 667 668 668 let Some(element) = hit_test_result 669 - @@ -1218,6 +1685,10 @@ 669 + @@ -1221,6 +1688,10 @@ 670 670 // <https://html.spec.whatwg.org/multipage/#selector-active> 671 671 // If the element is being actively pointed at the element is being activated. 672 672 self.element_for_activation(element).set_active_state(true); ··· 677 677 (current_target, pointer_touch) 678 678 }, 679 679 _ => { 680 - @@ -1250,10 +1721,31 @@ 680 + @@ -1253,10 +1724,31 @@ 681 681 can_gc, 682 682 ); 683 683 ··· 710 710 }, 711 711 TouchEventType::Up | TouchEventType::Cancel => { 712 712 active_touch_points.swap_remove(index); 713 - @@ -1261,6 +1753,17 @@ 713 + @@ -1264,6 +1756,17 @@ 714 714 // <https://html.spec.whatwg.org/multipage/#selector-active> 715 715 // If the element is being actively pointed at the element is being activated. 716 716 self.element_for_activation(element).set_active_state(false); ··· 728 728 }, 729 729 TouchEventType::Down => unreachable!("Should have been handled above"), 730 730 } 731 - @@ -1304,6 +1807,19 @@ 731 + @@ -1307,6 +1810,19 @@ 732 732 ); 733 733 let event = touch_event.upcast::<Event>(); 734 734 event.fire(&touch_dispatch_target, can_gc); ··· 748 748 event.flags().into() 749 749 } 750 750 751 - @@ -1449,6 +1965,16 @@ 751 + @@ -1452,6 +1968,16 @@ 752 752 return Default::default(); 753 753 }; 754 754
+5 -5
patches/components/script/dom/globalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -369,6 +369,16 @@ 3 + @@ -368,6 +368,16 @@ 4 4 /// Is considered in a secure context 5 5 inherited_secure_context: Option<bool>, 6 6 ··· 17 17 /// Directory to store unminified scripts for this window if unminify-js 18 18 /// opt is enabled. 19 19 unminified_js_dir: Option<String>, 20 - @@ -768,6 +778,8 @@ 20 + @@ -767,6 +777,8 @@ 21 21 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 22 22 inherited_secure_context: Option<bool>, 23 23 unminify_js: bool, ··· 26 26 font_context: Option<Arc<FontContext>>, 27 27 ) -> Self { 28 28 Self { 29 - @@ -812,6 +824,8 @@ 29 + @@ -811,6 +823,8 @@ 30 30 console_group_stack: DomRefCell::new(Vec::new()), 31 31 console_count_map: Default::default(), 32 32 inherited_secure_context, ··· 35 35 unminified_js_dir: unminify_js.then(|| unminified_path("unminified-js")), 36 36 byte_length_queuing_strategy_size_function: OnceCell::new(), 37 37 count_queuing_strategy_size_function: OnceCell::new(), 38 - @@ -1137,6 +1151,25 @@ 38 + @@ -1136,6 +1150,25 @@ 39 39 .send(ScriptToConstellationMessage::EntanglePorts(port1, port2)); 40 40 } 41 41 ··· 61 61 /// Handle the transfer of a port in the current task. 62 62 pub(crate) fn mark_port_as_transferred(&self, port_id: &MessagePortId) -> MessagePortImpl { 63 63 if let MessagePortState::Managed(_id, message_ports) = 64 - @@ -3127,6 +3160,16 @@ 64 + @@ -3126,6 +3159,16 @@ 65 65 self.inherited_secure_context 66 66 } 67 67
+3 -3
patches/components/script/dom/html/htmliframeelement.rs.patch
··· 516 516 } 517 517 518 518 impl VirtualMethods for HTMLIFrameElement { 519 - @@ -1073,10 +1489,38 @@ 519 + @@ -1074,10 +1490,38 @@ 520 520 // is in a document tree and has a browsing context, which is what causes 521 521 // the child browsing context to be created. 522 522 if self.upcast::<Node>().is_connected_with_browsing_context() { ··· 557 557 local_name!("loading") => { 558 558 // https://html.spec.whatwg.org/multipage/#attr-iframe-loading 559 559 // > When the loading attribute's state is changed to the Eager state, the user agent must run these steps: 560 - @@ -1139,6 +1583,23 @@ 560 + @@ -1140,6 +1584,23 @@ 561 561 562 562 debug!("<iframe> running post connection steps"); 563 563 ··· 581 581 // Step 1. Create a new child navigable for insertedNode. 582 582 self.create_nested_browsing_context(cx); 583 583 584 - @@ -1162,11 +1623,25 @@ 584 + @@ -1163,11 +1624,25 @@ 585 585 fn unbind_from_tree(&self, context: &UnbindContext, can_gc: CanGc) { 586 586 self.super_type().unwrap().unbind_from_tree(context, can_gc); 587 587
+1 -1
patches/components/script/dom/html/htmllinkelement.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -749,7 +749,7 @@ 3 + @@ -754,7 +754,7 @@ 4 4 if !window.is_top_level() { 5 5 return; 6 6 }
+5 -5
patches/components/script/dom/mod.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -282,6 +282,7 @@ 4 - #[expect(dead_code)] 5 - pub(crate) mod element; 3 + @@ -284,6 +284,7 @@ 6 4 pub(crate) mod elementinternals; 5 + pub(crate) mod encoding; 6 + pub(crate) use self::encoding::*; 7 7 +pub(crate) mod embedder; 8 8 pub(crate) mod errorevent; 9 9 pub(crate) mod event; 10 10 pub(crate) mod eventsource; 11 - @@ -315,6 +316,7 @@ 11 + @@ -317,6 +318,7 @@ 12 12 pub(crate) mod inputevent; 13 13 pub(crate) mod intersectionobserver; 14 14 pub(crate) mod intersectionobserverentry; ··· 16 16 pub(crate) mod keyboardevent; 17 17 pub(crate) mod location; 18 18 pub(crate) mod media; 19 - @@ -342,6 +344,10 @@ 19 + @@ -344,6 +346,10 @@ 20 20 pub(crate) mod pagetransitionevent; 21 21 pub(crate) mod paintsize; 22 22 pub(crate) mod paintworkletglobalscope;
+1 -1
patches/components/script/dom/notification.rs.patch
··· 36 36 } 37 37 38 38 // TODO: step 7: If shown is false or oldNotification is non-null, 39 - @@ -882,6 +894,11 @@ 39 + @@ -883,6 +895,11 @@ 40 40 for (request, resource_type) in pending_requests { 41 41 self.fetch_and_show_when_ready(request, resource_type); 42 42 }
+4 -4
patches/components/script/dom/window.rs.patch
··· 93 93 /// <https://developer.mozilla.org/en-US/docs/Web/API/Window/screen> 94 94 fn Screen(&self, can_gc: CanGc) -> DomRoot<Screen> { 95 95 self.screen.or_init(|| Screen::new(self, can_gc)) 96 - @@ -3045,9 +3076,33 @@ 96 + @@ -3044,9 +3075,33 @@ 97 97 &self, 98 98 input_event: &ConstellationInputEvent, 99 99 ) -> Option<HitTestResult> { ··· 130 130 } 131 131 132 132 #[expect(unsafe_code)] 133 - @@ -3066,8 +3121,25 @@ 133 + @@ -3065,8 +3120,25 @@ 134 134 // SAFETY: This is safe because `Window::query_elements_from_point` has ensured that 135 135 // layout has run and any OpaqueNodes that no longer refer to real nodes are gone. 136 136 let address = UntrustedNodeAddress(result.node.0 as *const c_void); ··· 157 157 cursor: result.cursor, 158 158 point_in_node: result.point_in_target, 159 159 point_in_frame, 160 - @@ -3748,6 +3820,8 @@ 160 + @@ -3750,6 +3822,8 @@ 161 161 player_context: WindowGLContext, 162 162 #[cfg(feature = "webgpu")] gpu_id_hub: Arc<IdentityHub>, 163 163 inherited_secure_context: Option<bool>, ··· 166 166 theme: Theme, 167 167 weak_script_thread: Weak<ScriptThread>, 168 168 ) -> DomRoot<Self> { 169 - @@ -3774,6 +3848,8 @@ 169 + @@ -3776,6 +3850,8 @@ 170 170 gpu_id_hub, 171 171 inherited_secure_context, 172 172 unminify_js,
+1 -1
patches/components/script/dom/workers/workerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -368,6 +368,8 @@ 3 + @@ -349,6 +349,8 @@ 4 4 gpu_id_hub, 5 5 init.inherited_secure_context, 6 6 init.unminify_js,
+9 -9
patches/components/script/script_thread.rs.patch
··· 61 61 use crate::dom::servoparser::{ParserContext, ServoParser}; 62 62 use crate::dom::types::DebuggerGlobalScope; 63 63 #[cfg(feature = "webgpu")] 64 - @@ -1943,11 +1950,22 @@ 64 + @@ -1939,11 +1946,22 @@ 65 65 self.handle_refresh_cursor(pipeline_id); 66 66 }, 67 67 ScriptThreadMessage::PreferencesUpdated(updates) => { ··· 88 88 }, 89 89 ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { 90 90 if let Some(document) = self.documents.borrow().find_document(pipeline_id) { 91 - @@ -1988,6 +2006,35 @@ 91 + @@ -1984,6 +2002,35 @@ 92 92 ScriptThreadMessage::TriggerGarbageCollection => unsafe { 93 93 JS_GC(*GlobalScope::get_cx(), GCReason::API); 94 94 }, ··· 124 124 } 125 125 } 126 126 127 - @@ -3059,6 +3106,9 @@ 127 + @@ -3055,6 +3102,9 @@ 128 128 .documents 129 129 .borrow() 130 130 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 134 134 if let Some(frame_element) = frame_element { 135 135 frame_element.update_pipeline_id(new_pipeline_id, reason, cx); 136 136 } 137 - @@ -3078,6 +3128,7 @@ 137 + @@ -3074,6 +3124,7 @@ 138 138 // is no need to pass along existing opener information that 139 139 // will be discarded. 140 140 None, ··· 142 142 ); 143 143 } 144 144 } 145 - @@ -3354,6 +3405,157 @@ 145 + @@ -3350,6 +3401,157 @@ 146 146 } 147 147 } 148 148 ··· 300 300 fn ask_constellation_for_top_level_info( 301 301 &self, 302 302 sender_webview_id: WebViewId, 303 - @@ -3468,7 +3670,13 @@ 303 + @@ -3463,7 +3665,13 @@ 304 304 self.senders.pipeline_to_embedder_sender.clone(), 305 305 self.senders.constellation_sender.clone(), 306 306 incomplete.pipeline_id, ··· 315 315 incomplete.viewport_details, 316 316 origin.clone(), 317 317 final_url.clone(), 318 - @@ -3490,6 +3698,8 @@ 318 + @@ -3485,6 +3693,8 @@ 319 319 #[cfg(feature = "webgpu")] 320 320 self.gpu_id_hub.clone(), 321 321 incomplete.load_data.inherited_secure_context, ··· 324 324 incomplete.theme, 325 325 self.this.clone(), 326 326 ); 327 - @@ -3513,6 +3723,7 @@ 327 + @@ -3508,6 +3718,7 @@ 328 328 incomplete.webview_id, 329 329 incomplete.parent_info, 330 330 incomplete.opener, ··· 332 332 ); 333 333 if window_proxy.parent().is_some() { 334 334 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 335 - @@ -4286,6 +4497,24 @@ 335 + @@ -4281,6 +4492,24 @@ 336 336 document.event_handler().handle_refresh_cursor(); 337 337 } 338 338
+2 -2
patches/components/servo/servo.rs.patch
··· 133 133 } 134 134 } 135 135 } 136 - @@ -935,6 +1005,14 @@ 137 - )); 136 + @@ -927,6 +997,14 @@ 137 + self.0.site_data_manager.borrow() 138 138 } 139 139 140 140 + pub fn spawn_task<F>(task: F)
+3 -3
patches/components/servo/webview.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -219,6 +219,18 @@ 3 + @@ -227,6 +227,18 @@ 4 4 self.delegate().request_create_new(self.clone(), request); 5 5 } 6 6 ··· 19 19 pub(crate) fn viewport_details(&self) -> ViewportDetails { 20 20 // The division by 1 represents the page's default zoom of 100%, 21 21 // and gives us the appropriate CSSPixel type for the viewport. 22 - @@ -228,6 +240,7 @@ 22 + @@ -236,6 +248,7 @@ 23 23 ViewportDetails { 24 24 size: scaled_viewport_size / Scale::new(1.0), 25 25 hidpi_scale_factor: Scale::new(inner.hidpi_scale_factor.0), ··· 27 27 } 28 28 } 29 29 30 - @@ -745,6 +758,11 @@ 30 + @@ -758,6 +771,11 @@ 31 31 EmbedderControlRequest::FilePicker { .. } => { 32 32 unreachable!("This message should be routed through the FileManagerThread") 33 33 },
+1 -1
patches/components/servo/webview_delegate.rs.patch
··· 24 24 /// Content in a [`WebView`] is requesting permission to access a feature requiring 25 25 /// permission from the user. The embedder should allow or deny the request, either by 26 26 /// reading a cached value or querying the user for permission via the user interface. 27 - @@ -1004,6 +1012,25 @@ 27 + @@ -1009,6 +1017,25 @@ 28 28 _tree_update: accesskit::TreeUpdate, 29 29 ) { 30 30 }
+2 -2
patches/components/shared/constellation/lib.rs.patch
··· 172 172 #[derive(IntoStaticStr)] 173 173 @@ -118,6 +257,9 @@ 174 174 UpdatePinchZoomInfos(PipelineId, PinchZoomInfos), 175 - /// Activate or deactivate accessibility features. 176 - SetAccessibilityActive(bool), 175 + /// Activate or deactivate accessibility features for the given `WebView`. 176 + SetAccessibilityActive(WebViewId, bool), 177 177 + /// Notify all script threads about a Servo error, so they can dispatch `servoerror` events 178 178 + /// to all `navigator.embedder` instances. 179 179 + NotifyServoError(ServoErrorType, String),
+1 -1
patches/components/shared/embedder/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -34,6 +34,7 @@ 3 + @@ -36,6 +36,7 @@ 4 4 pixels = { workspace = true } 5 5 rustc-hash = { workspace = true } 6 6 serde = { workspace = true }
+2 -2
patches/components/shared/script/lib.rs.patch
··· 35 35 } 36 36 37 37 /// When a pipeline is closed, should its browsing context be discarded too? 38 - @@ -312,6 +320,24 @@ 39 - SetAccessibilityActive(bool), 38 + @@ -319,6 +327,24 @@ 39 + SetAccessibilityActive(PipelineId, bool), 40 40 /// Force a garbage collection in this script thread. 41 41 TriggerGarbageCollection, 42 42 + /// Dispatch an event on an embedded webview's iframe element.