Ensure transparent hit test region is sized and positioned correctly.

This commit is contained in:
Josh Matthews 2019-02-06 15:17:29 -05:00
parent a34c8f952e
commit f59e95ee3d
3 changed files with 65 additions and 3 deletions

View file

@ -390,7 +390,25 @@ impl<'a> DisplayListBuildState<'a> {
} else { } else {
self.current_clipping_and_scrolling self.current_clipping_and_scrolling
}; };
self.create_base_display_item_with_clipping_and_scrolling(
bounds,
clip_rect,
node,
cursor,
section,
clipping_and_scrolling,
)
}
fn create_base_display_item_with_clipping_and_scrolling(
&self,
bounds: Rect<Au>,
clip_rect: Rect<Au>,
node: OpaqueNode,
cursor: Option<Cursor>,
section: DisplayListSection,
clipping_and_scrolling: ClippingAndScrolling,
) -> BaseDisplayItem {
BaseDisplayItem::new( BaseDisplayItem::new(
bounds.to_layout(), bounds.to_layout(),
DisplayItemMetadata { DisplayItemMetadata {
@ -1640,14 +1658,15 @@ impl Fragment {
// of this fragment's background but behind its content. This ensures that any // of this fragment's background but behind its content. This ensures that any
// hit tests inside the content box but not on actual content target the current // hit tests inside the content box but not on actual content target the current
// scrollable ancestor. // scrollable ancestor.
let content_size = TypedRect::from_size(content_size); let content_size = TypedRect::new(stacking_relative_border_box.origin, content_size);
let base = state.create_base_display_item( let base = state.create_base_display_item_with_clipping_and_scrolling(
content_size, content_size,
content_size, content_size,
self.node, self.node,
// FIXME(emilio): Why does this ignore pointer-events? // FIXME(emilio): Why does this ignore pointer-events?
get_cursor(&self.style, Cursor::Default).or(Some(Cursor::Default)), get_cursor(&self.style, Cursor::Default).or(Some(Cursor::Default)),
DisplayListSection::Content, display_list_section,
state.current_clipping_and_scrolling,
); );
state.add_display_item(DisplayItem::Rectangle(CommonDisplayItem::new( state.add_display_item(DisplayItem::Rectangle(CommonDisplayItem::new(
base, base,

View file

@ -12659,6 +12659,12 @@
{} {}
] ]
], ],
"mozilla/hit-test-background.html": [
[
"/_mozilla/mozilla/hit-test-background.html",
{}
]
],
"mozilla/hit_test_multiple_sc.html": [ "mozilla/hit_test_multiple_sc.html": [
[ [
"/_mozilla/mozilla/hit_test_multiple_sc.html", "/_mozilla/mozilla/hit_test_multiple_sc.html",
@ -19418,6 +19424,10 @@
"9baa0cdcd5abad00b321e8b9351a1bc162783ed5", "9baa0cdcd5abad00b321e8b9351a1bc162783ed5",
"support" "support"
], ],
"mozilla/hit-test-background.html": [
"5212954e4ee6ecb684212e7373e24a2268434b1c",
"testharness"
],
"mozilla/hit_test_multiple_sc.html": [ "mozilla/hit_test_multiple_sc.html": [
"1c79d25ea06f80eb515282fb0a53a34f92a25698", "1c79d25ea06f80eb515282fb0a53a34f92a25698",
"testharness" "testharness"

View file

@ -0,0 +1,33 @@
<title>Hit testing backgrounds of content should report the same element as the content</title>
<style>
* {
margin: 0;
padding: 0;
border-width: 0;
}
.tiles {
background-color: red;
overflow: hidden;
}
.tile-image {
background-color: green;
border: 1px solid black;
height: 100px;
width: 160px;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id="bg" class="tiles">
<a id="anchor" href="about:blank">
<div id="tile" class="tile-image duckduckgo"></div>
</a>
</div>
<script>
var t = async_test();
onload = t.step_func_done(function() {
var tile = document.getElementById('tile');
assert_equals(document.elementFromPoint(10, 10), tile);
});
</script>