aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock135
-rw-r--r--components/dom_struct/lib.rs1
-rw-r--r--components/script/Cargo.toml3
-rw-r--r--components/script/dom/testbindingproxy.rs4
-rw-r--r--components/script/dom/webidls/Window.webidl3
-rw-r--r--components/script/dom/webidls/WindowProxy.webidl7
-rw-r--r--components/script_plugins/Cargo.toml4
-rw-r--r--components/script_plugins/lib.rs9
-rw-r--r--components/script_plugins/webidl_must_inherit.rs222
9 files changed, 369 insertions, 19 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 72d0c9ca162..f400c75e2af 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -66,8 +66,11 @@ dependencies = [
[[package]]
name = "ansi_term"
-version = "0.10.2"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "antidote"
@@ -118,6 +121,14 @@ version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "ascii-canvas"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "atomic_refcell"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -224,7 +235,7 @@ dependencies = [
"cexpr 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
"clang-sys 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "clap 2.28.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"env_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
"hashbrown 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -238,6 +249,19 @@ dependencies = [
]
[[package]]
+name = "bit-set"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "bitflags"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -464,7 +488,7 @@ name = "cbindgen"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "clap 2.28.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -528,14 +552,14 @@ dependencies = [
[[package]]
name = "clap"
-version = "2.28.0"
+version = "2.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"vec_map 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1011,6 +1035,11 @@ dependencies = [
]
[[package]]
+name = "diff"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "digest"
version = "0.7.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1044,6 +1073,18 @@ dependencies = [
]
[[package]]
+name = "docopt"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "dom_struct"
version = "0.0.1"
dependencies = [
@@ -1114,6 +1155,14 @@ dependencies = [
]
[[package]]
+name = "ena"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "encoding_rs"
version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2191,6 +2240,35 @@ version = "3.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "lalrpop"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ena 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.16.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.80 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "layout"
version = "0.0.1"
dependencies = [
@@ -3593,6 +3671,9 @@ dependencies = [
[[package]]
name = "script_plugins"
version = "0.0.1"
+dependencies = [
+ "webidl 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "script_plugins_tests"
@@ -4232,7 +4313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strsim"
-version = "0.6.0"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -4408,6 +4489,15 @@ dependencies = [
]
[[package]]
+name = "term"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "termcolor"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4427,7 +4517,7 @@ dependencies = [
[[package]]
name = "textwrap"
-version = "0.9.0"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-width 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -4963,6 +5053,15 @@ dependencies = [
]
[[package]]
+name = "webidl"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lalrpop 0.16.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.16.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "webrender"
version = "0.60.0"
source = "git+https://github.com/servo/webrender#e53aae02728e155e555b8baa9d180d90dac3b86f"
@@ -5263,7 +5362,7 @@ dependencies = [
"checksum android_injected_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "80b9e34fcbf29c0563547cb2ecce9b49504597cad6166769b1e4efb45c6c2951"
"checksum android_log-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b8052e2d8aabbb8d556d6abbcce2a22b9590996c5f849b9c7ce4544a2e3b984e"
"checksum android_logger 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cf44378e81264148f08e58336674542f82d0021f685d0be0320c82e1653dbe0b"
-"checksum ansi_term 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6b3568b48b7cefa6b8ce125f9bb4989e52fbcc29ebea88df04cc7c5f12f70455"
+"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
"checksum antidote 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5"
"checksum app_units 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9dadc668390b373e73e4abbfc1f07238b09a25858f2f39c06cebc6d8e141d774"
"checksum approx 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f71f10b5c4946a64aad7b8cf65e3406cd3da22fc448595991d22423cf6db67b4"
@@ -5271,6 +5370,7 @@ dependencies = [
"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
"checksum arrayvec 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2f0ef4a9820019a0c91d918918c93dc71d469f581a49b47ddc1d285d4270bbe2"
"checksum ascii 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae7d751998c189c1d4468cf0a39bb2eae052a9c58d50ebb3b9591ee3813ad50"
+"checksum ascii-canvas 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b385d69402821a1c254533a011a312531cbcc0e3e24f19bbb4747a5a2daf37e2"
"checksum atomic_refcell 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fb2dcb6e6d35f20276943cc04bb98e538b348d525a04ac79c10021561d202f21"
"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
"checksum azure 0.35.0 (git+https://github.com/servo/rust-azure)" = "<none>"
@@ -5281,6 +5381,8 @@ dependencies = [
"checksum binary-space-partition 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "88ceb0d16c4fd0e42876e298d7d3ce3780dd9ebdcbe4199816a32c77e08597ff"
"checksum bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bda13183df33055cbb84b847becce220d392df502ebe7a4a78d7021771ed94d0"
"checksum bindgen 0.49.0 (registry+https://github.com/rust-lang/crates.io-index)" = "33e1b67a27bca31fd12a683b2a3618e275311117f48cfcc892e18403ff889026"
+"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
+"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb"
"checksum bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d0c54bb8f454c567f21197eefcdbf5679d0bd99f2ddbe52e84c77061952e6789"
"checksum block 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
"checksum block-buffer 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a076c298b9ecdb530ed9d967e74a6027d6a7478924520acddcddc24c1c8ab3ab"
@@ -5310,7 +5412,7 @@ dependencies = [
"checksum cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "55e7ec0b74fe5897894cbc207092c577e87c52f8a59e8ca8d97ef37551f60a49"
"checksum chrono 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1cce36c92cb605414e9b824f866f5babe0a0368e39ea07393b9b63cf3844c0e6"
"checksum clang-sys 0.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4227269cec09f5f83ff160be12a1e9b0262dd1aa305302d5ba296c2ebd291055"
-"checksum clap 2.28.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dc34bf7d5d66268b466b9852bca925ec1d2650654dab4da081e63fd230145c2e"
+"checksum clap 2.32.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b957d88f4b6a63b9d70d5f454ac8011819c6efa7727858f458ab71c756ce2d3e"
"checksum clipboard 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7"
"checksum clipboard-win 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "14cc3e6c075926b96490d5f90d4a5af7be8012a4d8a8698e619655085a7641a3"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
@@ -5344,15 +5446,18 @@ dependencies = [
"checksum deflate 0.7.19 (registry+https://github.com/rust-lang/crates.io-index)" = "8a6abb26e16e8d419b5c78662aa9f82857c2386a073da266840e474d5055ec86"
"checksum derive_more 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3f57d78cf3bd45270dad4e70c21ec77a960b36c7a841ff9db76aaa775a8fb871"
"checksum device 0.0.1 (git+https://github.com/servo/devices)" = "<none>"
+"checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a"
"checksum digest 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "03b072242a8cbaf9c145665af9d250c59af3b958f83ed6824e13533cf76d5b90"
"checksum digest 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "05f47366984d3ad862010e22c7ce81a7dbcaebbdfb37241a620f8b6596ee135c"
"checksum dirs 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "37a76dd8b997af7107d0bb69d43903cf37153a18266f8b3fdb9911f28efb5444"
"checksum dlib 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "77e51249a9d823a4cb79e3eca6dcd756153e8ed0157b6c04775d04bf1b13b76a"
+"checksum docopt 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "db2906c2579b5b7207fc1e328796a9a8835dc44e22dbe8e460b1d636f9a7b225"
"checksum downcast-rs 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "18df8ce4470c189d18aa926022da57544f31e154631eb4cfe796aea97051fe6c"
"checksum dtoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90"
"checksum dtoa-short 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fe6f727b406462fd57c95fed84d1b0dbfb5f0136fcac005adba9ea0367c05cc8"
"checksum dwrote 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c31c624339dab99c223a4b26c2e803b7c248adaca91549ce654c76f39a03f5c8"
"checksum either 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "18785c1ba806c258137c937e44ada9ee7e69a37e3c72077542cd2f069d78562a"
+"checksum ena 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f56c93cc076508c549d9bb747f79aa9b4eb098be7b8cad8830c3137ef52d1e00"
"checksum encoding_rs 0.8.12 (registry+https://github.com/rust-lang/crates.io-index)" = "ca20350a7cb5aab5b9034731123d6d412caf3e92d4985e739e411ba0955fd0eb"
"checksum energy-monitor 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fe872d0664f1cc60db36349af245d892ee67d3c8f78055df0ebc43271fd4e05c"
"checksum energymon 0.3.0 (git+https://github.com/energymon/energymon-rust.git)" = "<none>"
@@ -5450,6 +5555,8 @@ dependencies = [
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
"checksum keyboard-types 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "53b536dc22c0dabb295e85dbd0c062023885b12b8db24e1d86833f4e50ea7959"
"checksum khronos_api 3.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "62237e6d326bd5871cd21469323bf096de81f1618cd82cbaf5d87825335aeb49"
+"checksum lalrpop 0.16.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4e2e80bee40b22bca46665b4ef1f3cd88ed0fb043c971407eac17a0712c02572"
+"checksum lalrpop-util 0.16.3 (registry+https://github.com/rust-lang/crates.io-index)" = "33b27d8490dbe1f9704b0088d61e8d46edc10d5673a8829836c6ded26a9912c7"
"checksum lazy_static 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a374c89b9db55895453a74c1e38861d9deec0b01b405a82516e9d5de4820dea1"
"checksum lazycell 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d33a48d0365c96081958cc663eef834975cb1e8d8bea3378513fc72bdbf11e50"
"checksum leak 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bd100e01f1154f2908dfa7d02219aeab25d0b9c7fa955164192e3245255a0c73"
@@ -5594,15 +5701,16 @@ dependencies = [
"checksum string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25d70109977172b127fe834e5449e5ab1740b9ba49fa18a2020f509174f25423"
"checksum string_cache_codegen 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "1eea1eee654ef80933142157fdad9dd8bc43cf7c74e999e369263496f04ff4da"
"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
-"checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
+"checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
"checksum swapper 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e454d048db5527d000bfddb77bd072bbf3a1e2ae785f16d9bd116e07c2ab45eb"
"checksum syn 0.15.22 (registry+https://github.com/rust-lang/crates.io-index)" = "ae8b29eb5210bc5cf63ed6149cbf9adfc82ac0be023d8735c176ee74a2db4da7"
"checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015"
"checksum tempfile 3.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "47776f63b85777d984a50ce49d6b9e58826b6a3766a449fc95bc66cd5663c15b"
"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b"
+"checksum term 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "fa63644f74ce96fbeb9b794f66aff2a52d601cbd5e80f4b97123e3899f4570f1"
"checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f"
"checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096"
-"checksum textwrap 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0b59b6b4b44d867f1370ef1bd91bfb262bf07bf0ae65c202ea2fbc16153b693"
+"checksum textwrap 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "307686869c93e71f94da64286f9a9524c0f308a9e1c87a583de8e9c9039ad3f6"
"checksum thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
"checksum thread_profiler 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5920e77802b177479ab5795767fa48e68f61b2f516c2ac0041e2978dd8efe483"
@@ -5657,6 +5765,7 @@ dependencies = [
"checksum wayland-scanner 0.21.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f1927ee62e4e149c010dc9eca8ca47e238416cd6f45f688eb9f8a8e9c3794c30"
"checksum wayland-sys 0.21.4 (registry+https://github.com/rust-lang/crates.io-index)" = "ca41ed78a12256f81df6f53fcbe4503213ba442e02cdad3c9c888a64a668eaf4"
"checksum webdriver 0.39.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0533b0b0a05e2e5c081317759a038482806c6085c9605dded03c8bbd2498b042"
+"checksum webidl 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d0f807f7488d680893f7188aa09d7672a3a0a8461975a098a2edf0a52e3fee29"
"checksum webrender 0.60.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum webrender_api 0.60.0 (git+https://github.com/servo/webrender)" = "<none>"
"checksum webrender_build 0.0.1 (git+https://github.com/servo/webrender)" = "<none>"
diff --git a/components/dom_struct/lib.rs b/components/dom_struct/lib.rs
index 2fdac787706..59a3cf8072c 100644
--- a/components/dom_struct/lib.rs
+++ b/components/dom_struct/lib.rs
@@ -19,6 +19,7 @@ pub fn dom_struct(args: TokenStream, input: TokenStream) -> TokenStream {
#[derive(DenyPublicFields, DomObject, JSTraceable, MallocSizeOf)]
#[must_root]
#[repr(C)]
+ #[webidl]
};
// Work around https://github.com/rust-lang/rust/issues/46489
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index 8076d77b7bb..c6dc04c6004 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -17,7 +17,8 @@ debugmozjs = ['js/debugmozjs']
profilemozjs = ['js/profilemozjs']
unstable = []
unrooted_must_root_lint = ["script_plugins/unrooted_must_root_lint"]
-default = ["unrooted_must_root_lint"]
+webidl_lint = ["script_plugins/webidl_lint"]
+default = ["unrooted_must_root_lint", "webidl_lint"]
webgl_backtrace = ["backtrace", "canvas_traits/webgl_backtrace"]
js_backtrace = ["backtrace"]
diff --git a/components/script/dom/testbindingproxy.rs b/components/script/dom/testbindingproxy.rs
index 46134a3393f..3b352acb097 100644
--- a/components/script/dom/testbindingproxy.rs
+++ b/components/script/dom/testbindingproxy.rs
@@ -5,13 +5,13 @@
// check-tidy: no specs after this line
use crate::dom::bindings::codegen::Bindings::TestBindingProxyBinding::TestBindingProxyMethods;
-use crate::dom::bindings::reflector::Reflector;
use crate::dom::bindings::str::DOMString;
+use crate::dom::testbinding::TestBinding;
use dom_struct::dom_struct;
#[dom_struct]
pub struct TestBindingProxy {
- reflector_: Reflector,
+ testbinding_: TestBinding,
}
impl TestBindingProxyMethods for TestBindingProxy {
diff --git a/components/script/dom/webidls/Window.webidl b/components/script/dom/webidls/Window.webidl
index 1679fa42887..81ffee9283e 100644
--- a/components/script/dom/webidls/Window.webidl
+++ b/components/script/dom/webidls/Window.webidl
@@ -72,9 +72,6 @@
Window implements GlobalEventHandlers;
Window implements WindowEventHandlers;
-[NoInterfaceObject]
-interface WindowProxy {};
-
// https://html.spec.whatwg.org/multipage/#Window-partial
partial interface Window {
void captureEvents();
diff --git a/components/script/dom/webidls/WindowProxy.webidl b/components/script/dom/webidls/WindowProxy.webidl
new file mode 100644
index 00000000000..897f86c295b
--- /dev/null
+++ b/components/script/dom/webidls/WindowProxy.webidl
@@ -0,0 +1,7 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// https://html.spec.whatwg.org/multipage/#the-windowproxy-exotic-object
+[NoInterfaceObject]
+interface WindowProxy {};
diff --git a/components/script_plugins/Cargo.toml b/components/script_plugins/Cargo.toml
index c6bc3eb2250..1999b3e8e82 100644
--- a/components/script_plugins/Cargo.toml
+++ b/components/script_plugins/Cargo.toml
@@ -11,3 +11,7 @@ plugin = true
[features]
unrooted_must_root_lint = []
+webidl_lint = []
+
+[dependencies]
+webidl = "0.8"
diff --git a/components/script_plugins/lib.rs b/components/script_plugins/lib.rs
index 36c81ce6239..7d0460bf5a1 100644
--- a/components/script_plugins/lib.rs
+++ b/components/script_plugins/lib.rs
@@ -25,12 +25,17 @@ extern crate rustc;
extern crate rustc_plugin;
extern crate syntax;
+extern crate webidl;
+
use rustc_plugin::Registry;
use syntax::feature_gate::AttributeType::Whitelisted;
#[cfg(feature = "unrooted_must_root_lint")]
mod unrooted_must_root;
+#[cfg(feature = "webidl_lint")]
+mod webidl_must_inherit;
+
/// Utilities for writing plugins
#[cfg(feature = "unrooted_must_root_lint")]
mod utils;
@@ -40,7 +45,11 @@ pub fn plugin_registrar(reg: &mut Registry) {
#[cfg(feature = "unrooted_must_root_lint")]
reg.register_late_lint_pass(Box::new(unrooted_must_root::UnrootedPass::new()));
+ #[cfg(feature = "webidl_lint")]
+ reg.register_late_lint_pass(Box::new(webidl_must_inherit::WebIdlPass::new()));
+
reg.register_attribute("allow_unrooted_interior".to_string(), Whitelisted);
reg.register_attribute("allow_unrooted_in_rc".to_string(), Whitelisted);
reg.register_attribute("must_root".to_string(), Whitelisted);
+ reg.register_attribute("webidl".to_string(), Whitelisted);
}
diff --git a/components/script_plugins/webidl_must_inherit.rs b/components/script_plugins/webidl_must_inherit.rs
new file mode 100644
index 00000000000..89233bb943e
--- /dev/null
+++ b/components/script_plugins/webidl_must_inherit.rs
@@ -0,0 +1,222 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use rustc::hir::{self, HirId};
+use rustc::lint::{LateContext, LateLintPass, LintArray, LintContext, LintPass};
+use rustc::ty;
+use std::boxed;
+use std::env;
+use std::error::Error;
+use std::fmt;
+use std::fs;
+use std::io;
+use std::path;
+use syntax::ast;
+use webidl::ast::*;
+use webidl::visitor::*;
+use webidl::*;
+
+declare_lint!(
+ WEBIDL_INHERIT_CORRECT,
+ Deny,
+ "Warn and report usage of incorrect webidl inheritance"
+);
+
+pub struct WebIdlPass;
+
+#[derive(Clone, Debug)]
+pub struct ParentMismatchError {
+ name: String,
+ rust_parent: String,
+ webidl_parent: String,
+}
+
+impl fmt::Display for ParentMismatchError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(
+ f,
+ "webidl-rust inheritance mismatch, rust: {:?}, rust parent: {:?}, webidl parent: {:?}",
+ self.name, self.rust_parent, self.webidl_parent
+ )
+ }
+}
+
+impl Error for ParentMismatchError {
+ fn description(&self) -> &str {
+ "ParentMismatchError"
+ }
+
+ fn cause(&self) -> Option<&Error> {
+ None
+ }
+}
+
+impl WebIdlPass {
+ pub fn new() -> WebIdlPass {
+ WebIdlPass
+ }
+}
+
+fn get_ty_name(ty: &str) -> &str {
+ if let Some(i) = ty.rfind(':') {
+ &ty[i + 1..]
+ } else {
+ ty
+ }
+}
+
+fn get_webidl_path(struct_name: &str) -> io::Result<path::PathBuf> {
+ let mut dir = env::current_dir()?;
+ dir.push("components/script/dom/webidls/");
+ dir.push(format!("{}.webidl", struct_name));
+
+ Ok(dir)
+}
+
+fn is_webidl_ty(cx: &LateContext, ty: &ty::TyS) -> bool {
+ let mut ret = false;
+ ty.maybe_walk(|t| {
+ match t.sty {
+ ty::Adt(did, _substs) => {
+ if cx.tcx.has_attr(did.did, "webidl") {
+ ret = true;
+ }
+ false
+ },
+ ty::Ref(..) => false, // don't recurse down &ptrs
+ ty::RawPtr(..) => false, // don't recurse down *ptrs
+ ty::FnDef(..) | ty::FnPtr(_) => false,
+ _ => true,
+ }
+ });
+ ret
+}
+
+fn check_inherits(code: &str, name: &str, parent_name: &str) -> Result<(), Box<Error>> {
+ let idl = parse_string(code)?;
+ let mut visitor = InterfaceVisitor::new(name.to_string());
+ visitor.visit(&idl);
+ let inherits = visitor.get_inherits();
+
+ if inherits == parent_name {
+ return Ok(());
+ }
+
+ // If there is no parent, first field must be of type Reflector.
+ if inherits == "" && parent_name == "Reflector" {
+ return Ok(());
+ }
+
+ if inherits == "" &&
+ name == "PaintRenderingContext2D" &&
+ parent_name == "CanvasRenderingContext2D"
+ {
+ // PaintRenderingContext2D embeds a CanvasRenderingContext2D
+ // instead of a Reflector as an optimization,
+ // but this is fine since CanvasRenderingContext2D
+ // also has a reflector
+ return Ok(());
+ }
+
+ Err(boxed::Box::from(ParentMismatchError {
+ name: name.to_string(),
+ rust_parent: parent_name.to_string(),
+ webidl_parent: inherits.to_string(),
+ }))
+}
+
+fn check_webidl(name: &str, parent_name: &Option<String>) -> Result<(), Box<Error>> {
+ let path = get_webidl_path(&name)?;
+ if let Some(parent) = parent_name {
+ let code = fs::read_to_string(path)?;
+ return check_inherits(&code, name, &parent);
+ }
+
+ Ok(())
+}
+
+impl LintPass for WebIdlPass {
+ fn name(&self) -> &'static str {
+ "ServoWebIDLPass"
+ }
+
+ fn get_lints(&self) -> LintArray {
+ lint_array!(WEBIDL_INHERIT_CORRECT)
+ }
+}
+
+impl<'a, 'tcx> LateLintPass<'a, 'tcx> for WebIdlPass {
+ fn check_struct_def(
+ &mut self,
+ cx: &LateContext<'a, 'tcx>,
+ def: &'tcx hir::VariantData,
+ n: ast::Name,
+ _gen: &'tcx hir::Generics,
+ id: HirId,
+ ) {
+ let def_id = cx.tcx.hir().local_def_id_from_hir_id(id);
+ if !is_webidl_ty(cx, cx.tcx.type_of(def_id)) {
+ return;
+ }
+
+ let item = match cx.tcx.hir().get_by_hir_id(id) {
+ hir::Node::Item(item) => item,
+ _ => cx
+ .tcx
+ .hir()
+ .expect_item_by_hir_id(cx.tcx.hir().get_parent_item(id)),
+ };
+
+ let parent_name = def.fields().iter().next().map(|field| {
+ let def_id = cx.tcx.hir().local_def_id_from_hir_id(field.hir_id);
+ let ty = cx.tcx.type_of(def_id).to_string();
+ get_ty_name(&ty).to_string()
+ });
+
+ let struct_name = n.to_string();
+ match check_webidl(&struct_name, &parent_name) {
+ Ok(()) => {},
+ Err(e) => {
+ let description = format!("{}", e);
+ cx.span_lint(WEBIDL_INHERIT_CORRECT, item.ident.span, &description)
+ },
+ };
+ }
+}
+
+struct InterfaceVisitor {
+ name: String,
+ inherits: String,
+}
+
+impl InterfaceVisitor {
+ pub fn new(name: String) -> Self {
+ InterfaceVisitor {
+ name: name,
+ inherits: String::new(),
+ }
+ }
+
+ pub fn get_inherits(&self) -> &String {
+ &self.inherits
+ }
+}
+
+impl<'ast> ImmutableVisitor<'ast> for InterfaceVisitor {
+ fn visit_callback_interface(&mut self, callback_interface: &'ast CallbackInterface) {
+ if callback_interface.name == self.name {
+ if let Some(ref inherit) = callback_interface.inherits {
+ self.inherits = inherit.to_string()
+ }
+ }
+ }
+
+ fn visit_non_partial_interface(&mut self, non_partial_interface: &'ast NonPartialInterface) {
+ if non_partial_interface.name == self.name {
+ if let Some(ref inherit) = non_partial_interface.inherits {
+ self.inherits = inherit.to_string()
+ }
+ }
+ }
+}