Bug 37741

Summary: Clean up RenderPart/RenderPartObject/RenderFrame/RenderEmbeddedObject
Product: WebKit Reporter: Simon Fraser (smfr) <simon.fraser>
Component: Layout and RenderingAssignee: Nobody <webkit-unassigned>
Status: RESOLVED FIXED    
Severity: Normal CC: abarth, alex, cmarrin, eric, kenneth, tonikitoo, webkit.review.bot
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: All   
OS: OS X 10.5   
Bug Depends on: 37864    
Bug Blocks:    
Attachments:
Description Flags
Patch
darin: review+
Patch
ggaren: review+
Patch
none
Patch dglazkov: review+

Simon Fraser (smfr)
Reported 2010-04-16 18:24:12 PDT
The class hierarchy for these renders is whacko: RenderPart | ------------------- | | v V RenderPartObject RenderFrame | v RenderEmbeddedObject RenderEmbeddedObject is instantiated for plugins. RenderFrame is instantiated for <frame> RenderPartObject is instantiated for <iframe> <frame> and <iframe> share some code in RenderPart, namely RenderPart::layoutWithFlattening(), but this does not apply to plug-ins. Also, most of the code in RenderPartObject only applies to iframes. I think it should be: RenderPart | ---------------------- | | v V RenderEmbeddedObject RenderFrameBase | ------------------ | | RenderFrame RenderIFrame
Attachments
Patch (31.19 KB, patch)
2010-04-19 17:54 PDT, Simon Fraser (smfr)
darin: review+
Patch (3.20 KB, patch)
2010-04-19 21:19 PDT, Simon Fraser (smfr)
ggaren: review+
Patch (11.41 KB, patch)
2010-04-19 21:55 PDT, Simon Fraser (smfr)
no flags
Patch (16.98 KB, patch)
2010-04-20 11:15 PDT, Simon Fraser (smfr)
dglazkov: review+
Simon Fraser (smfr)
Comment 1 2010-04-19 17:54:05 PDT
Darin Adler
Comment 2 2010-04-19 18:01:27 PDT
Comment on attachment 53752 [details] Patch > -// Renderer for embeds and objects. > +// Renderer for embeds and objects (whose content may not necessarily be rendered via a plug-in, e.g. <embed src="foo.html>). There's a missing close quote mark here. I think this comment would be clearer as a second sentence. And I think it would be clearer if you could word it as a positive rather than a negative. > + * Copyright (C) 2010 Apple Computer, Inc. All rights reserved. Should be "Copyright (C) 2010 Apple Inc. All rights reserved." with one space and no "Computer ,". > +using namespace HTMLNames; > + I noticed a trailing space here. > +RenderFrameBase::~RenderFrameBase() > +{ > +} Can we just leave this out and let the compiler generate it? > +void RenderFrameBase::layoutWithFlattening(bool fixedWidth, bool fixedHeight) It would be nice to use "svn copy" so that we can see the history of this code instead of it seeming all new. > +class RenderFrameBase : public RenderPart { > +public: > + RenderFrameBase(Element*); Constructor should be protected. > + virtual ~RenderFrameBase(); This destructor should just be omitted. > + void layoutWithFlattening(bool fixedWidth, bool fixedHeight); This function should be protected rather than public, I think. > +RenderIFrame::~RenderIFrame() > +{ > +} Same comment as above. Please omit this. > +// Base class for RenderFrame and RenderIFrame > +class RenderIFrame : public RenderFrameBase { That comment is wrong. > +public: > + RenderIFrame(Element*); > + virtual ~RenderIFrame(); You should omit this destructor. > + virtual void calcHeight(); > + virtual void calcWidth(); > + > + virtual void layout(); Can these virtual functions all be private? review+ but I'd like to see a version that preserves history and keeps things more private as mentioned above.
Simon Fraser (smfr)
Comment 3 2010-04-19 21:11:10 PDT
Comment on attachment 53752 [details] Patch Landed in http://trac.webkit.org/changeset/57866 with svn moves, and comments addressed.
Simon Fraser (smfr)
Comment 4 2010-04-19 21:19:57 PDT
Geoffrey Garen
Comment 5 2010-04-19 21:21:16 PDT
Comment on attachment 53768 [details] Patch r=me
Simon Fraser (smfr)
Comment 6 2010-04-19 21:23:31 PDT
Simon Fraser (smfr)
Comment 7 2010-04-19 21:55:19 PDT
mitz
Comment 8 2010-04-19 22:03:32 PDT
Comment on attachment 53770 [details] Patch > +inline RenderFrameBase* toRenderFrameBase(RenderObject* object) > +{ > + ASSERT(!object || object->isRenderFrameBase()); > + return static_cast<RenderFrameBase*>(object); > +} Typically there’s also a const version of these. > + > +// This will catch anyone doing an unnecessary cast. > +void toRenderPart(const RenderFrameBase*); This is should be toRenderFrameBase(const RenderFrameBase*) r=me
Simon Fraser (smfr)
Comment 9 2010-04-20 08:06:53 PDT
WebKit Review Bot
Comment 10 2010-04-20 08:56:14 PDT
http://trac.webkit.org/changeset/57892 might have broken Leopard Intel Debug (Tests)
Simon Fraser (smfr)
Comment 11 2010-04-20 10:27:42 PDT
Comment on attachment 53770 [details] Patch This patch was backed out, since it causes an assertion. Frame::ownerRenderer() can be a RenderEmbeddedObject for an <object> containing HTML.
Alejandro G. Castro
Comment 12 2010-04-20 10:51:19 PDT
The patch also caused 4 tests to launch an assertion in the gtk+ bots, the stacks are all like this one: http://webkit-bots.igalia.com/amd64/svn_57893.core-when_1271781421-_-who_DumpRenderTree-_-why_11.10660.trace.html
Simon Fraser (smfr)
Comment 13 2010-04-20 11:15:41 PDT
Dimitri Glazkov (Google)
Comment 14 2010-04-20 11:18:58 PDT
Comment on attachment 53850 [details] Patch yay!
Simon Fraser (smfr)
Comment 15 2010-04-20 11:23:48 PDT
Simon Fraser (smfr)
Comment 16 2010-04-20 11:24:05 PDT
I think this will do for now.
Note You need to log in before you can comment on or make changes to this bug.