Closed Bug 1029919 Opened 12 years ago Closed 12 years ago

[OMTC][HWA off]<button:hover> outside parent's border-radius obtains a background/border in parent's inset box-shadow's color

Categories

(Core :: Graphics: Layers, defect)

x86
Windows XP
defect
Not set
normal

Tracking

()

VERIFIED FIXED
mozilla33
Tracking Status
firefox30 --- unaffected
firefox31 --- unaffected
firefox32 + unaffected
firefox33 --- verified

People

(Reporter: moz, Assigned: bas.schouten)

References

Details

(Keywords: regression, testcase)

Attachments

(4 files, 3 obsolete files)

Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0 I see this regression on XP in current Nightly, works in Fx30: See testcase (reduced from a real-world-website), hovering over <button>s draws a border in the color of the parent's inset box-shadow. Actually, it's just a background-color, as you can see if button's opacity < 1.
Attached file testcase (obsolete) —
Attached file testcase —
Attachment #8445572 - Attachment is obsolete: true
Need a regression range. Doesn't seem to be reproducible on Mac. :(
Could you attach screenshot(actual and expected) of the problem?
Flags: needinfo?(moz)
Button's background gets green (and stays green) onmouseover. The second button is opaque, so you see a green border only. This is on XP and of course it differs depending on OS specific button styling. Expected: Display native buttons (no green background-color or border) after hovering over it.
Flags: needinfo?(moz)
Screenshot from real website: Translucent Button should not get red background after hovering.
I can reproduce the problem in Aurora32.0a2 and Nightly33.0a1 WindowsXP SP3 default visual style(i.e. Luna). However, I cannnot reproduce in Beta31.0b4. Regression window(m-i) Good: https://hg.mozilla.org/integration/mozilla-inbound/rev/bb8fc1380b00 Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0 ID:20140519202628 Bad: https://hg.mozilla.org/integration/mozilla-inbound/rev/46d9ffb97fe3 Mozilla/5.0 (Windows NT 5.1; rv:32.0) Gecko/20100101 Firefox/32.0 ID:20140519224628 Pushlog: http://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=bb8fc1380b00&tochange=46d9ffb97fe3 Triggered by: 46d9ffb97fe3 Bas Schouten — Bug 899785: Switch on OMTC and async video on windows. r=BenWa Setting layers.offmainthreadcomposition.enabled = false fixes the problem
I can reproduce on Windows8.1update1, Windows7 if OMTC on and HWA off. Graphics Adapter Description ATI Radeon HD 4300/4500 Series Adapter Drivers aticfx64 aticfx64 aticfx32 aticfx32 atiumd64 atidxx64 atiumdag atidxx32 atiumdva atiumd6a atitmm64 Adapter RAM 512 ClearType Parameters Gamma: 2200 Pixel Structure: R ClearType Level: 50 Enhanced Contrast: 200 Device ID 0x954f DirectWrite Enabled false (6.2.9200.16492) Driver Date 4-29-2013 Driver Version 8.970.100.1100 GPU #2 Active false GPU Accelerated Windows 0/1 Basic (OMTC) Vendor ID 0x1002 WebGL Renderer Google Inc. -- ANGLE (ATI Radeon HD 4300/4500 Series Direct3D9Ex vs_3_0 ps_3_0) windowLayerManagerRemote true AzureCanvasBackend skia AzureContentBackend cairo AzureFallbackCanvasBackend cairo AzureSkiaAccelerated 0
Summary: <button:hover> outside parent's border-radius obtains a background/border in parent's inset box-shadow's color → [OMTC][HWA off]<button:hover> outside parent's border-radius obtains a background/border in parent's inset box-shadow's color
Component: Layout → Graphics: Layers
Bas, can you take a look please?
Flags: needinfo?(bas)
So after a long investigation, I've found some interesting information. This appears to be a bug in cairo clipping, it appears that the clip at nsCSSRendering.cpp:1526 fails to be applied properly if there's already a clip present for the small rectangle surrounding the button (which would be disjoint with this clip) (i.e. if I remove that clip the button always gets a green background, if I leave it in it only has a green background when doing a partial invalidation of the button). I know we've had clipping bugs with Cairo in the past, Jeff, does this sort of issue ring a bell for you?
Assignee: nobody → bas
Status: NEW → ASSIGNED
Flags: needinfo?(bas) → needinfo?(jmuizelaar)
Attached patch Patch that 'fixes' the bug (obsolete) — — Splinter Review
This patch fixes the bug, providing evidence of the rootcause suggested.
So as far as my investigation has been able to show this bug is indirectly the results of the extents on a clip path being incorrectly set. At cairo-clip.c:276 we set the extents on the clip_path struct, but those extents no longer contain the real extents but rather the intersection of these clips. This patch fixes that, however it does have the downside of extents of the top level clip no longer being the intersection of all the clips on the stack, I think that's okay and will only make a difference in some rare perf cases though.
Attachment #8446376 - Attachment is obsolete: true
Attachment #8447783 - Flags: review?(jmuizelaar)
Comment on attachment 8447783 [details] [diff] [review] Set the proper extent on the clip_path in cairo Review of attachment 8447783 [details] [diff] [review]: ----------------------------------------------------------------- I'm not sure this is correct. I don't see why the extents that are set need to be extents of the path and can't be the extents of the intersection.
Attachment #8447783 - Flags: review?(jmuizelaar) → review-
I believe this is the correct fix this time, I'd like to hear what you think :-).
Attachment #8447783 - Attachment is obsolete: true
Attachment #8449937 - Flags: review?(jmuizelaar)
Attachment #8449937 - Flags: review?(jmuizelaar) → review+
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla33
Mozilla/5.0 (Windows NT 5.1; rv:33.0) Gecko/20100101 Firefox/33.0 Verified fixed in today's Nightly
Status: RESOLVED → VERIFIED
Flags: needinfo?(jmuizelaar)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: