Bug 158202

Summary: Clipped element does not have a reflection if backdrop-filter is applied
Product: WebKit Reporter: Antoine Quint <graouts>
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: NEW    
Severity: Normal CC: graouts, simon.fraser, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: WebKit Nightly Build   
Hardware: All   
OS: All   
Attachments:
Description Flags
Testcase none

Antoine Quint
Reported 2016-05-30 07:02:57 PDT
Created attachment 280097 [details] Testcase If an element that has a backdrop-filter as well as a clip-path applied to it has a reflection, the reflection does not appear.
Attachments
Testcase (884 bytes, text/html)
2016-05-30 07:02 PDT, Antoine Quint
no flags
Radar WebKit Bug Importer
Comment 1 2016-05-30 07:04:17 PDT
Radar WebKit Bug Importer
Comment 2 2016-05-30 07:06:17 PDT
Antoine Quint
Comment 3 2016-06-03 09:22:22 PDT
I have it working but for some reason the background color is missing in the reflection until I resize a window, which I assume is because that causes a layout.
Antoine Quint
Comment 4 2016-06-06 16:32:33 PDT
This is a lot trickier than I thought at first. To get this to work, we need to do this: - in PlatformCALayerCocoa::clone(), also call setShapePath() when we're dealing with a LayerTypeShapeLayer - in GraphicsLayerCA::fetchCloneLayers(), clone the mask layer in case we have both a backdrop and a mask and set the cloned mask to the cloned backdrop But this doesn't fully fix the issue, because the way we clone the mask in GraphicsLayerCA::updateLayerMask() isn't quite correct. Ideally, we would clone the mask's PlatformCALayer independently in GraphicsLayerCA::updateLayerMask() and GraphicsLayerCA::fetchCloneLayers(), but this is made difficult due to the mask layer being touched from RenderLayerBacking and due to not having a way to get to the backdrop clone from GraphicsLayerCA since this is all internal to PlatformCALayer.
Note You need to log in before you can comment on or make changes to this bug.