mirror of
https://github.com/servo/servo.git
synced 2025-06-13 10:54:29 +00:00
Scroll from script should trigger a reflow
Scrolling from script should flow layout and send a display list to WebRender. This allows all of the scroll nodes to exist in WebRender before asking it to move the node. See https://gist.github.com/paulirish/5d52fb081b3570c81e3a. Fixes #29659.
This commit is contained in:
parent
2ae158dec1
commit
3ab5e2a188
25 changed files with 161 additions and 188 deletions
|
@ -645,9 +645,6 @@ impl LayoutThread {
|
||||||
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
||||||
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
||||||
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
||||||
Msg::UpdateScrollStateFromScript(..) => {
|
|
||||||
LayoutHangAnnotation::UpdateScrollStateFromScript
|
|
||||||
},
|
|
||||||
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
||||||
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
||||||
};
|
};
|
||||||
|
@ -753,19 +750,6 @@ impl LayoutThread {
|
||||||
Msg::SetScrollStates(new_scroll_states) => {
|
Msg::SetScrollStates(new_scroll_states) => {
|
||||||
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
|
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
|
||||||
},
|
},
|
||||||
Msg::UpdateScrollStateFromScript(state) => {
|
|
||||||
let mut rw_data = possibly_locked_rw_data.lock();
|
|
||||||
rw_data
|
|
||||||
.scroll_offsets
|
|
||||||
.insert(state.scroll_id, state.scroll_offset);
|
|
||||||
|
|
||||||
let point = Point2D::new(-state.scroll_offset.x, -state.scroll_offset.y);
|
|
||||||
self.webrender_api.send_scroll_node(
|
|
||||||
webrender_api::units::LayoutPoint::from_untyped(point),
|
|
||||||
state.scroll_id,
|
|
||||||
webrender_api::ScrollClamping::ToContentBounds,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
Msg::CollectReports(reports_chan) => {
|
Msg::CollectReports(reports_chan) => {
|
||||||
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
||||||
},
|
},
|
||||||
|
@ -1250,7 +1234,9 @@ impl LayoutThread {
|
||||||
rw_data.inner_window_dimensions_response = None;
|
rw_data.inner_window_dimensions_response = None;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
ReflowGoal::Full |
|
||||||
|
ReflowGoal::TickAnimations |
|
||||||
|
ReflowGoal::UpdateScrollNode(_) => {},
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
@ -1619,10 +1605,26 @@ impl LayoutThread {
|
||||||
.cloned();
|
.cloned();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ReflowGoal::UpdateScrollNode(scroll_state) => {
|
||||||
|
self.update_scroll_node_state(&scroll_state, rw_data);
|
||||||
|
},
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn update_scroll_node_state(&self, state: &ScrollState, rw_data: &mut LayoutThreadData) {
|
||||||
|
rw_data
|
||||||
|
.scroll_offsets
|
||||||
|
.insert(state.scroll_id, state.scroll_offset);
|
||||||
|
|
||||||
|
let point = Point2D::new(-state.scroll_offset.x, -state.scroll_offset.y);
|
||||||
|
self.webrender_api.send_scroll_node(
|
||||||
|
webrender_api::units::LayoutPoint::from_untyped(point),
|
||||||
|
state.scroll_id,
|
||||||
|
webrender_api::ScrollClamping::ToContentBounds,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
fn set_scroll_states<'a, 'b>(
|
fn set_scroll_states<'a, 'b>(
|
||||||
&mut self,
|
&mut self,
|
||||||
new_scroll_states: Vec<ScrollState>,
|
new_scroll_states: Vec<ScrollState>,
|
||||||
|
|
|
@ -616,9 +616,6 @@ impl LayoutThread {
|
||||||
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
||||||
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
||||||
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
||||||
Msg::UpdateScrollStateFromScript(..) => {
|
|
||||||
LayoutHangAnnotation::UpdateScrollStateFromScript
|
|
||||||
},
|
|
||||||
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
||||||
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
||||||
};
|
};
|
||||||
|
@ -724,19 +721,6 @@ impl LayoutThread {
|
||||||
Msg::SetScrollStates(new_scroll_states) => {
|
Msg::SetScrollStates(new_scroll_states) => {
|
||||||
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
|
self.set_scroll_states(new_scroll_states, possibly_locked_rw_data);
|
||||||
},
|
},
|
||||||
Msg::UpdateScrollStateFromScript(state) => {
|
|
||||||
let mut rw_data = possibly_locked_rw_data.lock();
|
|
||||||
rw_data
|
|
||||||
.scroll_offsets
|
|
||||||
.insert(state.scroll_id, state.scroll_offset);
|
|
||||||
|
|
||||||
let point = Point2D::new(-state.scroll_offset.x, -state.scroll_offset.y);
|
|
||||||
self.webrender_api.send_scroll_node(
|
|
||||||
webrender_api::units::LayoutPoint::from_untyped(point),
|
|
||||||
state.scroll_id,
|
|
||||||
webrender_api::ScrollClamping::ToContentBounds,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
Msg::CollectReports(reports_chan) => {
|
Msg::CollectReports(reports_chan) => {
|
||||||
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
||||||
},
|
},
|
||||||
|
@ -935,7 +919,9 @@ impl LayoutThread {
|
||||||
.cloned();
|
.cloned();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
ReflowGoal::Full |
|
||||||
|
ReflowGoal::TickAnimations |
|
||||||
|
ReflowGoal::UpdateScrollNode(_) => {},
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
},
|
},
|
||||||
|
@ -1256,10 +1242,26 @@ impl LayoutThread {
|
||||||
rw_data.inner_window_dimensions_response = None;
|
rw_data.inner_window_dimensions_response = None;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
ReflowGoal::UpdateScrollNode(scroll_state) => {
|
||||||
|
self.update_scroll_node_state(&scroll_state, rw_data);
|
||||||
|
},
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn update_scroll_node_state(&self, state: &ScrollState, rw_data: &mut LayoutThreadData) {
|
||||||
|
rw_data
|
||||||
|
.scroll_offsets
|
||||||
|
.insert(state.scroll_id, state.scroll_offset);
|
||||||
|
|
||||||
|
let point = Point2D::new(-state.scroll_offset.x, -state.scroll_offset.y);
|
||||||
|
self.webrender_api.send_scroll_node(
|
||||||
|
webrender_api::units::LayoutPoint::from_untyped(point),
|
||||||
|
state.scroll_id,
|
||||||
|
webrender_api::ScrollClamping::ToContentBounds,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
fn set_scroll_states<'a, 'b>(
|
fn set_scroll_states<'a, 'b>(
|
||||||
&mut self,
|
&mut self,
|
||||||
new_scroll_states: Vec<ScrollState>,
|
new_scroll_states: Vec<ScrollState>,
|
||||||
|
|
|
@ -168,26 +168,27 @@ enum WindowState {
|
||||||
#[derive(Debug, MallocSizeOf)]
|
#[derive(Debug, MallocSizeOf)]
|
||||||
pub enum ReflowReason {
|
pub enum ReflowReason {
|
||||||
CachedPageNeededReflow,
|
CachedPageNeededReflow,
|
||||||
RefreshTick,
|
|
||||||
FirstLoad,
|
|
||||||
KeyEvent,
|
|
||||||
MouseEvent,
|
|
||||||
Query,
|
|
||||||
Timer,
|
|
||||||
Viewport,
|
|
||||||
WindowResize,
|
|
||||||
DOMContentLoaded,
|
DOMContentLoaded,
|
||||||
DocumentLoaded,
|
DocumentLoaded,
|
||||||
StylesheetLoaded,
|
ElementStateChanged,
|
||||||
ImageLoaded,
|
FirstLoad,
|
||||||
RequestAnimationFrame,
|
|
||||||
WebFontLoaded,
|
|
||||||
WorkletLoaded,
|
|
||||||
FramedContentChanged,
|
FramedContentChanged,
|
||||||
IFrameLoadEvent,
|
IFrameLoadEvent,
|
||||||
|
ImageLoaded,
|
||||||
|
KeyEvent,
|
||||||
MissingExplicitReflow,
|
MissingExplicitReflow,
|
||||||
ElementStateChanged,
|
MouseEvent,
|
||||||
PendingReflow,
|
PendingReflow,
|
||||||
|
Query,
|
||||||
|
RefreshTick,
|
||||||
|
RequestAnimationFrame,
|
||||||
|
ScrollFromScript,
|
||||||
|
StylesheetLoaded,
|
||||||
|
Timer,
|
||||||
|
Viewport,
|
||||||
|
WebFontLoaded,
|
||||||
|
WindowResize,
|
||||||
|
WorkletLoaded,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[dom_struct]
|
#[dom_struct]
|
||||||
|
@ -1755,15 +1756,13 @@ impl Window {
|
||||||
// TODO Step 1
|
// TODO Step 1
|
||||||
// TODO(mrobinson, #18709): Add smooth scrolling support to WebRender so that we can
|
// TODO(mrobinson, #18709): Add smooth scrolling support to WebRender so that we can
|
||||||
// properly process ScrollBehavior here.
|
// properly process ScrollBehavior here.
|
||||||
match self.layout_chan() {
|
self.reflow(
|
||||||
Some(chan) => chan
|
ReflowGoal::UpdateScrollNode(ScrollState {
|
||||||
.send(Msg::UpdateScrollStateFromScript(ScrollState {
|
|
||||||
scroll_id,
|
scroll_id,
|
||||||
scroll_offset: Vector2D::new(-x, -y),
|
scroll_offset: Vector2D::new(-x, -y),
|
||||||
}))
|
}),
|
||||||
.unwrap(),
|
ReflowReason::ScrollFromScript,
|
||||||
None => warn!("Layout channel unavailable"),
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update_viewport_for_scroll(&self, x: f32, y: f32) {
|
pub fn update_viewport_for_scroll(&self, x: f32, y: f32) {
|
||||||
|
@ -2719,6 +2718,7 @@ fn debug_reflow_events(id: PipelineId, reflow_goal: &ReflowGoal, reason: &Reflow
|
||||||
let goal_string = match *reflow_goal {
|
let goal_string = match *reflow_goal {
|
||||||
ReflowGoal::Full => "\tFull",
|
ReflowGoal::Full => "\tFull",
|
||||||
ReflowGoal::TickAnimations => "\tTickAnimations",
|
ReflowGoal::TickAnimations => "\tTickAnimations",
|
||||||
|
ReflowGoal::UpdateScrollNode(_) => "\tUpdateScrollNode",
|
||||||
ReflowGoal::LayoutQuery(ref query_msg, _) => match query_msg {
|
ReflowGoal::LayoutQuery(ref query_msg, _) => match query_msg {
|
||||||
&QueryMsg::ContentBoxQuery(_n) => "\tContentBoxQuery",
|
&QueryMsg::ContentBoxQuery(_n) => "\tContentBoxQuery",
|
||||||
&QueryMsg::ContentBoxesQuery(_n) => "\tContentBoxesQuery",
|
&QueryMsg::ContentBoxesQuery(_n) => "\tContentBoxesQuery",
|
||||||
|
|
|
@ -81,10 +81,6 @@ pub enum Msg {
|
||||||
/// Tells layout about the new scrolling offsets of each scrollable stacking context.
|
/// Tells layout about the new scrolling offsets of each scrollable stacking context.
|
||||||
SetScrollStates(Vec<ScrollState>),
|
SetScrollStates(Vec<ScrollState>),
|
||||||
|
|
||||||
/// Tells layout about a single new scrolling offset from the script. The rest will
|
|
||||||
/// remain untouched and layout won't forward this back to script.
|
|
||||||
UpdateScrollStateFromScript(ScrollState),
|
|
||||||
|
|
||||||
/// Tells layout that script has added some paint worklet modules.
|
/// Tells layout that script has added some paint worklet modules.
|
||||||
RegisterPaint(Atom, Vec<Atom>, Box<dyn Painter>),
|
RegisterPaint(Atom, Vec<Atom>, Box<dyn Painter>),
|
||||||
|
|
||||||
|
@ -125,6 +121,10 @@ pub enum ReflowGoal {
|
||||||
Full,
|
Full,
|
||||||
TickAnimations,
|
TickAnimations,
|
||||||
LayoutQuery(QueryMsg, u64),
|
LayoutQuery(QueryMsg, u64),
|
||||||
|
|
||||||
|
/// Tells layout about a single new scrolling offset from the script. The rest will
|
||||||
|
/// remain untouched and layout won't forward this back to script.
|
||||||
|
UpdateScrollNode(ScrollState),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ReflowGoal {
|
impl ReflowGoal {
|
||||||
|
@ -132,7 +132,7 @@ impl ReflowGoal {
|
||||||
/// be present or false if it only needs stacking-relative positions.
|
/// be present or false if it only needs stacking-relative positions.
|
||||||
pub fn needs_display_list(&self) -> bool {
|
pub fn needs_display_list(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => true,
|
ReflowGoal::Full | ReflowGoal::TickAnimations | ReflowGoal::UpdateScrollNode(_) => true,
|
||||||
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
||||||
QueryMsg::NodesFromPointQuery(..) |
|
QueryMsg::NodesFromPointQuery(..) |
|
||||||
QueryMsg::TextIndexQuery(..) |
|
QueryMsg::TextIndexQuery(..) |
|
||||||
|
@ -155,7 +155,7 @@ impl ReflowGoal {
|
||||||
/// false if a layout_thread display list is sufficient.
|
/// false if a layout_thread display list is sufficient.
|
||||||
pub fn needs_display(&self) -> bool {
|
pub fn needs_display(&self) -> bool {
|
||||||
match *self {
|
match *self {
|
||||||
ReflowGoal::Full | ReflowGoal::TickAnimations => true,
|
ReflowGoal::Full | ReflowGoal::TickAnimations | ReflowGoal::UpdateScrollNode(_) => true,
|
||||||
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
||||||
QueryMsg::NodesFromPointQuery(..) |
|
QueryMsg::NodesFromPointQuery(..) |
|
||||||
QueryMsg::TextIndexQuery(..) |
|
QueryMsg::TextIndexQuery(..) |
|
||||||
|
|
|
@ -791,7 +791,7 @@ bitflags! {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The scroll state of a stacking context.
|
/// The scroll state of a stacking context.
|
||||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
|
||||||
pub struct ScrollState {
|
pub struct ScrollState {
|
||||||
/// The ID of the scroll root.
|
/// The ID of the scroll root.
|
||||||
pub scroll_id: ExternalScrollId,
|
pub scroll_id: ExternalScrollId,
|
||||||
|
|
|
@ -11,12 +11,6 @@
|
||||||
[.containing-block 4]
|
[.containing-block 4]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[.containing-block 5]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.containing-block 6]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[.containing-block 7]
|
[.containing-block 7]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -32,11 +26,17 @@
|
||||||
[.containing-block 11]
|
[.containing-block 11]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[.containing-block 14]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[.containing-block 5]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[.containing-block 6]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
[.containing-block 12]
|
[.containing-block 12]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[.containing-block 13]
|
[.containing-block 13]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[.containing-block 14]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[position-sticky-escape-scroller-002.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,6 +1,6 @@
|
||||||
[position-sticky-overflow-padding.html]
|
[position-sticky-overflow-padding.html]
|
||||||
[A sticky element should be offset by ancestor padding even when stuck]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Ancestor overflow padding does not allow a sticky element to escape its container]
|
[Ancestor overflow padding does not allow a sticky element to escape its container]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[A sticky element should be offset by ancestor padding even when stuck]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[z-index-blend-will-change-overlapping-layers.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[clear-on-parent-and-child.html]
|
|
||||||
bug: https://github.com/servo/webrender/issues/3078
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[attachment-local-positioning-2.html]
|
|
||||||
bug: https://github.com/servo/webrender/issues/3078
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[attachment-scroll-positioning-1.html]
|
|
||||||
bug: https://github.com/servo/webrender/issues/3078
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[scroll-positioned-multiple-background-images.html]
|
|
||||||
bug: https://github.com/servo/webrender/issues/3078
|
|
||||||
expected: FAIL
|
|
|
@ -1,2 +0,0 @@
|
||||||
[containing-block-change-scrollframe.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,2 +0,0 @@
|
||||||
[position-sticky-escape-scroller-001.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,2 +0,0 @@
|
||||||
[position-sticky-escape-scroller-002.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,2 +0,0 @@
|
||||||
[position-sticky-escape-scroller-003.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,2 +0,0 @@
|
||||||
[position-sticky-escape-scroller-004.html]
|
|
||||||
expected: FAIL
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[position-sticky-rendering.html]
|
||||||
|
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
||||||
[z-index-blend-will-change-overlapping-layers.html]
|
|
||||||
expected: FAIL
|
|
|
@ -1,3 +0,0 @@
|
||||||
[CaretPosition-001.html]
|
|
||||||
[Element at (400, 100)]
|
|
||||||
expected: FAIL
|
|
|
@ -4,4 +4,3 @@
|
||||||
|
|
||||||
[simple scroll with style: 'padding' and 'overflow: scroll']
|
[simple scroll with style: 'padding' and 'overflow: scroll']
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
[Testing default value of scroll-behavior]
|
[Testing default value of scroll-behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Instant scrolling of an element with default scroll-behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Smooth scrolling of an element with default scroll-behavior]
|
[Smooth scrolling of an element with default scroll-behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Instant scrolling of an element with default scroll-behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -2,15 +2,6 @@
|
||||||
[Testing scrollOptions' behavior for Element.scroll* and scroll-behavior on an element]
|
[Testing scrollOptions' behavior for Element.scroll* and scroll-behavior on an element]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scroll() with default behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scroll() with auto behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scroll() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scroll() with smooth behavior]
|
[Element with auto scroll-behavior ; scroll() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -20,21 +11,9 @@
|
||||||
[Element with smooth scroll-behavior ; scroll() with auto behavior]
|
[Element with smooth scroll-behavior ; scroll() with auto behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scroll() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scroll() with smooth behavior]
|
[Element with smooth scroll-behavior ; scroll() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollTo() with default behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollTo() with auto behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollTo() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollTo() with smooth behavior]
|
[Element with auto scroll-behavior ; scrollTo() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -44,21 +23,9 @@
|
||||||
[Element with smooth scroll-behavior ; scrollTo() with auto behavior]
|
[Element with smooth scroll-behavior ; scrollTo() with auto behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scrollTo() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scrollTo() with smooth behavior]
|
[Element with smooth scroll-behavior ; scrollTo() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollBy() with default behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollBy() with auto behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollBy() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with auto scroll-behavior ; scrollBy() with smooth behavior]
|
[Element with auto scroll-behavior ; scrollBy() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -68,9 +35,6 @@
|
||||||
[Element with smooth scroll-behavior ; scrollBy() with auto behavior]
|
[Element with smooth scroll-behavior ; scrollBy() with auto behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scrollBy() with instant behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Element with smooth scroll-behavior ; scrollBy() with smooth behavior]
|
[Element with smooth scroll-behavior ; scrollBy() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -98,17 +62,53 @@
|
||||||
[Element with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
|
[Element with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Set scrollLeft to element with auto scroll-behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Set scrollLeft to element with smooth scroll-behavior]
|
[Set scrollLeft to element with smooth scroll-behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Set scrollTop to element with auto scroll-behavior]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Set scrollTop to element with smooth scroll-behavior]
|
[Set scrollTop to element with smooth scroll-behavior]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scroll() with default behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scroll() with auto behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scroll() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with smooth scroll-behavior ; scroll() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollTo() with default behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollTo() with auto behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollTo() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with smooth scroll-behavior ; scrollTo() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollBy() with default behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollBy() with auto behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with auto scroll-behavior ; scrollBy() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Element with smooth scroll-behavior ; scrollBy() with instant behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Set scrollLeft to element with auto scroll-behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Set scrollTop to element with auto scroll-behavior]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
[Aborting an ongoing smooth scrolling on an element with another smooth scrolling]
|
[Aborting an ongoing smooth scrolling on an element with another smooth scrolling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -2,66 +2,65 @@
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollIntoView() ]
|
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollIntoView() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollTo() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollIntoView() ]
|
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollIntoView() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollIntoView() ]
|
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollIntoView() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollTo() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollIntoView() ]
|
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollIntoView() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollBy() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollBy() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when aborting a smooth scrolling with an instant scrolling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollBy() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scroll() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollTo() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scroll() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when aborting a smooth scrolling with another smooth scrolling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scroll() ]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scroll() ]
|
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scroll() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scroll() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scroll() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scroll() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollTo() ]
|
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollTo() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollTo() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollTo() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollTo() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollBy() ]
|
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollBy() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from 500 to 250 by setting scrollTop ]
|
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollBy() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from 1000 to 500 by setting scrollLeft ]
|
[Scroll positions when performing smooth scrolling from (0, 500) to (500, 250) using scrollBy() ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollBy() ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from 0 to 500 by setting scrollLeft ]
|
[Scroll positions when performing smooth scrolling from 0 to 500 by setting scrollLeft ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from 1000 to 500 by setting scrollLeft ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
[Scroll positions when performing smooth scrolling from 0 to 250 by setting scrollTop ]
|
[Scroll positions when performing smooth scrolling from 0 to 250 by setting scrollTop ]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when performing smooth scrolling from 500 to 250 by setting scrollTop ]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when aborting a smooth scrolling with another smooth scrolling]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Scroll positions when aborting a smooth scrolling with an instant scrolling]
|
||||||
|
expected: FAIL
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue