<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[161115] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/161115">161115</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2013-12-28 17:36:19 -0800 (Sat, 28 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add an owning smart pointer for RenderObjects and start using it.
&lt;https://webkit.org/b/126251&gt;

This patch adds a RenderPtr pointer, essentially an OwnPtr for
RenderObjects. The difference is that RenderPtr destroys the object
by calling destroy() on it.

This is necessary to implement the willBeDestroyed() mechanism in
RenderObject that notifies renderers just before they are about to
be deleted, while they can still do tree traversal, etc.

I also added a make_unique-alike helper so you can write:

    auto renderer = createRenderObject&lt;RenderImage&gt;(...);

Put it all to use by making ContentData::createRenderer() return
RenderPtr&lt;RenderObject&gt; instead of raw RenderObject*.

Reviewed by Antti Koivisto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomPseudoElementcpp">trunk/Source/WebCore/dom/PseudoElement.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleContentDatacpp">trunk/Source/WebCore/rendering/style/ContentData.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleContentDatah">trunk/Source/WebCore/rendering/style/ContentData.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorerenderingRenderPtrh">trunk/Source/WebCore/rendering/RenderPtr.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (161114 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2013-12-28 21:20:57 UTC (rev 161114)
+++ trunk/Source/WebCore/ChangeLog        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2013-12-28  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Add an owning smart pointer for RenderObjects and start using it.
+        &lt;https://webkit.org/b/126251&gt;
+
+        This patch adds a RenderPtr pointer, essentially an OwnPtr for
+        RenderObjects. The difference is that RenderPtr destroys the object
+        by calling destroy() on it.
+
+        This is necessary to implement the willBeDestroyed() mechanism in
+        RenderObject that notifies renderers just before they are about to
+        be deleted, while they can still do tree traversal, etc.
+
+        I also added a make_unique-alike helper so you can write:
+
+            auto renderer = createRenderObject&lt;RenderImage&gt;(...);
+
+        Put it all to use by making ContentData::createRenderer() return
+        RenderPtr&lt;RenderObject&gt; instead of raw RenderObject*.
+
+        Reviewed by Antti Koivisto.
+
</ins><span class="cx"> 2013-12-28  Benjamin Poulain  &lt;benjamin@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Add a missing include path for GTK
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (161114 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2013-12-28 21:20:57 UTC (rev 161114)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -10980,6 +10980,7 @@
</span><span class="cx">                 AD726FEC16D9F4B9003A4E6D /* JSStyleSheetCustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStyleSheetCustom.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 ADDF1AD41257CD9A0003A759 /* RenderSVGPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSVGPath.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 ADDF1AD51257CD9A0003A759 /* RenderSVGPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderSVGPath.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                ADE16736181050C300463A2E /* RenderPtr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderPtr.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 B10B697D140C174000BC1C26 /* WebVTTToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVTTToken.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B10B697E140C174000BC1C26 /* WebVTTTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebVTTTokenizer.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 B10B697F140C174000BC1C26 /* WebVTTTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVTTTokenizer.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -21324,6 +21325,7 @@
</span><span class="cx">                                 BCFA930710333193007B25D1 /* RenderOverflow.h */,
</span><span class="cx">                                 A43BF59A1149292800C643CA /* RenderProgress.cpp */,
</span><span class="cx">                                 A43BF59B1149292800C643CA /* RenderProgress.h */,
</span><ins>+                                ADE16736181050C300463A2E /* RenderPtr.h */,
</ins><span class="cx">                                 5A574F22131DB93900471B88 /* RenderQuote.cpp */,
</span><span class="cx">                                 5A574F23131DB93900471B88 /* RenderQuote.h */,
</span><span class="cx">                                 D70AD65513E1342B005B50B4 /* RenderRegion.cpp */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomPseudoElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/PseudoElement.cpp (161114 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/PseudoElement.cpp        2013-12-28 21:20:57 UTC (rev 161114)
+++ trunk/Source/WebCore/dom/PseudoElement.cpp        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -83,17 +83,17 @@
</span><span class="cx">     if (!renderer || renderer-&gt;style().hasFlowFrom())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    RenderStyle&amp; style = renderer-&gt;style();
</del><ins>+    const RenderStyle&amp; style = renderer-&gt;style();
</ins><span class="cx">     ASSERT(style.contentData());
</span><span class="cx"> 
</span><span class="cx">     for (const ContentData* content = style.contentData(); content; content = content-&gt;next()) {
</span><del>-        RenderObject* child = content-&gt;createRenderer(document(), style);
</del><ins>+        RenderPtr&lt;RenderObject&gt; child = content-&gt;createRenderer(document(), style);
</ins><span class="cx">         if (renderer-&gt;isChildAllowed(*child, style)) {
</span><del>-            renderer-&gt;addChild(child);
-            if (child-&gt;isQuote())
-                toRenderQuote(child)-&gt;attachQuote();
-        } else
-            child-&gt;destroy();
</del><ins>+            auto* childPtr = child.get();
+            renderer-&gt;addChild(child.leakPtr());
+            if (childPtr-&gt;isQuote())
+                toRenderQuote(childPtr)-&gt;attachQuote();
+        }
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderPtrh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/rendering/RenderPtr.h (0 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderPtr.h                                (rev 0)
+++ trunk/Source/WebCore/rendering/RenderPtr.h        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -0,0 +1,162 @@
</span><ins>+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef RenderPtr_h
+#define RenderPtr_h
+
+#include &lt;wtf/Assertions.h&gt;
+#include &lt;algorithm&gt;
+#include &lt;cstddef&gt;
+#include &lt;memory&gt;
+
+namespace WebCore {
+
+template&lt;typename T&gt; class RenderPtr {
+public:
+    typedef T ValueType;
+    typedef ValueType* PtrType;
+
+    RenderPtr() : m_ptr(nullptr) { }
+    RenderPtr(std::nullptr_t) : m_ptr(nullptr) { }
+    explicit RenderPtr(T* ptr) : m_ptr(ptr) { }
+
+    ~RenderPtr()
+    {
+        if (m_ptr)
+            m_ptr-&gt;destroy();
+    }
+
+    PtrType get() const { return m_ptr; }
+
+    void clear();
+    PtrType leakPtr() WARN_UNUSED_RETURN;
+
+    ValueType&amp; operator*() const { ASSERT(m_ptr); return *m_ptr; }
+    PtrType operator-&gt;() const { ASSERT(m_ptr); return m_ptr; }
+
+    bool operator!() const { return !m_ptr; }
+
+    // This conversion operator allows implicit conversion to bool but not to other integer types.
+    typedef PtrType RenderPtr::*UnspecifiedBoolType;
+    operator UnspecifiedBoolType() const { return m_ptr ? &amp;RenderPtr::m_ptr : nullptr; }
+
+    RenderPtr&amp; operator=(std::nullptr_t) { clear(); return *this; }
+
+    RenderPtr(RenderPtr&amp;&amp;);
+    template&lt;typename U&gt; RenderPtr(RenderPtr&lt;U&gt;&amp;&amp;);
+
+    RenderPtr&amp; operator=(RenderPtr&amp;&amp;);
+    template&lt;typename U&gt; RenderPtr&amp; operator=(RenderPtr&lt;U&gt;&amp;&amp;);
+
+    void swap(RenderPtr&amp; o) { std::swap(m_ptr, o.m_ptr); }
+
+private:
+    // We should never have two RenderPtrs for the same underlying object (otherwise we'll get
+    // double-destruction), so these equality operators should never be needed.
+    template&lt;typename U&gt; bool operator==(const RenderPtr&lt;U&gt;&amp;) { COMPILE_ASSERT(!sizeof(U*), RenderPtrs_should_never_be_equal); return false; }
+    template&lt;typename U&gt; bool operator!=(const RenderPtr&lt;U&gt;&amp;) { COMPILE_ASSERT(!sizeof(U*), RenderPtrs_should_never_be_equal); return false; }
+
+    PtrType m_ptr;
+};
+
+template&lt;typename T&gt; inline void RenderPtr&lt;T&gt;::clear()
+{
+    if (m_ptr)
+        m_ptr-&gt;destroy();
+    m_ptr = nullptr;
+}
+
+template&lt;typename T&gt; inline typename RenderPtr&lt;T&gt;::PtrType RenderPtr&lt;T&gt;::leakPtr()
+{
+    PtrType ptr = m_ptr;
+    m_ptr = nullptr;
+    return ptr;
+}
+
+template&lt;typename T&gt; inline RenderPtr&lt;T&gt;::RenderPtr(RenderPtr&lt;T&gt;&amp;&amp; o)
+    : m_ptr(o.leakPtr())
+{
+}
+
+template&lt;typename T&gt; template&lt;typename U&gt; inline RenderPtr&lt;T&gt;::RenderPtr(RenderPtr&lt;U&gt;&amp;&amp; o)
+    : m_ptr(o.leakPtr())
+{
+}
+
+template&lt;typename T&gt; inline auto RenderPtr&lt;T&gt;::operator=(RenderPtr&amp;&amp; o) -&gt; RenderPtr&amp;
+{
+    ASSERT(!o || o != m_ptr);
+    RenderPtr ptr = std::move(o);
+    swap(ptr);
+    return *this;
+}
+
+template&lt;typename T&gt; template&lt;typename U&gt; inline auto RenderPtr&lt;T&gt;::operator=(RenderPtr&lt;U&gt;&amp;&amp; o) -&gt; RenderPtr&amp;
+{
+    ASSERT(!o || o != m_ptr);
+    RenderPtr ptr = std::move(o);
+    swap(ptr);
+    return *this;
+}
+
+template&lt;typename T&gt; inline void swap(RenderPtr&lt;T&gt;&amp; a, RenderPtr&lt;T&gt;&amp; b)
+{
+    a.swap(b);
+}
+
+template&lt;typename T, typename U&gt; inline bool operator==(const RenderPtr&lt;T&gt;&amp; a, U* b)
+{
+    return a.get() == b;
+}
+
+template&lt;typename T, typename U&gt; inline bool operator==(T* a, const RenderPtr&lt;U&gt;&amp; b) 
+{
+    return a == b.get();
+}
+
+template&lt;typename T, typename U&gt; inline bool operator!=(const RenderPtr&lt;T&gt;&amp; a, U* b)
+{
+    return a.get() != b;
+}
+
+template&lt;typename T, typename U&gt; inline bool operator!=(T* a, const RenderPtr&lt;U&gt;&amp; b)
+{
+    return a != b.get();
+}
+
+template&lt;typename T&gt; inline typename RenderPtr&lt;T&gt;::PtrType getPtr(const RenderPtr&lt;T&gt;&amp; p)
+{
+    return p.get();
+}
+
+template&lt;class T, class... Args&gt; inline RenderPtr&lt;T&gt;
+createRenderObject(Args&amp;&amp;... args)
+{
+    return RenderPtr&lt;T&gt;(new T(std::forward&lt;Args&gt;(args)...));
+}
+
+} // namespace WebCore
+
+#endif // RenderPtr_h
</ins></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleContentDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/ContentData.cpp (161114 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/ContentData.cpp        2013-12-28 21:20:57 UTC (rev 161114)
+++ trunk/Source/WebCore/rendering/style/ContentData.cpp        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -47,33 +47,33 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderObject* ImageContentData::createRenderer(Document&amp; document, RenderStyle&amp; pseudoStyle) const
</del><ins>+RenderPtr&lt;RenderObject&gt; ImageContentData::createRenderer(Document&amp; document, const RenderStyle&amp; pseudoStyle) const
</ins><span class="cx"> {
</span><del>-    RenderImage* image = new RenderImage(document, RenderImage::createStyleInheritingFromPseudoStyle(pseudoStyle));
</del><ins>+    auto image = createRenderObject&lt;RenderImage&gt;(document, RenderImage::createStyleInheritingFromPseudoStyle(pseudoStyle));
</ins><span class="cx">     image-&gt;initializeStyle();
</span><span class="cx">     image-&gt;setAltText(altText());
</span><span class="cx">     if (m_image)
</span><span class="cx">         image-&gt;setImageResource(RenderImageResourceStyleImage::create(*m_image));
</span><span class="cx">     else
</span><span class="cx">         image-&gt;setImageResource(RenderImageResource::create());
</span><del>-    return image;
</del><ins>+    return std::move(image);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderObject* TextContentData::createRenderer(Document&amp; document, RenderStyle&amp;) const
</del><ins>+RenderPtr&lt;RenderObject&gt; TextContentData::createRenderer(Document&amp; document, const RenderStyle&amp;) const
</ins><span class="cx"> {
</span><del>-    RenderTextFragment* fragment = new RenderTextFragment(document, m_text);
</del><ins>+    auto fragment = createRenderObject&lt;RenderTextFragment&gt;(document, m_text);
</ins><span class="cx">     fragment-&gt;setAltText(altText());
</span><del>-    return fragment;
</del><ins>+    return std::move(fragment);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderObject* CounterContentData::createRenderer(Document&amp; document, RenderStyle&amp;) const
</del><ins>+RenderPtr&lt;RenderObject&gt; CounterContentData::createRenderer(Document&amp; document, const RenderStyle&amp;) const
</ins><span class="cx"> {
</span><del>-    return new RenderCounter(document, *m_counter);
</del><ins>+    return createRenderObject&lt;RenderCounter&gt;(document, *m_counter);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RenderObject* QuoteContentData::createRenderer(Document&amp; document, RenderStyle&amp;) const
</del><ins>+RenderPtr&lt;RenderObject&gt; QuoteContentData::createRenderer(Document&amp; document, const RenderStyle&amp;) const
</ins><span class="cx"> {
</span><del>-    return new RenderQuote(document, m_quote);
</del><ins>+    return createRenderObject&lt;RenderQuote&gt;(document, m_quote);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleContentDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/ContentData.h (161114 => 161115)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/ContentData.h        2013-12-28 21:20:57 UTC (rev 161114)
+++ trunk/Source/WebCore/rendering/style/ContentData.h        2013-12-29 01:36:19 UTC (rev 161115)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;CounterContent.h&quot;
</span><span class="cx"> #include &quot;StyleImage.h&quot;
</span><ins>+#include &quot;RenderPtr.h&quot;
</ins><span class="cx"> #include &lt;wtf/OwnPtr.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -45,7 +46,7 @@
</span><span class="cx">     virtual bool isQuote() const { return false; }
</span><span class="cx">     virtual bool isText() const { return false; }
</span><span class="cx"> 
</span><del>-    virtual RenderObject* createRenderer(Document&amp;, RenderStyle&amp;) const = 0;
</del><ins>+    virtual RenderPtr&lt;RenderObject&gt; createRenderer(Document&amp;, const RenderStyle&amp;) const = 0;
</ins><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;ContentData&gt; clone() const;
</span><span class="cx"> 
</span><span class="lines">@@ -76,7 +77,7 @@
</span><span class="cx">     void setImage(PassRefPtr&lt;StyleImage&gt; image) { m_image = image; }
</span><span class="cx"> 
</span><span class="cx">     virtual bool isImage() const OVERRIDE { return true; }
</span><del>-    virtual RenderObject* createRenderer(Document&amp;, RenderStyle&amp;) const OVERRIDE;
</del><ins>+    virtual RenderPtr&lt;RenderObject&gt; createRenderer(Document&amp;, const RenderStyle&amp;) const OVERRIDE;
</ins><span class="cx"> 
</span><span class="cx">     virtual bool equals(const ContentData&amp; data) const OVERRIDE
</span><span class="cx">     {
</span><span class="lines">@@ -107,7 +108,7 @@
</span><span class="cx">     void setText(const String&amp; text) { m_text = text; }
</span><span class="cx"> 
</span><span class="cx">     virtual bool isText() const OVERRIDE { return true; }
</span><del>-    virtual RenderObject* createRenderer(Document&amp;, RenderStyle&amp;) const OVERRIDE;
</del><ins>+    virtual RenderPtr&lt;RenderObject&gt; createRenderer(Document&amp;, const RenderStyle&amp;) const OVERRIDE;
</ins><span class="cx"> 
</span><span class="cx">     virtual bool equals(const ContentData&amp; data) const OVERRIDE
</span><span class="cx">     {
</span><span class="lines">@@ -133,7 +134,7 @@
</span><span class="cx">     void setCounter(std::unique_ptr&lt;CounterContent&gt; counter) { m_counter = std::move(counter); }
</span><span class="cx"> 
</span><span class="cx">     virtual bool isCounter() const OVERRIDE { return true; }
</span><del>-    virtual RenderObject* createRenderer(Document&amp;, RenderStyle&amp;) const OVERRIDE;
</del><ins>+    virtual RenderPtr&lt;RenderObject&gt; createRenderer(Document&amp;, const RenderStyle&amp;) const OVERRIDE;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     virtual std::unique_ptr&lt;ContentData&gt; cloneInternal() const OVERRIDE
</span><span class="lines">@@ -163,7 +164,7 @@
</span><span class="cx">     void setQuote(QuoteType quote) { m_quote = quote; }
</span><span class="cx"> 
</span><span class="cx">     virtual bool isQuote() const OVERRIDE { return true; }
</span><del>-    virtual RenderObject* createRenderer(Document&amp;, RenderStyle&amp;) const OVERRIDE;
</del><ins>+    virtual RenderPtr&lt;RenderObject&gt; createRenderer(Document&amp;, const RenderStyle&amp;) const OVERRIDE;
</ins><span class="cx"> 
</span><span class="cx">     virtual bool equals(const ContentData&amp; data) const OVERRIDE
</span><span class="cx">     {
</span></span></pre>
</div>
</div>

</body>
</html>