Rewild Your Web
18
fork

Configure Feed

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

chore: update to Servo dae0edb5b98bde9f2c6f6f3ff3327df4c94514cb

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

webbeef 7b16ca8f 730077af

+555 -559
+173 -100
Cargo.lock
··· 234 234 "cc", 235 235 "cesu8", 236 236 "jni", 237 - "jni-sys", 237 + "jni-sys 0.3.1", 238 238 "libc", 239 239 "log", 240 240 "ndk", ··· 628 628 629 629 [[package]] 630 630 name = "aws-lc-rs" 631 - version = "1.16.1" 631 + version = "1.16.2" 632 632 source = "registry+https://github.com/rust-lang/crates.io-index" 633 - checksum = "94bffc006df10ac2a68c83692d734a465f8ee6c5b384d8545a636f81d858f4bf" 633 + checksum = "a054912289d18629dc78375ba2c3726a3afe3ff71b4edba9dedfca0e3446d1fc" 634 634 dependencies = [ 635 635 "aws-lc-sys", 636 636 "zeroize", ··· 638 638 639 639 [[package]] 640 640 name = "aws-lc-sys" 641 - version = "0.38.0" 641 + version = "0.39.0" 642 642 source = "registry+https://github.com/rust-lang/crates.io-index" 643 - checksum = "4321e568ed89bb5a7d291a7f37997c2c0df89809d7b6d12062c81ddb54aa782e" 643 + checksum = "1fa7e52a4c5c547c741610a2c6f123f3881e409b714cd27e6798ef020c514f0a" 644 644 dependencies = [ 645 645 "cc", 646 646 "cmake", ··· 788 788 789 789 [[package]] 790 790 name = "beaver-shell" 791 - version = "0.0.1" 791 + version = "0.0.6" 792 792 dependencies = [ 793 793 "axum", 794 794 "chrono", ··· 1533 1533 1534 1534 [[package]] 1535 1535 name = "content-security-policy" 1536 - version = "0.6.1" 1536 + version = "0.7.0" 1537 1537 source = "registry+https://github.com/rust-lang/crates.io-index" 1538 - checksum = "92693f0f50d58b279ffb4a005722c509739e1d01bb53e6cf8d3c06ffb6b101ef" 1538 + checksum = "47ed7d27b1e6023b7fce811326a8835769ca374149e1da7c8fcfb684bdb260fc" 1539 1539 dependencies = [ 1540 1540 "base64 0.22.1", 1541 1541 "bitflags 2.11.0", ··· 4397 4397 "icu_properties 1.5.1", 4398 4398 "icu_provider 1.5.0", 4399 4399 "icu_provider_adapters", 4400 - "icu_segmenter", 4400 + "icu_segmenter 1.5.0", 4401 4401 "icu_timezone", 4402 4402 "tinystr 0.7.6", 4403 4403 "unicode-bidi", ··· 4582 4582 checksum = "52b1a7fbdbf3958f1be8354cb59ac73f165b7b7082d447ff2090355c9a069120" 4583 4583 4584 4584 [[package]] 4585 + name = "icu_locale" 4586 + version = "2.1.1" 4587 + source = "registry+https://github.com/rust-lang/crates.io-index" 4588 + checksum = "532b11722e350ab6bf916ba6eb0efe3ee54b932666afec989465f9243fe6dd60" 4589 + dependencies = [ 4590 + "icu_collections 2.1.1", 4591 + "icu_locale_core", 4592 + "icu_locale_data", 4593 + "icu_provider 2.1.1", 4594 + "potential_utf", 4595 + "tinystr 0.8.2", 4596 + "zerovec 0.11.5", 4597 + ] 4598 + 4599 + [[package]] 4585 4600 name = "icu_locale_core" 4586 4601 version = "2.1.1" 4587 4602 source = "registry+https://github.com/rust-lang/crates.io-index" ··· 4589 4604 dependencies = [ 4590 4605 "displaydoc", 4591 4606 "litemap 0.8.1", 4607 + "serde", 4592 4608 "tinystr 0.8.2", 4593 4609 "writeable 0.6.2", 4594 4610 "zerovec 0.11.5", 4595 4611 ] 4612 + 4613 + [[package]] 4614 + name = "icu_locale_data" 4615 + version = "2.1.2" 4616 + source = "registry+https://github.com/rust-lang/crates.io-index" 4617 + checksum = "1c5f1d16b4c3a2642d3a719f18f6b06070ab0aef246a6418130c955ae08aa831" 4596 4618 4597 4619 [[package]] 4598 4620 name = "icu_locid" ··· 4771 4793 dependencies = [ 4772 4794 "displaydoc", 4773 4795 "icu_locale_core", 4796 + "serde", 4797 + "stable_deref_trait", 4774 4798 "writeable 0.6.2", 4775 4799 "yoke 0.8.1", 4776 4800 "zerofrom", ··· 4813 4837 "icu_collections 1.5.0", 4814 4838 "icu_locid", 4815 4839 "icu_provider 1.5.0", 4816 - "icu_segmenter_data", 4840 + "icu_segmenter_data 1.5.1", 4817 4841 "utf8_iter", 4818 4842 "zerovec 0.10.4", 4819 4843 ] 4820 4844 4821 4845 [[package]] 4846 + name = "icu_segmenter" 4847 + version = "2.1.2" 4848 + source = "registry+https://github.com/rust-lang/crates.io-index" 4849 + checksum = "a807a7488f3f758629ae86d99d9d30dce24da2fb2945d74c80a4f4a62c71db73" 4850 + dependencies = [ 4851 + "core_maths", 4852 + "icu_collections 2.1.1", 4853 + "icu_locale", 4854 + "icu_provider 2.1.1", 4855 + "icu_segmenter_data 2.1.1", 4856 + "potential_utf", 4857 + "utf8_iter", 4858 + "zerovec 0.11.5", 4859 + ] 4860 + 4861 + [[package]] 4822 4862 name = "icu_segmenter_data" 4823 4863 version = "1.5.1" 4824 4864 source = "registry+https://github.com/rust-lang/crates.io-index" 4825 4865 checksum = "a1e52775179941363cc594e49ce99284d13d6948928d8e72c755f55e98caa1eb" 4866 + 4867 + [[package]] 4868 + name = "icu_segmenter_data" 4869 + version = "2.1.1" 4870 + source = "registry+https://github.com/rust-lang/crates.io-index" 4871 + checksum = "6ebbb7321d9e21d25f5660366cb6c08201d0175898a3a6f7a41ee9685af21c80" 4826 4872 4827 4873 [[package]] 4828 4874 name = "icu_timezone" ··· 4925 4971 "rgb", 4926 4972 "tiff", 4927 4973 "zune-core 0.5.1", 4928 - "zune-jpeg 0.5.13", 4974 + "zune-jpeg 0.5.14", 4929 4975 ] 4930 4976 4931 4977 [[package]] ··· 5048 5094 5049 5095 [[package]] 5050 5096 name = "iri-string" 5051 - version = "0.7.10" 5097 + version = "0.7.11" 5052 5098 source = "registry+https://github.com/rust-lang/crates.io-index" 5053 - checksum = "c91338f0783edbd6195decb37bae672fd3b165faffb89bf7b9e6942f8b1a731a" 5099 + checksum = "d8e7418f59cc01c88316161279a7f665217ae316b388e58a0d10e29f54f1e5eb" 5054 5100 dependencies = [ 5055 5101 "memchr", 5056 5102 "serde", ··· 5335 5381 5336 5382 [[package]] 5337 5383 name = "itoa" 5338 - version = "1.0.17" 5384 + version = "1.0.18" 5339 5385 source = "registry+https://github.com/rust-lang/crates.io-index" 5340 - checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" 5386 + checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" 5341 5387 5342 5388 [[package]] 5343 5389 name = "jiff" ··· 5372 5418 "cesu8", 5373 5419 "cfg-if", 5374 5420 "combine", 5375 - "jni-sys", 5421 + "jni-sys 0.3.1", 5376 5422 "log", 5377 5423 "thiserror 1.0.69", 5378 5424 "walkdir", ··· 5381 5427 5382 5428 [[package]] 5383 5429 name = "jni-sys" 5384 - version = "0.3.0" 5430 + version = "0.3.1" 5431 + source = "registry+https://github.com/rust-lang/crates.io-index" 5432 + checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" 5433 + dependencies = [ 5434 + "jni-sys 0.4.1", 5435 + ] 5436 + 5437 + [[package]] 5438 + name = "jni-sys" 5439 + version = "0.4.1" 5385 5440 source = "registry+https://github.com/rust-lang/crates.io-index" 5386 - checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" 5441 + checksum = "c6377a88cb3910bee9b0fa88d4f42e1d2da8e79915598f65fb0c7ee14c878af2" 5442 + dependencies = [ 5443 + "jni-sys-macros", 5444 + ] 5445 + 5446 + [[package]] 5447 + name = "jni-sys-macros" 5448 + version = "0.4.1" 5449 + source = "registry+https://github.com/rust-lang/crates.io-index" 5450 + checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" 5451 + dependencies = [ 5452 + "quote", 5453 + "syn 2.0.117", 5454 + ] 5387 5455 5388 5456 [[package]] 5389 5457 name = "jobserver" ··· 5928 5996 5929 5997 [[package]] 5930 5998 name = "moka" 5931 - version = "0.12.14" 5999 + version = "0.12.15" 5932 6000 source = "registry+https://github.com/rust-lang/crates.io-index" 5933 - checksum = "85f8024e1c8e71c778968af91d43700ce1d11b219d127d79fb2934153b82b42b" 6001 + checksum = "957228ad12042ee839f93c8f257b62b4c0ab5eaae1d4fa60de53b27c9d7c5046" 5934 6002 dependencies = [ 5935 6003 "crossbeam-channel", 5936 6004 "crossbeam-epoch", ··· 6112 6180 checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" 6113 6181 dependencies = [ 6114 6182 "bitflags 2.11.0", 6115 - "jni-sys", 6183 + "jni-sys 0.3.1", 6116 6184 "log", 6117 6185 "ndk-sys", 6118 6186 "num_enum", ··· 6132 6200 source = "registry+https://github.com/rust-lang/crates.io-index" 6133 6201 checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" 6134 6202 dependencies = [ 6135 - "jni-sys", 6203 + "jni-sys 0.3.1", 6136 6204 ] 6137 6205 6138 6206 [[package]] ··· 7584 7652 source = "registry+https://github.com/rust-lang/crates.io-index" 7585 7653 checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" 7586 7654 dependencies = [ 7655 + "serde_core", 7656 + "writeable 0.6.2", 7587 7657 "zerovec 0.11.5", 7588 7658 ] 7589 7659 ··· 7769 7839 7770 7840 [[package]] 7771 7841 name = "quick_cache" 7772 - version = "0.6.20" 7842 + version = "0.6.21" 7773 7843 source = "registry+https://github.com/rust-lang/crates.io-index" 7774 - checksum = "d4c901384fb8fb3d4510388129ce6e13ecd686eee610da778b6ea77219decd53" 7844 + checksum = "5a70b1b8b47e31d0498ecbc3c5470bb931399a8bfed1fd79d1717a61ce7f96e3" 7775 7845 dependencies = [ 7776 7846 "ahash", 7777 7847 "equivalent", ··· 8463 8533 8464 8534 [[package]] 8465 8535 name = "rustls-webpki" 8466 - version = "0.103.9" 8536 + version = "0.103.10" 8467 8537 source = "registry+https://github.com/rust-lang/crates.io-index" 8468 - checksum = "d7df23109aa6c1567d1c575b9952556388da57401e4ace1d15f79eedad0d8f53" 8538 + checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef" 8469 8539 dependencies = [ 8470 8540 "aws-lc-rs", 8471 8541 "ring", ··· 8781 8851 8782 8852 [[package]] 8783 8853 name = "servo" 8784 - version = "0.0.1" 8854 + version = "0.0.6" 8785 8855 dependencies = [ 8786 8856 "accesskit", 8787 8857 "accesskit_consumer", ··· 8854 8924 8855 8925 [[package]] 8856 8926 name = "servo-allocator" 8857 - version = "0.0.1" 8927 + version = "0.0.6" 8858 8928 dependencies = [ 8859 8929 "backtrace", 8860 8930 "libc", ··· 8867 8937 8868 8938 [[package]] 8869 8939 name = "servo-background-hang-monitor" 8870 - version = "0.0.1" 8940 + version = "0.0.6" 8871 8941 dependencies = [ 8872 8942 "backtrace", 8873 8943 "crossbeam-channel", ··· 8884 8954 8885 8955 [[package]] 8886 8956 name = "servo-background-hang-monitor-api" 8887 - version = "0.0.1" 8957 + version = "0.0.6" 8888 8958 dependencies = [ 8889 8959 "serde", 8890 8960 "servo-base", ··· 8892 8962 8893 8963 [[package]] 8894 8964 name = "servo-base" 8895 - version = "0.0.1" 8965 + version = "0.0.6" 8896 8966 dependencies = [ 8897 8967 "accesskit", 8898 8968 "crossbeam-channel", ··· 8916 8986 8917 8987 [[package]] 8918 8988 name = "servo-bluetooth" 8919 - version = "0.0.1" 8989 + version = "0.0.6" 8920 8990 dependencies = [ 8921 8991 "bitflags 2.11.0", 8922 8992 "blurdroid", ··· 8934 9004 8935 9005 [[package]] 8936 9006 name = "servo-bluetooth-traits" 8937 - version = "0.0.1" 9007 + version = "0.0.6" 8938 9008 dependencies = [ 8939 9009 "regex", 8940 9010 "serde", ··· 8944 9014 8945 9015 [[package]] 8946 9016 name = "servo-canvas" 8947 - version = "0.0.1" 9017 + version = "0.0.6" 8948 9018 dependencies = [ 8949 9019 "bytemuck", 8950 9020 "crossbeam-channel", ··· 8972 9042 8973 9043 [[package]] 8974 9044 name = "servo-canvas-traits" 8975 - version = "0.0.1" 9045 + version = "0.0.6" 8976 9046 dependencies = [ 8977 9047 "crossbeam-channel", 8978 9048 "euclid", ··· 8992 9062 8993 9063 [[package]] 8994 9064 name = "servo-config" 8995 - version = "0.0.1" 9065 + version = "0.0.6" 8996 9066 dependencies = [ 8997 9067 "serde", 8998 9068 "serde_json", ··· 9002 9072 9003 9073 [[package]] 9004 9074 name = "servo-config-macro" 9005 - version = "0.0.1" 9075 + version = "0.0.6" 9006 9076 dependencies = [ 9007 9077 "proc-macro2", 9008 9078 "quote", ··· 9012 9082 9013 9083 [[package]] 9014 9084 name = "servo-constellation" 9015 - version = "0.0.1" 9085 + version = "0.0.6" 9016 9086 dependencies = [ 9017 9087 "backtrace", 9018 9088 "beaver-p2p", ··· 9064 9134 9065 9135 [[package]] 9066 9136 name = "servo-constellation-traits" 9067 - version = "0.0.1" 9137 + version = "0.0.6" 9068 9138 dependencies = [ 9069 9139 "content-security-policy", 9070 9140 "encoding_rs", ··· 9098 9168 9099 9169 [[package]] 9100 9170 name = "servo-deny-public-fields" 9101 - version = "0.0.1" 9171 + version = "0.0.6" 9102 9172 dependencies = [ 9103 9173 "syn 2.0.117", 9104 9174 "synstructure", ··· 9106 9176 9107 9177 [[package]] 9108 9178 name = "servo-devtools" 9109 - version = "0.0.1" 9179 + version = "0.0.6" 9110 9180 dependencies = [ 9111 9181 "atomic_refcell", 9112 9182 "base64 0.22.1", ··· 9134 9204 9135 9205 [[package]] 9136 9206 name = "servo-devtools-traits" 9137 - version = "0.0.1" 9207 + version = "0.0.6" 9138 9208 dependencies = [ 9139 9209 "http 1.4.0", 9140 9210 "malloc_size_of_derive", ··· 9150 9220 9151 9221 [[package]] 9152 9222 name = "servo-dom-struct" 9153 - version = "0.0.1" 9223 + version = "0.0.6" 9154 9224 dependencies = [ 9155 9225 "proc-macro2", 9156 9226 "quote", ··· 9159 9229 9160 9230 [[package]] 9161 9231 name = "servo-embedder-traits" 9162 - version = "0.0.1" 9232 + version = "0.0.6" 9163 9233 dependencies = [ 9164 9234 "accesskit", 9165 9235 "bitflags 2.11.0", ··· 9191 9261 9192 9262 [[package]] 9193 9263 name = "servo-fonts" 9194 - version = "0.0.1" 9264 + version = "0.0.6" 9195 9265 dependencies = [ 9196 9266 "app_units", 9197 9267 "bitflags 2.11.0", ··· 9202 9272 "fontsan", 9203 9273 "freetype-sys", 9204 9274 "harfbuzz-sys", 9275 + "icu_locid", 9205 9276 "icu_properties 1.5.1", 9206 9277 "itertools 0.14.0", 9207 9278 "libc", ··· 9245 9316 9246 9317 [[package]] 9247 9318 name = "servo-fonts-traits" 9248 - version = "0.0.1" 9319 + version = "0.0.6" 9249 9320 dependencies = [ 9250 9321 "atomic_refcell", 9251 9322 "dwrote", ··· 9268 9339 9269 9340 [[package]] 9270 9341 name = "servo-geometry" 9271 - version = "0.0.1" 9342 + version = "0.0.6" 9272 9343 dependencies = [ 9273 9344 "app_units", 9274 9345 "euclid", ··· 9295 9366 9296 9367 [[package]] 9297 9368 name = "servo-jstraceable-derive" 9298 - version = "0.0.1" 9369 + version = "0.0.6" 9299 9370 dependencies = [ 9300 9371 "proc-macro2", 9301 9372 "syn 2.0.117", ··· 9304 9375 9305 9376 [[package]] 9306 9377 name = "servo-layout" 9307 - version = "0.0.1" 9378 + version = "0.0.6" 9308 9379 dependencies = [ 9309 9380 "app_units", 9310 9381 "atomic_refcell", ··· 9313 9384 "euclid", 9314 9385 "html5ever", 9315 9386 "icu_locid", 9316 - "icu_segmenter", 9387 + "icu_segmenter 1.5.0", 9317 9388 "itertools 0.14.0", 9318 9389 "kurbo 0.12.0", 9319 9390 "log", ··· 9358 9429 9359 9430 [[package]] 9360 9431 name = "servo-layout-api" 9361 - version = "0.0.1" 9432 + version = "0.0.6" 9362 9433 dependencies = [ 9363 9434 "app_units", 9364 9435 "atomic_refcell", ··· 9390 9461 9391 9462 [[package]] 9392 9463 name = "servo-malloc-size-of" 9393 - version = "0.0.1" 9464 + version = "0.0.6" 9394 9465 dependencies = [ 9395 9466 "accountable-refcell", 9396 9467 "app_units", 9397 9468 "atomic_refcell", 9398 9469 "content-security-policy", 9399 9470 "crossbeam-channel", 9471 + "encoding_rs", 9400 9472 "euclid", 9401 9473 "http 1.4.0", 9402 9474 "indexmap", ··· 9420 9492 "unicode-script", 9421 9493 "url", 9422 9494 "urlpattern", 9423 - "utf-8", 9424 9495 "uuid", 9425 9496 "webrender", 9426 9497 "webrender_api", ··· 9429 9500 9430 9501 [[package]] 9431 9502 name = "servo-media" 9432 - version = "0.0.1" 9503 + version = "0.0.6" 9433 9504 dependencies = [ 9434 9505 "once_cell", 9435 9506 "servo-media-audio", ··· 9441 9512 9442 9513 [[package]] 9443 9514 name = "servo-media-audio" 9444 - version = "0.0.1" 9515 + version = "0.0.6" 9445 9516 dependencies = [ 9446 9517 "byte-slice-cast", 9447 9518 "euclid", ··· 9463 9534 9464 9535 [[package]] 9465 9536 name = "servo-media-derive" 9466 - version = "0.0.1" 9537 + version = "0.0.6" 9467 9538 dependencies = [ 9468 9539 "proc-macro2", 9469 9540 "quote", ··· 9472 9543 9473 9544 [[package]] 9474 9545 name = "servo-media-dummy" 9475 - version = "0.0.1" 9546 + version = "0.0.6" 9476 9547 dependencies = [ 9477 9548 "ipc-channel", 9478 9549 "servo-media", ··· 9485 9556 9486 9557 [[package]] 9487 9558 name = "servo-media-gstreamer" 9488 - version = "0.0.1" 9559 + version = "0.0.6" 9489 9560 dependencies = [ 9490 9561 "byte-slice-cast", 9491 9562 "glib 0.22.3", ··· 9517 9588 9518 9589 [[package]] 9519 9590 name = "servo-media-gstreamer-render" 9520 - version = "0.0.1" 9591 + version = "0.0.6" 9521 9592 dependencies = [ 9522 9593 "gstreamer", 9523 9594 "gstreamer-video", ··· 9526 9597 9527 9598 [[package]] 9528 9599 name = "servo-media-gstreamer-render-android" 9529 - version = "0.0.1" 9600 + version = "0.0.6" 9530 9601 dependencies = [ 9531 9602 "glib 0.22.3", 9532 9603 "gstreamer", ··· 9539 9610 9540 9611 [[package]] 9541 9612 name = "servo-media-gstreamer-render-unix" 9542 - version = "0.0.1" 9613 + version = "0.0.6" 9543 9614 dependencies = [ 9544 9615 "glib 0.22.3", 9545 9616 "gstreamer", ··· 9554 9625 9555 9626 [[package]] 9556 9627 name = "servo-media-player" 9557 - version = "0.0.1" 9628 + version = "0.0.6" 9558 9629 dependencies = [ 9559 9630 "ipc-channel", 9560 9631 "malloc_size_of_derive", ··· 9567 9638 9568 9639 [[package]] 9569 9640 name = "servo-media-streams" 9570 - version = "0.0.1" 9641 + version = "0.0.6" 9571 9642 dependencies = [ 9572 9643 "malloc_size_of_derive", 9573 9644 "servo-malloc-size-of", ··· 9576 9647 9577 9648 [[package]] 9578 9649 name = "servo-media-thread" 9579 - version = "0.0.1" 9650 + version = "0.0.6" 9580 9651 dependencies = [ 9581 9652 "euclid", 9582 9653 "ipc-channel", ··· 9593 9664 9594 9665 [[package]] 9595 9666 name = "servo-media-traits" 9596 - version = "0.0.1" 9667 + version = "0.0.6" 9597 9668 dependencies = [ 9598 9669 "malloc_size_of_derive", 9599 9670 "servo-malloc-size-of", ··· 9601 9672 9602 9673 [[package]] 9603 9674 name = "servo-media-webrtc" 9604 - version = "0.0.1" 9675 + version = "0.0.6" 9605 9676 dependencies = [ 9606 9677 "log", 9607 9678 "servo-media-streams", ··· 9610 9681 9611 9682 [[package]] 9612 9683 name = "servo-metrics" 9613 - version = "0.0.1" 9684 + version = "0.0.6" 9614 9685 dependencies = [ 9615 9686 "malloc_size_of_derive", 9616 9687 "servo-base", ··· 9624 9695 9625 9696 [[package]] 9626 9697 name = "servo-net" 9627 - version = "0.0.1" 9698 + version = "0.0.6" 9628 9699 dependencies = [ 9629 9700 "async-compression", 9630 9701 "async-recursion", ··· 9694 9765 9695 9766 [[package]] 9696 9767 name = "servo-net-traits" 9697 - version = "0.0.1" 9768 + version = "0.0.6" 9698 9769 dependencies = [ 9699 9770 "content-security-policy", 9700 9771 "cookie 0.18.1", ··· 9733 9804 9734 9805 [[package]] 9735 9806 name = "servo-paint" 9736 - version = "0.0.1" 9807 + version = "0.0.6" 9737 9808 dependencies = [ 9738 9809 "bitflags 2.11.0", 9739 9810 "crossbeam-channel", ··· 9774 9845 9775 9846 [[package]] 9776 9847 name = "servo-paint-api" 9777 - version = "0.0.1" 9848 + version = "0.0.6" 9778 9849 dependencies = [ 9779 9850 "bitflags 2.11.0", 9780 9851 "crossbeam-channel", ··· 9809 9880 9810 9881 [[package]] 9811 9882 name = "servo-pixels" 9812 - version = "0.0.1" 9883 + version = "0.0.6" 9813 9884 dependencies = [ 9814 9885 "criterion", 9815 9886 "euclid", ··· 9824 9895 9825 9896 [[package]] 9826 9897 name = "servo-profile" 9827 - version = "0.0.1" 9898 + version = "0.0.6" 9828 9899 dependencies = [ 9829 9900 "libc", 9830 9901 "log", ··· 9842 9913 9843 9914 [[package]] 9844 9915 name = "servo-profile-traits" 9845 - version = "0.0.1" 9916 + version = "0.0.6" 9846 9917 dependencies = [ 9847 9918 "crossbeam-channel", 9848 9919 "ipc-channel", ··· 9858 9929 9859 9930 [[package]] 9860 9931 name = "servo-script" 9861 - version = "0.0.1" 9932 + version = "0.0.6" 9862 9933 dependencies = [ 9863 9934 "accountable-refcell", 9864 9935 "aes 0.8.4", ··· 9897 9968 "hkdf", 9898 9969 "html5ever", 9899 9970 "http 1.4.0", 9971 + "icu_locid", 9900 9972 "indexmap", 9901 9973 "ipc-channel", 9902 9974 "itertools 0.14.0", ··· 9985 10057 "unicode-script", 9986 10058 "url", 9987 10059 "urlpattern", 9988 - "utf-8", 9989 10060 "uuid", 9990 10061 "webdriver", 9991 10062 "webrender_api", ··· 9997 10068 9998 10069 [[package]] 9999 10070 name = "servo-script-bindings" 10000 - version = "0.0.1" 10071 + version = "0.0.6" 10001 10072 dependencies = [ 10002 10073 "bitflags 2.11.0", 10003 10074 "crossbeam-channel", ··· 10036 10107 10037 10108 [[package]] 10038 10109 name = "servo-script-traits" 10039 - version = "0.0.1" 10110 + version = "0.0.6" 10040 10111 dependencies = [ 10041 10112 "accesskit", 10042 10113 "crossbeam-channel", ··· 10071 10142 10072 10143 [[package]] 10073 10144 name = "servo-storage" 10074 - version = "0.0.1" 10145 + version = "0.0.6" 10075 10146 dependencies = [ 10076 10147 "libc", 10077 10148 "log", ··· 10097 10168 10098 10169 [[package]] 10099 10170 name = "servo-storage-traits" 10100 - version = "0.0.1" 10171 + version = "0.0.6" 10101 10172 dependencies = [ 10102 10173 "malloc_size_of_derive", 10103 10174 "serde", ··· 10110 10181 10111 10182 [[package]] 10112 10183 name = "servo-timers" 10113 - version = "0.0.1" 10184 + version = "0.0.6" 10114 10185 dependencies = [ 10115 10186 "crossbeam-channel", 10116 10187 "malloc_size_of_derive", ··· 10119 10190 10120 10191 [[package]] 10121 10192 name = "servo-tracing" 10122 - version = "0.0.1" 10193 + version = "0.0.6" 10123 10194 dependencies = [ 10124 10195 "prettyplease", 10125 10196 "proc-macro2", ··· 10129 10200 10130 10201 [[package]] 10131 10202 name = "servo-url" 10132 - version = "0.0.1" 10203 + version = "0.0.6" 10133 10204 dependencies = [ 10134 10205 "encoding_rs", 10135 10206 "malloc_size_of_derive", ··· 10142 10213 10143 10214 [[package]] 10144 10215 name = "servo-webgl" 10145 - version = "0.0.1" 10216 + version = "0.0.6" 10146 10217 dependencies = [ 10147 10218 "bitflags 2.11.0", 10148 10219 "byteorder", ··· 10166 10237 10167 10238 [[package]] 10168 10239 name = "servo-webgpu" 10169 - version = "0.0.1" 10240 + version = "0.0.6" 10170 10241 dependencies = [ 10171 10242 "arrayvec", 10172 10243 "euclid", ··· 10184 10255 10185 10256 [[package]] 10186 10257 name = "servo-webgpu-traits" 10187 - version = "0.0.1" 10258 + version = "0.0.6" 10188 10259 dependencies = [ 10189 10260 "arrayvec", 10190 10261 "malloc_size_of_derive", ··· 10199 10270 10200 10271 [[package]] 10201 10272 name = "servo-webxr" 10202 - version = "0.0.1" 10273 + version = "0.0.6" 10203 10274 dependencies = [ 10204 10275 "crossbeam-channel", 10205 10276 "euclid", ··· 10217 10288 10218 10289 [[package]] 10219 10290 name = "servo-webxr-api" 10220 - version = "0.0.1" 10291 + version = "0.0.6" 10221 10292 dependencies = [ 10222 10293 "euclid", 10223 10294 "ipc-channel", ··· 10232 10303 10233 10304 [[package]] 10234 10305 name = "servo-xpath" 10235 - version = "0.0.1" 10306 + version = "0.0.6" 10236 10307 dependencies = [ 10237 10308 "log", 10238 10309 "malloc_size_of_derive", ··· 10719 10790 "derive_more", 10720 10791 "encoding_rs", 10721 10792 "euclid", 10722 - "icu_segmenter", 10793 + "icu_segmenter 2.1.2", 10723 10794 "indexmap", 10724 10795 "itertools 0.14.0", 10725 10796 "itoa", ··· 11003 11074 11004 11075 [[package]] 11005 11076 name = "tar" 11006 - version = "0.4.44" 11077 + version = "0.4.45" 11007 11078 source = "registry+https://github.com/rust-lang/crates.io-index" 11008 - checksum = "1d863878d212c87a19c1a610eb53bb01fe12951c0501cf5a0d65f724914a667a" 11079 + checksum = "22692a6476a21fa75fdfc11d452fda482af402c008cdbaf3476414e122040973" 11009 11080 dependencies = [ 11010 11081 "filetime", 11011 11082 "libc", ··· 11165 11236 "half", 11166 11237 "quick-error", 11167 11238 "weezl", 11168 - "zune-jpeg 0.5.13", 11239 + "zune-jpeg 0.5.14", 11169 11240 ] 11170 11241 11171 11242 [[package]] ··· 11265 11336 checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" 11266 11337 dependencies = [ 11267 11338 "displaydoc", 11339 + "serde_core", 11268 11340 "zerovec 0.11.5", 11269 11341 ] 11270 11342 ··· 12446 12518 "bytes", 12447 12519 "cookie 0.16.2", 12448 12520 "http 0.2.12", 12449 - "icu_segmenter", 12521 + "icu_segmenter 1.5.0", 12450 12522 "log", 12451 12523 "serde", 12452 12524 "serde_derive", ··· 13788 13860 13789 13861 [[package]] 13790 13862 name = "zerocopy" 13791 - version = "0.8.42" 13863 + version = "0.8.47" 13792 13864 source = "registry+https://github.com/rust-lang/crates.io-index" 13793 - checksum = "f2578b716f8a7a858b7f02d5bd870c14bf4ddbbcf3a4c05414ba6503640505e3" 13865 + checksum = "efbb2a062be311f2ba113ce66f697a4dc589f85e78a4aea276200804cea0ed87" 13794 13866 dependencies = [ 13795 13867 "zerocopy-derive", 13796 13868 ] 13797 13869 13798 13870 [[package]] 13799 13871 name = "zerocopy-derive" 13800 - version = "0.8.42" 13872 + version = "0.8.47" 13801 13873 source = "registry+https://github.com/rust-lang/crates.io-index" 13802 - checksum = "7e6cc098ea4d3bd6246687de65af3f920c430e236bee1e3bf2e441463f08a02f" 13874 + checksum = "0e8bc7269b54418e7aeeef514aa68f8690b8c0489a06b0136e5f57c4c5ccab89" 13803 13875 dependencies = [ 13804 13876 "proc-macro2", 13805 13877 "quote", ··· 13886 13958 source = "registry+https://github.com/rust-lang/crates.io-index" 13887 13959 checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" 13888 13960 dependencies = [ 13961 + "serde", 13889 13962 "yoke 0.8.1", 13890 13963 "zerofrom", 13891 13964 "zerovec-derive 0.11.2", ··· 13979 14052 13980 14053 [[package]] 13981 14054 name = "zune-jpeg" 13982 - version = "0.5.13" 14055 + version = "0.5.14" 13983 14056 source = "registry+https://github.com/rust-lang/crates.io-index" 13984 - checksum = "ec5f41c76397b7da451efd19915684f727d7e1d516384ca6bd0ec43ec94de23c" 14057 + checksum = "0b7a1c0af6e5d8d1363f4994b7a091ccf963d8b694f7da5b0b9cceb82da2c0a6" 13985 14058 dependencies = [ 13986 14059 "zune-core 0.5.1", 13987 14060 ]
+43 -42
Cargo.toml
··· 5 5 # Copied from the main Cargo.toml to allow 6 6 # workspace inheritance from component/ crates. 7 7 [workspace.package] 8 - version = "0.0.1" 8 + version = "0.0.6" 9 9 edition = "2024" 10 10 authors = ["The Servo Project Developers"] 11 11 license = "MPL-2.0" ··· 27 27 async-tungstenite = { version = "0.33", features = ["tokio-rustls-webpki-roots"] } 28 28 atomic_refcell = "0.1.13" 29 29 aws-lc-rs = { version = "1.15", default-features = false, features = ["aws-lc-sys"] } 30 - background_hang_monitor = { package = "servo-background-hang-monitor", version = "0.0.1", path = "source/components/background_hang_monitor" } 31 - background_hang_monitor_api = { package = "servo-background-hang-monitor-api", path = "source/components/shared/background_hang_monitor" } 32 30 backtrace = "0.3" 33 - base = { package = "servo-base", path = "source/components/shared/base" } 34 31 base64 = "0.22.1" 35 32 base64ct = { version = "1.8", features = ["alloc"] } 36 33 # bincode 1.3.3 is the last known good version of bincode 1. ··· 40 37 # before doing **any** bump to this dependency to rule out a supply chain attack. 41 38 bincode = "=1.3.3" 42 39 bitflags = "2.10" 43 - bluetooth = { package = "servo-bluetooth", version = "0.0.1", path = "source/components/bluetooth" } 44 - bluetooth_traits = { package = "servo-bluetooth-traits", path = "source/components/shared/bluetooth" } 45 40 blurmac = { version = "0.1.0", path = "source/third_party/blurmac" } 46 41 brotli = "8.0.2" 47 42 bytemuck = "1" 48 43 byteorder = "1.5" 49 - canvas = { package = "servo-canvas", version = "0.0.1", path = "source/components/canvas" } 44 + canvas = { package = "servo-canvas", version = "0.0.6", path = "source/components/canvas" } 50 45 canvas_traits = { package = "servo-canvas-traits", path = "source/components/shared/canvas" } 51 46 cbc = "0.1.2" 52 47 cfg-if = "1.0.4" ··· 54 49 chardetng = "0.1" 55 50 chrono = { version = "0.4", features = ["serde"] } 56 51 cipher = { version = "0.4.4", features = ["alloc"] } 57 - constellation = { package = "servo-constellation", version = "0.0.1", path = "source/components/constellation" } 52 + constellation = { package = "servo-constellation", version = "0.0.6", path = "source/components/constellation" } 58 53 constellation_traits = { package = "servo-constellation-traits", path = "source/components/shared/constellation" } 59 - content-security-policy = { version = "0.6.0", features = ["serde"] } 54 + content-security-policy = { version = "0.7.0", features = ["serde"] } 60 55 cookie = { package = "cookie", version = "0.18" } 61 56 crossbeam-channel = "0.5" 62 57 cssparser = { version = "0.36", features = ["serde"] } 63 58 ctr = "0.9.2" 64 59 data-url = "0.3" 65 - deny_public_fields = { package = "servo-deny-public-fields", version = "0.0.1", path = "source/components/deny_public_fields" } 60 + deny_public_fields = { package = "servo-deny-public-fields", version = "0.0.6", path = "source/components/deny_public_fields" } 66 61 der = { version = "0.7", features = ["alloc", "derive"] } 67 - devtools = { package = "servo-devtools", version = "0.0.1", path = "source/components/devtools" } 62 + devtools = { package = "servo-devtools", version = "0.0.6", path = "source/components/devtools" } 68 63 devtools_traits = { package = "servo-devtools-traits", path = "source/components/shared/devtools" } 69 64 digest = "0.10" 70 - dom_struct = { package = "servo-dom-struct", version = "0.0.1", path = "source/components/dom_struct" } 65 + dom_struct = { package = "servo-dom-struct", version = "0.0.6", path = "source/components/dom_struct" } 71 66 dpi = "0.1" 72 67 dwrote = "0.11.5" 73 68 ecdsa = "0.16" ··· 77 72 env_logger = "0.11" 78 73 euclid = "0.22" 79 74 flate2 = "1.1" 80 - fonts = { package = "servo-fonts", version = "0.0.1", path = "source/components/fonts" } 75 + fonts = { package = "servo-fonts", version = "0.0.6", path = "source/components/fonts" } 81 76 fonts_traits = { package = "servo-fonts-traits", path = "source/components/shared/fonts" } 82 77 freetype-sys = "0.20" 83 78 futures = { version = "0.3", default-features = false } ··· 121 116 ipc-channel = "0.21" 122 117 itertools = "0.14" 123 118 js = { package = "mozjs", version = "=0.15.5", default-features = false, features = ["libz-sys", "intl"] } 124 - jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.0.1", path = "source/components/jstraceable_derive" } 119 + jstraceable_derive = { package = "servo-jstraceable-derive", version = "0.0.6", path = "source/components/jstraceable_derive" } 125 120 keyboard-types = { version = "0.8.3", features = ["serde", "webdriver"] } 126 121 kurbo = { version = "0.12", features = ["euclid"] } 127 - layout = { package = "servo-layout", version = "0.0.1", path = "source/components/layout" } 122 + layout = { package = "servo-layout", version = "0.0.6", path = "source/components/layout" } 128 123 layout_api = { package = "servo-layout-api", path = "source/components/shared/layout" } 129 124 libc = "0.2" 130 125 log = "0.4.29" ··· 132 127 malloc_size_of = { package = "servo-malloc-size-of", path = "source/components/malloc_size_of" } 133 128 malloc_size_of_derive = "0.1" 134 129 markup5ever = "0.39" 135 - media = { package = "servo-media-thread", version = "0.0.1", path = "source/components/media/media-thread" } 130 + media = { package = "servo-media-thread", version = "0.0.6", path = "source/components/media/media-thread" } 136 131 memmap2 = "0.9.9" 137 - metrics = { package = "servo-metrics", version = "0.0.1", path = "source/components/metrics" } 132 + metrics = { package = "servo-metrics", version = "0.0.6", path = "source/components/metrics" } 138 133 mime = "0.3.13" 139 134 mime-multipart-hyper1 = "0.10.0" 140 135 mime_guess = "2.0.5" 141 136 ml-dsa = "0.0.4" 142 137 ml-kem = { version = "0.2", features = ["deterministic"] } 143 138 mozangle = "0.5.3" 144 - net = { package = "servo-net", version = "0.0.1", path = "source/components/net" } 139 + net = { package = "servo-net", version = "0.0.6", path = "source/components/net" } 145 140 net_traits = { package = "servo-net-traits", path = "source/components/shared/net" } 146 141 nix = "0.30" 147 142 nom = "8.0.0" ··· 156 151 objc2-core-graphics = "0.3.2" 157 152 objc2-core-text = "0.3.2" 158 153 openxr = "0.20" 159 - paint = { package = "servo-paint", version = "0.0.1", path = "source/components/paint" } 154 + paint = { package = "servo-paint", version = "0.0.6", path = "source/components/paint" } 160 155 paint_api = { package = "servo-paint-api", path = "source/components/shared/paint" } 161 156 p256 = { version = "0.13", features = ["ecdh"] } 162 157 p384 = { version = "0.13", features = ["ecdh"] } ··· 164 159 parking_lot = { version = "0.12", features = ["serde"] } 165 160 peniko = "0.5" 166 161 percent-encoding = "2.3" 167 - pixels = { package = "servo-pixels", version = "0.0.1", path = "source/components/pixels" } 162 + pixels = { package = "servo-pixels", version = "0.0.6", path = "source/components/pixels" } 168 163 pkcs8 = { version = "0.10", features = ["rand_core"] } 169 164 postcard = { version = "1.1.3", default-features = false, features = ["use-std"] } 170 165 proc-macro2 = "1" 171 - profile = { package = "servo-profile", version = "0.0.1", path = "source/components/profile" } 166 + profile = { package = "servo-profile", version = "0.0.6", path = "source/components/profile" } 172 167 profile_traits = { package = "servo-profile-traits", path = "source/components/shared/profile" } 173 168 quote = "1" 174 169 rand = "0.9" ··· 183 178 rustls-pki-types = "1.14" 184 179 rustls-platform-verifier = "0.6.2" 185 180 script = { package = "servo-script", path = "source/components/script" } 186 - script_bindings = { package = "servo-script-bindings", version = "0.0.1", path = "source/components/script_bindings" } 181 + script_bindings = { package = "servo-script-bindings", version = "0.0.6", path = "source/components/script_bindings" } 187 182 script_traits = { package = "servo-script-traits", path = "source/components/shared/script" } 188 183 sea-query = { version = "1.0.0-rc.30", default-features = false, features = ["backend-sqlite", "derive"] } 189 184 sea-query-rusqlite = { version = "0.8.0-rc.15" } ··· 193 188 serde_bytes = "0.11" 194 189 serde_core = "1.0.226" 195 190 serde_json = "1.0" 196 - servo = { version = "0.0.1", path = "source/components/servo", default-features = false } 197 - servo_config = { package = "servo-config", version = "0.0.1", path = "source/components/config" } 198 - servo_config_macro = { package = "servo-config-macro", version = "0.0.1", path = "source/components/config/macro" } 199 - servo_geometry = { package = "servo-geometry", version = "0.0.1", path = "source/components/geometry" } 191 + servo = { version = "0.0.6", path = "source/components/servo", default-features = false } 192 + servo-allocator = { version = "0.0.6", path = "source/components/allocator" } 193 + servo-background-hang-monitor = { version = "0.0.6", path = "source/components/background_hang_monitor" } 194 + servo-background-hang-monitor-api = { version = "0.0.6", path = "source/components/shared/background_hang_monitor" } 195 + servo-base = { version = "0.0.6", path = "source/components/shared/base" } 196 + servo-bluetooth = { version = "0.0.6", path = "source/components/bluetooth" } 197 + servo-bluetooth-traits = { version = "0.0.6", path = "source/components/shared/bluetooth" } 198 + servo-config = { package = "servo-config", version = "0.0.6", path = "source/components/config" } 199 + servo-config-macro = { package = "servo-config-macro", version = "0.0.6", path = "source/components/config/macro" } 200 + servo-geometry = { package = "servo-geometry", version = "0.0.6", path = "source/components/geometry" } 200 201 servo-media = { path = "source/components/media/servo-media" } 201 - servo-media-audio = { version = "0.0.1", path = "source/components/media/audio" } 202 - servo-media-derive = { version = "0.0.1", path = "source/components/media/servo-media-derive" } 202 + servo-media-audio = { version = "0.0.6", path = "source/components/media/audio" } 203 + servo-media-derive = { version = "0.0.6", path = "source/components/media/servo-media-derive" } 203 204 servo-media-dummy = { path = "source/components/media/backends/dummy" } 204 205 servo-media-gstreamer = { path = "source/components/media/backends/gstreamer" } 205 - servo-media-gstreamer-render = { version = "0.0.1", path = "source/components/media/backends/gstreamer/render" } 206 - servo-media-gstreamer-render-android = { version = "0.0.1", path = "source/components/media/backends/gstreamer/render-android" } 207 - servo-media-gstreamer-render-unix = { version = "0.0.1", path = "source/components/media/backends/gstreamer/render-unix" } 208 - servo-media-player = { version = "0.0.1", path = "source/components/media/player" } 209 - servo-media-streams = { version = "0.0.1", path = "source/components/media/streams" } 210 - servo-media-traits = { version = "0.0.1", path = "source/components/media/traits" } 211 - servo-media-webrtc = { version = "0.0.1", path = "source/components/media/webrtc" } 212 - servo_allocator = { package = "servo-allocator", version = "0.0.1", path = "source/components/allocator" } 206 + servo-media-gstreamer-render = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render" } 207 + servo-media-gstreamer-render-android = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render-android" } 208 + servo-media-gstreamer-render-unix = { version = "0.0.6", path = "source/components/media/backends/gstreamer/render-unix" } 209 + servo-media-player = { version = "0.0.6", path = "source/components/media/player" } 210 + servo-media-streams = { version = "0.0.6", path = "source/components/media/streams" } 211 + servo-media-traits = { version = "0.0.6", path = "source/components/media/traits" } 212 + servo-media-webrtc = { version = "0.0.6", path = "source/components/media/webrtc" } 213 + servo_allocator = { package = "servo-allocator", version = "0.0.6", path = "source/components/allocator" } 213 214 servo-tracing = { path = "source/components/servo_tracing" } 214 215 servo_arc = { git = "https://github.com/servo/stylo", rev = "f9d940629a7fd0389cc4ecb58c12927b09286478" } 215 - servo-url = { version = "0.0.1", path = "source/components/url" } 216 + servo-url = { version = "0.0.6", path = "source/components/url" } 216 217 sha1 = "0.10" 217 218 sha2 = "0.10" 218 219 sha3 = "0.10" 219 220 skrifa = "0.37.0" 220 221 smallvec = { version = "1.15", features = ["serde", "union"] } 221 - storage = { package = "servo-storage", version = "0.0.1", path = "source/components/storage" } 222 + storage = { package = "servo-storage", version = "0.0.6", path = "source/components/storage" } 222 223 storage_traits = { package = "servo-storage-traits", path = "source/components/shared/storage" } 223 224 string_cache = "0.9" 224 225 strum = { version = "0.27", features = ["derive"] } ··· 236 237 tendril = { version = "0.5", features = ["encoding_rs"] } 237 238 tikv-jemalloc-sys = "0.6.1" 238 239 tikv-jemallocator = "0.6.1" 239 - timers = { package = "servo-timers", version = "0.0.1", path = "source/components/timers" } 240 + timers = { package = "servo-timers", version = "0.0.6", path = "source/components/timers" } 240 241 time = { package = "time", version = "0.3", features = ["large-dates", "local-offset", "serde"] } 241 242 tokio = "1" 242 243 tokio-rustls = { version = "0.26", default-features = false, features = ["logging"] } ··· 259 260 vello = "0.6" 260 261 vello_cpu = "0.0.4" 261 262 webdriver = "0.53.0" 262 - webgl = { package = "servo-webgl", version = "0.0.1", path = "source/components/webgl", default-features = false } 263 - webgpu = { package = "servo-webgpu", version = "0.0.1", path = "source/components/webgpu" } 263 + webgl = { package = "servo-webgl", version = "0.0.6", path = "source/components/webgl", default-features = false } 264 + webgpu = { package = "servo-webgpu", version = "0.0.6", path = "source/components/webgpu" } 264 265 webgpu_traits = { package = "servo-webgpu-traits", path = "source/components/shared/webgpu" } 265 266 webpki-roots = "1.0" 266 267 webrender = { version = "0.68", features = ["capture"] } 267 268 webrender_api = "0.68" 268 - webxr = { package = "servo-webxr", version = "0.0.1", path = "source/components/webxr" } 269 + webxr = { package = "servo-webxr", version = "0.0.6", path = "source/components/webxr" } 269 270 webxr-api = { package = "servo-webxr-api", path = "source/components/shared/webxr" } 270 271 wgpu-core = "26" 271 272 wgpu-types = "26"
+1 -1
forkme.lock
··· 1 - 15a400b42a1f0e523fc7da52ce03910ddadf5e7a 1 + f78ca1cef4517e96e6a5423c64736c746c164432
+9 -9
patches/components/constellation/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -30,6 +30,7 @@ 4 - background_hang_monitor_api = { workspace = true } 3 + @@ -27,6 +27,7 @@ 4 + 5 + [dependencies] 5 6 backtrace = { workspace = true } 6 - base = { workspace = true } 7 7 +beaver-p2p = { path = "../../../crates/beaver_p2p" } 8 - bluetooth_traits = { workspace = true, optional = true } 9 8 canvas = { workspace = true } 10 9 canvas_traits = { workspace = true } 11 - @@ -41,6 +42,8 @@ 10 + constellation_traits = { workspace = true } 11 + @@ -37,6 +38,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 - @@ -49,11 +52,14 @@ 20 + @@ -45,11 +48,14 @@ 21 21 net_traits = { workspace = true } 22 22 paint_api = { workspace = true } 23 23 parking_lot = { workspace = true } ··· 29 29 script_traits = { workspace = true } 30 30 serde = { workspace = true } 31 31 +serde_json = { workspace = true } 32 - servo-tracing = { workspace = true } 33 - servo_config = { workspace = true } 34 - servo-url = { workspace = true } 32 + servo-background-hang-monitor = { workspace = true } 33 + servo-background-hang-monitor-api = { workspace = true } 34 + servo-base = { workspace = true } 35 35 @@ -60,6 +66,7 @@ 36 36 storage_traits = { workspace = true } 37 37 stylo = { workspace = true }
+3 -3
patches/components/constellation/broadcastchannel.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -7,7 +7,7 @@ 4 - use base::id::BroadcastChannelRouterId; 3 + @@ -6,7 +6,7 @@ 4 + 5 5 use constellation_traits::BroadcastChannelMsg; 6 6 use ipc_channel::ipc::IpcSender; 7 7 -use log::warn; 8 8 +use log::{debug, warn}; 9 9 use rustc_hash::FxHashMap; 10 + use servo_base::id::BroadcastChannelRouterId; 10 11 use servo_url::ImmutableOrigin; 11 - 12 12 @@ -127,4 +127,53 @@ 13 13 ); 14 14 }
+12 -16
patches/components/constellation/constellation.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -116,6 +116,7 @@ 3 + @@ -104,6 +104,7 @@ 4 4 use canvas_traits::webgl::WebGLThreads; 5 5 use constellation_traits::{ 6 6 AuxiliaryWebViewCreationRequest, AuxiliaryWebViewCreationResponse, DocumentState, ··· 8 8 EmbedderToConstellationMessage, IFrameLoadInfo, IFrameLoadInfoWithData, IFrameSizeMsg, Job, 9 9 LoadData, LogEntry, MessagePortMsg, NavigationHistoryBehavior, PaintMetricEvent, 10 10 PortMessageTask, PortTransferInfo, SWManagerMsg, SWManagerSenders, ScreenshotReadinessResponse, 11 - @@ -131,12 +132,12 @@ 11 + @@ -119,12 +120,12 @@ 12 12 use embedder_traits::resources::{self, Resource}; 13 13 use embedder_traits::user_contents::{UserContentManagerId, UserContents}; 14 14 use embedder_traits::{ ··· 322 322 }, 323 323 #[cfg(feature = "webgpu")] 324 324 ScriptToConstellationMessage::RequestAdapter(response_sender, options, ids) => self 325 - @@ -2045,6 +2178,395 @@ 325 + @@ -2045,6 +2178,391 @@ 326 326 let _ = event_loop.send(ScriptThreadMessage::TriggerGarbageCollection); 327 327 } 328 328 }, ··· 595 595 + debug!( 596 596 + "PortOffer received: stream_id={stream_id}, target_url={target_url}, from={from}" 597 597 + ); 598 - + let Ok(remote_port_id) = 599 - + postcard::from_bytes::<base::id::MessagePortId>(port_id) 598 + + let Ok(remote_port_id) = postcard::from_bytes::<MessagePortId>(port_id) 600 599 + else { 601 600 + warn!("Failed to deserialize port_id in PortOffer"); 602 601 + return; ··· 652 651 + ref port_id, 653 652 + ref task_data, 654 653 + } => { 655 - + let Ok(remote_port_id) = 656 - + postcard::from_bytes::<base::id::MessagePortId>(port_id) 654 + + let Ok(remote_port_id) = postcard::from_bytes::<MessagePortId>(port_id) 657 655 + else { 658 656 + warn!("Failed to deserialize port_id in PortMessage"); 659 657 + return; ··· 675 673 + } 676 674 + }, 677 675 + P2pMessage::PortClose { ref port_id } => { 678 - + if let Ok(port_id) = 679 - + postcard::from_bytes::<base::id::MessagePortId>(port_id) 680 - + { 676 + + if let Ok(port_id) = postcard::from_bytes::<MessagePortId>(port_id) { 681 677 + self.message_ports.remove(&port_id); 682 678 + } 683 679 + }, ··· 718 714 } 719 715 } 720 716 721 - @@ -2364,6 +2886,29 @@ 717 + @@ -2364,6 +2882,29 @@ 722 718 TransferState::TransferInProgress(queue) => queue.push_back(task), 723 719 TransferState::CompletionFailed(queue) => queue.push_back(task), 724 720 TransferState::CompletionRequested(_, queue) => queue.push_back(task), ··· 748 744 } 749 745 } 750 746 751 - @@ -3243,6 +3788,13 @@ 747 + @@ -3243,6 +3784,13 @@ 752 748 /// <https://html.spec.whatwg.org/multipage/#destroy-a-top-level-traversable> 753 749 fn handle_close_top_level_browsing_context(&mut self, webview_id: WebViewId) { 754 750 debug!("{webview_id}: Closing"); ··· 762 758 let browsing_context_id = BrowsingContextId::from(webview_id); 763 759 // Step 5. Remove traversable from the user agent's top-level traversable set. 764 760 let browsing_context = 765 - @@ -3519,8 +4071,27 @@ 761 + @@ -3519,8 +4067,27 @@ 766 762 opener_webview_id, 767 763 opener_pipeline_id, 768 764 response_sender, ··· 790 786 let Some((webview_id_sender, webview_id_receiver)) = generic_channel::channel() else { 791 787 warn!("Failed to create channel"); 792 788 let _ = response_sender.send(None); 793 - @@ -3619,6 +4190,361 @@ 789 + @@ -3619,6 +4186,361 @@ 794 790 }); 795 791 } 796 792 ··· 1152 1148 #[servo_tracing::instrument(skip_all)] 1153 1149 fn handle_refresh_cursor(&self, pipeline_id: PipelineId) { 1154 1150 let Some(pipeline) = self.pipelines.get(&pipeline_id) else { 1155 - @@ -4744,7 +5670,7 @@ 1151 + @@ -4744,7 +5666,7 @@ 1156 1152 } 1157 1153 1158 1154 #[servo_tracing::instrument(skip_all)] ··· 1161 1157 // Send a flat projection of the history to embedder. 1162 1158 // The final vector is a concatenation of the URLs of the past 1163 1159 // entries, the current entry and the future entries. 1164 - @@ -4847,9 +5773,23 @@ 1160 + @@ -4847,9 +5769,23 @@ 1165 1161 ); 1166 1162 self.embedder_proxy.send(EmbedderMsg::HistoryChanged( 1167 1163 webview_id,
+1 -1
patches/components/constellation/pairing.rs.patch
··· 13 13 +use std::path::PathBuf; 14 14 +use std::sync::Arc; 15 15 + 16 - +use base::generic_channel::GenericCallback; 17 16 +use beaver_p2p::{EndpointStatus, PairingManager, PeerEvent}; 18 17 +use constellation_traits::{LocalPeerInfo, PairingEvent, PeerInfo, PeerStatus}; 19 18 +use iroh::EndpointId; 20 19 +use iroh::address_lookup::DiscoveryEvent; 21 20 +use log::{debug, error, info, warn}; 22 21 +use serde::{Deserialize, Serialize}; 22 + +use servo_base::generic_channel::GenericCallback; 23 23 +use tokio::sync::Mutex; 24 24 + 25 25 +/// Typed messages exchanged between paired P2P endpoints.
+1 -1
patches/components/layout/display_list/mod.rs.patch
··· 110 110 webrender_display_list_builder.end().1 111 111 } 112 112 113 - @@ -279,12 +325,42 @@ 113 + @@ -283,12 +329,42 @@ 114 114 let mut scroll_tree = std::mem::take(&mut self.paint_info.scroll_tree); 115 115 let mut mapping = Vec::with_capacity(scroll_tree.nodes.len()); 116 116
+2 -2
patches/components/paint/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -39,6 +39,7 @@ 4 - media = { workspace = true } 3 + @@ -38,6 +38,7 @@ 5 4 malloc_size_of = { workspace = true } 5 + media = { workspace = true } 6 6 paint_api = { workspace = true } 7 7 +servo-pixels = { path = "../pixels" } 8 8 profile_traits = { workspace = true }
+16 -29
patches/components/paint/paint.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -9,7 +9,7 @@ 4 - use std::rc::Rc; 5 - use std::time::{SystemTime, UNIX_EPOCH}; 6 - 7 - -use base::generic_channel::{self, GenericSender, RoutedReceiver}; 8 - +use base::generic_channel::{self, GenericCallback, GenericSender, RoutedReceiver}; 9 - use base::id::{PainterId, PipelineId, WebViewId}; 10 - use bitflags::bitflags; 11 - use canvas_traits::webgl::{WebGLContextId, WebGLThreads}; 12 - @@ -17,7 +17,8 @@ 3 + @@ -15,7 +15,8 @@ 13 4 use crossbeam_channel::Sender; 14 5 use dpi::PhysicalSize; 15 6 use embedder_traits::{ ··· 19 10 Scroll, ShutdownState, ViewportDetails, WebViewPoint, WebViewRect, 20 11 }; 21 12 use euclid::{Scale, Size2D}; 13 + @@ -32,7 +33,7 @@ 14 + }; 15 + use profile_traits::path; 16 + use profile_traits::time::{self as profile_time}; 17 + -use servo_base::generic_channel::{self, GenericSender, RoutedReceiver}; 18 + +use servo_base::generic_channel::{self, GenericCallback, GenericSender, RoutedReceiver}; 19 + use servo_base::id::{PainterId, PipelineId, WebViewId}; 20 + use servo_config::pref; 21 + use servo_geometry::DeviceIndependentPixel; 22 22 @@ -44,7 +45,7 @@ 23 23 #[cfg(feature = "webgpu")] 24 24 use webgpu::canvas_context::WebGpuExternalImageMap; ··· 294 294 /// Handle messages sent to `Paint` during the shutdown process. In general, 295 295 /// the things `Paint` can do in this state are limited. It's very important to 296 296 /// answer any synchronous messages though as other threads might be waiting on the 297 - @@ -747,10 +986,37 @@ 297 + @@ -747,8 +986,35 @@ 298 298 #[cfg(feature = "webxr")] 299 299 self.webxr_main_thread.borrow_mut().run_one_frame(); 300 300 ··· 304 304 - painter.borrow_mut().perform_updates(); 305 305 + let unconsumed = painter.borrow_mut().perform_updates(); 306 306 + all_unconsumed_scrolls.extend(unconsumed); 307 - } 308 - 307 + + } 308 + + 309 309 + // Forward unconsumed scroll events to parent webviews. 310 310 + for (embedded_webview_id, scroll_event) in all_unconsumed_scrolls { 311 311 + // Find the parent webview for this embedded webview ··· 328 328 + painter.try_scroll_any_and_send_to_webrender(parent_id, scroll_event.scroll); 329 329 + } 330 330 + } 331 - + } 332 - + 331 + } 332 + 333 333 self.shutdown_state() != ShutdownState::FinishedShuttingDown 334 - } 335 - 336 - @@ -790,6 +1056,10 @@ 337 - if self.shutdown_state() != ShutdownState::NotShuttingDown { 338 - return; 339 - } 340 - + 341 - + // Always send the event to the parent webview. DOM hit testing in the script 342 - + // thread will determine if the event should be forwarded to an embedded webview. 343 - + // This respects the parent document's stacking context and z-index rules. 344 - self.painter_mut(webview_id.into()) 345 - .notify_input_event(webview_id, event); 346 - } 347 - @@ -798,6 +1068,53 @@ 334 + @@ -800,6 +1066,53 @@ 348 335 if self.shutdown_state() != ShutdownState::NotShuttingDown { 349 336 return; 350 337 }
+3 -54
patches/components/paint/painter.rs.patch
··· 163 163 pub(crate) fn set_throttled( 164 164 &mut self, 165 165 webview_id: WebViewId, 166 - @@ -1208,15 +1271,23 @@ 166 + @@ -1211,15 +1274,23 @@ 167 167 webview: Box<dyn WebViewTrait>, 168 168 viewport_details: ViewportDetails, 169 169 ) { ··· 191 191 } 192 192 193 193 pub(crate) fn remove_webview(&mut self, webview_id: WebViewId) { 194 - @@ -1303,28 +1374,29 @@ 195 - } 196 - 197 - pub(crate) fn notify_input_event(&mut self, webview_id: WebViewId, event: InputEventAndId) { 198 - - if let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) { 199 - - match &event.event { 200 - - InputEvent::MouseMove(event) => { 201 - - // We only track the last mouse move position for non-touch events. 202 - - if !event.is_compatibility_event_for_touch { 203 - - let event_point = event 204 - - .point 205 - - .as_device_point(webview_renderer.device_pixels_per_page_pixel()); 206 - - self.last_mouse_move_position = Some(event_point); 207 - - } 208 - - }, 209 - - InputEvent::MouseLeftViewport(_) => { 210 - - self.last_mouse_move_position = None; 211 - - }, 212 - - _ => { 213 - - // Disable LCP calculation on any other input event except mouse moves. 214 - - self.lcp_calculator.disable_for_webview(webview_id); 215 - - }, 216 - - } 217 - - 218 - - webview_renderer.notify_input_event(&self.webrender_api, &self.needs_repaint, event); 219 - + let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else { 220 - + return; 221 - + }; 222 - + match &event.event { 223 - + InputEvent::MouseMove(event) => { 224 - + // We only track the last mouse move position for non-touch events. 225 - + if !event.is_compatibility_event_for_touch { 226 - + let event_point = event 227 - + .point 228 - + .as_device_point(webview_renderer.device_pixels_per_page_pixel()); 229 - + self.last_mouse_move_position = Some(event_point); 230 - + } 231 - + }, 232 - + InputEvent::MouseLeftViewport(_) => { 233 - + self.last_mouse_move_position = None; 234 - + }, 235 - + _ => { 236 - + // Disable LCP calculation on any other input event except mouse moves. 237 - + self.lcp_calculator.disable_for_webview(webview_id); 238 - + }, 239 - } 240 - + 241 - + webview_renderer.notify_input_event(&self.webrender_api, &self.needs_repaint, event); 242 - } 243 - 244 - pub(crate) fn notify_scroll_event( 245 - @@ -1348,6 +1420,38 @@ 194 + @@ -1357,6 +1428,38 @@ 246 195 self.lcp_calculator.enabled_for_webview(webview_id) 247 196 } 248 197 ··· 281 230 pub(crate) fn adjust_pinch_zoom( 282 231 &mut self, 283 232 webview_id: WebViewId, 284 - @@ -1401,7 +1505,6 @@ 233 + @@ -1410,7 +1513,6 @@ 285 234 result: InputEventResult, 286 235 ) { 287 236 let Some(webview_renderer) = self.webview_renderers.get_mut(&webview_id) else {
+3 -3
patches/components/paint/web_content_animation.rs.patch
··· 8 8 use std::rc::Rc; 9 9 use std::sync::Arc; 10 10 use std::sync::atomic::{AtomicBool, Ordering}; 11 - @@ -10,7 +11,6 @@ 11 + @@ -9,7 +10,6 @@ 12 + use std::time::Duration; 12 13 13 - use base::id::WebViewId; 14 14 use embedder_traits::EventLoopWaker; 15 15 -use rustc_hash::FxHashMap; 16 + use servo_base::id::WebViewId; 16 17 use servo_config::prefs; 17 18 use webrender_api::{ColorF, PropertyBindingKey, PropertyValue}; 18 - 19 19 @@ -74,7 +74,7 @@ 20 20 21 21 pub(crate) fn update(
+10 -10
patches/components/paint/webview_renderer.rs.patch
··· 86 86 }, 87 87 None => None, 88 88 }; 89 - @@ -722,6 +747,88 @@ 89 + @@ -740,6 +765,88 @@ 90 90 self.on_scroll_window_event(scroll, point); 91 91 } 92 92 ··· 175 175 fn on_scroll_window_event(&mut self, scroll: Scroll, cursor: DevicePoint) { 176 176 self.pending_scroll_zoom_events 177 177 .push(ScrollZoomEvent::Scroll(ScrollEvent { 178 - @@ -730,18 +837,25 @@ 178 + @@ -748,18 +855,25 @@ 179 179 })); 180 180 } 181 181 ··· 206 206 } 207 207 208 208 // Batch up all scroll events and changes to pinch zoom into a single change, or 209 - @@ -787,15 +901,24 @@ 209 + @@ -805,15 +919,24 @@ 210 210 } 211 211 } 212 212 ··· 237 237 238 238 let scroll_result = combined_scroll_event.and_then(|combined_event| { 239 239 self.scroll_node_at_device_point( 240 - @@ -804,6 +927,21 @@ 240 + @@ -822,6 +945,21 @@ 241 241 combined_event.scroll, 242 242 ) 243 243 }); ··· 259 259 if let Some(ref scroll_result) = scroll_result { 260 260 self.send_scroll_positions_to_layout_for_pipeline( 261 261 scroll_result.hit_test_result.pipeline_id, 262 - @@ -819,7 +957,11 @@ 262 + @@ -837,7 +975,11 @@ 263 263 self.send_pinch_zoom_infos_to_script(); 264 264 } 265 265 ··· 272 272 } 273 273 274 274 /// Perform a hit test at the given [`DevicePoint`] and apply the [`Scroll`] 275 - @@ -826,7 +968,7 @@ 275 + @@ -844,7 +986,7 @@ 276 276 /// scrolling to the applicable scroll node under that point. If a scroll was 277 277 /// performed, returns the hit test result contains [`PipelineId`] of the node 278 278 /// scrolled, the id, and the final scroll delta. ··· 281 281 &mut self, 282 282 render_api: &RenderApi, 283 283 cursor: DevicePoint, 284 - @@ -854,7 +996,10 @@ 284 + @@ -872,7 +1014,10 @@ 285 285 // its ancestor pipelines. 286 286 let mut previous_pipeline_id = None; 287 287 for hit_test_result in hit_test_results { ··· 293 293 if previous_pipeline_id.replace(hit_test_result.pipeline_id) != 294 294 Some(hit_test_result.pipeline_id) 295 295 { 296 - @@ -881,7 +1026,11 @@ 296 + @@ -899,7 +1044,11 @@ 297 297 } 298 298 } 299 299 } ··· 306 306 } 307 307 308 308 /// Scroll the viewport (root pipeline, root scroll node) of this WebView, but first 309 - @@ -1020,20 +1169,45 @@ 309 + @@ -1038,20 +1187,45 @@ 310 310 } 311 311 312 312 fn send_window_size_message(&self) { ··· 364 364 } 365 365 366 366 /// Set the `hidpi_scale_factor` for this renderer, returning `true` if the value actually changed. 367 - @@ -1097,8 +1271,21 @@ 367 + @@ -1115,8 +1289,21 @@ 368 368 if let Some(wheel_event) = self.pending_wheel_events.remove(&id) { 369 369 if !result.contains(InputEventResult::DefaultPrevented) { 370 370 // A scroll delta for a wheel event is the inverse of the wheel delta.
+22 -19
patches/components/script/dom/document.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -14,12 +14,14 @@ 4 - use std::time::Duration; 3 + @@ -15,7 +15,9 @@ 5 4 6 - use base::cross_process_instant::CrossProcessInstant; 7 - -use base::generic_channel::GenericSend; 8 - +use base::generic_channel::{GenericSend, GenericSharedMemory}; 9 - use base::id::WebViewId; 10 - use base::{Epoch, generic_channel}; 11 5 use bitflags::bitflags; 12 6 use chrono::Local; 13 7 -use constellation_traits::{NavigationHistoryBehavior, ScriptToConstellationMessage}; ··· 17 11 use content_security_policy::sandboxing_directive::SandboxingFlagSet; 18 12 use content_security_policy::{CspList, Policy as CspPolicy, PolicyDisposition}; 19 13 use cookie::Cookie; 20 - @@ -31,6 +33,7 @@ 14 + @@ -27,6 +29,7 @@ 21 15 Image, LoadStatus, 22 16 }; 23 17 use encoding_rs::{Encoding, UTF_8}; ··· 25 19 use fonts::WebFontDocumentContext; 26 20 use html5ever::{LocalName, Namespace, QualName, local_name, ns}; 27 21 use hyper_serde::Serde; 28 - @@ -622,6 +625,9 @@ 22 + @@ -55,7 +58,7 @@ 23 + use script_traits::{DocumentActivity, ProgressiveWebMetricType}; 24 + use servo_arc::Arc; 25 + use servo_base::cross_process_instant::CrossProcessInstant; 26 + -use servo_base::generic_channel::GenericSend; 27 + +use servo_base::generic_channel::{GenericSend, GenericSharedMemory}; 28 + use servo_base::id::WebViewId; 29 + use servo_base::{Epoch, generic_channel}; 30 + use servo_config::pref; 31 + @@ -635,6 +638,9 @@ 29 32 #[no_trace] 30 33 favicon: RefCell<Option<Image>>, 31 34 ··· 35 38 /// All websockets created that are associated with this document. 36 39 websockets: DOMTracker<WebSocket>, 37 40 38 - @@ -869,6 +875,12 @@ 41 + @@ -882,6 +888,12 @@ 39 42 40 43 // Set the document's activity level, reflow if necessary, and suspend or resume timers. 41 44 self.activity.set(activity); ··· 48 51 let media = ServoMedia::get(); 49 52 let pipeline_id = self.window().pipeline_id(); 50 53 let client_context_id = 51 - @@ -882,6 +894,7 @@ 54 + @@ -895,6 +907,7 @@ 52 55 53 56 self.title_changed(); 54 57 self.notify_embedder_favicon(); ··· 56 59 self.dirty_all_nodes(); 57 60 self.window().resume(CanGc::from_cx(cx)); 58 61 media.resume(&client_context_id); 59 - @@ -1288,6 +1301,9 @@ 62 + @@ -1307,6 +1320,9 @@ 60 63 LoadStatus::Started, 61 64 )); 62 65 self.send_to_embedder(EmbedderMsg::Status(self.webview_id(), None)); ··· 66 69 } 67 70 }, 68 71 DocumentReadyState::Complete => { 69 - @@ -1296,6 +1312,9 @@ 72 + @@ -1315,6 +1331,9 @@ 70 73 self.webview_id(), 71 74 LoadStatus::Complete, 72 75 )); ··· 76 79 } 77 80 update_with_current_instant(&self.dom_complete); 78 81 }, 79 - @@ -1702,7 +1721,13 @@ 82 + @@ -1721,7 +1740,13 @@ 80 83 let window = self.window(); 81 84 if window.is_top_level() { 82 85 let title = self.title().map(String::from); ··· 91 94 } 92 95 } 93 96 94 - @@ -1711,6 +1736,18 @@ 97 + @@ -1730,6 +1755,18 @@ 95 98 window.send_to_embedder(msg); 96 99 } 97 100 ··· 110 113 pub(crate) fn dirty_all_nodes(&self) { 111 114 let root = match self.GetDocumentElement() { 112 115 Some(root) => root, 113 - @@ -3287,9 +3324,59 @@ 116 + @@ -3315,9 +3352,59 @@ 114 117 current_rendering_epoch, 115 118 ); 116 119 ··· 170 173 pub(crate) fn handle_no_longer_waiting_on_asynchronous_image_updates(&self) { 171 174 self.waiting_on_canvas_image_updates.set(false); 172 175 } 173 - @@ -4032,6 +4119,7 @@ 176 + @@ -4060,6 +4147,7 @@ 174 177 active_sandboxing_flag_set: Cell::new(SandboxingFlagSet::empty()), 175 178 creation_sandboxing_flag_set: Cell::new(creation_sandboxing_flag_set), 176 179 favicon: RefCell::new(None), ··· 178 181 websockets: DOMTracker::new(), 179 182 details_name_groups: Default::default(), 180 183 protocol_handler_automation_mode: Default::default(), 181 - @@ -5136,6 +5224,36 @@ 184 + @@ -5174,6 +5262,36 @@ 182 185 183 186 pub(crate) fn notify_embedder_favicon(&self) { 184 187 if let Some(ref image) = *self.favicon.borrow() { ··· 215 218 self.send_to_embedder(EmbedderMsg::NewFavicon(self.webview_id(), image.clone())); 216 219 } 217 220 } 218 - @@ -5195,6 +5313,20 @@ 221 + @@ -5233,6 +5351,20 @@ 219 222 pub(crate) fn set_css_styling_flag(&self, value: bool) { 220 223 self.css_styling_flag.set(value) 221 224 }
+45 -46
patches/components/script/dom/document_embedder_controls.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -5,12 +5,15 @@ 3 + @@ -4,11 +4,14 @@ 4 + 4 5 use std::cell::Cell; 5 6 6 - use base::Epoch; 7 - -use base::generic_channel::GenericSend; 8 7 -use constellation_traits::{LoadData, NavigationHistoryBehavior}; 9 - +use base::generic_channel::{GenericSend, GenericSender}; 10 8 +use constellation_traits::{ 11 9 + EmbeddedWebViewEventType, LoadData, NavigationHistoryBehavior, ScriptToConstellationMessage, 12 10 +}; ··· 20 18 + PermissionFeature, PermissionPromptRequest, SimpleDialogRequest, 21 19 }; 22 20 use euclid::{Point2D, Rect, Size2D}; 23 - use ipc_channel::router::ROUTER; 24 - @@ -36,8 +39,8 @@ 21 + use js::context::JSContext; 22 + @@ -23,7 +26,7 @@ 23 + use script_bindings::root::{Dom, DomRoot}; 24 + use script_bindings::script_runtime::CanGc; 25 + use servo_base::Epoch; 26 + -use servo_base::generic_channel::GenericSend; 27 + +use servo_base::generic_channel::{GenericSend, GenericSender}; 28 + use servo_url::ServoUrl; 29 + use webrender_api::units::{DeviceIntRect, DevicePoint}; 30 + 31 + @@ -35,8 +38,8 @@ 25 32 use crate::dom::node::{Node, NodeTraits, ShadowIncluding}; 26 33 use crate::dom::textcontrol::TextControlElement; 27 34 use crate::dom::types::{ ··· 32 39 }; 33 40 use crate::messaging::MainThreadScriptMsg; 34 41 35 - @@ -48,6 +51,7 @@ 42 + @@ -47,6 +50,7 @@ 36 43 FileInput(DomRoot<HTMLInputElement>), 37 44 Ime(DomRoot<HTMLElement>), 38 45 ContextMenu(ContextMenuNodes), ··· 40 47 } 41 48 42 49 impl ControlElement { 43 - @@ -58,6 +62,7 @@ 50 + @@ -57,6 +61,7 @@ 44 51 ControlElement::FileInput(element) => element.upcast::<Node>(), 45 52 ControlElement::Ime(element) => element.upcast::<Node>(), 46 53 ControlElement::ContextMenu(context_menu_nodes) => &context_menu_nodes.node, ··· 48 55 } 49 56 } 50 57 } 51 - @@ -130,39 +135,77 @@ 58 + @@ -129,36 +134,74 @@ 52 59 EmbedderControlRequest::SelectElement(..) | 53 60 EmbedderControlRequest::ColorPicker(..) | 54 61 EmbedderControlRequest::InputMethod(..) | ··· 82 89 + } 83 90 + }, 84 91 EmbedderControlRequest::FilePicker(file_picker_request) => { 85 - - let (sender, receiver) = profile_traits::ipc::channel( 86 - - self.window.as_global_scope().time_profiler_chan().clone(), 87 - - ) 88 - - .expect("Error initializing channel"); 89 92 - let main_thread_sender = self.window.main_thread_script_chan().clone(); 90 - - ROUTER.add_typed_route( 91 - - receiver.to_ipc_receiver(), 92 - - Box::new(move |result| { 93 + - let callback = profile_traits::generic_callback::GenericCallback::new( 94 + - self.window.as_global_scope().time_profiler_chan().clone(), 95 + - move |result| { 93 96 - let Ok(embedder_control_response) = result else { 94 97 - return; 95 98 - }; ··· 107 110 - ) { 108 111 - warn!("Could not send FileManager response to main thread: {error}") 109 112 - } 110 - - }), 111 - - ); 113 + - }, 114 + - ) 115 + - .expect("Could not create callback"); 112 116 - self.window 113 117 - .as_global_scope() 114 118 - .resource_threads() 115 119 - .sender() 116 120 - .send(CoreResourceMsg::ToFileManager( 117 - - FileManagerThreadMsg::SelectFiles(id, file_picker_request, sender), 121 + - FileManagerThreadMsg::SelectFiles(id, file_picker_request, callback), 118 122 - )) 119 123 - .unwrap(); 120 124 + rect, ··· 124 128 + ); 125 129 + } else { 126 130 + // For non-embedded webviews, use the FileManager directly 127 - + let (sender, receiver) = profile_traits::ipc::channel( 131 + + let main_thread_sender = self.window.main_thread_script_chan().clone(); 132 + + let callback = profile_traits::generic_callback::GenericCallback::new( 128 133 + self.window.as_global_scope().time_profiler_chan().clone(), 129 - + ) 130 - + .expect("Error initializing channel"); 131 - + let main_thread_sender = self.window.main_thread_script_chan().clone(); 132 - + ROUTER.add_typed_route( 133 - + receiver.to_ipc_receiver(), 134 - + Box::new(move |result| { 134 + + move |result| { 135 135 + let Ok(embedder_control_response) = result else { 136 136 + return; 137 137 + }; ··· 143 143 + ) { 144 144 + warn!("Could not send FileManager response to main thread: {error}") 145 145 + } 146 - + }), 147 - + ); 146 + + }, 147 + + ) 148 + + .expect("Could not create callback"); 148 149 + self.window 149 150 + .as_global_scope() 150 151 + .resource_threads() 151 152 + .sender() 152 153 + .send(CoreResourceMsg::ToFileManager( 153 - + FileManagerThreadMsg::SelectFiles(id, file_picker_request, sender), 154 + + FileManagerThreadMsg::SelectFiles(id, file_picker_request, callback), 154 155 + )) 155 156 + .unwrap(); 156 157 + } 157 158 }, 158 159 } 159 160 160 - @@ -181,12 +224,67 @@ 161 + @@ -177,10 +220,65 @@ 161 162 pipeline_id: self.window.pipeline_id(), 162 163 index: index.0, 163 164 }; 164 - - self.window 165 - - .send_to_embedder(EmbedderMsg::HideEmbedderControl(id)); 166 165 + // If this is an embedded webview, route the hide request to the parent 167 166 + // iframe element via the Constellation. Otherwise, send directly to the embedder. 168 167 + if self.window.as_global_scope().is_embedded_webview() { ··· 183 182 + ); 184 183 + } 185 184 + } 186 - false 187 - }); 188 - } 189 - 185 + + false 186 + + }); 187 + + } 188 + + 190 189 + /// Hide all visible embedder controls. This is called when the document becomes inactive 191 190 + /// (e.g., when navigating to a new page) to ensure controls like the virtual keyboard 192 191 + /// are hidden. ··· 210 209 + ), 211 210 + ); 212 211 + } else { 213 - + self.window 214 - + .send_to_embedder(EmbedderMsg::HideEmbedderControl(id)); 212 + self.window 213 + .send_to_embedder(EmbedderMsg::HideEmbedderControl(id)); 214 + - false 215 + - }); 215 216 + } 216 217 + } 217 218 + // Also notify constellation to clear IME tracking if we had an Ime control ··· 222 223 + )); 223 224 + } 224 225 + self.visible_elements.borrow_mut().clear(); 225 - + } 226 - + 226 + } 227 + 227 228 pub(crate) fn handle_embedder_control_response( 228 - &self, 229 - cx: &mut JSContext, 230 - @@ -230,6 +328,10 @@ 229 + @@ -226,6 +324,10 @@ 231 230 ) => { 232 - context_menu_nodes.handle_context_menu_action(action, CanGc::from_cx(cx)); 231 + context_menu_nodes.handle_context_menu_action(action, cx); 233 232 }, 234 233 + (ControlElement::PermissionPrompt(_), EmbedderControlResponse::PermissionPrompt(_)) => { 235 234 + // Permission prompt responses go directly through the IPC sender ··· 238 237 (_, _) => unreachable!( 239 238 "The response to a form control should always match it's originating type." 240 239 ), 241 - @@ -236,6 +338,36 @@ 240 + @@ -232,6 +334,36 @@ 242 241 } 243 242 } 244 243 ··· 275 274 pub(crate) fn show_context_menu(&self, hit_test_result: &HitTestResult) { 276 275 { 277 276 let mut visible_elements = self.visible_elements.borrow_mut(); 278 - @@ -429,8 +561,11 @@ 277 + @@ -425,8 +557,11 @@ 279 278 let Some(browsing_context) = document.browsing_context() else { 280 279 return; 281 280 };
+11 -4
patches/components/script/dom/document_event_handler.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -12,12 +12,15 @@ 3 + @@ -11,12 +11,14 @@ 4 + use std::str::FromStr; 4 5 use std::time::{Duration, Instant}; 5 6 6 - use base::generic_channel::GenericCallback; 7 7 -use constellation_traits::{KeyboardScroll, ScriptToConstellationMessage}; 8 - +use base::id::WebViewId; 9 8 +use constellation_traits::{ 10 9 + EmbeddedWebViewEventType, KeyboardScroll, ScriptToConstellationMessage, 11 10 +}; ··· 21 20 }; 22 21 #[cfg(feature = "gamepad")] 23 22 use embedder_traits::{ 24 - @@ -34,7 +37,9 @@ 23 + @@ -33,7 +35,9 @@ 25 24 use script_bindings::codegen::GenericBindings::HTMLElementBinding::HTMLElementMethods; 26 25 use script_bindings::codegen::GenericBindings::HTMLLabelElementBinding::HTMLLabelElementMethods; 27 26 use script_bindings::codegen::GenericBindings::KeyboardEventBinding::KeyboardEventMethods; ··· 31 30 use script_bindings::codegen::GenericBindings::PerformanceBinding::PerformanceMethods; 32 31 use script_bindings::codegen::GenericBindings::TouchBinding::TouchMethods; 33 32 use script_bindings::codegen::GenericBindings::WindowBinding::{ScrollBehavior, WindowMethods}; 33 + @@ -46,6 +50,7 @@ 34 + use script_bindings::str::DOMString; 35 + use script_traits::ConstellationInputEvent; 36 + use servo_base::generic_channel::GenericCallback; 37 + +use servo_base::id::WebViewId; 38 + use servo_config::pref; 39 + use style::Atom; 40 + use style_traits::CSSPixel; 34 41 @@ -57,12 +62,13 @@ 35 42 use crate::dom::bindings::root::MutNullableDom; 36 43 use crate::dom::bindings::trace::NoTrace;
+1 -1
patches/components/script/dom/embedder.rs.patch
··· 8 8 + 9 9 +use std::ptr; 10 10 + 11 - +use base::id::ScriptEventLoopId; 12 11 +use constellation_traits::ScriptToConstellationMessage; 13 12 +use dom_struct::dom_struct; 14 13 +use embedder_traits::{EmbedderMsg, NewOSWindowParams, ServoErrorType}; ··· 20 19 +use script_bindings::interfaces::EmbedderHelpers; 21 20 +use script_bindings::script_runtime::JSContext; 22 21 +use script_bindings::str::USVString; 22 + +use servo_base::id::ScriptEventLoopId; 23 23 +use servo_config::pref_util::PrefValue; 24 24 +use servo_url::ServoUrl; 25 25 +
+5 -5
patches/components/script/dom/globalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -368,6 +368,16 @@ 3 + @@ -371,6 +371,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 - @@ -767,6 +777,8 @@ 20 + @@ -770,6 +780,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 - @@ -811,6 +823,8 @@ 29 + @@ -814,6 +826,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 - @@ -1136,6 +1150,25 @@ 38 + @@ -1139,6 +1153,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 - @@ -3126,6 +3159,16 @@ 64 + @@ -3140,6 +3173,16 @@ 65 65 self.inherited_secure_context 66 66 } 67 67
+3 -3
patches/components/script/dom/html/htmlembeddedwebview.rs.patch
··· 9 9 + 10 10 +use std::rc::Rc; 11 11 + 12 - +use base::Epoch; 13 - +use base::generic_channel::GenericSender; 14 - +use base::id::{Index, PipelineId, PipelineNamespaceId}; 15 12 +use constellation_traits::{ 16 13 + BlobImpl, EmbeddedWebViewEventType, ScriptToConstellationMessage, TraversalDirection, 17 14 +}; ··· 26 23 +use js::jsval::UndefinedValue; 27 24 +use script_bindings::codegen::GenericBindings::CustomEventBinding::CustomEventMethods; 28 25 +use script_bindings::conversions::SafeToJSValConvertible; 26 + +use servo_base::Epoch; 27 + +use servo_base::generic_channel::GenericSender; 28 + +use servo_base::id::{Index, PipelineId, PipelineNamespaceId}; 29 29 +use stylo_atoms::Atom; 30 30 +use url::Url; 31 31 +
+23 -19
patches/components/script/dom/html/htmliframeelement.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -7,8 +7,8 @@ 3 + @@ -6,8 +6,8 @@ 4 + use std::rc::Rc; 4 5 5 - use base::id::{BrowsingContextId, PipelineId, WebViewId}; 6 6 use constellation_traits::{ 7 7 - IFrameLoadInfo, IFrameLoadInfoWithData, JsEvalResult, LoadData, LoadOrigin, 8 8 - NavigationHistoryBehavior, ScriptToConstellationMessage, ··· 11 11 }; 12 12 use content_security_policy::sandboxing_directive::{ 13 13 SandboxingFlagSet, parse_a_sandboxing_directive, 14 - @@ -16,6 +16,7 @@ 14 + @@ -15,6 +15,7 @@ 15 15 use dom_struct::dom_struct; 16 16 use embedder_traits::ViewportDetails; 17 17 use html5ever::{LocalName, Prefix, local_name, ns}; ··· 19 19 use js::context::JSContext; 20 20 use js::rust::HandleObject; 21 21 use net_traits::ReferrerPolicy; 22 - @@ -24,30 +25,35 @@ 22 + @@ -22,32 +23,38 @@ 23 + use profile_traits::ipc as ProfiledIpc; 23 24 use script_bindings::script_runtime::temp_cx; 24 25 use script_traits::{NewPipelineInfo, UpdatePipelineIdReason}; 26 + +use servo_base::generic_channel; 27 + use servo_base::id::{BrowsingContextId, PipelineId, WebViewId}; 25 28 use servo_url::ServoUrl; 26 29 +use style::Atom; 27 30 use style::attr::{AttrValue, LengthOrPercentageOrAuto}; ··· 56 59 use crate::dom::trustedtypes::trustedhtml::TrustedHTML; 57 60 use crate::dom::virtualmethods::VirtualMethods; 58 61 use crate::dom::windowproxy::WindowProxy; 59 - @@ -76,6 +82,12 @@ 62 + @@ -76,6 +83,12 @@ 60 63 SrcDoc, 61 64 } 62 65 ··· 64 67 +pub(crate) use super::htmlembeddedwebview::PendingDialogSender; 65 68 +// Type alias for pending permission senders 66 69 +pub(crate) type PendingPermissionSender = 67 - + base::generic_channel::GenericSender<embedder_traits::AllowOrDeny>; 70 + + generic_channel::GenericSender<embedder_traits::AllowOrDeny>; 68 71 + 69 72 #[dom_struct] 70 73 pub(crate) struct HTMLIFrameElement { 71 74 htmlelement: HTMLElement, 72 - @@ -112,6 +124,30 @@ 75 + @@ -112,6 +125,30 @@ 73 76 /// an empty iframe is attached. In that case, we shouldn't fire a 74 77 /// subsequent asynchronous load event. 75 78 already_fired_synchronous_load_event: Cell<bool>, ··· 100 103 } 101 104 102 105 impl HTMLIFrameElement { 103 - @@ -265,6 +301,8 @@ 106 + @@ -265,6 +302,8 @@ 104 107 viewport_details, 105 108 user_content_manager_id: None, 106 109 theme: window.theme(), ··· 109 112 }; 110 113 111 114 self.pipeline_id.set(Some(new_pipeline_id)); 112 - @@ -560,6 +598,147 @@ 115 + @@ -560,6 +599,147 @@ 113 116 ); 114 117 } 115 118 ··· 257 260 fn destroy_nested_browsing_context(&self) { 258 261 self.pipeline_id.set(None); 259 262 self.pending_pipeline_id.set(None); 260 - @@ -622,6 +801,13 @@ 263 + @@ -622,6 +802,13 @@ 261 264 lazy_load_resumption_steps: Default::default(), 262 265 pending_navigation: Default::default(), 263 266 already_fired_synchronous_load_event: Default::default(), ··· 271 274 } 272 275 } 273 276 274 - @@ -657,6 +843,157 @@ 277 + @@ -657,7 +844,158 @@ 275 278 self.webview_id.get() 276 279 } 277 280 ··· 376 379 + 377 380 + /// Returns true if this iframe is hosting an embedded webview (created with "embed" attribute). 378 381 + /// Embedded webviews have their own top-level WebViewId and window.parent === window.self. 379 - + #[inline] 382 + #[inline] 380 383 + pub(crate) fn is_embedded_webview(&self) -> bool { 381 384 + self.is_embedded_webview.get() 382 385 + } ··· 426 429 + self.page_zoom.set(zoom); 427 430 + } 428 431 + 429 - #[inline] 432 + + #[inline] 430 433 pub(crate) fn sandboxing_flag_set(&self) -> SandboxingFlagSet { 431 434 self.sandboxing_flag_set 432 - @@ -1018,6 +1355,89 @@ 435 + .get() 436 + @@ -1024,6 +1362,89 @@ 433 437 434 - // https://html.spec.whatwg.org/multipage/#attr-iframe-loading 435 - make_setter!(SetLoading, "loading"); 438 + // https://html.spec.whatwg.org/multipage/#dom-iframe-longdesc 439 + make_url_setter!(SetLongDesc, "longdesc"); 436 440 + 437 441 + // Servo extension: Embedded WebView methods 438 442 + // These delegate to helper methods in htmlembeddedwebview.rs ··· 519 523 } 520 524 521 525 impl VirtualMethods for HTMLIFrameElement { 522 - @@ -1074,8 +1494,36 @@ 526 + @@ -1080,8 +1501,36 @@ 523 527 // is in a document tree and has a browsing context, which is what causes 524 528 // the child browsing context to be created. 525 529 if self.upcast::<Node>().is_connected_with_browsing_context() { ··· 558 562 } 559 563 }, 560 564 local_name!("loading") => { 561 - @@ -1140,6 +1588,23 @@ 565 + @@ -1146,6 +1595,23 @@ 562 566 563 567 debug!("<iframe> running post connection steps"); 564 568 ··· 582 586 // Step 1. Create a new child navigable for insertedNode. 583 587 self.create_nested_browsing_context(cx); 584 588 585 - @@ -1163,11 +1628,25 @@ 589 + @@ -1169,11 +1635,25 @@ 586 590 fn unbind_from_tree(&self, context: &UnbindContext, can_gc: CanGc) { 587 591 self.super_type().unwrap().unbind_from_tree(context, can_gc); 588 592
+25 -31
patches/components/script/dom/navigator.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -2,9 +2,11 @@ 4 - * License, v. 2.0. If a copy of the MPL was not distributed with this 5 - * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 6 - 7 - +#[cfg(feature = "gamepad")] 3 + @@ -6,8 +6,10 @@ 8 4 use std::cell::Cell; 9 5 use std::convert::TryInto; 10 6 use std::ops::Deref; 11 7 +use std::rc::Rc; 12 8 use std::sync::LazyLock; 13 9 14 - use base::generic_channel; 15 - @@ -23,6 +25,7 @@ 10 + +use constellation_traits::ScriptToConstellationMessage; 11 + use dom_struct::dom_struct; 12 + use embedder_traits::{EmbedderMsg, ProtocolHandlerUpdateRegistration, RegisterOrUnregister}; 13 + use headers::HeaderMap; 14 + @@ -20,6 +22,7 @@ 15 + use net_traits::{FetchMetadata, NetworkError, ResourceFetchTiming}; 16 + use regex::Regex; 17 + use servo_base::generic_channel; 18 + +use servo_base::id::MessagePortId; 19 + use servo_config::pref; 16 20 use servo_url::ServoUrl; 17 21 18 - use crate::body::Extractable; 19 - +#[cfg(feature = "gamepad")] 20 - use crate::dom::bindings::cell::DomRefCell; 21 - use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; 22 - use crate::dom::bindings::codegen::Bindings::WindowBinding::Window_Binding::WindowMethods; 23 - @@ -38,6 +41,7 @@ 22 + @@ -40,6 +43,7 @@ 24 23 use crate::dom::clipboard::Clipboard; 25 24 use crate::dom::credentialmanagement::credentialscontainer::CredentialsContainer; 26 25 use crate::dom::csp::{GlobalCspReporting, Violation}; ··· 28 27 #[cfg(feature = "gamepad")] 29 28 use crate::dom::gamepad::Gamepad; 30 29 #[cfg(feature = "gamepad")] 31 - @@ -44,6 +48,7 @@ 30 + @@ -46,13 +50,16 @@ 32 31 use crate::dom::gamepad::gamepadevent::GamepadEventType; 33 32 use crate::dom::geolocation::Geolocation; 34 33 use crate::dom::globalscope::GlobalScope; 35 34 +use crate::dom::keyboard::Keyboard; 36 35 use crate::dom::mediadevices::MediaDevices; 37 36 use crate::dom::mediasession::MediaSession; 37 + +use crate::dom::messageport::MessagePort; 38 38 use crate::dom::mimetypearray::MimeTypeArray; 39 - @@ -51,6 +56,7 @@ 39 + use crate::dom::navigatorinfo; 40 40 use crate::dom::performance::performanceresourcetiming::InitiatorType; 41 41 use crate::dom::permissions::Permissions; 42 42 use crate::dom::pluginarray::PluginArray; ··· 44 44 use crate::dom::serviceworkercontainer::ServiceWorkerContainer; 45 45 use crate::dom::servointernals::ServoInternals; 46 46 use crate::dom::types::UserActivation; 47 - @@ -61,6 +67,7 @@ 47 + @@ -63,6 +70,7 @@ 48 48 use crate::dom::xrsystem::XRSystem; 49 49 use crate::fetch::RequestWithGlobalScope; 50 50 use crate::network_listener::{FetchResponseListener, ResourceTimingListener, submit_timing}; ··· 52 52 use crate::script_runtime::{CanGc, JSContext}; 53 53 54 54 pub(super) fn hardware_concurrency() -> u64 { 55 - @@ -130,6 +137,8 @@ 55 + @@ -132,6 +140,8 @@ 56 56 has_gamepad_gesture: Cell<bool>, 57 57 servo_internals: MutNullableDom<ServoInternals>, 58 58 user_activation: MutNullableDom<UserActivation>, ··· 61 61 } 62 62 63 63 impl Navigator { 64 - @@ -156,6 +165,8 @@ 64 + @@ -158,6 +168,8 @@ 65 65 has_gamepad_gesture: Cell::new(false), 66 66 servo_internals: Default::default(), 67 67 user_activation: Default::default(), ··· 70 70 } 71 71 } 72 72 73 - @@ -168,6 +179,11 @@ 73 + @@ -170,6 +182,11 @@ 74 74 self.xr.get() 75 75 } 76 76 ··· 82 82 #[cfg(feature = "gamepad")] 83 83 pub(crate) fn get_gamepad(&self, index: usize) -> Option<DomRoot<Gamepad>> { 84 84 self.gamepads.borrow().get(index).and_then(|g| g.get()) 85 - @@ -559,6 +575,18 @@ 85 + @@ -561,6 +578,18 @@ 86 86 .or_init(|| ServoInternals::new(&self.global(), CanGc::note())) 87 87 } 88 88 ··· 101 101 /// <https://html.spec.whatwg.org/multipage/#dom-navigator-registerprotocolhandler> 102 102 fn RegisterProtocolHandler(&self, scheme: DOMString, url: USVString) -> Fallible<()> { 103 103 // Step 1. Let (normalizedScheme, normalizedURLString) be the result of 104 - @@ -602,6 +630,62 @@ 104 + @@ -604,6 +633,56 @@ 105 105 self.user_activation 106 106 .or_init(|| UserActivation::new(&self.global(), can_gc)) 107 107 } ··· 113 113 + comp: InRealm, 114 114 + can_gc: CanGc, 115 115 + ) -> Fallible<Rc<Promise>> { 116 - + use base::id::MessagePortId; 117 - + use constellation_traits::ScriptToConstellationMessage; 118 - + 119 - + use crate::dom::messageport::MessagePort; 120 - + 121 116 + let global = self.global(); 122 117 + let promise = Promise::new_in_current_realm(comp, can_gc); 123 118 + ··· 133 128 + global.set_port_entanglement(*port1.message_port_id(), remote_port_id); 134 129 + 135 130 + // Tell the constellation to create the remote port and send the offer. 136 - + let callback = base::generic_channel::GenericCallback::new( 137 - + move |result: Result<Result<(), String>, _>| { 131 + + let callback = 132 + + generic_channel::GenericCallback::new(move |result: Result<Result<(), String>, _>| { 138 133 + if let Ok(Err(e)) = result { 139 134 + log::warn!("CreatePeerStream failed: {e}"); 140 135 + } 141 - + }, 142 - + ) 143 - + .expect("Could not create callback"); 136 + + }) 137 + + .expect("Could not create callback"); 144 138 + 145 139 + let chan = global.script_to_constellation_chan(); 146 140 + if chan
+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 - @@ -883,6 +895,11 @@ 39 + @@ -882,6 +894,11 @@ 40 40 for (request, resource_type) in pending_requests { 41 41 self.fetch_and_show_when_ready(request, resource_type); 42 42 }
+3 -3
patches/components/script/dom/window.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -37,7 +37,7 @@ 3 + @@ -32,7 +32,7 @@ 4 4 use embedder_traits::{ 5 5 AlertResponse, ConfirmResponse, EmbedderMsg, JavaScriptEvaluationError, PromptResponse, 6 6 ScriptToEmbedderChan, SimpleDialogRequest, Theme, UntrustedNodeAddress, ViewportDetails, ··· 157 157 cursor: result.cursor, 158 158 point_in_node: result.point_in_target, 159 159 point_in_frame, 160 - @@ -3750,6 +3822,8 @@ 160 + @@ -3749,6 +3821,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 - @@ -3776,6 +3850,8 @@ 169 + @@ -3775,6 +3849,8 @@ 170 170 gpu_id_hub, 171 171 inherited_secure_context, 172 172 unminify_js,
+9 -21
patches/components/script/dom/windowproxy.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -7,7 +7,7 @@ 4 - use std::rc::Rc; 5 - 6 - use base::generic_channel; 7 - -use base::generic_channel::GenericSend; 8 - +use base::generic_channel::{GenericSend, channel}; 9 - use base::id::{BrowsingContextId, PipelineId, WebViewId}; 10 - use constellation_traits::{ 11 - AuxiliaryWebViewCreationRequest, LoadData, LoadOrigin, NavigationHistoryBehavior, 12 - @@ -299,8 +299,9 @@ 3 + @@ -298,6 +298,7 @@ 13 4 &self, 14 5 name: DOMString, 15 6 noopener: bool, 16 7 + target_url: Option<ServoUrl>, 17 8 ) -> Option<DomRoot<WindowProxy>> { 18 - - let (response_sender, response_receiver) = ipc::channel().unwrap(); 19 - + let (response_sender, response_receiver) = channel().unwrap(); 9 + let (response_sender, response_receiver) = generic_channel::channel().unwrap(); 20 10 let window = self 21 - .currently_active 22 - .get() 23 - @@ -334,6 +335,7 @@ 11 + @@ -333,6 +334,7 @@ 24 12 opener_webview_id: window.webview_id(), 25 13 opener_pipeline_id: self.currently_active.get().unwrap(), 26 14 response_sender, ··· 28 16 }; 29 17 let constellation_msg = ScriptToConstellationMessage::CreateAuxiliaryWebView(load_info); 30 18 window.send_to_constellation(constellation_msg); 31 - @@ -352,6 +354,8 @@ 19 + @@ -351,6 +353,8 @@ 32 20 // Use the current `WebView`'s theme initially, but the embedder may 33 21 // change this later. 34 22 theme: window.theme(), ··· 37 25 }; 38 26 39 27 with_script_thread(|script_thread| { 40 - @@ -504,14 +508,32 @@ 28 + @@ -503,14 +507,32 @@ 41 29 // (TODO) Step 11. Let referrerPolicy be the empty string. 42 30 // (TODO) Step 12. If noreferrer is true, then set referrerPolicy to "no-referrer". 43 31 ··· 74 62 // TODO Step 15.2, Set up browsing context features for targetNavigable's 75 63 // active browsing context given tokenizedFeatures. 76 64 let target_document = match chosen.document() { 77 - @@ -526,16 +548,12 @@ 65 + @@ -525,16 +547,12 @@ 78 66 let target_window = target_document.window(); 79 67 // Step 15.3 and 15.4 will have happened elsewhere, 80 68 // since we've created a new browsing context and loaded it with about:blank. ··· 92 80 let referrer = if noreferrer { 93 81 Referrer::NoReferrer 94 82 } else { 95 - @@ -599,6 +617,7 @@ 83 + @@ -598,6 +616,7 @@ 96 84 &self, 97 85 name: DOMString, 98 86 noopener: bool, ··· 100 88 ) -> (Option<DomRoot<WindowProxy>>, bool) { 101 89 match name.to_lowercase().as_ref() { 102 90 "" | "_self" => { 103 - @@ -616,7 +635,10 @@ 91 + @@ -615,7 +634,10 @@ 104 92 // Step 5 105 93 (Some(DomRoot::from_ref(self.top())), false) 106 94 }, ··· 112 100 _ => { 113 101 // Step 6. 114 102 // TODO: expand the search to all 'familiar' bc, 115 - @@ -624,7 +646,10 @@ 103 + @@ -623,7 +645,10 @@ 116 104 // See https://html.spec.whatwg.org/multipage/#familiar-with 117 105 match ScriptThread::find_window_proxy_by_name(&name) { 118 106 Some(proxy) => (Some(proxy), false),
+1 -1
patches/components/script/dom/workers/workerglobalscope.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -349,6 +349,8 @@ 3 + @@ -348,6 +348,8 @@ 4 4 gpu_id_hub, 5 5 init.inherited_secure_context, 6 6 init.unminify_js,
+2 -2
patches/components/script/navigation.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -168,6 +168,10 @@ 3 + @@ -169,6 +169,10 @@ 4 4 /// The [`Theme`] to use for this page, once it loads. 5 5 #[no_trace] 6 6 pub(crate) theme: Theme, ··· 11 11 } 12 12 13 13 impl InProgressLoad { 14 - @@ -190,6 +194,8 @@ 14 + @@ -191,6 +195,8 @@ 15 15 url_list: vec![url], 16 16 user_content_manager_id: new_pipeline_info.user_content_manager_id, 17 17 theme: new_pipeline_info.theme,
+26 -27
patches/components/script/script_thread.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -35,15 +35,15 @@ 4 - use base::cross_process_instant::CrossProcessInstant; 5 - use base::generic_channel; 6 - use base::id::{ 7 - - BrowsingContextId, HistoryStateId, PipelineId, PipelineNamespace, ScriptEventLoopId, 8 - - TEST_WEBVIEW_ID, WebViewId, 9 - + BrowsingContextId, HistoryStateId, MessagePortId, PipelineId, PipelineNamespace, 10 - + ScriptEventLoopId, TEST_WEBVIEW_ID, WebViewId, 11 - }; 3 + @@ -35,9 +35,9 @@ 12 4 use canvas_traits::webgl::WebGLPipeline; 13 5 use chrono::{DateTime, Local}; 14 6 use constellation_traits::{ ··· 21 13 }; 22 14 use crossbeam_channel::unbounded; 23 15 use data_url::mime::Mime; 24 - @@ -55,7 +55,7 @@ 16 + @@ -49,7 +49,7 @@ 25 17 use embedder_traits::{ 26 18 EmbedderControlId, EmbedderControlResponse, EmbedderMsg, FocusSequenceNumber, 27 19 InputEventOutcome, JavaScriptEvaluationError, JavaScriptEvaluationId, MediaSessionActionType, ··· 30 22 }; 31 23 use encoding_rs::Encoding; 32 24 use fonts::{FontContext, SystemFontServiceProxy}; 33 - @@ -92,6 +92,7 @@ 34 - UpdatePipelineIdReason, 25 + @@ -88,9 +88,10 @@ 26 + use servo_base::cross_process_instant::CrossProcessInstant; 27 + use servo_base::generic_channel; 28 + use servo_base::id::{ 29 + - BrowsingContextId, HistoryStateId, PipelineId, PipelineNamespace, ScriptEventLoopId, 30 + - TEST_WEBVIEW_ID, WebViewId, 31 + + BrowsingContextId, HistoryStateId, MessagePortId, PipelineId, PipelineNamespace, 32 + + ScriptEventLoopId, TEST_WEBVIEW_ID, WebViewId, 35 33 }; 36 - use servo_arc::Arc as ServoArc; 37 34 +use servo_config::pref_util::PrefValue; 38 35 use servo_config::{opts, pref, prefs}; 39 36 use servo_url::{ImmutableOrigin, MutableOrigin, OriginSnapshot, ServoUrl}; 40 37 use storage_traits::StorageThreads; 41 - @@ -115,6 +116,8 @@ 38 + @@ -114,6 +115,8 @@ 42 39 use crate::dom::bindings::codegen::Bindings::DocumentBinding::{ 43 40 DocumentMethods, DocumentReadyState, 44 41 }; ··· 47 44 use crate::dom::bindings::codegen::Bindings::NavigatorBinding::NavigatorMethods; 48 45 use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods; 49 46 use crate::dom::bindings::conversions::{ 50 - @@ -134,9 +137,13 @@ 47 + @@ -133,9 +136,13 @@ 51 48 RenderingUpdateReason, 52 49 }; 53 50 use crate::dom::element::Element; ··· 61 58 use crate::dom::servoparser::{ParserContext, ServoParser}; 62 59 use crate::dom::types::DebuggerGlobalScope; 63 60 #[cfg(feature = "webgpu")] 64 - @@ -1939,11 +1946,22 @@ 61 + @@ -1941,11 +1948,22 @@ 65 62 self.handle_refresh_cursor(pipeline_id); 66 63 }, 67 64 ScriptThreadMessage::PreferencesUpdated(updates) => { ··· 88 85 }, 89 86 ScriptThreadMessage::ForwardKeyboardScroll(pipeline_id, scroll) => { 90 87 if let Some(document) = self.documents.borrow().find_document(pipeline_id) { 91 - @@ -1984,6 +2002,35 @@ 88 + @@ -1986,6 +2004,35 @@ 92 89 ScriptThreadMessage::TriggerGarbageCollection => unsafe { 93 90 JS_GC(*GlobalScope::get_cx(), GCReason::API); 94 91 }, ··· 118 115 + stream_id, 119 116 + from_peer, 120 117 + target_url, 121 - + CanGc::from_cx(cx), 118 + + cx, 122 119 + ); 123 120 + }, 124 121 } 125 122 } 126 123 127 - @@ -3055,6 +3102,9 @@ 124 + @@ -3026,6 +3073,9 @@ 128 125 .documents 129 126 .borrow() 130 127 .find_iframe(parent_pipeline_id, browsing_context_id); ··· 134 131 if let Some(frame_element) = frame_element { 135 132 frame_element.update_pipeline_id(new_pipeline_id, reason, cx); 136 133 } 137 - @@ -3074,6 +3124,7 @@ 134 + @@ -3045,6 +3095,7 @@ 138 135 // is no need to pass along existing opener information that 139 136 // will be discarded. 140 137 None, ··· 142 139 ); 143 140 } 144 141 } 145 - @@ -3350,6 +3401,157 @@ 142 + @@ -3323,6 +3374,159 @@ 146 143 } 147 144 } 148 145 ··· 210 207 + stream_id: String, 211 208 + from_peer: String, 212 209 + target_url: String, 213 - + can_gc: CanGc, 210 + + cx: &mut js::context::JSContext, 214 211 + ) { 215 212 + log::debug!( 216 213 + "handle_dispatch_peer_stream: peer_id={peer_id}, stream_id={stream_id}, target_url={target_url}" ··· 243 240 + 244 241 + log::debug!("URL matched! Creating local port and firing peerstream event"); 245 242 + 243 + + let can_gc = CanGc::from_cx(cx); 244 + + 246 245 + // Create a new local port and set its entanglement to the remote port. 247 246 + let local_port = MessagePort::new(global, can_gc); 248 247 + global.track_message_port(&local_port, None); 249 248 + global.set_port_entanglement(*local_port.message_port_id(), remote_port_id); 250 - + global.start_message_port(local_port.message_port_id(), can_gc); 249 + + global.start_message_port(cx, local_port.message_port_id()); 251 250 + 252 251 + // Tell the constellation to set bidirectional entanglement. 253 252 + let _ = global.script_to_constellation_chan().send( ··· 300 299 fn ask_constellation_for_top_level_info( 301 300 &self, 302 301 sender_webview_id: WebViewId, 303 - @@ -3463,7 +3665,13 @@ 302 + @@ -3436,7 +3640,13 @@ 304 303 self.senders.pipeline_to_embedder_sender.clone(), 305 304 self.senders.constellation_sender.clone(), 306 305 incomplete.pipeline_id, ··· 315 314 incomplete.viewport_details, 316 315 origin.clone(), 317 316 final_url.clone(), 318 - @@ -3485,6 +3693,8 @@ 317 + @@ -3458,6 +3668,8 @@ 319 318 #[cfg(feature = "webgpu")] 320 319 self.gpu_id_hub.clone(), 321 320 incomplete.load_data.inherited_secure_context, ··· 324 323 incomplete.theme, 325 324 self.this.clone(), 326 325 ); 327 - @@ -3508,6 +3718,7 @@ 326 + @@ -3481,6 +3693,7 @@ 328 327 incomplete.webview_id, 329 328 incomplete.parent_info, 330 329 incomplete.opener, ··· 332 331 ); 333 332 if window_proxy.parent().is_some() { 334 333 // https://html.spec.whatwg.org/multipage/#navigating-across-documents:delaying-load-events-mode-2 335 - @@ -4281,6 +4492,24 @@ 334 + @@ -4261,6 +4474,24 @@ 336 335 document.event_handler().handle_refresh_cursor(); 337 336 } 338 337
+3 -3
patches/components/script_bindings/codegen/Bindings.conf.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -287,6 +287,11 @@ 3 + @@ -288,6 +288,11 @@ 4 4 'cx': ['CheckValidity', 'ReportValidity'], 5 5 }, 6 6 ··· 12 12 'EventSource': { 13 13 'weakReferenceable': True, 14 14 }, 15 - @@ -657,8 +662,8 @@ 15 + @@ -659,8 +664,8 @@ 16 16 }, 17 17 18 18 'Navigator': { ··· 23 23 }, 24 24 25 25 'Node': { 26 - @@ -691,6 +696,11 @@ 26 + @@ -693,6 +698,11 @@ 27 27 'cx': ['CreateLinearGradient', 'CreatePattern', 'CreateRadialGradient', 'GetTransform'], 28 28 }, 29 29
+4 -11
patches/components/servo/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -31,7 +31,7 @@ 4 - // should be exported at the root. See <https://github.com/servo/servo/issues/18475>. 5 - pub use accesskit; 6 - pub use base::generic_channel::GenericSender; 7 - -pub use base::id::WebViewId; 8 - +pub use base::id::{BrowsingContextId, PipelineId, WebViewId}; 9 - pub use embedder_traits::user_contents::UserScript; 10 - pub use embedder_traits::*; 11 - pub use image::RgbaImage; 12 - @@ -51,9 +51,12 @@ 13 - // This should be replaced with an API on ServoBuilder. 3 + @@ -50,10 +50,13 @@ 14 4 // See <https://github.com/servo/servo/issues/40950>. 15 5 pub use resources; 6 + pub use servo_base::generic_channel::GenericSender; 7 + -pub use servo_base::id::WebViewId; 8 + +pub use servo_base::id::{BrowsingContextId, PipelineId, WebViewId}; 16 9 +pub use servo_config::embedder_prefs::PrefsPersistError; 17 10 pub use servo_config::opts::{DiagnosticsLogging, Opts, OutputOptions}; 18 11 pub use servo_config::prefs::{PrefValue, Preferences, UserAgentPlatform};
+7 -7
patches/components/servo/servo.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 3 @@ -63,7 +63,7 @@ 4 - use script::{JSEngineSetup, ServiceWorkerManager}; 4 + use servo_bluetooth_traits::BluetoothRequest; 5 5 use servo_config::opts::Opts; 6 6 use servo_config::prefs::{PrefValue, Preferences}; 7 7 -use servo_config::{opts, pref, prefs}; ··· 9 9 use servo_geometry::{ 10 10 DeviceIndependentIntRect, convert_rect_to_css_pixel, convert_size_to_css_pixel, 11 11 }; 12 - @@ -199,9 +199,7 @@ 12 + @@ -229,9 +229,7 @@ 13 13 } 14 14 15 15 if self.constellation_proxy.disconnected() { ··· 20 20 } 21 21 22 22 self.paint.borrow_mut().perform_updates(); 23 - @@ -253,10 +251,39 @@ 23 + @@ -283,10 +281,39 @@ 24 24 25 25 fn handle_delegate_errors(&self) { 26 26 while let Some(error) = self.servo_errors.try_recv() { ··· 61 61 fn clean_up_destroyed_webview_handles(&self) { 62 62 // Remove any webview handles that have been destroyed and would not be upgradable. 63 63 // Note that `retain` is O(capacity) because it visits empty buckets, so it may be worth 64 - @@ -414,6 +441,11 @@ 64 + @@ -444,6 +471,11 @@ 65 65 webview.request_create_new(response_sender); 66 66 } 67 67 }, ··· 73 73 EmbedderMsg::WebViewClosed(webview_id) => { 74 74 if let Some(webview) = self.get_webview_handle(webview_id) { 75 75 webview.delegate().notify_closed(webview); 76 - @@ -567,10 +599,7 @@ 76 + @@ -597,10 +629,7 @@ 77 77 .delegate 78 78 .borrow() 79 79 .notify_devtools_server_started(port, token), ··· 85 85 }, 86 86 EmbedderMsg::RequestDevtoolsConnection(response_sender) => { 87 87 self.delegate 88 - @@ -695,6 +724,47 @@ 88 + @@ -725,6 +754,47 @@ 89 89 .notify_accessibility_tree_update(webview, tree_update); 90 90 } 91 91 }, ··· 133 133 } 134 134 } 135 135 } 136 - @@ -927,6 +997,14 @@ 136 + @@ -959,6 +1029,14 @@ 137 137 self.0.site_data_manager.borrow() 138 138 } 139 139
+6 -5
patches/components/servo/servo_delegate.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -3,6 +3,7 @@ 3 + @@ -3,6 +3,8 @@ 4 4 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 5 - use base::generic_channel; 6 5 use embedder_traits::{ConsoleLogLevel, Notification}; 6 + use servo_base::generic_channel; 7 + +use servo_base::id::WebViewId; 7 8 +use url::Url; 8 9 9 10 use crate::webview_delegate::{AllowOrDenyRequest, WebResourceLoad}; 10 11 11 - @@ -42,6 +43,24 @@ 12 + @@ -42,6 +44,24 @@ 12 13 /// A console message was logged by content not associated with a specific [`WebView`]. 13 14 /// <https://developer.mozilla.org/en-US/docs/Web/API/Console_API> 14 15 fn show_console_message(&self, _level: ConsoleLogLevel, _message: String) {} ··· 25 26 + 26 27 + /// Request the embedder to start a window drag operation. 27 28 + /// The `webview_id` can be used to identify which window to drag. 28 - + fn request_start_window_drag(&self, _webview_id: base::id::WebViewId) {} 29 + + fn request_start_window_drag(&self, _webview_id: WebViewId) {} 29 30 + 30 31 + /// Request the embedder to start a window resize operation. 31 32 + /// The `webview_id` can be used to identify which window to resize. 32 - + fn request_start_window_resize(&self, _webview_id: base::id::WebViewId) {} 33 + + fn request_start_window_resize(&self, _webview_id: WebViewId) {} 33 34 } 34 35 35 36 pub(crate) struct DefaultServoDelegate;
+3 -3
patches/components/servo/webview.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -227,6 +227,18 @@ 3 + @@ -228,6 +228,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 - @@ -236,6 +248,7 @@ 22 + @@ -237,6 +249,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 - @@ -758,6 +771,11 @@ 30 + @@ -761,6 +774,11 @@ 31 31 EmbedderControlRequest::FilePicker { .. } => { 32 32 unreachable!("This message should be routed through the FileManagerThread") 33 33 },
+9 -9
patches/components/servo/webview_delegate.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -6,7 +6,7 @@ 4 - use std::rc::Rc; 5 - 6 - use base::generic_channel::GenericSender; 7 - -use base::id::PipelineId; 8 - +use base::id::{BrowsingContextId, PipelineId, WebViewId}; 9 - use constellation_traits::EmbedderToConstellationMessage; 10 - #[cfg(feature = "gamepad")] 11 - use embedder_traits::GamepadHapticEffectType; 3 + @@ -19,7 +19,7 @@ 4 + }; 5 + use paint_api::rendering_context::RenderingContext; 6 + use servo_base::generic_channel::GenericSender; 7 + -use servo_base::id::PipelineId; 8 + +use servo_base::id::{BrowsingContextId, PipelineId, WebViewId}; 9 + use tokio::sync::mpsc::UnboundedSender as TokioSender; 10 + use tokio::sync::oneshot::Sender; 11 + use url::Url; 12 12 @@ -930,6 +930,14 @@ 13 13 /// 14 14 /// [`window.open`]: https://developer.mozilla.org/en-US/docs/Web/API/Window/open
+7 -8
patches/components/shared/constellation/from_script_message.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -18,8 +18,9 @@ 3 + @@ -11,8 +11,9 @@ 4 4 use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg, WorkerId}; 5 5 use embedder_traits::user_contents::UserContentManagerId; 6 6 use embedder_traits::{ ··· 13 13 use encoding_rs::Encoding; 14 14 use euclid::default::Size2D as UntypedSize2D; 15 15 @@ -35,6 +36,7 @@ 16 - use profile_traits::{mem, time as profile_time}; 17 - use rustc_hash::FxHashMap; 18 - use serde::{Deserialize, Serialize}; 16 + MessagePortRouterId, PipelineId, ScriptEventLoopId, ServiceWorkerId, 17 + ServiceWorkerRegistrationId, WebViewId, 18 + }; 19 19 +use servo_config::pref_util::PrefValue; 20 20 use servo_url::{ImmutableOrigin, OriginSnapshot, ServoUrl}; 21 21 use storage_traits::StorageThreads; ··· 35 35 /// The pipeline opener browsing context. 36 36 pub opener_pipeline_id: PipelineId, 37 37 - /// Sender for the constellation’s response to our request. 38 - - pub response_sender: IpcSender<Option<AuxiliaryWebViewCreationResponse>>, 39 38 + /// Sender for the constellation's response to our request. 40 - + pub response_sender: GenericSender<Option<AuxiliaryWebViewCreationResponse>>, 39 + pub response_sender: GenericSender<Option<AuxiliaryWebViewCreationResponse>>, 41 40 + /// The target URL that window.open() was called with. 42 41 + /// This is needed because load_data.url is always about:blank for new browsing contexts. 43 42 + pub target_url: Option<ServoUrl>, ··· 186 185 + /// Args: peer_id, local_port_id, remote_port_id, target_url, callback. 187 186 + CreatePeerStream( 188 187 + String, 189 - + base::id::MessagePortId, 190 - + base::id::MessagePortId, 188 + + MessagePortId, 189 + + MessagePortId, 191 190 + String, 192 191 + GenericCallback<Result<(), String>>, 193 192 + ),
+9 -9
patches/components/shared/constellation/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -16,15 +16,16 @@ 4 - use std::time::Duration; 5 - 6 - use base::cross_process_instant::CrossProcessInstant; 7 - -use base::generic_channel::GenericCallback; 8 - +use base::generic_channel::{GenericCallback, GenericSharedMemory}; 9 - use base::id::{MessagePortId, PipelineId, ScriptEventLoopId, WebViewId}; 10 - use embedder_traits::user_contents::{ 3 + @@ -19,9 +19,10 @@ 11 4 UserContentManagerId, UserScript, UserScriptId, UserStyleSheet, UserStyleSheetId, 12 5 }; 13 6 use embedder_traits::{ ··· 21 14 }; 22 15 pub use from_script_message::*; 23 16 use malloc_size_of_derive::MallocSizeOf; 24 - @@ -36,9 +37,149 @@ 17 + @@ -30,15 +31,155 @@ 18 + use rustc_hash::FxHashMap; 19 + use serde::{Deserialize, Serialize}; 20 + use servo_base::cross_process_instant::CrossProcessInstant; 21 + -use servo_base::generic_channel::GenericCallback; 22 + +use servo_base::generic_channel::{GenericCallback, GenericSharedMemory}; 23 + use servo_base::id::{MessagePortId, PipelineId, ScriptEventLoopId, WebViewId}; 24 + use servo_config::prefs::PrefValue; 25 25 use servo_url::{ImmutableOrigin, ServoUrl}; 26 26 pub use structured_data::*; 27 27 use strum::IntoStaticStr;
+3 -3
patches/components/shared/embedder/Cargo.toml.patch
··· 1 1 --- original 2 2 +++ modified 3 3 @@ -36,6 +36,7 @@ 4 - pixels = { workspace = true } 5 4 rustc-hash = { workspace = true } 6 5 serde = { workspace = true } 7 - +servo_config = { workspace = true } 8 - servo_geometry = { workspace = true } 6 + servo-base = { workspace = true } 7 + +servo-config = { workspace = true } 8 + servo-geometry = { workspace = true } 9 9 servo-url = { workspace = true } 10 10 strum = { workspace = true }
+14 -14
patches/components/shared/embedder/embedder_controls.rs.patch
··· 6 6 7 7 -use crate::{InputMethodType, RgbColor}; 8 8 +use crate::{AllowOrDeny, InputMethodType, PermissionFeature, RgbColor}; 9 - #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] 10 - pub struct EmbedderControlId { 11 - pub webview_id: WebViewId, 12 - @@ -24,7 +24,7 @@ 13 - pub index: Epoch, 9 + 10 + /// The id of a user interface control that the engine requests that the 11 + /// embedder show. 12 + @@ -31,7 +31,7 @@ 14 13 } 15 14 15 + /// A request from the engine to the embedder to display a user interface control. 16 16 -#[derive(Debug, Deserialize, Serialize)] 17 17 +#[derive(Clone, Debug, Deserialize, Serialize)] 18 18 pub enum EmbedderControlRequest { 19 19 /// Indicates that the user has activated a `<select>` element. 20 20 SelectElement(Vec<SelectElementOptionOrOptgroup>, Option<usize>), 21 - @@ -37,6 +37,8 @@ 21 + @@ -44,6 +44,8 @@ 22 22 InputMethod(InputMethodRequest), 23 23 /// Indicates that the the user has triggered the display of a context menu. 24 24 ContextMenu(ContextMenuRequest), ··· 27 27 } 28 28 29 29 #[derive(Clone, Debug, Deserialize, Serialize)] 30 - @@ -61,7 +63,7 @@ 30 + @@ -68,7 +70,7 @@ 31 31 32 32 /// Request to present a context menu to the user. This is triggered by things like 33 33 /// right-clicking on web content. ··· 36 36 pub struct ContextMenuRequest { 37 37 pub element_info: ContextMenuElementInformation, 38 38 pub items: Vec<ContextMenuItem>, 39 - @@ -130,7 +132,7 @@ 39 + @@ -137,7 +139,7 @@ 40 40 /// Request to present an IME to the user when an editable element is focused. If `type` is 41 41 /// [`InputMethodType::Text`], then the `text` parameter specifies the pre-existing text content and 42 42 /// `insertion_point` the zero-based index into the string of the insertion point. ··· 45 45 pub struct InputMethodRequest { 46 46 pub input_method_type: InputMethodType, 47 47 pub text: String, 48 - @@ -144,7 +146,7 @@ 48 + @@ -151,7 +153,7 @@ 49 49 #[derive(Clone, Debug, Deserialize, Serialize)] 50 50 pub struct FilterPattern(pub String); 51 51 ··· 54 54 pub struct FilePickerRequest { 55 55 pub origin: ImmutableOrigin, 56 56 pub current_paths: Vec<PathBuf>, 57 - @@ -153,6 +155,16 @@ 57 + @@ -160,6 +162,16 @@ 58 58 pub accept_current_paths_for_testing: bool, 59 59 } 60 60 ··· 68 68 + pub response_sender: GenericSender<AllowOrDeny>, 69 69 +} 70 70 + 71 + /// Response from the embedder to an [`EmbedderControlRequest`]. 71 72 #[derive(Debug, Deserialize, Serialize)] 72 73 pub enum EmbedderControlResponse { 73 - SelectElement(Option<usize>), 74 - @@ -159,6 +171,7 @@ 74 + @@ -167,6 +179,7 @@ 75 75 ColorPicker(Option<RgbColor>), 76 76 FilePicker(Option<Vec<SelectedFile>>), 77 77 ContextMenu(Option<ContextMenuAction>), ··· 79 79 } 80 80 81 81 /// Response to file selection request 82 - @@ -172,7 +185,7 @@ 83 - pub type_string: String, 82 + @@ -181,7 +194,7 @@ 84 83 } 85 84 85 + /// Request from Servo to the embedder with the details of the simple dialog to be displayed. 86 86 -#[derive(Deserialize, Serialize)] 87 87 +#[derive(Clone, Debug, Deserialize, Serialize)] 88 88 pub enum SimpleDialogRequest {
+3 -3
patches/components/shared/embedder/input_events.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -63,6 +63,17 @@ 3 + @@ -67,6 +67,17 @@ 4 4 pub id: InputEventId, 5 5 } 6 6 ··· 18 18 impl From<InputEvent> for InputEventAndId { 19 19 fn from(event: InputEvent) -> Self { 20 20 Self { 21 - @@ -95,6 +106,31 @@ 21 + @@ -99,6 +110,31 @@ 22 22 InputEvent::Wheel(event) => Some(event.point), 23 23 } 24 24 } ··· 50 50 } 51 51 52 52 #[derive(Clone, Debug, Default, Deserialize, Serialize)] 53 - @@ -229,7 +265,7 @@ 53 + @@ -233,7 +269,7 @@ 54 54 } 55 55 56 56 /// The type of input represented by a multi-touch event.
+15 -22
patches/components/shared/embedder/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -22,7 +22,7 @@ 4 - use std::sync::Arc; 5 - 6 - use base::generic_channel::{GenericCallback, GenericSender, GenericSharedMemory, SendResult}; 7 - -use base::id::{PipelineId, WebViewId}; 8 - +use base::id::{BrowsingContextId, PipelineId, WebViewId}; 9 - use crossbeam_channel::Sender; 10 - use euclid::{Box2D, Point2D, Scale, Size2D, Vector2D}; 11 - use http::{HeaderMap, Method, StatusCode}; 12 - @@ -31,6 +31,7 @@ 13 - use malloc_size_of_derive::MallocSizeOf; 14 - use pixels::SharedRasterImage; 15 - use serde::{Deserialize, Deserializer, Serialize, Serializer}; 3 + @@ -32,7 +32,8 @@ 4 + use servo_base::generic_channel::{ 5 + GenericCallback, GenericSender, GenericSharedMemory, SendResult, 6 + }; 7 + -use servo_base::id::{PipelineId, WebViewId}; 8 + +use servo_base::id::{BrowsingContextId, PipelineId, WebViewId}; 16 9 +use servo_config::pref_util::PrefValue; 17 10 use servo_geometry::{DeviceIndependentIntRect, DeviceIndependentIntSize}; 18 11 use servo_url::ServoUrl; 19 12 use strum::{EnumMessage, IntoStaticStr}; 20 - @@ -65,6 +66,31 @@ 13 + @@ -67,6 +68,31 @@ 21 14 Self::Page(point) => *point * scale, 22 15 } 23 16 } ··· 49 42 } 50 43 51 44 impl From<DevicePoint> for WebViewPoint { 52 - @@ -317,9 +343,16 @@ 45 + @@ -319,9 +345,16 @@ 53 46 /// The size of the layout viewport. 54 47 pub size: Size2D<f32, CSSPixel>, 55 48 ··· 68 61 } 69 62 70 63 impl ViewportDetails { 71 - @@ -339,7 +372,7 @@ 64 + @@ -341,7 +374,7 @@ 72 65 } 73 66 74 67 /// An opaque identifier for a single history traversal operation. ··· 77 70 pub struct TraversalId(String); 78 71 79 72 impl TraversalId { 80 - @@ -349,6 +382,12 @@ 73 + @@ -351,6 +384,12 @@ 81 74 } 82 75 } 83 76 ··· 90 83 #[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq, Serialize, MallocSizeOf)] 91 84 pub enum PixelFormat { 92 85 /// Luminance channel only 93 - @@ -422,6 +461,12 @@ 86 + @@ -424,6 +463,12 @@ 94 87 } 95 88 } 96 89 ··· 103 96 /// Messages towards the embedder. 104 97 #[derive(Deserialize, IntoStaticStr, Serialize)] 105 98 pub enum EmbedderMsg { 106 - @@ -447,6 +492,21 @@ 99 + @@ -449,6 +494,21 @@ 107 100 ), 108 101 /// Whether or not to allow script to open a new tab/browser 109 102 AllowOpeningWebView(WebViewId, GenericSender<Option<NewWebViewDetails>>), ··· 125 118 /// A webview was destroyed. 126 119 WebViewClosed(WebViewId), 127 120 /// A webview potentially gained focus for keyboard events. 128 - @@ -528,6 +588,24 @@ 121 + @@ -530,6 +590,24 @@ 129 122 InputEventsHandled(WebViewId, Vec<InputEventOutcome>), 130 123 /// Send the embedder an accessibility tree update. 131 124 AccessibilityTreeUpdate(WebViewId, accesskit::TreeUpdate), ··· 150 143 } 151 144 152 145 impl Debug for EmbedderMsg { 153 - @@ -1084,6 +1162,54 @@ 146 + @@ -1086,6 +1164,54 @@ 154 147 WebViewDoesNotExist, 155 148 } 156 149 ··· 205 198 #[derive(Clone, Copy, Debug, Deserialize, Serialize)] 206 199 pub struct RgbColor { 207 200 pub red: u8, 208 - @@ -1130,3 +1256,26 @@ 201 + @@ -1132,3 +1258,26 @@ 209 202 pub viewport_details: ViewportDetails, 210 203 pub user_content_manager_id: Option<UserContentManagerId>, 211 204 }
+10
patches/components/shared/layout/lib.rs.patch
··· 1 + --- original 2 + +++ modified 3 + @@ -56,6 +56,7 @@ 4 + use style::str::char_is_whitespace; 5 + use style::stylesheets::{DocumentStyleSheet, Stylesheet}; 6 + use style::stylist::Stylist; 7 + +#[cfg(debug_assertions)] 8 + use style::thread_state::{self, ThreadState}; 9 + use style::values::computed::Overflow; 10 + use style_traits::CSSPixel;
+5 -5
patches/components/shared/paint/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -10,7 +10,7 @@ 4 - use base::Epoch; 5 - use base::id::{PainterId, PipelineId, WebViewId}; 3 + @@ -8,7 +8,7 @@ 4 + use std::fmt::{Debug, Error, Formatter}; 5 + 6 6 use crossbeam_channel::Sender; 7 7 -use embedder_traits::{AnimationState, EventLoopWaker}; 8 8 +use embedder_traits::{AnimationState, EventLoopWaker, InputEventAndId}; ··· 10 10 use log::warn; 11 11 use malloc_size_of_derive::MallocSizeOf; 12 12 @@ -39,7 +39,7 @@ 13 - use profile_traits::mem::{OpaqueSender, ReportsChan}; 14 - use serde::{Deserialize, Serialize}; 13 + self, GenericCallback, GenericReceiver, GenericSender, GenericSharedMemory, 14 + }; 15 15 pub use webrender_api::ExternalImageSource; 16 16 -use webrender_api::units::{DevicePixel, LayoutVector2D, TexelRect}; 17 17 +use webrender_api::units::{DevicePixel, DeviceRect, LayoutVector2D, TexelRect};
+3 -3
patches/components/shared/script/lib.rs.patch
··· 1 1 --- original 2 2 +++ modified 3 - @@ -21,8 +21,8 @@ 4 - use bluetooth_traits::BluetoothRequest; 3 + @@ -13,8 +13,8 @@ 4 + 5 5 use canvas_traits::webgl::WebGLPipeline; 6 6 use constellation_traits::{ 7 7 - KeyboardScroll, LoadData, NavigationHistoryBehavior, ScriptToConstellationSender, ··· 11 11 }; 12 12 use crossbeam_channel::RecvTimeoutError; 13 13 use devtools_traits::ScriptToDevtoolsControlMsg; 14 - @@ -30,7 +30,7 @@ 14 + @@ -22,7 +22,7 @@ 15 15 use embedder_traits::{ 16 16 EmbedderControlId, EmbedderControlResponse, FocusSequenceNumber, InputEventAndId, 17 17 JavaScriptEvaluationId, MediaSessionActionType, PaintHitTestResult, ScriptToEmbedderChan,