mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Auto merge of #21029 - asajeffrey:smup, r=Manishearth,nox
Upgrade to SM 60 <!-- Please describe your changes on the following line: --> This is the mozjs_sys smup PR. Depends on https://github.com/servo/mozjs/pull/138 and https://github.com/servo/rust-mozjs/pull/430. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #20585 <!-- Either: --> - [X] These changes do not require tests because the existing tests will ensure SM is still working <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21029) <!-- Reviewable:end -->
This commit is contained in:
commit
5c8ede4b05
290 changed files with 26572 additions and 1178 deletions
|
@ -44,13 +44,19 @@ matrix:
|
|||
- ./mach clean-nightlies --keep 2 --force
|
||||
- ./mach clean-cargo-cache --keep 2 --force
|
||||
env:
|
||||
CC=gcc-6
|
||||
CXX=g++-6
|
||||
CCACHE=/usr/bin/ccache
|
||||
RUSTFLAGS=-Dwarnings
|
||||
CARGO_INCREMENTAL=0
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- autoconf2.13
|
||||
- cmake
|
||||
- g++-6
|
||||
- gperf
|
||||
- libosmesa6-dev
|
||||
- libgles2-mesa-dev
|
||||
|
|
78
Cargo.lock
generated
78
Cargo.lock
generated
|
@ -116,7 +116,7 @@ dependencies = [
|
|||
"euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-skia 0.30000019.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-skia 0.30000019.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -138,7 +138,7 @@ name = "backtrace-sys"
|
|||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -315,7 +315,7 @@ name = "bzip2-sys"
|
|||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -369,7 +369,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.5"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
|
@ -458,7 +458,7 @@ name = "cmake"
|
|||
version = "0.1.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -1106,7 +1106,7 @@ dependencies = [
|
|||
"fontsan 0.4.0 (git+https://github.com/servo/fontsan)",
|
||||
"freetype 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gfx_traits 0.0.1",
|
||||
"harfbuzz-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"harfbuzz-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"ipc-channel 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1426,7 +1426,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "harfbuzz-sys"
|
||||
version = "0.2.0"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cmake 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1646,7 +1646,7 @@ name = "jemalloc-sys"
|
|||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -1851,7 +1851,7 @@ name = "libloading"
|
|||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"winapi 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -1903,7 +1903,7 @@ version = "0.0.1"
|
|||
dependencies = [
|
||||
"android_injected_glue 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"android_logger 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gl_generator 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"jni 0.10.2 (git+https://github.com/paulrouget/jni-rs?branch=return_javavm)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1918,7 +1918,7 @@ name = "libz-sys"
|
|||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -1977,7 +1977,7 @@ dependencies = [
|
|||
"hashglobe 0.1.0",
|
||||
"hyper 0.10.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"hyper_serde 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"selectors 0.19.0",
|
||||
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"serde_bytes 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2108,7 +2108,7 @@ name = "miniz-sys"
|
|||
version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -2126,7 +2126,7 @@ name = "miniz_oxide_c_api"
|
|||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"crc 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"miniz_oxide 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2168,33 +2168,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "mozangle"
|
||||
version = "0.1.6"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mozjs"
|
||||
version = "0.7.2"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs_sys 0.51.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs_sys 0.60.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mozjs_sys"
|
||||
version = "0.51.4"
|
||||
version = "0.60.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bindgen 0.37.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -2342,7 +2342,7 @@ version = "0.11.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"bitflags 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2488,7 +2488,7 @@ name = "openssl-sys"
|
|||
version = "0.9.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -2949,8 +2949,8 @@ dependencies = [
|
|||
"mime 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mime_guess 1.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mitochondria 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozangle 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"mozjs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"msg 0.0.1",
|
||||
"net_traits 0.0.1",
|
||||
"num-traits 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3172,12 +3172,12 @@ version = "0.2.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-fontconfig-sys 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-fontconfig-sys 4.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "servo-fontconfig-sys"
|
||||
version = "4.0.4"
|
||||
version = "4.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"expat-sys 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3241,7 +3241,7 @@ source = "git+https://github.com/servo/media#7a5c334698aa1e8a9cf95c5bd761e4a3148
|
|||
|
||||
[[package]]
|
||||
name = "servo-skia"
|
||||
version = "0.30000019.0"
|
||||
version = "0.30000019.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cgl 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -3254,7 +3254,7 @@ dependencies = [
|
|||
"io-surface 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-fontconfig-sys 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-fontconfig-sys 4.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"x11 2.17.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -3611,7 +3611,7 @@ dependencies = [
|
|||
name = "task_info"
|
||||
version = "0.0.1"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3702,7 +3702,7 @@ name = "tinyfiledialogs"
|
|||
version = "3.3.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.42 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
|
@ -3775,7 +3775,7 @@ name = "unicode-script"
|
|||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"harfbuzz-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"harfbuzz-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -4259,7 +4259,7 @@ dependencies = [
|
|||
"checksum bzip2 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "42b7c3cbf0fa9c1b82308d57191728ca0256cb821220f4e2fd410a72ade26e3b"
|
||||
"checksum bzip2-sys 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2c5162604199bbb17690ede847eaa6120a3f33d5ab4dcc8e7c25b16d849ae79b"
|
||||
"checksum caseless 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "808dab3318747be122cb31d36de18d4d1c81277a76f8332a02b81a3d73463d7f"
|
||||
"checksum cc 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "9be26b24e988625409b19736d130f0c7d224f01d06454b5f81d8d23d6c1a618f"
|
||||
"checksum cc 1.0.18 (registry+https://github.com/rust-lang/crates.io-index)" = "2119ea4867bd2b8ed3aecab467709720b2d55b1bcfe09f772fd68066eaf15275"
|
||||
"checksum cesu8 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
|
||||
"checksum cexpr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "393a5f0088efbe41f9d1fcd062f24e83c278608420e62109feb2c8abee07de7d"
|
||||
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
||||
|
@ -4347,7 +4347,7 @@ dependencies = [
|
|||
"checksum gstreamer-video-sys 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3ed798787e78a0f1c8be06bd3adcab03f962f049a820743aae9f690f56a0d538"
|
||||
"checksum gvr-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1334b94d8ce67319ddc44663daef53d8c1538629a11562530c981dbd9085b9a"
|
||||
"checksum half 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "63d68db75012a85555434ee079e7e6337931f87a087ab2988becbadf64673a7f"
|
||||
"checksum harfbuzz-sys 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bad27f59fc853bb88eca58088d469cd365ff0ccf362d24c4b1c0cbb1b21b3489"
|
||||
"checksum harfbuzz-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87a29ce223fee4727c0c4810a1419a3412f65b29146339fb6a47ee39456c34ea"
|
||||
"checksum heartbeats-simple 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "9ad003ce233955e9d95f2c69cde84e68302ba9ba4a673d351c9bff93c738aadc"
|
||||
"checksum heartbeats-simple-sys 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e1a408c0011427cc0e0049f7861c70377819aedfc006e8c901b1c70fd98fb1a4"
|
||||
"checksum histogram 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1bdcec4094c1ca961b685384ea7af76af5718230b3f34657d1a71fd2dcf4cc9d"
|
||||
|
@ -4402,9 +4402,9 @@ dependencies = [
|
|||
"checksum mio 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "75f72a93f046f1517e3cfddc0a096eb756a2ba727d36edc8227dee769a50a9b0"
|
||||
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
|
||||
"checksum mitochondria 1.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9de3eca27871df31c33b807f834b94ef7d000956f57aa25c5aed9c5f0aae8f6f"
|
||||
"checksum mozangle 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1f0583e6792917f498bb3a7440f777a59353102063445ab7f5e9d1dc4ed593aa"
|
||||
"checksum mozjs 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "80dd8534ffde916e3567d28483815857efcab1f27153b405892eba9b6a0fa3cd"
|
||||
"checksum mozjs_sys 0.51.4 (registry+https://github.com/rust-lang/crates.io-index)" = "74fd4388f18e64881a63ff773edd77dec47adf63bfd6a3055e5f106e1f7c9eaf"
|
||||
"checksum mozangle 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "45a8a18a41cfab0fde25cc2f43ea89064d211a0fbb33225b8ff93ab20406e0e7"
|
||||
"checksum mozjs 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b22188a0f231af946345b63add64ff4989bcd2d41fe6f4399267af8372c6932"
|
||||
"checksum mozjs_sys 0.60.0 (registry+https://github.com/rust-lang/crates.io-index)" = "10042595a89595789dbfb5a9a55004c9ba467dc3b03990efeeceaac306669674"
|
||||
"checksum mp3-metadata 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ab5f1d2693586420208d1200ce5a51cd44726f055b635176188137aff42c7de"
|
||||
"checksum mp4parse 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7316728464443fe5793a805dde3257864e9690cf46374daff3ce93de1df2f254"
|
||||
"checksum msdos_time 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aad9dfe950c057b1bfe9c1f2aa51583a8468ef2a5baba2ebbe06d775efeb7729"
|
||||
|
@ -4483,13 +4483,13 @@ dependencies = [
|
|||
"checksum serde_json 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "5c508584d9913df116b91505eec55610a2f5b16e9ed793c46e4d0152872b3e74"
|
||||
"checksum servo-egl 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "21069a884c33fe6ee596975e1f3849ed88c4ec857fbaf11d33672d8ebe051217"
|
||||
"checksum servo-fontconfig 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "93f799b649b4a2bf362398910eca35240704c7e765e780349b2bb1070d892262"
|
||||
"checksum servo-fontconfig-sys 4.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "38b494f03009ee81914b0e7d387ad7c145cafcd69747c2ec89b0e17bb94f303a"
|
||||
"checksum servo-fontconfig-sys 4.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b0aa080856db55f188aaf36f01cae8c03448a6056552adb77d461179e44e1a14"
|
||||
"checksum servo-freetype-sys 4.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9232032c2e85118c0282c6562c84cab12316e655491ba0a5d1905b2320060d1b"
|
||||
"checksum servo-media 0.1.0 (git+https://github.com/servo/media)" = "<none>"
|
||||
"checksum servo-media-audio 0.1.0 (git+https://github.com/servo/media)" = "<none>"
|
||||
"checksum servo-media-gstreamer 0.1.0 (git+https://github.com/servo/media)" = "<none>"
|
||||
"checksum servo-media-player 0.1.0 (git+https://github.com/servo/media)" = "<none>"
|
||||
"checksum servo-skia 0.30000019.0 (registry+https://github.com/rust-lang/crates.io-index)" = "00e9a17304c6181d04fdd76c2deecac41878cc929879a068711462b0e593b669"
|
||||
"checksum servo-skia 0.30000019.1 (registry+https://github.com/rust-lang/crates.io-index)" = "82eddddcf9512dd7c60eccdb486e60e5bd4930afaa4da2d7d4afdff75950fb88"
|
||||
"checksum servo_media_derive 0.1.0 (git+https://github.com/servo/media)" = "<none>"
|
||||
"checksum sha1 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "cc30b1e1e8c40c121ca33b86c23308a090d19974ef001b4bf6e61fd1a0fb095c"
|
||||
"checksum shared_library 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8254bf098ce4d8d7cc7cc6de438c5488adc5297e5b7ffef88816c0a91bd289c1"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
version: 1.0.{build}
|
||||
image: Visual Studio 2017
|
||||
|
||||
environment:
|
||||
CCACHE_DIR: "%APPVEYOR_BUILD_FOLDER%\\.ccache"
|
||||
|
@ -48,6 +49,7 @@ install:
|
|||
- appveyor-retry appveyor DownloadFile https://gstreamer.freedesktop.org/data/pkg/windows/1.14.1/gstreamer-1.0-x86_64-1.14.1.msi
|
||||
- msiexec /i gstreamer-1.0-devel-x86_64-1.14.1.msi /quiet /qn /norestart /log install-devel.log
|
||||
- msiexec /i gstreamer-1.0-x86_64-1.14.1.msi /quiet /qn /norestart /log install.log
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
|
||||
- appveyor-retry appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
|
||||
- rustup-init.exe -y --default-host x86_64-pc-windows-msvc --default-toolchain none
|
||||
- set PATH=%PATH%;C:\Users\appveyor\.cargo\bin
|
||||
|
|
|
@ -29,7 +29,7 @@ euclid = "0.19"
|
|||
hashglobe = { path = "../hashglobe" }
|
||||
hyper = { version = "0.10", optional = true }
|
||||
hyper_serde = { version = "0.8", optional = true }
|
||||
mozjs = { version = "0.7.1", features = ["promises"], optional = true }
|
||||
mozjs = { version = "0.8.0", optional = true }
|
||||
selectors = { path = "../selectors" }
|
||||
serde = { version = "1.0.27", optional = true }
|
||||
serde_bytes = { version = "0.10", optional = true }
|
||||
|
|
|
@ -65,7 +65,7 @@ metrics = {path = "../metrics"}
|
|||
mitochondria = "1.1.2"
|
||||
mime = "0.2.1"
|
||||
mime_guess = "1.8.0"
|
||||
mozjs = { version = "0.7.1", features = ["promises"]}
|
||||
mozjs = "0.8.0"
|
||||
msg = {path = "../msg"}
|
||||
net_traits = {path = "../net_traits"}
|
||||
num-traits = "0.2"
|
||||
|
|
|
@ -5,8 +5,6 @@
|
|||
use dom::bindings::refcounted::Trusted;
|
||||
use dom::bindings::reflector::DomObject;
|
||||
use dom::bindings::structuredclone::StructuredCloneData;
|
||||
use js::jsapi::{JSRuntime, JS_RequestInterruptCallback};
|
||||
use js::rust::Runtime;
|
||||
use script_runtime::CommonScriptMsg;
|
||||
|
||||
/// Messages used to control the worker event loops
|
||||
|
@ -28,25 +26,3 @@ impl<T: DomObject> SimpleWorkerErrorHandler<T> {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub struct SharedRt {
|
||||
rt: *mut JSRuntime
|
||||
}
|
||||
|
||||
impl SharedRt {
|
||||
pub fn new(rt: &Runtime) -> SharedRt {
|
||||
SharedRt {
|
||||
rt: rt.rt()
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
pub fn request_interrupt(&self) {
|
||||
unsafe {
|
||||
JS_RequestInterruptCallback(self.rt);
|
||||
}
|
||||
}
|
||||
}
|
||||
#[allow(unsafe_code)]
|
||||
unsafe impl Send for SharedRt {}
|
||||
|
|
|
@ -11,7 +11,7 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
|
|||
use dom::bindings::root::DomRoot;
|
||||
use dom::window::Window;
|
||||
use dom_struct::dom_struct;
|
||||
use js::jsapi::{DetachDataDisposition, Heap, JSAutoCompartment, JSContext, JSObject};
|
||||
use js::jsapi::{Heap, JSAutoCompartment, JSContext, JSObject};
|
||||
use js::jsapi::JS_GetArrayBufferViewBuffer;
|
||||
use js::rust::CustomAutoRooterGuard;
|
||||
use js::rust::wrappers::JS_DetachArrayBuffer;
|
||||
|
@ -167,7 +167,7 @@ impl AudioBuffer {
|
|||
JS_GetArrayBufferViewBuffer(cx, channel.handle(), &mut is_shared));
|
||||
// This buffer is always created unshared
|
||||
debug_assert!(!is_shared);
|
||||
let _ = JS_DetachArrayBuffer(cx, view_buffer.handle(), DetachDataDisposition::KeepData);
|
||||
let _ = JS_DetachArrayBuffer(cx, view_buffer.handle());
|
||||
data
|
||||
} else {
|
||||
return None;
|
||||
|
|
|
@ -1775,7 +1775,7 @@ class AttrDefiner(PropertyDefiner):
|
|||
if len(array) == 0:
|
||||
return ""
|
||||
|
||||
flags = "JSPROP_ENUMERATE | JSPROP_SHARED"
|
||||
flags = "JSPROP_ENUMERATE"
|
||||
if self.unforgeable:
|
||||
flags += " | JSPROP_PERMANENT"
|
||||
|
||||
|
@ -1822,15 +1822,18 @@ class AttrDefiner(PropertyDefiner):
|
|||
' JSPropertySpec {\n'
|
||||
' name: %s as *const u8 as *const libc::c_char,\n'
|
||||
' flags: (%s) as u8,\n'
|
||||
' getter: %s,\n'
|
||||
' setter: %s\n'
|
||||
' }',
|
||||
' JSPropertySpec {\n'
|
||||
' name: 0 as *const libc::c_char,\n'
|
||||
' flags: 0,\n'
|
||||
' getter: JSNativeWrapper { op: None, info: 0 as *const JSJitInfo },\n'
|
||||
' setter: JSNativeWrapper { op: None, info: 0 as *const JSJitInfo }\n'
|
||||
' __bindgen_anon_1: JSPropertySpec__bindgen_ty_1 {\n'
|
||||
' accessors: JSPropertySpec__bindgen_ty_1__bindgen_ty_1 {\n'
|
||||
' getter: JSPropertySpec__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1 {\n'
|
||||
' native: %s,\n'
|
||||
' },\n'
|
||||
' setter: JSPropertySpec__bindgen_ty_1__bindgen_ty_1__bindgen_ty_2 {\n'
|
||||
' native: %s,\n'
|
||||
' }\n'
|
||||
' }\n'
|
||||
' }\n'
|
||||
' }',
|
||||
' JSPropertySpec::ZERO',
|
||||
'JSPropertySpec',
|
||||
PropertyDefiner.getControllingCondition, specData)
|
||||
|
||||
|
@ -2124,7 +2127,7 @@ class CGDOMJSClass(CGThing):
|
|||
"domClass": DOMClass(self.descriptor),
|
||||
"enumerateHook": "None",
|
||||
"finalizeHook": FINALIZE_HOOK_NAME,
|
||||
"flags": "0",
|
||||
"flags": "JSCLASS_FOREGROUND_FINALIZE",
|
||||
"name": str_to_const_array(self.descriptor.interface.identifier.name),
|
||||
"resolveHook": "None",
|
||||
"slots": "1",
|
||||
|
@ -2133,7 +2136,7 @@ class CGDOMJSClass(CGThing):
|
|||
if self.descriptor.isGlobal():
|
||||
assert not self.descriptor.weakReferenceable
|
||||
args["enumerateHook"] = "Some(enumerate_global)"
|
||||
args["flags"] = "JSCLASS_IS_GLOBAL | JSCLASS_DOM_GLOBAL"
|
||||
args["flags"] = "JSCLASS_IS_GLOBAL | JSCLASS_DOM_GLOBAL | JSCLASS_FOREGROUND_FINALIZE"
|
||||
args["slots"] = "JSCLASS_GLOBAL_SLOT_COUNT + 1"
|
||||
args["resolveHook"] = "Some(resolve_global)"
|
||||
args["traceHook"] = "js::jsapi::JS_GlobalObjectTraceHook"
|
||||
|
@ -2143,9 +2146,8 @@ class CGDOMJSClass(CGThing):
|
|||
static CLASS_OPS: js::jsapi::JSClassOps = js::jsapi::JSClassOps {
|
||||
addProperty: None,
|
||||
delProperty: None,
|
||||
getProperty: None,
|
||||
setProperty: None,
|
||||
enumerate: %(enumerateHook)s,
|
||||
newEnumerate: None,
|
||||
resolve: %(resolveHook)s,
|
||||
mayResolve: None,
|
||||
finalize: Some(%(finalizeHook)s),
|
||||
|
@ -2583,10 +2585,11 @@ def CreateBindingJSObject(descriptor, parent=None):
|
|||
let handler = RegisterBindings::PROXY_HANDLERS[PrototypeList::Proxies::%s as usize];
|
||||
rooted!(in(cx) let private = PrivateValue(raw as *const libc::c_void));
|
||||
let obj = NewProxyObject(cx, handler,
|
||||
private.handle(),
|
||||
Handle::from_raw(UndefinedHandleValue),
|
||||
proto.get(), %s.get(),
|
||||
ptr::null_mut(), ptr::null_mut());
|
||||
assert!(!obj.is_null());
|
||||
SetProxyReservedSlot(obj, 0, &private.get());
|
||||
rooted!(in(cx) let obj = obj);\
|
||||
""" % (descriptor.name, parent)
|
||||
else:
|
||||
|
@ -2594,11 +2597,13 @@ rooted!(in(cx) let obj = obj);\
|
|||
" cx, &Class.base as *const JSClass, proto.handle()));\n"
|
||||
"assert!(!obj.is_null());\n"
|
||||
"\n"
|
||||
"JS_SetReservedSlot(obj.get(), DOM_OBJECT_SLOT,\n"
|
||||
" PrivateValue(raw as *const libc::c_void));")
|
||||
"let val = PrivateValue(raw as *const libc::c_void);\n"
|
||||
"\n"
|
||||
"JS_SetReservedSlot(obj.get(), DOM_OBJECT_SLOT, &val);")
|
||||
if descriptor.weakReferenceable:
|
||||
create += """
|
||||
JS_SetReservedSlot(obj.get(), DOM_WEAK_SLOT, PrivateValue(ptr::null()));"""
|
||||
let val = PrivateValue(ptr::null());
|
||||
JS_SetReservedSlot(obj.get(), DOM_WEAK_SLOT, &val);"""
|
||||
return create
|
||||
|
||||
|
||||
|
@ -2652,9 +2657,10 @@ ensure_expando_object(cx, obj.handle().into(), expando.handle_mut());
|
|||
else:
|
||||
copyFunc = "JS_InitializePropertiesFromCompatibleNativeObject"
|
||||
copyCode += """\
|
||||
let mut slot = UndefinedValue();
|
||||
JS_GetReservedSlot(proto.get(), DOM_PROTO_UNFORGEABLE_HOLDER_SLOT, &mut slot);
|
||||
rooted!(in(cx) let mut unforgeable_holder = ptr::null_mut::<JSObject>());
|
||||
unforgeable_holder.handle_mut().set(
|
||||
JS_GetReservedSlot(proto.get(), DOM_PROTO_UNFORGEABLE_HOLDER_SLOT).to_object());
|
||||
unforgeable_holder.handle_mut().set(slot.to_object());
|
||||
assert!(%(copyFunc)s(cx, %(obj)s.handle(), unforgeable_holder.handle()));
|
||||
""" % {'copyFunc': copyFunc, 'obj': obj}
|
||||
|
||||
|
@ -3013,7 +3019,7 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
|
|||
CGGeneric(fill(
|
||||
"""
|
||||
assert!(${defineFn}(cx, prototype.handle(), ${prop}, aliasedVal.handle(),
|
||||
JSPROP_ENUMERATE, None, None));
|
||||
JSPROP_ENUMERATE as u32));
|
||||
""",
|
||||
defineFn=defineFn,
|
||||
prop=prop))
|
||||
|
@ -3078,8 +3084,8 @@ assert!(!unforgeable_holder.is_null());
|
|||
""" % {'holderClass': holderClass, 'holderProto': holderProto}))
|
||||
code.append(InitUnforgeablePropertiesOnHolder(self.descriptor, self.properties))
|
||||
code.append(CGGeneric("""\
|
||||
JS_SetReservedSlot(prototype.get(), DOM_PROTO_UNFORGEABLE_HOLDER_SLOT,
|
||||
ObjectValue(unforgeable_holder.get()))"""))
|
||||
let val = ObjectValue(unforgeable_holder.get());
|
||||
JS_SetReservedSlot(prototype.get(), DOM_PROTO_UNFORGEABLE_HOLDER_SLOT, &val)"""))
|
||||
|
||||
return CGList(code, "\n")
|
||||
|
||||
|
@ -3533,11 +3539,13 @@ class CGAbstractStaticBindingMethod(CGAbstractMethod):
|
|||
self.exposureSet = descriptor.interface.exposureSet
|
||||
|
||||
def definition_body(self):
|
||||
preamble = "let global = GlobalScope::from_object(JS_CALLEE(cx, vp).to_object());\n"
|
||||
preamble = """\
|
||||
let args = CallArgs::from_vp(vp, argc);
|
||||
let global = GlobalScope::from_object(args.callee());
|
||||
"""
|
||||
if len(self.exposureSet) == 1:
|
||||
preamble += """
|
||||
let global = DomRoot::downcast::<dom::types::%s>(global).unwrap();
|
||||
""" % list(self.exposureSet)[0]
|
||||
preamble += ("let global = DomRoot::downcast::<dom::types::%s>(global).unwrap();\n" %
|
||||
list(self.exposureSet)[0])
|
||||
return CGList([CGGeneric(preamble), self.generate_code()])
|
||||
|
||||
def generate_code(self):
|
||||
|
@ -3741,7 +3749,7 @@ class CGSpecializedReplaceableSetter(CGSpecializedSetter):
|
|||
assert all(ord(c) < 128 for c in name)
|
||||
return CGGeneric("""\
|
||||
JS_DefineProperty(cx, obj, %s as *const u8 as *const libc::c_char,
|
||||
HandleValue::from_raw(args.get(0)), JSPROP_ENUMERATE, None, None)""" % name)
|
||||
HandleValue::from_raw(args.get(0)), JSPROP_ENUMERATE as u32)""" % name)
|
||||
|
||||
|
||||
class CGMemberJITInfo(CGThing):
|
||||
|
@ -4959,7 +4967,9 @@ class CGProxyUnwrap(CGAbstractMethod):
|
|||
obj = js::UnwrapObject(obj);
|
||||
}*/
|
||||
//MOZ_ASSERT(IsProxy(obj));
|
||||
let box_ = GetProxyPrivate(obj.get()).to_private() as *const %s;
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyReservedSlot(obj.get(), 0, &mut slot);
|
||||
let box_ = slot.to_private() as *const %s;
|
||||
return box_;""" % self.descriptor.concreteType)
|
||||
|
||||
|
||||
|
@ -4985,7 +4995,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
|
|||
attrs += " | JSPROP_READONLY"
|
||||
# FIXME(#11868) Should assign to desc.value, desc.get() is a copy.
|
||||
fillDescriptor = ("desc.get().value = result_root.get();\n"
|
||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), %s);\n"
|
||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
||||
"return true;" % attrs)
|
||||
templateValues = {
|
||||
'jsvalRef': 'result_root.handle_mut()',
|
||||
|
@ -5011,7 +5021,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
|
|||
attrs = "0"
|
||||
# FIXME(#11868) Should assign to desc.value, desc.get() is a copy.
|
||||
fillDescriptor = ("desc.get().value = result_root.get();\n"
|
||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), %s);\n"
|
||||
"fill_property_descriptor(MutableHandle::from_raw(desc), proxy.get(), (%s) as u32);\n"
|
||||
"return true;" % attrs)
|
||||
templateValues = {
|
||||
'jsvalRef': 'result_root.handle_mut()',
|
||||
|
@ -5425,7 +5435,9 @@ finalize_global(obj);
|
|||
"""
|
||||
elif descriptor.weakReferenceable:
|
||||
release += """\
|
||||
let weak_box_ptr = JS_GetReservedSlot(obj, DOM_WEAK_SLOT).to_private() as *mut WeakBox<%s>;
|
||||
let mut slot = UndefinedValue();
|
||||
JS_GetReservedSlot(obj, DOM_WEAK_SLOT, &mut slot);
|
||||
let weak_box_ptr = slot.to_private() as *mut WeakBox<%s>;
|
||||
if !weak_box_ptr.is_null() {
|
||||
let count = {
|
||||
let weak_box = &*weak_box_ptr;
|
||||
|
@ -5736,6 +5748,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
|||
'js::jsapi::INTERNED_STRING_TO_JSID',
|
||||
'js::jsapi::IsCallable',
|
||||
'js::jsapi::JSAutoCompartment',
|
||||
'js::jsapi::JSCLASS_FOREGROUND_FINALIZE',
|
||||
'js::jsapi::JSCLASS_RESERVED_SLOTS_SHIFT',
|
||||
'js::jsapi::JSClass',
|
||||
'js::jsapi::JSContext',
|
||||
|
@ -5757,8 +5770,11 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
|||
'js::jsapi::JSPROP_ENUMERATE',
|
||||
'js::jsapi::JSPROP_PERMANENT',
|
||||
'js::jsapi::JSPROP_READONLY',
|
||||
'js::jsapi::JSPROP_SHARED',
|
||||
'js::jsapi::JSPropertySpec',
|
||||
'js::jsapi::JSPropertySpec__bindgen_ty_1',
|
||||
'js::jsapi::JSPropertySpec__bindgen_ty_1__bindgen_ty_1',
|
||||
'js::jsapi::JSPropertySpec__bindgen_ty_1__bindgen_ty_1__bindgen_ty_1',
|
||||
'js::jsapi::JSPropertySpec__bindgen_ty_1__bindgen_ty_1__bindgen_ty_2',
|
||||
'js::jsapi::JSString',
|
||||
'js::jsapi::JSTracer',
|
||||
'js::jsapi::JSType',
|
||||
|
@ -5778,7 +5794,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
|||
'js::rust::wrappers::JS_GetProperty',
|
||||
'js::jsapi::JS_GetPropertyById',
|
||||
'js::jsapi::JS_GetPropertyDescriptorById',
|
||||
'js::jsapi::JS_GetReservedSlot',
|
||||
'js::glue::JS_GetReservedSlot',
|
||||
'js::jsapi::JS_HasProperty',
|
||||
'js::jsapi::JS_HasPropertyById',
|
||||
'js::rust::wrappers::JS_InitializePropertiesFromCompatibleNativeObject',
|
||||
|
@ -5813,12 +5829,14 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
|
|||
'js::jsval::ObjectOrNullValue',
|
||||
'js::jsval::PrivateValue',
|
||||
'js::jsval::UndefinedValue',
|
||||
'js::jsapi::UndefinedHandleValue',
|
||||
'js::glue::AppendToAutoIdVector',
|
||||
'js::glue::CallJitGetterOp',
|
||||
'js::glue::CallJitMethodOp',
|
||||
'js::glue::CallJitSetterOp',
|
||||
'js::glue::CreateProxyHandler',
|
||||
'js::glue::GetProxyPrivate',
|
||||
'js::glue::GetProxyReservedSlot',
|
||||
'js::glue::SetProxyReservedSlot',
|
||||
'js::rust::wrappers::NewProxyObject',
|
||||
'js::glue::ProxyTraps',
|
||||
'js::glue::RUST_JSID_IS_INT',
|
||||
|
|
|
@ -61,8 +61,6 @@ pub unsafe fn define_constants(
|
|||
obj,
|
||||
spec.name.as_ptr() as *const libc::c_char,
|
||||
value.handle(),
|
||||
JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT,
|
||||
None,
|
||||
None));
|
||||
(JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT) as u32));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,12 +45,13 @@ pub use js::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvert
|
|||
pub use js::conversions::ConversionBehavior;
|
||||
use js::conversions::latin1_to_string;
|
||||
use js::error::throw_type_error;
|
||||
use js::glue::{GetProxyPrivate, IsWrapper};
|
||||
use js::glue::{IsWrapper, UnwrapObject};
|
||||
use js::glue::{RUST_JSID_IS_INT, RUST_JSID_TO_INT};
|
||||
use js::glue::{UnwrapObject, RUST_JSID_IS_STRING, RUST_JSID_TO_STRING};
|
||||
use js::glue::{RUST_JSID_IS_STRING, RUST_JSID_TO_STRING};
|
||||
use js::glue::GetProxyReservedSlot;
|
||||
use js::glue::JS_GetReservedSlot;
|
||||
use js::jsapi::{Heap, JSContext, JSObject, JSString};
|
||||
use js::jsapi::{JS_GetLatin1StringCharsAndLength, JS_GetReservedSlot};
|
||||
use js::jsapi::{JS_GetTwoByteStringCharsAndLength, JS_IsExceptionPending};
|
||||
use js::jsapi::{JS_GetLatin1StringCharsAndLength, JS_GetTwoByteStringCharsAndLength, JS_IsExceptionPending};
|
||||
use js::jsapi::{JS_NewStringCopyN, JS_StringHasLatin1Chars};
|
||||
use js::jsval::{ObjectValue, StringValue, UndefinedValue};
|
||||
use js::rust::{HandleId, HandleObject, HandleValue, MutableHandleValue};
|
||||
|
@ -347,11 +348,12 @@ pub const DOM_OBJECT_SLOT: u32 = 0;
|
|||
|
||||
/// Get the private pointer of a DOM object from a given reflector.
|
||||
pub unsafe fn private_from_object(obj: *mut JSObject) -> *const libc::c_void {
|
||||
let value = if is_dom_object(obj) {
|
||||
JS_GetReservedSlot(obj, DOM_OBJECT_SLOT)
|
||||
let mut value = UndefinedValue();
|
||||
if is_dom_object(obj) {
|
||||
JS_GetReservedSlot(obj, DOM_OBJECT_SLOT, &mut value);
|
||||
} else {
|
||||
debug_assert!(is_dom_proxy(obj));
|
||||
GetProxyPrivate(obj)
|
||||
GetProxyReservedSlot(obj, 0, &mut value);
|
||||
};
|
||||
if value.is_undefined() {
|
||||
ptr::null()
|
||||
|
|
|
@ -157,7 +157,7 @@ impl ErrorInfo {
|
|||
}
|
||||
|
||||
let filename = {
|
||||
let filename = (*report).filename as *const u8;
|
||||
let filename = (*report)._base.filename as *const u8;
|
||||
if !filename.is_null() {
|
||||
let length = (0..).find(|idx| *filename.offset(*idx) == 0).unwrap();
|
||||
let filename = from_raw_parts(filename, length as usize);
|
||||
|
@ -167,14 +167,14 @@ impl ErrorInfo {
|
|||
}
|
||||
};
|
||||
|
||||
let lineno = (*report).lineno;
|
||||
let column = (*report).column;
|
||||
let lineno = (*report)._base.lineno;
|
||||
let column = (*report)._base.column;
|
||||
|
||||
let message = {
|
||||
let message = (*report).ucmessage;
|
||||
let message = (*report)._base.message_.data_ as *const u8;
|
||||
let length = (0..).find(|idx| *message.offset(*idx) == 0).unwrap();
|
||||
let message = from_raw_parts(message, length as usize);
|
||||
String::from_utf16_lossy(message)
|
||||
String::from_utf8_lossy(message).into_owned()
|
||||
};
|
||||
|
||||
Some(ErrorInfo {
|
||||
|
|
|
@ -16,7 +16,7 @@ use js::jsapi::{Class, ClassOps, CompartmentOptions};
|
|||
use js::jsapi::{GetGlobalForObjectCrossCompartment, GetWellKnownSymbol};
|
||||
use js::jsapi::{JSAutoCompartment, JSClass, JSContext, JSFunctionSpec, JSObject, JSFUN_CONSTRUCTOR};
|
||||
use js::jsapi::{JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_RESOLVING};
|
||||
use js::jsapi::{JSPropertySpec, JSString, JSTracer, JSVersion, JS_AtomizeAndPinString};
|
||||
use js::jsapi::{JSPropertySpec, JSString, JSTracer, JS_AtomizeAndPinString};
|
||||
use js::jsapi::{JS_GetFunctionObject, JS_NewFunction, JS_NewGlobalObject};
|
||||
use js::jsapi::{JS_NewObject, JS_NewPlainObject};
|
||||
use js::jsapi::{JS_NewStringCopyN, JS_SetReservedSlot};
|
||||
|
@ -27,11 +27,12 @@ use js::jsapi::MutableHandleValue as RawMutableHandleValue;
|
|||
use js::jsval::{JSVal, PrivateValue};
|
||||
use js::rust::{HandleObject, HandleValue, MutableHandleObject};
|
||||
use js::rust::{define_methods, define_properties, get_object_class};
|
||||
use js::rust::wrappers::{JS_DefineProperty, JS_DefineProperty1, JS_DefineProperty2};
|
||||
use js::rust::wrappers::{JS_DefineProperty4, JS_DefinePropertyById3};
|
||||
use js::rust::wrappers::{JS_DefineProperty, JS_DefineProperty2};
|
||||
use js::rust::wrappers::{JS_DefineProperty3, JS_DefineProperty4, JS_DefinePropertyById4};
|
||||
use js::rust::wrappers::{JS_FireOnNewGlobalObject, JS_GetPrototype};
|
||||
use js::rust::wrappers::{JS_LinkConstructorAndPrototype, JS_NewObjectWithUniqueType};
|
||||
use libc;
|
||||
use std::convert::TryFrom;
|
||||
use std::ptr;
|
||||
|
||||
/// The class of a non-callback interface object.
|
||||
|
@ -92,9 +93,8 @@ impl InterfaceConstructorBehavior {
|
|||
InterfaceConstructorBehavior(ClassOps {
|
||||
addProperty: None,
|
||||
delProperty: None,
|
||||
getProperty: None,
|
||||
setProperty: None,
|
||||
enumerate: None,
|
||||
newEnumerate: None,
|
||||
resolve: None,
|
||||
mayResolve: None,
|
||||
finalize: None,
|
||||
|
@ -110,9 +110,8 @@ impl InterfaceConstructorBehavior {
|
|||
InterfaceConstructorBehavior(ClassOps {
|
||||
addProperty: None,
|
||||
delProperty: None,
|
||||
getProperty: None,
|
||||
setProperty: None,
|
||||
enumerate: None,
|
||||
newEnumerate: None,
|
||||
resolve: None,
|
||||
mayResolve: None,
|
||||
finalize: None,
|
||||
|
@ -138,7 +137,6 @@ pub unsafe fn create_global_object(
|
|||
assert!(rval.is_null());
|
||||
|
||||
let mut options = CompartmentOptions::default();
|
||||
options.behaviors_.version_ = JSVersion::JSVERSION_ECMA_5;
|
||||
options.creationOptions_.traceGlobal_ = Some(trace);
|
||||
options.creationOptions_.sharedMemoryAndAtomics_ = true;
|
||||
|
||||
|
@ -151,12 +149,12 @@ pub unsafe fn create_global_object(
|
|||
|
||||
// Initialize the reserved slots before doing anything that can GC, to
|
||||
// avoid getting trace hooks called on a partially initialized object.
|
||||
JS_SetReservedSlot(rval.get(), DOM_OBJECT_SLOT, PrivateValue(private));
|
||||
let private_val = PrivateValue(private);
|
||||
JS_SetReservedSlot(rval.get(), DOM_OBJECT_SLOT, &private_val);
|
||||
let proto_array: Box<ProtoOrIfaceArray> =
|
||||
Box::new([0 as *mut JSObject; PrototypeList::PROTO_OR_IFACE_LENGTH]);
|
||||
JS_SetReservedSlot(rval.get(),
|
||||
DOM_PROTOTYPE_SLOT,
|
||||
PrivateValue(Box::into_raw(proto_array) as *const libc::c_void));
|
||||
let val = PrivateValue(Box::into_raw(proto_array) as *const libc::c_void);
|
||||
JS_SetReservedSlot(rval.get(), DOM_PROTOTYPE_SLOT, &val);
|
||||
|
||||
let _ac = JSAutoCompartment::new(cx, rval.get());
|
||||
JS_FireOnNewGlobalObject(cx, rval.handle());
|
||||
|
@ -197,9 +195,9 @@ pub unsafe fn create_interface_prototype_object(
|
|||
assert!(!unscopable_symbol.is_null());
|
||||
|
||||
rooted!(in(cx) let unscopable_id = RUST_SYMBOL_TO_JSID(unscopable_symbol));
|
||||
assert!(JS_DefinePropertyById3(
|
||||
assert!(JS_DefinePropertyById4(
|
||||
cx, rval.handle(), unscopable_id.handle(), unscopable_obj.handle(),
|
||||
JSPROP_READONLY, None, None))
|
||||
JSPROP_READONLY as u32))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -225,7 +223,7 @@ pub unsafe fn create_noncallback_interface_object(
|
|||
rval);
|
||||
assert!(JS_LinkConstructorAndPrototype(cx, rval.handle(), interface_prototype_object));
|
||||
define_name(cx, rval.handle(), name);
|
||||
define_length(cx, rval.handle(), length);
|
||||
define_length(cx, rval.handle(), i32::try_from(length).expect("overflow"));
|
||||
define_on_global_object(cx, global, name, rval.handle());
|
||||
}
|
||||
|
||||
|
@ -249,13 +247,11 @@ pub unsafe fn create_named_constructors(
|
|||
constructor.set(JS_GetFunctionObject(fun));
|
||||
assert!(!constructor.is_null());
|
||||
|
||||
assert!(JS_DefineProperty1(cx,
|
||||
assert!(JS_DefineProperty2(cx,
|
||||
constructor.handle(),
|
||||
b"prototype\0".as_ptr() as *const libc::c_char,
|
||||
interface_prototype_object,
|
||||
JSPROP_PERMANENT | JSPROP_READONLY,
|
||||
None,
|
||||
None));
|
||||
(JSPROP_PERMANENT | JSPROP_READONLY) as u32));
|
||||
|
||||
define_on_global_object(cx, global, name, constructor.handle());
|
||||
}
|
||||
|
@ -329,12 +325,11 @@ pub unsafe fn define_on_global_object(
|
|||
name: &[u8],
|
||||
obj: HandleObject) {
|
||||
assert_eq!(*name.last().unwrap(), b'\0');
|
||||
assert!(JS_DefineProperty1(cx,
|
||||
assert!(JS_DefineProperty2(cx,
|
||||
global,
|
||||
name.as_ptr() as *const libc::c_char,
|
||||
obj,
|
||||
JSPROP_RESOLVING,
|
||||
None, None));
|
||||
JSPROP_RESOLVING));
|
||||
}
|
||||
|
||||
const OBJECT_OPS: ObjectOps = ObjectOps {
|
||||
|
@ -345,16 +340,13 @@ const OBJECT_OPS: ObjectOps = ObjectOps {
|
|||
setProperty: None,
|
||||
getOwnPropertyDescriptor: None,
|
||||
deleteProperty: None,
|
||||
watch: None,
|
||||
unwatch: None,
|
||||
getElements: None,
|
||||
enumerate: None,
|
||||
funToString: Some(fun_to_string_hook),
|
||||
};
|
||||
|
||||
unsafe extern "C" fn fun_to_string_hook(cx: *mut JSContext,
|
||||
obj: RawHandleObject,
|
||||
_indent: u32)
|
||||
_is_to_source: bool)
|
||||
-> *mut JSString {
|
||||
let js_class = get_object_class(obj.get());
|
||||
assert!(!js_class.is_null());
|
||||
|
@ -444,9 +436,7 @@ unsafe fn create_unscopable_object(
|
|||
rval.handle(),
|
||||
name.as_ptr() as *const libc::c_char,
|
||||
HandleValue::from_raw(TrueHandleValue),
|
||||
JSPROP_READONLY,
|
||||
None,
|
||||
None
|
||||
JSPROP_READONLY as u32,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@ -455,21 +445,19 @@ unsafe fn define_name(cx: *mut JSContext, obj: HandleObject, name: &[u8]) {
|
|||
assert_eq!(*name.last().unwrap(), b'\0');
|
||||
rooted!(in(cx) let name = JS_AtomizeAndPinString(cx, name.as_ptr() as *const libc::c_char));
|
||||
assert!(!name.is_null());
|
||||
assert!(JS_DefineProperty2(cx,
|
||||
assert!(JS_DefineProperty3(cx,
|
||||
obj,
|
||||
b"name\0".as_ptr() as *const libc::c_char,
|
||||
name.handle().into(),
|
||||
JSPROP_READONLY,
|
||||
None, None));
|
||||
JSPROP_READONLY as u32));
|
||||
}
|
||||
|
||||
unsafe fn define_length(cx: *mut JSContext, obj: HandleObject, length: u32) {
|
||||
unsafe fn define_length(cx: *mut JSContext, obj: HandleObject, length: i32) {
|
||||
assert!(JS_DefineProperty4(cx,
|
||||
obj,
|
||||
b"length\0".as_ptr() as *const libc::c_char,
|
||||
length,
|
||||
JSPROP_READONLY,
|
||||
None, None));
|
||||
JSPROP_READONLY as u32));
|
||||
}
|
||||
|
||||
unsafe extern "C" fn invalid_constructor(
|
||||
|
|
|
@ -5,10 +5,13 @@
|
|||
//! The `MozMap` (open-ended dictionary) type.
|
||||
|
||||
use dom::bindings::conversions::jsid_to_string;
|
||||
use dom::bindings::error::report_pending_exception;
|
||||
use dom::bindings::str::DOMString;
|
||||
use js::conversions::{ConversionResult, FromJSValConvertible, ToJSValConvertible};
|
||||
use js::jsapi::JSContext;
|
||||
use js::jsapi::JSITER_HIDDEN;
|
||||
use js::jsapi::JSITER_OWNONLY;
|
||||
use js::jsapi::JSITER_SYMBOLS;
|
||||
use js::jsapi::JSPROP_ENUMERATE;
|
||||
use js::jsapi::JS_NewPlainObject;
|
||||
use js::jsval::ObjectValue;
|
||||
|
@ -58,7 +61,13 @@ impl<T, C> FromJSValConvertible for MozMap<T>
|
|||
|
||||
rooted!(in(cx) let object = value.to_object());
|
||||
let ids = IdVector::new(cx);
|
||||
assert!(GetPropertyKeys(cx, object.handle(), JSITER_OWNONLY, ids.get()));
|
||||
if !GetPropertyKeys(cx, object.handle(), JSITER_OWNONLY | JSITER_HIDDEN | JSITER_SYMBOLS, ids.get()) {
|
||||
// TODO: can GetPropertyKeys fail?
|
||||
// (it does so if the object has duplicate keys)
|
||||
// https://github.com/servo/servo/issues/21462
|
||||
report_pending_exception(cx, false);
|
||||
return Ok(ConversionResult::Failure("Getting MozMap value property keys failed".into()));
|
||||
}
|
||||
|
||||
let mut map = HashMap::new();
|
||||
for id in &*ids {
|
||||
|
@ -74,8 +83,11 @@ impl<T, C> FromJSValConvertible for MozMap<T>
|
|||
ConversionResult::Failure(message) => return Ok(ConversionResult::Failure(message)),
|
||||
};
|
||||
|
||||
let key = jsid_to_string(cx, id.handle()).unwrap();
|
||||
map.insert(key, property);
|
||||
// TODO: Is this guaranteed to succeed?
|
||||
// https://github.com/servo/servo/issues/21463
|
||||
if let Some(key) = jsid_to_string(cx, id.handle()) {
|
||||
map.insert(key, property);
|
||||
}
|
||||
}
|
||||
|
||||
Ok(ConversionResult::Success(MozMap {
|
||||
|
@ -100,9 +112,7 @@ impl<T: ToJSValConvertible> ToJSValConvertible for MozMap<T> {
|
|||
key.as_ptr(),
|
||||
key.len(),
|
||||
js_value.handle(),
|
||||
JSPROP_ENUMERATE,
|
||||
None,
|
||||
None));
|
||||
JSPROP_ENUMERATE as u32));
|
||||
}
|
||||
|
||||
rval.set(ObjectValue(js_object.handle().get()));
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
|
||||
use dom::bindings::conversions::is_dom_proxy;
|
||||
use dom::bindings::utils::delete_property_by_id;
|
||||
use js::glue::{GetProxyHandler, GetProxyHandlerFamily, SetProxyExtra};
|
||||
use js::glue::GetProxyExtra;
|
||||
use js::glue::{GetProxyHandler, GetProxyHandlerFamily};
|
||||
use js::glue::{GetProxyPrivate, SetProxyPrivate};
|
||||
use js::glue::InvokeGetOwnPropertyDescriptor;
|
||||
use js::jsapi::{DOMProxyShadowsResult, JSContext, JSObject, PropertyDescriptor, JSPROP_GETTER};
|
||||
use js::jsapi::{JSErrNum, JS_StrictPropertyStub, SetDOMProxyInformation};
|
||||
use js::jsapi::{DOMProxyShadowsResult, JSContext, JSObject, PropertyDescriptor};
|
||||
use js::jsapi::{JSErrNum, SetDOMProxyInformation};
|
||||
use js::jsapi::GetObjectProto;
|
||||
use js::jsapi::GetStaticPrototype;
|
||||
use js::jsapi::Handle as RawHandle;
|
||||
|
@ -24,14 +24,13 @@ use js::jsapi::MutableHandle as RawMutableHandle;
|
|||
use js::jsapi::MutableHandleObject as RawMutableHandleObject;
|
||||
use js::jsapi::ObjectOpResult;
|
||||
use js::jsval::ObjectValue;
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::rust::{Handle, HandleObject, MutableHandle, MutableHandleObject};
|
||||
use js::rust::wrappers::JS_AlreadyHasOwnPropertyById;
|
||||
use js::rust::wrappers::JS_NewObjectWithGivenProto;
|
||||
use std::ptr;
|
||||
|
||||
|
||||
static JSPROXYSLOT_EXPANDO: u32 = 0;
|
||||
|
||||
/// Determine if this id shadows any existing properties for this proxy.
|
||||
pub unsafe extern "C" fn shadow_check_callback(cx: *mut JSContext,
|
||||
object: RawHandleObject,
|
||||
|
@ -61,7 +60,6 @@ pub unsafe extern "C" fn shadow_check_callback(cx: *mut JSContext,
|
|||
/// Initialize the infrastructure for DOM proxy objects.
|
||||
pub unsafe fn init() {
|
||||
SetDOMProxyInformation(GetProxyHandlerFamily(),
|
||||
JSPROXYSLOT_EXPANDO,
|
||||
Some(shadow_check_callback));
|
||||
}
|
||||
|
||||
|
@ -99,11 +97,6 @@ pub unsafe extern "C" fn define_property(cx: *mut JSContext,
|
|||
desc: RawHandle<PropertyDescriptor>,
|
||||
result: *mut ObjectOpResult)
|
||||
-> bool {
|
||||
if (desc.get().attrs & JSPROP_GETTER) != 0 && desc.get().setter == Some(JS_StrictPropertyStub) {
|
||||
(*result).code_ = JSErrNum::JSMSG_GETTER_ONLY as ::libc::uintptr_t;
|
||||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let mut expando = ptr::null_mut::<JSObject>());
|
||||
ensure_expando_object(cx, proxy, expando.handle_mut());
|
||||
JS_DefinePropertyById(cx, expando.handle().into(), id, desc, result)
|
||||
|
@ -165,7 +158,8 @@ pub unsafe extern "C" fn get_prototype_if_ordinary(_: *mut JSContext,
|
|||
/// Get the expando object, or null if there is none.
|
||||
pub unsafe fn get_expando_object(obj: RawHandleObject, mut expando: MutableHandleObject) {
|
||||
assert!(is_dom_proxy(obj.get()));
|
||||
let val = GetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO);
|
||||
let ref mut val = UndefinedValue();
|
||||
GetProxyPrivate(obj.get(), val);
|
||||
expando.set(if val.is_undefined() {
|
||||
ptr::null_mut()
|
||||
} else {
|
||||
|
@ -182,7 +176,7 @@ pub unsafe fn ensure_expando_object(cx: *mut JSContext, obj: RawHandleObject, mu
|
|||
expando.set(JS_NewObjectWithGivenProto(cx, ptr::null_mut(), HandleObject::null()));
|
||||
assert!(!expando.is_null());
|
||||
|
||||
SetProxyExtra(obj.get(), JSPROXYSLOT_EXPANDO, &ObjectValue(expando.get()));
|
||||
SetProxyPrivate(obj.get(), &ObjectValue(expando.get()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,14 +11,21 @@ use dom::bindings::reflector::DomObject;
|
|||
use dom::bindings::root::DomRoot;
|
||||
use dom::blob::{Blob, BlobImpl};
|
||||
use dom::globalscope::GlobalScope;
|
||||
use js::glue::CopyJSStructuredCloneData;
|
||||
use js::glue::DeleteJSAutoStructuredCloneBuffer;
|
||||
use js::glue::GetLengthOfJSStructuredCloneData;
|
||||
use js::glue::NewJSAutoStructuredCloneBuffer;
|
||||
use js::glue::WriteBytesToJSStructuredCloneData;
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSStructuredCloneCallbacks, JSStructuredCloneReader, JSStructuredCloneWriter};
|
||||
use js::jsapi::{JS_ClearPendingException, JSObject};
|
||||
use js::jsapi::{JS_ReadBytes, JS_WriteBytes};
|
||||
use js::jsapi::{JS_ReadUint32Pair, JS_WriteUint32Pair};
|
||||
use js::jsapi::CloneDataPolicy;
|
||||
use js::jsapi::HandleObject as RawHandleObject;
|
||||
use js::jsapi::JS_STRUCTURED_CLONE_VERSION;
|
||||
use js::jsapi::MutableHandleObject as RawMutableHandleObject;
|
||||
use js::jsapi::StructuredCloneScope;
|
||||
use js::jsapi::TransferableOwnership;
|
||||
use js::rust::{Handle, HandleValue, MutableHandleValue};
|
||||
use js::rust::wrappers::{JS_WriteStructuredClone, JS_ReadStructuredClone};
|
||||
|
@ -207,26 +214,39 @@ pub enum StructuredCloneData {
|
|||
}
|
||||
|
||||
impl StructuredCloneData {
|
||||
// TODO: should this be unsafe?
|
||||
/// Writes a structured clone. Returns a `DataClone` error if that fails.
|
||||
pub fn write(cx: *mut JSContext, message: HandleValue) -> Fallible<StructuredCloneData> {
|
||||
let mut data = ptr::null_mut();
|
||||
let mut nbytes = 0;
|
||||
let result = unsafe {
|
||||
JS_WriteStructuredClone(cx,
|
||||
message,
|
||||
&mut data,
|
||||
&mut nbytes,
|
||||
&STRUCTURED_CLONE_CALLBACKS,
|
||||
ptr::null_mut(),
|
||||
HandleValue::undefined())
|
||||
};
|
||||
if !result {
|
||||
unsafe {
|
||||
unsafe {
|
||||
let scbuf = NewJSAutoStructuredCloneBuffer(StructuredCloneScope::DifferentProcess,
|
||||
&STRUCTURED_CLONE_CALLBACKS);
|
||||
let scdata = &mut ((*scbuf).data_);
|
||||
let policy = CloneDataPolicy {
|
||||
// TODO: SAB?
|
||||
sharedArrayBuffer_: false,
|
||||
};
|
||||
let result = JS_WriteStructuredClone(cx,
|
||||
message,
|
||||
scdata,
|
||||
StructuredCloneScope::DifferentProcess,
|
||||
policy,
|
||||
&STRUCTURED_CLONE_CALLBACKS,
|
||||
ptr::null_mut(),
|
||||
HandleValue::undefined());
|
||||
if !result {
|
||||
JS_ClearPendingException(cx);
|
||||
return Err(Error::DataClone);
|
||||
}
|
||||
return Err(Error::DataClone);
|
||||
|
||||
let nbytes = GetLengthOfJSStructuredCloneData(scdata);
|
||||
let mut data = Vec::with_capacity(nbytes);
|
||||
CopyJSStructuredCloneData(scdata, data.as_mut_ptr());
|
||||
data.set_len(nbytes);
|
||||
|
||||
DeleteJSAutoStructuredCloneBuffer(scbuf);
|
||||
|
||||
Ok(StructuredCloneData::Vector(data))
|
||||
}
|
||||
Ok(StructuredCloneData::Struct(data, nbytes))
|
||||
}
|
||||
|
||||
/// Converts a StructuredCloneData to Vec<u8> for inter-thread sharing
|
||||
|
@ -254,13 +274,21 @@ impl StructuredCloneData {
|
|||
let mut sc_holder = StructuredCloneHolder { blob: None };
|
||||
let sc_holder_ptr = &mut sc_holder as *mut _;
|
||||
unsafe {
|
||||
let scbuf = NewJSAutoStructuredCloneBuffer(StructuredCloneScope::DifferentProcess,
|
||||
&STRUCTURED_CLONE_CALLBACKS);
|
||||
let scdata = &mut ((*scbuf).data_);
|
||||
|
||||
WriteBytesToJSStructuredCloneData(data as *const u8, nbytes, scdata);
|
||||
|
||||
assert!(JS_ReadStructuredClone(cx,
|
||||
data,
|
||||
nbytes,
|
||||
scdata,
|
||||
JS_STRUCTURED_CLONE_VERSION,
|
||||
StructuredCloneScope::DifferentProcess,
|
||||
rval,
|
||||
&STRUCTURED_CLONE_CALLBACKS,
|
||||
sc_holder_ptr as *mut raw::c_void));
|
||||
|
||||
DeleteJSAutoStructuredCloneBuffer(scbuf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -39,7 +39,6 @@ use canvas_traits::webgl::{WebGLSLVersion, WebGLSender, WebGLShaderId, WebGLText
|
|||
use canvas_traits::webgl::{WebGLVersion, WebGLVertexArrayId};
|
||||
use cssparser::RGBA;
|
||||
use devtools_traits::{CSSError, TimelineMarkerType, WorkerId};
|
||||
use dom::abstractworker::SharedRt;
|
||||
use dom::bindings::cell::DomRefCell;
|
||||
use dom::bindings::error::Error;
|
||||
use dom::bindings::refcounted::{Trusted, TrustedPromise};
|
||||
|
@ -77,7 +76,6 @@ use net_traits::response::{Response, ResponseBody};
|
|||
use net_traits::response::HttpsState;
|
||||
use net_traits::storage_thread::StorageType;
|
||||
use offscreen_gl_context::GLLimits;
|
||||
use parking_lot::RwLock;
|
||||
use profile_traits::mem::ProfilerChan as MemProfilerChan;
|
||||
use profile_traits::time::ProfilerChan as TimeProfilerChan;
|
||||
use script_layout_interface::OpaqueStyleAndLayoutData;
|
||||
|
@ -103,7 +101,7 @@ use std::hash::{BuildHasher, Hash};
|
|||
use std::ops::{Deref, DerefMut};
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicBool, AtomicUsize};
|
||||
use std::sync::mpsc::{Receiver, Sender};
|
||||
use std::time::{SystemTime, Instant};
|
||||
|
@ -397,7 +395,6 @@ unsafe_no_jsmanaged_fields!(Stylesheet);
|
|||
unsafe_no_jsmanaged_fields!(HttpsState);
|
||||
unsafe_no_jsmanaged_fields!(Request);
|
||||
unsafe_no_jsmanaged_fields!(RequestInit);
|
||||
unsafe_no_jsmanaged_fields!(SharedRt);
|
||||
unsafe_no_jsmanaged_fields!(StyleSharedRwLock);
|
||||
unsafe_no_jsmanaged_fields!(USVString);
|
||||
unsafe_no_jsmanaged_fields!(ReferrerPolicy);
|
||||
|
@ -594,12 +591,6 @@ unsafe impl<U> JSTraceable for TypedSize2D<f32, U> {
|
|||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for Mutex<Option<SharedRt>> {
|
||||
unsafe fn trace(&self, _trc: *mut JSTracer) {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for StyleLocked<FontFaceRule> {
|
||||
unsafe fn trace(&self, _trc: *mut JSTracer) {
|
||||
// Do nothing.
|
||||
|
@ -666,12 +657,6 @@ unsafe impl JSTraceable for StyleLocked<PropertyDeclarationBlock> {
|
|||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for RwLock<SharedRt> {
|
||||
unsafe fn trace(&self, _trc: *mut JSTracer) {
|
||||
// Do nothing.
|
||||
}
|
||||
}
|
||||
|
||||
unsafe impl JSTraceable for StyleLocked<MediaList> {
|
||||
unsafe fn trace(&self, _trc: *mut JSTracer) {
|
||||
// Do nothing.
|
||||
|
|
|
@ -16,20 +16,20 @@ use dom::windowproxy;
|
|||
use js;
|
||||
use js::JS_CALLEE;
|
||||
use js::glue::{CallJitGetterOp, CallJitMethodOp, CallJitSetterOp, IsWrapper};
|
||||
use js::glue::{GetCrossCompartmentWrapper, WrapperNew};
|
||||
use js::glue::{GetCrossCompartmentWrapper, JS_GetReservedSlot, WrapperNew};
|
||||
use js::glue::{RUST_FUNCTION_VALUE_TO_JITINFO, RUST_JSID_IS_INT, RUST_JSID_IS_STRING};
|
||||
use js::glue::{RUST_JSID_TO_INT, RUST_JSID_TO_STRING, UnwrapObject};
|
||||
use js::jsapi::{CallArgs, DOMCallbacks, GetGlobalForObjectCrossCompartment};
|
||||
use js::jsapi::{Heap, JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSJitInfo, JSObject, JSTracer, JSWrapObjectCallbacks};
|
||||
use js::jsapi::{JS_EnumerateStandardClasses, JS_GetLatin1StringCharsAndLength};
|
||||
use js::jsapi::{JS_GetReservedSlot, JS_IsExceptionPending, JS_IsGlobalObject};
|
||||
use js::jsapi::{JS_ResolveStandardClass, ToWindowProxyIfWindow};
|
||||
use js::jsapi::{JS_StringHasLatin1Chars, ObjectOpResult};
|
||||
use js::jsapi::{JS_IsExceptionPending, JS_IsGlobalObject};
|
||||
use js::jsapi::{JS_ResolveStandardClass, JS_StringHasLatin1Chars, ObjectOpResult};
|
||||
use js::jsapi::HandleId as RawHandleId;
|
||||
use js::jsapi::HandleObject as RawHandleObject;
|
||||
use js::jsapi::MutableHandleObject as RawMutableHandleObject;
|
||||
use js::jsval::{JSVal, UndefinedValue};
|
||||
use js::rust::{GCMethods, ToString, get_object_class, is_dom_class};
|
||||
use js::rust::{GCMethods, ToString, ToWindowProxyIfWindow, get_object_class, is_dom_class};
|
||||
use js::rust::{Handle, HandleId, HandleObject, HandleValue, MutableHandleValue};
|
||||
use js::rust::wrappers::JS_DeletePropertyById;
|
||||
use js::rust::wrappers::JS_ForwardGetPropertyTo;
|
||||
|
@ -124,7 +124,9 @@ unsafe impl Sync for DOMJSClass {}
|
|||
pub fn get_proto_or_iface_array(global: *mut JSObject) -> *mut ProtoOrIfaceArray {
|
||||
unsafe {
|
||||
assert_ne!(((*get_object_class(global)).flags & JSCLASS_DOM_GLOBAL), 0);
|
||||
JS_GetReservedSlot(global, DOM_PROTOTYPE_SLOT).to_private() as *mut ProtoOrIfaceArray
|
||||
let mut slot = UndefinedValue();
|
||||
JS_GetReservedSlot(global, DOM_PROTOTYPE_SLOT, &mut slot);
|
||||
slot.to_private() as *mut ProtoOrIfaceArray
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -387,14 +389,14 @@ unsafe extern "C" fn wrap(cx: *mut JSContext,
|
|||
}
|
||||
|
||||
unsafe extern "C" fn pre_wrap(cx: *mut JSContext,
|
||||
_existing: RawHandleObject,
|
||||
_scope: RawHandleObject,
|
||||
obj: RawHandleObject,
|
||||
_object_passed_to_wrap: RawHandleObject)
|
||||
-> *mut JSObject {
|
||||
_object_passed_to_wrap: RawHandleObject,
|
||||
rval: RawMutableHandleObject) {
|
||||
let _ac = JSAutoCompartment::new(cx, obj.get());
|
||||
let obj = ToWindowProxyIfWindow(obj.get());
|
||||
assert!(!obj.is_null());
|
||||
obj
|
||||
rval.set(obj)
|
||||
}
|
||||
|
||||
/// Callback table for use with JS_SetWrapObjectCallbacks
|
||||
|
|
|
@ -15,8 +15,10 @@ use dom::bindings::cell::DomRefCell;
|
|||
use dom::bindings::reflector::DomObject;
|
||||
use dom::bindings::root::DomRoot;
|
||||
use dom::bindings::trace::JSTraceable;
|
||||
use js::jsapi::{JSTracer, JS_GetReservedSlot, JS_SetReservedSlot};
|
||||
use js::glue::JS_GetReservedSlot;
|
||||
use js::jsapi::{JSTracer, JS_SetReservedSlot};
|
||||
use js::jsval::PrivateValue;
|
||||
use js::jsval::UndefinedValue;
|
||||
use libc::c_void;
|
||||
use malloc_size_of::{MallocSizeOf, MallocSizeOfOps};
|
||||
use std::cell::{Cell, UnsafeCell};
|
||||
|
@ -53,16 +55,17 @@ pub trait WeakReferenceable: DomObject + Sized {
|
|||
fn downgrade(&self) -> WeakRef<Self> {
|
||||
unsafe {
|
||||
let object = self.reflector().get_jsobject().get();
|
||||
let mut ptr = JS_GetReservedSlot(object,
|
||||
DOM_WEAK_SLOT)
|
||||
.to_private() as *mut WeakBox<Self>;
|
||||
let mut slot = UndefinedValue();
|
||||
JS_GetReservedSlot(object, DOM_WEAK_SLOT, &mut slot);
|
||||
let mut ptr = slot.to_private() as *mut WeakBox<Self>;
|
||||
if ptr.is_null() {
|
||||
trace!("Creating new WeakBox holder for {:p}.", self);
|
||||
ptr = Box::into_raw(Box::new(WeakBox {
|
||||
count: Cell::new(1),
|
||||
value: Cell::new(Some(ptr::NonNull::from(self))),
|
||||
}));
|
||||
JS_SetReservedSlot(object, DOM_WEAK_SLOT, PrivateValue(ptr as *const c_void));
|
||||
let val = PrivateValue(ptr as *const c_void);
|
||||
JS_SetReservedSlot(object, DOM_WEAK_SLOT, &val);
|
||||
}
|
||||
let box_ = &*ptr;
|
||||
assert!(box_.value.get().is_some());
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
use devtools;
|
||||
use devtools_traits::DevtoolScriptControlMsg;
|
||||
use dom::abstractworker::{SharedRt, SimpleWorkerErrorHandler, WorkerScriptMsg};
|
||||
use dom::abstractworker::{SimpleWorkerErrorHandler, WorkerScriptMsg};
|
||||
use dom::abstractworkerglobalscope::{SendableWorkerScriptChan, WorkerThreadWorkerChan};
|
||||
use dom::bindings::cell::DomRefCell;
|
||||
use dom::bindings::codegen::Bindings::DedicatedWorkerGlobalScopeBinding;
|
||||
|
@ -25,7 +25,8 @@ use dom::workerglobalscope::WorkerGlobalScope;
|
|||
use dom_struct::dom_struct;
|
||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::{JS_SetInterruptCallback, JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsapi::JS_AddInterruptCallback;
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::rust::HandleValue;
|
||||
use msg::constellation_msg::TopLevelBrowsingContextId;
|
||||
|
@ -37,7 +38,7 @@ use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScript
|
|||
use servo_rand::random;
|
||||
use servo_url::ServoUrl;
|
||||
use std::mem::replace;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::AtomicBool;
|
||||
use std::sync::mpsc::{Receiver, RecvError, Select, Sender, channel};
|
||||
use std::thread;
|
||||
|
@ -153,7 +154,6 @@ impl DedicatedWorkerGlobalScope {
|
|||
pub fn run_worker_scope(init: WorkerGlobalScopeInit,
|
||||
worker_url: ServoUrl,
|
||||
from_devtools_receiver: IpcReceiver<DevtoolScriptControlMsg>,
|
||||
worker_rt_for_mainthread: Arc<Mutex<Option<SharedRt>>>,
|
||||
worker: TrustedWorkerAddress,
|
||||
parent_sender: Box<ScriptChan + Send>,
|
||||
own_sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
|
||||
|
@ -206,7 +206,6 @@ impl DedicatedWorkerGlobalScope {
|
|||
let source = String::from_utf8_lossy(&bytes);
|
||||
|
||||
let runtime = unsafe { new_rt_and_cx() };
|
||||
*worker_rt_for_mainthread.lock().unwrap() = Some(SharedRt::new(&runtime));
|
||||
|
||||
let (devtools_mpsc_chan, devtools_mpsc_port) = channel();
|
||||
ROUTER.route_ipc_receiver_to_mpsc_sender(from_devtools_receiver, devtools_mpsc_chan);
|
||||
|
@ -229,7 +228,7 @@ impl DedicatedWorkerGlobalScope {
|
|||
|
||||
unsafe {
|
||||
// Handle interrupt requests
|
||||
JS_SetInterruptCallback(scope.runtime(), Some(interrupt_callback));
|
||||
JS_AddInterruptCallback(scope.get_cx(), Some(interrupt_callback));
|
||||
}
|
||||
|
||||
if scope.is_closing() {
|
||||
|
|
|
@ -31,8 +31,7 @@ use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
|
|||
use js::glue::{IsWrapper, UnwrapObject};
|
||||
use js::jsapi::{CurrentGlobalOrNull, GetGlobalForObjectCrossCompartment};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSObject, JS_GetContext};
|
||||
use js::jsapi::JS_GetObjectRuntime;
|
||||
use js::jsapi::JSObject;
|
||||
use js::panic::maybe_resume_unwind;
|
||||
use js::rust::{CompileOptionsWrapper, Runtime, get_object_class};
|
||||
use js::rust::{HandleValue, MutableHandleValue};
|
||||
|
@ -229,16 +228,8 @@ impl GlobalScope {
|
|||
GlobalScope::from_object(obj)
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
pub fn get_cx(&self) -> *mut JSContext {
|
||||
unsafe {
|
||||
let runtime = JS_GetObjectRuntime(
|
||||
self.reflector().get_jsobject().get());
|
||||
assert!(!runtime.is_null());
|
||||
let context = JS_GetContext(runtime);
|
||||
assert!(!context.is_null());
|
||||
context
|
||||
}
|
||||
Runtime::get()
|
||||
}
|
||||
|
||||
pub fn crypto(&self) -> DomRoot<Crypto> {
|
||||
|
|
|
@ -21,12 +21,11 @@ use dom_struct::dom_struct;
|
|||
use js::conversions::ToJSValConvertible;
|
||||
use js::jsapi::{AddRawValueRoot, CallArgs, GetFunctionNativeReserved};
|
||||
use js::jsapi::{Heap, JS_ClearPendingException};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JSObject, JS_GetContext, JS_GetFunctionObject};
|
||||
use js::jsapi::{JS_GetObjectRuntime, JS_NewFunction};
|
||||
use js::jsapi::{NewFunctionWithReserved, PromiseState};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JSObject, JS_GetFunctionObject};
|
||||
use js::jsapi::{JS_NewFunction, NewFunctionWithReserved, PromiseState};
|
||||
use js::jsapi::{RemoveRawValueRoot, SetFunctionNativeReserved};
|
||||
use js::jsval::{JSVal, UndefinedValue, ObjectValue, Int32Value};
|
||||
use js::rust::{HandleObject, HandleValue, MutableHandleObject};
|
||||
use js::rust::{HandleObject, HandleValue, MutableHandleObject, Runtime};
|
||||
use js::rust::wrappers::{AddPromiseReactions, CallOriginalPromiseResolve, CallOriginalPromiseReject};
|
||||
use js::rust::wrappers::{GetPromiseState, IsPromiseObject};
|
||||
use js::rust::wrappers::{NewPromiseObject, ResolvePromise, RejectPromise};
|
||||
|
@ -67,9 +66,7 @@ impl Drop for Promise {
|
|||
unsafe {
|
||||
let object = self.permanent_js_root.get().to_object();
|
||||
assert!(!object.is_null());
|
||||
let runtime = JS_GetObjectRuntime(object);
|
||||
assert!(!runtime.is_null());
|
||||
let cx = JS_GetContext(runtime);
|
||||
let cx = Runtime::get();
|
||||
assert!(!cx.is_null());
|
||||
RemoveRawValueRoot(cx, self.permanent_js_root.get_unsafe());
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ use dom::workerglobalscope::WorkerGlobalScope;
|
|||
use dom_struct::dom_struct;
|
||||
use ipc_channel::ipc::{self, IpcSender, IpcReceiver};
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::{JS_SetInterruptCallback, JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback};
|
||||
use js::jsval::UndefinedValue;
|
||||
use net_traits::{load_whole_resource, IpcSend, CustomResponseMediator};
|
||||
use net_traits::request::{CredentialsMode, Destination, RequestInit};
|
||||
|
@ -197,7 +197,7 @@ impl ServiceWorkerGlobalScope {
|
|||
|
||||
unsafe {
|
||||
// Handle interrupt requests
|
||||
JS_SetInterruptCallback(scope.runtime(), Some(interrupt_callback));
|
||||
JS_AddInterruptCallback(scope.get_cx(), Some(interrupt_callback));
|
||||
}
|
||||
|
||||
scope.execute_script(DOMString::from(source));
|
||||
|
|
|
@ -60,9 +60,12 @@ use euclid::{Point2D, Vector2D, Rect, Size2D, TypedPoint2D, TypedScale, TypedSiz
|
|||
use fetch;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use ipc_channel::router::ROUTER;
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JS_GC, JS_GetRuntime, JSPROP_ENUMERATE};
|
||||
use js::jsval::{JSVal, UndefinedValue};
|
||||
use js::jsapi::JSAutoCompartment;
|
||||
use js::jsapi::JSContext;
|
||||
use js::jsapi::JSPROP_ENUMERATE;
|
||||
use js::jsapi::JS_GC;
|
||||
use js::jsval::JSVal;
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::rust::HandleValue;
|
||||
use js::rust::wrappers::JS_DefineProperty;
|
||||
use layout_image::fetch_image_for_layout;
|
||||
|
@ -595,9 +598,7 @@ impl WindowMethods for Window {
|
|||
obj,
|
||||
"opener\0".as_ptr() as *const libc::c_char,
|
||||
value,
|
||||
JSPROP_ENUMERATE,
|
||||
None,
|
||||
None));
|
||||
JSPROP_ENUMERATE as u32));
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#dom-window-closed
|
||||
|
@ -878,7 +879,7 @@ impl WindowMethods for Window {
|
|||
#[allow(unsafe_code)]
|
||||
fn Gc(&self) {
|
||||
unsafe {
|
||||
JS_GC(JS_GetRuntime(self.get_cx()));
|
||||
JS_GC(self.get_cx());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ use embedder_traits::EmbedderMsg;
|
|||
use ipc_channel::ipc;
|
||||
use js::JSCLASS_IS_GLOBAL;
|
||||
use js::glue::{CreateWrapperProxyHandler, ProxyTraps};
|
||||
use js::glue::{GetProxyPrivate, SetProxyExtra, GetProxyExtra};
|
||||
use js::glue::{GetProxyPrivate, SetProxyReservedSlot, GetProxyReservedSlot};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JSErrNum, JSFreeOp, JSObject};
|
||||
use js::jsapi::{JSPROP_ENUMERATE, JSPROP_READONLY, JSTracer, JS_DefinePropertyById};
|
||||
use js::jsapi::{JS_ForwardGetPropertyTo, JS_ForwardSetPropertyTo};
|
||||
|
@ -156,7 +156,7 @@ impl WindowProxy {
|
|||
|
||||
// The window proxy owns the browsing context.
|
||||
// When we finalize the window proxy, it drops the browsing context it owns.
|
||||
SetProxyExtra(js_proxy.get(), 0, &PrivateValue((&*window_proxy).as_void_ptr()));
|
||||
SetProxyReservedSlot(js_proxy.get(), 0, &PrivateValue((&*window_proxy).as_void_ptr()));
|
||||
|
||||
// Notify the JS engine about the new window proxy binding.
|
||||
SetWindowProxy(cx, window_jsobject, js_proxy.handle());
|
||||
|
@ -205,7 +205,7 @@ impl WindowProxy {
|
|||
|
||||
// The window proxy owns the browsing context.
|
||||
// When we finalize the window proxy, it drops the browsing context it owns.
|
||||
SetProxyExtra(js_proxy.get(), 0, &PrivateValue((&*window_proxy).as_void_ptr()));
|
||||
SetProxyReservedSlot(js_proxy.get(), 0, &PrivateValue((&*window_proxy).as_void_ptr()));
|
||||
|
||||
// Notify the JS engine about the new window proxy binding.
|
||||
SetWindowProxy(cx, window_jsobject, js_proxy.handle());
|
||||
|
@ -460,7 +460,7 @@ impl WindowProxy {
|
|||
let _ac = JSAutoCompartment::new(cx, window_jsobject.get());
|
||||
|
||||
// The old window proxy no longer owns this browsing context.
|
||||
SetProxyExtra(old_js_proxy.get(), 0, &PrivateValue(ptr::null_mut()));
|
||||
SetProxyReservedSlot(old_js_proxy.get(), 0, &PrivateValue(ptr::null_mut()));
|
||||
|
||||
// Brain transpant the window proxy.
|
||||
// We need to do this, because the Window and WindowProxy
|
||||
|
@ -475,7 +475,7 @@ impl WindowProxy {
|
|||
debug!("Transplanted proxy is {:p}.", new_js_proxy.get());
|
||||
|
||||
// Transfer ownership of this browsing context from the old window proxy to the new one.
|
||||
SetProxyExtra(new_js_proxy.get(), 0, &PrivateValue(self.as_void_ptr()));
|
||||
SetProxyReservedSlot(new_js_proxy.get(), 0, &PrivateValue(self.as_void_ptr()));
|
||||
|
||||
// Notify the JS engine about the new window proxy binding.
|
||||
SetWindowProxy(cx, window_jsobject, new_js_proxy.handle());
|
||||
|
@ -523,7 +523,9 @@ unsafe fn GetSubframeWindowProxy(
|
|||
) -> Option<(DomRoot<WindowProxy>, u32)> {
|
||||
let index = get_array_index_from_id(cx, Handle::from_raw(id));
|
||||
if let Some(index) = index {
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
if let Ok(win) = root_from_handleobject::<Window>(target.handle()) {
|
||||
let browsing_context_id = win.window_proxy().browsing_context_id();
|
||||
let (result_sender, result_receiver) = ipc::channel().unwrap();
|
||||
|
@ -538,7 +540,7 @@ unsafe fn GetSubframeWindowProxy(
|
|||
return result_receiver.recv().ok()
|
||||
.and_then(|maybe_bcid| maybe_bcid)
|
||||
.and_then(ScriptThread::find_window_proxy)
|
||||
.map(|proxy| (proxy, JSPROP_ENUMERATE | JSPROP_READONLY));
|
||||
.map(|proxy| (proxy, (JSPROP_ENUMERATE | JSPROP_READONLY) as u32));
|
||||
} else if let Ok(win) = root_from_handleobject::<DissimilarOriginWindow>(target.handle()) {
|
||||
let browsing_context_id = win.window_proxy().browsing_context_id();
|
||||
let (result_sender, result_receiver) = ipc::channel().unwrap();
|
||||
|
@ -551,7 +553,7 @@ unsafe fn GetSubframeWindowProxy(
|
|||
return result_receiver.recv().ok()
|
||||
.and_then(|maybe_bcid| maybe_bcid)
|
||||
.and_then(ScriptThread::find_window_proxy)
|
||||
.map(|proxy| (proxy, JSPROP_READONLY));
|
||||
.map(|proxy| (proxy, JSPROP_READONLY as u32));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -573,7 +575,9 @@ unsafe extern "C" fn getOwnPropertyDescriptor(cx: *mut JSContext,
|
|||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let target = GetProxyPrivate(proxy.get()).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(proxy.get(), &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
if !JS_GetOwnPropertyDescriptorById(cx, target.handle().into(), id, desc) {
|
||||
return false;
|
||||
}
|
||||
|
@ -603,7 +607,9 @@ unsafe extern "C" fn defineProperty(cx: *mut JSContext,
|
|||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy.ptr).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy.ptr, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
JS_DefinePropertyById(cx, target.handle().into(), id, desc, res)
|
||||
}
|
||||
|
||||
|
@ -619,7 +625,9 @@ unsafe extern "C" fn has(cx: *mut JSContext,
|
|||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy.ptr).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy.ptr, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
let mut found = false;
|
||||
if !JS_HasPropertyById(cx, target.handle().into(), id, &mut found) {
|
||||
return false;
|
||||
|
@ -642,7 +650,9 @@ unsafe extern "C" fn get(cx: *mut JSContext,
|
|||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy.ptr).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy.ptr, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
JS_ForwardGetPropertyTo(cx, target.handle().into(), id, receiver, vp)
|
||||
}
|
||||
|
||||
|
@ -660,7 +670,9 @@ unsafe extern "C" fn set(cx: *mut JSContext,
|
|||
return true;
|
||||
}
|
||||
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy.ptr).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy.ptr, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
JS_ForwardSetPropertyTo(cx,
|
||||
target.handle().into(),
|
||||
id,
|
||||
|
@ -750,7 +762,9 @@ unsafe extern "C" fn has_xorigin(cx: *mut JSContext,
|
|||
bp: *mut bool)
|
||||
-> bool
|
||||
{
|
||||
rooted!(in(cx) let target = GetProxyPrivate(*proxy.ptr).to_object());
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyPrivate(*proxy.ptr, &mut slot);
|
||||
rooted!(in(cx) let target = slot.to_object());
|
||||
let mut found = false;
|
||||
JS_HasOwnPropertyById(cx, target.handle().into(), id, &mut found);
|
||||
if found {
|
||||
|
@ -864,7 +878,9 @@ static XORIGIN_PROXY_HANDLER: ProxyTraps = ProxyTraps {
|
|||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern fn finalize(_fop: *mut JSFreeOp, obj: *mut JSObject) {
|
||||
let this = GetProxyExtra(obj, 0).to_private() as *mut WindowProxy;
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyReservedSlot(obj, 0, &mut slot);
|
||||
let this = slot.to_private() as *mut WindowProxy;
|
||||
if this.is_null() {
|
||||
// GC during obj creation or after transplanting.
|
||||
return;
|
||||
|
@ -876,7 +892,9 @@ unsafe extern fn finalize(_fop: *mut JSFreeOp, obj: *mut JSObject) {
|
|||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern fn trace(trc: *mut JSTracer, obj: *mut JSObject) {
|
||||
let this = GetProxyExtra(obj, 0).to_private() as *const WindowProxy;
|
||||
let mut slot = UndefinedValue();
|
||||
GetProxyReservedSlot(obj, 0, &mut slot);
|
||||
let this = slot.to_private() as *const WindowProxy;
|
||||
if this.is_null() {
|
||||
// GC during obj creation or after transplanting.
|
||||
return;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use devtools_traits::{DevtoolsPageInfo, ScriptToDevtoolsControlMsg};
|
||||
use dom::abstractworker::{SharedRt, SimpleWorkerErrorHandler};
|
||||
use dom::abstractworker::SimpleWorkerErrorHandler;
|
||||
use dom::abstractworker::WorkerScriptMsg;
|
||||
use dom::bindings::codegen::Bindings::WorkerBinding;
|
||||
use dom::bindings::codegen::Bindings::WorkerBinding::WorkerMethods;
|
||||
|
@ -21,12 +21,12 @@ use dom::messageevent::MessageEvent;
|
|||
use dom::workerglobalscope::prepare_workerscope_init;
|
||||
use dom_struct::dom_struct;
|
||||
use ipc_channel::ipc;
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JS_RequestInterruptCallback};
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::rust::HandleValue;
|
||||
use script_traits::WorkerScriptLoadOrigin;
|
||||
use std::cell::Cell;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::mpsc::{Sender, channel};
|
||||
use task::TaskOnce;
|
||||
|
@ -43,8 +43,6 @@ pub struct Worker {
|
|||
sender: Sender<(TrustedWorkerAddress, WorkerScriptMsg)>,
|
||||
#[ignore_malloc_size_of = "Arc"]
|
||||
closing: Arc<AtomicBool>,
|
||||
#[ignore_malloc_size_of = "Defined in rust-mozjs"]
|
||||
runtime: Arc<Mutex<Option<SharedRt>>>,
|
||||
terminated: Cell<bool>,
|
||||
}
|
||||
|
||||
|
@ -55,7 +53,6 @@ impl Worker {
|
|||
eventtarget: EventTarget::new_inherited(),
|
||||
sender: sender,
|
||||
closing: closing,
|
||||
runtime: Arc::new(Mutex::new(None)),
|
||||
terminated: Cell::new(false),
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +103,7 @@ impl Worker {
|
|||
let init = prepare_workerscope_init(global, Some(devtools_sender));
|
||||
|
||||
DedicatedWorkerGlobalScope::run_worker_scope(
|
||||
init, worker_url, devtools_receiver, worker.runtime.clone(), worker_ref,
|
||||
init, worker_url, devtools_receiver, worker_ref,
|
||||
global.script_chan(), sender, receiver, worker_load_origin, closing);
|
||||
|
||||
Ok(worker)
|
||||
|
@ -155,6 +152,7 @@ impl WorkerMethods for Worker {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
// https://html.spec.whatwg.org/multipage/#terminate-a-worker
|
||||
fn Terminate(&self) {
|
||||
// Step 1
|
||||
|
@ -166,9 +164,8 @@ impl WorkerMethods for Worker {
|
|||
self.terminated.set(true);
|
||||
|
||||
// Step 3
|
||||
if let Some(runtime) = *self.runtime.lock().unwrap() {
|
||||
runtime.request_interrupt();
|
||||
}
|
||||
let cx = self.global().get_cx();
|
||||
unsafe { JS_RequestInterruptCallback(cx) };
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/#handler-worker-onmessage
|
||||
|
|
|
@ -26,7 +26,7 @@ use dom::workernavigator::WorkerNavigator;
|
|||
use dom_struct::dom_struct;
|
||||
use fetch;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use js::jsapi::{JSAutoCompartment, JSContext, JSRuntime};
|
||||
use js::jsapi::{JSAutoCompartment, JSContext};
|
||||
use js::jsval::UndefinedValue;
|
||||
use js::panic::maybe_resume_unwind;
|
||||
use js::rust::HandleValue;
|
||||
|
@ -139,10 +139,6 @@ impl WorkerGlobalScope {
|
|||
&self.from_devtools_receiver
|
||||
}
|
||||
|
||||
pub fn runtime(&self) -> *mut JSRuntime {
|
||||
self.runtime.rt()
|
||||
}
|
||||
|
||||
pub fn get_cx(&self) -> *mut JSContext {
|
||||
self.runtime.cx()
|
||||
}
|
||||
|
|
|
@ -517,14 +517,14 @@ impl WorkletThread {
|
|||
/// The current memory usage of the thread
|
||||
#[allow(unsafe_code)]
|
||||
fn current_memory_usage(&self) -> u32 {
|
||||
unsafe { JS_GetGCParameter(self.runtime.rt(), JSGCParamKey::JSGC_BYTES) }
|
||||
unsafe { JS_GetGCParameter(self.runtime.cx(), JSGCParamKey::JSGC_BYTES) }
|
||||
}
|
||||
|
||||
/// Perform a GC.
|
||||
#[allow(unsafe_code)]
|
||||
fn gc(&mut self) {
|
||||
debug!("BEGIN GC (usage = {}, threshold = {}).", self.current_memory_usage(), self.gc_threshold);
|
||||
unsafe { JS_GC(self.runtime.rt()) };
|
||||
unsafe { JS_GC(self.runtime.cx()) };
|
||||
self.gc_threshold = max(MIN_GC_THRESHOLD, self.current_memory_usage() * 2);
|
||||
debug!("END GC (usage = {}, threshold = {}).", self.current_memory_usage(), self.gc_threshold);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#![feature(mpsc_select)]
|
||||
#![feature(plugin)]
|
||||
#![feature(string_retain)]
|
||||
#![feature(try_from)]
|
||||
#![feature(use_extern_macros)]
|
||||
|
||||
#![deny(unsafe_code)]
|
||||
|
@ -149,10 +150,7 @@ pub mod layout_exports {
|
|||
}
|
||||
|
||||
use dom::bindings::codegen::RegisterBindings;
|
||||
use dom::bindings::conversions::is_dom_proxy;
|
||||
use dom::bindings::proxyhandler;
|
||||
use dom::bindings::utils::is_platform_object;
|
||||
use js::jsapi::JSObject;
|
||||
use script_traits::SWManagerSenders;
|
||||
use serviceworker_manager::ServiceWorkerManager;
|
||||
|
||||
|
@ -202,11 +200,6 @@ pub fn init_service_workers(sw_senders: SWManagerSenders) {
|
|||
ServiceWorkerManager::spawn_manager(sw_senders);
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern "C" fn is_dom_object(obj: *mut JSObject) -> bool {
|
||||
!obj.is_null() && (is_platform_object(obj) || is_dom_proxy(obj))
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
pub fn init() {
|
||||
unsafe {
|
||||
|
@ -215,8 +208,6 @@ pub fn init() {
|
|||
// Create the global vtables used by the (generated) DOM
|
||||
// bindings to implement JS proxies.
|
||||
RegisterBindings::RegisterProxyHandlers();
|
||||
|
||||
js::glue::InitializeMemoryReporter(Some(is_dom_object));
|
||||
}
|
||||
|
||||
perform_platform_specific_initialization();
|
||||
|
|
|
@ -15,12 +15,15 @@ use dom::bindings::trace::{JSTraceable, trace_traceables};
|
|||
use dom::bindings::utils::DOM_CALLBACKS;
|
||||
use dom::globalscope::GlobalScope;
|
||||
use js::glue::CollectServoSizes;
|
||||
use js::glue::SetBuildId;
|
||||
use js::jsapi::{DisableIncrementalGC, GCDescription, GCProgress, HandleObject};
|
||||
use js::jsapi::{JSContext, JS_GetRuntime, JSRuntime, JSTracer, SetDOMCallbacks, SetGCSliceCallback};
|
||||
use js::jsapi::{JSContext, JSTracer, SetDOMCallbacks, SetGCSliceCallback};
|
||||
use js::jsapi::{JSGCInvocationKind, JSGCStatus, JS_AddExtraGCRootsTracer, JS_SetGCCallback};
|
||||
use js::jsapi::{JSGCMode, JSGCParamKey, JS_SetGCParameter, JS_SetGlobalJitCompilerOption};
|
||||
use js::jsapi::{JSJitCompilerOption, JS_SetOffthreadIonCompilationEnabled, JS_SetParallelParsingEnabled};
|
||||
use js::jsapi::{JSObject, RuntimeOptionsRef, SetPreserveWrapperCallback, SetEnqueuePromiseJobCallback};
|
||||
use js::jsapi::{JSObject, SetPreserveWrapperCallback, SetEnqueuePromiseJobCallback};
|
||||
use js::jsapi::{SetBuildIdOp, BuildIdCharVector};
|
||||
use js::jsapi::ContextOptionsRef;
|
||||
use js::panic::wrap_panic;
|
||||
use js::rust::Runtime as RustRuntime;
|
||||
use malloc_size_of::MallocSizeOfOps;
|
||||
|
@ -112,6 +115,7 @@ pub trait ScriptPort {
|
|||
unsafe extern "C" fn enqueue_job(cx: *mut JSContext,
|
||||
job: HandleObject,
|
||||
_allocation_site: HandleObject,
|
||||
_incumbent_global: HandleObject,
|
||||
_data: *mut c_void) -> bool {
|
||||
wrap_panic(AssertUnwindSafe(|| {
|
||||
//XXXjdm - use a different global now?
|
||||
|
@ -145,52 +149,68 @@ impl Deref for Runtime {
|
|||
pub unsafe fn new_rt_and_cx() -> Runtime {
|
||||
LiveDOMReferences::initialize();
|
||||
let runtime = RustRuntime::new().unwrap();
|
||||
let cx = runtime.cx();
|
||||
|
||||
JS_AddExtraGCRootsTracer(runtime.rt(), Some(trace_rust_roots), ptr::null_mut());
|
||||
JS_AddExtraGCRootsTracer(cx, Some(trace_rust_roots), ptr::null_mut());
|
||||
|
||||
// Needed for debug assertions about whether GC is running.
|
||||
if cfg!(debug_assertions) {
|
||||
JS_SetGCCallback(runtime.rt(), Some(debug_gc_callback), ptr::null_mut());
|
||||
JS_SetGCCallback(cx, Some(debug_gc_callback), ptr::null_mut());
|
||||
}
|
||||
|
||||
if opts::get().gc_profile {
|
||||
SetGCSliceCallback(runtime.rt(), Some(gc_slice_callback));
|
||||
SetGCSliceCallback(cx, Some(gc_slice_callback));
|
||||
}
|
||||
|
||||
unsafe extern "C" fn empty_wrapper_callback(_: *mut JSContext, _: *mut JSObject) -> bool { true }
|
||||
SetDOMCallbacks(runtime.rt(), &DOM_CALLBACKS);
|
||||
SetPreserveWrapperCallback(runtime.rt(), Some(empty_wrapper_callback));
|
||||
SetDOMCallbacks(cx, &DOM_CALLBACKS);
|
||||
SetPreserveWrapperCallback(cx, Some(empty_wrapper_callback));
|
||||
// Pre barriers aren't working correctly at the moment
|
||||
DisableIncrementalGC(runtime.rt());
|
||||
DisableIncrementalGC(cx);
|
||||
|
||||
SetEnqueuePromiseJobCallback(runtime.rt(), Some(enqueue_job), ptr::null_mut());
|
||||
SetEnqueuePromiseJobCallback(cx, Some(enqueue_job), ptr::null_mut());
|
||||
|
||||
set_gc_zeal_options(runtime.rt());
|
||||
set_gc_zeal_options(cx);
|
||||
|
||||
// Enable or disable the JITs.
|
||||
let rt_opts = &mut *RuntimeOptionsRef(runtime.rt());
|
||||
let cx_opts = &mut *ContextOptionsRef(cx);
|
||||
if let Some(val) = PREFS.get("js.baseline.enabled").as_boolean() {
|
||||
rt_opts.set_baseline_(val);
|
||||
cx_opts.set_baseline_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.ion.enabled").as_boolean() {
|
||||
rt_opts.set_ion_(val);
|
||||
cx_opts.set_ion_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.asmjs.enabled").as_boolean() {
|
||||
rt_opts.set_asmJS_(val);
|
||||
cx_opts.set_asmJS_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.wasm.enabled").as_boolean() {
|
||||
cx_opts.set_wasm_(val);
|
||||
if val {
|
||||
// If WASM is enabled without setting the buildIdOp,
|
||||
// initializing a module will report an out of memory error.
|
||||
// https://dxr.mozilla.org/mozilla-central/source/js/src/wasm/WasmTypes.cpp#458
|
||||
SetBuildIdOp(cx, Some(servo_build_id));
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.wasm.baseline.enabled").as_boolean() {
|
||||
cx_opts.set_wasmBaseline_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.wasm.ion.enabled").as_boolean() {
|
||||
cx_opts.set_wasmIon_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.strict.enabled").as_boolean() {
|
||||
rt_opts.set_extraWarnings_(val);
|
||||
cx_opts.set_extraWarnings_(val);
|
||||
}
|
||||
// TODO: handle js.strict.debug.enabled
|
||||
// TODO: handle js.throw_on_asmjs_validation_failure (needs new Spidermonkey)
|
||||
if let Some(val) = PREFS.get("js.native_regexp.enabled").as_boolean() {
|
||||
rt_opts.set_nativeRegExp_(val);
|
||||
cx_opts.set_nativeRegExp_(val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.parallel_parsing.enabled").as_boolean() {
|
||||
JS_SetParallelParsingEnabled(runtime.rt(), val);
|
||||
JS_SetParallelParsingEnabled(cx, val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.offthread_compilation_enabled").as_boolean() {
|
||||
JS_SetOffthreadIonCompilationEnabled(runtime.rt(), val);
|
||||
JS_SetOffthreadIonCompilationEnabled(cx, val);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.baseline.unsafe_eager_compilation.enabled").as_boolean() {
|
||||
let trigger: i32 = if val {
|
||||
|
@ -198,7 +218,7 @@ pub unsafe fn new_rt_and_cx() -> Runtime {
|
|||
} else {
|
||||
-1
|
||||
};
|
||||
JS_SetGlobalJitCompilerOption(runtime.rt(),
|
||||
JS_SetGlobalJitCompilerOption(cx,
|
||||
JSJitCompilerOption::JSJITCOMPILER_BASELINE_WARMUP_TRIGGER,
|
||||
trigger as u32);
|
||||
}
|
||||
|
@ -208,7 +228,7 @@ pub unsafe fn new_rt_and_cx() -> Runtime {
|
|||
} else {
|
||||
-1
|
||||
};
|
||||
JS_SetGlobalJitCompilerOption(runtime.rt(),
|
||||
JS_SetGlobalJitCompilerOption(cx,
|
||||
JSJitCompilerOption::JSJITCOMPILER_ION_WARMUP_TRIGGER,
|
||||
trigger as u32);
|
||||
}
|
||||
|
@ -217,11 +237,11 @@ pub unsafe fn new_rt_and_cx() -> Runtime {
|
|||
// TODO: handle js.throw_on_debugee_would_run (needs new Spidermonkey)
|
||||
// TODO: handle js.dump_stack_on_debugee_would_run (needs new Spidermonkey)
|
||||
if let Some(val) = PREFS.get("js.werror.enabled").as_boolean() {
|
||||
rt_opts.set_werror_(val);
|
||||
cx_opts.set_werror_(val);
|
||||
}
|
||||
// TODO: handle js.shared_memory.enabled
|
||||
if let Some(val) = PREFS.get("js.mem.high_water_mark").as_i64() {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_MALLOC_BYTES, val as u32 * 1024 * 1024);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MAX_MALLOC_BYTES, val as u32 * 1024 * 1024);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.max").as_i64() {
|
||||
let max = if val <= 0 || val >= 0x1000 {
|
||||
|
@ -229,11 +249,11 @@ pub unsafe fn new_rt_and_cx() -> Runtime {
|
|||
} else {
|
||||
val * 1024 * 1024
|
||||
};
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_BYTES, max as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MAX_BYTES, max as u32);
|
||||
}
|
||||
// NOTE: This is disabled above, so enabling it here will do nothing for now.
|
||||
if let Some(val) = PREFS.get("js.mem.gc.incremental.enabled").as_boolean() {
|
||||
let compartment = if let Some(val) = PREFS.get("js.mem.gc.per_compartment.enabled").as_boolean() {
|
||||
let compartment = if let Some(val) = PREFS.get("js.mem.gc.per_zone.enabled").as_boolean() {
|
||||
val
|
||||
} else {
|
||||
false
|
||||
|
@ -241,74 +261,74 @@ pub unsafe fn new_rt_and_cx() -> Runtime {
|
|||
let mode = if val {
|
||||
JSGCMode::JSGC_MODE_INCREMENTAL
|
||||
} else if compartment {
|
||||
JSGCMode::JSGC_MODE_COMPARTMENT
|
||||
JSGCMode::JSGC_MODE_ZONE
|
||||
} else {
|
||||
JSGCMode::JSGC_MODE_GLOBAL
|
||||
};
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MODE, mode as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MODE, mode as u32);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.incremental.slice_ms").as_i64() {
|
||||
if val >= 0 && val < 100000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_SLICE_TIME_BUDGET, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_SLICE_TIME_BUDGET, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.compacting.enabled").as_boolean() {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_COMPACTING_ENABLED, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_COMPACTING_ENABLED, val as u32);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.high_frequency_time_limit_ms").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_TIME_LIMIT, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_TIME_LIMIT, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.dynamic_mark_slice.enabled").as_boolean() {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_MARK_SLICE, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_DYNAMIC_MARK_SLICE, val as u32);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.dynamic_heap_growth.enabled").as_boolean() {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DYNAMIC_HEAP_GROWTH, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_DYNAMIC_HEAP_GROWTH, val as u32);
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.low_frequency_heap_growth").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_LOW_FREQUENCY_HEAP_GROWTH, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_LOW_FREQUENCY_HEAP_GROWTH, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.high_frequency_heap_growth_min").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MIN, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.high_frequency_heap_growth_max").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_HEAP_GROWTH_MAX, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.high_frequency_low_limit_mb").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_LOW_LIMIT, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_LOW_LIMIT, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.high_frequency_high_limit_mb").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_HIGH_FREQUENCY_HIGH_LIMIT, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_HIGH_FREQUENCY_HIGH_LIMIT, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.allocation_threshold_mb").as_i64() {
|
||||
if let Some(val) = PREFS.get("js.mem.gc.allocation_threshold_factor").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_ALLOCATION_THRESHOLD, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_ALLOCATION_THRESHOLD_FACTOR, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.decommit_threshold_mb").as_i64() {
|
||||
if let Some(val) = PREFS.get("js.mem.gc.allocation_threshold_avoid_interrupt_factor").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_DECOMMIT_THRESHOLD, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_ALLOCATION_THRESHOLD_FACTOR_AVOID_INTERRUPT, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.empty_chunk_count_min").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MIN_EMPTY_CHUNK_COUNT, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MIN_EMPTY_CHUNK_COUNT, val as u32);
|
||||
}
|
||||
}
|
||||
if let Some(val) = PREFS.get("js.mem.gc.empty_chunk_count_max").as_i64() {
|
||||
if val >= 0 && val < 10000 {
|
||||
JS_SetGCParameter(runtime.rt(), JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32);
|
||||
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -338,9 +358,8 @@ pub fn get_reports(cx: *mut JSContext, path_seg: String) -> Vec<Report> {
|
|||
let mut reports = vec![];
|
||||
|
||||
unsafe {
|
||||
let rt = JS_GetRuntime(cx);
|
||||
let mut stats = ::std::mem::zeroed();
|
||||
if CollectServoSizes(rt, &mut stats, Some(get_size)) {
|
||||
if CollectServoSizes(cx, &mut stats, Some(get_size)) {
|
||||
let mut report = |mut path_suffix, kind, size| {
|
||||
let mut path = path![path_seg, "js"];
|
||||
path.append(&mut path_suffix);
|
||||
|
@ -388,7 +407,7 @@ thread_local!(static GC_CYCLE_START: Cell<Option<Tm>> = Cell::new(None));
|
|||
thread_local!(static GC_SLICE_START: Cell<Option<Tm>> = Cell::new(None));
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern "C" fn gc_slice_callback(_rt: *mut JSRuntime, progress: GCProgress, desc: *const GCDescription) {
|
||||
unsafe extern "C" fn gc_slice_callback(_cx: *mut JSContext, progress: GCProgress, desc: *const GCDescription) {
|
||||
match progress {
|
||||
GCProgress::GC_CYCLE_BEGIN => {
|
||||
GC_CYCLE_START.with(|start| {
|
||||
|
@ -423,13 +442,13 @@ unsafe extern "C" fn gc_slice_callback(_rt: *mut JSRuntime, progress: GCProgress
|
|||
JSGCInvocationKind::GC_NORMAL => "GC_NORMAL",
|
||||
JSGCInvocationKind::GC_SHRINK => "GC_SHRINK",
|
||||
};
|
||||
println!(" isCompartment={}, invocation_kind={}", desc.isCompartment_, invocation_kind);
|
||||
println!(" isZone={}, invocation_kind={}", desc.isZone_, invocation_kind);
|
||||
}
|
||||
let _ = stdout().flush();
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern "C" fn debug_gc_callback(_rt: *mut JSRuntime, status: JSGCStatus, _data: *mut os::raw::c_void) {
|
||||
unsafe extern "C" fn debug_gc_callback(_cx: *mut JSContext, status: JSGCStatus, _data: *mut os::raw::c_void) {
|
||||
match status {
|
||||
JSGCStatus::JSGC_BEGIN => thread_state::enter(ThreadState::IN_GC),
|
||||
JSGCStatus::JSGC_END => thread_state::exit(ThreadState::IN_GC),
|
||||
|
@ -454,9 +473,15 @@ unsafe extern fn trace_rust_roots(tr: *mut JSTracer, _data: *mut os::raw::c_void
|
|||
debug!("done custom root handler");
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
unsafe extern "C" fn servo_build_id(build_id: *mut BuildIdCharVector) -> bool {
|
||||
let servo_id = b"Servo\0";
|
||||
SetBuildId(build_id, &servo_id[0], servo_id.len())
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
#[cfg(feature = "debugmozjs")]
|
||||
unsafe fn set_gc_zeal_options(rt: *mut JSRuntime) {
|
||||
unsafe fn set_gc_zeal_options(cx: *mut JSContext) {
|
||||
use js::jsapi::{JS_DEFAULT_ZEAL_FREQ, JS_SetGCZeal};
|
||||
|
||||
let level = match PREFS.get("js.mem.gc.zeal.level").as_i64() {
|
||||
|
@ -467,9 +492,9 @@ unsafe fn set_gc_zeal_options(rt: *mut JSRuntime) {
|
|||
Some(frequency) if frequency >= 0 => frequency as u32,
|
||||
_ => JS_DEFAULT_ZEAL_FREQ,
|
||||
};
|
||||
JS_SetGCZeal(rt, level, frequency);
|
||||
JS_SetGCZeal(cx, level, frequency);
|
||||
}
|
||||
|
||||
#[allow(unsafe_code)]
|
||||
#[cfg(not(feature = "debugmozjs"))]
|
||||
unsafe fn set_gc_zeal_options(_: *mut JSRuntime) {}
|
||||
unsafe fn set_gc_zeal_options(_: *mut JSContext) {}
|
||||
|
|
|
@ -836,11 +836,11 @@ impl ScriptThread {
|
|||
chan: Sender<MainThreadScriptMsg>)
|
||||
-> ScriptThread {
|
||||
let runtime = unsafe { new_rt_and_cx() };
|
||||
let cx = runtime.cx();
|
||||
|
||||
unsafe {
|
||||
JS_SetWrapObjectCallbacks(runtime.rt(),
|
||||
&WRAP_CALLBACKS);
|
||||
SetWindowProxyClass(runtime.rt(), GetWindowProxyClass());
|
||||
JS_SetWrapObjectCallbacks(cx, &WRAP_CALLBACKS);
|
||||
SetWindowProxyClass(cx, GetWindowProxyClass());
|
||||
}
|
||||
|
||||
// Ask the router to proxy IPC messages from the devtools to us.
|
||||
|
|
|
@ -81,6 +81,10 @@ linux-rel-intermittent:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
linux-rel-nogate:
|
||||
env:
|
||||
CC: gcc-5
|
||||
CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
@ -99,6 +103,8 @@ linux-dev:
|
|||
env:
|
||||
CCACHE: sccache
|
||||
RUSTC_WRAPPER: sccache
|
||||
CC: gcc-5
|
||||
CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
|
@ -118,6 +124,8 @@ linux-rel-wpt:
|
|||
env:
|
||||
CCACHE: sccache
|
||||
RUSTC_WRAPPER: sccache
|
||||
CC: gcc-5
|
||||
CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
|
@ -133,6 +141,8 @@ linux-rel-css:
|
|||
env:
|
||||
CCACHE: sccache
|
||||
RUSTC_WRAPPER: sccache
|
||||
CC: gcc-5
|
||||
CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
|
@ -144,6 +154,10 @@ linux-rel-css:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
linux-nightly:
|
||||
env:
|
||||
CC: gcc-5
|
||||
CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
@ -157,6 +171,10 @@ linux-nightly:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
android:
|
||||
env:
|
||||
HOST_CC: gcc-5
|
||||
HOST_CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
@ -168,6 +186,10 @@ android:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
android-x86:
|
||||
env:
|
||||
HOST_CC: gcc-5
|
||||
HOST_CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
@ -180,6 +202,10 @@ android-x86:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
android-nightly:
|
||||
env:
|
||||
HOST_CC: gcc-5
|
||||
HOST_CXX: g++-5
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
@ -190,18 +216,62 @@ android-nightly:
|
|||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
arm32:
|
||||
env:
|
||||
AR: /usr/bin/arm-linux-gnueabihf-ar
|
||||
AS: /usr/bin/arm-linux-gnueabihf-as
|
||||
CC: /usr/bin/clang-4.0
|
||||
CFLAGS: --target=arm-unknown-linux-gnueabihf -march=armv7a -I/usr/arm-linux-gnueabihf/include/ -fuse-ld=/home/servo/buildbot/slave/arm32/build/support/arm32/fake-ld.sh -Wno-error=unused-command-line-argument
|
||||
CPP: /usr/bin/clang-4.0 -E
|
||||
CPPFLAGS: -I/usr/arm-linux-gnueabihf/include
|
||||
CXX: /usr/bin/clang++-4.0
|
||||
CXXFLAGS: --target=arm-unknown-linux-gnueabihf -march=armv7a -I/usr/arm-linux-gnueabihf/include/ -I/usr/arm-linux-gnueabihf/include/c++/4.8.4/arm-linux-gnueabihf -fuse-ld=/home/servo/buildbot/slave/arm32/build/support/arm32/fake-ld.sh -Wno-error=unused-command-line-argument
|
||||
EXPAT_LIB_DIR: /usr/lib/arm-linux-gnueabihf
|
||||
HOST_CC: gcc-5
|
||||
# test-tidy doesn't like empty strings
|
||||
HOST_CFLAGS: --target=x86_64-unknown-linux-gnu
|
||||
HOST_CXX: g++-5
|
||||
# test-tidy doesn't like empty strings
|
||||
HOST_CXXFLAGS: --target=x86_64-unknown-linux-gnu
|
||||
LD: /usr/bin/arm-linux-gnueabihf-ld
|
||||
OBJCOPY: /usr/bin/arm-linux-gnueabihf-objcopy
|
||||
OBJDUMP: /usr/bin/arm-linux-gnueabihf-objdump
|
||||
RANLIB: /usr/bin/arm-linux-gnueabihf-ranlib
|
||||
STRIP: /usr/bin/arm-linux-gnueabihf-strip
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
- ./mach build --rel --target=arm-unknown-linux-gnueabihf
|
||||
- env --unset CC_arm-unknown-linux-gnueabihf --unset CXX_arm-unknown-linux-gnueabihf ./mach build --rel --target=arm-unknown-linux-gnueabihf
|
||||
- bash ./etc/ci/lockfile_changed.sh
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
arm64:
|
||||
env:
|
||||
AR: /usr/bin/aarch64-linux-gnu-ar
|
||||
AS: /usr/bin/aarch64-linux-gnu-as
|
||||
CC: /usr/bin/clang-4.0
|
||||
CFLAGS: --target=aarch64-unknown-linux-gnu -I/usr/aarch64-linux-gnu/include/ -fuse-ld=/home/servo/buildbot/slave/arm64/build/support/arm64/fake-ld.sh -Wno-error=unused-command-line-argument
|
||||
CPP: /usr/bin/clang-4.0 -E
|
||||
CPPFLAGS: -I/usr/aarch64-linux-gnu/include
|
||||
CXX: /usr/bin/clang++-4.0
|
||||
CXXFLAGS: --target=aarch64-unknown-linux-gnu -I/usr/aarch64-linux-gnu/include/ -I/usr/aarch64-linux-gnu/include/c++/4.8.4/aarch64-linux-gnu -fuse-ld=/home/servo/buildbot/slave/arm64/build/support/arm64/fake-ld.sh -Wno-error=unused-command-line-argument
|
||||
EXPAT_LIB_DIR: /usr/lib/aarch64-linux-gnu
|
||||
HOST_CC: gcc-5
|
||||
# test-tidy doesn't like empty strings
|
||||
HOST_CFLAGS: --target=x86_64-unknown-linux-gnu
|
||||
HOST_CXX: g++-5
|
||||
# test-tidy doesn't like empty strings
|
||||
HOST_CXXFLAGS: --target=x86_64-unknown-linux-gnu
|
||||
LD: /usr/bin/aarch64-linux-gnu-ld
|
||||
OBJCOPY: /usr/bin/aarch64-linux-gnu-objcopy
|
||||
OBJDUMP: /usr/bin/aarch64-linux-gnu-objdump
|
||||
RANLIB: /usr/bin/aarch64-linux-gnu-ranlib
|
||||
STRIP: /usr/bin/aarch64-linux-gnu-strip
|
||||
commands:
|
||||
- ./mach clean-nightlies --keep 3 --force
|
||||
- ./mach clean-cargo-cache --keep 3 --force
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
- ./mach build --rel --target=aarch64-unknown-linux-gnu
|
||||
- env --unset CC_aarch64-unknown-linux-gnu --unset CXX_aarch64-unknown-linux-gnu ./mach build --rel --target=aarch64-unknown-linux-gnu
|
||||
- bash ./etc/ci/lockfile_changed.sh
|
||||
- ./etc/ci/clean_build_artifacts.sh
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@ from mach.decorators import (
|
|||
)
|
||||
from mach.registrar import Registrar
|
||||
|
||||
from mach_bootstrap import _get_exec_path
|
||||
from servo.command_base import CommandBase, cd, call, check_call, BIN_SUFFIX
|
||||
from servo.util import host_triple
|
||||
|
||||
|
@ -271,8 +272,10 @@ class MachCommands(CommandBase):
|
|||
sys.exit(1)
|
||||
|
||||
android_platform = self.config["android"]["platform"]
|
||||
android_toolchain = self.config["android"]["toolchain_name"]
|
||||
android_arch = "arch-" + self.config["android"]["arch"]
|
||||
android_toolchain_name = self.config["android"]["toolchain_name"]
|
||||
android_toolchain_prefix = self.config["android"]["toolchain_prefix"]
|
||||
android_lib = self.config["android"]["lib"]
|
||||
android_arch = self.config["android"]["arch"]
|
||||
|
||||
# Build OpenSSL for android
|
||||
env["OPENSSL_VERSION"] = "1.0.2k"
|
||||
|
@ -298,7 +301,7 @@ class MachCommands(CommandBase):
|
|||
sys.exit(1)
|
||||
|
||||
env["RUST_TARGET"] = target
|
||||
env["ANDROID_TOOLCHAIN_NAME"] = self.config["android"]["toolchain_prefix"]
|
||||
env["ANDROID_TOOLCHAIN_NAME"] = android_toolchain_name
|
||||
with cd(openssl_dir):
|
||||
status = call(
|
||||
make_cmd + ["-f", "openssl.makefile"],
|
||||
|
@ -324,30 +327,67 @@ class MachCommands(CommandBase):
|
|||
host_suffix = "x86_64"
|
||||
host = os_type + "-" + host_suffix
|
||||
|
||||
env['PATH'] = path.join(
|
||||
env['ANDROID_NDK'], "toolchains", android_toolchain, "prebuilt", host, "bin"
|
||||
) + ':' + env['PATH']
|
||||
env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms", android_platform, android_arch)
|
||||
host_cc = env.get('HOST_CC') or _get_exec_path(["clang"]) or _get_exec_path(["gcc"])
|
||||
host_cxx = env.get('HOST_CXX') or _get_exec_path(["clang++"]) or _get_exec_path(["g++"])
|
||||
|
||||
llvm_toolchain = path.join(env['ANDROID_NDK'], "toolchains", "llvm", "prebuilt", host)
|
||||
gcc_toolchain = path.join(env['ANDROID_NDK'], "toolchains",
|
||||
android_toolchain_prefix + "-4.9", "prebuilt", host)
|
||||
gcc_libs = path.join(gcc_toolchain, "lib", "gcc", android_toolchain_name, "4.9.x")
|
||||
|
||||
env['PATH'] = (path.join(llvm_toolchain, "bin") + ':'
|
||||
+ path.join(gcc_toolchain, "bin") + ':'
|
||||
+ env['PATH'])
|
||||
env['ANDROID_SYSROOT'] = path.join(env['ANDROID_NDK'], "platforms",
|
||||
android_platform, "arch-" + android_arch)
|
||||
support_include = path.join(env['ANDROID_NDK'], "sources", "android", "support", "include")
|
||||
cxx_include = path.join(
|
||||
env['ANDROID_NDK'], "sources", "cxx-stl", "llvm-libc++", "libcxx", "include")
|
||||
cxxabi_include = path.join(
|
||||
env['ANDROID_NDK'], "sources", "cxx-stl", "llvm-libc++abi", "libcxxabi", "include")
|
||||
sysroot_include = path.join(
|
||||
env['ANDROID_SYSROOT'], "usr", "include")
|
||||
cxx_include = path.join(env['ANDROID_NDK'], "sources", "cxx-stl",
|
||||
"llvm-libc++", "libcxx", "include")
|
||||
sysroot_include = path.join(env['ANDROID_SYSROOT'], "usr", "include")
|
||||
env['HOST_CC'] = host_cc
|
||||
env['HOST_CXX'] = host_cxx
|
||||
env['HOST_CFLAGS'] = ''
|
||||
env['HOST_CXXFLAGS'] = ''
|
||||
env['CC'] = path.join(llvm_toolchain, "bin", "clang")
|
||||
env['CPP'] = path.join(llvm_toolchain, "bin", "clang") + " -E"
|
||||
env['CXX'] = path.join(llvm_toolchain, "bin", "clang++")
|
||||
env['ANDROID_TOOLCHAIN'] = gcc_toolchain
|
||||
env['GCC_TOOLCHAIN'] = gcc_toolchain
|
||||
gcc_toolchain_bin = path.join(gcc_toolchain, android_toolchain_name, "bin")
|
||||
env['AR'] = path.join(gcc_toolchain_bin, "ar")
|
||||
env['RANLIB'] = path.join(gcc_toolchain_bin, "ranlib")
|
||||
env['OBJCOPY'] = path.join(gcc_toolchain_bin, "objcopy")
|
||||
env['YASM'] = path.join(env['ANDROID_NDK'], 'prebuilt', host, 'bin', 'yasm')
|
||||
# A cheat-sheet for some of the build errors caused by getting the search path wrong...
|
||||
#
|
||||
# fatal error: 'limits' file not found
|
||||
# -- add -I cxx_include
|
||||
# unknown type name '__locale_t' (when running bindgen in mozjs_sys)
|
||||
# -- add -isystem sysroot_include
|
||||
# error: use of undeclared identifier 'UINTMAX_C'
|
||||
# -- add -D__STDC_CONSTANT_MACROS
|
||||
#
|
||||
# Also worth remembering: autoconf uses C for its configuration,
|
||||
# even for C++ builds, so the C flags need to line up with the C++ flags.
|
||||
env['CFLAGS'] = ' '.join([
|
||||
"--target=" + target,
|
||||
"--sysroot=" + env['ANDROID_SYSROOT'],
|
||||
"-I" + support_include])
|
||||
"--gcc-toolchain=" + gcc_toolchain,
|
||||
"-isystem", sysroot_include,
|
||||
"-L" + gcc_libs])
|
||||
env['CXXFLAGS'] = ' '.join([
|
||||
"--target=" + target,
|
||||
"--sysroot=" + env['ANDROID_SYSROOT'],
|
||||
"--gcc-toolchain=" + gcc_toolchain,
|
||||
"-I" + support_include,
|
||||
"-I" + cxx_include,
|
||||
"-I" + cxxabi_include,
|
||||
"-I" + sysroot_include])
|
||||
"-isystem", sysroot_include,
|
||||
"-L" + gcc_libs,
|
||||
"-D__STDC_CONSTANT_MACROS",
|
||||
"-D__NDK_FPABI__="])
|
||||
env["NDK_ANDROID_VERSION"] = android_platform.replace("android-", "")
|
||||
env['CPPFLAGS'] = ' '.join(["--sysroot", env['ANDROID_SYSROOT']])
|
||||
env["CMAKE_ANDROID_ARCH_ABI"] = self.config["android"]["lib"]
|
||||
env["CMAKE_ANDROID_ARCH_ABI"] = android_lib
|
||||
env["CMAKE_TOOLCHAIN_FILE"] = path.join(self.android_support_dir(), "toolchain.cmake")
|
||||
# Set output dir for gradle aar files
|
||||
aar_out_dir = self.android_aar_dir()
|
||||
|
@ -355,6 +395,11 @@ class MachCommands(CommandBase):
|
|||
os.makedirs(aar_out_dir)
|
||||
env["AAR_OUT_DIR"] = aar_out_dir
|
||||
|
||||
if very_verbose:
|
||||
print (["Calling", "cargo", "build"] + opts)
|
||||
for key in env:
|
||||
print((key, env[key]))
|
||||
|
||||
status = self.call_rustup_run(["cargo", "build"] + opts, env=env, verbose=verbose)
|
||||
elapsed = time() - build_start
|
||||
|
||||
|
|
|
@ -503,8 +503,13 @@ class CommandBase(object):
|
|||
env["OPENSSL_INCLUDE_DIR"] = path.join(package_dir("openssl"), "include")
|
||||
env["OPENSSL_LIB_DIR"] = path.join(package_dir("openssl"), "lib" + msvc_x64)
|
||||
env["OPENSSL_LIBS"] = "libsslMD:libcryptoMD"
|
||||
# Link moztools
|
||||
env["MOZTOOLS_PATH"] = path.join(package_dir("moztools"), "bin")
|
||||
# Link moztools, used for building SpiderMonkey
|
||||
env["MOZTOOLS_PATH"] = os.pathsep.join([
|
||||
path.join(package_dir("moztools"), "bin"),
|
||||
path.join(package_dir("moztools"), "msys", "bin"),
|
||||
])
|
||||
# Link autoconf 2.13, used for building SpiderMonkey
|
||||
env["AUTOCONF"] = path.join(package_dir("moztools"), "msys", "local", "bin", "autoconf-2.13")
|
||||
# Link LLVM
|
||||
env["LIBCLANG_PATH"] = path.join(package_dir("llvm"), "lib")
|
||||
|
||||
|
@ -650,21 +655,13 @@ class CommandBase(object):
|
|||
return "emulator"
|
||||
|
||||
def handle_android_target(self, target):
|
||||
if target == "arm-linux-androideabi":
|
||||
self.config["android"]["platform"] = "android-18"
|
||||
self.config["android"]["target"] = target
|
||||
self.config["android"]["toolchain_prefix"] = target
|
||||
self.config["android"]["arch"] = "arm"
|
||||
self.config["android"]["lib"] = "armeabi"
|
||||
self.config["android"]["toolchain_name"] = target + "-4.9"
|
||||
return True
|
||||
elif target == "armv7-linux-androideabi":
|
||||
if target == "armv7-linux-androideabi":
|
||||
self.config["android"]["platform"] = "android-18"
|
||||
self.config["android"]["target"] = target
|
||||
self.config["android"]["toolchain_prefix"] = "arm-linux-androideabi"
|
||||
self.config["android"]["arch"] = "arm"
|
||||
self.config["android"]["lib"] = "armeabi-v7a"
|
||||
self.config["android"]["toolchain_name"] = "arm-linux-androideabi-4.9"
|
||||
self.config["android"]["toolchain_name"] = "arm-linux-androideabi"
|
||||
return True
|
||||
elif target == "aarch64-linux-android":
|
||||
self.config["android"]["platform"] = "android-21"
|
||||
|
@ -672,15 +669,16 @@ class CommandBase(object):
|
|||
self.config["android"]["toolchain_prefix"] = target
|
||||
self.config["android"]["arch"] = "arm64"
|
||||
self.config["android"]["lib"] = "arm64-v8a"
|
||||
self.config["android"]["toolchain_name"] = target + "-4.9"
|
||||
self.config["android"]["toolchain_name"] = target
|
||||
return True
|
||||
elif target == "i686-linux-android":
|
||||
self.config["android"]["platform"] = "android-18"
|
||||
# https://github.com/jemalloc/jemalloc/issues/1279
|
||||
self.config["android"]["platform"] = "android-21"
|
||||
self.config["android"]["target"] = target
|
||||
self.config["android"]["toolchain_prefix"] = "x86"
|
||||
self.config["android"]["arch"] = "x86"
|
||||
self.config["android"]["lib"] = "x86"
|
||||
self.config["android"]["toolchain_name"] = "x86-4.9"
|
||||
self.config["android"]["toolchain_name"] = target
|
||||
return True
|
||||
return False
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
WINDOWS_MSVC = {
|
||||
"cmake": "3.7.2",
|
||||
"llvm": "6.0.0",
|
||||
"moztools": "0.0.1-5",
|
||||
"moztools": "3.2",
|
||||
"ninja": "1.7.1",
|
||||
"openssl": "1.1.0e-vs2015",
|
||||
}
|
||||
|
|
|
@ -55,6 +55,9 @@
|
|||
"js.strict.enabled": false,
|
||||
"js.throw_on_asmjs_validation_failure.enabled": false,
|
||||
"js.throw_on_debuggee_would_run.enabled": false,
|
||||
"js.wasm.baseline.enabled": true,
|
||||
"js.wasm.enabled": true,
|
||||
"js.wasm.ion.enabled": true,
|
||||
"js.werror.enabled": false,
|
||||
"layout.animations.test.enabled": false,
|
||||
"layout.columns.enabled": false,
|
||||
|
|
|
@ -11,5 +11,5 @@ set -o pipefail
|
|||
source ./support/android/fakeld/fake-ld.sh
|
||||
|
||||
export _GCC_PARAMS="${@}"
|
||||
call_gcc "arch-arm" "arm-linux-androideabi" "android-18" "armeabi" \
|
||||
call_gcc "arch-arm" "arm-linux-androideabi" "android-21" "armeabi" \
|
||||
"arm-linux-androideabi"
|
||||
|
|
|
@ -11,4 +11,4 @@ set -o pipefail
|
|||
source ./support/android/fakeld/fake-ld.sh
|
||||
|
||||
export _GCC_PARAMS="${@}"
|
||||
call_gcc "arch-x86" "x86" "android-18" "x86" "i686-linux-android"
|
||||
call_gcc "arch-x86" "x86" "android-21" "x86" "i686-linux-android"
|
||||
|
|
|
@ -31,38 +31,42 @@ _ANDROID_NDK="android-ndk-r9"
|
|||
case $RUST_TARGET in
|
||||
armv7*)
|
||||
_ANDROID_TARGET="arm-linux-androideabi"
|
||||
_ANDROID_ARCH=arch-arm
|
||||
_ANDROID_ARCH="arch-arm"
|
||||
_ANDROID_GCC="arm-linux-androideabi"
|
||||
_OPENSSL_MACHINE="armv7"
|
||||
_OPENSSL_ARCH="arm"
|
||||
_OPENSSL_CONFIG="android-armv7"
|
||||
_OPENSSL_CONFIG="linux-generic32"
|
||||
;;
|
||||
arm*)
|
||||
_ANDROID_TARGET=$RUST_TARGET
|
||||
_ANDROID_ARCH=arch-arm
|
||||
_ANDROID_ARCH="arch-arm"
|
||||
_ANDROID_GCC="arm-linux-androideabi"
|
||||
_OPENSSL_MACHINE="arm"
|
||||
_OPENSSL_ARCH="arm"
|
||||
_OPENSSL_CONFIG="android-armv7"
|
||||
_OPENSSL_CONFIG="linux-generic32"
|
||||
;;
|
||||
aarch64*)
|
||||
_ANDROID_TARGET=$RUST_TARGET
|
||||
_ANDROID_ARCH=arch-arm64
|
||||
_ANDROID_ARCH="arch-arm64"
|
||||
_ANDROID_GCC="aarch64-linux-android"
|
||||
_OPENSSL_MACHINE="armv7"
|
||||
_OPENSSL_ARCH="arm64"
|
||||
_OPENSSL_CONFIG="linux-generic64 -DB_ENDIAN"
|
||||
;;
|
||||
x86* | i686*)
|
||||
_ANDROID_TARGET=$RUST_TARGET
|
||||
_ANDROID_ARCH=arch-x86
|
||||
_ANDROID_ARCH="arch-x86"
|
||||
_ANDROID_GCC="x86"
|
||||
_OPENSSL_MACHINE="x86"
|
||||
_OPENSSL_ARCH="arm"
|
||||
_OPENSSL_CONFIG="android-x86"
|
||||
_OPENSSL_ARCH="x86"
|
||||
_OPENSSL_CONFIG="linux-generic32"
|
||||
;;
|
||||
*)
|
||||
echo "Error: Invalid TARGET platform: $RUST_TARGET"
|
||||
;;
|
||||
esac
|
||||
|
||||
_ANDROID_EABI="$ANDROID_TOOLCHAIN_NAME-4.9"
|
||||
_ANDROID_EABI="llvm"
|
||||
|
||||
|
||||
# Set _ANDROID_API to the API you want to use. You should set it
|
||||
|
@ -87,22 +91,22 @@ echo $ANDROID_NDK_ROOT
|
|||
# http://groups.google.com/group/android-ndk/browse_thread/thread/a998e139aca71d77
|
||||
if [ -z "$ANDROID_NDK_ROOT" ] || [ ! -d "$ANDROID_NDK_ROOT" ]; then
|
||||
echo "Error: ANDROID_NDK_ROOT is not a valid path. Please edit this script."
|
||||
# echo "$ANDROID_NDK_ROOT"
|
||||
# exit 1
|
||||
echo "$ANDROID_NDK_ROOT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Error checking
|
||||
if [ ! -d "$ANDROID_NDK_ROOT/toolchains" ]; then
|
||||
echo "Error: ANDROID_NDK_ROOT/toolchains is not a valid path. Please edit this script."
|
||||
# echo "$ANDROID_NDK_ROOT/toolchains"
|
||||
# exit 1
|
||||
echo "$ANDROID_NDK_ROOT/toolchains"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Error checking
|
||||
if [ ! -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI" ]; then
|
||||
echo "Error: ANDROID_EABI is not a valid path. Please edit this script."
|
||||
# echo "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI"
|
||||
# exit 1
|
||||
echo "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#####################################################################
|
||||
|
@ -114,10 +118,12 @@ fi
|
|||
# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
|
||||
|
||||
ANDROID_TOOLCHAIN=""
|
||||
ANDROID_GCC_TOOLCHAIN=""
|
||||
for host in "linux-x86_64" "linux-x86" "darwin-x86_64" "darwin-x86"
|
||||
do
|
||||
if [ -d "$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin" ]; then
|
||||
ANDROID_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/$_ANDROID_EABI/prebuilt/$host/bin"
|
||||
ANDROID_GCC_TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/$_ANDROID_GCC-4.9/prebuilt/$host/$_ANDROID_TARGET/bin"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
@ -125,26 +131,38 @@ done
|
|||
# Error checking
|
||||
if [ -z "$ANDROID_TOOLCHAIN" ] || [ ! -d "$ANDROID_TOOLCHAIN" ]; then
|
||||
echo "Error: ANDROID_TOOLCHAIN is not valid. Please edit this script."
|
||||
# echo "$ANDROID_TOOLCHAIN"
|
||||
# exit 1
|
||||
echo "$ANDROID_TOOLCHAIN"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ANDROID_TOOLS="$_ANDROID_TARGET-gcc $_ANDROID_TARGET-ranlib $_ANDROID_TARGET-ld"
|
||||
ANDROID_TOOLS="clang"
|
||||
|
||||
for tool in $ANDROID_TOOLS
|
||||
do
|
||||
# Error checking
|
||||
if [ ! -e "$ANDROID_TOOLCHAIN/$tool" ]; then
|
||||
echo "Error: Failed to find $tool. Please edit this script."
|
||||
# echo "$ANDROID_TOOLCHAIN/$tool"
|
||||
# exit 1
|
||||
echo "$ANDROID_TOOLCHAIN/$tool"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
GCC_TOOLS="ar ranlib ld"
|
||||
|
||||
for tool in $GCC_TOOLS
|
||||
do
|
||||
# Error checking
|
||||
if [ ! -e "$ANDROID_GCC_TOOLCHAIN/$tool" ]; then
|
||||
echo "Error: Failed to find $tool. Please edit this script."
|
||||
echo "$ANDROID_GCC_TOOLCHAIN/$tool"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Only modify/export PATH if ANDROID_TOOLCHAIN good
|
||||
if [ ! -z "$ANDROID_TOOLCHAIN" ]; then
|
||||
export ANDROID_TOOLCHAIN="$ANDROID_TOOLCHAIN"
|
||||
export PATH="$ANDROID_TOOLCHAIN":"$PATH"
|
||||
export PATH="$ANDROID_TOOLCHAIN":"$ANDROID_GCC_TOOLCHAIN":"$PATH"
|
||||
fi
|
||||
|
||||
#####################################################################
|
||||
|
@ -158,8 +176,8 @@ export NDK_SYSROOT="$ANDROID_SYSROOT"
|
|||
# Error checking
|
||||
if [ -z "$ANDROID_SYSROOT" ] || [ ! -d "$ANDROID_SYSROOT" ]; then
|
||||
echo "Error: ANDROID_SYSROOT is not valid. Please edit this script."
|
||||
# echo "$ANDROID_SYSROOT"
|
||||
# exit 1
|
||||
echo "$ANDROID_SYSROOT"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
#####################################################################
|
||||
|
@ -171,13 +189,13 @@ export MACHINE=$_OPENSSL_MACHINE
|
|||
export RELEASE=2.6.37
|
||||
export SYSTEM=android
|
||||
export ARCH=$_OPENSSL_ARCH
|
||||
export CROSS_COMPILE="$_ANDROID_TARGET-"
|
||||
#export CROSS_COMPILE="$_ANDROID_TARGET-"
|
||||
|
||||
# For the Android toolchain
|
||||
# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
|
||||
export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH"
|
||||
export SYSROOT="$ANDROID_SYSROOT"
|
||||
export CROSS_SYSROOT="$ANDROID_SYSROOT"
|
||||
#export CROSS_SYSROOT="$ANDROID_SYSROOT"
|
||||
export NDK_SYSROOT="$ANDROID_SYSROOT"
|
||||
export ANDROID_NDK_SYSROOT="$ANDROID_SYSROOT"
|
||||
export ANDROID_API="$_ANDROID_API"
|
||||
|
@ -186,9 +204,24 @@ export ANDROID_API="$_ANDROID_API"
|
|||
# export CROSS_COMPILE="arm-linux-androideabi-"
|
||||
export ANDROID_DEV="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr"
|
||||
export HOSTCC=gcc
|
||||
export CC=clang
|
||||
export RANLIB="$ANDROID_GCC_TOOLCHAIN/ranlib"
|
||||
export AR="$ANDROID_GCC_TOOLCHAIN/ar"
|
||||
export LD="$ANDROID_GCC_TOOLCHAIN/ld"
|
||||
|
||||
# See https://github.com/cocochpie/android-openssl/blob/master/build-all-arch.sh
|
||||
xCFLAGS="-DSHARED_EXTENSION=.so -fPIC -DOPENSSL_PIC -DDSO_DLFCN -DHAVE_DLFCN_H -mandroid -I$ANDROID_DEV/include -B$ANDROID_DEV/lib -O3 -fomit-frame-pointer -Wall"
|
||||
#+xCFLAGS="-DSHARED_EXTENSION=.so -fPIC -DOPENSSL_PIC -DDSO_DLFCN -DHAVE_DLFCN_H -B$ANDROID_DEV/lib -O3 -fomit-frame-pointer -Wall -D__ANDROID_API__=18 --target=armv7a-none-linux-androideabi --gcc-toolchain=$ANDROID_NDK_ROOT/toolchains/$_ANDROID_TARGET-4.9/prebuilt/$host --sysroot=$ANDROID_SYSROOT -I$ANDROID_DEV/include -I$ANDROID_DEV/include/$_ANDROID_TARGET -L$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr/lib -B$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr/lib"
|
||||
|
||||
xCFLAGS="-DSHARED_EXTENSION=.so -DOPENSSL_PIC -DDSO_DLFCN -DHAVE_DLFCN_H \
|
||||
-fPIC -fomit-frame-pointer \
|
||||
-Wall -Wno-error=macro-redefined \
|
||||
-O3 \
|
||||
-I$ANDROID_DEV/include \
|
||||
-B$ANDROID_DEV/lib -B$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr/lib \
|
||||
-L$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr/lib -L$ANDROID_NDK_ROOT/toolchains/$_ANDROID_GCC-4.9/prebuilt/$host/lib/gcc/$_ANDROID_TARGET/4.9.x/ \
|
||||
--gcc-toolchain=$ANDROID_GCC_TOOLCHAIN \
|
||||
--sysroot=$ANDROID_SYSROOT \
|
||||
--target=$RUST_TARGET"
|
||||
|
||||
VERBOSE=1
|
||||
if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then
|
||||
|
|
|
@ -2,3 +2,5 @@ set(CMAKE_SYSTEM_NAME Android)
|
|||
set(CMAKE_ANDROID_NDK $ENV{ANDROID_NDK})
|
||||
set(CMAKE_ANDROID_API $ENV{NDK_ANDROID_VERSION})
|
||||
set(CMAKE_ANDROID_ARCH_ABI $ENV{CMAKE_ANDROID_ARCH_ABI})
|
||||
set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang)
|
||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
8
support/arm32/fake-ld.sh
Executable file
8
support/arm32/fake-ld.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
echo /usr/bin/arm-linux-gnueabihf-ld -L/usr/lib/arm-linux-gnueabihf $*
|
||||
/usr/bin/arm-linux-gnueabihf-ld -L/usr/lib/arm-linux-gnueabihf $*
|
8
support/arm64/fake-ld.sh
Executable file
8
support/arm64/fake-ld.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
echo /usr/bin/aarch64-linux-gnu-ld -L/usr/lib/aarch64-linux-gnu $*
|
||||
/usr/bin/aarch64-linux-gnu-ld -L/usr/lib/aarch64-linux-gnu $*
|
|
@ -1,4 +1,58 @@
|
|||
[Blob-constructor-endings.html]
|
||||
[Blob constructor: endings option]
|
||||
[The "endings" options property is used]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input LFCRLFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: null]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: {}]
|
||||
expected: FAIL
|
||||
|
||||
[Input CR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[CR/LF in adjacent input strings]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFCRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: ""]
|
||||
expected: FAIL
|
||||
|
||||
[Input LFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "Transparent"]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRCRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "NATIVE"]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: 0]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "invalidEnumValue"]
|
||||
expected: FAIL
|
||||
|
||||
[Exception propagation from options]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,12 +1,6 @@
|
|||
[Blob-constructor.html]
|
||||
type: testharness
|
||||
[Passing non-objects, Dates and RegExps for blobParts should throw a TypeError.]
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/rust-mozjs/issues/269
|
||||
|
||||
[Passing a FrozenArray as the blobParts array should work (FrozenArray<MessagePort>).]
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/servo/issues/7457
|
||||
|
||||
[options properties should be accessed in lexicographic order.]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,58 @@
|
|||
[File-constructor-endings.html]
|
||||
[File constructor: endings option]
|
||||
[The "endings" options property is used]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input LFCRLFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: null]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: {}]
|
||||
expected: FAIL
|
||||
|
||||
[Input CR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[CR/LF in adjacent input strings]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFCRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: ""]
|
||||
expected: FAIL
|
||||
|
||||
[Input LFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "Transparent"]
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFCR with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLFLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRCRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Input CRLF with endings 'native']
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "NATIVE"]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: 0]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid "endings" value: "invalidEnumValue"]
|
||||
expected: FAIL
|
||||
|
||||
[Exception propagation from options]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
[File-constructor.html]
|
||||
type: testharness
|
||||
[HTMLDocument in fileBits]
|
||||
expected: FAIL
|
||||
|
||||
[Invalid bits argument: "hello"]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,19 @@
|
|||
[send-file-form-iso-2022-jp.tentative.html]
|
||||
[Upload files in ISO-2022-JP form (tentative)]
|
||||
[Upload file-for-upload-in-form-☺😂.txt (windows-1252) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ.txt (Unicode) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-.txt (x-user-defined) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-★星★.txt (JIS X 0201 and JIS X 0208) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form.txt (ASCII) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (Unicode) in ISO-2022-JP form]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
[send-file-form-utf-8.html]
|
||||
[Upload files in UTF-8 form]
|
||||
[Upload file-for-upload-in-form-☺😂.txt (windows-1252) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-★星★.txt (JIS X 0201 and JIS X 0208) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-.txt (x-user-defined) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ.txt (Unicode) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form.txt (ASCII) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (Unicode) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
[send-file-form-windows-1252.tentative.html]
|
||||
[Upload files in Windows-1252 form (tentative)]
|
||||
[Upload file-for-upload-in-form-ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ.txt (Unicode) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form.txt (ASCII) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (Unicode) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-★星★.txt (JIS X 0201 and JIS X 0208) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (windows-1252) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-.txt (x-user-defined) in windows-1252 form]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
[send-file-form-x-user-defined.tentative.html]
|
||||
[Upload files in x-user-defined form (tentative)]
|
||||
[Upload file-for-upload-in-form.txt (ASCII) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (Unicode) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-★星★.txt (JIS X 0201 and JIS X 0208) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-☺😂.txt (windows-1252) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-.txt (x-user-defined) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
[Upload file-for-upload-in-form-ABC~‾¥≈¤・・•∙·☼★星🌟星★☼·∙•・・¤≈¥‾~XYZ.txt (Unicode) in x-user-defined form]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[send-file-form.html]
|
||||
[Upload ASCII-named file in UTF-8 form]
|
||||
[Upload file-for-upload-in-form.txt (ASCII) in UTF-8 form]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[historical.https.html]
|
||||
[Historical features]
|
||||
expected: FAIL
|
||||
|
||||
[Service worker test setup]
|
||||
expected: FAIL
|
||||
|
|
|
@ -21,63 +21,9 @@
|
|||
[FileReader interface: calling readAsBinaryString(Blob) on new FileReader() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: operation readAsArrayBuffer(Blob)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: operation readAsBinaryString(Blob)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: operation readAsText(Blob,DOMString)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: operation readAsDataURL(Blob)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsArrayBuffer" with the proper type (0)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: calling readAsArrayBuffer(Blob) on new FileReaderSync() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsBinaryString" with the proper type (1)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: calling readAsBinaryString(Blob) on new FileReaderSync() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsText" with the proper type (2)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: calling readAsText(Blob,DOMString) on new FileReaderSync() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsDataURL" with the proper type (3)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: calling readAsDataURL(Blob) on new FileReaderSync() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReader interface: new FileReader() must inherit property "readAsBinaryString(Blob)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: operation readAsText(Blob, DOMString)]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsArrayBuffer(Blob)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsBinaryString(Blob)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsText(Blob, DOMString)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: calling readAsText(Blob, DOMString) on new FileReaderSync() with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
[FileReaderSync interface: new FileReaderSync() must inherit property "readAsDataURL(Blob)" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Untitled]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[sandboxed-iframe.html]
|
||||
[FileAPI Test: Verify behavior of Blob URL in unique origins]
|
||||
expected: FAIL
|
||||
expected: TIMEOUT
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
[url-with-fetch.any.worker.html]
|
||||
[url-with-fetch]
|
||||
expected: FAIL
|
||||
[Only exact matches should revoke URLs, using fetch]
|
||||
expected: FAIL
|
||||
[Appending a query string should cause fetch to fail]
|
||||
expected: FAIL
|
||||
[Appending a path should cause fetch to fail]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[url-with-fetch.any.html]
|
||||
|
@ -9,4 +19,14 @@
|
|||
|
||||
[url-with-fetch]
|
||||
expected: FAIL
|
||||
[Only exact matches should revoke URLs, using fetch]
|
||||
expected: FAIL
|
||||
[Appending a query string should cause fetch to fail]
|
||||
expected: FAIL
|
||||
[Appending a path should cause fetch to fail]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after creating Request, will fetch]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -4,9 +4,26 @@
|
|||
|
||||
[url-with-xhr]
|
||||
expected: FAIL
|
||||
[Only exact matches should revoke URLs, using XHR]
|
||||
expected: FAIL
|
||||
[Appending a query string should cause XHR to fail]
|
||||
expected: FAIL
|
||||
[Appending a path should cause XHR to fail]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after open(), will fetch]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[url-with-xhr.any.worker.html]
|
||||
[url-with-xhr]
|
||||
expected: FAIL
|
||||
[Only exact matches should revoke URLs, using XHR]
|
||||
expected: FAIL
|
||||
[Appending a query string should cause XHR to fail]
|
||||
expected: FAIL
|
||||
[Appending a path should cause XHR to fail]
|
||||
expected: FAIL
|
||||
[Revoke blob URL after open(), will fetch]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
|
|
|
@ -1,9 +1,232 @@
|
|||
[idlharness.https.any.html]
|
||||
[idlharness]
|
||||
expected: FAIL
|
||||
|
||||
[Crypto interface: attribute subtle]
|
||||
expected: FAIL
|
||||
[Crypto interface: crypto must inherit property "subtle" with the proper type]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[CryptoKey interface object length]
|
||||
expected: FAIL
|
||||
[CryptoKey interface object name]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute type]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute extractable]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute algorithm]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute usages]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface object length]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface object name]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation encrypt(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation decrypt(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation sign(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation digest(AlgorithmIdentifier, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation generateKey(AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation exportKey(KeyFormat, CryptoKey)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto must be primary interface of crypto.subtle]
|
||||
expected: FAIL
|
||||
[Stringification of crypto.subtle]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "encrypt(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling encrypt(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "decrypt(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling decrypt(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "sign(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling sign(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "digest(AlgorithmIdentifier, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling digest(AlgorithmIdentifier, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "generateKey(AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling generateKey(AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "exportKey(KeyFormat, CryptoKey)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling exportKey(KeyFormat, CryptoKey) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[idlharness.https.any.worker.html]
|
||||
[idlharness]
|
||||
expected: FAIL
|
||||
|
||||
[Crypto interface: attribute subtle]
|
||||
expected: FAIL
|
||||
[Crypto interface: crypto must inherit property "subtle" with the proper type]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[CryptoKey interface object length]
|
||||
expected: FAIL
|
||||
[CryptoKey interface object name]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute type]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute extractable]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute algorithm]
|
||||
expected: FAIL
|
||||
[CryptoKey interface: attribute usages]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface object length]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface object name]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation encrypt(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation decrypt(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation sign(AlgorithmIdentifier, CryptoKey, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation digest(AlgorithmIdentifier, BufferSource)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation generateKey(AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation exportKey(KeyFormat, CryptoKey)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier)]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: operation unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\])]
|
||||
expected: FAIL
|
||||
[SubtleCrypto must be primary interface of crypto.subtle]
|
||||
expected: FAIL
|
||||
[Stringification of crypto.subtle]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "encrypt(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling encrypt(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "decrypt(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling decrypt(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "sign(AlgorithmIdentifier, CryptoKey, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling sign(AlgorithmIdentifier, CryptoKey, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling verify(AlgorithmIdentifier, CryptoKey, BufferSource, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "digest(AlgorithmIdentifier, BufferSource)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling digest(AlgorithmIdentifier, BufferSource) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "generateKey(AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling generateKey(AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling deriveKey(AlgorithmIdentifier, CryptoKey, AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling deriveBits(AlgorithmIdentifier, CryptoKey, unsigned long) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling importKey(KeyFormat, \[object Object\],\[object Object\], AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "exportKey(KeyFormat, CryptoKey)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling exportKey(KeyFormat, CryptoKey) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier)" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling wrapKey(KeyFormat, CryptoKey, CryptoKey, AlgorithmIdentifier) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: crypto.subtle must inherit property "unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\])" with the proper type]
|
||||
expected: FAIL
|
||||
[SubtleCrypto interface: calling unwrapKey(KeyFormat, BufferSource, CryptoKey, AlgorithmIdentifier, AlgorithmIdentifier, boolean, \[object Object\]) on crypto.subtle with too few arguments must throw TypeError]
|
||||
expected: FAIL
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
[no-regexp-special-casing]
|
||||
expected: FAIL
|
||||
|
||||
[Conversion to a sequence works]
|
||||
expected: FAIL
|
||||
|
||||
[no-regexp-special-casing.any.html]
|
||||
[Untitled]
|
||||
|
@ -13,3 +15,6 @@
|
|||
[no-regexp-special-casing]
|
||||
expected: FAIL
|
||||
|
||||
[Conversion to a sequence works]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[floats-in-table-caption-001.html]
|
||||
expected: FAIL
|
|
@ -1,4 +1,130 @@
|
|||
[AnimationEffect-getComputedTiming.tentative.html]
|
||||
[AnimationEffect.getComputedTiming() for CSS animations]
|
||||
[currentIteration of an animation with an integral iteration count]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of a new animation is zero]
|
||||
expected: FAIL
|
||||
|
||||
[localTime reflects playbackRate immediately]
|
||||
expected: FAIL
|
||||
|
||||
[iterations of a finitely repeating animation]
|
||||
expected: FAIL
|
||||
|
||||
[activeDuration of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a non-integral repeating animation with alternate direction]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a non-integral repeating zero-duration animation with alternate-reverse direction]
|
||||
expected: FAIL
|
||||
|
||||
[localTime of an animation is always equal to currentTime]
|
||||
expected: FAIL
|
||||
|
||||
[activeDuration of an infinitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[Progress of a non-integral repeating zero-duration animation with reversing direction]
|
||||
expected: FAIL
|
||||
|
||||
[endTime of an animation with a negative delay]
|
||||
expected: FAIL
|
||||
|
||||
[localTime of an AnimationEffect without an Animation]
|
||||
expected: FAIL
|
||||
|
||||
[duration of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[Negative delay of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of a new animation with no backwards fill is unresolved in before phase]
|
||||
expected: FAIL
|
||||
|
||||
[localTime of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of an animation with different fill modes]
|
||||
expected: FAIL
|
||||
|
||||
[delay of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[iterationStart of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of an animation with a non-integral iteration count]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a non-integral repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[endTime of an new animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a non-integral repeating zero-duration animation with alternate direction]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of an animation with a default iteration count]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of an infinitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[endDelay of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[iterations of an infinitely repeating animation]
|
||||
expected: FAIL
|
||||
|
||||
[direction of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[endTime of an animation that finishes before its startTime]
|
||||
expected: FAIL
|
||||
|
||||
[fill of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[endTime of an infinitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[iterations of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a non-integral repeating animation with alternate-reversing direction]
|
||||
expected: FAIL
|
||||
|
||||
[activeDuration of an animation with zero iterations]
|
||||
expected: FAIL
|
||||
|
||||
[progress of an infinitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of a finitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of an AnimationEffect without an Animation]
|
||||
expected: FAIL
|
||||
|
||||
[Positive delay of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[easing of a new animation]
|
||||
expected: FAIL
|
||||
|
||||
[progress of an integral repeating animation with normal direction]
|
||||
expected: FAIL
|
||||
|
||||
[endTime of an infinitely repeating animation]
|
||||
expected: FAIL
|
||||
|
||||
[currentIteration of a finitely repeating zero-duration animation]
|
||||
expected: FAIL
|
||||
|
||||
[activeDuration of an infinitely repeating animation]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
[CSSAnimation-animationName.tentative.html]
|
||||
[CSSAnimation.animationName]
|
||||
[Animation name with hex-escape]
|
||||
expected: FAIL
|
||||
|
||||
[Animation name makes keyframe rule]
|
||||
expected: FAIL
|
||||
|
||||
[Escaped animation name]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,28 @@
|
|||
[CSSAnimation-canceling.tentative.html]
|
||||
[Canceling a CSS animation]
|
||||
[Setting animation-name to 'none' cancels the animation]
|
||||
expected: FAIL
|
||||
|
||||
[Animated style is cleared after canceling a filling CSS animation]
|
||||
expected: FAIL
|
||||
|
||||
[Setting display:none on an element cancel its animations]
|
||||
expected: FAIL
|
||||
|
||||
[Setting display:none on an ancestor element cancels animations on descendants]
|
||||
expected: FAIL
|
||||
|
||||
[Animated style is cleared after canceling a running CSS animation]
|
||||
expected: FAIL
|
||||
|
||||
[After canceling an animation, updating animation properties doesn't make it live again]
|
||||
expected: FAIL
|
||||
|
||||
[After canceling an animation, it can still be re-used]
|
||||
expected: FAIL
|
||||
|
||||
[After canceling an animation, it can still be seeked]
|
||||
expected: FAIL
|
||||
|
||||
[After canceling an animation, updating animation-play-state doesn't make it live again]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
[CSSAnimation-effect.tentative.html]
|
||||
[CSSAnimation.effect]
|
||||
[Replacing an animation's effect with an effect that targets a different property should update both properties]
|
||||
expected: FAIL
|
||||
|
||||
[CSS animation events are dispatched at the original element even after setting an effect with a different target element]
|
||||
expected: FAIL
|
||||
|
||||
[Replacing an animation's effect with a shorter one that should have already finished, the animation finishes immediately]
|
||||
expected: FAIL
|
||||
|
||||
[A play-pending animation's effect whose effect is replaced still exits the pending state]
|
||||
expected: FAIL
|
||||
|
||||
[After replacing a finished animation's effect with a longer one it fires an animationstart event]
|
||||
expected: FAIL
|
||||
|
||||
[Setting a null effect on a running animation fires an animationend event]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
[CSSAnimation-finished.tentative.html]
|
||||
[CSSAnimation.finished]
|
||||
[finished promise is rejected when an animation is canceled by changing the animation property]
|
||||
expected: FAIL
|
||||
|
||||
[finished promise is not reset when animationPlayState is set to running]
|
||||
expected: FAIL
|
||||
|
||||
[finished promise is rejected when an animation is canceled by resetting the animation property]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[CSSAnimation-getComputedTiming.tentative.html]
|
||||
[CSSAnimation.getComputedTiming()]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +1,7 @@
|
|||
[CSSAnimation-getCurrentTime.tentative.html]
|
||||
[CSSAnimation.currentTime]
|
||||
[currentTime can be used to seek a CSS animation]
|
||||
expected: FAIL
|
||||
|
||||
[Setting currentTime to null on a CSS animation throws]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[CSSAnimation-id.tentative.html]
|
||||
[CSSAnimation.id]
|
||||
[Animation.id for CSS Animations]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,19 @@
|
|||
[CSSAnimation-pausing.tentative.html]
|
||||
[Pausing a CSSAnimation]
|
||||
[pause() applies pending changes to animation-play-state first]
|
||||
expected: FAIL
|
||||
|
||||
[play() overrides animation-play-state]
|
||||
expected: FAIL
|
||||
|
||||
[Setting the current time completes a pending pause]
|
||||
expected: FAIL
|
||||
|
||||
[pause() overrides animation-play-state]
|
||||
expected: FAIL
|
||||
|
||||
[play() flushes pending changes to animation-play-state first]
|
||||
expected: FAIL
|
||||
|
||||
[play() is overridden by later setting "animation-play-state: paused"]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
[CSSAnimation-playState.tentative.html]
|
||||
[CSSAnimation.playState]
|
||||
[Animation.playState updates when resumed by setting style]
|
||||
expected: FAIL
|
||||
|
||||
[Animation returns correct playState when paused]
|
||||
expected: FAIL
|
||||
|
||||
[Animation.playState updates when paused by script]
|
||||
expected: FAIL
|
||||
|
||||
[A new CSS animation is initially play-pending]
|
||||
expected: FAIL
|
||||
|
||||
[Animation returns correct playState when canceled]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
[CSSAnimation-ready.tentative.html]
|
||||
[CSSAnimation.ready]
|
||||
[ready promise is rejected when an animation is canceled by resetting the animation property]
|
||||
expected: FAIL
|
||||
|
||||
[ready promise is rejected when an animation is canceled by updating the animation property]
|
||||
expected: FAIL
|
||||
|
||||
[Pausing twice re-uses the same Promise]
|
||||
expected: FAIL
|
||||
|
||||
[A new ready promise is created when setting animation-play-state: running]
|
||||
expected: FAIL
|
||||
|
||||
[A new ready promise is created when setting animation-play-state: paused]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
[CSSAnimation-startTime.tentative.html]
|
||||
[CSSAnimation.startTime]
|
||||
[The start time can be set to seek a CSS animation]
|
||||
expected: FAIL
|
||||
|
||||
[Seeking a CSS animation using the start time dispatches animation events]
|
||||
expected: FAIL
|
||||
|
||||
[The start time of a CSS animation can be set]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
[CSSPseudoElement-getAnimations.tentative.html]
|
||||
[CSSPseudoElement.getAnimations() for CSS animations]
|
||||
[getAnimations returns CSSAnimation objects]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations returns CSS transitions/animations, and script-generated animations in the expected order]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,43 @@
|
|||
[Document-getAnimations.tentative.html]
|
||||
[Document.getAnimations() for CSS animations]
|
||||
[Finished but not filling CSS Animations are not returned]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations and CSS Transitions]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations - markup-bound vs free animations]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations - across elements]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations - free animations]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations canceled and restarted via the API are returned]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations targetting (pseudo-)elements should have correct order after sorting]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for non-animated content]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations - across and within elements]
|
||||
expected: FAIL
|
||||
|
||||
[Order of CSS Animations - within an element]
|
||||
expected: FAIL
|
||||
|
||||
[CSS Animations canceled via the API are not returned]
|
||||
expected: FAIL
|
||||
|
||||
[Finished but filling CSS Animations are returned]
|
||||
expected: FAIL
|
||||
|
||||
[Yet-to-start CSS Animations are returned]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,16 @@
|
|||
[Element-getAnimations-dynamic-changes.tentative.html]
|
||||
[\nElement.getAnimations() - Dynamic changes to the list of CSS animations\n]
|
||||
[Animations preserve their startTime when changed]
|
||||
expected: FAIL
|
||||
|
||||
[Only the startTimes of existing animations are preserved]
|
||||
expected: FAIL
|
||||
|
||||
[Updated Animations maintain their order in the list]
|
||||
expected: FAIL
|
||||
|
||||
[Animations are removed from the start of the list while preserving the state of existing Animations]
|
||||
expected: FAIL
|
||||
|
||||
[Animation state is preserved when interleaving animations in list]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,68 @@
|
|||
[Element-getAnimations.tentative.html]
|
||||
[Element.getAnimations() for CSS animations]
|
||||
expected: TIMEOUT
|
||||
[getAnimations for CSS Animations with animation-name: none]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for multi-property animations]
|
||||
expected: FAIL
|
||||
|
||||
[{ subtree: true } on an element with many descendants returns animations from all the descendants]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations]
|
||||
expected: FAIL
|
||||
|
||||
[{ subtree: false } on an element with a child returns only the element's animations]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for zero-duration CSS Animations]
|
||||
expected: FAIL
|
||||
|
||||
[{ subtree: true } on a leaf element returns the element's animations and its pseudo-elements' animations]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations with duplicated animation-name]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations where the @keyframes rule is added later]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations that are canceled]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations with animation-name: missing]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations that have finished but are forwards filling]
|
||||
expected: TIMEOUT
|
||||
|
||||
[getAnimations returns objects with the same identity]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for both CSS Animations and CSS Transitions at once]
|
||||
expected: FAIL
|
||||
|
||||
[{ subtree: true } on an element with a child returns animations from the element, its pseudo-elements, its child and its child pseudo-elements]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations with empty keyframes rule]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for non-animated content]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations returns CSSAnimation objects for CSS Animations]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations that have finished]
|
||||
expected: TIMEOUT
|
||||
|
||||
[{ subtree: false } on a leaf element returns the element's animations and ignore pseudo-elements]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS animations in delay phase]
|
||||
expected: FAIL
|
||||
|
||||
[getAnimations for CSS Animations follows animation-name order]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,73 @@
|
|||
[KeyframeEffect-getKeyframes.tentative.html]
|
||||
[KeyframeEffect.getKeyframes() for CSS animations]
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with only custom property in a keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for a simple animation that specifies a single shorthand property]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns frames with expected easing values, when the easing is specified on each keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with different properties on different keyframes, all with the same easing function]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with a partially complete 100% keyframe (because the !important rule is ignored)]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for a simple animation]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animation with drop-shadow of filter property]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with multiple keyframes for the same time and with different but equivalent easing functions]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with a CSS variable which is overriden by the value in keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with filter properties and missing keyframes]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns frames with expected easing values, when the easing comes from animation-timing-function on the element]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with background-size properties and missing keyframes]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with a 100% keyframe and no 0% keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with text-shadow properties and missing keyframes]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns frames with expected easing values, when the easing is specified on some keyframes]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for overlapping keyframes]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns no frames for various kinds of empty enimations]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with a 0% keyframe and no 100% keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with different properties on different keyframes, with a different easing function on each]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with no 0% or 100% keyframe but with a 50% keyframe]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with multiple keyframes for the same time, and all with the same easing function]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with CSS variables as keyframe values]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected frames for an animation with multiple keyframes for the same time and with different easing functions]
|
||||
expected: FAIL
|
||||
|
||||
[KeyframeEffect.getKeyframes() returns expected values for animations with CSS variables as keyframe values in a shorthand property]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,10 @@
|
|||
[KeyframeEffect-target.tentative.html]
|
||||
[CSSAnimation.effect.target]
|
||||
[effect.target should return the same CSSPseudoElement object each time]
|
||||
expected: FAIL
|
||||
|
||||
[effect.target from the script-generated animation should return the same CSSPseudoElement object as that from the CSS generated animation]
|
||||
expected: FAIL
|
||||
|
||||
[Returned CSS animations have the correct effect target]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,53 +1,52 @@
|
|||
[animationevent-interface.html]
|
||||
type: testharness
|
||||
[the event is an instance of AnimationEvent]
|
||||
expected: FAIL
|
||||
|
||||
[the event inherts from Event]
|
||||
expected: FAIL
|
||||
|
||||
[Missing type argument]
|
||||
expected: FAIL
|
||||
|
||||
[type argument is string]
|
||||
expected: FAIL
|
||||
|
||||
[type argument is null]
|
||||
expected: FAIL
|
||||
|
||||
[event type set to undefined]
|
||||
expected: FAIL
|
||||
|
||||
[animationName has default value of empty string]
|
||||
expected: FAIL
|
||||
|
||||
[elapsedTime has default value of 0.0]
|
||||
expected: FAIL
|
||||
|
||||
[animationName is readonly]
|
||||
expected: FAIL
|
||||
|
||||
[type argument is null]
|
||||
expected: FAIL
|
||||
|
||||
[elapsedTime has default value of 0.0]
|
||||
expected: FAIL
|
||||
|
||||
[elapsedTime is readonly]
|
||||
expected: FAIL
|
||||
|
||||
[animationEventInit argument is null]
|
||||
expected: FAIL
|
||||
|
||||
[animationEventInit argument is undefined]
|
||||
expected: FAIL
|
||||
|
||||
[animationEventInit argument is empty dictionary]
|
||||
expected: FAIL
|
||||
|
||||
[animationName set to 'sample']
|
||||
expected: FAIL
|
||||
|
||||
[elapsedTime set to 0.5]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEventInit properties set value]
|
||||
[animationEventInit argument is empty dictionary]
|
||||
expected: FAIL
|
||||
|
||||
[event type set to undefined]
|
||||
expected: FAIL
|
||||
|
||||
[Missing type argument]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent.pseudoElement initialized from the dictionary]
|
||||
expected: FAIL
|
||||
|
||||
[the event inherts from Event]
|
||||
expected: FAIL
|
||||
|
||||
[type argument is string]
|
||||
expected: FAIL
|
||||
|
||||
[animationName set to 'sample']
|
||||
expected: FAIL
|
||||
|
||||
[animationEventInit argument is undefined]
|
||||
expected: FAIL
|
||||
|
||||
[animationEventInit argument is null]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEventInit properties set value]
|
||||
expected: FAIL
|
||||
|
||||
[animationName has default value of empty string]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,12 +1,11 @@
|
|||
[animationevent-types.html]
|
||||
type: testharness
|
||||
expected: TIMEOUT
|
||||
[animationstart event is instanceof AnimationEvent]
|
||||
[animationiteration event is instanceof AnimationEvent]
|
||||
expected: TIMEOUT
|
||||
|
||||
[animationend event is instanceof AnimationEvent]
|
||||
expected: TIMEOUT
|
||||
|
||||
[animationiteration event is instanceof AnimationEvent]
|
||||
[animationstart event is instanceof AnimationEvent]
|
||||
expected: TIMEOUT
|
||||
|
||||
|
|
|
@ -1,4 +1,82 @@
|
|||
[event-dispatch.tentative.html]
|
||||
[Tests for CSS animation event dispatch]
|
||||
[After -> Before]
|
||||
expected: FAIL
|
||||
|
||||
[Call Animation.cancel after restarting animation immediately.]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Idle, setting Animation.timeline = null]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Active (forwards)]
|
||||
expected: FAIL
|
||||
|
||||
[Set timeline and play transition after clearing the timeline.]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, active -> after, then back]
|
||||
expected: FAIL
|
||||
|
||||
[Idle -> Active]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, active -> before, then back]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, before -> active, then back]
|
||||
expected: FAIL
|
||||
|
||||
[Call Animation.cancel after canceling animation.]
|
||||
expected: FAIL
|
||||
|
||||
[Negative playbackRate sanity test(Before -> Active -> Before)]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Before]
|
||||
expected: FAIL
|
||||
|
||||
[Cancel the animation after clearing the target effect.]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Active (backwards)]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> After]
|
||||
expected: FAIL
|
||||
|
||||
[Before -> Active]
|
||||
expected: FAIL
|
||||
|
||||
[Idle -> After]
|
||||
expected: FAIL
|
||||
|
||||
[Restart animation after canceling animation immediately.]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Idle, display: none]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, after -> active, then back]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Idle, calling Animation.cancel()]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, after -> before, then back]
|
||||
expected: FAIL
|
||||
|
||||
[Active -> Idle -> Active: animationstart is fired by restarting animation]
|
||||
expected: FAIL
|
||||
|
||||
[Before -> After]
|
||||
expected: FAIL
|
||||
|
||||
[Set null target effect after canceling the animation.]
|
||||
expected: FAIL
|
||||
|
||||
[After -> Active]
|
||||
expected: FAIL
|
||||
|
||||
[Redundant change, before -> after, then back]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,13 @@
|
|||
[event-order.tentative.html]
|
||||
[Tests for CSS animation event order]
|
||||
[Test start and iteration events are ordered by time.]
|
||||
expected: FAIL
|
||||
|
||||
[Test iteration and end events are ordered by time.]
|
||||
expected: FAIL
|
||||
|
||||
[Test same events are ordered by elements.]
|
||||
expected: FAIL
|
||||
|
||||
[Test start and end events are sorted correctly when fired simultaneously]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,88 @@
|
|||
[idlharness.html]
|
||||
[css-animations IDL tests]
|
||||
[AnimationEvent interface: attribute pseudoElement]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: attribute onanimationend]
|
||||
expected: FAIL
|
||||
|
||||
[Document interface: attribute onanimationiteration]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface object length]
|
||||
expected: FAIL
|
||||
|
||||
[CSSKeyframeRule interface: attribute style]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface object name]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: attribute elapsedTime]
|
||||
expected: FAIL
|
||||
|
||||
[Document interface: attribute onanimationstart]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLElement interface: attribute onanimationiteration]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent must be primary interface of new AnimationEvent("animationstart")]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: attribute onanimationcancel]
|
||||
expected: FAIL
|
||||
|
||||
[CSSKeyframeRule interface: attribute keyText]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: new AnimationEvent("animationstart") must inherit property "pseudoElement" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Stringification of new AnimationEvent("animationstart")]
|
||||
expected: FAIL
|
||||
|
||||
[Document interface: attribute onanimationend]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLElement interface: attribute onanimationstart]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: new AnimationEvent("animationstart") must inherit property "animationName" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[Document interface: attribute onanimationcancel]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: attribute onanimationstart]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLElement interface: attribute onanimationcancel]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: attribute animationName]
|
||||
expected: FAIL
|
||||
|
||||
[Window interface: attribute onanimationiteration]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: new AnimationEvent("animationstart") must inherit property "elapsedTime" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[CSSKeyframeRule interface: keyframes.cssRules[0\] must inherit property "keyText" with the proper type]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
|
||||
[AnimationEvent interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
[HTMLElement interface: attribute onanimationend]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[pending-style-changes-001.html]
|
||||
[Animatable::getAnimations() should be able to see a style-created CSS animation immediately]
|
||||
expected: FAIL
|
||||
|
||||
[Document::getAnimations() should be able to see a style-created CSS animation immediately]
|
||||
expected: FAIL
|
||||
|
||||
[Animatable::getAnimations() should be able to see a style-created CSS animation immediately]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,3 +2,70 @@
|
|||
[css-fonts IDL tests]
|
||||
expected: FAIL
|
||||
|
||||
[CSSFontFaceRule interface: attribute style]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface object length]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface object name]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute fontFamily]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute annotation]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute ornaments]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute stylistic]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute swash]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute characterVariant]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesRule interface: attribute styleset]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface object length]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface object name]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[CSSFontFeatureValuesMap interface: operation set(CSSOMString, \[object Object\],\[object Object\])]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface object length]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface object name]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: existence and properties of interface prototype object]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: existence and properties of interface prototype object's "constructor" property]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: existence and properties of interface prototype object's @@unscopables property]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: attribute fontFamily]
|
||||
expected: FAIL
|
||||
[CSSFontPaletteValuesRule interface: attribute basePalette]
|
||||
expected: FAIL
|
||||
[CSSRule interface: constant FONT_FEATURE_VALUES_RULE on interface object]
|
||||
expected: FAIL
|
||||
[CSSRule interface: constant FONT_FEATURE_VALUES_RULE on interface prototype object]
|
||||
expected: FAIL
|
||||
[CSSRule interface: constant FONT_PALETTE_VALUES_RULE on interface object]
|
||||
expected: FAIL
|
||||
[CSSRule interface: constant FONT_PALETTE_VALUES_RULE on interface prototype object]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[background-image-alpha.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[background-image-multiple.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,3 +1,3 @@
|
|||
[background-image-tiled.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[geometry-background-image-001.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[geometry-background-image-002.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[geometry-background-image-tiled-001.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[geometry-background-image-tiled-002.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[geometry-background-image-tiled-003.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +1,4 @@
|
|||
[geometry-border-image-001.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/servo/issues/17861
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[geometry-border-image-002.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/servo/issues/17860
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[geometry-border-image-003.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/servo/issues/17860
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[geometry-border-image-004.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
bug: https://github.com/servo/servo/issues/17860
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[geometry-with-float-size.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
[device-pixel-ratio.https.html]
|
||||
type: reftest
|
||||
expected: TIMEOUT
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
[idlharness.html]
|
||||
[CSS Painting API IDL tests]
|
||||
expected: FAIL
|
||||
[CSS interface: attribute paintWorklet]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[invalid-image-constructor-error.https.html]
|
||||
expected: TIMEOUT
|
|
@ -1,2 +0,0 @@
|
|||
[invalid-image-paint-error.https.html]
|
||||
expected: TIMEOUT
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue