2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        RenderImage::imageChanged invalidates wrong area
        https://bugs.webkit.org/show_bug.cgi?id=43779

        At the moment RenderSVGImage inherits from RenderImage, which makes non-SVG compatible
        assumptions about repainting, and thus has to be fixed to inherit from RenderSVGModelObject.

        This patch moves the CachedImage from RenderImage into a separate class.
        The new class contains the common behavior of RenderImage and RenderSVGImage.
        An additional patch will remove the inheritance of RenderImage at RenderSVGImage.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::createRenderer):
        (WebCore::HTMLEmbedElement::attach):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createRenderer):
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::attach):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::createRenderer):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::attach):
        (WebCore::HTMLVideoElement::parseMappedAttribute):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::renderImageResource):
        (WebCore::ImageLoader::updateRenderer):
        * loader/ImageLoader.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::setImageResource):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::minimumReplacedHeight):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imageResource):
        (WebCore::RenderImage::cachedImage):
        (WebCore::RenderImage::intrinsicSizeChanged):
        (WebCore::toRenderImage):
        * rendering/RenderImageGeneratedContent.cpp: Removed.
        * rendering/RenderImageGeneratedContent.h: Removed.
        * rendering/RenderImageResource.cpp: Added.
        (WebCore::RenderImageResource::RenderImageResource):
        (WebCore::RenderImageResource::~RenderImageResource):
        (WebCore::RenderImageResource::initialize):
        (WebCore::RenderImageResource::shutdown):
        (WebCore::RenderImageResource::setCachedImage):
        (WebCore::RenderImageResource::resetAnimation):
        (WebCore::RenderImageResource::setImageContainerSize):
        (WebCore::RenderImageResource::nullImage):
        * rendering/RenderImageResource.h: Added.
        (WebCore::RenderImageResource::create):
        (WebCore::RenderImageResource::cachedImage):
        (WebCore::RenderImageResource::hasImage):
        (WebCore::RenderImageResource::image):
        (WebCore::RenderImageResource::errorOccurred):
        (WebCore::RenderImageResource::usesImageContainerSize):
        (WebCore::RenderImageResource::imageHasRelativeWidth):
        (WebCore::RenderImageResource::imageHasRelativeHeight):
        (WebCore::RenderImageResource::imageSize):
        (WebCore::RenderImageResource::imagePtr):
        * rendering/RenderImageResourceStyleImage.cpp: Added.
        (WebCore::RenderImageResourceStyleImage::RenderImageResourceStyleImage):
        (WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage):
        (WebCore::RenderImageResourceStyleImage::initialize):
        (WebCore::RenderImageResourceStyleImage::shutdown):
        * rendering/RenderImageResourceStyleImage.h: Added.
        (WebCore::RenderImageResourceStyleImage::create):
        (WebCore::RenderImageResourceStyleImage::image):
        (WebCore::RenderImageResourceStyleImage::errorOccurred):
        (WebCore::RenderImageResourceStyleImage::setImageContainerSize):
        (WebCore::RenderImageResourceStyleImage::usesImageContainerSize):
        (WebCore::RenderImageResourceStyleImage::imageHasRelativeWidth):
        (WebCore::RenderImageResourceStyleImage::imageHasRelativeHeight):
        (WebCore::RenderImageResourceStyleImage::imageSize):
        (WebCore::RenderImageResourceStyleImage::imagePtr):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::createRenderer):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66223 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/rendering/RenderImageResourceStyleImage.cpp b/WebCore/rendering/RenderImageResourceStyleImage.cpp
new file mode 100644
index 0000000..7f41984
--- /dev/null
+++ b/WebCore/rendering/RenderImageResourceStyleImage.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 1999 Lars Knoll <knoll@kde.org>
+ * Copyright (C) 1999 Antti Koivisto <koivisto@kde.org>
+ * Copyright (C) 2000 Dirk Mueller <mueller@kde.org>
+ * Copyright (C) 2006 Allan Sandfeld Jensen <kde@carewolf.com>
+ * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
+ * Copyright (C) 2003, 2004, 2005, 2006, 2008, 2009, 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "RenderImageResourceStyleImage.h"
+
+#include "RenderObject.h"
+#include "StyleCachedImage.h"
+
+namespace WebCore {
+
+RenderImageResourceStyleImage::RenderImageResourceStyleImage(StyleImage* styleImage)
+    : m_styleImage(styleImage)
+{
+    ASSERT(m_styleImage);
+}
+
+RenderImageResourceStyleImage::~RenderImageResourceStyleImage()
+{
+}
+
+void RenderImageResourceStyleImage::initialize(RenderObject* renderer)
+{
+    RenderImageResource::initialize(renderer);
+
+    if (m_styleImage->isCachedImage())
+        m_cachedImage = static_cast<StyleCachedImage*>(m_styleImage.get())->cachedImage();
+
+    m_styleImage->addClient(m_renderer);
+}
+
+void RenderImageResourceStyleImage::shutdown()
+{
+    ASSERT(m_renderer);
+    m_styleImage->removeClient(m_renderer);
+    m_cachedImage = 0;
+}
+
+} // namespace WebCore