Merge branch 'master' into issue#29773

This commit is contained in:
michaelgrigoryan25 2023-05-22 19:05:25 +04:00
commit 05e1e0ea9e
482 changed files with 13334 additions and 2644 deletions

571
ports/libmlservo/src/lib.rs Normal file
View file

@ -0,0 +1,571 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use egl::egl::EGLContext;
use egl::egl::EGLDisplay;
use egl::egl::EGLSurface;
use egl::egl::MakeCurrent;
use egl::egl::SwapBuffers;
use libc::{dup2, pipe, read};
use log::info;
use log::warn;
use rust_webvr::api::MagicLeapVRService;
use servo::euclid::Scale;
use servo::keyboard_types::Key;
use servo::servo_url::ServoUrl;
use servo::webrender_api::units::{DeviceIntRect, DevicePixel, DevicePoint, LayoutPixel};
use simpleservo::{self, deinit, gl_glue, MouseButton, ServoGlue, SERVO};
use simpleservo::{
Coordinates, EventLoopWaker, HostTrait, InitOptions, InputMethodType, PromptResult,
VRInitOptions,
};
use smallvec::SmallVec;
use std::cell::Cell;
use std::ffi::CStr;
use std::ffi::CString;
use std::io::Write;
use std::os::raw::c_char;
use std::os::raw::c_int;
use std::os::raw::c_void;
use std::rc::Rc;
use std::thread;
use std::time::Duration;
use std::time::Instant;
use webxr::magicleap::MagicLeapDiscovery;
#[repr(u32)]
pub enum MLLogLevel {
Fatal = 0,
Error = 1,
Warning = 2,
Info = 3,
Debug = 4,
Verbose = 5,
}
#[repr(C)]
#[allow(non_camel_case_types)]
pub enum MLKeyType {
kNone,
kCharacter,
kBackspace,
kShift,
kSpeechToText,
kPageEmoji,
kPageLowerLetters,
kPageNumericSymbols,
kCancel,
kSubmit,
kPrevious,
kNext,
kClear,
kClose,
kEnter,
kCustom1,
kCustom2,
kCustom3,
kCustom4,
kCustom5,
}
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct MLLogger(Option<extern "C" fn(MLLogLevel, *const c_char)>);
#[repr(transparent)]
pub struct MLHistoryUpdate(Option<extern "C" fn(MLApp, bool, bool)>);
#[repr(transparent)]
pub struct MLURLUpdate(Option<extern "C" fn(MLApp, *const c_char)>);
#[repr(transparent)]
pub struct MLKeyboard(Option<extern "C" fn(MLApp, bool)>);
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct MLApp(*mut c_void);
const LOG_LEVEL: log::LevelFilter = log::LevelFilter::Info;
fn call<F, T>(f: F) -> Result<T, &'static str>
where
F: FnOnce(&mut ServoGlue) -> Result<T, &'static str>,
{
SERVO.with(|s| match s.borrow_mut().as_mut() {
Some(ref mut s) => (f)(s),
None => Err("Servo is not available in this thread"),
})
}
#[no_mangle]
pub unsafe extern "C" fn init_servo(
ctxt: EGLContext,
surf: EGLSurface,
disp: EGLDisplay,
landscape: bool,
app: MLApp,
logger: MLLogger,
history_update: MLHistoryUpdate,
url_update: MLURLUpdate,
keyboard: MLKeyboard,
url: *const c_char,
default_args: *const c_char,
width: u32,
height: u32,
hidpi: f32,
) -> *mut ServoInstance {
redirect_stdout_to_log(logger);
let _ = log::set_boxed_logger(Box::new(logger));
log::set_max_level(LOG_LEVEL);
let gl = gl_glue::egl::init().expect("EGL initialization failure");
let coordinates = Coordinates::new(
0,
0,
width as i32,
height as i32,
width as i32,
height as i32,
);
let mut url = CStr::from_ptr(url).to_str().unwrap_or("about:blank");
// If the URL has a space in it, then treat everything before the space as arguments
let args = if let Some(i) = url.rfind(' ') {
let (front, back) = url.split_at(i);
url = back;
front.split(' ').map(|s| s.to_owned()).collect()
} else if !default_args.is_null() {
CStr::from_ptr(default_args)
.to_str()
.unwrap_or("")
.split(' ')
.map(|s| s.to_owned())
.collect()
} else {
Vec::new()
};
info!("got args: {:?}", args);
let vr_init = if !landscape {
let name = String::from("Magic Leap VR Display");
let (service, heartbeat) = MagicLeapVRService::new(name, ctxt, gl.gl_wrapper.clone())
.expect("Failed to create VR service");
let service = Box::new(service);
let heartbeat = Box::new(heartbeat);
VRInitOptions::VRService(service, heartbeat)
} else {
VRInitOptions::None
};
let xr_discovery: Option<Box<dyn webxr_api::Discovery>> = if !landscape {
let discovery = MagicLeapDiscovery::new(ctxt, gl.gl_wrapper.clone());
Some(Box::new(discovery))
} else {
None
};
let opts = InitOptions {
args,
density: hidpi,
xr_discovery,
coordinates,
gl_context_pointer: Some(ctxt),
native_display_pointer: Some(disp),
..Default::default()
};
let wakeup = Box::new(EventLoopWakerInstance);
let shut_down_complete = Rc::new(Cell::new(false));
let callbacks = Box::new(HostCallbacks {
app,
ctxt,
surf,
disp,
landscape,
shut_down_complete: shut_down_complete.clone(),
history_update,
url_update,
keyboard,
});
info!("Starting servo");
simpleservo::init(opts, gl.gl_wrapper, wakeup, callbacks).expect("error initializing Servo");
let result = Box::new(ServoInstance {
scroll_state: ScrollState::TriggerUp,
scroll_scale: Scale::new(SCROLL_SCALE / hidpi),
shut_down_complete,
});
Box::into_raw(result)
}
#[no_mangle]
pub unsafe extern "C" fn heartbeat_servo(_servo: *mut ServoInstance) {
let _ = call(|s| s.perform_updates());
}
#[no_mangle]
pub unsafe extern "C" fn keyboard_servo(
_servo: *mut ServoInstance,
key_code: char,
key_type: MLKeyType,
) {
let key = match key_type {
MLKeyType::kCharacter => Key::Character([key_code].iter().collect()),
MLKeyType::kBackspace => Key::Backspace,
MLKeyType::kEnter => Key::Enter,
_ => return,
};
// TODO: can the ML1 generate separate press and release events?
let key2 = key.clone();
let _ = call(move |s| s.key_down(key2));
let _ = call(move |s| s.key_up(key));
}
// Some magic numbers.
// How far does the cursor have to move for it to count as a drag rather than a click?
// (In device pixels squared, to avoid taking a sqrt when calculating move distance.)
const DRAG_CUTOFF_SQUARED: f32 = 900.0;
// How much should we scale scrolling by?
const SCROLL_SCALE: f32 = 3.0;
#[no_mangle]
pub unsafe extern "C" fn move_servo(servo: *mut ServoInstance, x: f32, y: f32) {
// Servo's cursor was moved
if let Some(servo) = servo.as_mut() {
let point = DevicePoint::new(x, y);
match servo.scroll_state {
ScrollState::TriggerUp => {
servo.scroll_state = ScrollState::TriggerUp;
let _ = call(|s| s.mouse_move(x, y));
},
ScrollState::TriggerDown(start)
if (start - point).square_length() < DRAG_CUTOFF_SQUARED =>
{
return;
},
ScrollState::TriggerDown(start) => {
servo.scroll_state = ScrollState::TriggerDragging(start, point);
let _ = call(|s| s.mouse_move(x, y));
let delta = (point - start) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll_start(delta.x, delta.y, start.x, start.y));
},
ScrollState::TriggerDragging(start, prev) => {
servo.scroll_state = ScrollState::TriggerDragging(start, point);
let _ = call(|s| s.mouse_move(x, y));
let delta = (point - prev) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll(delta.x, delta.y, start.x, start.y));
},
}
}
}
#[no_mangle]
pub unsafe extern "C" fn trigger_servo(servo: *mut ServoInstance, x: f32, y: f32, down: bool) {
// Servo was triggered
if let Some(servo) = servo.as_mut() {
let point = DevicePoint::new(x, y);
match servo.scroll_state {
ScrollState::TriggerUp if down => {
servo.scroll_state = ScrollState::TriggerDown(point);
let _ = call(|s| s.mouse_down(x, y, MouseButton::Left));
},
ScrollState::TriggerDown(start) if !down => {
servo.scroll_state = ScrollState::TriggerUp;
let _ = call(|s| s.mouse_up(start.x, start.y, MouseButton::Left));
let _ = call(|s| s.click(start.x as f32, start.y as f32));
let _ = call(|s| s.mouse_move(start.x, start.y));
},
ScrollState::TriggerDragging(start, prev) if !down => {
servo.scroll_state = ScrollState::TriggerUp;
let delta = (point - prev) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll_end(delta.x, delta.y, start.x, start.y));
let _ = call(|s| s.mouse_up(x, y, MouseButton::Left));
},
_ => return,
}
}
}
#[no_mangle]
pub unsafe extern "C" fn traverse_servo(_servo: *mut ServoInstance, delta: i32) {
// Traverse the session history
if delta == 0 {
let _ = call(|s| s.reload());
} else if delta < 0 {
let _ = call(|s| s.go_back());
} else {
let _ = call(|s| s.go_forward());
}
}
#[no_mangle]
pub unsafe extern "C" fn navigate_servo(_servo: *mut ServoInstance, text: *const c_char) {
let text = CStr::from_ptr(text)
.to_str()
.expect("Failed to convert text to UTF-8");
let url = ServoUrl::parse(text).unwrap_or_else(|_| {
let mut search = ServoUrl::parse("https://duckduckgo.com")
.expect("Failed to parse search URL")
.into_url();
search.query_pairs_mut().append_pair("q", text);
ServoUrl::from_url(search)
});
let _ = call(|s| s.load_uri(url.as_str()));
}
// Some magic numbers for shutdown
const SHUTDOWN_DURATION: Duration = Duration::from_secs(10);
const SHUTDOWN_POLL_INTERVAL: Duration = Duration::from_millis(100);
#[no_mangle]
pub unsafe extern "C" fn discard_servo(servo: *mut ServoInstance) {
if let Some(servo) = servo.as_mut() {
let servo = Box::from_raw(servo);
let finish = Instant::now() + SHUTDOWN_DURATION;
let _ = call(|s| s.request_shutdown());
while !servo.shut_down_complete.get() {
let _ = call(|s| s.perform_updates());
if Instant::now() > finish {
warn!("Incomplete shutdown.");
}
thread::sleep(SHUTDOWN_POLL_INTERVAL);
}
deinit();
}
}
struct HostCallbacks {
ctxt: EGLContext,
surf: EGLSurface,
disp: EGLDisplay,
landscape: bool,
shut_down_complete: Rc<Cell<bool>>,
history_update: MLHistoryUpdate,
url_update: MLURLUpdate,
app: MLApp,
keyboard: MLKeyboard,
}
impl HostTrait for HostCallbacks {
fn flush(&self) {
// Immersive and landscape apps have different requirements for who calls SwapBuffers.
if self.landscape {
SwapBuffers(self.disp, self.surf);
}
}
fn make_current(&self) {
MakeCurrent(self.disp, self.surf, self.surf, self.ctxt);
}
fn prompt_alert(&self, message: String, _trusted: bool) {
warn!("Prompt Alert: {}", message);
}
fn prompt_ok_cancel(&self, message: String, _trusted: bool) -> PromptResult {
warn!("Prompt not implemented. Cancelled. {}", message);
PromptResult::Secondary
}
fn prompt_yes_no(&self, message: String, _trusted: bool) -> PromptResult {
warn!("Prompt not implemented. Cancelled. {}", message);
PromptResult::Secondary
}
fn prompt_input(&self, message: String, default: String, _trusted: bool) -> Option<String> {
warn!("Input prompt not implemented. {}", message);
Some(default)
}
fn on_load_started(&self) {}
fn on_load_ended(&self) {}
fn on_title_changed(&self, _title: String) {}
fn on_allow_navigation(&self, _url: String) -> bool {
true
}
fn on_url_changed(&self, url: String) {
if let Ok(cstr) = CString::new(url.as_str()) {
if let Some(url_update) = self.url_update.0 {
url_update(self.app, cstr.as_ptr());
}
}
}
fn on_history_changed(&self, can_go_back: bool, can_go_forward: bool) {
if let Some(history_update) = self.history_update.0 {
history_update(self.app, can_go_back, can_go_forward);
}
}
fn on_animating_changed(&self, _animating: bool) {}
fn on_shutdown_complete(&self) {
self.shut_down_complete.set(true);
}
fn on_ime_show(
&self,
_input_type: InputMethodType,
_text: Option<(String, i32)>,
_multiline: bool,
_bounds: DeviceIntRect,
) {
if let Some(keyboard) = self.keyboard.0 {
keyboard(self.app, true)
}
}
fn on_ime_hide(&self) {
if let Some(keyboard) = self.keyboard.0 {
keyboard(self.app, false)
}
}
fn get_clipboard_contents(&self) -> Option<String> {
None
}
fn set_clipboard_contents(&self, _contents: String) {}
fn on_devtools_started(&self, port: Result<u16, ()>) {
match port {
Ok(p) => info!("Devtools Server running on port {}", p),
Err(()) => error!("Error running Devtools server"),
}
}
}
pub struct ServoInstance {
scroll_state: ScrollState,
scroll_scale: Scale<f32, DevicePixel, LayoutPixel>,
shut_down_complete: Rc<Cell<bool>>,
}
#[derive(Clone, Copy)]
enum ScrollState {
TriggerUp,
TriggerDown(DevicePoint),
TriggerDragging(DevicePoint, DevicePoint),
}
struct EventLoopWakerInstance;
impl EventLoopWaker for EventLoopWakerInstance {
fn clone_box(&self) -> Box<dyn EventLoopWaker> {
Box::new(EventLoopWakerInstance)
}
fn wake(&self) {}
}
impl log::Log for MLLogger {
fn enabled(&self, metadata: &log::Metadata) -> bool {
metadata.level() <= LOG_LEVEL
}
fn log(&self, record: &log::Record) {
if let Some(log) = self.0 {
let lvl = match record.level() {
log::Level::Error => MLLogLevel::Error,
log::Level::Warn => MLLogLevel::Warning,
log::Level::Info => MLLogLevel::Info,
log::Level::Debug => MLLogLevel::Debug,
log::Level::Trace => MLLogLevel::Verbose,
};
let mut msg = SmallVec::<[u8; 128]>::new();
write!(msg, "{}\0", record.args()).unwrap();
log(lvl, &msg[0] as *const _ as *const _);
}
}
fn flush(&self) {}
}
fn redirect_stdout_to_log(logger: MLLogger) {
let log = match logger.0 {
None => return,
Some(log) => log,
};
// The first step is to redirect stdout and stderr to the logs.
// We redirect stdout and stderr to a custom descriptor.
let mut pfd: [c_int; 2] = [0, 0];
unsafe {
pipe(pfd.as_mut_ptr());
dup2(pfd[1], 1);
dup2(pfd[1], 2);
}
let descriptor = pfd[0];
// Then we spawn a thread whose only job is to read from the other side of the
// pipe and redirect to the logs.
let _detached = thread::spawn(move || {
const BUF_LENGTH: usize = 512;
let mut buf = vec![b'\0' as c_char; BUF_LENGTH];
// Always keep at least one null terminator
const BUF_AVAILABLE: usize = BUF_LENGTH - 1;
let buf = &mut buf[..BUF_AVAILABLE];
let mut cursor = 0_usize;
loop {
let result = {
let read_into = &mut buf[cursor..];
unsafe {
read(
descriptor,
read_into.as_mut_ptr() as *mut _,
read_into.len(),
)
}
};
let end = if result == 0 {
return;
} else if result < 0 {
log(
MLLogLevel::Error,
b"error in log thread; closing\0".as_ptr() as *const _,
);
return;
} else {
result as usize + cursor
};
// Only modify the portion of the buffer that contains real data.
let buf = &mut buf[0..end];
if let Some(last_newline_pos) = buf.iter().rposition(|&c| c == b'\n' as c_char) {
buf[last_newline_pos] = b'\0' as c_char;
log(MLLogLevel::Info, buf.as_ptr());
if last_newline_pos < buf.len() - 1 {
let pos_after_newline = last_newline_pos + 1;
let len_not_logged_yet = buf[pos_after_newline..].len();
for j in 0..len_not_logged_yet as usize {
buf[j] = buf[pos_after_newline + j];
}
cursor = len_not_logged_yet;
} else {
cursor = 0;
}
} else if end == BUF_AVAILABLE {
// No newline found but the buffer is full, flush it anyway.
// `buf.as_ptr()` is null-terminated by BUF_LENGTH being 1 less than BUF_AVAILABLE.
log(MLLogLevel::Info, buf.as_ptr());
cursor = 0;
} else {
cursor = end;
}
}
});
}

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-background-repaint-parent.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-background-repaint.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-outline-repaint-parent.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-outline-repaint.html]
expected: FAIL

View file

@ -1,4 +1,4 @@
[gamut-mapping.html]
[color-mix-out-of-gamut.html]
[Property color value 'color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
@ -14,13 +14,13 @@
[Property color value 'color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
[Property color value 'color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
[Property color value 'color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
@ -41,26 +41,14 @@
[Property color value 'color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklab(100 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
[Property color value 'color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklch(100 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
[Property color value 'color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL

View file

@ -0,0 +1,2 @@
[percentage-padding-004.html]
expected: FAIL

View file

@ -0,0 +1,264 @@
[overlay-interpolation.html]
[CSS Transitions: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0.1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0.9) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL

View file

@ -490,3 +490,15 @@
[ShadowRoot interface: attribute adoptedStyleSheets]
expected: FAIL
[CSSImportRule interface: attribute layerName]
expected: FAIL
[CSSImportRule interface: attribute supportsText]
expected: FAIL
[CSSImportRule interface: sheet.cssRules[0\] must inherit property "layerName" with the proper type]
expected: FAIL
[CSSImportRule interface: sheet.cssRules[0\] must inherit property "supportsText" with the proper type]
expected: FAIL

View file

@ -2,7 +2,13 @@
[readAsDataURL result for Blob with unspecified MIME type]
expected: FAIL
[readAsDataURL result for empty Blob]
expected: FAIL
[filereader_readAsDataURL.any.html]
[readAsDataURL result for Blob with unspecified MIME type]
expected: FAIL
[readAsDataURL result for empty Blob]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-background-repaint-parent.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-background-repaint.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-outline-repaint-parent.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[color-mix-currentcolor-outline-repaint.html]
expected: FAIL

View file

@ -0,0 +1,54 @@
[color-mix-out-of-gamut.html]
[Property color value 'color-mix(in hsl, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hsl, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, color(display-p3 0 1 0) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, lab(100 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, lab(0 104.3 -50.9) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, lch(100 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, lch(0 116 334) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklab(1 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklab(0 0.365 -0.16) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklch(1 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL
[Property color value 'color-mix(in hwb, oklch(0 0.399 336.3) 100%, rgb(0, 0, 0) 0%)']
expected: FAIL

View file

@ -0,0 +1,2 @@
[at-supports-selector-file-selector-button.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[percentage-padding-004.html]
expected: FAIL

View file

@ -0,0 +1,750 @@
[font-size-adjust-composition.html]
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [none\] to add [2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [none\] to add [2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [none\] to add [2.0\] at (0.5) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [none\] to add [2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [none\] to add [2.0\] at (1.5) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to add [2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to add [2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to add [2.0\] at (0.5) should be [1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to add [2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to add [2.0\] at (1.5) should be [3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [0.0\] to add [2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [0.0\] to add [2.0\] at (0) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [0.0\] to add [2.0\] at (0.5) should be [1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [0.0\] to add [2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [0.0\] to add [2.0\] at (1.5) should be [3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to replace [2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to replace [2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to replace [2.0\] at (0.5) should be [1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to replace [2.0\] at (1) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [0.0\] to replace [2.0\] at (1.5) should be [2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [2.0\] to add [none\] at (-0.5) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [2.0\] to add [none\] at (0) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [none\] to add [ex-height 2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [none\] to add [ex-height 2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [none\] to add [ex-height 2.0\] at (0.5) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [none\] to add [ex-height 2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [none\] to add [ex-height 2.0\] at (1.5) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to add [ex-height 2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to add [ex-height 2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to add [ex-height 2.0\] at (0.5) should be [1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to add [ex-height 2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to add [ex-height 2.0\] at (1.5) should be [3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 0\] to add [ex-height 2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 0\] to add [ex-height 2.0\] at (0) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 0\] to add [ex-height 2.0\] at (0.5) should be [1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 0\] to add [ex-height 2.0\] at (1) should be [2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 0\] to add [ex-height 2.0\] at (1.5) should be [3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to replace [ex-height 2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to replace [ex-height 2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to replace [ex-height 2.0\] at (0.5) should be [1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to replace [ex-height 2.0\] at (1) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from add [ex-height 0\] to replace [ex-height 2.0\] at (1.5) should be [2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 2.0\] to add [none\] at (-0.5) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 2.0\] to add [none\] at (0) should be [2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ex-height 0.5\] from replace [ex-height 2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [none\] to add [cap-height 2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [none\] to add [cap-height 2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [none\] to add [cap-height 2.0\] at (0.5) should be [cap-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [none\] to add [cap-height 2.0\] at (1) should be [cap-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [none\] to add [cap-height 2.0\] at (1.5) should be [cap-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0\] to add [cap-height 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0\] to add [cap-height 2.0\] at (0) should be [cap-height 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0\] to add [cap-height 2.0\] at (0.5) should be [cap-height 1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0\] to add [cap-height 2.0\] at (1) should be [cap-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0\] to add [cap-height 2.0\] at (1.5) should be [cap-height 3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 0\] to add [cap-height 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 0\] to add [cap-height 2.0\] at (0) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 0\] to add [cap-height 2.0\] at (0.5) should be [cap-height 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 0\] to add [cap-height 2.0\] at (1) should be [cap-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 0\] to add [cap-height 2.0\] at (1.5) should be [cap-height 3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0.0\] to replace [cap-height 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0.0\] to replace [cap-height 2.0\] at (0) should be [cap-height 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0.0\] to replace [cap-height 2.0\] at (0.5) should be [cap-height 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0.0\] to replace [cap-height 2.0\] at (1) should be [cap-height 2\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from add [cap-height 0.0\] to replace [cap-height 2.0\] at (1.5) should be [cap-height 2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 2.0\] to add [none\] at (-0.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 2.0\] to add [none\] at (0) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [cap-height 0.5\] from replace [cap-height 2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [none\] to add [ch-width 2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [none\] to add [ch-width 2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [none\] to add [ch-width 2.0\] at (0.5) should be [ch-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [none\] to add [ch-width 2.0\] at (1) should be [ch-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [none\] to add [ch-width 2.0\] at (1.5) should be [ch-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to add [ch-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to add [ch-width 2.0\] at (0) should be [ch-width 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to add [ch-width 2.0\] at (0.5) should be [ch-width 1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to add [ch-width 2.0\] at (1) should be [ch-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to add [ch-width 2.0\] at (1.5) should be [ch-width 3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 0\] to add [ch-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 0\] to add [ch-width 2.0\] at (0) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 0\] to add [ch-width 2.0\] at (0.5) should be [ch-width 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 0\] to add [ch-width 2.0\] at (1) should be [ch-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 0\] to add [ch-width 2.0\] at (1.5) should be [ch-width 3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to replace [ch-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to replace [ch-width 2.0\] at (0) should be [ch-width 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to replace [ch-width 2.0\] at (0.5) should be [ch-width 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to replace [ch-width 2.0\] at (1) should be [ch-width 2\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from add [ch-width 0\] to replace [ch-width 2.0\] at (1.5) should be [ch-width 2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 2.0\] to add [none\] at (-0.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 2.0\] to add [none\] at (0) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ch-width 0.5\] from replace [ch-width 2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [none\] to add [ic-width 2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [none\] to add [ic-width 2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [none\] to add [ic-width 2.0\] at (0.5) should be [ic-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [none\] to add [ic-width 2.0\] at (1) should be [ic-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [none\] to add [ic-width 2.0\] at (1.5) should be [ic-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to add [ic-width 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to add [ic-width 2.0\] at (0) should be [ic-width 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to add [ic-width 2.0\] at (0.5) should be [ic-width 1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to add [ic-width 2.0\] at (1) should be [ic-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to add [ic-width 2.0\] at (1.5) should be [ic-width 3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 0\] to add [ic-width 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 0\] to add [ic-width 2.0\] at (0) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 0\] to add [ic-width 2.0\] at (0.5) should be [ic-width 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 0\] to add [ic-width 2.0\] at (1) should be [ic-width 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 0\] to add [ic-width 2.0\] at (1.5) should be [ic-width 3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to replace [ic-width 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to replace [ic-width 2.0\] at (0) should be [ic-width 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to replace [ic-width 2.0\] at (0.5) should be [ic-width 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to replace [ic-width 2.0\] at (1) should be [ic-width 2\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from add [ic-width 0\] to replace [ic-width 2.0\] at (1.5) should be [ic-width 2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 2.0\] to add [none\] at (-0.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 2.0\] to add [none\] at (0) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-width 0.5\] from replace [ic-width 2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [none\] to add [ic-height 2.0\] at (-0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [none\] to add [ic-height 2.0\] at (0) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [none\] to add [ic-height 2.0\] at (0.5) should be [ic-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [none\] to add [ic-height 2.0\] at (1) should be [ic-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [none\] to add [ic-height 2.0\] at (1.5) should be [ic-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to add [ic-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to add [ic-height 2.0\] at (0) should be [ic-height 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to add [ic-height 2.0\] at (0.5) should be [ic-height 1.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to add [ic-height 2.0\] at (1) should be [ic-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to add [ic-height 2.0\] at (1.5) should be [ic-height 3.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 0\] to add [ic-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 0\] to add [ic-height 2.0\] at (0) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 0\] to add [ic-height 2.0\] at (0.5) should be [ic-height 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 0\] to add [ic-height 2.0\] at (1) should be [ic-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 0\] to add [ic-height 2.0\] at (1.5) should be [ic-height 3.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to replace [ic-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to replace [ic-height 2.0\] at (0) should be [ic-height 0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to replace [ic-height 2.0\] at (0.5) should be [ic-height 1.25\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to replace [ic-height 2.0\] at (1) should be [ic-height 2\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from add [ic-height 0\] to replace [ic-height 2.0\] at (1.5) should be [ic-height 2.75\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 2.0\] to add [none\] at (-0.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 2.0\] to add [none\] at (0) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 2.0\] to add [none\] at (0.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 2.0\] to add [none\] at (1) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [ic-height 0.5\] from replace [ic-height 2.0\] to add [none\] at (1.5) should be [none\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0.0\] to add [cap-height 2.0\] at (-0.5) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0.0\] to add [cap-height 2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0.0\] to add [cap-height 2.0\] at (0.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0.0\] to add [cap-height 2.0\] at (1) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0.0\] to add [cap-height 2.0\] at (1.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0.0\] to replace [cap-height 2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0.0\] to replace [cap-height 2.0\] at (0) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0.0\] to replace [cap-height 2.0\] at (0.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0.0\] to replace [cap-height 2.0\] at (1) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0.0\] to replace [cap-height 2.0\] at (1.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0\] to add [cap-height 2.0\] at (-0.5) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0\] to add [cap-height 2.0\] at (0) should be [0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0\] to add [cap-height 2.0\] at (0.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0\] to add [cap-height 2.0\] at (1) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ex-height 0\] to add [cap-height 2.0\] at (1.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0\] to replace [cap-height 2.0\] at (-0.5) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0\] to replace [cap-height 2.0\] at (0) should be [0.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0\] to replace [cap-height 2.0\] at (0.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0\] to replace [cap-height 2.0\] at (1) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ex-height 0\] to replace [cap-height 2.0\] at (1.5) should be [cap-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0.0\] to add [ch-width 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0.0\] to add [ch-width 2.0\] at (0) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0.0\] to add [ch-width 2.0\] at (0.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0.0\] to add [ch-width 2.0\] at (1) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0.0\] to add [ch-width 2.0\] at (1.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0.0\] to replace [ch-width 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0.0\] to replace [ch-width 2.0\] at (0) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0.0\] to replace [ch-width 2.0\] at (0.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0.0\] to replace [ch-width 2.0\] at (1) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0.0\] to replace [ch-width 2.0\] at (1.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0\] to add [ch-width 2.0\] at (-0.5) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0\] to add [ch-width 2.0\] at (0) should be [cap-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0\] to add [ch-width 2.0\] at (0.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0\] to add [ch-width 2.0\] at (1) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [cap-height 0\] to add [ch-width 2.0\] at (1.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0\] to replace [ch-width 2.0\] at (-0.5) should be [cap-height 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0\] to replace [ch-width 2.0\] at (0) should be [cap-height 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0\] to replace [ch-width 2.0\] at (0.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0\] to replace [ch-width 2.0\] at (1) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [cap-height 0\] to replace [ch-width 2.0\] at (1.5) should be [ch-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0.0\] to add [ic-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0.0\] to add [ic-width 2.0\] at (0) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0.0\] to add [ic-width 2.0\] at (0.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0.0\] to add [ic-width 2.0\] at (1) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0.0\] to add [ic-width 2.0\] at (1.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0.0\] to replace [ic-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0.0\] to replace [ic-width 2.0\] at (0) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0.0\] to replace [ic-width 2.0\] at (0.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0.0\] to replace [ic-width 2.0\] at (1) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0.0\] to replace [ic-width 2.0\] at (1.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0\] to add [ic-width 2.0\] at (-0.5) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0\] to add [ic-width 2.0\] at (0) should be [ch-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0\] to add [ic-width 2.0\] at (0.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0\] to add [ic-width 2.0\] at (1) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ch-width 0\] to add [ic-width 2.0\] at (1.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0\] to replace [ic-width 2.0\] at (-0.5) should be [ch-width 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0\] to replace [ic-width 2.0\] at (0) should be [ch-width 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0\] to replace [ic-width 2.0\] at (0.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0\] to replace [ic-width 2.0\] at (1) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ch-width 0\] to replace [ic-width 2.0\] at (1.5) should be [ic-width 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0.0\] to add [ic-height 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0.0\] to add [ic-height 2.0\] at (0) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0.0\] to add [ic-height 2.0\] at (0.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0.0\] to add [ic-height 2.0\] at (1) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0.0\] to add [ic-height 2.0\] at (1.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0.0\] to replace [ic-height 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0.0\] to replace [ic-height 2.0\] at (0) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0.0\] to replace [ic-height 2.0\] at (0.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0.0\] to replace [ic-height 2.0\] at (1) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0.0\] to replace [ic-height 2.0\] at (1.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0\] to add [ic-height 2.0\] at (-0.5) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0\] to add [ic-height 2.0\] at (0) should be [ic-width 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0\] to add [ic-height 2.0\] at (0.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0\] to add [ic-height 2.0\] at (1) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-width 0\] to add [ic-height 2.0\] at (1.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0\] to replace [ic-height 2.0\] at (-0.5) should be [ic-width 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0\] to replace [ic-height 2.0\] at (0) should be [ic-width 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0\] to replace [ic-height 2.0\] at (0.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0\] to replace [ic-height 2.0\] at (1) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-width 0\] to replace [ic-height 2.0\] at (1.5) should be [ic-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0.0\] to add [ex-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0.0\] to add [ex-height 2.0\] at (0) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0.0\] to add [ex-height 2.0\] at (0.5) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0.0\] to add [ex-height 2.0\] at (1) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0.0\] to add [ex-height 2.0\] at (1.5) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0.0\] to replace [ex-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0.0\] to replace [ex-height 2.0\] at (0) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0.0\] to replace [ex-height 2.0\] at (0.5) should be [ex-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0.0\] to replace [ex-height 2.0\] at (1) should be [ex-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0.0\] to replace [ex-height 2.0\] at (1.5) should be [ex-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0\] to add [ex-height 2.0\] at (-0.5) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0\] to add [ex-height 2.0\] at (0) should be [ic-height 0.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0\] to add [ex-height 2.0\] at (0.5) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0\] to add [ex-height 2.0\] at (1) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from replace [ic-height 0\] to add [ex-height 2.0\] at (1.5) should be [ex-height 2.5\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0\] to replace [ex-height 2.0\] at (-0.5) should be [ic-height 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0\] to replace [ex-height 2.0\] at (0) should be [ic-height 0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0\] to replace [ex-height 2.0\] at (0.5) should be [ex-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0\] to replace [ex-height 2.0\] at (1) should be [ex-height 2.0\]]
expected: FAIL
[Compositing: property <font-size-adjust> underlying [0.5\] from add [ic-height 0\] to replace [ex-height 2.0\] at (1.5) should be [ex-height 2.0\]]
expected: FAIL

View file

@ -0,0 +1,264 @@
[overlay-interpolation.html]
[CSS Transitions: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0.1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (0.9) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (-1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0.1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (0.9) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (-1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0.1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (0.9) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[CSS Animations: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (-1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (0) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (0.5) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (1) should be [auto\]]
expected: FAIL
[Web Animations: property <overlay> from [auto\] to [auto\] at (1.5) should be [auto\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Transitions with transition: all: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[CSS Animations: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (-1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (0) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (0.5) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (1) should be [none\]]
expected: FAIL
[Web Animations: property <overlay> from [none\] to [none\] at (1.5) should be [none\]]
expected: FAIL

View file

@ -535,3 +535,15 @@
[ShadowRoot interface: attribute adoptedStyleSheets]
expected: FAIL
[CSSImportRule interface: attribute layerName]
expected: FAIL
[CSSImportRule interface: attribute supportsText]
expected: FAIL
[CSSImportRule interface: sheet.cssRules[0\] must inherit property "layerName" with the proper type]
expected: FAIL
[CSSImportRule interface: sheet.cssRules[0\] must inherit property "supportsText" with the proper type]
expected: FAIL

View file

@ -0,0 +1,3 @@
[response-body-read-task-handling.html]
[piping from a body stream to a JS-written WritableStream should occur in a microtask scope]
expected: FAIL

View file

@ -1,6 +0,0 @@
[navigate.window.html]
[Nothing fancy]
expected: FAIL
[base64]
expected: FAIL

View file

@ -1,4 +1,5 @@
[iframe.tentative.https.window.html]
expected: TIMEOUT
[private to local: failed preflight.]
expected: FAIL
@ -33,4 +34,4 @@
expected: FAIL
[public to local, grandparent navigates: success.]
expected: FAIL
expected: TIMEOUT

View file

@ -23,9 +23,6 @@
[treat-as-public to private: failure.]
expected: FAIL
[local https to local https: success.]
expected: FAIL
[private https to local https: failure.]
expected: FAIL

View file

@ -147,5 +147,5 @@
[list-style-image sec-fetch-site - HTTPS downgrade-upgrade]
expected: FAIL
[border-image sec-fetch-dest - Not sent to non-trustworthy cross-site destination]
[border-image sec-fetch-site - HTTPS downgrade (header not sent)]
expected: FAIL

View file

@ -0,0 +1,6 @@
[document-state.https.html]
[A navigation's initiator origin and referrer are stored in the document state and used in the document repopulation case]
expected: FAIL
[A navigation's initiator origin and referrer are stored in the document state and used on location.reload()]
expected: FAIL

View file

@ -1,3 +0,0 @@
[document-state.tentative.https.html]
[A navigation's initiator origin and referrer are stored in the document state]
expected: FAIL

View file

@ -1,6 +1,6 @@
[scroll-restoration-fragment-scrolling-cross-origin.html]
type: testharness
expected: TIMEOUT
expected: ERROR
[Manual scroll restoration should take precedent over scrolling to fragment in cross origin navigation]
expected: TIMEOUT

View file

@ -1,10 +1,6 @@
[iframe-src-aboutblank-navigate-immediately.html]
expected: TIMEOUT
[Navigating to a different document with window.open]
expected: FAIL
[Navigating to a different document with link click]
expected: FAIL
[Navigating to a different document with form submission]
expected: TIMEOUT

View file

@ -10,3 +10,6 @@
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='about:blank']
expected: FAIL
[load & pageshow events do not fire on contentWindow of <iframe> element created with src='']
expected: FAIL

View file

@ -1,10 +1,6 @@
[javascript-url-referrer.window.html]
expected: TIMEOUT
[unsafe-url referrer policy used to create the starting page]
expected: FAIL
[origin referrer policy used to create the starting page]
expected: FAIL
[no-referrer referrer policy used to create the starting page]
expected: TIMEOUT

View file

@ -16,3 +16,6 @@
[D83D DE0D set in href="" targeting a frame and clicked]
expected: FAIL
[DE0D 0041 set in href="" targeting a frame and clicked]
expected: FAIL

View file

@ -1,3 +1,4 @@
[javascript-url-security-check-same-origin-domain.sub.html]
expected: TIMEOUT
[javascript: URL security check for same-origin-domain but not same-origin]
expected: FAIL
expected: TIMEOUT

View file

@ -1,7 +1,6 @@
[navigate-to-unparseable-url.html]
expected: TIMEOUT
[location.href setter throws a SyntaxError DOMException for unparseable URLs]
expected: TIMEOUT
expected: FAIL
[<a> tag navigate fails for unparseable URLs]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,3 @@
[navigation-unload-cross-origin.sub.window.html]
[Cross-origin navigation started from unload handler must be ignored]
expected: FAIL

View file

@ -1,4 +1,3 @@
[nav-cancelation-2.sub.html]
expected: TIMEOUT
[grandparent cancels a pending navigation in a cross-origin grandchild]
expected: TIMEOUT
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse-during-unload.html]
expected: TIMEOUT
[Traversing the history during unload]
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.requestAnimationFrame.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.toBlob.html]
expected: TIMEOUT

View file

@ -1,2 +1,2 @@
[canvas.2d.disconnected.html]
expected: FAIL
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.convertToBlob.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.convertToBlob.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.createImageBitmap.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.createImageBitmap.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.drawImage.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.drawImage.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.getImageData.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.getImageData.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.putImageData.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.putImageData.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.render-opportunities.transferToImageBitmap.w.html]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[2d.layer.unclosed.html]
expected: FAIL

View file

@ -0,0 +1,2 @@
[2d.layer.unclosed.w.html]
expected: TIMEOUT

View file

@ -1640,6 +1640,36 @@
[SVGElement interface: attribute onbeforetoggle]
expected: FAIL
[VisibilityStateEntry interface: existence and properties of interface object]
expected: FAIL
[VisibilityStateEntry interface object length]
expected: FAIL
[VisibilityStateEntry interface object name]
expected: FAIL
[VisibilityStateEntry interface: existence and properties of interface prototype object]
expected: FAIL
[VisibilityStateEntry interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[VisibilityStateEntry interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
[VisibilityStateEntry interface: attribute name]
expected: FAIL
[VisibilityStateEntry interface: attribute entryType]
expected: FAIL
[VisibilityStateEntry interface: attribute startTime]
expected: FAIL
[VisibilityStateEntry interface: attribute duration]
expected: FAIL
[idlharness.https.html?include=(Document|Window)]
[Document interface: documentWithHandlers must inherit property "queryCommandEnabled(DOMString)" with the proper type]

View file

@ -1,7 +1,6 @@
[update-the-rendering.html]
expected: TIMEOUT
["Flush autofocus candidates" should be happen after the first animation frame callbacks, and before a resize event in the next iteration of window event loop.]
expected: TIMEOUT
["Flush autofocus candidates" should be happen before a scroll event and animation frame callbacks]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_escaping-1.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe escape the sandbox if\n allow-popups-to-escape-sandbox is used]
expected: TIMEOUT
expected: FAIL

View file

@ -1,5 +1,4 @@
[iframe_sandbox_popups_nonescaping-2.html]
type: testharness
expected: TIMEOUT
[Check that popups from a sandboxed iframe do not escape the sandbox]
expected: NOTRUN
expected: FAIL

View file

@ -0,0 +1,12 @@
[form-double-submit-requestsubmit.html]
[test runTest2 with submitterType: input, callRequestSubmit: true, callSubmit: true, preventDefault: false, passSubmitter: true]
expected: FAIL
[test runTest2 with submitterType: input, callRequestSubmit: false, callSubmit: true, preventDefault: false, passSubmitter: true]
expected: FAIL
[test runTest2 with submitterType: button, callRequestSubmit: true, callSubmit: true, preventDefault: false, passSubmitter: true]
expected: FAIL
[test runTest2 with submitterType: button, callRequestSubmit: false, callSubmit: true, preventDefault: false, passSubmitter: true]
expected: FAIL

View file

@ -0,0 +1,9 @@
[name-attribute.tentative.html]
[basic handling of mutually exclusive details]
expected: FAIL
[more complex handling of mutually exclusive details]
expected: FAIL
[mutually exclusive details across multiple names and multiple tree scopes]
expected: FAIL

View file

@ -0,0 +1,2 @@
[dialog-focus-previous-outside.html]
expected: ERROR

View file

@ -0,0 +1,3 @@
[dialog-no-throw-requested-state.html]
[dialog-no-throw-requested-state]
expected: FAIL

View file

@ -1,6 +1,5 @@
[htmlanchorelement_noopener.html]
type: testharness
expected: TIMEOUT
[Check that targeting of rel=noopener with a given name ignores an existing window with that name]
expected: NOTRUN
@ -8,10 +7,10 @@
expected: FAIL
[Check that rel=noopener with target=_top does a normal load]
expected: NOTRUN
expected: FAIL
[Check that rel=noopener with target=_parent does a normal load]
expected: NOTRUN
expected: FAIL
[Check that rel=noopener with target=_self does a normal load]
expected: NOTRUN
expected: FAIL

View file

@ -1,3 +0,0 @@
[module-delayed.html]
[async document.write in a module]
expected: FAIL

View file

@ -1,4 +0,0 @@
[reload.window.html]
expected: TIMEOUT
[Reloading a document.open()'d page should reload the URL of the entry realm's responsible document]
expected: TIMEOUT

View file

@ -3,3 +3,6 @@
expected: TIMEOUT
[The incumbent settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: TIMEOUT
[The entry settings object while executing the compiled callback via Web IDL's invoke must be that of the node document]
expected: FAIL

View file

@ -0,0 +1,14 @@
[atomics-wait-async.https.any.html]
[Atomics.waitAsync timeout in a Window]
expected: FAIL
[Atomics.waitAsync notification in a Window]
expected: FAIL
[atomics-wait-async.https.any.worker.html]
[Atomics.waitAsync timeout in a DedicatedWorkerGlobalScope]
expected: FAIL
[Atomics.waitAsync notification in a DedicatedWorkerGlobalScope]
expected: FAIL

View file

@ -1,6 +1,7 @@
[promise-rejection-events.html]
expected: TIMEOUT
[delayed handling: delaying handling rejected promise created from createImageBitmap will cause both events to fire]
expected: FAIL
expected: TIMEOUT
[unhandledrejection: from createImageBitmap which is UA triggered]
expected: FAIL

View file

@ -1,3 +1,4 @@
[navigation-id-element-timing.tentative.html]
expected: TIMEOUT
[Element Timing navigation id test]
expected: FAIL
expected: TIMEOUT

View file

@ -2,3 +2,6 @@
expected: TIMEOUT
[Navigation Id should be 1 at initial navigations.]
expected: TIMEOUT
[Navigation Ids should exist and are all the same as the initial navigation.]
expected: TIMEOUT

View file

@ -1,3 +1,4 @@
[navigation-id-long-task-task-attribution.tentative.html]
expected: TIMEOUT
[Long Task/Task Attribution navigation id test]
expected: FAIL
expected: TIMEOUT

View file

@ -1,3 +1,4 @@
[navigation-id-mark-measure.tentative.html]
expected: TIMEOUT
[Mark/Measure navigation id test]
expected: FAIL
expected: TIMEOUT

View file

@ -1,3 +1,7 @@
[navigation-id-reset.tentative.html]
expected: TIMEOUT
[Navigation Id should be reset to 1 after reload.]
expected: FAIL
[Navigation Id should be re-generated after reload.]
expected: TIMEOUT

View file

@ -1,3 +1,4 @@
[navigation-id-resource-timing.tentative.html]
expected: TIMEOUT
[Resource Timing navigation id test]
expected: FAIL
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[navigation-id-worker-created-entries.html]
[Navigation id of performance entries created by workers should be empty]
expected: FAIL

View file

@ -26,6 +26,12 @@
[PerformanceResourceTiming interface: resource must inherit property "deliveryType" with the proper type]
expected: FAIL
[PerformanceResourceTiming interface: attribute firstInterimResponseStart]
expected: FAIL
[PerformanceResourceTiming interface: resource must inherit property "firstInterimResponseStart" with the proper type]
expected: FAIL
[idlharness.any.worker.html]
[PerformanceResourceTiming interface: resource must inherit property "workerStart" with the proper type]
@ -54,3 +60,9 @@
[PerformanceResourceTiming interface: resource must inherit property "deliveryType" with the proper type]
expected: FAIL
[PerformanceResourceTiming interface: attribute firstInterimResponseStart]
expected: FAIL
[PerformanceResourceTiming interface: resource must inherit property "firstInterimResponseStart" with the proper type]
expected: FAIL

View file

@ -1,10 +1,25 @@
[nested-context-navigations-iframe.html]
expected: TIMEOUT
[Test that iframe refreshes are not observable by the parent]
expected: TIMEOUT
expected: NOTRUN
[Test that crossorigin iframe refreshes are not observable by the parent]
expected: NOTRUN
[Test that cross-site iframe refreshes are not observable by the parent]
expected: NOTRUN
[Test that crossorigin iframe navigations are not observable by the parent, even after history navigations by the parent]
expected: TIMEOUT
[Test that cross-site iframe navigations are not observable by the parent, even after history navigations by the parent]
expected: NOTRUN
[Test that iframe navigations are not observable by the parent]
expected: NOTRUN
[Test that crossorigin iframe navigations are not observable by the parent]
expected: NOTRUN
[Test that cross-site iframe navigations are not observable by the parent]
expected: NOTRUN

View file

@ -0,0 +1,21 @@
[owning-type-message-port.any.sharedworker.html]
expected: ERROR
[owning-type-message-port.any.worker.html]
[Transferred MessageChannel works as expected]
expected: FAIL
[Second branch of owning ReadableStream tee should end up into errors with transfer only values]
expected: FAIL
[owning-type-message-port.any.html]
[Transferred MessageChannel works as expected]
expected: FAIL
[Second branch of owning ReadableStream tee should end up into errors with transfer only values]
expected: FAIL
[owning-type-message-port.any.serviceworker.html]
expected: ERROR

View file

@ -0,0 +1,38 @@
[owning-type-video-frame.any.serviceworker.html]
expected: ERROR
[owning-type-video-frame.any.sharedworker.html]
expected: ERROR
[owning-type-video-frame.any.worker.html]
[ReadableStream of type owning should close serialized chunks]
expected: FAIL
[ReadableStream of type owning should transfer JS chunks with transferred values]
expected: FAIL
[ReadableStream of type owning should error when trying to enqueue not serializable values]
expected: FAIL
[ReadableStream of type owning should clone serializable objects when teeing]
expected: FAIL
[ReadableStream of type owning should clone JS Objects with serializables when teeing]
expected: FAIL
[owning-type-video-frame.any.html]
[ReadableStream of type owning should close serialized chunks]
expected: FAIL
[ReadableStream of type owning should transfer JS chunks with transferred values]
expected: FAIL
[ReadableStream of type owning should error when trying to enqueue not serializable values]
expected: FAIL
[ReadableStream of type owning should clone serializable objects when teeing]
expected: FAIL
[ReadableStream of type owning should clone JS Objects with serializables when teeing]
expected: FAIL

View file

@ -0,0 +1,39 @@
[owning-type.any.html]
[ReadableStream can be constructed with owning type]
expected: FAIL
[ReadableStream of type owning should call start with a ReadableStreamDefaultController]
expected: FAIL
[ReadableStream should be able to call enqueue with an empty transfer list]
expected: FAIL
[ReadableStream should check transfer parameter]
expected: FAIL
[ReadableStream of type owning should transfer enqueued chunks]
expected: FAIL
[owning-type.any.sharedworker.html]
expected: ERROR
[owning-type.any.worker.html]
[ReadableStream can be constructed with owning type]
expected: FAIL
[ReadableStream of type owning should call start with a ReadableStreamDefaultController]
expected: FAIL
[ReadableStream should be able to call enqueue with an empty transfer list]
expected: FAIL
[ReadableStream should check transfer parameter]
expected: FAIL
[ReadableStream of type owning should transfer enqueued chunks]
expected: FAIL
[owning-type.any.serviceworker.html]
expected: ERROR

View file

@ -1,5 +1,5 @@
[cross-partition.https.tentative.html]
expected: TIMEOUT
expected: CRASH
[BroadcastChannel messages aren't received from a cross-partition iframe]
expected: FAIL

View file

@ -0,0 +1,4 @@
[017.html]
expected: TIMEOUT
[origin of the script that invoked the method, about:blank]
expected: TIMEOUT

View file

@ -1,4 +0,0 @@
[018.html]
expected: TIMEOUT
[origin of the script that invoked the method, javascript:]
expected: TIMEOUT

View file

@ -0,0 +1,3 @@
[url-parsing.html]
[Multiple globals for base URL in WebSocket constructor]
expected: FAIL

View file

@ -1,3 +0,0 @@
[stylesheet_media_queries.html]
[Media queries within stylesheets]
expected: FAIL

View file

@ -34,7 +34,7 @@ jobs:
displayName: 'affected tests: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -51,7 +51,7 @@ jobs:
displayName: 'affected tests without changes: Safari Technology Preview'
condition: eq(variables['Build.Reason'], 'PullRequest')
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -93,7 +93,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_infrastructure']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -104,6 +104,7 @@ jobs:
packages: virtualenv
- template: tools/ci/azure/install_fonts.yml
- template: tools/ci/azure/install_certs.yml
- template: tools/ci/azure/color_profile.yml
- template: tools/ci/azure/install_chrome.yml
- template: tools/ci/azure/install_firefox.yml
- template: tools/ci/azure/install_safari.yml
@ -138,7 +139,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -154,7 +155,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.tools_unittest']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -170,7 +171,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -186,7 +187,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wptrunner_unittest']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -202,7 +203,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
# full checkout required
- task: UsePythonVersion@0
@ -222,7 +223,7 @@ jobs:
dependsOn: decision
condition: dependencies.decision.outputs['test_jobs.wpt_integration']
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
# full checkout required
- task: UsePythonVersion@0
@ -477,7 +478,7 @@ jobs:
parallel: 8 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -487,6 +488,7 @@ jobs:
parameters:
packages: virtualenv
- template: tools/ci/azure/install_certs.yml
- template: tools/ci/azure/color_profile.yml
- template: tools/ci/azure/install_safari.yml
parameters:
channel: stable
@ -518,7 +520,7 @@ jobs:
parallel: 8 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -528,6 +530,7 @@ jobs:
parameters:
packages: virtualenv
- template: tools/ci/azure/install_certs.yml
- template: tools/ci/azure/color_profile.yml
- template: tools/ci/azure/install_safari.yml
- template: tools/ci/azure/update_hosts.yml
- template: tools/ci/azure/update_manifest.yml
@ -556,7 +559,7 @@ jobs:
parallel: 8 # chosen to make runtime ~2h
timeoutInMinutes: 180
pool:
vmImage: 'macOS-12'
vmImage: 'macOS-13'
steps:
- task: UsePythonVersion@0
inputs:
@ -566,6 +569,7 @@ jobs:
parameters:
packages: virtualenv
- template: tools/ci/azure/install_certs.yml
- template: tools/ci/azure/color_profile.yml
- template: tools/ci/azure/update_hosts.yml
- template: tools/ci/azure/update_manifest.yml
- script: |

View file

@ -39,4 +39,16 @@ async_test(function(testCase) {
testCase.done();
});
reader.readAsDataURL(blob);
}, 'readAsDataURL result for Blob with unspecified MIME type');
}, 'readAsDataURL result for Blob with unspecified MIME type');
async_test(function(testCase) {
var blob = new Blob([]);
var reader = new FileReader();
reader.onload = this.step_func(function() {
assert_equals(reader.result,
"data:application/octet-stream;base64,");
testCase.done();
});
reader.readAsDataURL(blob);
}, 'readAsDataURL result for empty Blob');

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// Here's the set-up for this test:
// Step 1 (top-frame) Embeds a cross-origin iframe.
// Step 2 (sub-frame) Make a cross-origin POST request.
// Step 3 (sub-frame) Checks if platform version header is present and alerts top frame.
// Step 4 (top-frame) Asserts header was present and returns.
async_test(t => {
// Step 4
window.addEventListener("message", t.step_func(e => {
assert_equals(e.data, "HadPlatformVersion");
t.done();
}));
// Step 1
let iframe = document.createElement("iframe");
iframe.src = "https://{{domains[www1]}}:{{ports[https][0]}}/client-hints/resources/accept-ch.wildcard.iframe.https.sub.html";
document.body.appendChild(iframe);
}, "Accept-CH with wildcard policy and iframe subresource");
</script>
</body>
</html>

View file

@ -0,0 +1,2 @@
Accept-CH: sec-ch-ua-platform-version
Permissions-Policy: ch-ua-platform-version=("https://*.{{domains[]}}:{{ports[https][0]}}")

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async t => {
var navigationTiming = window.performance.getEntriesByType('navigation')[0];
assert_not_equals(navigationTiming, undefined);
assert_equals(navigationTiming.criticalCHRestart, 0, "This should be 0 as there was no restart.");
}, "Critical-CH no-restart navigation timing test");
</script>
</body>
</html>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<body>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
promise_test(async t => {
var navigationTiming = window.performance.getEntriesByType('navigation')[0];
assert_not_equals(navigationTiming, undefined);
assert_less_than(navigationTiming.startTime, navigationTiming.criticalCHRestart, "Restarts happen after the beginning of the navigation");
assert_less_than(navigationTiming.criticalCHRestart, navigationTiming.fetchStart, "Restarts happen before fetch");
}, "Critical-CH restart navigation timing test");
</script>
</body>
</html>

View file

@ -0,0 +1,2 @@
Accept-CH: sec-ch-device-memory
Critical-CH: sec-ch-device-memory

View file

@ -0,0 +1,16 @@
<!doctype html>
<meta charset="utf-8">
<script>
// Step 2 (client-hints/accept-ch.wildcard.https.sub.html)
const xhr = new XMLHttpRequest();
xhr.open('POST', "https://{{domains[www2]}}:{{ports[https][0]}}/client-hints/resources/echo-ua-client-hints-received.py");
xhr.onload = function() {
// Step 3 (client-hints/accept-ch.wildcard.https.sub.html)
if (xhr.getResponseHeader("sec-ch-ua-platform-received") != null) {
window.top.postMessage("HadPlatformVersion", "*");
} else {
window.top.postMessage("MissingPlatformVersion", "*");
}
};
xhr.send();
</script>

View file

@ -0,0 +1 @@
Permissions-Policy: ch-ua-platform-version=("https://*.{{domains[]}}:{{ports[https][0]}}")

View file

@ -0,0 +1,106 @@
<!doctype html>
<meta charset="utf-8">
<title>Async Clipboard write should cancel the prior pending request</title>
<link rel="help" href="https://github.com/w3c/clipboard-apis/issues/161">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="resources/user-activation.js"></script>
<iframe width="50" height="50" id="same" src="resources/page.html"></iframe><br>
<iframe width="50" height="50" id="cross" src="https://{{hosts[alt][]}}:{{ports[https][1]}}/clipboard-apis/resources/page.html"></iframe><br>
<input value="Test">
<script>
"use strict";
// Permissions are required in order to invoke navigator.clipboard functions in
// an automated test.
async function getPermissions() {
await test_driver.set_permission({name: "clipboard-read"}, "granted");
await test_driver.set_permission({name: "clipboard-write"}, "granted");
await waitForUserActivation();
}
function waitForMessage(msg) {
return new Promise((resolve) => {
window.addEventListener("message", function handler(e) {
if (e.data == msg) {
window.removeEventListener("message", handler);
resolve();
}
});
});
}
function generateRandomString() {
return "random number: " + Math.random();
}
function testCancelPendingWrite(funcToMakeNewRequest, msg) {
promise_test(async t => {
await getPermissions();
// Create a pending write request which should be rejected after a new
// request is made.
let resolvePendingPromise;
let promise = navigator.clipboard.write([
new ClipboardItem({
"text/plain": new Promise((resolve) => { resolvePendingPromise = resolve; }),
}),
]).catch(e => { return e; });
// Make a new request that should cancel the prior pending request.
let str = generateRandomString();
await funcToMakeNewRequest(str);
// Pending request should be rejected with NotAllowedError.
let error = await promise;
assert_not_equals(error, undefined);
assert_equals(error.name, "NotAllowedError");
// Resolve pending promise.
resolvePendingPromise(generateRandomString());
// Check clipboard data.
assert_equals(await navigator.clipboard.readText(), str);
}, msg);
}
testCancelPendingWrite(async (str) => {
// A new write request should cancel the prior pending request.
await navigator.clipboard.write([
new ClipboardItem({
"text/plain": str,
}),
]).catch(() => {
assert_true(false, "should not fail");
});
}, "clipboard.write() should cancel the prior pending one (same document)");
testCancelPendingWrite(async (str) => {
// A new write should cancel the prior pending request.
const iframe = document.getElementById("same");
iframe.contentWindow.postMessage(["write", str], "*");
await waitForMessage("done");
}, "clipboard.write() should cancel the prior pending one (same-origin iframe)");
testCancelPendingWrite(async (str) => {
// A new write should cancel the prior pending request.
const iframe = document.getElementById("cross");
iframe.contentWindow.postMessage(["write", str], "*");
await waitForMessage("done");
}, "clipboard.write() should cancel the prior pending one (cross-origin iframe)");
testCancelPendingWrite(async (str) => {
const input = document.querySelector("input");
input.value = str;
input.focus();
input.select();
// A new copy action should cancel the prior pending request.
const modifier_key = navigator.platform.includes("Mac") ? "\uE03D" : "\uE009";
await new test_driver.Actions().keyDown(modifier_key).keyDown("c").send();
}, "copy action should cancel the prior pending clipboard.write() request");
</script>

View file

@ -0,0 +1,26 @@
<!DOCTYPE html>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-action.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="user-activation.js"></script>
<div style="width: 10px; height: 10px"></div>
<script>
window.addEventListener("message", async (e) => {
if (e.data && e.data[0] == "write") {
test_driver.set_test_context(window.parent);
await test_driver.set_permission({name: 'clipboard-read'}, 'granted');
await test_driver.set_permission({name: 'clipboard-write'}, 'granted');
await waitForUserActivation();
await navigator.clipboard.write([
new ClipboardItem({
"text/plain": e.data[1],
}),
]).catch(() => {
assert_true(false, `should not fail`);
});
window.parent.postMessage("done", "*");
}
});
</script>
</html>

View file

@ -7,14 +7,12 @@
*/
function waitForAtLeastOneFrame() {
return new Promise(resolve => {
// Different web engines work slightly different on this area but 1) waiting
// for two requestAnimationFrames() to happen one after another and 2)
// adding a step_timeout(0) to guarantee events have finished should be
// Different web engines work slightly different on this area but waiting
// for two requestAnimationFrames() to happen, one after another, should be
// sufficient to ensure at least one frame has been generated anywhere.
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1785615
window.requestAnimationFrame(() => {
window.requestAnimationFrame(() => {
setTimeout(resolve, 0);
resolve();
});
});
});

View file

@ -85,8 +85,10 @@
tests.forEach(test => {
async_test(t => {
var url = generateUrlWithAllowCSPFrom(test.origin, test.allow_csp_from);
assert_iframe_with_csp(t, url, test.csp, test.expected, test.name, test.blockedURI);
const url = generateUrlWithAllowCSPFrom(
test.origin, test.allow_csp_from);
assert_iframe_with_csp(t, url, test.csp, test.expected, test.name,
test.blockedURI, /*checkImageLoaded=*/true);
}, test.name);
});
</script>

View file

@ -102,14 +102,16 @@ function assert_required_csp(t, url, csp, expected) {
document.body.appendChild(i);
}
function assert_iframe_with_csp(t, url, csp, shouldBlock, urlId, blockedURI) {
var i = document.createElement('iframe');
function assert_iframe_with_csp(t, url, csp, shouldBlock, urlId, blockedURI,
checkImageLoaded) {
const i = document.createElement('iframe');
url.searchParams.append("id", urlId);
i.src = url.toString();
if (csp != null)
i.csp = csp;
var loaded = {};
var onLoadReceived = {};
window.addEventListener("message", function (e) {
if (e.source != i.contentWindow)
return;
@ -146,24 +148,22 @@ function assert_iframe_with_csp(t, url, csp, shouldBlock, urlId, blockedURI) {
} else {
// Assert iframe loads. Wait for the load event, the postMessage from the
// script and the img load event.
let postMessage_received = false;
let img_loaded = false;
let img_loaded = !checkImageLoaded;
window.addEventListener('message', t.step_func(e => {
if (e.source != i.contentWindow)
return;
if (e.data.loaded) {
assert_true(loaded[urlId]);
postMessage_received = true;
} else if (e.data === "img.loaded")
if (e.data === "img loaded")
img_loaded = true;
if (i.onloadReceived && postMessage_received && img_loaded)
if (loaded[urlId] && onLoadReceived[urlId] && img_loaded) {
t.done();
}
}));
i.onload = t.step_func(function () {
if (loaded[urlId])
onLoadReceived[urlId] = true;
if (loaded[urlId] && onLoadReceived[urlId] && img_loaded) {
t.done();
i.onloadReceived = true;
}
});
}
document.body.appendChild(i);

Some files were not shown because too many files have changed in this diff Show more