RESOLVED FIXED 128671
CounterContentData::counter() and ImageContentData::image() should return references
https://bugs.webkit.org/show_bug.cgi?id=128671
Summary CounterContentData::counter() and ImageContentData::image() should return ref...
David Kilzer (:ddkilzer)
Reported 2014-02-12 04:39:34 PST
CounterContentData::counter() and ImageContentData::image() should return references. Follow-up to Darin's comment in Bug 128538 Comment #3: (In reply to bug 128538 comment #3) > (From update of attachment 223726 [details]) > > Source/WebCore/rendering/style/ContentData.h:160 > > const CounterContent* counter() const { return m_counter.get(); } > > Seems like this should return a reference rather than a pointer, unless it can be null.
Attachments
Patch v1 (8.29 KB, patch)
2014-02-12 09:42 PST, David Kilzer (:ddkilzer)
darin: review+
David Kilzer (:ddkilzer)
Comment 1 2014-02-12 09:42:52 PST
Created attachment 223975 [details] Patch v1
Andreas Kling
Comment 2 2014-02-12 11:02:41 PST
Comment on attachment 223975 [details] Patch v1 View in context: https://bugs.webkit.org/attachment.cgi?id=223975&action=review > Source/WebCore/rendering/style/ContentData.h:94 > void setImage(PassRefPtr<StyleImage> image) { m_image = image; } Is this function ever used in a way that makes m_image null?
Darin Adler
Comment 3 2014-02-12 16:12:03 PST
Comment on attachment 223975 [details] Patch v1 View in context: https://bugs.webkit.org/attachment.cgi?id=223975&action=review > Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1408 > + const CounterContent& counter = toCounterContentData(contentData)->counter(); > + list.get().append(cssValuePool().createValue(counter.identifier(), CSSPrimitiveValue::CSS_COUNTER_NAME)); Why not auto&? Maybe drop the local variable entirely and do this in a single line? > Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1411 > + const StyleImage& image = toImageContentData(contentData)->image(); > + list.get().append(image.cssValue()); Why not auto&? Maybe drop the local variable entirely and do this in a single line? > Source/WebCore/css/StyleResolver.cpp:3552 > + RefPtr<StyleImage> loadedImage = loadPendingImage(static_cast<StylePendingImage*>(const_cast<StyleImage*>(&image))); This const cast is ugly. Separate point: Can we add checked casts for StyleImage? > Source/WebCore/rendering/RenderElement.cpp:135 > + const StyleImage& styleImage = toImageContentData(contentData)->image(); Why not auto&? > Source/WebCore/rendering/style/ContentData.h:93 > + const StyleImage& image() const { return *m_image; } Why did you get rid of the const overload? >> Source/WebCore/rendering/style/ContentData.h:94 >> void setImage(PassRefPtr<StyleImage> image) { m_image = image; } > > Is this function ever used in a way that makes m_image null? Probably should add an assertion here too, as in the constructor and consider changing to PassRef maybe? > Source/WebCore/rendering/style/ContentData.h:156 > } We should assert m_counter. > Source/WebCore/rendering/style/ContentData.h:159 > void setCounter(std::unique_ptr<CounterContent> counter) { m_counter = std::move(counter); } We should assert counter (before) or m_counter (after).
David Kilzer (:ddkilzer)
Comment 4 2014-02-12 19:53:38 PST
(In reply to comment #3) > (From update of attachment 223975 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=223975&action=review > > > Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1408 > > + const CounterContent& counter = toCounterContentData(contentData)->counter(); > > + list.get().append(cssValuePool().createValue(counter.identifier(), CSSPrimitiveValue::CSS_COUNTER_NAME)); > > Why not auto&? Ahh, I didn't realize one had to use 'auto&' for a reference. I'll switch them back. > Maybe drop the local variable entirely and do this in a single line? I don't think it improves readability to make this long line even longer. > > Source/WebCore/css/CSSComputedStyleDeclaration.cpp:1411 > > + const StyleImage& image = toImageContentData(contentData)->image(); > > + list.get().append(image.cssValue()); > > Why not auto&? Will fix. > Maybe drop the local variable entirely and do this in a single line? This line still seems readable as one line. > > Source/WebCore/css/StyleResolver.cpp:3552 > > + RefPtr<StyleImage> loadedImage = loadPendingImage(static_cast<StylePendingImage*>(const_cast<StyleImage*>(&image))); > > This const cast is ugly. It gets cleaned up in a subsequent patch that makes loadPendingImage() take a reference. > Separate point: Can we add checked casts for StyleImage? I have a follow-up patch to add the checked casts for StyleImage, but it currently depends on this patch. > > Source/WebCore/rendering/RenderElement.cpp:135 > > + const StyleImage& styleImage = toImageContentData(contentData)->image(); > > Why not auto&? Will fix. > > Source/WebCore/rendering/style/ContentData.h:93 > > + const StyleImage& image() const { return *m_image; } > > Why did you get rid of the const overload? It didn't really add anything. (As noted above, the const cast goes away in a future patch.) > >> Source/WebCore/rendering/style/ContentData.h:94 > >> void setImage(PassRefPtr<StyleImage> image) { m_image = image; } > > > > Is this function ever used in a way that makes m_image null? > > Probably should add an assertion here too, as in the constructor and consider changing to PassRef maybe? Good point. Will add. > > Source/WebCore/rendering/style/ContentData.h:156 > > } > > We should assert m_counter. Will add. > > Source/WebCore/rendering/style/ContentData.h:159 > > void setCounter(std::unique_ptr<CounterContent> counter) { m_counter = std::move(counter); } > > We should assert counter (before) or m_counter (after). Will add.
David Kilzer (:ddkilzer)
Comment 5 2014-02-17 09:13:27 PST
David Kilzer (:ddkilzer)
Comment 6 2014-02-17 09:50:56 PST
(In reply to comment #4) > (In reply to comment #3) > > Separate point: Can we add checked casts for StyleImage? > > I have a follow-up patch to add the checked casts for StyleImage, but it currently depends on this patch. Bug 128915
David Kilzer (:ddkilzer)
Comment 7 2014-02-18 20:12:39 PST
(In reply to comment #4) > (In reply to comment #3) > > (From update of attachment 223975 [details] [details]) > > View in context: https://bugs.webkit.org/attachment.cgi?id=223975&action=review > > > > > Source/WebCore/css/StyleResolver.cpp:3552 > > > + RefPtr<StyleImage> loadedImage = loadPendingImage(static_cast<StylePendingImage*>(const_cast<StyleImage*>(&image))); > > > > This const cast is ugly. > > It gets cleaned up in a subsequent patch that makes loadPendingImage() take a reference. Bug 129021
Note You need to log in before you can comment on or make changes to this bug.