<!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>[179340] 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/179340">179340</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-29 03:32:53 -0800 (Thu, 29 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>CachedImage: ensure clients overrides imageChanged instead of notifyFinished
https://bugs.webkit.org/show_bug.cgi?id=140722

Patch by Julien Isorce &lt;j.isorce@samsung.com&gt; on 2015-01-29
Reviewed by Tim Horton.

imageChanged is called whenever a frame of an image changes
because we got more data from the network.

notifyFinished was called when the image was entirely loaded.

The problem was that some clients were implementing only
imageChanged (ex: RenderBox), some only notifyFinished and
some both (ex: RenderImage) which made the situation difficult
to understand and to maintain.

For example when the image finished loading, both imageChanged
and notifyFinished were called with the difference that for the
first one isLoaded() returned false.
It could result in functions being called twice in a row,
ex: contentChanged(ImageChanged).

So this patch tries to simplify the situation by marking
CachedImageClient::notifyFinished final in order to prevent
clients from implementing it.
Indeed this patch ensure that CachedImage clients implement
and only implement imageChanged function.

Also Clients can now differentiate intermediate and end
calls by checking isLoaded() in imageChanged.

* html/HTMLImageLoader.cpp:
(WebCore::HTMLImageLoader::imageChanged): Added instead
of notifyFinished.
(WebCore::HTMLImageLoader::notifyFinished): Deleted.
* html/HTMLImageLoader.h:

* loader/ImageLoader.cpp:
(WebCore::ImageLoader::imageChanged): Added instead
of notifyFinished.
(WebCore::ImageLoader::notifyFinished): Deleted.
* loader/ImageLoader.h:

* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::finishLoading): Explicilty mark image as
loaded and before notifying observers. So that it avoids to call
notifyFinished (from CachedResource::finishLoading).

* loader/cache/CachedImageClient.h:
Make CachedImageClient::notifyFinished final to make sure
sub classes implement imageChanged instead.

* rendering/RenderImage.cpp:
(WebCore::RenderImage::notifyFinished): Deleted.
ImageChanged already exists and is more clever than notifyFinished.
Indeed invalidateBackgroundObscurationStatus() will be called by
RenderReplaced::layout() upon call to setNeedsLayout() in
RenderImage::imageDimensionsChanged.
Also contentChanged(ImageChanged) is now called only when necessary.
* rendering/RenderImage.h:

* svg/SVGFEImageElement.cpp:
(WebCore::SVGFEImageElement::imageChanged): Added instead
of notifyFinished.
(WebCore::SVGFEImageElement::notifyFinished): Deleted.
* svg/SVGFEImageElement.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageLoadercpp">trunk/Source/WebCore/html/HTMLImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageLoaderh">trunk/Source/WebCore/html/HTMLImageLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderImageLoadercpp">trunk/Source/WebCore/loader/ImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderImageLoaderh">trunk/Source/WebCore/loader/ImageLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedImagecpp">trunk/Source/WebCore/loader/cache/CachedImage.cpp</a></li>
<li><a href="#trunkSourceWebCoreloadercacheCachedImageClienth">trunk/Source/WebCore/loader/cache/CachedImageClient.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderImagecpp">trunk/Source/WebCore/rendering/RenderImage.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderImageh">trunk/Source/WebCore/rendering/RenderImage.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEImageElementcpp">trunk/Source/WebCore/svg/SVGFEImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGFEImageElementh">trunk/Source/WebCore/svg/SVGFEImageElement.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/ChangeLog        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -1,3 +1,71 @@
</span><ins>+2015-01-29  Julien Isorce  &lt;j.isorce@samsung.com&gt;
+
+        CachedImage: ensure clients overrides imageChanged instead of notifyFinished
+        https://bugs.webkit.org/show_bug.cgi?id=140722
+
+        Reviewed by Tim Horton.
+
+        imageChanged is called whenever a frame of an image changes
+        because we got more data from the network.
+
+        notifyFinished was called when the image was entirely loaded.
+
+        The problem was that some clients were implementing only
+        imageChanged (ex: RenderBox), some only notifyFinished and
+        some both (ex: RenderImage) which made the situation difficult
+        to understand and to maintain.
+
+        For example when the image finished loading, both imageChanged
+        and notifyFinished were called with the difference that for the
+        first one isLoaded() returned false.
+        It could result in functions being called twice in a row,
+        ex: contentChanged(ImageChanged).
+
+        So this patch tries to simplify the situation by marking
+        CachedImageClient::notifyFinished final in order to prevent
+        clients from implementing it.
+        Indeed this patch ensure that CachedImage clients implement
+        and only implement imageChanged function.
+
+        Also Clients can now differentiate intermediate and end
+        calls by checking isLoaded() in imageChanged.
+
+        * html/HTMLImageLoader.cpp:
+        (WebCore::HTMLImageLoader::imageChanged): Added instead
+        of notifyFinished.
+        (WebCore::HTMLImageLoader::notifyFinished): Deleted.
+        * html/HTMLImageLoader.h:
+
+        * loader/ImageLoader.cpp:
+        (WebCore::ImageLoader::imageChanged): Added instead
+        of notifyFinished.
+        (WebCore::ImageLoader::notifyFinished): Deleted.
+        * loader/ImageLoader.h:
+
+        * loader/cache/CachedImage.cpp:
+        (WebCore::CachedImage::finishLoading): Explicilty mark image as
+        loaded and before notifying observers. So that it avoids to call
+        notifyFinished (from CachedResource::finishLoading).
+
+        * loader/cache/CachedImageClient.h:
+        Make CachedImageClient::notifyFinished final to make sure
+        sub classes implement imageChanged instead.
+
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::notifyFinished): Deleted.
+        ImageChanged already exists and is more clever than notifyFinished.
+        Indeed invalidateBackgroundObscurationStatus() will be called by
+        RenderReplaced::layout() upon call to setNeedsLayout() in
+        RenderImage::imageDimensionsChanged.
+        Also contentChanged(ImageChanged) is now called only when necessary.
+        * rendering/RenderImage.h:
+
+        * svg/SVGFEImageElement.cpp:
+        (WebCore::SVGFEImageElement::imageChanged): Added instead
+        of notifyFinished.
+        (WebCore::SVGFEImageElement::notifyFinished): Deleted.
+        * svg/SVGFEImageElement.h:
+
</ins><span class="cx"> 2015-01-28  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Poor performance on IE's Chalkboard benchmark.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageLoader.cpp (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageLoader.cpp        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/html/HTMLImageLoader.cpp        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -72,12 +72,15 @@
</span><span class="cx">     return stripLeadingAndTrailingHTMLSpaces(attr);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void HTMLImageLoader::notifyFinished(CachedResource*)
</del><ins>+void HTMLImageLoader::imageChanged(CachedImage* cachedImage, const IntRect*)
</ins><span class="cx"> {
</span><del>-    CachedImage* cachedImage = image();
</del><ins>+    ASSERT(cachedImage == image().get());
</ins><span class="cx"> 
</span><ins>+    if (!cachedImage-&gt;isLoaded())
+        return;
+
</ins><span class="cx">     Ref&lt;Element&gt; protect(element());
</span><del>-    ImageLoader::notifyFinished(cachedImage);
</del><ins>+    ImageLoader::imageChanged(cachedImage);
</ins><span class="cx"> 
</span><span class="cx">     bool loadError = cachedImage-&gt;errorOccurred() || cachedImage-&gt;response().httpStatusCode() &gt;= 400;
</span><span class="cx">     if (!loadError) {
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageLoader.h (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageLoader.h        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/html/HTMLImageLoader.h        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -35,7 +35,7 @@
</span><span class="cx">     virtual void dispatchLoadEvent() override;
</span><span class="cx">     virtual String sourceURI(const AtomicString&amp;) const override;
</span><span class="cx"> 
</span><del>-    virtual void notifyFinished(CachedResource*) override;
</del><ins>+    virtual void imageChanged(CachedImage*, const IntRect* = nullptr) override;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ImageLoader.cpp (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ImageLoader.cpp        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/loader/ImageLoader.cpp        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -272,11 +272,14 @@
</span><span class="cx">     updateFromElement();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ImageLoader::notifyFinished(CachedResource* resource)
</del><ins>+void ImageLoader::imageChanged(CachedImage* cachedImage, const IntRect*)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_failedLoadURL.isEmpty());
</span><del>-    ASSERT(resource == m_image.get());
</del><ins>+    ASSERT(cachedImage == m_image.get());
</ins><span class="cx"> 
</span><ins>+    if (!cachedImage-&gt;isLoaded())
+        return;
+
</ins><span class="cx">     m_imageComplete = true;
</span><span class="cx">     if (!hasPendingBeforeLoadEvent())
</span><span class="cx">         updateRenderer();
</span><span class="lines">@@ -286,7 +289,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (element().fastHasAttribute(HTMLNames::crossoriginAttr)
</span><span class="cx">         &amp;&amp; !element().document().securityOrigin()-&gt;canRequest(image()-&gt;response().url())
</span><del>-        &amp;&amp; !resource-&gt;passesAccessControlCheck(element().document().securityOrigin())) {
</del><ins>+        &amp;&amp; !cachedImage-&gt;passesAccessControlCheck(element().document().securityOrigin())) {
</ins><span class="cx"> 
</span><span class="cx">         setImageWithoutConsideringPendingLoadEvent(0);
</span><span class="cx"> 
</span><span class="lines">@@ -304,7 +307,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (resource-&gt;wasCanceled()) {
</del><ins>+    if (cachedImage-&gt;wasCanceled()) {
</ins><span class="cx">         m_hasPendingLoadEvent = false;
</span><span class="cx">         // Only consider updating the protection ref-count of the Element immediately before returning
</span><span class="cx">         // from this function as doing so might result in the destruction of this ImageLoader.
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderImageLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ImageLoader.h (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ImageLoader.h        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/loader/ImageLoader.h        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     explicit ImageLoader(Element&amp;);
</span><del>-    virtual void notifyFinished(CachedResource*) override;
</del><ins>+    virtual void imageChanged(CachedImage*, const IntRect* = nullptr) override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     virtual void dispatchLoadEvent() = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedImage.cpp (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedImage.cpp        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/loader/cache/CachedImage.cpp        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -426,10 +426,11 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    notifyObservers();
</del><span class="cx">     if (m_image)
</span><span class="cx">         setEncodedSize(m_image-&gt;data() ? m_image-&gt;data()-&gt;size() : 0);
</span><del>-    CachedResource::finishLoading(data);
</del><ins>+
+    setLoading(false);
+    notifyObservers();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void CachedImage::error(CachedResource::Status status)
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheCachedImageClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/CachedImageClient.h (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/CachedImageClient.h        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/loader/cache/CachedImageClient.h        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -38,10 +38,13 @@
</span><span class="cx"> 
</span><span class="cx">     // Called whenever a frame of an image changes because we got more data from the network.
</span><span class="cx">     // If not null, the IntRect is the changed rect of the image.
</span><del>-    virtual void imageChanged(CachedImage*, const IntRect* = 0) { }
</del><ins>+    virtual void imageChanged(CachedImage*, const IntRect* = nullptr) { }
</ins><span class="cx"> 
</span><span class="cx">     // Called when GIF animation progresses.
</span><span class="cx">     virtual void newImageAnimationFrameAvailable(CachedImage&amp; image) { imageChanged(&amp;image); }
</span><ins>+
+    // Use imageChanged instead.
+    virtual void notifyFinished(CachedResource*) override final { }
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderImage.cpp        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -365,20 +365,6 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderImage::notifyFinished(CachedResource* newImage)
-{
-    if (documentBeingDestroyed())
-        return;
-
-    invalidateBackgroundObscurationStatus();
-
-    if (newImage == imageResource().cachedImage()) {
-        // tell any potential compositing layers
-        // that the image is done and they can reference it directly.
-        contentChanged(ImageChanged);
-    }
-}
-
</del><span class="cx"> void RenderImage::paintReplaced(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset)
</span><span class="cx"> {
</span><span class="cx">     LayoutUnit cWidth = contentWidth();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderImageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderImage.h (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderImage.h        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/rendering/RenderImage.h        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -99,7 +99,6 @@
</span><span class="cx"> 
</span><span class="cx">     virtual LayoutUnit minimumReplacedHeight() const override;
</span><span class="cx"> 
</span><del>-    virtual void notifyFinished(CachedResource*) override final;
</del><span class="cx">     virtual bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset, HitTestAction) override final;
</span><span class="cx"> 
</span><span class="cx">     virtual bool boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoidance, InlineFlowBox*) const override final;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEImageElement.cpp (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEImageElement.cpp        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/svg/SVGFEImageElement.cpp        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -191,8 +191,11 @@
</span><span class="cx">         clearResourceReferences();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGFEImageElement::notifyFinished(CachedResource*)
</del><ins>+void SVGFEImageElement::imageChanged(CachedImage* cachedImage, const IntRect*)
</ins><span class="cx"> {
</span><ins>+    if (!cachedImage || !cachedImage-&gt;isLoaded())
+        return;
+
</ins><span class="cx">     if (!inDocument())
</span><span class="cx">         return;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGFEImageElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGFEImageElement.h (179339 => 179340)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGFEImageElement.h        2015-01-29 10:56:59 UTC (rev 179339)
+++ trunk/Source/WebCore/svg/SVGFEImageElement.h        2015-01-29 11:32:53 UTC (rev 179340)
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx">     bool isSupportedAttribute(const QualifiedName&amp;);
</span><span class="cx">     virtual void parseAttribute(const QualifiedName&amp;, const AtomicString&amp;) override;
</span><span class="cx">     virtual void svgAttributeChanged(const QualifiedName&amp;) override;
</span><del>-    virtual void notifyFinished(CachedResource*) override;
</del><ins>+    virtual void imageChanged(CachedImage*, const IntRect* = nullptr) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual void addSubresourceAttributeURLs(ListHashSet&lt;URL&gt;&amp;) const override;
</span><span class="cx">     virtual PassRefPtr&lt;FilterEffect&gt; build(SVGFilterBuilder*, Filter*) override;
</span></span></pre>
</div>
</div>

</body>
</html>