Update to SpiderMonkey 137. (#37077)

Incorporates the updates from https://github.com/servo/mozjs/pull/584.

Testing: Existing WPT coverage is enough.
Fixes: Part of #36258

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
Josh Matthews 2025-08-07 12:47:27 -04:00 committed by GitHub
parent fd20a5df42
commit 842dd99698
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 129 additions and 1417 deletions

View file

@ -81,7 +81,7 @@ jobs:
uses: nttld/setup-ndk@v1 uses: nttld/setup-ndk@v1
id: setup-ndk id: setup-ndk
with: with:
ndk-version: r26c ndk-version: r28
- name: Setup Gradle caches - name: Setup Gradle caches
uses: gradle/actions/setup-gradle@v4 uses: gradle/actions/setup-gradle@v4
- name: Trigger initial download of Gradle with retries - name: Trigger initial download of Gradle with retries

12
Cargo.lock generated
View file

@ -1359,7 +1359,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c"
dependencies = [ dependencies = [
"lazy_static", "lazy_static",
"windows-sys 0.48.0", "windows-sys 0.52.0",
] ]
[[package]] [[package]]
@ -4849,7 +4849,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667"
dependencies = [ dependencies = [
"cfg-if", "cfg-if",
"windows-targets 0.48.5", "windows-targets 0.52.6",
] ]
[[package]] [[package]]
@ -5243,7 +5243,7 @@ dependencies = [
[[package]] [[package]]
name = "mozjs" name = "mozjs"
version = "0.14.1" version = "0.14.1"
source = "git+https://github.com/servo/mozjs#eb4268a973f2334a18f97be0c6def8b1a7143431" source = "git+https://github.com/servo/mozjs#75ba574b452573d8d4275331294556180bd6cea9"
dependencies = [ dependencies = [
"bindgen 0.71.1", "bindgen 0.71.1",
"cc", "cc",
@ -5254,8 +5254,8 @@ dependencies = [
[[package]] [[package]]
name = "mozjs_sys" name = "mozjs_sys"
version = "0.128.13-3" version = "0.137.0-0"
source = "git+https://github.com/servo/mozjs#eb4268a973f2334a18f97be0c6def8b1a7143431" source = "git+https://github.com/servo/mozjs#75ba574b452573d8d4275331294556180bd6cea9"
dependencies = [ dependencies = [
"bindgen 0.71.1", "bindgen 0.71.1",
"cc", "cc",
@ -9924,7 +9924,7 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
dependencies = [ dependencies = [
"windows-sys 0.48.0", "windows-sys 0.52.0",
] ]
[[package]] [[package]]

View file

@ -182,7 +182,6 @@ pub struct Preferences {
pub js_mem_gc_decommit_threshold_mb: i64, pub js_mem_gc_decommit_threshold_mb: i64,
pub js_mem_gc_dynamic_heap_growth_enabled: bool, pub js_mem_gc_dynamic_heap_growth_enabled: bool,
pub js_mem_gc_dynamic_mark_slice_enabled: bool, pub js_mem_gc_dynamic_mark_slice_enabled: bool,
pub js_mem_gc_empty_chunk_count_max: i64,
pub js_mem_gc_empty_chunk_count_min: i64, pub js_mem_gc_empty_chunk_count_min: i64,
pub js_mem_gc_high_frequency_heap_growth_max: i64, pub js_mem_gc_high_frequency_heap_growth_max: i64,
pub js_mem_gc_high_frequency_heap_growth_min: i64, pub js_mem_gc_high_frequency_heap_growth_min: i64,
@ -361,7 +360,6 @@ impl Preferences {
js_mem_gc_decommit_threshold_mb: 32, js_mem_gc_decommit_threshold_mb: 32,
js_mem_gc_dynamic_heap_growth_enabled: true, js_mem_gc_dynamic_heap_growth_enabled: true,
js_mem_gc_dynamic_mark_slice_enabled: true, js_mem_gc_dynamic_mark_slice_enabled: true,
js_mem_gc_empty_chunk_count_max: 30,
js_mem_gc_empty_chunk_count_min: 1, js_mem_gc_empty_chunk_count_min: 1,
js_mem_gc_high_frequency_heap_growth_max: 300, js_mem_gc_high_frequency_heap_growth_max: 300,
js_mem_gc_high_frequency_heap_growth_min: 150, js_mem_gc_high_frequency_heap_growth_min: 150,

View file

@ -114,9 +114,22 @@ unsafe extern "C" fn instance_class_has_proto_at_depth(
domclass.dom_class.interface_chain[depth as usize] as u32 == proto_id domclass.dom_class.interface_chain[depth as usize] as u32 == proto_id
} }
/// <https://searchfox.org/mozilla-central/rev/c18faaae88b30182e487fa3341bc7d923e22f23a/xpcom/base/CycleCollectedJSRuntime.cpp#792>
unsafe extern "C" fn instance_class_is_error(clasp: *const js::jsapi::JSClass) -> bool {
if !is_dom_class(&*clasp) {
return false;
}
let domclass: *const DOMJSClass = clasp as *const _;
let domclass = &*domclass;
let root_interface = domclass.dom_class.interface_chain[0] as u32;
// TODO: support checking bare Exception prototype as well.
root_interface == PrototypeList::ID::DOMException as u32
}
#[allow(missing_docs)] // FIXME #[allow(missing_docs)] // FIXME
pub(crate) const DOM_CALLBACKS: DOMCallbacks = DOMCallbacks { pub(crate) const DOM_CALLBACKS: DOMCallbacks = DOMCallbacks {
instanceClassMatchesProto: Some(instance_class_has_proto_at_depth), instanceClassMatchesProto: Some(instance_class_has_proto_at_depth),
instanceClassIsError: Some(instance_class_is_error),
}; };
/// Eagerly define all relevant WebIDL interface constructors on the /// Eagerly define all relevant WebIDL interface constructors on the

View file

@ -14,12 +14,10 @@ use std::rc::Rc;
use deny_public_fields::DenyPublicFields; use deny_public_fields::DenyPublicFields;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use fnv::FnvHasher; use fnv::FnvHasher;
use js::jsapi::JS_GetFunctionObject; use js::jsapi::JS::CompileFunction;
use js::jsapi::{JS_GetFunctionObject, SupportUnscopables};
use js::jsval::JSVal; use js::jsval::JSVal;
use js::rust::wrappers::CompileFunction; use js::rust::{CompileOptionsWrapper, HandleObject, transform_u16_to_source_text};
use js::rust::{
CompileOptionsWrapper, HandleObject, RootedObjectVectorWrapper, transform_u16_to_source_text,
};
use libc::c_char; use libc::c_char;
use servo_url::ServoUrl; use servo_url::ServoUrl;
use style::str::HTML_SPACE_CHARACTERS; use style::str::HTML_SPACE_CHARACTERS;
@ -646,7 +644,7 @@ impl EventTarget {
}; };
// Step 3.9, subsection Scope steps 1-6 // Step 3.9, subsection Scope steps 1-6
let scopechain = RootedObjectVectorWrapper::new(*cx); let scopechain = js::rust::EnvironmentChain::new(*cx, SupportUnscopables::Yes);
if let Some(element) = element { if let Some(element) = element {
scopechain.append(document.reflector().get_jsobject().get()); scopechain.append(document.reflector().get_jsobject().get());
@ -659,7 +657,7 @@ impl EventTarget {
rooted!(in(*cx) let mut handler = unsafe { rooted!(in(*cx) let mut handler = unsafe {
CompileFunction( CompileFunction(
*cx, *cx,
scopechain.handle(), scopechain.get(),
options.ptr, options.ptr,
name.as_ptr(), name.as_ptr(),
args.len() as u32, args.len() as u32,

View file

@ -31,7 +31,7 @@ use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER; use ipc_channel::router::ROUTER;
use js::glue::{IsWrapper, UnwrapObjectDynamic}; use js::glue::{IsWrapper, UnwrapObjectDynamic};
use js::jsapi::{ use js::jsapi::{
Compile1, CurrentGlobalOrNull, GetNonCCWObjectGlobal, HandleObject, Heap, Compile1, CurrentGlobalOrNull, DelazificationOption, GetNonCCWObjectGlobal, HandleObject, Heap,
InstantiateGlobalStencil, InstantiateOptions, JSContext, JSObject, JSScript, SetScriptPrivate, InstantiateGlobalStencil, InstantiateOptions, JSContext, JSObject, JSScript, SetScriptPrivate,
}; };
use js::jsval::{PrivateValue, UndefinedValue}; use js::jsval::{PrivateValue, UndefinedValue};
@ -2820,6 +2820,7 @@ impl GlobalScope {
skipFilenameValidation: false, skipFilenameValidation: false,
hideScriptFromDebugger: false, hideScriptFromDebugger: false,
deferDebugMetadata: false, deferDebugMetadata: false,
eagerDelazificationStrategy_: DelazificationOption::OnDemandOnly,
}; };
let script = InstantiateGlobalStencil( let script = InstantiateGlobalStencil(
*cx, *cx,

View file

@ -21,24 +21,26 @@ use std::{os, ptr, thread};
use background_hang_monitor_api::ScriptHangAnnotation; use background_hang_monitor_api::ScriptHangAnnotation;
use js::conversions::jsstr_to_string; use js::conversions::jsstr_to_string;
use js::glue::{ use js::glue::{
CollectServoSizes, CreateJobQueue, DeleteJobQueue, DispatchableRun, JobQueueTraps, CollectServoSizes, CreateJobQueue, DeleteJobQueue, DispatchableRun, JS_GetReservedSlot,
RUST_js_GetErrorMessage, SetBuildId, StreamConsumerConsumeChunk, JobQueueTraps, RUST_js_GetErrorMessage, SetBuildId, StreamConsumerConsumeChunk,
StreamConsumerNoteResponseURLs, StreamConsumerStreamEnd, StreamConsumerStreamError, StreamConsumerNoteResponseURLs, StreamConsumerStreamEnd, StreamConsumerStreamError,
}; };
use js::jsapi::{ use js::jsapi::{
AsmJSOption, BuildIdCharVector, ContextOptionsRef, DisableIncrementalGC, AsmJSOption, BuildIdCharVector, CompilationType, ContextOptionsRef, Dispatchable as JSRunnable,
Dispatchable as JSRunnable, Dispatchable_MaybeShuttingDown, GCDescription, GCOptions, Dispatchable_MaybeShuttingDown, GCDescription, GCOptions, GCProgress, GCReason,
GCProgress, GCReason, GetPromiseUserInputEventHandlingState, HandleObject, HandleString, Heap, GetPromiseUserInputEventHandlingState, HandleObject, HandleString, HandleValue, Heap,
InitConsumeStreamCallback, InitDispatchToEventLoop, JS_AddExtraGCRootsTracer, InitConsumeStreamCallback, InitDispatchToEventLoop, JS_AddExtraGCRootsTracer,
JS_InitDestroyPrincipalsCallback, JS_InitReadPrincipalsCallback, JS_SetGCCallback, JS_InitDestroyPrincipalsCallback, JS_InitReadPrincipalsCallback, JS_NewObject,
JS_SetGCParameter, JS_SetGlobalJitCompilerOption, JS_SetOffthreadIonCompilationEnabled, JS_SetGCCallback, JS_SetGCParameter, JS_SetGlobalJitCompilerOption,
JS_SetParallelParsingEnabled, JS_SetSecurityCallbacks, JSContext as RawJSContext, JSGCParamKey, JS_SetOffthreadIonCompilationEnabled, JS_SetParallelParsingEnabled, JS_SetReservedSlot,
JSGCStatus, JSJitCompilerOption, JSObject, JSSecurityCallbacks, JSTracer, JobQueue, MimeType, JS_SetSecurityCallbacks, JSCLASS_RESERVED_SLOTS_MASK, JSCLASS_RESERVED_SLOTS_SHIFT, JSClass,
JSClassOps, JSContext as RawJSContext, JSGCParamKey, JSGCStatus, JSJitCompilerOption, JSObject,
JSSecurityCallbacks, JSTracer, JobQueue, MimeType, MutableHandleObject,
PromiseRejectionHandlingState, PromiseUserInputEventHandlingState, RuntimeCode, PromiseRejectionHandlingState, PromiseUserInputEventHandlingState, RuntimeCode,
SetDOMCallbacks, SetGCSliceCallback, SetJobQueue, SetPreserveWrapperCallbacks, SetDOMCallbacks, SetGCSliceCallback, SetJobQueue, SetPreserveWrapperCallbacks,
SetProcessBuildIdOp, SetPromiseRejectionTrackerCallback, StreamConsumer as JSStreamConsumer, SetProcessBuildIdOp, SetPromiseRejectionTrackerCallback, StreamConsumer as JSStreamConsumer,
}; };
use js::jsval::UndefinedValue; use js::jsval::{ObjectValue, UndefinedValue};
use js::panic::wrap_panic; use js::panic::wrap_panic;
pub(crate) use js::rust::ThreadSafeJSContext; pub(crate) use js::rust::ThreadSafeJSContext;
use js::rust::wrappers::{GetPromiseIsHandled, JS_GetPromiseResult}; use js::rust::wrappers::{GetPromiseIsHandled, JS_GetPromiseResult};
@ -79,13 +81,13 @@ use crate::dom::promise::Promise;
use crate::dom::promiserejectionevent::PromiseRejectionEvent; use crate::dom::promiserejectionevent::PromiseRejectionEvent;
use crate::dom::response::Response; use crate::dom::response::Response;
use crate::microtask::{EnqueuedPromiseCallback, Microtask, MicrotaskQueue}; use crate::microtask::{EnqueuedPromiseCallback, Microtask, MicrotaskQueue};
use crate::realms::{AlreadyInRealm, InRealm}; use crate::realms::{AlreadyInRealm, InRealm, enter_realm};
use crate::script_module::EnsureModuleHooksInitialized; use crate::script_module::EnsureModuleHooksInitialized;
use crate::script_thread::trace_thread; use crate::script_thread::trace_thread;
use crate::task_source::SendableTaskSource; use crate::task_source::SendableTaskSource;
static JOB_QUEUE_TRAPS: JobQueueTraps = JobQueueTraps { static JOB_QUEUE_TRAPS: JobQueueTraps = JobQueueTraps {
getIncumbentGlobal: Some(get_incumbent_global), getHostDefinedData: Some(get_host_defined_data),
enqueuePromiseJob: Some(enqueue_promise_job), enqueuePromiseJob: Some(enqueue_promise_job),
runJobs: Some(run_jobs), runJobs: Some(run_jobs),
empty: Some(empty), empty: Some(empty),
@ -96,6 +98,7 @@ static JOB_QUEUE_TRAPS: JobQueueTraps = JobQueueTraps {
static SECURITY_CALLBACKS: JSSecurityCallbacks = JSSecurityCallbacks { static SECURITY_CALLBACKS: JSSecurityCallbacks = JSSecurityCallbacks {
contentSecurityPolicyAllows: Some(content_security_policy_allows), contentSecurityPolicyAllows: Some(content_security_policy_allows),
codeForEvalGets: None, //TODO
subsumes: Some(principals::subsumes), subsumes: Some(principals::subsumes),
}; };
@ -227,19 +230,58 @@ impl From<ScriptThreadEventCategory> for ScriptHangAnnotation {
} }
} }
static HOST_DEFINED_DATA: JSClassOps = JSClassOps {
addProperty: None,
delProperty: None,
enumerate: None,
newEnumerate: None,
resolve: None,
mayResolve: None,
finalize: None,
call: None,
construct: None,
trace: None,
};
static HOST_DEFINED_DATA_CLASS: JSClass = JSClass {
name: c"HostDefinedData".as_ptr(),
flags: (HOST_DEFINED_DATA_SLOTS & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT,
cOps: &HOST_DEFINED_DATA,
spec: ptr::null(),
ext: ptr::null(),
oOps: ptr::null(),
};
const INCUMBENT_SETTING_SLOT: u32 = 0;
const HOST_DEFINED_DATA_SLOTS: u32 = 1;
/// <https://searchfox.org/mozilla-central/rev/2a8a30f4c9b918b726891ab9d2d62b76152606f1/xpcom/base/CycleCollectedJSContext.cpp#316>
#[allow(unsafe_code)] #[allow(unsafe_code)]
unsafe extern "C" fn get_incumbent_global(_: *const c_void, _: *mut RawJSContext) -> *mut JSObject { unsafe extern "C" fn get_host_defined_data(
let mut result = ptr::null_mut(); _: *const c_void,
cx: *mut RawJSContext,
data: MutableHandleObject,
) -> bool {
wrap_panic(&mut || { wrap_panic(&mut || {
let incumbent_global = GlobalScope::incumbent(); let Some(incumbent_global) = GlobalScope::incumbent() else {
data.set(ptr::null_mut());
return;
};
assert!(incumbent_global.is_some()); let _realm = enter_realm(&*incumbent_global);
result = incumbent_global rooted!(in(cx) let result = JS_NewObject(cx, &HOST_DEFINED_DATA_CLASS));
.map(|g| g.reflector().get_jsobject().get()) assert!(!result.is_null());
.unwrap_or(ptr::null_mut())
JS_SetReservedSlot(
*result,
INCUMBENT_SETTING_SLOT,
&ObjectValue(*incumbent_global.reflector().get_jsobject()),
);
data.set(result.get());
}); });
result true
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
@ -298,6 +340,7 @@ unsafe extern "C" fn drop_interrupt_queues(interrupt_queues: *mut c_void) {
}); });
} }
/// <https://searchfox.org/mozilla-central/rev/2a8a30f4c9b918b726891ab9d2d62b76152606f1/xpcom/base/CycleCollectedJSContext.cpp#355>
/// SM callback for promise job resolution. Adds a promise callback to the current /// SM callback for promise job resolution. Adds a promise callback to the current
/// global's microtask queue. /// global's microtask queue.
#[allow(unsafe_code)] #[allow(unsafe_code)]
@ -307,14 +350,20 @@ unsafe extern "C" fn enqueue_promise_job(
promise: HandleObject, promise: HandleObject,
job: HandleObject, job: HandleObject,
_allocation_site: HandleObject, _allocation_site: HandleObject,
incumbent_global: HandleObject, host_defined_data: HandleObject,
) -> bool { ) -> bool {
let cx = JSContext::from_ptr(cx); let cx = JSContext::from_ptr(cx);
let mut result = false; let mut result = false;
wrap_panic(&mut || { wrap_panic(&mut || {
let microtask_queue = &*(extra as *const MicrotaskQueue); let microtask_queue = &*(extra as *const MicrotaskQueue);
let global = if !incumbent_global.is_null() { let global = if !host_defined_data.is_null() {
GlobalScope::from_object(incumbent_global.get()) let mut incumbent_global = UndefinedValue();
JS_GetReservedSlot(
host_defined_data.get(),
INCUMBENT_SETTING_SLOT,
&mut incumbent_global,
);
GlobalScope::from_object(incumbent_global.to_object())
} else { } else {
let realm = AlreadyInRealm::assert_for_cx(cx); let realm = AlreadyInRealm::assert_for_cx(cx);
GlobalScope::from_context(*cx, InRealm::already(&realm)) GlobalScope::from_context(*cx, InRealm::already(&realm))
@ -424,6 +473,12 @@ unsafe extern "C" fn content_security_policy_allows(
cx: *mut RawJSContext, cx: *mut RawJSContext,
runtime_code: RuntimeCode, runtime_code: RuntimeCode,
sample: HandleString, sample: HandleString,
_compilation_type: CompilationType,
_parameter_strings: u8, //FIXME in bindings generation
_body_string: HandleString,
_parameter_args: u8, //FIXME in bindings generation
_body_arg: HandleValue,
can_compile_strings: *mut bool,
) -> bool { ) -> bool {
let mut allowed = false; let mut allowed = false;
let cx = JSContext::from_ptr(cx); let cx = JSContext::from_ptr(cx);
@ -445,7 +500,8 @@ unsafe extern "C" fn content_security_policy_allows(
RuntimeCode::WASM => global.get_csp_list().is_wasm_evaluation_allowed(global), RuntimeCode::WASM => global.get_csp_list().is_wasm_evaluation_allowed(global),
}; };
}); });
allowed *can_compile_strings = allowed;
true
} }
#[allow(unsafe_code)] #[allow(unsafe_code)]
@ -601,7 +657,7 @@ impl Runtime {
Some(empty_has_released_callback), Some(empty_has_released_callback),
); );
// Pre barriers aren't working correctly at the moment // Pre barriers aren't working correctly at the moment
DisableIncrementalGC(cx); JS_SetGCParameter(cx, JSGCParamKey::JSGC_INCREMENTAL_GC_ENABLED, 0);
unsafe extern "C" fn dispatch_to_event_loop( unsafe extern "C" fn dispatch_to_event_loop(
closure: *mut c_void, closure: *mut c_void,
@ -779,9 +835,6 @@ impl Runtime {
if let Some(val) = in_range(pref!(js_mem_gc_empty_chunk_count_min), 0, 10_000) { if let Some(val) = in_range(pref!(js_mem_gc_empty_chunk_count_min), 0, 10_000) {
JS_SetGCParameter(cx, 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) = in_range(pref!(js_mem_gc_empty_chunk_count_max), 0, 10_000) {
JS_SetGCParameter(cx, JSGCParamKey::JSGC_MAX_EMPTY_CHUNK_COUNT, val as u32);
}
Runtime { Runtime {
rt: runtime, rt: runtime,

View file

@ -155,15 +155,15 @@ class AndroidTarget(CrossBuildTarget):
android_api = android_platform.replace("android-", "") android_api = android_platform.replace("android-", "")
# Check if the NDK version is 26 # Check if the NDK version is 28
if not os.path.isfile(path.join(env["ANDROID_NDK_ROOT"], "source.properties")): if not os.path.isfile(path.join(env["ANDROID_NDK_ROOT"], "source.properties")):
print("ANDROID_NDK should have file `source.properties`.") print("ANDROID_NDK should have file `source.properties`.")
print("The environment variable ANDROID_NDK_ROOT may be set at a wrong path.") print("The environment variable ANDROID_NDK_ROOT may be set at a wrong path.")
sys.exit(1) sys.exit(1)
with open(path.join(env["ANDROID_NDK_ROOT"], "source.properties"), encoding="utf8") as ndk_properties: with open(path.join(env["ANDROID_NDK_ROOT"], "source.properties"), encoding="utf8") as ndk_properties:
lines = ndk_properties.readlines() lines = ndk_properties.readlines()
if lines[1].split(" = ")[1].split(".")[0] != "26": if lines[1].split(" = ")[1].split(".")[0] != "28":
print("Servo currently only supports NDK r26c.") print("Servo currently only supports NDK r28.")
sys.exit(1) sys.exit(1)
# Android builds also require having the gcc bits on the PATH and various INCLUDE # Android builds also require having the gcc bits on the PATH and various INCLUDE
@ -239,6 +239,9 @@ class AndroidTarget(CrossBuildTarget):
env["LIBCLANG_PATH"] = path.join(llvm_toolchain, "lib") env["LIBCLANG_PATH"] = path.join(llvm_toolchain, "lib")
env["CLANG_PATH"] = to_ndk_bin("clang") env["CLANG_PATH"] = to_ndk_bin("clang")
env["BINDGEN_EXTRA_CLANG_ARGS"] = (
f"--target={android_toolchain_name} --sysroot={path.join(llvm_toolchain, 'sysroot')}"
)
# A cheat-sheet for some of the build errors caused by getting the search path wrong... # A cheat-sheet for some of the build errors caused by getting the search path wrong...
# #

View file

@ -2,13 +2,7 @@
[options properties should be accessed in lexicographic order.] [options properties should be accessed in lexicographic order.]
expected: FAIL expected: FAIL
[Passing a Float16Array as element of the blobParts array should work.]
expected: FAIL
[Blob-constructor.any.worker.html] [Blob-constructor.any.worker.html]
[options properties should be accessed in lexicographic order.] [options properties should be accessed in lexicographic order.]
expected: FAIL expected: FAIL
[Passing a Float16Array as element of the blobParts array should work.]
expected: FAIL

View file

@ -1,7 +1,4 @@
[getRandomValues.any.worker.html] [getRandomValues.any.worker.html]
[Float16 arrays]
expected: FAIL
[Large length: Int8Array] [Large length: Int8Array]
expected: FAIL expected: FAIL
@ -31,9 +28,6 @@
[getRandomValues.any.html] [getRandomValues.any.html]
[Float16 arrays]
expected: FAIL
[Large length: Int8Array] [Large length: Int8Array]
expected: FAIL expected: FAIL

View file

@ -158,9 +158,6 @@
[Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer] [Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer]
expected: FAIL expected: FAIL
[Invalid encodeInto() destination: Float16Array, backed by: ArrayBuffer]
expected: FAIL
[Invalid encodeInto() destination: Float16Array, backed by: SharedArrayBuffer] [Invalid encodeInto() destination: Float16Array, backed by: SharedArrayBuffer]
expected: FAIL expected: FAIL
@ -328,9 +325,6 @@
[Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer] [Invalid encodeInto() destination: Float64Array, backed by: SharedArrayBuffer]
expected: FAIL expected: FAIL
[Invalid encodeInto() destination: Float16Array, backed by: ArrayBuffer]
expected: FAIL
[Invalid encodeInto() destination: Float16Array, backed by: SharedArrayBuffer] [Invalid encodeInto() destination: Float16Array, backed by: SharedArrayBuffer]
expected: FAIL expected: FAIL

View file

@ -5,10 +5,5 @@
expected: ERROR expected: ERROR
[request-headers.any.html] [request-headers.any.html]
[Fetch with POST with Float16Array body]
expected: FAIL
[request-headers.any.worker.html] [request-headers.any.worker.html]
[Fetch with POST with Float16Array body]
expected: FAIL

View file

@ -17,9 +17,6 @@
[Streaming upload shouldn't work on Http/1.1.] [Streaming upload shouldn't work on Http/1.1.]
expected: FAIL expected: FAIL
[Fetch with POST with Float16Array body]
expected: FAIL
[request-upload.any.serviceworker.html] [request-upload.any.serviceworker.html]
expected: ERROR expected: ERROR
@ -45,6 +42,3 @@
[Streaming upload shouldn't work on Http/1.1.] [Streaming upload shouldn't work on Http/1.1.]
expected: FAIL expected: FAIL
[Fetch with POST with Float16Array body]
expected: FAIL

View file

@ -8,10 +8,20 @@
expected: ERROR expected: ERROR
[then-interception.any.worker.html] [then-interception.any.worker.html]
expected: CRASH [piping should not be observable]
expected: FAIL
[tee should not be observable]
expected: FAIL
[then-interception.any.html] [then-interception.any.html]
expected: CRASH [piping should not be observable]
expected: FAIL
[tee should not be observable]
expected: FAIL
[then-interception.https.any.shadowrealm-in-serviceworker.html] [then-interception.https.any.shadowrealm-in-serviceworker.html]
expected: ERROR expected: ERROR

View file

@ -1,3 +0,0 @@
[script-enforcement-008.https.html]
[script-src CSP directive is properly set.]
expected: FAIL

View file

@ -1,7 +1,4 @@
[script-enforcement-009.https.html] [script-enforcement-009.https.html]
[script-src CSP directive is properly set.]
expected: FAIL
[Untrusted SVGScriptElement with classic type uses the source text returned by the default policy for inline CSP check.] [Untrusted SVGScriptElement with classic type uses the source text returned by the default policy for inline CSP check.]
expected: FAIL expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -1,5 +0,0 @@
[basic.any.worker.html]
expected: ERROR
[basic.any.html]
expected: ERROR

View file

@ -1,242 +0,0 @@
[constants.any.worker.html]
[constants]
expected: FAIL
[constants 1]
expected: FAIL
[constants 2]
expected: FAIL
[constants 3]
expected: FAIL
[constants 4]
expected: FAIL
[constants 5]
expected: FAIL
[constants 6]
expected: FAIL
[constants 7]
expected: FAIL
[constants 8]
expected: FAIL
[constants 9]
expected: FAIL
[constants 10]
expected: FAIL
[constants 11]
expected: FAIL
[constants 12]
expected: FAIL
[constants 13]
expected: FAIL
[constants 14]
expected: FAIL
[constants 15]
expected: FAIL
[constants 16]
expected: FAIL
[constants 17]
expected: FAIL
[constants 18]
expected: FAIL
[constants 19]
expected: FAIL
[constants 20]
expected: FAIL
[constants 21]
expected: FAIL
[constants 22]
expected: FAIL
[constants 23]
expected: FAIL
[constants 24]
expected: FAIL
[constants 25]
expected: FAIL
[constants 26]
expected: FAIL
[constants 27]
expected: FAIL
[constants 28]
expected: FAIL
[constants 29]
expected: FAIL
[constants 30]
expected: FAIL
[constants 31]
expected: FAIL
[constants 32]
expected: FAIL
[constants 33]
expected: FAIL
[constants 34]
expected: FAIL
[constants 35]
expected: FAIL
[constants 36]
expected: FAIL
[constants 37]
expected: FAIL
[constants 38]
expected: FAIL
[constants 39]
expected: FAIL
[constants.any.html]
[constants]
expected: FAIL
[constants 1]
expected: FAIL
[constants 2]
expected: FAIL
[constants 3]
expected: FAIL
[constants 4]
expected: FAIL
[constants 5]
expected: FAIL
[constants 6]
expected: FAIL
[constants 7]
expected: FAIL
[constants 8]
expected: FAIL
[constants 9]
expected: FAIL
[constants 10]
expected: FAIL
[constants 11]
expected: FAIL
[constants 12]
expected: FAIL
[constants 13]
expected: FAIL
[constants 14]
expected: FAIL
[constants 15]
expected: FAIL
[constants 16]
expected: FAIL
[constants 17]
expected: FAIL
[constants 18]
expected: FAIL
[constants 19]
expected: FAIL
[constants 20]
expected: FAIL
[constants 21]
expected: FAIL
[constants 22]
expected: FAIL
[constants 23]
expected: FAIL
[constants 24]
expected: FAIL
[constants 25]
expected: FAIL
[constants 26]
expected: FAIL
[constants 27]
expected: FAIL
[constants 28]
expected: FAIL
[constants 29]
expected: FAIL
[constants 30]
expected: FAIL
[constants 31]
expected: FAIL
[constants 32]
expected: FAIL
[constants 33]
expected: FAIL
[constants 34]
expected: FAIL
[constants 35]
expected: FAIL
[constants 36]
expected: FAIL
[constants 37]
expected: FAIL
[constants 38]
expected: FAIL
[constants 39]
expected: FAIL

View file

@ -1,8 +0,0 @@
[imports.any.html]
[imports]
expected: FAIL
[imports.any.worker.html]
[imports]
expected: FAIL

View file

@ -1,12 +1,6 @@
[DOMException-is-error.any.worker.html] [DOMException-is-error.any.worker.html]
[DOMException-is-error]
expected: FAIL
[DOMException-is-error.any.html] [DOMException-is-error.any.html]
[DOMException-is-error]
expected: FAIL
[DOMException-is-error.https.any.shadowrealm-in-serviceworker.html] [DOMException-is-error.https.any.shadowrealm-in-serviceworker.html]
expected: ERROR expected: ERROR

View file

@ -1,12 +1,6 @@
[Send-binary-arraybufferview-float16.any.html?default] [Send-binary-arraybufferview-float16.any.html?default]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
expected: FAIL
[Send-binary-arraybufferview-float16.any.worker.html?wss] [Send-binary-arraybufferview-float16.any.worker.html?wss]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
expected: FAIL
[Send-binary-arraybufferview-float16.any.html?wpt_flags=h2] [Send-binary-arraybufferview-float16.any.html?wpt_flags=h2]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed] [Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
@ -14,9 +8,6 @@
[Send-binary-arraybufferview-float16.any.worker.html?default] [Send-binary-arraybufferview-float16.any.worker.html?default]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
expected: FAIL
[Send-binary-arraybufferview-float16.any.worker.html?wpt_flags=h2] [Send-binary-arraybufferview-float16.any.worker.html?wpt_flags=h2]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed] [Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
@ -24,5 +15,3 @@
[Send-binary-arraybufferview-float16.any.html?wss] [Send-binary-arraybufferview-float16.any.html?wss]
[Send binary data on a WebSocket - ArrayBufferView - Float16Array - Connection should be closed]
expected: FAIL

View file

@ -13,6 +13,3 @@
[The IDBCursorWithValue interface object should be exposed.] [The IDBCursorWithValue interface object should be exposed.]
expected: FAIL expected: FAIL
[The Float16Array interface object should be exposed.]
expected: FAIL

View file

@ -10651,7 +10651,7 @@
[] []
], ],
"interfaces.js": [ "interfaces.js": [
"fbfc396b62c55415c0493b7528bd5e2b959452e6", "24c7fa68dbca91a9d26b2534c81ea7338cb2102a",
[] []
], ],
"max-session-history-frame.html": [ "max-session-history-frame.html": [

View file

@ -19,6 +19,7 @@ function test_interfaces(interfaceNamesInGlobalScope) {
"Error", "Error",
"EvalError", "EvalError",
"FinalizationRegistry", "FinalizationRegistry",
"Float16Array",
"Float32Array", "Float32Array",
"Float64Array", "Float64Array",
"Function", "Function",
@ -28,6 +29,7 @@ function test_interfaces(interfaceNamesInGlobalScope) {
"Int8Array", "Int8Array",
"InternalError", "InternalError",
"Intl", "Intl",
"Iterator",
"JSON", "JSON",
"Map", "Map",
"Math", "Math",