Fix failing assertion -- failure to pop reference frame

closes #23438
This commit is contained in:
Daniel Alley 2020-03-29 18:06:48 -04:00
parent 15d8c6058b
commit 3258bcaa8b
3 changed files with 9 additions and 6 deletions

View file

@ -195,7 +195,7 @@ pub struct StackingContext {
/// The clip and scroll info for this StackingContext. /// The clip and scroll info for this StackingContext.
pub parent_clipping_and_scrolling: ClippingAndScrolling, pub parent_clipping_and_scrolling: ClippingAndScrolling,
/// The index of the reference frame that this stacking context estalishes. /// The index of the reference frame that this stacking context establishes.
pub established_reference_frame: Option<ClipScrollNodeIndex>, pub established_reference_frame: Option<ClipScrollNodeIndex>,
} }
@ -261,6 +261,7 @@ impl StackingContext {
let pop_item = DisplayItem::PopStackingContext(Box::new(PopStackingContextItem { let pop_item = DisplayItem::PopStackingContext(Box::new(PopStackingContextItem {
base: base_item.clone(), base: base_item.clone(),
stacking_context_id: self.id, stacking_context_id: self.id,
established_reference_frame: self.established_reference_frame.is_some(),
})); }));
let push_item = DisplayItem::PushStackingContext(Box::new(PushStackingContextItem { let push_item = DisplayItem::PushStackingContext(Box::new(PushStackingContextItem {
@ -657,6 +658,8 @@ pub struct PopStackingContextItem {
pub base: BaseDisplayItem, pub base: BaseDisplayItem,
pub stacking_context_id: StackingContextId, pub stacking_context_id: StackingContextId,
pub established_reference_frame: bool,
} }
/// Starts a group of items inside a particular scroll root. /// Starts a group of items inside a particular scroll root.

View file

@ -186,7 +186,7 @@ impl DisplayItem {
); );
IsContentful(false) IsContentful(false)
}, },
DisplayItem::PushStackingContext(ref mut item) => { DisplayItem::PushStackingContext(ref item) => {
let stacking_context = &item.stacking_context; let stacking_context = &item.stacking_context;
debug_assert_eq!(stacking_context.context_type, StackingContextType::Real); debug_assert_eq!(stacking_context.context_type, StackingContextType::Real);
@ -252,8 +252,11 @@ impl DisplayItem {
builder.push_item(&WrDisplayItem::PushStackingContext(wr_item)); builder.push_item(&WrDisplayItem::PushStackingContext(wr_item));
IsContentful(false) IsContentful(false)
}, },
DisplayItem::PopStackingContext(_) => { DisplayItem::PopStackingContext(ref item) => {
builder.pop_stacking_context(); builder.pop_stacking_context();
if item.established_reference_frame {
builder.pop_reference_frame();
}
IsContentful(false) IsContentful(false)
}, },
DisplayItem::DefineClipScrollNode(ref mut item) => { DisplayItem::DefineClipScrollNode(ref mut item) => {

View file

@ -1,3 +0,0 @@
[mix-blend-mode-sibling-with-3D-transform.html]
type: reftest
expected: FAIL