aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock10
-rw-r--r--components/canvas/canvas_data.rs27
-rw-r--r--components/canvas/webgl_thread.rs45
-rw-r--r--components/gfx/font_cache_thread.rs16
-rw-r--r--components/layout/display_list/builder.rs101
-rw-r--r--components/layout/display_list/items.rs10
-rw-r--r--components/layout/display_list/webrender_helpers.rs41
-rw-r--r--components/layout/fragment.rs11
-rw-r--r--components/layout/table_rowgroup.rs2
-rw-r--r--components/layout/table_wrapper.rs2
-rw-r--r--components/layout/tests/size_of.rs2
-rw-r--r--components/malloc_size_of/lib.rs2
-rw-r--r--components/net/image_cache.rs9
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-009.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-010.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-011.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-012.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-017.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-018.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-019.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-020.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-115.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-116.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-121.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-122.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-173.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-174.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-175.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-176.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-197.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-198.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-199.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-200.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-201.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-202.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-203.xht.ini5
-rw-r--r--tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-204.xht.ini5
-rw-r--r--tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html.ini4
-rw-r--r--tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-sibling-with-3D-transform.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-001.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-002.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-003.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-004.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-005.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-006.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-007.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-008.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-009.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-010.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-012.html.ini5
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-013.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-014.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-015.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-016.html.ini4
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-017.html.ini5
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-018.html.ini5
-rw-r--r--tests/wpt/metadata/css/css-transforms/transform-input-019.html.ini4
57 files changed, 359 insertions, 121 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 8fca3b0d720..91783d22f14 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2179,7 +2179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "plane-split"
-version = "0.8.0"
+version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"binary-space-partition 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3465,7 +3465,7 @@ dependencies = [
[[package]]
name = "webrender"
version = "0.57.2"
-source = "git+https://github.com/servo/webrender#6931a25295d17d897a9f77798392bdde66132154"
+source = "git+https://github.com/servo/webrender#db26bc0e86bd5585ee8b7426aef9f3443b005fdb"
dependencies = [
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"base64 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3485,7 +3485,7 @@ dependencies = [
"lazy_static 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
"num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)",
- "plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "plane-split 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ron 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3500,7 +3500,7 @@ dependencies = [
[[package]]
name = "webrender_api"
version = "0.57.2"
-source = "git+https://github.com/servo/webrender#6931a25295d17d897a9f77798392bdde66132154"
+source = "git+https://github.com/servo/webrender#db26bc0e86bd5585ee8b7426aef9f3443b005fdb"
dependencies = [
"app_units 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"bincode 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -3893,7 +3893,7 @@ dependencies = [
"checksum phf_generator 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "6b07ffcc532ccc85e3afc45865469bf5d9e4ef5bfcf9622e3cfe80c2d275ec03"
"checksum phf_shared 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)" = "07e24b0ca9643bdecd0632f2b3da6b1b89bbb0030e0b992afc1113b23a7bc2f2"
"checksum pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "3a8b4c6b8165cd1a1cd4b9b120978131389f64bdaf456435caa41e630edba903"
-"checksum plane-split 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "69c557e11e3a1533bc969fa596e5011e1d9f76dd61cd102ef942c9f8654b17a2"
+"checksum plane-split 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7079b8485b4f9d9560dee7a69ca8f6ca781f9f284ff9d2bf27255d440b03e4af"
"checksum png 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
"checksum proc-macro2 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "77997c53ae6edd6d187fec07ec41b207063b5ee6f33680e9fa86d405cdd313d4"
diff --git a/components/canvas/canvas_data.rs b/components/canvas/canvas_data.rs
index 6e5d0e679dc..28aec9f5dd4 100644
--- a/components/canvas/canvas_data.rs
+++ b/components/canvas/canvas_data.rs
@@ -416,8 +416,7 @@ impl<'a> CanvasData<'a> {
let size = self.drawtarget.get_size();
let descriptor = webrender_api::ImageDescriptor {
- width: size.width as u32,
- height: size.height as u32,
+ size: webrender_api::DeviceUintSize::new(size.width as u32, size.height as u32),
stride: None,
format: webrender_api::ImageFormat::BGRA8,
offset: 0,
@@ -426,31 +425,25 @@ impl<'a> CanvasData<'a> {
};
let data = webrender_api::ImageData::Raw(Arc::new(element.into()));
- let mut updates = webrender_api::ResourceUpdates::new();
+ let mut txn = webrender_api::Transaction::new();
match self.image_key {
Some(image_key) => {
debug!("Updating image {:?}.", image_key);
- updates.update_image(image_key,
- descriptor,
- data,
- None);
+ txn.update_image(image_key, descriptor, data, None);
}
None => {
self.image_key = Some(self.webrender_api.generate_image_key());
debug!("New image {:?}.", self.image_key);
- updates.add_image(self.image_key.unwrap(),
- descriptor,
- data,
- None);
+ txn.add_image(self.image_key.unwrap(), descriptor, data, None);
}
}
if let Some(image_key) = mem::replace(&mut self.very_old_image_key, self.old_image_key.take()) {
- updates.delete_image(image_key);
+ txn.delete_image(image_key);
}
- self.webrender_api.update_resources(updates);
+ self.webrender_api.update_resources(txn.resource_updates);
let data = CanvasImageData {
image_key: self.image_key.unwrap(),
@@ -647,16 +640,16 @@ impl<'a> CanvasData<'a> {
impl<'a> Drop for CanvasData<'a> {
fn drop(&mut self) {
- let mut updates = webrender_api::ResourceUpdates::new();
+ let mut txn = webrender_api::Transaction::new();
if let Some(image_key) = self.old_image_key.take() {
- updates.delete_image(image_key);
+ txn.delete_image(image_key);
}
if let Some(image_key) = self.very_old_image_key.take() {
- updates.delete_image(image_key);
+ txn.delete_image(image_key);
}
- self.webrender_api.update_resources(updates);
+ self.webrender_api.update_resources(txn.resource_updates);
}
}
diff --git a/components/canvas/webgl_thread.rs b/components/canvas/webgl_thread.rs
index 7b0b120d037..8ab129680de 100644
--- a/components/canvas/webgl_thread.rs
+++ b/components/canvas/webgl_thread.rs
@@ -268,13 +268,13 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
fn remove_webgl_context(&mut self, context_id: WebGLContextId) {
// Release webrender image keys.
if let Some(info) = self.cached_context_info.remove(&context_id) {
- let mut updates = webrender_api::ResourceUpdates::new();
+ let mut txn = webrender_api::Transaction::new();
if let Some(image_key) = info.image_key {
- updates.delete_image(image_key);
+ txn.delete_image(image_key);
}
- self.webrender_api.update_resources(updates)
+ self.webrender_api.update_resources(txn.resource_updates)
}
// Release GL context.
@@ -423,12 +423,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
let data = Self::external_image_data(context_id);
let image_key = webrender_api.generate_image_key();
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.add_image(image_key,
- descriptor,
- data,
- None);
- webrender_api.update_resources(updates);
+ let mut txn = webrender_api::Transaction::new();
+ txn.add_image(image_key, descriptor, data, None);
+ webrender_api.update_resources(txn.resource_updates);
image_key
}
@@ -442,12 +439,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
let descriptor = Self::image_descriptor(size, alpha);
let data = Self::external_image_data(context_id);
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.update_image(image_key,
- descriptor,
- data,
- None);
- webrender_api.update_resources(updates);
+ let mut txn = webrender_api::Transaction::new();
+ txn.update_image(image_key, descriptor, data, None);
+ webrender_api.update_resources(txn.resource_updates);
}
/// Creates a `webrender_api::ImageKey` that uses raw pixels.
@@ -459,12 +453,9 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
let data = webrender_api::ImageData::new(data);
let image_key = webrender_api.generate_image_key();
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.add_image(image_key,
- descriptor,
- data,
- None);
- webrender_api.update_resources(updates);
+ let mut txn = webrender_api::Transaction::new();
+ txn.add_image(image_key, descriptor, data, None);
+ webrender_api.update_resources(txn.resource_updates);
image_key
}
@@ -478,19 +469,15 @@ impl<VR: WebVRRenderHandler + 'static, OB: WebGLThreadObserver> WebGLThread<VR,
let descriptor = Self::image_descriptor(size, alpha);
let data = webrender_api::ImageData::new(data);
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.update_image(image_key,
- descriptor,
- data,
- None);
- webrender_api.update_resources(updates);
+ let mut txn = webrender_api::Transaction::new();
+ txn.update_image(image_key, descriptor, data, None);
+ webrender_api.update_resources(txn.resource_updates);
}
/// Helper function to create a `webrender_api::ImageDescriptor`.
fn image_descriptor(size: Size2D<i32>, alpha: bool) -> webrender_api::ImageDescriptor {
webrender_api::ImageDescriptor {
- width: size.width as u32,
- height: size.height as u32,
+ size: webrender_api::DeviceUintSize::new(size.width as u32, size.height as u32),
stride: None,
format: webrender_api::ImageFormat::BGRA8,
offset: 0,
diff --git a/components/gfx/font_cache_thread.rs b/components/gfx/font_cache_thread.rs
index df04519e90b..334a1bb41ec 100644
--- a/components/gfx/font_cache_thread.rs
+++ b/components/gfx/font_cache_thread.rs
@@ -177,14 +177,14 @@ impl FontCache {
.entry((font_key, size))
.or_insert_with(|| {
let key = webrender_api.generate_font_instance_key();
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.add_font_instance(key,
+ let mut txn = webrender_api::Transaction::new();
+ txn.add_font_instance(key,
font_key,
size,
None,
None,
Vec::new());
- webrender_api.update_resources(updates);
+ webrender_api.update_resources(txn.resource_updates);
key
});
@@ -373,13 +373,13 @@ impl FontCache {
let font_key = *webrender_fonts.entry(template.identifier.clone()).or_insert_with(|| {
let font_key = webrender_api.generate_font_key();
- let mut updates = webrender_api::ResourceUpdates::new();
+ let mut txn = webrender_api::Transaction::new();
match (template.bytes_if_in_memory(), template.native_font()) {
- (Some(bytes), _) => updates.add_raw_font(font_key, bytes, 0),
- (None, Some(native_font)) => updates.add_native_font(font_key, native_font),
- (None, None) => updates.add_raw_font(font_key, template.bytes().clone(), 0),
+ (Some(bytes), _) => txn.add_raw_font(font_key, bytes, 0),
+ (None, Some(native_font)) => txn.add_native_font(font_key, native_font),
+ (None, None) => txn.add_raw_font(font_key, template.bytes().clone(), 0),
}
- webrender_api.update_resources(updates);
+ webrender_api.update_resources(txn.resource_updates);
font_key
});
diff --git a/components/layout/display_list/builder.rs b/components/layout/display_list/builder.rs
index d8467958038..3887f141f52 100644
--- a/components/layout/display_list/builder.rs
+++ b/components/layout/display_list/builder.rs
@@ -73,14 +73,19 @@ use style_traits::cursor::CursorKind;
use table_cell::CollapsedBordersForCell;
use webrender_api::{self, BorderRadius, BorderSide, BoxShadowClipMode, ColorF, ExternalScrollId};
use webrender_api::{FilterOp, GlyphInstance, ImageRendering, LayoutRect, LayoutSize};
-use webrender_api::{LayoutTransform, LayoutVector2D, LineStyle, NormalBorder, ScrollPolicy};
-use webrender_api::{ScrollSensitivity, StickyOffsetBounds};
+use webrender_api::{LayoutTransform, LayoutVector2D, LineStyle, NormalBorder, ScrollSensitivity};
+use webrender_api::StickyOffsetBounds;
fn establishes_containing_block_for_absolute(
flags: StackingContextCollectionFlags,
positioning: StylePosition,
+ established_reference_frame: bool,
) -> bool {
- !flags.contains(StackingContextCollectionFlags::NEVER_CREATES_CONTAINING_BLOCK) &&
+ if established_reference_frame {
+ return true;
+ }
+
+ !flags.contains(StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK) &&
StylePosition::Static != positioning
}
@@ -576,6 +581,12 @@ pub trait FragmentDisplayListBuilding {
state: &mut StackingContextCollectionState,
) -> bool;
+ fn create_stacking_context_for_inline_block(
+ &mut self,
+ base: &BaseFlow,
+ state: &mut StackingContextCollectionState,
+ ) -> bool;
+
/// Adds the display items necessary to paint the background of this fragment to the display
/// list if necessary.
fn build_display_list_for_background_if_applicable(
@@ -760,7 +771,6 @@ pub trait FragmentDisplayListBuilding {
&self,
id: StackingContextId,
base_flow: &BaseFlow,
- scroll_policy: ScrollPolicy,
context_type: StackingContextType,
established_reference_frame: Option<ClipScrollNodeIndex>,
parent_clipping_and_scrolling: ClippingAndScrolling,
@@ -817,6 +827,35 @@ impl FragmentDisplayListBuilding for Fragment {
}
}
+ fn create_stacking_context_for_inline_block(
+ &mut self,
+ base: &BaseFlow,
+ state: &mut StackingContextCollectionState,
+ ) -> bool {
+ self.stacking_context_id = state.allocate_stacking_context_info(StackingContextType::Real);
+
+ let established_reference_frame = if self.can_establish_reference_frame() {
+ // WebRender currently creates reference frames automatically, so just add
+ // a placeholder node to allocate a ClipScrollNodeIndex for this reference frame.
+ self.established_reference_frame =
+ Some(state.add_clip_scroll_node(ClipScrollNode::placeholder()));
+ self.established_reference_frame
+ } else {
+ None
+ };
+
+ let current_stacking_context_id = state.current_stacking_context_id;
+ let stacking_context = self.create_stacking_context(
+ self.stacking_context_id,
+ &base,
+ StackingContextType::Real,
+ established_reference_frame,
+ state.current_clipping_and_scrolling,
+ );
+ state.add_stacking_context(current_stacking_context_id, stacking_context);
+ true
+ }
+
fn build_display_list_for_background_if_applicable(
&self,
state: &mut DisplayListBuildState,
@@ -1563,6 +1602,11 @@ impl FragmentDisplayListBuilding for Fragment {
display_list_section: DisplayListSection,
clip: Rect<Au>,
) {
+ let previous_clipping_and_scrolling = state.current_clipping_and_scrolling;
+ if let Some(index) = self.established_reference_frame {
+ state.current_clipping_and_scrolling = ClippingAndScrolling::simple(index);
+ }
+
self.restyle_damage.remove(ServoRestyleDamage::REPAINT);
self.build_display_list_no_damage(
state,
@@ -1570,7 +1614,9 @@ impl FragmentDisplayListBuilding for Fragment {
border_painting_mode,
display_list_section,
clip,
- )
+ );
+
+ state.current_clipping_and_scrolling = previous_clipping_and_scrolling;
}
fn build_display_list_no_damage(
@@ -1887,7 +1933,6 @@ impl FragmentDisplayListBuilding for Fragment {
&self,
id: StackingContextId,
base_flow: &BaseFlow,
- scroll_policy: ScrollPolicy,
context_type: StackingContextType,
established_reference_frame: Option<ClipScrollNodeIndex>,
parent_clipping_and_scrolling: ClippingAndScrolling,
@@ -1931,7 +1976,6 @@ impl FragmentDisplayListBuilding for Fragment {
self.transform_matrix(&border_box),
self.style().get_used_transform_style().to_layout(),
self.perspective_matrix(&border_box),
- scroll_policy,
parent_clipping_and_scrolling,
established_reference_frame,
)
@@ -2128,7 +2172,7 @@ impl FragmentDisplayListBuilding for Fragment {
bitflags! {
pub struct StackingContextCollectionFlags: u8 {
/// This flow never establishes a containing block.
- const NEVER_CREATES_CONTAINING_BLOCK = 0b001;
+ const POSITION_NEVER_CREATES_CONTAINING_BLOCK = 0b001;
/// This flow never creates a ClipScrollNode.
const NEVER_CREATES_CLIP_SCROLL_NODE = 0b010;
/// This flow never creates a stacking context.
@@ -2406,7 +2450,11 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
flags,
);
- if establishes_containing_block_for_absolute(flags, self.positioning()) {
+ if establishes_containing_block_for_absolute(
+ flags,
+ self.positioning(),
+ established_reference_frame.is_some()
+ ) {
state.containing_block_clipping_and_scrolling = state.current_clipping_and_scrolling;
}
@@ -2495,7 +2543,7 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
// We keep track of our position so that any stickily positioned elements can
// properly determine the extent of their movement relative to scrolling containers.
- if !flags.contains(StackingContextCollectionFlags::NEVER_CREATES_CONTAINING_BLOCK) {
+ if !flags.contains(StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK) {
let border_box = if self.fragment.establishes_stacking_context() {
stacking_relative_border_box
} else {
@@ -2713,7 +2761,6 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
let new_context = self.fragment.create_stacking_context(
self.base.stacking_context_id,
&self.base,
- ScrollPolicy::Scrollable,
stacking_context_type,
None,
parent_clipping_and_scrolling,
@@ -2747,7 +2794,6 @@ impl BlockFlowDisplayListBuilding for BlockFlow {
let stacking_context = self.fragment.create_stacking_context(
self.base.stacking_context_id,
&self.base,
- ScrollPolicy::Scrollable,
StackingContextType::Real,
established_reference_frame,
parent_clipping_and_scrolling,
@@ -2866,37 +2912,34 @@ impl InlineFlowDisplayListBuilding for InlineFlow {
.cloned()
.unwrap_or_else(Rect::max_rect);
+ let previous_cb_clipping_and_scrolling = state.containing_block_clipping_and_scrolling;
+
for fragment in self.fragments.fragments.iter_mut() {
- let previous_cb_clipping_and_scrolling = state.containing_block_clipping_and_scrolling;
+ state.containing_block_clipping_and_scrolling = previous_cb_clipping_and_scrolling;
+
if establishes_containing_block_for_absolute(
StackingContextCollectionFlags::empty(),
fragment.style.get_box().position,
+ false,
) {
state.containing_block_clipping_and_scrolling =
state.current_clipping_and_scrolling;
}
- if !fragment.collect_stacking_contexts_for_blocklike_fragment(state) {
- if fragment.establishes_stacking_context() {
- fragment.stacking_context_id =
- state.allocate_stacking_context_info(StackingContextType::Real);
-
- let current_stacking_context_id = state.current_stacking_context_id;
- let stacking_context = fragment.create_stacking_context(
- fragment.stacking_context_id,
- &self.base,
- ScrollPolicy::Scrollable,
- StackingContextType::Real,
- None,
- state.current_clipping_and_scrolling,
- );
+ // We clear this here, but it might be set again if we create a stacking context for
+ // this fragment.
+ fragment.established_reference_frame = None;
- state.add_stacking_context(current_stacking_context_id, stacking_context);
- } else {
+ if !fragment.collect_stacking_contexts_for_blocklike_fragment(state) {
+ if !fragment.establishes_stacking_context() {
fragment.stacking_context_id = state.current_stacking_context_id;
+ } else {
+ fragment.create_stacking_context_for_inline_block(&self.base, state);
}
}
+ // Reset the containing block clipping and scrolling before each loop iteration,
+ // so we don't pollute subsequent fragments.
state.containing_block_clipping_and_scrolling = previous_cb_clipping_and_scrolling;
}
}
diff --git a/components/layout/display_list/items.rs b/components/layout/display_list/items.rs
index 7d293996c58..1010e8ada5d 100644
--- a/components/layout/display_list/items.rs
+++ b/components/layout/display_list/items.rs
@@ -26,8 +26,8 @@ use webrender_api::{BorderRadius, BorderWidths, BoxShadowClipMode, ClipMode, Col
use webrender_api::{ComplexClipRegion, ExtendMode, ExternalScrollId, FilterOp, FontInstanceKey};
use webrender_api::{GlyphInstance, GradientStop, ImageKey, ImageRendering, LayoutPoint};
use webrender_api::{LayoutRect, LayoutSize, LayoutTransform, LayoutVector2D, LineStyle};
-use webrender_api::{MixBlendMode, NinePatchBorder, NormalBorder, ScrollPolicy, ScrollSensitivity};
-use webrender_api::{Shadow, StickyOffsetBounds, TransformStyle};
+use webrender_api::{MixBlendMode, NinePatchBorder, NormalBorder, ScrollSensitivity, Shadow};
+use webrender_api::{StickyOffsetBounds, TransformStyle};
pub use style::dom::OpaqueNode;
@@ -203,9 +203,6 @@ pub struct StackingContext {
/// The perspective matrix to be applied to children.
pub perspective: Option<LayoutTransform>,
- /// The scroll policy of this layer.
- pub scroll_policy: ScrollPolicy,
-
/// The clip and scroll info for this StackingContext.
pub parent_clipping_and_scrolling: ClippingAndScrolling,
@@ -227,7 +224,6 @@ impl StackingContext {
transform: Option<LayoutTransform>,
transform_style: TransformStyle,
perspective: Option<LayoutTransform>,
- scroll_policy: ScrollPolicy,
parent_clipping_and_scrolling: ClippingAndScrolling,
established_reference_frame: Option<ClipScrollNodeIndex>,
) -> StackingContext {
@@ -242,7 +238,6 @@ impl StackingContext {
transform,
transform_style,
perspective,
- scroll_policy,
parent_clipping_and_scrolling,
established_reference_frame,
}
@@ -261,7 +256,6 @@ impl StackingContext {
None,
TransformStyle::Flat,
None,
- ScrollPolicy::Scrollable,
ClippingAndScrolling::simple(ClipScrollNodeIndex::root_scroll_node()),
None,
)
diff --git a/components/layout/display_list/webrender_helpers.rs b/components/layout/display_list/webrender_helpers.rs
index da66b9c2b80..d056d8c4655 100644
--- a/components/layout/display_list/webrender_helpers.rs
+++ b/components/layout/display_list/webrender_helpers.rs
@@ -7,11 +7,11 @@
// This might be achieved by sharing types between WR and Servo display lists, or
// completely converting layout to directly generate WebRender display lists, for example.
-use display_list::items::{BorderDetails, ClipScrollNode};
-use display_list::items::{ClipScrollNodeIndex, ClipScrollNodeType, DisplayItem};
-use display_list::items::{DisplayList, StackingContextType};
+use display_list::items::{BorderDetails, ClipScrollNode, ClipScrollNodeIndex, ClipScrollNodeType};
+use display_list::items::{DisplayItem, DisplayList, StackingContextType};
use msg::constellation_msg::PipelineId;
use webrender_api::{self, ClipAndScrollInfo, ClipId, DisplayListBuilder, GlyphRasterSpace};
+use webrender_api::LayoutPoint;
pub trait WebRenderDisplayListConverter {
fn convert_to_webrender(&self, pipeline_id: PipelineId) -> DisplayListBuilder;
@@ -213,29 +213,42 @@ impl WebRenderDisplayItemConverter for DisplayItem {
builder.pop_all_shadows();
},
DisplayItem::Iframe(ref item) => {
- builder.push_iframe(&self.prim_info(), item.iframe.to_webrender());
+ builder.push_iframe(&self.prim_info(), item.iframe.to_webrender(), true);
},
DisplayItem::PushStackingContext(ref item) => {
let stacking_context = &item.stacking_context;
debug_assert_eq!(stacking_context.context_type, StackingContextType::Real);
- let reference_frame_clip_id = builder.push_stacking_context(
- &webrender_api::LayoutPrimitiveInfo::new(stacking_context.bounds),
+ let mut info = webrender_api::LayoutPrimitiveInfo::new(stacking_context.bounds);
+ if let Some(frame_index) = stacking_context.established_reference_frame {
+ debug_assert!(
+ stacking_context.transform.is_some() ||
+ stacking_context.perspective.is_some()
+ );
+
+ let clip_id = builder.push_reference_frame(
+ &info.clone(),
+ stacking_context.transform.map(Into::into),
+ stacking_context.perspective,
+ );
+ clip_ids[frame_index.to_index()] = Some(clip_id);
+
+ info.rect.origin = LayoutPoint::zero();
+ info.clip_rect.origin = LayoutPoint::zero();
+ builder.push_clip_id(clip_id);
+ }
+
+ builder.push_stacking_context(
+ &info,
None,
- stacking_context.scroll_policy,
- stacking_context.transform.map(Into::into),
stacking_context.transform_style,
- stacking_context.perspective,
stacking_context.mix_blend_mode,
stacking_context.filters.clone(),
GlyphRasterSpace::Screen,
);
- match (reference_frame_clip_id, stacking_context.established_reference_frame) {
- (Some(webrender_id), Some(frame_index)) =>
- clip_ids[frame_index.to_index()] = Some(webrender_id),
- (None, None) => {},
- _ => warn!("Mismatch between reference frame establishment!"),
+ if stacking_context.established_reference_frame.is_some() {
+ builder.pop_clip_id();
}
},
DisplayItem::PopStackingContext(_) => builder.pop_stacking_context(),
diff --git a/components/layout/fragment.rs b/components/layout/fragment.rs
index b7b3ac07d64..34ef214c275 100644
--- a/components/layout/fragment.rs
+++ b/components/layout/fragment.rs
@@ -11,7 +11,7 @@ use app_units::Au;
use canvas_traits::canvas::{CanvasMsg, CanvasId};
use context::{LayoutContext, with_thread_local_font_context};
use display_list::ToLayout;
-use display_list::items::{BLUR_INFLATION_FACTOR, OpaqueNode};
+use display_list::items::{BLUR_INFLATION_FACTOR, ClipScrollNodeIndex, OpaqueNode};
use euclid::{Point2D, Vector2D, Rect, Size2D};
use floats::ClearType;
use flow::{GetBaseFlow, ImmutableFlowUtils};
@@ -152,6 +152,11 @@ pub struct Fragment {
/// to 0, but it assigned during the collect_stacking_contexts phase of display
/// list construction.
pub stacking_context_id: StackingContextId,
+
+ /// The indices of this Fragment's ClipScrollNode. If this fragment doesn't have a
+ /// `established_reference_frame` assigned, it will use the `clipping_and_scrolling` of the
+ /// parent block.
+ pub established_reference_frame: Option<ClipScrollNodeIndex>,
}
impl Serialize for Fragment {
@@ -633,6 +638,7 @@ impl Fragment {
flags: FragmentFlags::empty(),
debug_id: DebugId::new(),
stacking_context_id: StackingContextId::root(),
+ established_reference_frame: None,
}
}
@@ -662,6 +668,7 @@ impl Fragment {
flags: FragmentFlags::empty(),
debug_id: DebugId::new(),
stacking_context_id: StackingContextId::root(),
+ established_reference_frame: None,
}
}
@@ -687,6 +694,7 @@ impl Fragment {
flags: FragmentFlags::empty(),
debug_id: DebugId::new(),
stacking_context_id: StackingContextId::root(),
+ established_reference_frame: None,
}
}
@@ -715,6 +723,7 @@ impl Fragment {
flags: FragmentFlags::empty(),
debug_id: self.debug_id.clone(),
stacking_context_id: StackingContextId::root(),
+ established_reference_frame: None,
}
}
diff --git a/components/layout/table_rowgroup.rs b/components/layout/table_rowgroup.rs
index cac1657bd43..d11c38cc275 100644
--- a/components/layout/table_rowgroup.rs
+++ b/components/layout/table_rowgroup.rs
@@ -186,7 +186,7 @@ impl Flow for TableRowGroupFlow {
fn collect_stacking_contexts(&mut self, state: &mut StackingContextCollectionState) {
self.block_flow.collect_stacking_contexts_for_block(state,
- StackingContextCollectionFlags::NEVER_CREATES_CONTAINING_BLOCK);
+ StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK);
}
fn repair_style(&mut self, new_style: &::ServoArc<ComputedValues>) {
diff --git a/components/layout/table_wrapper.rs b/components/layout/table_wrapper.rs
index 7336efa41e9..90be14876cc 100644
--- a/components/layout/table_wrapper.rs
+++ b/components/layout/table_wrapper.rs
@@ -464,7 +464,7 @@ impl Flow for TableWrapperFlow {
fn collect_stacking_contexts(&mut self, state: &mut StackingContextCollectionState) {
self.block_flow.collect_stacking_contexts_for_block(
state,
- StackingContextCollectionFlags::NEVER_CREATES_CONTAINING_BLOCK |
+ StackingContextCollectionFlags::POSITION_NEVER_CREATES_CONTAINING_BLOCK |
StackingContextCollectionFlags::NEVER_CREATES_CLIP_SCROLL_NODE);
}
diff --git a/components/layout/tests/size_of.rs b/components/layout/tests/size_of.rs
index 54b5ef39830..f12b0049f4b 100644
--- a/components/layout/tests/size_of.rs
+++ b/components/layout/tests/size_of.rs
@@ -10,5 +10,5 @@ extern crate layout;
use layout::Fragment;
use layout::SpecificFragmentInfo;
-size_of_test!(test_size_of_fragment, Fragment, 160);
+size_of_test!(test_size_of_fragment, Fragment, 176);
size_of_test!(test_size_of_specific_fragment_info, SpecificFragmentInfo, 24);
diff --git a/components/malloc_size_of/lib.rs b/components/malloc_size_of/lib.rs
index b4c7c4232fb..eaec2cb20dc 100644
--- a/components/malloc_size_of/lib.rs
+++ b/components/malloc_size_of/lib.rs
@@ -807,8 +807,6 @@ malloc_size_of_is_0!(webrender_api::NormalBorder);
#[cfg(feature = "webrender_api")]
malloc_size_of_is_0!(webrender_api::RepeatMode);
#[cfg(feature = "webrender_api")]
-malloc_size_of_is_0!(webrender_api::ScrollPolicy);
-#[cfg(feature = "webrender_api")]
malloc_size_of_is_0!(webrender_api::ScrollSensitivity);
#[cfg(feature = "webrender_api")]
malloc_size_of_is_0!(webrender_api::StickyOffsetBounds);
diff --git a/components/net/image_cache.rs b/components/net/image_cache.rs
index 47eb829f962..40ef8041ef7 100644
--- a/components/net/image_cache.rs
+++ b/components/net/image_cache.rs
@@ -71,8 +71,7 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut
}
};
let descriptor = webrender_api::ImageDescriptor {
- width: image.width,
- height: image.height,
+ size: webrender_api::DeviceUintSize::new(image.width, image.height),
stride: None,
format: webrender_api::ImageFormat::BGRA8,
offset: 0,
@@ -81,9 +80,9 @@ fn set_webrender_image_key(webrender_api: &webrender_api::RenderApi, image: &mut
};
let data = webrender_api::ImageData::new(bytes);
let image_key = webrender_api.generate_image_key();
- let mut updates = webrender_api::ResourceUpdates::new();
- updates.add_image(image_key, descriptor, data, None);
- webrender_api.update_resources(updates);
+ let mut txn = webrender_api::Transaction::new();
+ txn.add_image(image_key, descriptor, data, None);
+ webrender_api.update_resources(txn.resource_updates);
image.id = Some(image_key);
}
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-009.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-009.xht.ini
new file mode 100644
index 00000000000..816b1d311bb
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-009.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-009.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-010.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-010.xht.ini
new file mode 100644
index 00000000000..4e7ef0dccde
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-010.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-010.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-011.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-011.xht.ini
new file mode 100644
index 00000000000..9feaf71bd67
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-011.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-011.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-012.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-012.xht.ini
new file mode 100644
index 00000000000..131abdab42c
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-012.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-012.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-017.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-017.xht.ini
new file mode 100644
index 00000000000..f9aef3fab48
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-017.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-017.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-018.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-018.xht.ini
new file mode 100644
index 00000000000..a93fa38e5e5
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-018.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-018.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-019.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-019.xht.ini
new file mode 100644
index 00000000000..5d9cda4afbf
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-019.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-019.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-020.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-020.xht.ini
new file mode 100644
index 00000000000..12947886c19
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-020.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-020.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-115.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-115.xht.ini
new file mode 100644
index 00000000000..fc301f6250d
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-115.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-115.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-116.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-116.xht.ini
new file mode 100644
index 00000000000..89e2d4570ec
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-116.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-116.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-121.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-121.xht.ini
new file mode 100644
index 00000000000..935efb86657
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-121.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-121.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-122.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-122.xht.ini
new file mode 100644
index 00000000000..8a66dfce0d1
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-122.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-122.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-173.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-173.xht.ini
new file mode 100644
index 00000000000..fec735227f6
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-173.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-173.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-174.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-174.xht.ini
new file mode 100644
index 00000000000..e71b0f5e9c6
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-174.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-174.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-175.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-175.xht.ini
new file mode 100644
index 00000000000..4e12000857d
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-175.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-175.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-176.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-176.xht.ini
new file mode 100644
index 00000000000..659c592f01a
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-176.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-176.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-197.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-197.xht.ini
new file mode 100644
index 00000000000..4b83df67c85
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-197.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-197.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-198.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-198.xht.ini
new file mode 100644
index 00000000000..0135b7f4dc7
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-198.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-198.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-199.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-199.xht.ini
new file mode 100644
index 00000000000..51be43ee654
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-199.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-199.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-200.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-200.xht.ini
new file mode 100644
index 00000000000..bafb9882ef4
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-200.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-200.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-201.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-201.xht.ini
new file mode 100644
index 00000000000..79154b48eff
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-201.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-201.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-202.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-202.xht.ini
new file mode 100644
index 00000000000..4fff88dd0da
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-202.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-202.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-203.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-203.xht.ini
new file mode 100644
index 00000000000..d853124bd2e
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-203.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-203.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-204.xht.ini b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-204.xht.ini
new file mode 100644
index 00000000000..a8c92f18dcc
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/tables/table-anonymous-objects-204.xht.ini
@@ -0,0 +1,5 @@
+[table-anonymous-objects-204.xht]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html.ini b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html.ini
new file mode 100644
index 00000000000..e72482e37fa
--- /dev/null
+++ b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-parent-with-text.html.ini
@@ -0,0 +1,4 @@
+[mix-blend-mode-parent-with-text.html]
+ type: reftest
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-sibling-with-3D-transform.html.ini b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-sibling-with-3D-transform.html.ini
new file mode 100644
index 00000000000..47ca5b4ed24
--- /dev/null
+++ b/tests/wpt/metadata/css/compositing/mix-blend-mode/mix-blend-mode-sibling-with-3D-transform.html.ini
@@ -0,0 +1,3 @@
+[mix-blend-mode-sibling-with-3D-transform.html]
+ type: reftest
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-001.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-001.html.ini
new file mode 100644
index 00000000000..bb7775c1f26
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-001.html.ini
@@ -0,0 +1,4 @@
+[transform-input-001.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-002.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-002.html.ini
new file mode 100644
index 00000000000..e340df538c9
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-002.html.ini
@@ -0,0 +1,4 @@
+[transform-input-002.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-003.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-003.html.ini
new file mode 100644
index 00000000000..7bb17627e41
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-003.html.ini
@@ -0,0 +1,4 @@
+[transform-input-003.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-004.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-004.html.ini
new file mode 100644
index 00000000000..12fb0f8c3e6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-004.html.ini
@@ -0,0 +1,4 @@
+[transform-input-004.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-005.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-005.html.ini
new file mode 100644
index 00000000000..76b23603452
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-005.html.ini
@@ -0,0 +1,4 @@
+[transform-input-005.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-006.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-006.html.ini
new file mode 100644
index 00000000000..f832da76ab5
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-006.html.ini
@@ -0,0 +1,4 @@
+[transform-input-006.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-007.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-007.html.ini
new file mode 100644
index 00000000000..91d9f5d354d
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-007.html.ini
@@ -0,0 +1,4 @@
+[transform-input-007.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-008.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-008.html.ini
new file mode 100644
index 00000000000..a7193849f0e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-008.html.ini
@@ -0,0 +1,4 @@
+[transform-input-008.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-009.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-009.html.ini
new file mode 100644
index 00000000000..4c738205f86
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-009.html.ini
@@ -0,0 +1,4 @@
+[transform-input-009.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-010.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-010.html.ini
new file mode 100644
index 00000000000..e0ab3a5fb4e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-010.html.ini
@@ -0,0 +1,4 @@
+[transform-input-010.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-012.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-012.html.ini
new file mode 100644
index 00000000000..1528940c1da
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-012.html.ini
@@ -0,0 +1,5 @@
+[transform-input-012.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-013.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-013.html.ini
new file mode 100644
index 00000000000..bbdc65f2767
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-013.html.ini
@@ -0,0 +1,4 @@
+[transform-input-013.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-014.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-014.html.ini
new file mode 100644
index 00000000000..76eaa8ade6e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-014.html.ini
@@ -0,0 +1,4 @@
+[transform-input-014.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-015.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-015.html.ini
new file mode 100644
index 00000000000..4691ee5df7a
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-015.html.ini
@@ -0,0 +1,4 @@
+[transform-input-015.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-016.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-016.html.ini
new file mode 100644
index 00000000000..4a91e375997
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-016.html.ini
@@ -0,0 +1,4 @@
+[transform-input-016.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-017.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-017.html.ini
new file mode 100644
index 00000000000..b6c96fff2e3
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-017.html.ini
@@ -0,0 +1,5 @@
+[transform-input-017.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-018.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-018.html.ini
new file mode 100644
index 00000000000..a2a62eedac3
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-018.html.ini
@@ -0,0 +1,5 @@
+[transform-input-018.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected:
+ if os == "mac": FAIL
diff --git a/tests/wpt/metadata/css/css-transforms/transform-input-019.html.ini b/tests/wpt/metadata/css/css-transforms/transform-input-019.html.ini
new file mode 100644
index 00000000000..94f584c3699
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/transform-input-019.html.ini
@@ -0,0 +1,4 @@
+[transform-input-019.html]
+ type: reftest
+ bug: https://github.com/servo/servo/issues/21092
+ expected: FAIL