diff options
111 files changed, 6389 insertions, 807 deletions
diff --git a/components/layout_2020/display_list.rs b/components/layout_2020/display_list.rs index f39a2f23b18..6bd6c60a663 100644 --- a/components/layout_2020/display_list.rs +++ b/components/layout_2020/display_list.rs @@ -5,15 +5,21 @@ use crate::fragments::{BoxFragment, Fragment}; use crate::geom::physical::{Rect, Vec2}; use embedder_traits::Cursor; -use euclid::{Point2D, SideOffsets2D}; +use euclid::{Point2D, SideOffsets2D, Size2D}; use gfx::text::glyph::GlyphStore; use std::sync::Arc; +use style::dom::OpaqueNode; use style::properties::ComputedValues; -use style::values::computed::{BorderStyle, Length}; -use webrender_api::{self as wr, units, CommonItemProperties, PrimitiveFlags}; +use style::values::computed::{BorderStyle, Length, LengthPercentage}; +use style::values::specified::ui::CursorKind; +use webrender_api::{self as wr, units}; + +// `webrender_api::display_item::ItemTag` is private +type ItemTag = (u64, u16); +type HitInfo = Option<ItemTag>; pub struct DisplayListBuilder { - pipeline_id: wr::PipelineId, + current_space_and_clip: wr::SpaceAndClipInfo, pub wr: wr::DisplayListBuilder, pub is_contentful: bool, } @@ -21,11 +27,33 @@ pub struct DisplayListBuilder { impl DisplayListBuilder { pub fn new(pipeline_id: wr::PipelineId, viewport_size: wr::units::LayoutSize) -> Self { Self { - pipeline_id, + current_space_and_clip: wr::SpaceAndClipInfo::root_scroll(pipeline_id), is_contentful: false, wr: wr::DisplayListBuilder::new(pipeline_id, viewport_size), } } + + fn common_properties( + &self, + clip_rect: units::LayoutRect, + hit_info: HitInfo, + ) -> wr::CommonItemProperties { + wr::CommonItemProperties { + clip_rect, + clip_id: self.current_space_and_clip.clip_id, + spatial_id: self.current_space_and_clip.spatial_id, + hit_info, + // TODO(gw): Make use of the WR backface visibility functionality. + flags: wr::PrimitiveFlags::default(), + } + } + + fn clipping_and_scrolling_scope<R>(&mut self, f: impl FnOnce(&mut Self) -> R) -> R { + let previous = self.current_space_and_clip; + let result = f(self); + self.current_space_and_clip = previous; + result + } } /// Contentful paint, for the purpose of @@ -60,19 +88,12 @@ impl Fragment { .translate(&containing_block.top_left); let mut baseline_origin = rect.top_left.clone(); baseline_origin.y += t.ascent; - let cursor = cursor(&t.parent_style, Cursor::Text); - let common = CommonItemProperties { - clip_rect: rect.clone().into(), - clip_id: wr::ClipId::root(builder.pipeline_id), - spatial_id: wr::SpatialId::root_scroll_node(builder.pipeline_id), - hit_info: cursor.map(|cursor| (t.tag.0 as u64, cursor as u16)), - // TODO(gw): Make use of the WR backface visibility functionality. - flags: PrimitiveFlags::default(), - }; let glyphs = glyphs(&t.glyphs, baseline_origin); if glyphs.is_empty() { return; } + let hit_info = hit_info(&t.parent_style, t.tag, Cursor::Text); + let common = builder.common_properties(rect.clone().into(), hit_info); let color = t.parent_style.clone_color(); builder .wr @@ -85,14 +106,8 @@ impl Fragment { .rect .to_physical(i.style.writing_mode, containing_block) .translate(&containing_block.top_left); - let common = CommonItemProperties { - clip_rect: rect.clone().into(), - clip_id: wr::ClipId::root(builder.pipeline_id), - spatial_id: wr::SpatialId::root_scroll_node(builder.pipeline_id), - hit_info: None, - // TODO(gw): Make use of the WR backface visibility functionality. - flags: PrimitiveFlags::default(), - }; + let hit_info = None; + let common = builder.common_properties(rect.clone().into(), hit_info); builder.wr.push_image( &common, rect.into(), @@ -122,18 +137,11 @@ impl BoxFragment { .to_physical(self.style.writing_mode, containing_block) .translate(&containing_block.top_left) .into(); - let cursor = cursor(&self.style, Cursor::Default); - let common = CommonItemProperties { - clip_rect: border_rect, - clip_id: wr::ClipId::root(builder.pipeline_id), - spatial_id: wr::SpatialId::root_scroll_node(builder.pipeline_id), - hit_info: cursor.map(|cursor| (self.tag.0 as u64, cursor as u16)), - // TODO(gw): Make use of the WR backface visibility functionality. - flags: PrimitiveFlags::default(), - }; + let hit_info = hit_info(&self.style, self.tag, Cursor::Default); + let border_radius = self.border_radius(&border_rect); - self.background_display_items(builder, &common); - self.border_display_items(builder, &common, border_rect); + self.background_display_items(builder, hit_info, border_rect, &border_radius); + self.border_display_items(builder, hit_info, border_rect, border_radius); let content_rect = self .content_rect .to_physical(self.style.writing_mode, containing_block) @@ -143,24 +151,61 @@ impl BoxFragment { } } + fn border_radius(&self, border_rect: &units::LayoutRect) -> wr::BorderRadius { + let resolve = |radius: &LengthPercentage, box_size: f32| { + radius.percentage_relative_to(Length::new(box_size)).px() + }; + let corner = |corner: &style::values::computed::BorderCornerRadius| { + Size2D::new( + resolve(&corner.0.width.0, border_rect.size.width), + resolve(&corner.0.height.0, border_rect.size.height), + ) + }; + let b = self.style.get_border(); + wr::BorderRadius { + top_left: corner(&b.border_top_left_radius), + top_right: corner(&b.border_top_right_radius), + bottom_right: corner(&b.border_bottom_right_radius), + bottom_left: corner(&b.border_bottom_left_radius), + } + } + fn background_display_items( &self, builder: &mut DisplayListBuilder, - common: &CommonItemProperties, + hit_info: HitInfo, + border_rect: units::LayoutRect, + border_radius: &wr::BorderRadius, ) { let background_color = self .style .resolve_color(self.style.clone_background_color()); - if background_color.alpha > 0 || common.hit_info.is_some() { - builder.wr.push_rect(common, rgba(background_color)) + if background_color.alpha > 0 || hit_info.is_some() { + builder.clipping_and_scrolling_scope(|builder| { + if !border_radius.is_zero() { + builder.current_space_and_clip.clip_id = builder.wr.define_clip( + &builder.current_space_and_clip, + border_rect, + Some(wr::ComplexClipRegion { + rect: border_rect, + radii: *border_radius, + mode: wr::ClipMode::Clip, + }), + None, + ); + } + let common = builder.common_properties(border_rect, hit_info); + builder.wr.push_rect(&common, rgba(background_color)) + }); } } fn border_display_items( &self, builder: &mut DisplayListBuilder, - common: &CommonItemProperties, + hit_info: HitInfo, border_rect: units::LayoutRect, + radius: wr::BorderRadius, ) { let b = self.style.get_border(); let widths = SideOffsets2D::new( @@ -187,15 +232,18 @@ impl BoxFragment { BorderStyle::Outset => wr::BorderStyle::Outset, }, }; + let common = builder.common_properties(border_rect, hit_info); let details = wr::BorderDetails::Normal(wr::NormalBorder { top: side(b.border_top_style, b.border_top_color), right: side(b.border_right_style, b.border_right_color), bottom: side(b.border_bottom_style, b.border_bottom_color), left: side(b.border_left_style, b.border_left_color), - radius: wr::BorderRadius::zero(), + radius, do_aa: true, }); - builder.wr.push_border(common, border_rect, widths, details) + builder + .wr + .push_border(&common, border_rect, widths, details) } } @@ -233,16 +281,21 @@ fn glyphs(glyph_runs: &[Arc<GlyphStore>], mut origin: Vec2<Length>) -> Vec<wr::G glyphs } -fn cursor(values: &ComputedValues, default: Cursor) -> Option<Cursor> { +fn hit_info(style: &ComputedValues, tag: OpaqueNode, auto_cursor: Cursor) -> HitInfo { use style::computed_values::pointer_events::T as PointerEvents; - use style::values::specified::ui::CursorKind; - let inherited_ui = values.get_inherited_ui(); + let inherited_ui = style.get_inherited_ui(); if inherited_ui.pointer_events == PointerEvents::None { - return None; + None + } else { + let cursor = cursor(inherited_ui.cursor.keyword, auto_cursor); + Some((tag.0 as u64, cursor as u16)) } - Some(match inherited_ui.cursor.keyword { - CursorKind::Auto => default, +} + +fn cursor(kind: CursorKind, auto_cursor: Cursor) -> Cursor { + match kind { + CursorKind::Auto => auto_cursor, CursorKind::None => Cursor::None, CursorKind::Default => Cursor::Default, CursorKind::Pointer => Cursor::Pointer, @@ -278,5 +331,5 @@ fn cursor(values: &ComputedValues, default: Cursor) -> Option<Cursor> { CursorKind::AllScroll => Cursor::AllScroll, CursorKind::ZoomIn => Cursor::ZoomIn, CursorKind::ZoomOut => Cursor::ZoomOut, - }) + } } diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs index 217e66837bb..d2e1876b9d8 100644 --- a/components/script/dom/bindings/trace.rs +++ b/components/script/dom/bindings/trace.rs @@ -311,6 +311,15 @@ unsafe impl<T: JSTraceable> JSTraceable for VecDeque<T> { } } +unsafe impl<T: JSTraceable + Eq + Hash> JSTraceable for indexmap::IndexSet<T> { + #[inline] + unsafe fn trace(&self, trc: *mut JSTracer) { + for e in self.iter() { + e.trace(trc); + } + } +} + unsafe impl<A, B, C, D> JSTraceable for (A, B, C, D) where A: JSTraceable, diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs index f6937427eda..04f8d948a24 100644 --- a/components/script/dom/globalscope.rs +++ b/components/script/dom/globalscope.rs @@ -24,6 +24,7 @@ use crate::dom::event::{Event, EventBubbles, EventCancelable, EventStatus}; use crate::dom::eventsource::EventSource; use crate::dom::eventtarget::EventTarget; use crate::dom::file::File; +use crate::dom::htmlscriptelement::ScriptId; use crate::dom::messageevent::MessageEvent; use crate::dom::messageport::MessagePort; use crate::dom::paintworkletglobalscope::PaintWorkletGlobalScope; @@ -32,6 +33,7 @@ use crate::dom::window::Window; use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::dom::workletglobalscope::WorkletGlobalScope; use crate::microtask::{Microtask, MicrotaskQueue}; +use crate::script_module::ModuleTree; use crate::script_runtime::{CommonScriptMsg, JSContext as SafeJSContext, ScriptChan, ScriptPort}; use crate::script_thread::{MainThreadScriptChan, ScriptThread}; use crate::task::TaskCanceller; @@ -119,6 +121,14 @@ pub struct GlobalScope { /// Timers used by the Console API. console_timers: DomRefCell<HashMap<DOMString, u64>>, + /// module map is used when importing JavaScript modules + /// https://html.spec.whatwg.org/multipage/#concept-settings-object-module-map + #[ignore_malloc_size_of = "mozjs"] + module_map: DomRefCell<HashMap<ServoUrl, Rc<ModuleTree>>>, + + #[ignore_malloc_size_of = "mozjs"] + inline_module_map: DomRefCell<HashMap<ScriptId, Rc<ModuleTree>>>, + /// For providing instructions to an optional devtools server. #[ignore_malloc_size_of = "channels are hard"] devtools_chan: Option<IpcSender<ScriptToDevtoolsControlMsg>>, @@ -391,6 +401,8 @@ impl GlobalScope { pipeline_id, devtools_wants_updates: Default::default(), console_timers: DomRefCell::new(Default::default()), + module_map: DomRefCell::new(Default::default()), + inline_module_map: DomRefCell::new(Default::default()), devtools_chan, mem_profiler_chan, time_profiler_chan, @@ -1357,6 +1369,24 @@ impl GlobalScope { &self.consumed_rejections } + pub fn set_module_map(&self, url: ServoUrl, module: ModuleTree) { + self.module_map.borrow_mut().insert(url, Rc::new(module)); + } + + pub fn get_module_map(&self) -> &DomRefCell<HashMap<ServoUrl, Rc<ModuleTree>>> { + &self.module_map + } + + pub fn set_inline_module_map(&self, script_id: ScriptId, module: ModuleTree) { + self.inline_module_map + .borrow_mut() + .insert(script_id, Rc::new(module)); + } + + pub fn get_inline_module_map(&self) -> &DomRefCell<HashMap<ScriptId, Rc<ModuleTree>>> { + &self.inline_module_map + } + #[allow(unsafe_code)] pub fn get_cx(&self) -> SafeJSContext { unsafe { SafeJSContext::from_ptr(Runtime::get()) } diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs index fdeca285e30..3a55590c81d 100644 --- a/components/script/dom/htmlscriptelement.rs +++ b/components/script/dom/htmlscriptelement.rs @@ -12,6 +12,7 @@ use crate::dom::bindings::inheritance::Castable; use crate::dom::bindings::refcounted::Trusted; use crate::dom::bindings::reflector::DomObject; use crate::dom::bindings::root::{Dom, DomRoot}; +use crate::dom::bindings::settings_stack::AutoEntryScript; use crate::dom::bindings::str::{DOMString, USVString}; use crate::dom::document::Document; use crate::dom::element::{ @@ -27,6 +28,8 @@ use crate::dom::performanceresourcetiming::InitiatorType; use crate::dom::virtualmethods::VirtualMethods; use crate::fetch::create_a_potential_CORS_request; use crate::network_listener::{self, NetworkListener, PreInvoke, ResourceTimingListener}; +use crate::script_module::fetch_inline_module_script; +use crate::script_module::{fetch_external_module_script, ModuleOwner}; use content_security_policy as csp; use dom_struct::dom_struct; use encoding_rs::Encoding; @@ -35,7 +38,7 @@ use ipc_channel::ipc; use ipc_channel::router::ROUTER; use js::jsval::UndefinedValue; use msg::constellation_msg::PipelineId; -use net_traits::request::{CorsSettings, Destination, Referrer, RequestBuilder}; +use net_traits::request::{CorsSettings, CredentialsMode, Destination, Referrer, RequestBuilder}; use net_traits::ReferrerPolicy; use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError}; use net_traits::{ResourceFetchTiming, ResourceTimingType}; @@ -51,6 +54,10 @@ use std::sync::{Arc, Mutex}; use style::str::{StaticStringVec, HTML_SPACE_CHARACTERS}; use uuid::Uuid; +/// An unique id for script element. +#[derive(Clone, Copy, Debug, Eq, Hash, JSTraceable, PartialEq)] +pub struct ScriptId(Uuid); + #[dom_struct] pub struct HTMLScriptElement { htmlelement: HTMLElement, @@ -71,6 +78,10 @@ pub struct HTMLScriptElement { /// Track line line_number line_number: u64, + + /// Unique id for each script element + #[ignore_malloc_size_of = "Defined in uuid"] + id: ScriptId, } impl HTMLScriptElement { @@ -81,6 +92,7 @@ impl HTMLScriptElement { creator: ElementCreator, ) -> HTMLScriptElement { HTMLScriptElement { + id: ScriptId(Uuid::new_v4()), htmlelement: HTMLElement::new_inherited(local_name, prefix, document), already_started: Cell::new(false), parser_inserted: Cell::new(creator.is_parser_created()), @@ -105,11 +117,15 @@ impl HTMLScriptElement { HTMLScriptElementBinding::Wrap, ) } + + pub fn get_script_id(&self) -> ScriptId { + self.id.clone() + } } /// Supported script types as defined by /// <https://html.spec.whatwg.org/multipage/#javascript-mime-type>. -static SCRIPT_JS_MIMES: StaticStringVec = &[ +pub static SCRIPT_JS_MIMES: StaticStringVec = &[ "application/ecmascript", "application/javascript", "application/x-ecmascript", @@ -143,7 +159,7 @@ pub struct ScriptOrigin { } impl ScriptOrigin { - fn internal(text: DOMString, url: ServoUrl, type_: ScriptType) -> ScriptOrigin { + pub fn internal(text: DOMString, url: ServoUrl, type_: ScriptType) -> ScriptOrigin { ScriptOrigin { text: text, url: url, @@ -152,7 +168,7 @@ impl ScriptOrigin { } } - fn external(text: DOMString, url: ServoUrl, type_: ScriptType) -> ScriptOrigin { + pub fn external(text: DOMString, url: ServoUrl, type_: ScriptType) -> ScriptOrigin { ScriptOrigin { text: text, url: url, @@ -160,6 +176,10 @@ impl ScriptOrigin { type_, } } + + pub fn text(&self) -> DOMString { + self.text.clone() + } } pub type ScriptResult = Result<ScriptOrigin, NetworkError>; @@ -427,7 +447,10 @@ impl HTMLScriptElement { return; } - // TODO: Step 12: nomodule content attribute + // Step 12 + if element.has_attribute(&local_name!("nomodule")) && script_type == ScriptType::Classic { + return; + } // Step 13. if !element.has_attribute(&local_name!("src")) && @@ -441,23 +464,25 @@ impl HTMLScriptElement { } // Step 14. - let for_attribute = element.get_attribute(&ns!(), &local_name!("for")); - let event_attribute = element.get_attribute(&ns!(), &local_name!("event")); - match (for_attribute, event_attribute) { - (Some(ref for_attribute), Some(ref event_attribute)) => { - let for_value = for_attribute.value().to_ascii_lowercase(); - let for_value = for_value.trim_matches(HTML_SPACE_CHARACTERS); - if for_value != "window" { - return; - } + if script_type == ScriptType::Classic { + let for_attribute = element.get_attribute(&ns!(), &local_name!("for")); + let event_attribute = element.get_attribute(&ns!(), &local_name!("event")); + match (for_attribute, event_attribute) { + (Some(ref for_attribute), Some(ref event_attribute)) => { + let for_value = for_attribute.value().to_ascii_lowercase(); + let for_value = for_value.trim_matches(HTML_SPACE_CHARACTERS); + if for_value != "window" { + return; + } - let event_value = event_attribute.value().to_ascii_lowercase(); - let event_value = event_value.trim_matches(HTML_SPACE_CHARACTERS); - if event_value != "onload" && event_value != "onload()" { - return; - } - }, - (_, _) => (), + let event_value = event_attribute.value().to_ascii_lowercase(); + let event_value = event_value.trim_matches(HTML_SPACE_CHARACTERS); + if event_value != "onload" && event_value != "onload()" { + return; + } + }, + (_, _) => (), + } } // Step 15. @@ -469,7 +494,18 @@ impl HTMLScriptElement { // Step 16. let cors_setting = cors_setting_for_element(element); - // TODO: Step 17: Module script credentials mode. + // Step 17. + let credentials_mode = match script_type { + ScriptType::Classic => None, + ScriptType::Module => Some(reflect_cross_origin_attribute(element).map_or( + CredentialsMode::CredentialsSameOrigin, + |attr| match &*attr { + "use-credentials" => CredentialsMode::Include, + "anonymous" => CredentialsMode::CredentialsSameOrigin, + _ => CredentialsMode::CredentialsSameOrigin, + }, + )), + }; // TODO: Step 18: Nonce. @@ -514,6 +550,7 @@ impl HTMLScriptElement { }, }; + // Step 24.6. match script_type { ScriptType::Classic => { // Preparation for step 26. @@ -555,50 +592,69 @@ impl HTMLScriptElement { } }, ScriptType::Module => { - warn!( - "{} is a module script. It should be fixed after #23545 landed.", - url.clone() + fetch_external_module_script( + ModuleOwner::Window(Trusted::new(self)), + url.clone(), + Destination::Script, + integrity_metadata.to_owned(), + credentials_mode.unwrap(), ); - self.global().issue_page_warning(&format!( - "Module scripts are not supported; {} will not be executed.", - url.clone() - )); + + if !r#async && was_parser_inserted { + doc.add_deferred_script(self); + } else if !r#async && !self.non_blocking.get() { + doc.push_asap_in_order_script(self); + } else { + doc.add_asap_script(self); + }; }, } } else { // Step 25. assert!(!text.is_empty()); - // Step 25-1. + // Step 25-1. & 25-2. let result = Ok(ScriptOrigin::internal( text.clone(), base_url.clone(), script_type.clone(), )); - // TODO: Step 25-2. - if let ScriptType::Module = script_type { - warn!( - "{} is a module script. It should be fixed after #23545 landed.", - base_url.clone() - ); - self.global().issue_page_warning( - "Module scripts are not supported; ignoring inline module script.", - ); - return; - } + // Step 25-2. + match script_type { + ScriptType::Classic => { + if was_parser_inserted && + doc.get_current_parser() + .map_or(false, |parser| parser.script_nesting_level() <= 1) && + doc.get_script_blocking_stylesheets_count() > 0 + { + // Step 26.h: classic, has no src, was parser-inserted, is blocked on stylesheet. + doc.set_pending_parsing_blocking_script(self, Some(result)); + } else { + // Step 26.i: otherwise. + self.execute(result); + } + }, + ScriptType::Module => { + // We should add inline module script elements + // into those vectors in case that there's no + // descendants in the inline module script. + if !r#async && was_parser_inserted { + doc.add_deferred_script(self); + } else if !r#async && !self.non_blocking.get() { + doc.push_asap_in_order_script(self); + } else { + doc.add_asap_script(self); + }; - // Step 26. - if was_parser_inserted && - doc.get_current_parser() - .map_or(false, |parser| parser.script_nesting_level() <= 1) && - doc.get_script_blocking_stylesheets_count() > 0 - { - // Step 26.h: classic, has no src, was parser-inserted, is blocked on stylesheet. - doc.set_pending_parsing_blocking_script(self, Some(result)); - } else { - // Step 26.i: otherwise. - self.execute(result); + fetch_inline_module_script( + ModuleOwner::Window(Trusted::new(self)), + text.clone(), + base_url.clone(), + self.id.clone(), + credentials_mode.unwrap(), + ); + }, } } } @@ -656,7 +712,7 @@ impl HTMLScriptElement { } /// <https://html.spec.whatwg.org/multipage/#execute-the-script-block> - pub fn execute(&self, result: Result<ScriptOrigin, NetworkError>) { + pub fn execute(&self, result: ScriptResult) { // Step 1. let doc = document_from_node(self); if self.parser_inserted.get() && &*doc != &*self.parser_document { @@ -674,10 +730,12 @@ impl HTMLScriptElement { Ok(script) => script, }; - self.unminify_js(&mut script); + if script.type_ == ScriptType::Classic { + self.unminify_js(&mut script); + } // Step 3. - let neutralized_doc = if script.external { + let neutralized_doc = if script.external || script.type_ == ScriptType::Module { debug!("loading external script, url = {}", script.url); let doc = document_from_node(self); doc.incr_ignore_destructive_writes_counter(); @@ -690,21 +748,24 @@ impl HTMLScriptElement { let document = document_from_node(self); let old_script = document.GetCurrentScript(); - // Step 5.a.1. - document.set_current_script(Some(self)); - - // Step 5.a.2. - self.run_a_classic_script(&script); - - // Step 6. - document.set_current_script(old_script.as_deref()); + match script.type_ { + ScriptType::Classic => { + document.set_current_script(Some(self)); + self.run_a_classic_script(&script); + document.set_current_script(old_script.as_deref()); + }, + ScriptType::Module => { + assert!(old_script.is_none()); + self.run_a_module_script(&script, false); + }, + } - // Step 7. + // Step 5. if let Some(doc) = neutralized_doc { doc.decr_ignore_destructive_writes_counter(); } - // Step 8. + // Step 6. if script.external { self.dispatch_load_event(); } @@ -736,6 +797,72 @@ impl HTMLScriptElement { ); } + #[allow(unsafe_code)] + /// https://html.spec.whatwg.org/multipage/#run-a-module-script + pub fn run_a_module_script(&self, script: &ScriptOrigin, _rethrow_errors: bool) { + // TODO use a settings object rather than this element's document/window + // Step 2 + let document = document_from_node(self); + if !document.is_fully_active() || !document.is_scripting_enabled() { + return; + } + + // Step 4 + let window = window_from_node(self); + let global = window.upcast::<GlobalScope>(); + let _aes = AutoEntryScript::new(&global); + + if script.external { + let module_map = global.get_module_map().borrow(); + + if let Some(module_tree) = module_map.get(&script.url) { + // Step 6. + { + let module_error = module_tree.get_error().borrow(); + if module_error.is_some() { + module_tree.report_error(&global); + return; + } + } + + let module_record = module_tree.get_record().borrow(); + if let Some(record) = &*module_record { + let evaluated = module_tree.execute_module(global, record.handle()); + + if let Err(exception) = evaluated { + module_tree.set_error(Some(exception.clone())); + module_tree.report_error(&global); + return; + } + } + } + } else { + let inline_module_map = global.get_inline_module_map().borrow(); + + if let Some(module_tree) = inline_module_map.get(&self.id.clone()) { + // Step 6. + { + let module_error = module_tree.get_error().borrow(); + if module_error.is_some() { + module_tree.report_error(&global); + return; + } + } + + let module_record = module_tree.get_record().borrow(); + if let Some(record) = &*module_record { + let evaluated = module_tree.execute_module(global, record.handle()); + + if let Err(exception) = evaluated { + module_tree.set_error(Some(exception.clone())); + module_tree.report_error(&global); + return; + } + } + } + } + } + pub fn queue_error_event(&self) { let window = window_from_node(self); window @@ -818,10 +945,18 @@ impl HTMLScriptElement { self.parser_inserted.set(parser_inserted); } + pub fn get_parser_inserted(&self) -> bool { + self.parser_inserted.get() + } + pub fn set_already_started(&self, already_started: bool) { self.already_started.set(already_started); } + pub fn get_non_blocking(&self) -> bool { + self.non_blocking.get() + } + fn dispatch_event( &self, type_: Atom, @@ -930,6 +1065,11 @@ impl HTMLScriptElementMethods for HTMLScriptElement { // https://html.spec.whatwg.org/multipage/#dom-script-defer make_bool_setter!(SetDefer, "defer"); + // https://html.spec.whatwg.org/multipage/#dom-script-nomodule + make_bool_getter!(NoModule, "nomodule"); + // https://html.spec.whatwg.org/multipage/#dom-script-nomodule + make_bool_setter!(SetNoModule, "nomodule"); + // https://html.spec.whatwg.org/multipage/#dom-script-integrity make_getter!(Integrity, "integrity"); // https://html.spec.whatwg.org/multipage/#dom-script-integrity diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs index d2e209b98dd..785c1be8939 100644 --- a/components/script/dom/promise.rs +++ b/components/script/dom/promise.rs @@ -225,7 +225,7 @@ impl Promise { } #[allow(unsafe_code)] - fn promise_obj(&self) -> HandleObject { + pub fn promise_obj(&self) -> HandleObject { let obj = self.reflector().get_jsobject(); unsafe { assert!(IsPromiseObject(obj)); diff --git a/components/script/dom/webidls/HTMLScriptElement.webidl b/components/script/dom/webidls/HTMLScriptElement.webidl index f7126b7901b..13b69865fa5 100644 --- a/components/script/dom/webidls/HTMLScriptElement.webidl +++ b/components/script/dom/webidls/HTMLScriptElement.webidl @@ -12,6 +12,8 @@ interface HTMLScriptElement : HTMLElement { [CEReactions] attribute DOMString type; [CEReactions] + attribute boolean noModule; + [CEReactions] attribute DOMString charset; [CEReactions] attribute boolean async; diff --git a/components/script/lib.rs b/components/script/lib.rs index 79c0657b996..2ae7f76923a 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -83,6 +83,8 @@ mod microtask; #[warn(deprecated)] mod network_listener; #[warn(deprecated)] +mod script_module; +#[warn(deprecated)] pub mod script_runtime; #[warn(deprecated)] #[allow(unsafe_code)] diff --git a/components/script/script_module.rs b/components/script/script_module.rs new file mode 100644 index 00000000000..4bb60f5a233 --- /dev/null +++ b/components/script/script_module.rs @@ -0,0 +1,1430 @@ +/* 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/. */ + +//! The script module mod contains common traits and structs +//! related to `type=module` for script thread or worker threads. + +use crate::compartments::{enter_realm, AlreadyInCompartment, InCompartment}; +use crate::document_loader::LoadType; +use crate::dom::bindings::cell::DomRefCell; +use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowBinding::WindowMethods; +use crate::dom::bindings::conversions::jsstring_to_str; +use crate::dom::bindings::error::report_pending_exception; +use crate::dom::bindings::error::Error; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::refcounted::{Trusted, TrustedPromise}; +use crate::dom::bindings::reflector::DomObject; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::settings_stack::AutoIncumbentScript; +use crate::dom::bindings::str::DOMString; +use crate::dom::bindings::trace::RootedTraceableBox; +use crate::dom::document::Document; +use crate::dom::element::Element; +use crate::dom::globalscope::GlobalScope; +use crate::dom::htmlscriptelement::{HTMLScriptElement, ScriptId}; +use crate::dom::htmlscriptelement::{ScriptOrigin, ScriptType, SCRIPT_JS_MIMES}; +use crate::dom::node::document_from_node; +use crate::dom::performanceresourcetiming::InitiatorType; +use crate::dom::promise::Promise; +use crate::dom::promisenativehandler::{Callback, PromiseNativeHandler}; +use crate::dom::window::Window; +use crate::dom::worker::TrustedWorkerAddress; +use crate::network_listener::{self, NetworkListener}; +use crate::network_listener::{PreInvoke, ResourceTimingListener}; +use crate::task::TaskBox; +use crate::task_source::TaskSourceName; +use encoding_rs::UTF_8; +use hyper_serde::Serde; +use ipc_channel::ipc; +use ipc_channel::router::ROUTER; +use js::glue::{AppendToAutoObjectVector, CreateAutoObjectVector}; +use js::jsapi::Handle as RawHandle; +use js::jsapi::HandleObject; +use js::jsapi::HandleValue as RawHandleValue; +use js::jsapi::{AutoObjectVector, JSAutoRealm, JSObject, JSString}; +use js::jsapi::{GetModuleResolveHook, JSRuntime, SetModuleResolveHook}; +use js::jsapi::{GetRequestedModules, SetModuleMetadataHook}; +use js::jsapi::{GetWaitForAllPromise, ModuleEvaluate, ModuleInstantiate, SourceText}; +use js::jsapi::{Heap, JSContext, JS_ClearPendingException, SetModulePrivate}; +use js::jsapi::{SetModuleDynamicImportHook, SetScriptPrivateReferenceHooks}; +use js::jsval::{JSVal, PrivateValue, UndefinedValue}; +use js::rust::jsapi_wrapped::{CompileModule, JS_GetArrayLength, JS_GetElement}; +use js::rust::jsapi_wrapped::{GetRequestedModuleSpecifier, JS_GetPendingException}; +use js::rust::wrappers::JS_SetPendingException; +use js::rust::CompileOptionsWrapper; +use js::rust::IntoHandle; +use js::rust::{Handle, HandleValue}; +use net_traits::request::{CredentialsMode, Destination, ParserMetadata}; +use net_traits::request::{Referrer, RequestBuilder, RequestMode}; +use net_traits::{FetchMetadata, Metadata}; +use net_traits::{FetchResponseListener, NetworkError}; +use net_traits::{ResourceFetchTiming, ResourceTimingType}; +use servo_url::ServoUrl; +use std::cmp::Ordering; +use std::collections::{HashMap, HashSet}; +use std::ffi; +use std::marker::PhantomData; +use std::ptr; +use std::rc::Rc; +use std::sync::{Arc, Mutex}; +use url::ParseError as UrlParseError; + +use indexmap::IndexSet; + +pub fn get_source_text(source: &[u16]) -> SourceText<u16> { + SourceText { + units_: source.as_ptr() as *const _, + length_: source.len() as u32, + ownsUnits_: false, + _phantom_0: PhantomData, + } +} + +#[allow(unsafe_code)] +unsafe fn gen_type_error(global: &GlobalScope, string: String) -> ModuleError { + rooted!(in(*global.get_cx()) let mut thrown = UndefinedValue()); + Error::Type(string).to_jsval(*global.get_cx(), &global, thrown.handle_mut()); + + return ModuleError::RawException(RootedTraceableBox::from_box(Heap::boxed(thrown.get()))); +} + +#[derive(JSTraceable)] +pub struct ModuleObject(Box<Heap<*mut JSObject>>); + +impl ModuleObject { + #[allow(unsafe_code)] + pub fn handle(&self) -> HandleObject { + unsafe { self.0.handle() } + } +} + +#[derive(JSTraceable)] +pub enum ModuleError { + Network(NetworkError), + RawException(RootedTraceableBox<Heap<JSVal>>), +} + +impl Eq for ModuleError {} + +impl PartialEq for ModuleError { + fn eq(&self, other: &Self) -> bool { + match (self, other) { + (Self::Network(_), Self::RawException(_)) | + (Self::RawException(_), Self::Network(_)) => false, + _ => true, + } + } +} + +impl Ord for ModuleError { + fn cmp(&self, other: &Self) -> Ordering { + match (self, other) { + (Self::Network(_), Self::RawException(_)) => Ordering::Greater, + (Self::RawException(_), Self::Network(_)) => Ordering::Less, + _ => Ordering::Equal, + } + } +} + +impl PartialOrd for ModuleError { + fn partial_cmp(&self, other: &Self) -> Option<Ordering> { + Some(self.cmp(other)) + } +} + +impl ModuleError { + #[allow(unsafe_code)] + pub fn handle(&self) -> Handle<JSVal> { + match self { + Self::Network(_) => unreachable!(), + Self::RawException(exception) => exception.handle(), + } + } +} + +impl Clone for ModuleError { + fn clone(&self) -> Self { + match self { + Self::Network(network_error) => Self::Network(network_error.clone()), + Self::RawException(exception) => Self::RawException(RootedTraceableBox::from_box( + Heap::boxed(exception.get().clone()), + )), + } + } +} + +struct ModuleScript { + base_url: ServoUrl, +} + +#[derive(JSTraceable)] +pub struct ModuleTree { + url: ServoUrl, + text: DomRefCell<DOMString>, + record: DomRefCell<Option<ModuleObject>>, + status: DomRefCell<ModuleStatus>, + // The spec maintains load order for descendants, so we use an indexset for descendants and + // parents. This isn't actually necessary for parents however the IndexSet APIs don't + // interop with HashSet, and IndexSet isn't very expensive + // (https://github.com/bluss/indexmap/issues/110) + // + // By default all maps in web specs are ordered maps + // (https://infra.spec.whatwg.org/#ordered-map), however we can usually get away with using + // stdlib maps and sets because we rarely iterate over them. + parent_urls: DomRefCell<IndexSet<ServoUrl>>, + descendant_urls: DomRefCell<IndexSet<ServoUrl>>, + visited_urls: DomRefCell<HashSet<ServoUrl>>, + error: DomRefCell<Option<ModuleError>>, + promise: DomRefCell<Option<Rc<Promise>>>, +} + +impl ModuleTree { + pub fn new(url: ServoUrl) -> Self { + ModuleTree { + url, + text: DomRefCell::new(DOMString::new()), + record: DomRefCell::new(None), + status: DomRefCell::new(ModuleStatus::Initial), + parent_urls: DomRefCell::new(IndexSet::new()), + descendant_urls: DomRefCell::new(IndexSet::new()), + visited_urls: DomRefCell::new(HashSet::new()), + error: DomRefCell::new(None), + promise: DomRefCell::new(None), + } + } + + pub fn get_promise(&self) -> &DomRefCell<Option<Rc<Promise>>> { + &self.promise + } + + pub fn set_promise(&self, promise: Rc<Promise>) { + *self.promise.borrow_mut() = Some(promise); + } + + pub fn get_status(&self) -> ModuleStatus { + self.status.borrow().clone() + } + + pub fn set_status(&self, status: ModuleStatus) { + *self.status.borrow_mut() = status; + } + + pub fn get_record(&self) -> &DomRefCell<Option<ModuleObject>> { + &self.record + } + + pub fn set_record(&self, record: ModuleObject) { + *self.record.borrow_mut() = Some(record); + } + + pub fn get_error(&self) -> &DomRefCell<Option<ModuleError>> { + &self.error + } + + pub fn set_error(&self, error: Option<ModuleError>) { + *self.error.borrow_mut() = error; + } + + pub fn get_text(&self) -> &DomRefCell<DOMString> { + &self.text + } + + pub fn set_text(&self, module_text: DOMString) { + *self.text.borrow_mut() = module_text; + } + + pub fn get_parent_urls(&self) -> &DomRefCell<IndexSet<ServoUrl>> { + &self.parent_urls + } + + pub fn insert_parent_url(&self, parent_url: ServoUrl) { + self.parent_urls.borrow_mut().insert(parent_url); + } + + pub fn append_parent_urls(&self, parent_urls: IndexSet<ServoUrl>) { + self.parent_urls.borrow_mut().extend(parent_urls); + } + + pub fn get_descendant_urls(&self) -> &DomRefCell<IndexSet<ServoUrl>> { + &self.descendant_urls + } + + pub fn append_descendant_urls(&self, descendant_urls: IndexSet<ServoUrl>) { + self.descendant_urls.borrow_mut().extend(descendant_urls); + } + + /// recursively checks if all of the transitive descendants are + /// in the FetchingDescendants or later status + fn recursive_check_descendants( + module_tree: &ModuleTree, + module_map: &HashMap<ServoUrl, Rc<ModuleTree>>, + discovered_urls: &mut HashSet<ServoUrl>, + ) -> bool { + discovered_urls.insert(module_tree.url.clone()); + + let descendant_urls = module_tree.descendant_urls.borrow(); + + for descendant_module in descendant_urls + .iter() + .filter_map(|url| module_map.get(&url.clone())) + { + if discovered_urls.contains(&descendant_module.url) { + continue; + } + + let descendant_status = descendant_module.get_status(); + if descendant_status < ModuleStatus::FetchingDescendants { + return false; + } + + let all_ready_descendants = ModuleTree::recursive_check_descendants( + &descendant_module, + module_map, + discovered_urls, + ); + + if !all_ready_descendants { + return false; + } + } + + return true; + } + + fn has_all_ready_descendants(&self, module_map: &HashMap<ServoUrl, Rc<ModuleTree>>) -> bool { + let mut discovered_urls = HashSet::new(); + + return ModuleTree::recursive_check_descendants(&self, module_map, &mut discovered_urls); + } + + pub fn get_visited_urls(&self) -> &DomRefCell<HashSet<ServoUrl>> { + &self.visited_urls + } + + pub fn append_handler(&self, owner: ModuleOwner, module_url: ServoUrl, is_top_level: bool) { + let promise = self.promise.borrow(); + + let resolve_this = owner.clone(); + let reject_this = owner.clone(); + + let resolved_url = module_url.clone(); + let rejected_url = module_url.clone(); + + let handler = PromiseNativeHandler::new( + &owner.global(), + Some(ModuleHandler::new(Box::new( + task!(fetched_resolve: move || { + resolve_this.finish_module_load(Some(resolved_url), is_top_level); + }), + ))), + Some(ModuleHandler::new(Box::new( + task!(failure_reject: move || { + reject_this.finish_module_load(Some(rejected_url), is_top_level); + }), + ))), + ); + + let _compartment = enter_realm(&*owner.global()); + AlreadyInCompartment::assert(&*owner.global()); + let _ais = AutoIncumbentScript::new(&*owner.global()); + + let promise = promise.as_ref().unwrap(); + + promise.append_native_handler(&handler); + } +} + +#[derive(Clone, Copy, Debug, JSTraceable, PartialEq, PartialOrd)] +pub enum ModuleStatus { + Initial, + Fetching, + FetchingDescendants, + FetchFailed, + Ready, + Finished, +} + +impl ModuleTree { + #[allow(unsafe_code)] + /// https://html.spec.whatwg.org/multipage/#creating-a-module-script + /// Step 7-11. + fn compile_module_script( + &self, + global: &GlobalScope, + module_script_text: DOMString, + url: ServoUrl, + ) -> Result<ModuleObject, ModuleError> { + let module: Vec<u16> = module_script_text.encode_utf16().collect(); + + let url_cstr = ffi::CString::new(url.as_str().as_bytes()).unwrap(); + + let _ac = JSAutoRealm::new(*global.get_cx(), *global.reflector().get_jsobject()); + + let compile_options = CompileOptionsWrapper::new(*global.get_cx(), url_cstr.as_ptr(), 1); + + rooted!(in(*global.get_cx()) let mut module_script = ptr::null_mut::<JSObject>()); + + let mut source = get_source_text(&module); + + unsafe { + if !CompileModule( + *global.get_cx(), + compile_options.ptr, + &mut source, + &mut module_script.handle_mut(), + ) { + warn!("fail to compile module script of {}", url); + + rooted!(in(*global.get_cx()) let mut exception = UndefinedValue()); + assert!(JS_GetPendingException( + *global.get_cx(), + &mut exception.handle_mut() + )); + JS_ClearPendingException(*global.get_cx()); + + return Err(ModuleError::RawException(RootedTraceableBox::from_box( + Heap::boxed(exception.get()), + ))); + } + + let module_script_data = Box::new(ModuleScript { + base_url: url.clone(), + }); + + SetModulePrivate( + module_script.get(), + &PrivateValue(Box::into_raw(module_script_data) as *const _), + ); + } + + debug!("module script of {} compile done", url); + + self.resolve_requested_module_specifiers( + &global, + module_script.handle().into_handle(), + url.clone(), + ) + .map(|_| ModuleObject(Heap::boxed(*module_script))) + } + + #[allow(unsafe_code)] + pub fn instantiate_module_tree( + &self, + global: &GlobalScope, + module_record: HandleObject, + ) -> Result<(), ModuleError> { + let _ac = JSAutoRealm::new(*global.get_cx(), *global.reflector().get_jsobject()); + + unsafe { + if !ModuleInstantiate(*global.get_cx(), module_record) { + warn!("fail to instantiate module"); + + rooted!(in(*global.get_cx()) let mut exception = UndefinedValue()); + assert!(JS_GetPendingException( + *global.get_cx(), + &mut exception.handle_mut() + )); + JS_ClearPendingException(*global.get_cx()); + + Err(ModuleError::RawException(RootedTraceableBox::from_box( + Heap::boxed(exception.get()), + ))) + } else { + debug!("module instantiated successfully"); + + Ok(()) + } + } + } + + #[allow(unsafe_code)] + pub fn execute_module( + &self, + global: &GlobalScope, + module_record: HandleObject, + ) -> Result<(), ModuleError> { + let _ac = JSAutoRealm::new(*global.get_cx(), *global.reflector().get_jsobject()); + + unsafe { + if !ModuleEvaluate(*global.get_cx(), module_record) { + warn!("fail to evaluate module"); + + rooted!(in(*global.get_cx()) let mut exception = UndefinedValue()); + assert!(JS_GetPendingException( + *global.get_cx(), + &mut exception.handle_mut() + )); + JS_ClearPendingException(*global.get_cx()); + + Err(ModuleError::RawException(RootedTraceableBox::from_box( + Heap::boxed(exception.get()), + ))) + } else { + debug!("module evaluated successfully"); + Ok(()) + } + } + } + + #[allow(unsafe_code)] + pub fn report_error(&self, global: &GlobalScope) { + let module_error = self.error.borrow(); + + if let Some(exception) = &*module_error { + unsafe { + JS_SetPendingException(*global.get_cx(), exception.handle()); + report_pending_exception(*global.get_cx(), true); + } + } + } + + /// https://html.spec.whatwg.org/multipage/#fetch-the-descendants-of-a-module-script + /// Step 5. + pub fn resolve_requested_modules( + &self, + global: &GlobalScope, + ) -> Result<IndexSet<ServoUrl>, ModuleError> { + let status = self.get_status(); + + assert_ne!(status, ModuleStatus::Initial); + assert_ne!(status, ModuleStatus::Fetching); + + let record = self.record.borrow(); + + if let Some(raw_record) = &*record { + let valid_specifier_urls = self.resolve_requested_module_specifiers( + &global, + raw_record.handle(), + self.url.clone(), + ); + + return valid_specifier_urls.map(|parsed_urls| { + parsed_urls + .iter() + .filter_map(|parsed_url| { + let mut visited = self.visited_urls.borrow_mut(); + + if !visited.contains(&parsed_url) { + visited.insert(parsed_url.clone()); + + Some(parsed_url.clone()) + } else { + None + } + }) + .collect::<IndexSet<ServoUrl>>() + }); + } + + unreachable!("Didn't have record while resolving its requested module") + } + + #[allow(unsafe_code)] + fn resolve_requested_module_specifiers( + &self, + global: &GlobalScope, + module_object: HandleObject, + base_url: ServoUrl, + ) -> Result<IndexSet<ServoUrl>, ModuleError> { + let _ac = JSAutoRealm::new(*global.get_cx(), *global.reflector().get_jsobject()); + + let mut specifier_urls = IndexSet::new(); + + unsafe { + rooted!(in(*global.get_cx()) let requested_modules = GetRequestedModules(*global.get_cx(), module_object)); + + let mut length = 0; + + if !JS_GetArrayLength(*global.get_cx(), requested_modules.handle(), &mut length) { + let module_length_error = + gen_type_error(&global, "Wrong length of requested modules".to_owned()); + + return Err(module_length_error); + } + + for index in 0..length { + rooted!(in(*global.get_cx()) let mut element = UndefinedValue()); + + if !JS_GetElement( + *global.get_cx(), + requested_modules.handle(), + index, + &mut element.handle_mut(), + ) { + let get_element_error = + gen_type_error(&global, "Failed to get requested module".to_owned()); + + return Err(get_element_error); + } + + rooted!(in(*global.get_cx()) let specifier = GetRequestedModuleSpecifier( + *global.get_cx(), element.handle() + )); + + let url = ModuleTree::resolve_module_specifier( + *global.get_cx(), + &base_url, + specifier.handle().into_handle(), + ); + + if url.is_err() { + let specifier_error = + gen_type_error(&global, "Wrong module specifier".to_owned()); + + return Err(specifier_error); + } + + specifier_urls.insert(url.unwrap()); + } + } + + Ok(specifier_urls) + } + + /// The following module specifiers are allowed by the spec: + /// - a valid absolute URL + /// - a valid relative URL that starts with "/", "./" or "../" + /// + /// Bareword module specifiers are currently disallowed as these may be given + /// special meanings in the future. + /// https://html.spec.whatwg.org/multipage/#resolve-a-module-specifier + #[allow(unsafe_code)] + fn resolve_module_specifier( + cx: *mut JSContext, + url: &ServoUrl, + specifier: RawHandle<*mut JSString>, + ) -> Result<ServoUrl, UrlParseError> { + let specifier_str = unsafe { jsstring_to_str(cx, *specifier) }; + + // Step 1. + if let Ok(specifier_url) = ServoUrl::parse(&specifier_str) { + return Ok(specifier_url); + } + + // Step 2. + if !specifier_str.starts_with("/") && + !specifier_str.starts_with("./") && + !specifier_str.starts_with("../") + { + return Err(UrlParseError::InvalidDomainCharacter); + } + + // Step 3. + return ServoUrl::parse_with_base(Some(url), &specifier_str.clone()); + } + + /// https://html.spec.whatwg.org/multipage/#finding-the-first-parse-error + fn find_first_parse_error( + global: &GlobalScope, + module_tree: &ModuleTree, + discovered_urls: &mut HashSet<ServoUrl>, + ) -> Option<ModuleError> { + // 3. + discovered_urls.insert(module_tree.url.clone()); + + // 4. + let module_map = global.get_module_map().borrow(); + let record = module_tree.get_record().borrow(); + if record.is_none() { + let module_error = module_tree.get_error().borrow(); + + return module_error.clone(); + } + + // 5-6. + let descendant_urls = module_tree.get_descendant_urls().borrow(); + + for descendant_module in descendant_urls + .iter() + // 7. + .filter_map(|url| module_map.get(&url.clone())) + { + // 8-2. + if discovered_urls.contains(&descendant_module.url) { + continue; + } + + // 8-3. + let child_parse_error = + ModuleTree::find_first_parse_error(&global, &descendant_module, discovered_urls); + + // 8-4. + if child_parse_error.is_some() { + return child_parse_error; + } + } + + // Step 9. + return None; + } +} + +#[derive(JSTraceable, MallocSizeOf)] +struct ModuleHandler { + #[ignore_malloc_size_of = "Measuring trait objects is hard"] + task: DomRefCell<Option<Box<dyn TaskBox>>>, +} + +impl ModuleHandler { + pub fn new(task: Box<dyn TaskBox>) -> Box<dyn Callback> { + Box::new(Self { + task: DomRefCell::new(Some(task)), + }) + } +} + +impl Callback for ModuleHandler { + fn callback(&self, _cx: *mut JSContext, _v: HandleValue) { + let task = self.task.borrow_mut().take().unwrap(); + task.run_box(); + } +} + +/// The owner of the module +/// It can be `worker` or `script` element +#[derive(Clone)] +pub enum ModuleOwner { + #[allow(dead_code)] + Worker(TrustedWorkerAddress), + Window(Trusted<HTMLScriptElement>), +} + +impl ModuleOwner { + pub fn global(&self) -> DomRoot<GlobalScope> { + match &self { + ModuleOwner::Worker(worker) => (*worker.root().clone()).global(), + ModuleOwner::Window(script) => (*script.root()).global(), + } + } + + fn gen_promise_with_final_handler( + &self, + module_url: Option<ServoUrl>, + is_top_level: bool, + ) -> Rc<Promise> { + let resolve_this = self.clone(); + let reject_this = self.clone(); + + let resolved_url = module_url.clone(); + let rejected_url = module_url.clone(); + + let handler = PromiseNativeHandler::new( + &self.global(), + Some(ModuleHandler::new(Box::new( + task!(fetched_resolve: move || { + resolve_this.finish_module_load(resolved_url, is_top_level); + }), + ))), + Some(ModuleHandler::new(Box::new( + task!(failure_reject: move || { + reject_this.finish_module_load(rejected_url, is_top_level); + }), + ))), + ); + + let compartment = enter_realm(&*self.global()); + let comp = InCompartment::Entered(&compartment); + let _ais = AutoIncumbentScript::new(&*self.global()); + + let promise = Promise::new_in_current_compartment(&self.global(), comp); + + promise.append_native_handler(&handler); + + promise + } + + /// https://html.spec.whatwg.org/multipage/#fetch-the-descendants-of-and-link-a-module-script + /// step 4-7. + pub fn finish_module_load(&self, module_url: Option<ServoUrl>, is_top_level: bool) { + match &self { + ModuleOwner::Worker(_) => unimplemented!(), + ModuleOwner::Window(script) => { + let global = self.global(); + + let document = document_from_node(&*script.root()); + + let module_map = global.get_module_map().borrow(); + + let (module_tree, mut load) = if let Some(script_src) = module_url.clone() { + let module_tree = module_map.get(&script_src.clone()).unwrap().clone(); + + let load = Ok(ScriptOrigin::external( + module_tree.get_text().borrow().clone(), + script_src.clone(), + ScriptType::Module, + )); + + debug!( + "Going to finish external script from {}", + script_src.clone() + ); + + (module_tree, load) + } else { + let module_tree = { + let inline_module_map = global.get_inline_module_map().borrow(); + inline_module_map + .get(&script.root().get_script_id()) + .unwrap() + .clone() + }; + + let base_url = document.base_url(); + + let load = Ok(ScriptOrigin::internal( + module_tree.get_text().borrow().clone(), + base_url.clone(), + ScriptType::Module, + )); + + debug!("Going to finish internal script from {}", base_url.clone()); + + (module_tree, load) + }; + + module_tree.set_status(ModuleStatus::Finished); + + if !module_tree.has_all_ready_descendants(&module_map) { + return; + } + + let parent_urls = module_tree.get_parent_urls().borrow(); + let parent_all_ready = parent_urls + .iter() + .filter_map(|parent_url| module_map.get(&parent_url.clone())) + .all(|parent_tree| parent_tree.has_all_ready_descendants(&module_map)); + + if !parent_all_ready { + return; + } + + parent_urls + .iter() + .filter_map(|parent_url| module_map.get(&parent_url.clone())) + .for_each(|parent_tree| { + let parent_promise = parent_tree.get_promise().borrow(); + if let Some(promise) = parent_promise.as_ref() { + promise.resolve_native(&()); + } + }); + + let mut discovered_urls: HashSet<ServoUrl> = HashSet::new(); + let module_error = + ModuleTree::find_first_parse_error(&global, &module_tree, &mut discovered_urls); + + match module_error { + None => { + let module_record = module_tree.get_record().borrow(); + if let Some(record) = &*module_record { + let instantiated = + module_tree.instantiate_module_tree(&global, record.handle()); + + if let Err(exception) = instantiated { + module_tree.set_error(Some(exception.clone())); + } + } + }, + Some(ModuleError::RawException(exception)) => { + module_tree.set_error(Some(ModuleError::RawException(exception))); + }, + Some(ModuleError::Network(network_error)) => { + module_tree.set_error(Some(ModuleError::Network(network_error.clone()))); + + // Change the `result` load of the script into `network` error + load = Err(network_error); + }, + }; + + if is_top_level { + let r#async = script + .root() + .upcast::<Element>() + .has_attribute(&local_name!("async")); + + if !r#async && (&*script.root()).get_parser_inserted() { + document.deferred_script_loaded(&*script.root(), load); + } else if !r#async && !(&*script.root()).get_non_blocking() { + document.asap_in_order_script_loaded(&*script.root(), load); + } else { + document.asap_script_loaded(&*script.root(), load); + }; + } + }, + } + } +} + +/// The context required for asynchronously loading an external module script source. +struct ModuleContext { + /// The owner of the module that initiated the request. + owner: ModuleOwner, + /// The response body received to date. + data: Vec<u8>, + /// The response metadata received to date. + metadata: Option<Metadata>, + /// The initial URL requested. + url: ServoUrl, + /// Destination of current module context + destination: Destination, + /// Credentials Mode of current module context + credentials_mode: CredentialsMode, + /// Indicates whether the request failed, and why + status: Result<(), NetworkError>, + /// Timing object for this resource + resource_timing: ResourceFetchTiming, +} + +impl FetchResponseListener for ModuleContext { + fn process_request_body(&mut self) {} // TODO(cybai): Perhaps add custom steps to perform fetch here? + + fn process_request_eof(&mut self) {} // TODO(cybai): Perhaps add custom steps to perform fetch here? + + fn process_response(&mut self, metadata: Result<FetchMetadata, NetworkError>) { + self.metadata = metadata.ok().map(|meta| match meta { + FetchMetadata::Unfiltered(m) => m, + FetchMetadata::Filtered { unsafe_, .. } => unsafe_, + }); + + let status_code = self + .metadata + .as_ref() + .and_then(|m| match m.status { + Some((c, _)) => Some(c), + _ => None, + }) + .unwrap_or(0); + + self.status = match status_code { + 0 => Err(NetworkError::Internal( + "No http status code received".to_owned(), + )), + 200..=299 => Ok(()), // HTTP ok status codes + _ => Err(NetworkError::Internal(format!( + "HTTP error code {}", + status_code + ))), + }; + } + + fn process_response_chunk(&mut self, mut chunk: Vec<u8>) { + if self.status.is_ok() { + self.data.append(&mut chunk); + } + } + + /// <https://html.spec.whatwg.org/multipage/#fetch-a-single-module-script> + /// Step 9-12 + #[allow(unsafe_code)] + fn process_response_eof(&mut self, response: Result<ResourceFetchTiming, NetworkError>) { + let global = self.owner.global(); + + if let Some(window) = global.downcast::<Window>() { + window + .Document() + .finish_load(LoadType::Script(self.url.clone())); + } + + // Step 9-1 & 9-2. + let load = response.and(self.status.clone()).and_then(|_| { + // Step 9-3. + let meta = self.metadata.take().unwrap(); + + if let Some(content_type) = meta.content_type.map(Serde::into_inner) { + let c = content_type.to_string(); + // The MIME crate includes params (e.g. charset=utf8) in the to_string + // https://github.com/hyperium/mime/issues/120 + if let Some(ty) = c.split(';').next() { + if !SCRIPT_JS_MIMES.contains(&ty) { + return Err(NetworkError::Internal(format!("Invalid MIME type: {}", ty))); + } + } else { + return Err(NetworkError::Internal("Empty MIME type".into())); + } + } else { + return Err(NetworkError::Internal("No MIME type".into())); + } + + // Step 10. + let (source_text, _, _) = UTF_8.decode(&self.data); + Ok(ScriptOrigin::external( + DOMString::from(source_text), + meta.final_url, + ScriptType::Module, + )) + }); + + if let Err(err) = load { + // Step 9. + error!("Failed to fetch {} with error {:?}", self.url.clone(), err); + let module_tree = { + let module_map = global.get_module_map().borrow(); + module_map.get(&self.url.clone()).unwrap().clone() + }; + + module_tree.set_status(ModuleStatus::FetchFailed); + + module_tree.set_error(Some(ModuleError::Network(err))); + + let promise = module_tree.get_promise().borrow(); + promise.as_ref().unwrap().resolve_native(&()); + + return; + } + + // Step 12. + if let Ok(ref resp_mod_script) = load { + let module_tree = { + let module_map = global.get_module_map().borrow(); + module_map.get(&self.url.clone()).unwrap().clone() + }; + + module_tree.set_text(resp_mod_script.text()); + + let compiled_module = module_tree.compile_module_script( + &global, + resp_mod_script.text(), + self.url.clone(), + ); + + match compiled_module { + Err(exception) => { + module_tree.set_error(Some(exception)); + + let promise = module_tree.get_promise().borrow(); + promise.as_ref().unwrap().resolve_native(&()); + + return; + }, + Ok(record) => { + module_tree.set_record(record); + + { + let mut visited = module_tree.get_visited_urls().borrow_mut(); + visited.insert(self.url.clone()); + } + + let descendant_results = fetch_module_descendants_and_link( + &self.owner, + &module_tree, + self.destination.clone(), + self.credentials_mode.clone(), + ); + + // Resolve the request of this module tree promise directly + // when there's no descendant + if descendant_results.is_none() { + module_tree.set_status(ModuleStatus::Ready); + + let promise = module_tree.get_promise().borrow(); + promise.as_ref().unwrap().resolve_native(&()); + } + }, + } + } + } + + fn resource_timing_mut(&mut self) -> &mut ResourceFetchTiming { + &mut self.resource_timing + } + + fn resource_timing(&self) -> &ResourceFetchTiming { + &self.resource_timing + } + + fn submit_resource_timing(&mut self) { + network_listener::submit_timing(self) + } +} + +impl ResourceTimingListener for ModuleContext { + fn resource_timing_information(&self) -> (InitiatorType, ServoUrl) { + let initiator_type = InitiatorType::LocalName("module".to_string()); + (initiator_type, self.url.clone()) + } + + fn resource_timing_global(&self) -> DomRoot<GlobalScope> { + self.owner.global() + } +} + +impl PreInvoke for ModuleContext {} + +#[allow(unsafe_code)] +/// A function to register module hooks (e.g. listening on resolving modules, +/// getting module metadata, getting script private reference and resolving dynamic import) +pub unsafe fn EnsureModuleHooksInitialized(rt: *mut JSRuntime) { + if GetModuleResolveHook(rt).is_some() { + return; + } + + SetModuleResolveHook(rt, Some(HostResolveImportedModule)); + SetModuleMetadataHook(rt, None); + SetScriptPrivateReferenceHooks(rt, None, None); + + SetModuleDynamicImportHook(rt, None); +} + +#[allow(unsafe_code)] +/// https://tc39.github.io/ecma262/#sec-hostresolveimportedmodule +/// https://html.spec.whatwg.org/multipage/#hostresolveimportedmodule(referencingscriptormodule%2C-specifier) +unsafe extern "C" fn HostResolveImportedModule( + cx: *mut JSContext, + reference_private: RawHandleValue, + specifier: RawHandle<*mut JSString>, +) -> *mut JSObject { + let global_scope = GlobalScope::from_context(cx); + + // Step 2. + let mut base_url = global_scope.api_base_url(); + + // Step 3. + let module_data = (reference_private.to_private() as *const ModuleScript).as_ref(); + if let Some(data) = module_data { + base_url = data.base_url.clone(); + } + + // Step 5. + let url = ModuleTree::resolve_module_specifier(*global_scope.get_cx(), &base_url, specifier); + + // Step 6. + assert!(url.is_ok()); + + let parsed_url = url.unwrap(); + + // Step 4 & 7. + let module_map = global_scope.get_module_map().borrow(); + + let module_tree = module_map.get(&parsed_url); + + // Step 9. + assert!(module_tree.is_some()); + + let fetched_module_object = module_tree.unwrap().get_record().borrow(); + + // Step 8. + assert!(fetched_module_object.is_some()); + + // Step 10. + if let Some(record) = &*fetched_module_object { + return record.handle().get(); + } + + unreachable!() +} + +/// https://html.spec.whatwg.org/multipage/#fetch-a-module-script-tree +pub fn fetch_external_module_script( + owner: ModuleOwner, + url: ServoUrl, + destination: Destination, + integrity_metadata: String, + credentials_mode: CredentialsMode, +) -> Rc<Promise> { + // Step 1. + fetch_single_module_script( + owner, + url, + destination, + Referrer::Client, + ParserMetadata::NotParserInserted, + integrity_metadata, + credentials_mode, + None, + true, + ) +} + +/// https://html.spec.whatwg.org/multipage/#fetch-a-single-module-script +pub fn fetch_single_module_script( + owner: ModuleOwner, + url: ServoUrl, + destination: Destination, + referrer: Referrer, + parser_metadata: ParserMetadata, + integrity_metadata: String, + credentials_mode: CredentialsMode, + parent_url: Option<ServoUrl>, + top_level_module_fetch: bool, +) -> Rc<Promise> { + { + // Step 1. + let global = owner.global(); + let module_map = global.get_module_map().borrow(); + + debug!("Start to fetch {}", url); + + if let Some(module_tree) = module_map.get(&url.clone()) { + let status = module_tree.get_status(); + + let promise = module_tree.get_promise().borrow(); + + debug!("Meet a fetched url {} and its status is {:?}", url, status); + + assert!(promise.is_some()); + + module_tree.append_handler(owner.clone(), url.clone(), top_level_module_fetch); + + let promise = promise.as_ref().unwrap(); + + match status { + ModuleStatus::Initial => unreachable!( + "We have the module in module map so its status should not be `initial`" + ), + // Step 2. + ModuleStatus::Fetching => return promise.clone(), + ModuleStatus::FetchingDescendants => { + if module_tree.has_all_ready_descendants(&module_map) { + promise.resolve_native(&()); + } + }, + // Step 3. + ModuleStatus::FetchFailed | ModuleStatus::Ready | ModuleStatus::Finished => { + promise.resolve_native(&()); + }, + } + + return promise.clone(); + } + } + + let global = owner.global(); + + let module_tree = ModuleTree::new(url.clone()); + module_tree.set_status(ModuleStatus::Fetching); + + let promise = owner.gen_promise_with_final_handler(Some(url.clone()), top_level_module_fetch); + + module_tree.set_promise(promise.clone()); + if let Some(parent_url) = parent_url { + module_tree.insert_parent_url(parent_url); + } + + // Step 4. + global.set_module_map(url.clone(), module_tree); + + // Step 5-6. + let mode = match destination.clone() { + Destination::Worker | Destination::SharedWorker if top_level_module_fetch => { + RequestMode::SameOrigin + }, + _ => RequestMode::CorsMode, + }; + + let document: Option<DomRoot<Document>> = match &owner { + ModuleOwner::Worker(_) => None, + ModuleOwner::Window(script) => Some(document_from_node(&*script.root())), + }; + + // Step 7-8. + let request = RequestBuilder::new(url.clone()) + .destination(destination.clone()) + .origin(global.origin().immutable().clone()) + .referrer(Some(referrer)) + .parser_metadata(parser_metadata) + .integrity_metadata(integrity_metadata.clone()) + .credentials_mode(credentials_mode) + .mode(mode); + + let context = Arc::new(Mutex::new(ModuleContext { + owner, + data: vec![], + metadata: None, + url: url.clone(), + destination: destination.clone(), + credentials_mode: credentials_mode.clone(), + status: Ok(()), + resource_timing: ResourceFetchTiming::new(ResourceTimingType::Resource), + })); + + let (action_sender, action_receiver) = ipc::channel().unwrap(); + + let listener = NetworkListener { + context, + task_source: global.networking_task_source(), + canceller: Some(global.task_canceller(TaskSourceName::Networking)), + }; + + ROUTER.add_route( + action_receiver.to_opaque(), + Box::new(move |message| { + listener.notify_fetch(message.to().unwrap()); + }), + ); + + if let Some(doc) = document { + doc.fetch_async(LoadType::Script(url), request, action_sender); + } + + promise +} + +#[allow(unsafe_code)] +/// https://html.spec.whatwg.org/multipage/#fetch-an-inline-module-script-graph +pub fn fetch_inline_module_script( + owner: ModuleOwner, + module_script_text: DOMString, + url: ServoUrl, + script_id: ScriptId, + credentials_mode: CredentialsMode, +) { + let global = owner.global(); + + let module_tree = ModuleTree::new(url.clone()); + + let promise = owner.gen_promise_with_final_handler(None, true); + + module_tree.set_promise(promise.clone()); + + let compiled_module = + module_tree.compile_module_script(&global, module_script_text, url.clone()); + + match compiled_module { + Ok(record) => { + module_tree.set_record(record); + + let descendant_results = fetch_module_descendants_and_link( + &owner, + &module_tree, + Destination::Script, + credentials_mode, + ); + + global.set_inline_module_map(script_id, module_tree); + + if descendant_results.is_none() { + promise.resolve_native(&()); + } + }, + Err(exception) => { + module_tree.set_status(ModuleStatus::Ready); + module_tree.set_error(Some(exception)); + global.set_inline_module_map(script_id, module_tree); + promise.resolve_native(&()); + }, + } +} + +/// https://html.spec.whatwg.org/multipage/#fetch-the-descendants-of-and-link-a-module-script +/// Step 1-3. +#[allow(unsafe_code)] +fn fetch_module_descendants_and_link( + owner: &ModuleOwner, + module_tree: &ModuleTree, + destination: Destination, + credentials_mode: CredentialsMode, +) -> Option<Rc<Promise>> { + let descendant_results = + fetch_module_descendants(owner, module_tree, destination, credentials_mode); + + match descendant_results { + Ok(descendants) => { + if descendants.len() > 0 { + unsafe { + let global = owner.global(); + + let _compartment = enter_realm(&*global); + AlreadyInCompartment::assert(&*global); + let _ais = AutoIncumbentScript::new(&*global); + + let abv = CreateAutoObjectVector(*global.get_cx()); + + for descendant in descendants { + assert!(AppendToAutoObjectVector( + abv as *mut AutoObjectVector, + descendant.promise_obj().get() + )); + } + + rooted!(in(*global.get_cx()) let raw_promise_all = GetWaitForAllPromise(*global.get_cx(), abv)); + + let promise_all = + Promise::new_with_js_promise(raw_promise_all.handle(), global.get_cx()); + + let promise = module_tree.get_promise().borrow(); + let promise = promise.as_ref().unwrap().clone(); + + let resolve_promise = TrustedPromise::new(promise.clone()); + let reject_promise = TrustedPromise::new(promise.clone()); + + let handler = PromiseNativeHandler::new( + &global, + Some(ModuleHandler::new(Box::new( + task!(all_fetched_resolve: move || { + let promise = resolve_promise.root(); + promise.resolve_native(&()); + }), + ))), + Some(ModuleHandler::new(Box::new( + task!(all_failure_reject: move || { + let promise = reject_promise.root(); + promise.reject_native(&()); + }), + ))), + ); + + promise_all.append_native_handler(&handler); + + return Some(promise_all); + } + } + }, + Err(err) => { + module_tree.set_error(Some(err)); + }, + } + + None +} + +#[allow(unsafe_code)] +/// https://html.spec.whatwg.org/multipage/#fetch-the-descendants-of-a-module-script +fn fetch_module_descendants( + owner: &ModuleOwner, + module_tree: &ModuleTree, + destination: Destination, + credentials_mode: CredentialsMode, +) -> Result<Vec<Rc<Promise>>, ModuleError> { + debug!("Start to load dependencies of {}", module_tree.url.clone()); + + let global = owner.global(); + + module_tree.set_status(ModuleStatus::FetchingDescendants); + + module_tree + .resolve_requested_modules(&global) + .map(|requested_urls| { + module_tree.append_descendant_urls(requested_urls.clone()); + + let parent_urls = module_tree.get_parent_urls().borrow(); + + if parent_urls.intersection(&requested_urls).count() > 0 { + return Vec::new(); + } + + requested_urls + .iter() + .map(|requested_url| { + // https://html.spec.whatwg.org/multipage/#internal-module-script-graph-fetching-procedure + // Step 1. + { + let visited = module_tree.get_visited_urls().borrow(); + assert!(visited.get(&requested_url).is_some()); + } + + // Step 2. + fetch_single_module_script( + owner.clone(), + requested_url.clone(), + destination.clone(), + Referrer::Client, + ParserMetadata::NotParserInserted, + "".to_owned(), + credentials_mode.clone(), + Some(module_tree.url.clone()), + false, + ) + }) + .collect() + }) +} diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index 3f82e3496e6..284c49312c6 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -30,6 +30,7 @@ use crate::dom::promise::Promise; use crate::dom::promiserejectionevent::PromiseRejectionEvent; use crate::dom::response::Response; use crate::microtask::{EnqueuedPromiseCallback, Microtask, MicrotaskQueue}; +use crate::script_module::EnsureModuleHooksInitialized; use crate::script_thread::trace_thread; use crate::task::TaskBox; use crate::task_source::networking::NetworkingTaskSource; @@ -498,6 +499,8 @@ unsafe fn new_rt_and_cx_with_parent( SetJobQueue(cx, job_queue); SetPromiseRejectionTrackerCallback(cx, Some(promise_rejection_tracker), ptr::null_mut()); + EnsureModuleHooksInitialized(runtime.rt()); + set_gc_zeal_options(cx); // Enable or disable the JITs. diff --git a/components/style/properties/longhands/border.mako.rs b/components/style/properties/longhands/border.mako.rs index 09cbea19a7f..f281fa1a30d 100644 --- a/components/style/properties/longhands/border.mako.rs +++ b/components/style/properties/longhands/border.mako.rs @@ -75,7 +75,7 @@ "BorderCornerRadius", "computed::BorderCornerRadius::zero()", "parse", - engines="gecko servo-2013", + engines="gecko servo-2013 servo-2020", extra_prefixes=prefixes, spec=maybe_logical_spec(corner, "radius"), boxed=True, diff --git a/components/style/properties/shorthands/border.mako.rs b/components/style/properties/shorthands/border.mako.rs index d584e568aed..1f77b905021 100644 --- a/components/style/properties/shorthands/border.mako.rs +++ b/components/style/properties/shorthands/border.mako.rs @@ -239,7 +239,7 @@ pub fn parse_border<'i, 't>( <%helpers:shorthand name="border-radius" - engines="gecko servo-2013" + engines="gecko servo-2013 servo-2020" sub_properties="${' '.join( 'border-%s-radius' % (corner) for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left'] diff --git a/python/servo/command_base.py b/python/servo/command_base.py index ee6ee0e450d..31eb17800ae 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -1033,13 +1033,14 @@ install them, let us know by filing a bug!") print("It looks like rustup is not installed. See instructions at " "https://github.com/servo/servo/#setting-up-your-environment") print() - return 1 + sys.exit(1) raise version = tuple(map(int, re.match(b"rustup (\d+)\.(\d+)\.(\d+)", version_line).groups())) - if version < (1, 21, 0): - print("rustup is at version %s.%s.%s, Servo requires 1.11.0 or more recent." % version) + version_needed = (1, 21, 0) + if version < version_needed: + print("rustup is at version %s.%s.%s, Servo requires %s.%s.%s or more recent." % (version + version_needed)) print("Try running 'rustup self update'.") - return 1 + sys.exit(1) def ensure_clobbered(self, target_dir=None): if target_dir is None: diff --git a/tests/wpt/include.ini b/tests/wpt/include.ini index 2f662095640..f11d0d0baa4 100644 --- a/tests/wpt/include.ini +++ b/tests/wpt/include.ini @@ -116,7 +116,11 @@ skip: true [json-module] skip: true [module] - skip: true + skip: false + [dynamic-import] + skip: true + [import-meta] + skip: true [js] skip: false [mediasession] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 0609c7b29a9..0942f7eec75 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -134637,6 +134637,18 @@ {} ] ], + "css/css-multicol/change-intrinsic-width.html": [ + [ + "css/css-multicol/change-intrinsic-width.html", + [ + [ + "/css/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/css-multicol/column-count-used-001.html": [ [ "css/css-multicol/column-count-used-001.html", @@ -338168,6 +338180,12 @@ {} ] ], + "css/cssom-view/getClientRects-inline-inline-child.html": [ + [ + "css/cssom-view/getClientRects-inline-inline-child.html", + {} + ] + ], "css/cssom-view/historical.html": [ [ "css/cssom-view/historical.html", @@ -588279,6 +588297,10 @@ "434dc52ea3d731bd1393270372294cd007382e59", "testharness" ], + "css/css-multicol/change-intrinsic-width.html": [ + "3df3e1ebc8f9b5780dc858a878bca13dbedcdb35", + "reftest" + ], "css/css-multicol/column-count-used-001.html": [ "2949a1996ebae0c48329906ea7ef34c83080e90f", "reftest" @@ -625603,6 +625625,10 @@ "f1f6fc5abc679d087d221573456eb9219d1a405c", "testharness" ], + "css/cssom-view/getClientRects-inline-inline-child.html": [ + "9a03ccdbccc80d8a0ce6f701aeaa802b1b4715e4", + "testharness" + ], "css/cssom-view/getClientRects-inline.html": [ "415e34a6f0430e08441ee32b3f7c0ca8cd11a692", "reftest" @@ -664512,11 +664538,11 @@ "testharness" ], "html/semantics/forms/constraints/form-validation-validity-valid.html": [ - "cec5dcbf0d5cfb340e100a82e723e1d620d16399", + "03655ffd2f5ba24b30e6864c8393ecbf36230aef", "testharness" ], "html/semantics/forms/constraints/form-validation-validity-valueMissing.html": [ - "3c9e4c4cb096bbe93b540c3f704d0d116a055aba", + "2e1c666436a19bc759026ebf55df4a17073ecb5d", "testharness" ], "html/semantics/forms/constraints/form-validation-willValidate.html": [ @@ -664532,7 +664558,7 @@ "testharness" ], "html/semantics/forms/constraints/support/validator.js": [ - "48c3a5b40e6bbe06b18dde7f473188a827b7de6a", + "33508fb3289be3736f6f467957dc6614bec2bc9b", "support" ], "html/semantics/forms/constraints/tooLong-input-email-delete-manual.html": [ @@ -701572,7 +701598,7 @@ "support" ], "resources/chromium/nfc-mock.js": [ - "4bafc9b0ad8f7f8ad4185914fffef16949695ab3", + "2c1724b7592eb1d6e66177544998abbec70fbfe6", "support" ], "resources/chromium/sensor.mojom.js": [ @@ -717860,7 +717886,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/firefox_android.py": [ - "33b5d51e54e82adb6cdbe4612263bc30883dd108", + "fee528071f68843ab056f513295146685f8f78f4", "support" ], "tools/wptrunner/wptrunner/browsers/ie.py": [ @@ -717936,7 +717962,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executormarionette.py": [ - "59f7e865a5b8711fa71c9c8955eca731e0048c3f", + "01306397db7944cd0dfadf8f1bf0327dbacf94d6", "support" ], "tools/wptrunner/wptrunner/executors/executoropera.py": [ @@ -717992,7 +718018,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/test-wait.js": [ - "8a7edb79d62256eef63c71eabd450d42bce7c4d2", + "ad08ad7d76fb0299aadedb572193c38c5055e654", "support" ], "tools/wptrunner/wptrunner/executors/testharness_servodriver.js": [ @@ -718012,7 +718038,7 @@ "support" ], "tools/wptrunner/wptrunner/font.py": [ - "6647a8580be7ab4050bbd37593b2e6595bc3ac72", + "daf0a1c1bfa221aa47981d93239021e4aefa74a9", "support" ], "tools/wptrunner/wptrunner/formatters/__init__.py": [ @@ -718244,7 +718270,7 @@ "support" ], "tools/wptrunner/wptrunner/wptrunner.py": [ - "7409dc26560af0be3a397bb73184137d8715811f", + "75ce104c7cee335afa2e86592caa2c4caa473bcf", "support" ], "tools/wptrunner/wptrunner/wpttest.py": [ @@ -724608,7 +724634,7 @@ "manual" ], "web-nfc/NDEFReader_scan.https.html": [ - "a9b1d7516173418243c630817eea22fd0bed2046", + "17b9fdb8569db230c3a3ded22e0258e4f73a69fc", "testharness" ], "web-nfc/NDEFReader_scan_filter.https.html": [ @@ -724632,7 +724658,7 @@ "manual" ], "web-nfc/NDEFWriter_push.https.html": [ - "4ff0af8fb0b3947595bdf48015ebabce165003ba", + "cb6b3941410035c5c5736e13d59fbbfb85f0d4cc", "testharness" ], "web-nfc/README.md": [ diff --git a/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini new file mode 100644 index 00000000000..e38782d8c85 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini @@ -0,0 +1,4 @@ +[elementFromPoint-001.html] + [CSSOM View - 5 - extensions to the Document interface] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom-view/getClientRects-inline-inline-child.html.ini b/tests/wpt/metadata/css/cssom-view/getClientRects-inline-inline-child.html.ini new file mode 100644 index 00000000000..8ff7d008595 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/getClientRects-inline-inline-child.html.ini @@ -0,0 +1,4 @@ +[getClientRects-inline-inline-child.html] + [sub element in a child inline box should not be included] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-absolute.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-absolute.html.ini index 0fcea9e70f7..7459d90358e 100644 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-absolute.html.ini +++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-absolute.html.ini @@ -1,2 +1,973 @@ [getComputedStyle-insets-absolute.html] - expected: TIMEOUT + [horizontal-tb ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-fixed.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-fixed.html.ini index e46b9c445e0..dd428b03af0 100644 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-fixed.html.ini +++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-fixed.html.ini @@ -1,2 +1,973 @@ [getComputedStyle-insets-fixed.html] - expected: TIMEOUT + [horizontal-tb ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages absolutize the computed value when overconstrained] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-nobox.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-nobox.html.ini deleted file mode 100644 index 7ca66dc0456..00000000000 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-nobox.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[getComputedStyle-insets-nobox.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-relative.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-relative.html.ini index 623f02a9f9a..60a7cddb8e3 100644 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-relative.html.ini +++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-relative.html.ini @@ -1,2 +1,757 @@ [getComputedStyle-insets-relative.html] - expected: TIMEOUT + [horizontal-tb ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves to used value] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve to used value] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves to used value] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-static.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-static.html.ini deleted file mode 100644 index 555f2b80aae..00000000000 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-static.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[getComputedStyle-insets-static.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini index 41718a2bea7..ad55e43fe66 100644 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini +++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini @@ -1,2 +1,757 @@ [getComputedStyle-insets-sticky-container-for-abspos.html] - expected: TIMEOUT + [horizontal-tb ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky.html.ini b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky.html.ini index 4723e4371f4..a9bd906e52d 100644 --- a/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky.html.ini +++ b/tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky.html.ini @@ -1,2 +1,757 @@ [getComputedStyle-insets-sticky.html] - expected: TIMEOUT + [horizontal-tb ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl rtl inside vertical-lr ltr - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr rtl inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - calc() is absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-lr rtl - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Percentages are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl rtl inside vertical-rl ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-rl ltr inside vertical-rl ltr - Percentages are absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-rl rtl - If end side is 'auto' and start side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [horizontal-tb ltr inside vertical-rl rtl - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [horizontal-tb rtl inside horizontal-tb ltr - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr rtl - calc() is absolutized into pixels] + expected: FAIL + + [horizontal-tb rtl inside vertical-lr ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl ltr - Pixels resolve as-is] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb rtl - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-rl rtl - Relative lengths are absolutized into pixels] + expected: FAIL + + [vertical-rl ltr inside vertical-rl rtl - Pixels resolve as-is] + expected: FAIL + + [horizontal-tb ltr inside horizontal-tb ltr - If opposite sides are 'auto', they resolve as-is] + expected: FAIL + + [vertical-rl ltr inside horizontal-tb ltr - Relative lengths are absolutized into pixels] + expected: FAIL + + [horizontal-tb ltr inside vertical-lr ltr - If start side is 'auto' and end side is not, 'auto' resolves as-is] + expected: FAIL + + [vertical-lr ltr inside vertical-lr ltr - calc() is absolutized into pixels] + expected: FAIL + + [vertical-lr rtl inside horizontal-tb ltr - Percentages are absolutized into pixels] + expected: FAIL + diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 9fdb1aa8bf6..52662ab4ad3 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -309,9 +309,6 @@ [<iframe>: separate response Content-Type: */* text/html] expected: FAIL - [<iframe>: separate response Content-Type: text/html;" text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/html */*;charset=gbk] expected: FAIL @@ -324,15 +321,15 @@ [<iframe>: combined response Content-Type: text/html;charset=gbk text/plain text/html] expected: FAIL - [<iframe>: combined response Content-Type: text/html */*] - expected: FAIL - [fetch(): separate response Content-Type: text/plain ] expected: NOTRUN - [<iframe>: combined response Content-Type: text/html;" \\" text/plain] + [<iframe>: combined response Content-Type: */* text/html] + expected: FAIL + + [<iframe>: separate response Content-Type: text/html */*] expected: FAIL - [<iframe>: separate response Content-Type: text/plain */*;charset=gbk] + [<iframe>: separate response Content-Type: text/html;" \\" text/plain] expected: FAIL diff --git a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini index d4ba399b762..536384f36e1 100644 --- a/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini +++ b/tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini @@ -11,6 +11,6 @@ [X-Content-Type-Options%3A%20nosniff%0C] expected: FAIL - [X-Content-Type-Options%3A%20'NosniFF'] + [X-Content-Type-Options%3A%20%2Cnosniff] expected: FAIL diff --git a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini index 54f7f890b05..0cb858e8b2e 100644 --- a/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini +++ b/tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini @@ -8,8 +8,11 @@ expected: FAIL [Embedded credentials are treated as network errors in new windows.] - expected: TIMEOUT + expected: FAIL [Embedded credentials matching the top-level are treated as network errors for cross-origin URLs.] - expected: FAIL + expected: TIMEOUT + + [Embedded credentials matching the top-level are not treated as network errors for relative URLs.] + expected: TIMEOUT diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini index 75d75b4cda2..51f8272a6de 100644 --- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini +++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini @@ -1,4 +1,4 @@ -[traverse_the_history_2.html] +[traverse_the_history_3.html] [Multiple history traversals, last would be aborted] expected: FAIL diff --git a/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini new file mode 100644 index 00000000000..16fa2c5cfc1 --- /dev/null +++ b/tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini @@ -0,0 +1,4 @@ +[creating_browsing_context_test_01.html] + [first argument: absolute url] + expected: FAIL + diff --git a/tests/wpt/metadata/html/dom/idlharness.https.html.ini b/tests/wpt/metadata/html/dom/idlharness.https.html.ini index dfd89a10358..0a7f3af6a0f 100644 --- a/tests/wpt/metadata/html/dom/idlharness.https.html.ini +++ b/tests/wpt/metadata/html/dom/idlharness.https.html.ini @@ -2907,9 +2907,6 @@ [HTMLInputElement interface: createInput("text") must inherit property "valueAsNumber" with the proper type] expected: FAIL - [HTMLScriptElement interface: attribute noModule] - expected: FAIL - [HTMLInputElement interface: createInput("checkbox") must inherit property "stepDown(long)" with the proper type] expected: FAIL @@ -3798,9 +3795,6 @@ [HTMLInputElement interface: createInput("text") must inherit property "useMap" with the proper type] expected: FAIL - [HTMLScriptElement interface: document.createElement("script") must inherit property "noModule" with the proper type] - expected: FAIL - [HTMLTableSectionElement interface: document.createElement("thead") must inherit property "align" with the proper type] expected: FAIL diff --git a/tests/wpt/metadata/html/dom/reflection-misc.html.ini b/tests/wpt/metadata/html/dom/reflection-misc.html.ini index 4a991afe689..9ff7bf5a98b 100644 --- a/tests/wpt/metadata/html/dom/reflection-misc.html.ini +++ b/tests/wpt/metadata/html/dom/reflection-misc.html.ini @@ -17610,102 +17610,6 @@ [script.nonce: IDL set to object "test-valueOf"] expected: FAIL - [script.noModule: typeof IDL attribute] - expected: FAIL - - [script.noModule: IDL get with DOM attribute unset] - expected: FAIL - - [script.noModule: setAttribute() to ""] - expected: FAIL - - [script.noModule: setAttribute() to " foo "] - expected: FAIL - - [script.noModule: setAttribute() to undefined] - expected: FAIL - - [script.noModule: setAttribute() to null] - expected: FAIL - - [script.noModule: setAttribute() to 7] - expected: FAIL - - [script.noModule: setAttribute() to 1.5] - expected: FAIL - - [script.noModule: setAttribute() to true] - expected: FAIL - - [script.noModule: setAttribute() to false] - expected: FAIL - - [script.noModule: setAttribute() to object "[object Object\]"] - expected: FAIL - - [script.noModule: setAttribute() to NaN] - expected: FAIL - - [script.noModule: setAttribute() to Infinity] - expected: FAIL - - [script.noModule: setAttribute() to -Infinity] - expected: FAIL - - [script.noModule: setAttribute() to "\\0"] - expected: FAIL - - [script.noModule: setAttribute() to object "test-toString"] - expected: FAIL - - [script.noModule: setAttribute() to object "test-valueOf"] - expected: FAIL - - [script.noModule: setAttribute() to "noModule"] - expected: FAIL - - [script.noModule: IDL set to ""] - expected: FAIL - - [script.noModule: IDL set to " foo "] - expected: FAIL - - [script.noModule: IDL set to undefined] - expected: FAIL - - [script.noModule: IDL set to null] - expected: FAIL - - [script.noModule: IDL set to 7] - expected: FAIL - - [script.noModule: IDL set to 1.5] - expected: FAIL - - [script.noModule: IDL set to false] - expected: FAIL - - [script.noModule: IDL set to object "[object Object\]"] - expected: FAIL - - [script.noModule: IDL set to NaN] - expected: FAIL - - [script.noModule: IDL set to Infinity] - expected: FAIL - - [script.noModule: IDL set to -Infinity] - expected: FAIL - - [script.noModule: IDL set to "\\0"] - expected: FAIL - - [script.noModule: IDL set to object "test-toString"] - expected: FAIL - - [script.noModule: IDL set to object "test-valueOf"] - expected: FAIL - [menu.type: setAttribute() to "context"] expected: FAIL @@ -19212,9 +19116,6 @@ [undefinedelement.tabIndex: setAttribute() to "5%"] expected: FAIL - [script.noModule: setAttribute() to "5%"] - expected: FAIL - [undefinedelement.dir: setAttribute() to "5%"] expected: FAIL @@ -19416,9 +19317,6 @@ [details.dir: setAttribute() to "5%"] expected: FAIL - [script.noModule: IDL set to "5%"] - expected: FAIL - [summary.dir: IDL set to "5%"] expected: FAIL @@ -19440,9 +19338,6 @@ [script.accessKey: IDL set to "+100"] expected: FAIL - [script.noModule: IDL set to "+100"] - expected: FAIL - [ins.dateTime: IDL set to "+100"] expected: FAIL @@ -19581,9 +19476,6 @@ [details.tabIndex: setAttribute() to "+100"] expected: FAIL - [script.noModule: setAttribute() to "+100"] - expected: FAIL - [script.dir: setAttribute() to ".5"] expected: FAIL @@ -19611,9 +19503,6 @@ [menu.dir: IDL set to ".5"] expected: FAIL - [script.noModule: IDL set to ".5"] - expected: FAIL - [dialog.tabIndex: setAttribute() to "+100"] expected: FAIL @@ -19839,9 +19728,6 @@ [dialog.dir: IDL set to "+100"] expected: FAIL - [script.noModule: setAttribute() to ".5"] - expected: FAIL - [undefinedelement.enterKeyHint: setAttribute() to "+100"] expected: FAIL diff --git a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini index 6852d7663de..c12c0f8ae48 100644 --- a/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini +++ b/tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini @@ -1,8 +1,4 @@ [skip-document-with-fragment.html] - expected: TIMEOUT [Autofocus elements in iframed documents with URL fragments should be skipped.] expected: FAIL - [Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini index 5f60c78e73c..f6a7aca3306 100644 --- a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini @@ -1,6 +1,5 @@ [iframe_sandbox_popups_escaping-3.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 diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html.ini index 8ee01faecbd..0ea72a3bf48 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html.ini @@ -1,14 +1,13 @@ [utf8.tentative.html] - expected: TIMEOUT [windows-1252] - expected: NOTRUN + expected: FAIL [utf-7] - expected: NOTRUN + expected: FAIL [shift-jis] - expected: NOTRUN + expected: FAIL [utf-8] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-01.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-01.html.ini deleted file mode 100644 index d958b30d7f4..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-01.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[charset-01.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-02.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-02.html.ini index a919b698590..08b105f3507 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-02.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-02.html.ini @@ -1,3 +1,7 @@ [charset-02.html] - type: testharness - expected: TIMEOUT + [UTF-16 module script with UTF-16LE BOM] + expected: FAIL + + [UTF-16 module script with UTF-16BE BOM] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-03.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-03.html.ini deleted file mode 100644 index 16b43178406..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-03.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[charset-03.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html.ini deleted file mode 100644 index 2046faa6ed8..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[choice-of-error-1.html] - [Parse errors in different files should be reported depending on different roots] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html.ini deleted file mode 100644 index 9d55b00ff31..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[choice-of-error-2.html] - [Instantiation errors in different files should be reported depending on different roots] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html.ini deleted file mode 100644 index 19e185bb343..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[choice-of-error-3.html] - [Evaluation errors are cached in intermediate module scripts] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html.ini deleted file mode 100644 index 689887b78e1..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[compilation-error-1.html] - type: testharness - [Test that syntax errors lead to SyntaxError events on window, and that exceptions are remembered.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html.ini deleted file mode 100644 index 5d518d97d25..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[compilation-error-2.html] - type: testharness - [Test that syntax errors lead to SyntaxError events on window, and that exceptions are remembered.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/credentials.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/credentials.sub.html.ini index 2e41efe9ac7..1d6ade5a09d 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/credentials.sub.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/credentials.sub.html.ini @@ -1,3 +1,4 @@ + [credentials.sub.html] type: testharness [Modules should be loaded with or without the credentials based on the same-origin-ness and the crossOrigin attribute] diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/crossorigin.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/crossorigin.html.ini deleted file mode 100644 index 20738173875..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/crossorigin.html.ini +++ /dev/null @@ -1,32 +0,0 @@ -[crossorigin.html] - type: testharness - [Root module, Error in CORS-different-origin script] - expected: FAIL - - [Root module, Error in CORS-same-origin script] - expected: FAIL - - [Root module, Blocked script download, missing CORS ACAO header] - expected: FAIL - - [Root module, Blocked script download, mismatched CORS ACAO header] - expected: FAIL - - [Imported module, Error in CORS-different-origin script] - expected: FAIL - - [Imported module, Error in CORS-same-origin script] - expected: FAIL - - [Imported module, Blocked script download, missing CORS ACAO header] - expected: FAIL - - [Imported module, Blocked script download, mismatched CORS ACAO header] - expected: FAIL - - [Root module, Blocked script download, crossorigin attribute with missing CORS ACAO header] - expected: FAIL - - [Imported module, Blocked script download, crossorigin attribute with missing CORS ACAO header] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/currentScript-null.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/currentScript-null.html.ini deleted file mode 100644 index b3d97af5ba7..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/currentScript-null.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[currentScript-null.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/custom-element-exception.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/custom-element-exception.html.ini deleted file mode 100644 index 4a87a4b2bba..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/custom-element-exception.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[custom-element-exception.html] - type: testharness - [Test that exceptions from the constructor of a custom element inside a module are propagated as expected.\n] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-1.html.ini deleted file mode 100644 index 53623ca1a01..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-1.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[duplicated-imports-1.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-2.html.ini deleted file mode 100644 index 39e00fd52ce..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-2.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[duplicated-imports-2.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html.ini deleted file mode 100644 index 6af93a6e94e..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[error-and-slow-dependency.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-2.html.ini deleted file mode 100644 index e24139fb1a2..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-2.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[error-type-2.html] - [parse error has higher priority than instantiation error] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-3.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-3.html.ini deleted file mode 100644 index 58cc436ec05..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-3.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[error-type-3.html] - [instantiation error has higher priority than evaluation error] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini deleted file mode 100644 index 6d3d5fdd67c..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini +++ /dev/null @@ -1,18 +0,0 @@ -[errorhandling.html] - type: testharness - expected: TIMEOUT - [IFrame test: 'iframe_parseError_Root'] - expected: FAIL - - [IFrame test: 'iframe_parseError_Dependent'] - expected: FAIL - - [IFrame test: 'iframe_parseError_DependentMultiple'] - expected: FAIL - - [External root module with non-script mimetype] - expected: NOTRUN - - [Module with imported non-script mimetype] - expected: NOTRUN - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html.ini deleted file mode 100644 index 35ee19e1418..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[evaluation-error-1.html] - type: testharness - [Test that exceptions during evaluation lead to error events on window, and that exceptions are remembered.\n] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html.ini deleted file mode 100644 index f71474208e5..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[evaluation-error-2.html] - type: testharness - [Test that ill-founded cyclic dependencies cause ReferenceError during evaluation, which leads to error events on window, and that exceptions are remembered.\n] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html.ini deleted file mode 100644 index c2cb5cd0442..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[evaluation-error-3.html] - type: testharness - [Test that exceptions during evaluation lead to error events on window, and that exceptions are remembered.\n] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html.ini deleted file mode 100644 index 16e2ac18463..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[evaluation-error-4.html] - type: testharness - [Test that exceptions during evaluation lead to error events on window, and that exceptions are remembered.\n] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/execorder.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/execorder.html.ini deleted file mode 100644 index 6df8f6cb577..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/execorder.html.ini +++ /dev/null @@ -1,21 +0,0 @@ -[execorder.html] - type: testharness - expected: TIMEOUT - [Unordered module script execution (parsed, unordered #1)] - expected: NOTRUN - - [Unordered module script execution (parsed, unordered #2)] - expected: NOTRUN - - [Unordered module script execution (dynamic, unordered #1)] - expected: NOTRUN - - [Unordered module script execution (dynamic, unordered #2)] - expected: NOTRUN - - [Interlaced module/non-module script execution (parsed, async-ordered)] - expected: FAIL - - [Interlaced module/non-module script execution (dynamic, async-ordered)] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html.ini deleted file mode 100644 index 7ad54e37be7..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[fetch-error-1.html] - type: testharness - [Test that failure to fetch root leads to error event on script.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html.ini deleted file mode 100644 index e6acfd3210b..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[fetch-error-2.html] - type: testharness - [Test that failure to fetch dependency leads to error event on script.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html.ini deleted file mode 100644 index c9bcdffbd0d..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[import-subgraph-404.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/imports.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/imports.html.ini deleted file mode 100644 index 8ca41f2b813..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/imports.html.ini +++ /dev/null @@ -1,15 +0,0 @@ -[imports.html] - type: testharness - expected: TIMEOUT - [Import a module that tries to import itself] - expected: NOTRUN - - [Import a module with a cyclical module dependency] - expected: NOTRUN - - [Import a module that validly imports itself] - expected: NOTRUN - - [Import a module with a valid cyclical module dependency] - expected: NOTRUN - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inactive-context-import.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inactive-context-import.html.ini new file mode 100644 index 00000000000..354ea7cb7c8 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inactive-context-import.html.ini @@ -0,0 +1,5 @@ +[inactive-context-import.html] + type: testharness + [dynamic import from inactive context should not crash] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini deleted file mode 100644 index 54dcc064e7e..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[inline-async-execorder.html] - [Inline async module script execution order] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html.ini deleted file mode 100644 index b3fdd6f764e..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[instantiation-error-1.html] - type: testharness - [Test that missing exports lead to SyntaxError events on window and load events on script, and that exceptions are remembered] - expected: FAIL - - [Test that missing exports lead to SyntaxError events on window and load events on script] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html.ini deleted file mode 100644 index c5e6fec931a..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[instantiation-error-2.html] - type: testharness - [Test that missing exports lead to SyntaxError events on window and load events on script, and that exceptions are remembered] - expected: FAIL - - [Test that missing exports lead to SyntaxError events on window and load events on script] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html.ini deleted file mode 100644 index 25019f2ce0f..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[instantiation-error-3.html] - type: testharness - [Test that unresolvable cycles lead to SyntaxError events on window and load events on script, and that exceptions are remembered] - expected: FAIL - - [Test that unresolvable cycles lead to SyntaxError events on window and load events on script] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html.ini deleted file mode 100644 index 8acedfbc746..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[instantiation-error-4.html] - type: testharness - [Test that loading a graph in which a module is already errored results in that module's error.] - expected: FAIL - - [Test that loading a graph in which a module is already errored results in an error.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html.ini deleted file mode 100644 index 44be8de5091..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[instantiation-error-5.html] - type: testharness - [Test that loading a graph in which a module is already errored results in that module's error.] - expected: FAIL - - [Test that loading a graph in which a module is already errored results an error.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-6.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-6.html.ini deleted file mode 100644 index c1729535a19..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-6.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[instantiation-error-6.html] - type: testharness - [Test that ambiguous star exports lead to an instantiation error and that the correct module is blamed.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-7.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-7.html.ini deleted file mode 100644 index 152942c5092..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-7.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[instantiation-error-7.html] - type: testharness - [Test that ambiguous star exports lead to an instantiation error, even when discovered through a star export, and that the correct module is blamed.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-8.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-8.html.ini deleted file mode 100644 index 693c8174ed9..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-8.html.ini +++ /dev/null @@ -1,6 +0,0 @@ -[instantiation-error-8.html] - type: testharness - expected: TIMEOUT - [Instantiate attempt on a tree w/ previously instantiate-failed tree as a sub-tree shouldn't crash.] - expected: TIMEOUT - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/integrity.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/integrity.html.ini deleted file mode 100644 index 5bcd6c0a462..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/integrity.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[integrity.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html.ini deleted file mode 100644 index 1006d488052..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[late-namespace-request.html] - type: testharness - [Test the situation where a module is instantiated without the need for a namespace object, but later on a different module requests the namespace.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html.ini deleted file mode 100644 index 09abe701e73..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[late-star-export-request.html] - type: testharness - [Test the situation where a module is instantiated without a use of its star-exports, but later on a different module requests them.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html.ini index e911f6b7fb9..1753a0856d7 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html.ini @@ -1,27 +1,5 @@ + [load-error-events-inline.html] type: testharness - expected: TIMEOUT - [src, 200, parser-inserted, defer, no async] - expected: NOTRUN - - [src, 200, parser-inserted, no defer, async] - expected: NOTRUN - - [src, 200, not parser-inserted, no defer, no async, no non-blocking] - expected: NOTRUN - - [src, 200, not parser-inserted, no defer, async] - expected: NOTRUN - - [src, 404, parser-inserted, defer, no async] - expected: NOTRUN - - [src, 404, parser-inserted, no defer, async] - expected: NOTRUN - - [src, 404, not parser-inserted, no defer, no async, no non-blocking] - expected: NOTRUN - - [src, 404, not parser-inserted, no defer, async] - expected: NOTRUN + expected: CRASH diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events.html.ini deleted file mode 100644 index b0a60904841..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events.html.ini +++ /dev/null @@ -1,27 +0,0 @@ -[load-error-events.html] - type: testharness - expected: TIMEOUT - [src, 200, parser-inserted, defer, no async] - expected: NOTRUN - - [src, 200, parser-inserted, no defer, async] - expected: NOTRUN - - [src, 200, not parser-inserted, no defer, no async, no non-blocking] - expected: NOTRUN - - [src, 200, not parser-inserted, no defer, async] - expected: NOTRUN - - [src, 404, parser-inserted, defer, no async] - expected: NOTRUN - - [src, 404, parser-inserted, no defer, async] - expected: NOTRUN - - [src, 404, not parser-inserted, no defer, no async, no non-blocking] - expected: NOTRUN - - [src, 404, not parser-inserted, no defer, async] - expected: NOTRUN - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml.ini deleted file mode 100644 index ad0ec28d799..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml.ini +++ /dev/null @@ -1,5 +0,0 @@ -[module-in-xhtml.xhtml] - type: testharness - [module script in XHTML documents should be evaluated.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html.ini deleted file mode 100644 index d91d145d1dc..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[module-vs-script-1.html] - type: testharness - [Test that evaluating something as classic script does not prevent it from being evaluated as module script.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html.ini deleted file mode 100644 index 4864da5dc6a..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[module-vs-script-2.html] - type: testharness - [Test that evaluating something as classic script does not prevent it from being evaluated as module script.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html.ini deleted file mode 100644 index e595c3421fa..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[nomodule-attribute.html] - type: testharness - [Test that 'nomodule' has the desired effect on classic scripts, but no effect on module scripts.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html.ini deleted file mode 100644 index 634cf356318..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[referrer-no-referrer.sub.html] - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html.ini index 92d04781a2e..a212c8c0e93 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html.ini @@ -1,2 +1,19 @@ [referrer-origin-when-cross-origin.sub.html] - expected: TIMEOUT + [Importing a remote-origin descendant script from a same-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + + [Importing a same-origin descendant script from a same-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + + [Importing a remote-origin descendant script from a remote-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + + [Importing a same-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + + [Importing a same-origin descendant script from a remote-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + + [Importing a remote-origin top-level script with the origin-when-cross-origin policy.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html.ini index 9a2db3d8993..413900f14b9 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html.ini @@ -1,2 +1,19 @@ [referrer-origin.sub.html] - expected: TIMEOUT + [Importing a same-origin descendant script from a same-origin top-level script with the origin policy.] + expected: FAIL + + [Importing a remote-origin descendant script from a same-origin top-level script with the origin policy.] + expected: FAIL + + [Importing a remote-origin descendant script from a remote-origin top-level script with the origin policy.] + expected: FAIL + + [Importing a same-origin descendant script from a remote-origin top-level script with the origin policy.] + expected: FAIL + + [Importing a same-origin top-level script with the origin policy.] + expected: FAIL + + [Importing a remote-origin top-level script with the origin policy.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html.ini index d499edb6fc8..ce528d7e641 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html.ini @@ -1,2 +1,10 @@ [referrer-same-origin.sub.html] - expected: TIMEOUT + [Importing a same-origin descendant script from a same-origin top-level script with the same-origin policy.] + expected: FAIL + + [Importing a same-origin descendant script from a remote-origin top-level script with the same-origin policy.] + expected: FAIL + + [Importing a same-origin top-level script with the same-origin policy.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html.ini index 2b700b1c9b4..c1eeb5dcec7 100644 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html.ini +++ b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html.ini @@ -1,2 +1,19 @@ [referrer-unsafe-url.sub.html] - expected: TIMEOUT + [Importing a same-origin descendant script from a remote-origin top-level script with the unsafe-url policy.] + expected: FAIL + + [Importing a same-origin descendant script from a same-origin top-level script with the unsafe-url policy.] + expected: FAIL + + [Importing a remote-origin top-level script with the unsafe-url policy.] + expected: FAIL + + [Importing a remote-origin descendant script from a remote-origin top-level script with the unsafe-url policy.] + expected: FAIL + + [Importing a remote-origin descendant script from a same-origin top-level script with the unsafe-url policy.] + expected: FAIL + + [Importing a same-origin top-level script with the unsafe-url policy.] + expected: FAIL + diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/script-for-event.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/script-for-event.html.ini deleted file mode 100644 index 3ad68cd5f47..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/script-for-event.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[script-for-event.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html.ini deleted file mode 100644 index e5b288d78e0..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[single-evaluation-1.html] - type: testharness - [Test that a module is evaluated only once, and that 'this' is undefined (because of strict mode).] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html.ini deleted file mode 100644 index c47fc9c8a4c..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[single-evaluation-2.html] - type: testharness - [Test that a module is evaluated only once, and that 'this' is undefined (because of strict mode).] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/slow-cycle.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/slow-cycle.html.ini deleted file mode 100644 index 37c99441cc7..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/slow-cycle.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[slow-cycle.html] - type: testharness - expected: TIMEOUT diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/specifier-error.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/specifier-error.html.ini deleted file mode 100644 index 44e8c1ebac6..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/specifier-error.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[specifier-error.html] - type: testharness - [Test that invalid module specifier leads to TypeError on window.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-reflect.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-reflect.html.ini deleted file mode 100644 index 333bbf3d0e9..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-reflect.html.ini +++ /dev/null @@ -1,32 +0,0 @@ -[nomodule-reflect.html] - type: testharness - [noModule IDL attribute on a parser created classic script element without nomodule content attribute] - expected: FAIL - - [noModule IDL attribute on a parser created classic script element with nomodule content attribute] - expected: FAIL - - [noModule IDL attribute on a parser created module script element without nomodule content attribute] - expected: FAIL - - [noModule IDL attribute on a parser created module script element with nomodule content attribute] - expected: FAIL - - [noModule IDL attribute on a dynamically created script element without nomodule content attribute] - expected: FAIL - - [noModule IDL attribute on a dynamically created script element after nomodule content attribute is set to "nomodule"] - expected: FAIL - - [noModule IDL attribute on a dynamically created script element after nomodule content attribute is set to ""] - expected: FAIL - - [noModule IDL attribute on a dynamically created script element after nomodule content attribute had been removed] - expected: FAIL - - [noModule IDL attribute must add nomodule content attribute on setting to true] - expected: FAIL - - [noModule IDL attribute must remove nomodule content attribute on setting to false] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html.ini deleted file mode 100644 index 2a43be95639..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[nomodule-set-on-async-classic-script.html] - type: testharness - [An asynchronously loaded classic script with noModule set to true must not run] - expected: FAIL - - [An asynchronously loaded classic script with noModule set to false must run] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html.ini deleted file mode 100644 index 926d065aecd..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[nomodule-set-on-external-module-script.html] - type: testharness - [An external module script with nomodule content attribute must run] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-classic-scripts.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-classic-scripts.html.ini deleted file mode 100644 index cf471744a60..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-classic-scripts.html.ini +++ /dev/null @@ -1,8 +0,0 @@ -[nomodule-set-on-inline-classic-scripts.html] - type: testharness - [An inline classic script with nomodule content attribute must not run] - expected: FAIL - - [An inline classic script element dynamically inserted after noModule was set to true must not run.] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script.html.ini deleted file mode 100644 index 898f25c4217..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[nomodule-set-on-inline-module-script.html] - type: testharness - [An inline module script with nomodule content attribute must run] - expected: FAIL - diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-synchronously-loaded-classic-scripts.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-synchronously-loaded-classic-scripts.html.ini deleted file mode 100644 index 6bb6e4244ff..00000000000 --- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-synchronously-loaded-classic-scripts.html.ini +++ /dev/null @@ -1,5 +0,0 @@ -[nomodule-set-on-synchronously-loaded-classic-scripts.html] - type: testharness - [A synchronously loaded external classic script with nomodule content attribute must not run] - expected: FAIL - diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini index 97f8a0cc51f..6d08beab111 100644 --- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini +++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini @@ -10,6 +10,3 @@ [Verifies the resolution of entry.startTime is at least 20 microseconds.] expected: TIMEOUT - [Verifies the resolution of performance.now() is at least 5 microseconds.] - expected: FAIL - diff --git a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini index b4090ef9fe2..1c7ec9ce1db 100644 --- a/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini +++ b/tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini @@ -1,5 +1,4 @@ [crossorigin-sandwich-TAO.sub.html] - expected: ERROR [There should be one entry.] expected: FAIL diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini index f584fce5df1..268949ced5c 100644 --- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini +++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini @@ -1,5 +1,4 @@ [005.html] - expected: ERROR [dedicated worker in shared worker in dedicated worker] expected: FAIL diff --git a/tests/wpt/web-platform-tests/css/css-multicol/change-intrinsic-width.html b/tests/wpt/web-platform-tests/css/css-multicol/change-intrinsic-width.html new file mode 100644 index 00000000000..3df3e1ebc8f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/change-intrinsic-width.html @@ -0,0 +1,14 @@ +<!DOCTYPE html> +<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org"> +<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#pseudo-algorithm"> +<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1037790"> +<link rel="match" href="../reference/ref-filled-green-100px-square.xht"> +<p>Test passes if there is a filled green square and <strong>no red</strong>.</p> +<div style="columns:2; column-fill:auto; column-gap:0; width:fit-content; height:100px; background:red;"> + <div id="firstChild" style="width:200px; height:100px; background:green;"></div> + <div style="width:50px; height:100px; background:green;"></div> +</div> +<script> + document.body.offsetTop; + firstChild.style.width = "50px"; +</script> diff --git a/tests/wpt/web-platform-tests/css/cssom-view/getClientRects-inline-inline-child.html b/tests/wpt/web-platform-tests/css/cssom-view/getClientRects-inline-inline-child.html new file mode 100644 index 00000000000..9a03ccdbccc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/getClientRects-inline-inline-child.html @@ -0,0 +1,52 @@ +<!DOCTYPE html> +<link rel="help" href="https://drafts.csswg.org/cssom-view-1/#dom-element-getclientrects"> +<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<body> + <div> + <span>test</span> + <span id="vertical-align-sub-as-grand-child" + title="sub element in a child inline box should not be included"> + <span> + <sub class="not-include" style="vertical-align: sub">subscript</sub> + </span> + </span> + <span>test</span> + </div> +<script> +testTargetDoesNotInclude('vertical-align-sub-as-grand-child'); + +function testTargetDoesNotInclude(target) { + target = document.getElementById(target); + test(() => { + let target_rects = target.getClientRects(); + + let not_include_rects = []; + for (let element of target.querySelectorAll('.not-include')) { + for (let rect of element.getClientRects()) + not_include_rects.push(rect); + } + for (let rect of target_rects) { + for (let not_include_rect of not_include_rects) { + assert_rect_not_equals(rect, not_include_rect); + } + } + }, target.title); +} + +function assert_rect_not_equals(rect1, rect2) { + assert_false(rectEquals(rect1, rect2), + `${rectToString(rect1)} and ${rectToString(rect2)} are not equal`); +} + +function rectEquals(rect1, rect2) { + return rect1.x === rect2.x && rect1.y === rect2.y && + rect1.width === rect2.width && rect1.height === rect2.height; +} + +function rectToString(rect) { + return `{${rect.x}, ${rect.y} ${rect.width}x${rect.height}}`; +} +</script> +</body> diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valid.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valid.html index cec5dcbf0d5..03655ffd2f5 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valid.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valid.html @@ -15,7 +15,7 @@ types: ["text", "search", "tel", "password"], testData: [ {conditions: {pattern: "[A-Z]", value: "abc"}, expected: false, name: "[target] validity.valid must be false if validity.patternMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -24,7 +24,7 @@ testData: [ {conditions: {pattern: "http://www.example.com", value: "http://www.example.net"}, expected: false, name: "[target] validity.valid must be false if validity.patternMismatch is true"}, {conditions: {value: "abc"}, expected: false, name: "[target] validity.valid must be false if validity.typeMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -33,7 +33,7 @@ testData: [ {conditions: {pattern: "test@example.com", value: "test@example.net"}, expected: false, name: "[target] validity.valid must be false if validity.patternMismatch is true"}, {conditions: {value: "abc"}, expected: false, name: "[target] validity.valid must be false if validity.typeMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -43,7 +43,7 @@ {conditions: {max: "2000-01-01T12:00:00", value: "2001-01-01T12:00:00"}, expected: false, name: "[target] validity.valid must be false if validity.rangeOverflow is true"}, {conditions: {min: "2001-01-01T12:00:00", value: "2000-01-01T12:00:00"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, {conditions: {step: 2 * 60 * 1000, value: "2001-01-01T12:03:00"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -53,7 +53,7 @@ {conditions: {max: "2000-01-01", value: "2001-01-01"}, expected: false, name: "[target] validity.valid must be false if validity.rangeOverflow is true"}, {conditions: {min: "2001-01-01", value: "2000-01-01"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, {conditions: {step: 2 * 1 * 86400000, value: "2000-01-03"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -64,7 +64,7 @@ {conditions: {min: "2001-01", value: "2000-01"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, // Step checks that "months since Jan 1970" is evenly divisible by `step` {conditions: {step: 3, value: "2001-02"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -74,7 +74,7 @@ {conditions: {max: "2000-W01", value: "2001-W01"}, expected: false, name: "[target] validity.valid must be false if validity.rangeOverflow is true"}, {conditions: {min: "2001-W01", value: "2000-W01"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, {conditions: {step: 2 * 1 * 604800000, value: "2001-W03"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -84,7 +84,7 @@ {conditions: {max: "12:00:00", value: "13:00:00"}, expected: false, name: "[target] validity.valid must be false if validity.rangeOverflow is true"}, {conditions: {min: "12:00:00", value: "11:00:00"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, {conditions: {step: 2 * 60 * 1000, value: "12:03:00"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -94,7 +94,7 @@ {conditions: {max: "5", value: "6"}, expected: false, name: "[target] validity.valid must be false if validity.rangeOverflow is true"}, {conditions: {min: "5", value: "4"}, expected: false, name: "[target] validity.valid must be false if validity.rangeUnderflow is true"}, {conditions: {step: 2 * 1 * 1, value: "3"}, expected: false, name: "[target] validity.valid must be false if validity.stepMismatch is true"}, - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] }, { @@ -122,7 +122,7 @@ tag: "textarea", types: [], testData: [ - {conditions: {required: true, value: ""}, expected: false, name: "[target] validity.valid must be false if validity.valueMissing is true"} + {conditions: {required: true, value: ""}, expected: false, expectedImmutable: true, name: "[target] validity.valid must be false if validity.valueMissing is true"} ] } ]; diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html index 3c9e4c4cb09..2e1c666436a 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html @@ -16,7 +16,7 @@ testData: [ {conditions: {required: false, value: ""}, expected: false, name: "[target] The required attribute is not set"}, {conditions: {required: true, value: "abc"}, expected: false, name: "[target] The value is not empty and required is true"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value is empty and required is true"} + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value is empty and required is true"} ] }, { @@ -27,13 +27,13 @@ {conditions: {required: true, value: "2000-12-10T12:00:00"}, expected: false, name: "[target] Valid local date and time string(2000-12-10T12:00:00)"}, {conditions: {required: true, value: "2000-12-10 12:00"}, expected: false, name: "[target] Valid local date and time string(2000-12-10 12:00)"}, {conditions: {required: true, value: "1979-10-14T12:00:00.001"}, expected: false, name: "[target] Valid local date and time string(1979-10-14T12:00:00.001)"}, - {conditions: {required: true, value: 1234567}, expected: true, name: "[target] The value attribute is a number(1234567)"}, - {conditions: {required: true, value: new Date()}, expected: true, name: "[target] The value attribute is a Date object"}, - {conditions: {required: true, value: "1979-10-99 99:99"}, expected: true, name: "[target] Invalid local date and time string(1979-10-99 99:99)"}, + {conditions: {required: true, value: 1234567}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a number(1234567)"}, + {conditions: {required: true, value: new Date()}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a Date object"}, + {conditions: {required: true, value: "1979-10-99 99:99"}, expected: true, expectedImmutable: false, name: "[target] Invalid local date and time string(1979-10-99 99:99)"}, {conditions: {required: true, value: "1979-10-14 12:00:00"}, expected: false, name: "[target] Valid local date and time string(1979-10-14 12:00:00)"}, - {conditions: {required: true, value: "2001-12-21 12:00"}, expected: true, name: "[target] Invalid local date and time string(2001-12-21 12:00)-two white space"}, - {conditions: {required: true, value: "abc"}, expected: true, name: "[target] the value attribute is a string(abc)"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: "2001-12-21 12:00"}, expected: true, expectedImmutable: false, name: "[target] Invalid local date and time string(2001-12-21 12:00)-two white space"}, + {conditions: {required: true, value: "abc"}, expected: true, expectedImmutable: false, name: "[target] the value attribute is a string(abc)"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -43,12 +43,12 @@ {conditions: {required: false, value: ""}, expected: false, name: "[target] The required attribute is not set"}, {conditions: {required: true, value: "2000-12-10"}, expected: false, name: "[target] Valid date string(2000-12-10)"}, {conditions: {required: true, value: "9999-01-01"}, expected: false, name: "[target] Valid date string(9999-01-01)"}, - {conditions: {required: true, value: 1234567}, expected: true, name: "[target] The value attribute is a number(1234567)"}, - {conditions: {required: true, value: new Date()}, expected: true, name: "[target] The value attribute is a Date object"}, - {conditions: {required: true, value: "9999-99-99"}, expected: true, name: "[target] Invalid date string(9999-99-99)"}, - {conditions: {required: true, value: "37/01/01"}, expected: true, name: "[target] Invalid date string(37-01-01)"}, - {conditions: {required: true, value: "2000/01/01"}, expected: true, name: "[target] Invalid date string(2000/01/01)"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: 1234567}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a number(1234567)"}, + {conditions: {required: true, value: new Date()}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a Date object"}, + {conditions: {required: true, value: "9999-99-99"}, expected: true, expectedImmutable: false, name: "[target] Invalid date string(9999-99-99)"}, + {conditions: {required: true, value: "37/01/01"}, expected: true, expectedImmutable: false, name: "[target] Invalid date string(37-01-01)"}, + {conditions: {required: true, value: "2000/01/01"}, expected: true, expectedImmutable: false, name: "[target] Invalid date string(2000/01/01)"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -58,12 +58,12 @@ {conditions: {required: false, value: ""}, expected: false, name: "[target] The required attribute is not set"}, {conditions: {required: true, value: "2000-12"}, expected: false, name: "[target] Valid month string(2000-12)"}, {conditions: {required: true, value: "9999-01"}, expected: false, name: "[target] Valid month string(9999-01)"}, - {conditions: {required: true, value: 1234567}, expected: true, name: "[target] The value attribute is a number(1234567)"}, - {conditions: {required: true, value: new Date()}, expected: true, name: "[target] The value attribute is a Date object"}, - {conditions: {required: true, value: "2000-99"}, expected: true, name: "[target] Invalid month string(2000-99)"}, - {conditions: {required: true, value: "37-01"}, expected: true, name: "[target] Invalid month string(37-01)"}, - {conditions: {required: true, value: "2000/01"}, expected: true, name: "[target] Invalid month string(2000/01)"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: 1234567}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a number(1234567)"}, + {conditions: {required: true, value: new Date()}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a Date object"}, + {conditions: {required: true, value: "2000-99"}, expected: true, expectedImmutable: false, name: "[target] Invalid month string(2000-99)"}, + {conditions: {required: true, value: "37-01"}, expected: true, expectedImmutable: false, name: "[target] Invalid month string(37-01)"}, + {conditions: {required: true, value: "2000/01"}, expected: true, expectedImmutable: false, name: "[target] Invalid month string(2000/01)"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -73,12 +73,12 @@ {conditions: {required: false, value: ""}, expected: false, name: "[target] The required attribute is not set"}, {conditions: {required: true, value: "2000-W12"}, expected: false, name: "[target] Valid week string(2000-W12)"}, {conditions: {required: true, value: "9999-W01"}, expected: false, name: "[target] Valid week string(9999-W01)"}, - {conditions: {required: true, value: 1234567}, expected: true, name: "[target] The value attribute is a number(1234567)"}, - {conditions: {required: true, value: new Date()}, expected: true, name: "[target] The value attribute is a Date object"}, - {conditions: {required: true, value: "2000-W99"}, expected: true, name: "[target] Invalid week string(2000-W99)"}, - {conditions: {required: true, value: "2000-W00"}, expected: true, name: "[target] invalid week string(2000-W00)"}, - {conditions: {required: true, value: "2000-w01"}, expected: true, name: "[target] invalid week string(2000-w01)"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: 1234567}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a number(1234567)"}, + {conditions: {required: true, value: new Date()}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a Date object"}, + {conditions: {required: true, value: "2000-W99"}, expected: true, expectedImmutable: false, name: "[target] Invalid week string(2000-W99)"}, + {conditions: {required: true, value: "2000-W00"}, expected: true, expectedImmutable: false, name: "[target] invalid week string(2000-W00)"}, + {conditions: {required: true, value: "2000-w01"}, expected: true, expectedImmutable: false, name: "[target] invalid week string(2000-w01)"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -91,13 +91,13 @@ {conditions: {required: true, value: "12:00:00.001"}, expected: false, name: "[target] Valid time string(12:00:60.001)"}, {conditions: {required: true, value: "12:00:00.01"}, expected: false, name: "[target] Valid time string(12:00:60.01)"}, {conditions: {required: true, value: "12:00:00.1"}, expected: false, name: "[target] Valid time string(12:00:60.1)"}, - {conditions: {required: true, value: 1234567}, expected: true, name: "[target] The value attribute is a number(1234567)"}, - {conditions: {required: true, value: new Date()}, expected: true, name: "[target] The value attribute is a time object"}, - {conditions: {required: true, value: "25:00:00"}, expected: true, name: "[target] Invalid time string(25:00:00)"}, - {conditions: {required: true, value: "12:60:00"}, expected: true, name: "[target] Invalid time string(12:60:00)"}, - {conditions: {required: true, value: "12:00:60"}, expected: true, name: "[target] Invalid time string(12:00:60)"}, - {conditions: {required: true, value: "12:00:00:001"}, expected: true, name: "[target] Invalid time string(12:00:00:001)"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: 1234567}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a number(1234567)"}, + {conditions: {required: true, value: new Date()}, expected: true, expectedImmutable: false, name: "[target] The value attribute is a time object"}, + {conditions: {required: true, value: "25:00:00"}, expected: true, expectedImmutable: false, name: "[target] Invalid time string(25:00:00)"}, + {conditions: {required: true, value: "12:60:00"}, expected: true, expectedImmutable: false, name: "[target] Invalid time string(12:60:00)"}, + {conditions: {required: true, value: "12:00:60"}, expected: true, expectedImmutable: false, name: "[target] Invalid time string(12:00:60)"}, + {conditions: {required: true, value: "12:00:00:001"}, expected: true, expectedImmutable: false, name: "[target] Invalid time string(12:00:00:001)"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -110,11 +110,11 @@ {conditions: {required: true, value: "123.01e-10"}, expected: false, name: "[target] Value is a number in scientific notation form(e is in lowercase)"}, {conditions: {required: true, value: "123.01E+10"}, expected: false, name: "[target] Value is a number in scientific notation form(E is in uppercase)"}, {conditions: {required: true, value: "-0"}, expected: false, name: "[target] Value is -0"}, - {conditions: {required: true, value: " 123 "}, expected: true, name: "[target] Value is a number with some white spaces"}, - {conditions: {required: true, value: Math.pow(2, 1024)}, expected: true, name: "[target] Value is Math.pow(2, 1024)"}, - {conditions: {required: true, value: Math.pow(-2, 1024)}, expected: true, name: "[target] Value is Math.pow(-2, 1024)"}, - {conditions: {required: true, value: "abc"}, expected: true, name: "[target] Value is a string that cannot be converted to a number"}, - {conditions: {required: true, value: ""}, expected: true, name: "[target] The value attribute is empty string"} + {conditions: {required: true, value: " 123 "}, expected: true, expectedImmutable: false, name: "[target] Value is a number with some white spaces"}, + {conditions: {required: true, value: Math.pow(2, 1024)}, expected: true, expectedImmutable: false, name: "[target] Value is Math.pow(2, 1024)"}, + {conditions: {required: true, value: Math.pow(-2, 1024)}, expected: true, expectedImmutable: false, name: "[target] Value is Math.pow(-2, 1024)"}, + {conditions: {required: true, value: "abc"}, expected: true, expectedImmutable: false, name: "[target] Value is a string that cannot be converted to a number"}, + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value attribute is empty string"} ] }, { @@ -159,7 +159,7 @@ testData: [ {conditions: {required: false, value: ""}, expected: false, name: "[target] The required attribute is not set"}, {conditions: {required: true, value: "abc"}, expected: false, name: "[target] The value is not empty"}, - {conditions: {required: true, value: ""}, expected: true , name: "[target] The value is empty"} + {conditions: {required: true, value: ""}, expected: true, expectedImmutable: false, name: "[target] The value is empty"} ] } ]; diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js index 48c3a5b40e6..33508fb3289 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js +++ b/tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js @@ -5,8 +5,8 @@ var validator = { test(function() { self.pre_check(ctl, 'tooLong'); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.tooLong, 'The validity.tooLong should be true' + condStr); @@ -23,8 +23,8 @@ var validator = { test(function () { self.pre_check(ctl, "tooShort"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.tooShort, 'The validity.tooShort should be true' + condStr); @@ -41,8 +41,8 @@ var validator = { test(function () { self.pre_check(ctl, "patternMismatch"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.patternMismatch, 'The validity.patternMismatch should be true' + condStr); @@ -59,8 +59,8 @@ var validator = { test(function () { self.pre_check(ctl, "valueMissing"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.valueMissing, 'The validity.valueMissing should be true' + condStr); @@ -77,8 +77,8 @@ var validator = { test(function () { self.pre_check(ctl, "typeMismatch"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.typeMismatch, 'The validity.typeMismatch should be true' + condStr); @@ -95,8 +95,8 @@ var validator = { test(function () { self.pre_check(ctl, "rangeOverflow"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.rangeOverflow, 'The validity.rangeOverflow should be true' + condStr); @@ -113,8 +113,8 @@ var validator = { test(function () { self.pre_check(ctl, "rangeUnderflow"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.rangeUnderflow, 'The validity.rangeUnderflow should be true' + condStr); @@ -131,8 +131,8 @@ var validator = { test(function () { self.pre_check(ctl, "stepMismatch"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.stepMismatch, 'The validity.stepMismatch should be true' + condStr); @@ -149,8 +149,8 @@ var validator = { test(function () { self.pre_check(ctl, "badInput"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.badInput, 'The validity.badInput should be true' + condStr); @@ -167,14 +167,14 @@ var validator = { test(function () { self.pre_check(ctl, "customError"); self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) { + const {ctl, expected, condStr} = val; + if (expected) { assert_true( ctl.validity.customError, 'The validity.customError attribute should be true' + condStr); // validationMessage returns the empty string if ctl is barred from - // constraint validation, which happens if ctl is disabled. - if (ctl.disabled) { + // constraint validation, which happens if ctl is disabled or readOnly. + if (ctl.disabled || ctl.readOnly) { assert_equals( ctl.validationMessage, '', 'The validationMessage attribute must be empty' + condStr); @@ -200,8 +200,8 @@ var validator = { var self = this; test(function () { self.iterate_over(ctl, data).forEach(function(val) { - const {ctl, data, condStr} = val; - if (data.expected) + const {ctl, expected, condStr} = val; + if (expected) assert_true( ctl.validity.valid, 'The validity.valid should be true' + condStr); @@ -389,39 +389,54 @@ var validator = { }, iterate_over: function(ctl, data) { - // Iterate over normal, disabled, readonly, and both. + // Iterate over normal, disabled, readonly, and both (if applicable). + var ctlNormal = ctl.cloneNode(true); + this.set_conditions(ctlNormal, data.conditions); + if (data.dirty) + this.set_dirty(ctlNormal); + var ctlDisabled = ctl.cloneNode(true); this.set_conditions(ctlDisabled, data.conditions); if (data.dirty) this.set_dirty(ctlDisabled); ctlDisabled.disabled = true; - var ctlReadonly = ctl.cloneNode(true); - this.set_conditions(ctlReadonly, data.conditions); - if (data.dirty) - this.set_dirty(ctlReadonly); - ctlReadonly.readonly = true; + var expectedImmutable = + data.expectedImmutable !== undefined ? data.expectedImmutable : data.expected; - var ctlBoth = ctl.cloneNode(true); - this.set_conditions(ctlBoth, data.conditions); - if (data.dirty) - this.set_dirty(ctlBoth); - ctlBoth.disabled = true; - ctlBoth.readonly = true; - - ctl = ctl.cloneNode(true); - this.set_conditions(ctl, data.conditions); - - return [ - {ctl: ctl, data: data, condStr: '.'}, - {ctl: ctlDisabled, data: data, condStr: ', when control is disabled.'}, - {ctl: ctlReadonly, data: data, condStr: ', when control is readonly.'}, - { + var variants = [ + {ctl: ctlNormal, expected: data.expected, condStr: '.'}, + {ctl: ctlDisabled, expected: expectedImmutable, condStr: ', when control is disabled.'}, + ]; + + if ('readOnly' in ctl) { + var ctlReadonly = ctl.cloneNode(true); + this.set_conditions(ctlReadonly, data.conditions); + if (data.dirty) + this.set_dirty(ctlReadonly); + ctlReadonly.readOnly = true; + + var ctlBoth = ctl.cloneNode(true); + this.set_conditions(ctlBoth, data.conditions); + if (data.dirty) + this.set_dirty(ctlBoth); + ctlBoth.disabled = true; + ctlBoth.readOnly = true; + + variants.push({ + ctl: ctlReadonly, + expected: expectedImmutable, + condStr: ', when control is readonly.' + }); + + variants.push({ ctl: ctlBoth, - data: data, + expected: expectedImmutable, condStr: ', when control is disabled & readonly.' - }, - ] + }); + } + + return variants; }, run_test: function(testee, method) { diff --git a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js index 4bafc9b0ad8..2c1724b7592 100644 --- a/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js +++ b/tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js @@ -170,6 +170,7 @@ var WebNFCTest = (() => { this.reading_messages_ = []; this.operations_suspended_ = false; this.is_formatted_tag_ = false; + this.data_transfer_failed_ = false; } // NFC delegate functions. @@ -192,6 +193,9 @@ var WebNFCTest = (() => { // Resolves with NotAllowedError if there are NDEF records on the device // and overwrite is false. resolve(createNDEFError(device.mojom.NDEFErrorType.NOT_ALLOWED)); + } else if (this.data_transfer_failed_) { + // Resolves with NetworkError if data transfer fails. + resolve(createNDEFError(device.mojom.NDEFErrorType.IO_ERROR)); } else { resolve(createNDEFError(null)); } @@ -290,6 +294,7 @@ var WebNFCTest = (() => { this.operations_suspended_ = false; this.cancelPendingPushOperation(); this.is_formatted_tag_ = false; + this.data_transfer_failed_ = false; } cancelPendingPushOperation() { @@ -365,6 +370,10 @@ var WebNFCTest = (() => { setIsFormattedTag(isFormatted) { this.is_formatted_tag_ = isFormatted; } + + simulateDataTransferFails() { + this.data_transfer_failed_ = true; + } } let testInternal = { diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py index 33b5d51e54e..fee528071f6 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py @@ -8,7 +8,8 @@ from .base import (get_free_port, cmd_arg, browser_command) from ..executors.executormarionette import (MarionetteTestharnessExecutor, # noqa: F401 - MarionetteRefTestExecutor) # noqa: F401 + MarionetteRefTestExecutor, # noqa: F401 + MarionetteCrashtestExecutor) # noqa: F401 from .firefox import (get_timeout_multiplier, # noqa: F401 run_info_extras as fx_run_info_extras, update_properties, # noqa: F401 @@ -20,7 +21,8 @@ __wptrunner__ = {"product": "firefox_android", "check_args": "check_args", "browser": "FirefoxAndroidBrowser", "executor": {"testharness": "MarionetteTestharnessExecutor", - "reftest": "MarionetteRefTestExecutor"}, + "reftest": "MarionetteRefTestExecutor", + "crashtest": "MarionetteCrashtestExecutor"}, "browser_kwargs": "browser_kwargs", "executor_kwargs": "executor_kwargs", "env_extras": "env_extras", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 59f7e865a5b..01306397db7 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -991,15 +991,16 @@ class MarionetteCrashtestExecutor(CrashtestExecutor): if not success: status = data[0] + extra = None if self.debug and (success or status not in ("CRASH", "INTERNAL-ERROR")): assertion_count = self.protocol.asserts.get() if assertion_count is not None: - data["extra"] = {"assertion_count": assertion_count} + extra = {"assertion_count": assertion_count} if success: return self.convert_result(test, data) - return (test.result_cls(**data), []) + return (test.result_cls(extra=extra, *data), []) def do_crashtest(self, protocol, url, timeout): if self.protocol.coverage.is_enabled: diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/test-wait.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/test-wait.js index 8a7edb79d62..ad08ad7d76f 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/test-wait.js +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/test-wait.js @@ -32,7 +32,8 @@ function wait_paints() { } function screenshot_if_ready() { - if (root.classList.contains("%(classname)s") && + if (root && + root.classList.contains("%(classname)s") && observer === null) { observer = new MutationObserver(wait_paints); observer.observe(root, {attributes: true}); diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/font.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/font.py index 6647a8580be..daf0a1c1bfa 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/font.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/font.py @@ -1,5 +1,4 @@ import ctypes -import logging import os import platform import plistlib @@ -12,7 +11,8 @@ SYSTEM = platform.system().lower() class FontInstaller(object): - def __init__(self, font_dir=None, **fonts): + def __init__(self, logger, font_dir=None, **fonts): + self.logger = logger self.font_dir = font_dir self.installed_fonts = False self.created_dir = False @@ -26,14 +26,13 @@ class FontInstaller(object): font_name = font_path.split('/')[-1] install = getattr(self, 'install_%s_font' % SYSTEM, None) if not install: - logging.warning('Font installation not supported on %s', - SYSTEM) + self.logger.warning('Font installation not supported on %s' % SYSTEM) return False if install(font_name, font_path): self.installed_fonts = True - logging.info('Installed font: %s', font_name) + self.logger.info('Installed font: %s' % font_name) else: - logging.warning('Unable to install font: %s', font_name) + self.logger.warning('Unable to install font: %s' % font_name) def __exit__(self, exc_type, exc_val, exc_tb): if not self.installed_fonts: @@ -43,12 +42,12 @@ class FontInstaller(object): font_name = font_path.split('/')[-1] remove = getattr(self, 'remove_%s_font' % SYSTEM, None) if not remove: - logging.warning('Font removal not supported on %s', SYSTEM) + self.logger.warning('Font removal not supported on %s' % SYSTEM) return False if remove(font_name, font_path): - logging.info('Removed font: %s', font_name) + self.logger.info('Removed font: %s' % font_name) else: - logging.warning('Unable to remove font: %s', font_name) + self.logger.warning('Unable to remove font: %s' % font_name) def install_linux_font(self, font_name, font_path): if not self.font_dir: @@ -62,7 +61,7 @@ class FontInstaller(object): fc_cache_returncode = call('fc-cache') return not fc_cache_returncode except OSError: # If fontconfig doesn't exist, return False - logging.error('fontconfig not available on this Linux system.') + self.logger.error('fontconfig not available on this Linux system.') return False def install_darwin_font(self, font_name, font_path): @@ -110,7 +109,7 @@ class FontInstaller(object): fc_cache_returncode = call('fc-cache') return not fc_cache_returncode except OSError: # If fontconfig doesn't exist, return False - logging.error('fontconfig not available on this Linux system.') + self.logger.error('fontconfig not available on this Linux system.') return False def remove_darwin_font(self, font_name, _): diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py index 7409dc26560..75ce104c7ce 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py @@ -150,6 +150,7 @@ def run_tests(config, test_paths, product, **kwargs): if kwargs["install_fonts"]: env_extras.append(FontInstaller( + logger, font_dir=kwargs["font_dir"], ahem=os.path.join(test_paths["/"]["tests_path"], "fonts/Ahem.ttf") )) diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html index a9b1d751617..17b9fdb8569 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html @@ -207,4 +207,27 @@ nfc_test(async (t, mockNFC) => { }, "Test that NDEFReader.onreading should be fired on an unformatted NFC tag \ with empty records array for NDEFMessage."); +nfc_test(async (t, mockNFC) => { + const reader = new NDEFReader(); + const controller = new AbortController(); + const message = createMessage([createTextRecord(test_text_data), + createMimeRecordFromJson(test_json_data), + createMimeRecord(test_buffer_data), + createUnknownRecord(test_buffer_data), + createUrlRecord(test_url_data), + createUrlRecord(test_url_data, true), + createRecord('w3.org:xyz', test_buffer_data)], + test_message_origin); + const readerWatcher = new EventWatcher(t, reader, ["reading", "error"]); + const promise = readerWatcher.wait_for("reading").then(event => { + assert_equals(event.serialNumber, fake_tag_serial_number); + assertWebNDEFMessagesEqual(event.message, new NDEFMessage(message)); + controller.abort(); + }); + await reader.scan({signal : controller.signal}); + + mockNFC.setReadingMessage(message); + await promise; +}, "Test that reading message with multiple records should succeed."); + </script> diff --git a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html index 4ff0af8fb0b..cb6b3941410 100644 --- a/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html +++ b/tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html @@ -276,7 +276,7 @@ nfc_test(async () => { nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); - let message = createMessage([createTextRecord(test_text_data), + const message = createMessage([createTextRecord(test_text_data), createMimeRecordFromJson(test_json_data), createMimeRecord(test_buffer_data), createUnknownRecord(test_buffer_data), @@ -308,9 +308,12 @@ nfc_test(async (t, mockNFC) => { assertNDEFMessagesEqual(buffer_view, mockNFC.pushedMessage()); }, "Test that NDEFWriter.push succeeds when message is ArrayBufferView."); -nfc_test(async () => { +nfc_test(async (t, mockNFC) => { const writer = new NDEFWriter(); await writer.push(createMessage([createRecord('empty')])); + const receivedMessage = mockNFC.pushedMessage(); + assert_equals(receivedMessage.data.length, 1); + assert_equals(receivedMessage.data[0].recordType, 'empty', 'recordType'); }, "NDEFWriter.push with 'empty' record should succeed."); nfc_test(async (t, mockNFC) => { @@ -433,4 +436,11 @@ nfc_test(async (t, mockNFC) => { await promise_rejects(t, 'NotAllowedError', p); }, "NDEFWriter.push should fail when there are NDEF records on the NFC device \ and NDEFPushOptions.overwrite is false."); + +nfc_test(async (t, mockNFC) => { + const writer = new NDEFWriter(); + mockNFC.simulateDataTransferFails(); + await promise_rejects(t, 'NetworkError', writer.push(test_text_data)); +}, "NDEFWriter.push should fail with NetworkError when NFC data transfer fails."); + </script> |