Bug 18445

Summary: Assertion failure in CSSGradientValue::image() when the body element has a background gradient
Product: WebKit Reporter: mitz
Component: CSSAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: aroben, bdakin, dev+webkit, dino, hyatt, simon.fraser
Priority: P2 Keywords: InRadar
Version: 528+ (Nightly build)   
Hardware: Mac   
OS: OS X 10.5   
Attachments:
Description Flags
Test case (will ASSERT)
none
testcases for gradient and canvas on body
none
Change paintFillLayerExtended() to use body's renderer as the StyleImage client when the background is propagated from body to root simon.fraser: review+

mitz
Reported 2008-04-12 15:31:01 PDT
Failing the ASSERT(m_clients.contains(renderer)) in CSSGradientValue::image() because the body's background propagates to the root. See attached test case.
Attachments
Test case (will ASSERT) (114 bytes, text/html)
2008-04-12 15:33 PDT, mitz
no flags
testcases for gradient and canvas on body (1.33 KB, patch)
2008-12-03 18:14 PST, Dean Jackson
no flags
Change paintFillLayerExtended() to use body's renderer as the StyleImage client when the background is propagated from body to root (155.19 KB, patch)
2009-05-30 00:04 PDT, mitz
simon.fraser: review+
mitz
Comment 1 2008-04-12 15:33:58 PDT
Created attachment 20494 [details] Test case (will ASSERT)
mitz
Comment 2 2008-05-13 08:40:38 PDT
*** Bug 19030 has been marked as a duplicate of this bug. ***
Adam Roben (:aroben)
Comment 3 2008-05-13 08:41:39 PDT
Dean Jackson
Comment 4 2008-12-03 18:12:38 PST
Note that -webkit-canvas has the same problem. ASSERT(m_clients.contains(renderer)); in CSSCanvasValue::image There are a few options. 1. add the canvas and gradient as clients before asking for the images. I expect this wastes memory in the case where a canvas/gradient is set on the body, then removed. 2. remove the asserts. Since gradient calls getImage and it causes the renderer to be added as a client I don't think it is a big deal, but I didn't investigate much. I didn't try this with canvas. 3. Work out why body elements are not doing the right thing with updateFillImages from RenderObject::setStyle, which is where other elements add gradients and canvas as clients.
Dean Jackson
Comment 5 2008-12-03 18:14:55 PST
Created attachment 25730 [details] testcases for gradient and canvas on body here are two layout tests that will trigger the assert
mitz
Comment 6 2008-12-03 18:33:11 PST
(In reply to comment #4) > 3. Work out why body elements are not doing the right thing with > updateFillImages from RenderObject::setStyle, which is where other elements add > gradients and canvas as clients. I think this is the first option to pursue. If I am not mistaken, it has to do with the special rules for background-image propagation from <body> to <html>.
mitz
Comment 7 2009-05-30 00:04:01 PDT
Created attachment 30802 [details] Change paintFillLayerExtended() to use body's renderer as the StyleImage client when the background is propagated from body to root
Simon Fraser (smfr)
Comment 8 2009-05-30 08:44:06 PDT
Comment on attachment 30802 [details] Change paintFillLayerExtended() to use body's renderer as the StyleImage client when the background is propagated from body to root r=me
mitz
Comment 9 2009-05-30 10:58:04 PDT
Note You need to log in before you can comment on or make changes to this bug.