aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout_2020/display_list.rs145
-rw-r--r--components/script/dom/bindings/trace.rs9
-rw-r--r--components/script/dom/globalscope.rs30
-rw-r--r--components/script/dom/htmlscriptelement.rs270
-rw-r--r--components/script/dom/promise.rs2
-rw-r--r--components/script/dom/webidls/HTMLScriptElement.webidl2
-rw-r--r--components/script/lib.rs2
-rw-r--r--components/script/script_module.rs1430
-rw-r--r--components/script/script_runtime.rs3
-rw-r--r--components/style/properties/longhands/border.mako.rs2
-rw-r--r--components/style/properties/shorthands/border.mako.rs2
-rw-r--r--python/servo/command_base.py9
-rw-r--r--tests/wpt/include.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json48
-rw-r--r--tests/wpt/metadata/css/cssom-view/elementFromPoint-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom-view/getClientRects-inline-inline-child.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-absolute.html.ini973
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-fixed.html.ini973
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-nobox.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-relative.html.ini757
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-static.html.ini2
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky-container-for-abspos.html.ini757
-rw-r--r--tests/wpt/metadata/css/cssom/getComputedStyle-insets-sticky.html.ini757
-rw-r--r--tests/wpt/metadata/fetch/content-type/response.window.js.ini13
-rw-r--r--tests/wpt/metadata/fetch/nosniff/parsing-nosniff.window.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/security/embedded-credentials.tentative.sub.html.ini7
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_3.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_2.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/creating_browsing_context_test_01.html.ini4
-rw-r--r--tests/wpt/metadata/html/dom/idlharness.https.html.ini6
-rw-r--r--tests/wpt/metadata/html/dom/reflection-misc.html.ini114
-rw-r--r--tests/wpt/metadata/html/interaction/focus/the-autofocus-attribute/skip-document-with-fragment.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe_sandbox_popups_escaping-3.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/css-module/utf8.tentative.html.ini9
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-01.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-02.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/charset-03.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-1.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-2.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/choice-of-error-3.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-1.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/compilation-error-2.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/credentials.sub.html.ini1
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/crossorigin.html.ini32
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/currentScript-null.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/custom-element-exception.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-1.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/duplicated-imports-2.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-and-slow-dependency.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-2.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/error-type-3.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/errorhandling.html.ini18
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-1.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-2.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-3.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/evaluation-error-4.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/execorder.html.ini21
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-1.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/fetch-error-2.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/import-subgraph-404.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/imports.html.ini15
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inactive-context-import.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/inline-async-execorder.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-1.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-2.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-3.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-4.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-5.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-6.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-7.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/instantiation-error-8.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/integrity.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-namespace-request.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/late-star-export-request.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events-inline.html.ini26
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/load-error-events.html.ini27
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-in-xhtml.xhtml.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-1.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/module-vs-script-2.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/nomodule-attribute.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-no-referrer.sub.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin-when-cross-origin.sub.html.ini19
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-origin.sub.html.ini19
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-same-origin.sub.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/referrer-unsafe-url.sub.html.ini19
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/script-for-event.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-1.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/single-evaluation-2.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/slow-cycle.html.ini3
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/module/specifier-error.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-reflect.html.ini32
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-async-classic-script.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-external-module-script.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-classic-scripts.html.ini8
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-inline-module-script.html.ini5
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/nomodule-set-on-synchronously-loaded-classic-scripts.html.ini5
-rw-r--r--tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini3
-rw-r--r--tests/wpt/metadata/resource-timing/crossorigin-sandwich-TAO.sub.html.ini1
-rw-r--r--tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/change-intrinsic-width.html14
-rw-r--r--tests/wpt/web-platform-tests/css/cssom-view/getClientRects-inline-inline-child.html52
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valid.html20
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/constraints/form-validation-validity-valueMissing.html76
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/constraints/support/validator.js111
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/nfc-mock.js9
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox_android.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/test-wait.js3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/font.py21
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py1
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFReader_scan.https.html23
-rw-r--r--tests/wpt/web-platform-tests/web-nfc/NDEFWriter_push.https.html14
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>