mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Auto merge of #29661 - mrobinson:several-scrolling-fixes, r=mukilan
Fix various issues with scrolling This change fixes three issues with scrolling: - In order for scrolls from script to properly scroll nodes in WebRender that might require a layout, Servo should first flush layout and send the display list to WebRender. - `overflow: scroll` elements were not scrollable from script. This change also refactors the detection of a potentially scrollable body in quirks mode in order to make it match the specification more closely. - Enable script scrolls in Layout 2020 by adding an implementation of the scroll area query, which is necessary to ensure that an element does support scrolling. Each of these changes is a separate commit here with corresponding test expectation updates. Fixes #29659. Fixes servo/webrender#3078. <!-- Please describe your changes on the following line: --> --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #29659 and servo/webrender#3078. - [x] There are tests for these changes <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
commit
e4d08358ac
59 changed files with 202 additions and 508 deletions
|
@ -538,6 +538,39 @@ impl FragmentTree {
|
|||
})
|
||||
.unwrap_or_else(Rect::zero)
|
||||
}
|
||||
|
||||
pub fn get_scroll_area_for_node(&self, requested_node: OpaqueNode) -> Rect<i32> {
|
||||
let mut scroll_area: PhysicalRect<Length> = PhysicalRect::zero();
|
||||
let tag_to_find = Tag::Node(requested_node);
|
||||
self.find(|fragment, _, containing_block| {
|
||||
if fragment.tag() != Some(tag_to_find) {
|
||||
return None::<()>;
|
||||
}
|
||||
|
||||
scroll_area = match fragment {
|
||||
Fragment::Box(fragment) => fragment
|
||||
.scrollable_overflow(&containing_block)
|
||||
.translate(containing_block.origin.to_vector()),
|
||||
Fragment::Text(_) |
|
||||
Fragment::AbsoluteOrFixedPositioned(_) |
|
||||
Fragment::Image(_) |
|
||||
Fragment::IFrame(_) |
|
||||
Fragment::Anonymous(_) => return None,
|
||||
};
|
||||
None::<()>
|
||||
});
|
||||
|
||||
Rect::new(
|
||||
Point2D::new(
|
||||
scroll_area.origin.x.px() as i32,
|
||||
scroll_area.origin.y.px() as i32,
|
||||
),
|
||||
Size2D::new(
|
||||
scroll_area.size.width.px() as i32,
|
||||
scroll_area.size.height.px() as i32,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// https://drafts.csswg.org/css-backgrounds/#root-background
|
||||
|
|
|
@ -201,8 +201,15 @@ pub fn process_node_scroll_id_request<'dom>(
|
|||
}
|
||||
|
||||
/// https://drafts.csswg.org/cssom-view/#scrolling-area
|
||||
pub fn process_node_scroll_area_request(_requested_node: OpaqueNode) -> Rect<i32> {
|
||||
Rect::zero()
|
||||
pub fn process_node_scroll_area_request(
|
||||
requested_node: OpaqueNode,
|
||||
fragment_tree: Option<Arc<FragmentTree>>,
|
||||
) -> Rect<i32> {
|
||||
if let Some(fragment_tree) = fragment_tree {
|
||||
fragment_tree.get_scroll_area_for_node(requested_node)
|
||||
} else {
|
||||
Rect::zero()
|
||||
}
|
||||
}
|
||||
|
||||
/// Return the resolved value of property for a given (pseudo)element.
|
||||
|
|
|
@ -645,9 +645,6 @@ impl LayoutThread {
|
|||
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
||||
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
||||
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
||||
Msg::UpdateScrollStateFromScript(..) => {
|
||||
LayoutHangAnnotation::UpdateScrollStateFromScript
|
||||
},
|
||||
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
||||
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
||||
};
|
||||
|
@ -753,19 +750,6 @@ impl LayoutThread {
|
|||
Msg::SetScrollStates(new_scroll_states) => {
|
||||
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) => {
|
||||
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
||||
},
|
||||
|
@ -1250,7 +1234,9 @@ impl LayoutThread {
|
|||
rw_data.inner_window_dimensions_response = None;
|
||||
},
|
||||
},
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
||||
ReflowGoal::Full |
|
||||
ReflowGoal::TickAnimations |
|
||||
ReflowGoal::UpdateScrollNode(_) => {},
|
||||
}
|
||||
return;
|
||||
},
|
||||
|
@ -1619,10 +1605,26 @@ impl LayoutThread {
|
|||
.cloned();
|
||||
},
|
||||
},
|
||||
ReflowGoal::UpdateScrollNode(scroll_state) => {
|
||||
self.update_scroll_node_state(&scroll_state, rw_data);
|
||||
},
|
||||
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>(
|
||||
&mut self,
|
||||
new_scroll_states: Vec<ScrollState>,
|
||||
|
|
|
@ -616,9 +616,6 @@ impl LayoutThread {
|
|||
Msg::CreateLayoutThread(..) => LayoutHangAnnotation::CreateLayoutThread,
|
||||
Msg::SetFinalUrl(..) => LayoutHangAnnotation::SetFinalUrl,
|
||||
Msg::SetScrollStates(..) => LayoutHangAnnotation::SetScrollStates,
|
||||
Msg::UpdateScrollStateFromScript(..) => {
|
||||
LayoutHangAnnotation::UpdateScrollStateFromScript
|
||||
},
|
||||
Msg::RegisterPaint(..) => LayoutHangAnnotation::RegisterPaint,
|
||||
Msg::SetNavigationStart(..) => LayoutHangAnnotation::SetNavigationStart,
|
||||
};
|
||||
|
@ -724,19 +721,6 @@ impl LayoutThread {
|
|||
Msg::SetScrollStates(new_scroll_states) => {
|
||||
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) => {
|
||||
self.collect_reports(reports_chan, possibly_locked_rw_data);
|
||||
},
|
||||
|
@ -935,7 +919,9 @@ impl LayoutThread {
|
|||
.cloned();
|
||||
},
|
||||
},
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations => {},
|
||||
ReflowGoal::Full |
|
||||
ReflowGoal::TickAnimations |
|
||||
ReflowGoal::UpdateScrollNode(_) => {},
|
||||
}
|
||||
return;
|
||||
},
|
||||
|
@ -1198,7 +1184,8 @@ impl LayoutThread {
|
|||
process_node_geometry_request(node, self.fragment_tree.borrow().clone());
|
||||
},
|
||||
&QueryMsg::NodeScrollGeometryQuery(node) => {
|
||||
rw_data.scroll_area_response = process_node_scroll_area_request(node);
|
||||
rw_data.scroll_area_response =
|
||||
process_node_scroll_area_request(node, self.fragment_tree.borrow().clone());
|
||||
},
|
||||
&QueryMsg::NodeScrollIdQuery(node) => {
|
||||
let node = unsafe { ServoLayoutNode::new(&node) };
|
||||
|
@ -1256,10 +1243,26 @@ impl LayoutThread {
|
|||
rw_data.inner_window_dimensions_response = None;
|
||||
},
|
||||
},
|
||||
ReflowGoal::UpdateScrollNode(scroll_state) => {
|
||||
self.update_scroll_node_state(&scroll_state, rw_data);
|
||||
},
|
||||
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>(
|
||||
&mut self,
|
||||
new_scroll_states: Vec<ScrollState>,
|
||||
|
|
|
@ -120,7 +120,6 @@ use style::invalidation::element::restyle_hints::RestyleHint;
|
|||
use style::properties::longhands::{
|
||||
self, background_image, border_spacing, font_family, font_size,
|
||||
};
|
||||
use style::properties::longhands::{overflow_x, overflow_y};
|
||||
use style::properties::{parse_style_attribute, PropertyDeclarationBlock};
|
||||
use style::properties::{ComputedValues, Importance, PropertyDeclaration};
|
||||
use style::rule_tree::CascadeLevel;
|
||||
|
@ -408,46 +407,59 @@ impl Element {
|
|||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#potentially-scrollable
|
||||
fn potentially_scrollable(&self) -> bool {
|
||||
self.has_css_layout_box() && !self.has_any_visible_overflow()
|
||||
fn is_potentially_scrollable_body(&self) -> bool {
|
||||
let node = self.upcast::<Node>();
|
||||
debug_assert!(
|
||||
node.owner_doc().GetBody().as_deref() == self.downcast::<HTMLElement>(),
|
||||
"Called is_potentially_scrollable_body on element that is not the <body>"
|
||||
);
|
||||
|
||||
// "An element body (which will be the body element) is potentially
|
||||
// scrollable if all of the following conditions are true:
|
||||
// - body has an associated box."
|
||||
if !self.has_css_layout_box() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// " - body’s parent element’s computed value of the overflow-x or
|
||||
// overflow-y properties is neither visible nor clip."
|
||||
if let Some(parent) = node.GetParentElement() {
|
||||
if let Some(style) = parent.style() {
|
||||
if !style.get_box().clone_overflow_x().is_scrollable() &&
|
||||
!style.get_box().clone_overflow_y().is_scrollable()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// " - body’s computed value of the overflow-x or overflow-y properties
|
||||
// is neither visible nor clip."
|
||||
if let Some(style) = self.style() {
|
||||
if !style.get_box().clone_overflow_x().is_scrollable() &&
|
||||
!style.get_box().clone_overflow_y().is_scrollable()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
// https://drafts.csswg.org/cssom-view/#scrolling-box
|
||||
fn has_scrolling_box(&self) -> bool {
|
||||
// TODO: scrolling mechanism, such as scrollbar (We don't have scrollbar yet)
|
||||
// self.has_scrolling_mechanism()
|
||||
self.has_any_hidden_overflow()
|
||||
self.style().map_or(false, |style| {
|
||||
style.get_box().clone_overflow_x().is_scrollable() ||
|
||||
style.get_box().clone_overflow_y().is_scrollable()
|
||||
})
|
||||
}
|
||||
|
||||
fn has_overflow(&self) -> bool {
|
||||
self.ScrollHeight() > self.ClientHeight() || self.ScrollWidth() > self.ClientWidth()
|
||||
}
|
||||
|
||||
// TODO: Once #19183 is closed (overflow-x/y types moved out of mako), then we could implement
|
||||
// a more generic `fn has_some_overflow(&self, overflow: Overflow)` rather than have
|
||||
// these two `has_any_{visible,hidden}_overflow` methods which are very structurally
|
||||
// similar.
|
||||
|
||||
/// Computed value of overflow-x or overflow-y is "visible"
|
||||
fn has_any_visible_overflow(&self) -> bool {
|
||||
self.style().map_or(false, |s| {
|
||||
let box_ = s.get_box();
|
||||
|
||||
box_.clone_overflow_x() == overflow_x::computed_value::T::Visible ||
|
||||
box_.clone_overflow_y() == overflow_y::computed_value::T::Visible
|
||||
})
|
||||
}
|
||||
|
||||
/// Computed value of overflow-x or overflow-y is "hidden"
|
||||
fn has_any_hidden_overflow(&self) -> bool {
|
||||
self.style().map_or(false, |s| {
|
||||
let box_ = s.get_box();
|
||||
|
||||
box_.clone_overflow_x() == overflow_x::computed_value::T::Hidden ||
|
||||
box_.clone_overflow_y() == overflow_y::computed_value::T::Hidden
|
||||
})
|
||||
}
|
||||
|
||||
fn shadow_root(&self) -> Option<DomRoot<ShadowRoot>> {
|
||||
self.rare_data()
|
||||
.as_ref()?
|
||||
|
@ -1765,7 +1777,7 @@ impl Element {
|
|||
// Step 9
|
||||
if doc.GetBody().as_deref() == self.downcast::<HTMLElement>() &&
|
||||
doc.quirks_mode() == QuirksMode::Quirks &&
|
||||
!self.potentially_scrollable()
|
||||
!self.is_potentially_scrollable_body()
|
||||
{
|
||||
win.scroll(x, y, behavior);
|
||||
return;
|
||||
|
@ -2305,7 +2317,7 @@ impl ElementMethods for Element {
|
|||
// Step 7
|
||||
if doc.GetBody().as_deref() == self.downcast::<HTMLElement>() &&
|
||||
doc.quirks_mode() == QuirksMode::Quirks &&
|
||||
!self.potentially_scrollable()
|
||||
!self.is_potentially_scrollable_body()
|
||||
{
|
||||
return win.ScrollY() as f64;
|
||||
}
|
||||
|
@ -2355,7 +2367,7 @@ impl ElementMethods for Element {
|
|||
// Step 9
|
||||
if doc.GetBody().as_deref() == self.downcast::<HTMLElement>() &&
|
||||
doc.quirks_mode() == QuirksMode::Quirks &&
|
||||
!self.potentially_scrollable()
|
||||
!self.is_potentially_scrollable_body()
|
||||
{
|
||||
win.scroll(win.ScrollX() as f64, y, behavior);
|
||||
return;
|
||||
|
@ -2401,7 +2413,7 @@ impl ElementMethods for Element {
|
|||
// Step 7
|
||||
if doc.GetBody().as_deref() == self.downcast::<HTMLElement>() &&
|
||||
doc.quirks_mode() == QuirksMode::Quirks &&
|
||||
!self.potentially_scrollable()
|
||||
!self.is_potentially_scrollable_body()
|
||||
{
|
||||
return win.ScrollX() as f64;
|
||||
}
|
||||
|
@ -2452,7 +2464,7 @@ impl ElementMethods for Element {
|
|||
// Step 9
|
||||
if doc.GetBody().as_deref() == self.downcast::<HTMLElement>() &&
|
||||
doc.quirks_mode() == QuirksMode::Quirks &&
|
||||
!self.potentially_scrollable()
|
||||
!self.is_potentially_scrollable_body()
|
||||
{
|
||||
win.scroll(x, win.ScrollY() as f64, behavior);
|
||||
return;
|
||||
|
|
|
@ -168,26 +168,27 @@ enum WindowState {
|
|||
#[derive(Debug, MallocSizeOf)]
|
||||
pub enum ReflowReason {
|
||||
CachedPageNeededReflow,
|
||||
RefreshTick,
|
||||
FirstLoad,
|
||||
KeyEvent,
|
||||
MouseEvent,
|
||||
Query,
|
||||
Timer,
|
||||
Viewport,
|
||||
WindowResize,
|
||||
DOMContentLoaded,
|
||||
DocumentLoaded,
|
||||
StylesheetLoaded,
|
||||
ImageLoaded,
|
||||
RequestAnimationFrame,
|
||||
WebFontLoaded,
|
||||
WorkletLoaded,
|
||||
ElementStateChanged,
|
||||
FirstLoad,
|
||||
FramedContentChanged,
|
||||
IFrameLoadEvent,
|
||||
ImageLoaded,
|
||||
KeyEvent,
|
||||
MissingExplicitReflow,
|
||||
ElementStateChanged,
|
||||
MouseEvent,
|
||||
PendingReflow,
|
||||
Query,
|
||||
RefreshTick,
|
||||
RequestAnimationFrame,
|
||||
ScrollFromScript,
|
||||
StylesheetLoaded,
|
||||
Timer,
|
||||
Viewport,
|
||||
WebFontLoaded,
|
||||
WindowResize,
|
||||
WorkletLoaded,
|
||||
}
|
||||
|
||||
#[dom_struct]
|
||||
|
@ -1698,24 +1699,23 @@ impl Window {
|
|||
|
||||
// TODO Step 4 - determine if a window has a viewport
|
||||
|
||||
// Step 5
|
||||
//TODO remove scrollbar width
|
||||
let width = self.InnerWidth() as f64;
|
||||
// Step 6
|
||||
//TODO remove scrollbar height
|
||||
let height = self.InnerHeight() as f64;
|
||||
// Step 5 & 6
|
||||
// TODO: Remove scrollbar dimensions.
|
||||
let viewport = self.window_size.get().initial_viewport;
|
||||
|
||||
// Step 7 & 8
|
||||
//TODO use overflow direction
|
||||
// TODO: Consider `block-end` and `inline-end` overflow direction.
|
||||
let body = self.Document().GetBody();
|
||||
let (x, y) = match body {
|
||||
Some(e) => {
|
||||
let content_size = e.upcast::<Node>().bounding_content_box_or_zero();
|
||||
let content_height = content_size.size.height.to_f64_px();
|
||||
let content_width = content_size.size.width.to_f64_px();
|
||||
let scroll_area = e.upcast::<Node>().scroll_area();
|
||||
(
|
||||
xfinite.min(content_width - width).max(0.0f64),
|
||||
yfinite.min(content_height - height).max(0.0f64),
|
||||
xfinite
|
||||
.min(scroll_area.width() as f64 - viewport.width as f64)
|
||||
.max(0.0f64),
|
||||
yfinite
|
||||
.min(scroll_area.height() as f64 - viewport.height as f64)
|
||||
.max(0.0f64),
|
||||
)
|
||||
},
|
||||
None => (xfinite.max(0.0f64), yfinite.max(0.0f64)),
|
||||
|
@ -1730,14 +1730,13 @@ impl Window {
|
|||
//TODO Step 11
|
||||
//let document = self.Document();
|
||||
// Step 12
|
||||
let global_scope = self.upcast::<GlobalScope>();
|
||||
let x = x.to_f32().unwrap_or(0.0f32);
|
||||
let y = y.to_f32().unwrap_or(0.0f32);
|
||||
self.update_viewport_for_scroll(x, y);
|
||||
self.perform_a_scroll(
|
||||
x,
|
||||
y,
|
||||
global_scope.pipeline_id().root_scroll_id(),
|
||||
self.upcast::<GlobalScope>().pipeline_id().root_scroll_id(),
|
||||
behavior,
|
||||
None,
|
||||
);
|
||||
|
@ -1755,15 +1754,13 @@ impl Window {
|
|||
// TODO Step 1
|
||||
// TODO(mrobinson, #18709): Add smooth scrolling support to WebRender so that we can
|
||||
// properly process ScrollBehavior here.
|
||||
match self.layout_chan() {
|
||||
Some(chan) => chan
|
||||
.send(Msg::UpdateScrollStateFromScript(ScrollState {
|
||||
scroll_id,
|
||||
scroll_offset: Vector2D::new(-x, -y),
|
||||
}))
|
||||
.unwrap(),
|
||||
None => warn!("Layout channel unavailable"),
|
||||
}
|
||||
self.reflow(
|
||||
ReflowGoal::UpdateScrollNode(ScrollState {
|
||||
scroll_id,
|
||||
scroll_offset: Vector2D::new(-x, -y),
|
||||
}),
|
||||
ReflowReason::ScrollFromScript,
|
||||
);
|
||||
}
|
||||
|
||||
pub fn update_viewport_for_scroll(&self, x: f32, y: f32) {
|
||||
|
@ -2719,6 +2716,7 @@ fn debug_reflow_events(id: PipelineId, reflow_goal: &ReflowGoal, reason: &Reflow
|
|||
let goal_string = match *reflow_goal {
|
||||
ReflowGoal::Full => "\tFull",
|
||||
ReflowGoal::TickAnimations => "\tTickAnimations",
|
||||
ReflowGoal::UpdateScrollNode(_) => "\tUpdateScrollNode",
|
||||
ReflowGoal::LayoutQuery(ref query_msg, _) => match query_msg {
|
||||
&QueryMsg::ContentBoxQuery(_n) => "\tContentBoxQuery",
|
||||
&QueryMsg::ContentBoxesQuery(_n) => "\tContentBoxesQuery",
|
||||
|
|
|
@ -81,10 +81,6 @@ pub enum Msg {
|
|||
/// Tells layout about the new scrolling offsets of each scrollable stacking context.
|
||||
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.
|
||||
RegisterPaint(Atom, Vec<Atom>, Box<dyn Painter>),
|
||||
|
||||
|
@ -125,6 +121,10 @@ pub enum ReflowGoal {
|
|||
Full,
|
||||
TickAnimations,
|
||||
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 {
|
||||
|
@ -132,7 +132,7 @@ impl ReflowGoal {
|
|||
/// be present or false if it only needs stacking-relative positions.
|
||||
pub fn needs_display_list(&self) -> bool {
|
||||
match *self {
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations => true,
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations | ReflowGoal::UpdateScrollNode(_) => true,
|
||||
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
||||
QueryMsg::NodesFromPointQuery(..) |
|
||||
QueryMsg::TextIndexQuery(..) |
|
||||
|
@ -155,7 +155,7 @@ impl ReflowGoal {
|
|||
/// false if a layout_thread display list is sufficient.
|
||||
pub fn needs_display(&self) -> bool {
|
||||
match *self {
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations => true,
|
||||
ReflowGoal::Full | ReflowGoal::TickAnimations | ReflowGoal::UpdateScrollNode(_) => true,
|
||||
ReflowGoal::LayoutQuery(ref querymsg, _) => match *querymsg {
|
||||
QueryMsg::NodesFromPointQuery(..) |
|
||||
QueryMsg::TextIndexQuery(..) |
|
||||
|
|
|
@ -791,7 +791,7 @@ bitflags! {
|
|||
}
|
||||
|
||||
/// The scroll state of a stacking context.
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Serialize)]
|
||||
#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)]
|
||||
pub struct ScrollState {
|
||||
/// The ID of the scroll root.
|
||||
pub scroll_id: ExternalScrollId,
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[attachment-local-positioning-2.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[attachment-scroll-positioning-1.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[scroll-positioned-multiple-background-images.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[containing-block-change-scrollframe.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[position-absolute-under-non-containing-stacking-context.html]
|
||||
expected: FAIL
|
|
@ -11,12 +11,6 @@
|
|||
[.containing-block 4]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 5]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 6]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 7]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -32,11 +26,5 @@
|
|||
[.containing-block 11]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 12]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 13]
|
||||
expected: FAIL
|
||||
|
||||
[.containing-block 14]
|
||||
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-fractional-offset.html]
|
||||
expected: FAIL
|
|
@ -1,6 +1,3 @@
|
|||
[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]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
[position-sticky-scrolled-remove-sibling.html]
|
||||
[Sticky position and its overflow contribution in the vertical axis]
|
||||
expected: FAIL
|
||||
|
||||
[Sticky position and its overflow contribution in the horizontal axis]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[position-sticky-table-td-top.html]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[z-index-blend-will-change-overlapping-layers.html]
|
||||
expected: FAIL
|
|
@ -1,3 +1,9 @@
|
|||
[MediaQueryList-addListener-removeListener.html]
|
||||
[listeners are called when <iframe> is resized]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called correct number of times]
|
||||
expected: FAIL
|
||||
|
||||
[listeners are called in order their MQLs were created]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,2 +0,0 @@
|
|||
[add-background-attachment-fixed-during-smooth-scroll.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[background-change-during-smooth-scroll.html]
|
||||
expected: TIMEOUT
|
||||
[background change during smooth scroll]
|
||||
expected: NOTRUN
|
|
@ -1,6 +0,0 @@
|
|||
[dom-element-scroll.html]
|
||||
[Element test for having overflow]
|
||||
expected: FAIL
|
||||
|
||||
[Element test for having scrolling box]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[elementFromPoint-float-in-table.html]
|
||||
[float-in-div]
|
||||
expected: FAIL
|
|
@ -1,12 +0,0 @@
|
|||
[elementScroll-002.html]
|
||||
[simple scroll with style: 'padding' and 'overflow: hidden']
|
||||
expected: FAIL
|
||||
|
||||
[simple scroll with style: 'margin' and 'overflow: hidden']
|
||||
expected: FAIL
|
||||
|
||||
[simple scroll with style: 'margin' and 'overflow: scroll']
|
||||
expected: FAIL
|
||||
|
||||
[simple scroll with style: 'padding' and 'overflow: scroll']
|
||||
expected: FAIL
|
|
@ -1,24 +1,3 @@
|
|||
[elementScroll.html]
|
||||
[Element scrollTop/Left getter/setter test]
|
||||
expected: FAIL
|
||||
|
||||
[Element scrollBy test (two arguments)]
|
||||
expected: FAIL
|
||||
|
||||
[Element scrollTo test (two arguments)]
|
||||
expected: FAIL
|
||||
|
||||
[Element scroll test (two arguments)]
|
||||
expected: FAIL
|
||||
|
||||
[Element scroll maximum test]
|
||||
expected: FAIL
|
||||
|
||||
[Element scrollTo test (one argument)]
|
||||
expected: FAIL
|
||||
|
||||
[Element scrollBy test (one argument)]
|
||||
expected: FAIL
|
||||
|
||||
[Element scroll test (one argument)]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
[elementsFromPoint-iframes.html]
|
||||
[elementsFromPoint on the root document for points in iframe elements]
|
||||
expected: FAIL
|
||||
|
||||
[elementsFromPoint on inner documents]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[elementsFromPoint-inline-vlr-ltr.html]
|
||||
[elementsFromPoint should return all elements under a point]
|
||||
expected: FAIL
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[pt-to-px-width.html]
|
||||
[10pt converted to offset/client/scroll width]
|
||||
expected: FAIL
|
|
@ -1,6 +1,3 @@
|
|||
[scroll-behavior-default-css.html]
|
||||
[Instant scrolling of an element with default scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Smooth scrolling of an element with default scroll-behavior]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,13 +1,4 @@
|
|||
[scroll-behavior-element.html]
|
||||
[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]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -17,21 +8,9 @@
|
|||
[Element with smooth scroll-behavior ; scroll() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scroll() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scroll() with smooth 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 auto scroll-behavior ; scrollTo() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -41,21 +20,9 @@
|
|||
[Element with smooth scroll-behavior ; scrollTo() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollTo() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollTo() with smooth 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 auto scroll-behavior ; scrollBy() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -65,9 +32,6 @@
|
|||
[Element with smooth scroll-behavior ; scrollBy() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollBy() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollBy() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -95,17 +59,8 @@
|
|||
[Element with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollLeft to element with auto scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollLeft to element with smooth scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollTop to element with auto scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollTop to element with smooth scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting an ongoing smooth scrolling on an element with another smooth scrolling]
|
||||
expected: FAIL
|
||||
|
|
|
@ -5,63 +5,8 @@
|
|||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollIntoView() ]
|
||||
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 (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 aborting a smooth scrolling with an instant scrolling]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollIntoView() ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from 500 to 250 by setting scrollTop ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollIntoView() ]
|
||||
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 (0, 0) to (500, 250) using scrollTo() ]
|
||||
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, 0) to (500, 250) using scroll() ]
|
||||
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 another smooth scrolling]
|
||||
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 1000 to 500 by setting scrollLeft ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from 0 to 500 by setting scrollLeft ]
|
||||
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 0 to 250 by setting scrollTop ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollBy() ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -13,15 +13,3 @@
|
|||
|
||||
[elemOverflow.scrollHeight is the width of its scrolled contents (including padding)]
|
||||
expected: FAIL
|
||||
|
||||
[elemSimple.scrollHeight is its clientHeight]
|
||||
expected: FAIL
|
||||
|
||||
[elemSimple.scrollWidth is its clientWidth]
|
||||
expected: FAIL
|
||||
|
||||
[elemNestedOverflow.scrollHeight is the height of its scrolled contents (ignoring padding)]
|
||||
expected: FAIL
|
||||
|
||||
[elemNestedOverflow.scrollWidth is the width of its scrolled contents (ignoring padding)]
|
||||
expected: FAIL
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
[scrollWidthHeightWhenNotScrollable.xht]
|
||||
[elemSimple.scrollWidth is its clientWidth]
|
||||
expected: FAIL
|
||||
|
||||
[elemSimple.scrollHeight is its clientHeight]
|
||||
expected: FAIL
|
||||
|
||||
[elemOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)]
|
||||
expected: FAIL
|
||||
|
||||
[elemNestedOverflow.scrollWidth is the width of its scrolled contents (ignoring padding, since we overflowed)]
|
||||
expected: FAIL
|
||||
|
||||
[elemNestedOverflow.scrollHeight is the height of its scrolled contents (ignoring padding, since we overflowed)]
|
||||
expected: FAIL
|
||||
|
||||
[elemOverflow.scrollHeight is the width of its scrolled contents (ignoring padding, since we overflowed)]
|
||||
expected: FAIL
|
|
@ -8,24 +8,15 @@
|
|||
[scrollBy() on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollWidth/scrollHeight of the content in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollLeft/scrollRight of the content in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollWidth/scrollHeight of the content in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollWidth/scrollHeight on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollingElement in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollWidth/scrollHeight on the HTML body element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[clientWidth/clientHeight on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -43,3 +34,21 @@
|
|||
|
||||
[scrollWidth/scrollHeight on the HTML body element in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scroll() on the HTML body element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollBy() on the HTML body element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollLeft/scrollTop on the HTML body element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scroll() on the HTML body element in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollBy() on the HTML body element in quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollLeft/scrollTop on the HTML body element in quirks mode]
|
||||
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
|
2
tests/wpt/metadata/css/css-ui/text-overflow-021.html.ini
Normal file
2
tests/wpt/metadata/css/css-ui/text-overflow-021.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
|||
[text-overflow-021.html]
|
||||
expected: FAIL
|
|
@ -1,3 +0,0 @@
|
|||
[CaretPosition-001.html]
|
||||
[Element at (400, 100)]
|
||||
expected: FAIL
|
|
@ -1,2 +0,0 @@
|
|||
[add-background-attachment-fixed-during-smooth-scroll.html]
|
||||
expected: TIMEOUT
|
|
@ -1,4 +0,0 @@
|
|||
[background-change-during-smooth-scroll.html]
|
||||
expected: TIMEOUT
|
||||
[background change during smooth scroll]
|
||||
expected: NOTRUN
|
|
@ -1,7 +1,3 @@
|
|||
[elementScroll-002.html]
|
||||
[simple scroll with style: 'margin' and 'overflow: scroll']
|
||||
expected: FAIL
|
||||
|
||||
[simple scroll with style: 'padding' and 'overflow: scroll']
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -2,8 +2,5 @@
|
|||
[Testing default value of scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Instant scrolling of an element with default scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Smooth 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]
|
||||
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]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -20,21 +11,9 @@
|
|||
[Element with smooth scroll-behavior ; scroll() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scroll() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scroll() with smooth 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 auto scroll-behavior ; scrollTo() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -44,21 +23,9 @@
|
|||
[Element with smooth scroll-behavior ; scrollTo() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollTo() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollTo() with smooth 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 auto scroll-behavior ; scrollBy() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -68,9 +35,6 @@
|
|||
[Element with smooth scroll-behavior ; scrollBy() with auto behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollBy() with instant behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Element with smooth scroll-behavior ; scrollBy() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -98,17 +62,8 @@
|
|||
[Element with smooth scroll-behavior ; scrollIntoView() with smooth behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollLeft to element with auto scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollLeft to element with smooth scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollTop to element with auto scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Set scrollTop to element with smooth scroll-behavior]
|
||||
expected: FAIL
|
||||
|
||||
[Aborting an ongoing smooth scrolling on an element with another smooth scrolling]
|
||||
expected: FAIL
|
||||
|
|
|
@ -2,66 +2,11 @@
|
|||
[Scroll positions when performing smooth scrolling from (1000, 0) to (500, 250) using scrollIntoView() ]
|
||||
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() ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (1000, 500) to (500, 250) using scrollIntoView() ]
|
||||
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() ]
|
||||
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() ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollTo() ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from (0, 0) to (500, 250) using scrollBy() ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from 500 to 250 by setting scrollTop ]
|
||||
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 500 by setting scrollLeft ]
|
||||
expected: FAIL
|
||||
|
||||
[Scroll positions when performing smooth scrolling from 0 to 250 by setting scrollTop ]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -17,15 +17,6 @@
|
|||
[scrollingElement in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scroll() on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollBy() on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollLeft/scrollTop on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
[scrollWidth/scrollHeight on the root element in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
|
@ -43,4 +34,3 @@
|
|||
|
||||
[scrollLeft/scrollRight of the content in non-quirks mode]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[fieldset-overflow-cssomview.html]
|
||||
[Test cssom-view API for FIELDSET]
|
||||
expected: FAIL
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue