Title: [162679] trunk
Revision
162679
Author
jhoneyc...@apple.com
Date
2014-01-23 18:55:15 -0800 (Thu, 23 Jan 2014)

Log Message

Assertion failure in WebCore::PseudoElement::didRecalcStyle()
<https://bugs.webkit.org/show_bug.cgi?id=126761>
<rdar://problem/15793540>

Source/WebCore:

Reviewed by Andy Estes.

Test: fast/images/animate-list-item-image-assertion.html

* dom/PseudoElement.cpp:
(WebCore::PseudoElement::didRecalcStyle):
Check isRenderImage() rather than isImage() before casting to
RenderImage.

* editing/ios/EditorIOS.mm:
(WebCore::getImage):
Ditto.

* editing/mac/EditorMac.mm:
(WebCore::getImage):
Ditto.

* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::parseAttribute):
(WebCore::HTMLImageElement::didAttachRenderers):
Ditto.

* loader/ImageLoader.cpp:
(WebCore::ImageLoader::renderImageResource):
Ditto.

* page/DragController.cpp:
(WebCore::getCachedImage):
Ditto.

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::isDirectlyCompositedImage):
(WebCore::RenderLayerBacking::updateImageContents):
Ditto.

Source/WebKit/mac:

Some areas of code were erroneously checking the value of
RenderObject::isImage() rather than RenderObject::isRenderImage()
before casting the object to RenderImage.

This could lead to an assertion failure for RenderListMarkers, which
may return true for isImage(), but are not RenderImages.

Reviewed by Andy Estes.

* Misc/WebNSPasteboardExtras.mm:
(-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
Check isRenderImage() rather than isImage() before casting to
RenderImage.

Source/WebKit2:

Reviewed by Andy Estes.

* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::getPositionInformation):
Check isRenderImage() rather than isImage() before casting to
RenderImage.

LayoutTests:

Reviewed by Andy Estes.

* fast/images/animate-list-item-image-assertion-expected.txt: Added.
* fast/images/animate-list-item-image-assertion.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (162678 => 162679)


--- trunk/LayoutTests/ChangeLog	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/LayoutTests/ChangeLog	2014-01-24 02:55:15 UTC (rev 162679)
@@ -1,3 +1,14 @@
+2014-01-23  Jon Honeycutt  <jhoneyc...@apple.com>
+
+        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
+        <https://bugs.webkit.org/show_bug.cgi?id=126761>
+        <rdar://problem/15793540>
+
+        Reviewed by Andy Estes.
+
+        * fast/images/animate-list-item-image-assertion-expected.txt: Added.
+        * fast/images/animate-list-item-image-assertion.html: Added.
+
 2014-01-23  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer

Added: trunk/LayoutTests/fast/images/animate-list-item-image-assertion-expected.txt (0 => 162679)


--- trunk/LayoutTests/fast/images/animate-list-item-image-assertion-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/images/animate-list-item-image-assertion-expected.txt	2014-01-24 02:55:15 UTC (rev 162679)
@@ -0,0 +1 @@
+PASSED

Added: trunk/LayoutTests/fast/images/animate-list-item-image-assertion.html (0 => 162679)


--- trunk/LayoutTests/fast/images/animate-list-item-image-assertion.html	                        (rev 0)
+++ trunk/LayoutTests/fast/images/animate-list-item-image-assertion.html	2014-01-24 02:55:15 UTC (rev 162679)
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+
+<!-- Test passes if it doesn't assert in a debug build. -->
+
+<style>
+    #anchor:after {
+        content: ".";
+        display: block;
+    }
+    span {
+        float: left;
+    }
+    ul {
+        -webkit-animation-name: n;
+        -webkit-animation-duration: .1s;
+    }
+    @-webkit-keyframes n {
+        from { }
+        to { list-style-image: -webkit-repeating-radial-gradient(circle cover, rgb(23,136,16) , rgb(2%,5%,72%) , #373f74); }
+    }
+</style>
+
+<ul id="u">
+    <li>
+        <a id="anchor" href="" id="text">PASSED</span></a>
+    </li>
+</ul>
+
+<script>
+    if (window.testRunner) {
+        window.testRunner.dumpAsText(true);
+        window.testRunner.waitUntilDone();
+
+        document.getElementById("u").addEventListener('webkitAnimationStart', function() {
+            window.testRunner.notifyDone();
+        }, false);
+    }
+</script>

Modified: trunk/Source/WebCore/ChangeLog (162678 => 162679)


--- trunk/Source/WebCore/ChangeLog	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/ChangeLog	2014-01-24 02:55:15 UTC (rev 162679)
@@ -1,3 +1,44 @@
+2014-01-23  Jon Honeycutt  <jhoneyc...@apple.com>
+
+        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
+        <https://bugs.webkit.org/show_bug.cgi?id=126761>
+        <rdar://problem/15793540>
+
+        Reviewed by Andy Estes.
+
+        Test: fast/images/animate-list-item-image-assertion.html
+
+        * dom/PseudoElement.cpp:
+        (WebCore::PseudoElement::didRecalcStyle):
+        Check isRenderImage() rather than isImage() before casting to
+        RenderImage.
+
+        * editing/ios/EditorIOS.mm:
+        (WebCore::getImage):
+        Ditto.
+
+        * editing/mac/EditorMac.mm:
+        (WebCore::getImage):
+        Ditto.
+
+        * html/HTMLImageElement.cpp:
+        (WebCore::HTMLImageElement::parseAttribute):
+        (WebCore::HTMLImageElement::didAttachRenderers):
+        Ditto.
+
+        * loader/ImageLoader.cpp:
+        (WebCore::ImageLoader::renderImageResource):
+        Ditto.
+
+        * page/DragController.cpp:
+        (WebCore::getCachedImage):
+        Ditto.
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):
+        (WebCore::RenderLayerBacking::updateImageContents):
+        Ditto.
+
 2014-01-23  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer

Modified: trunk/Source/WebCore/dom/PseudoElement.cpp (162678 => 162679)


--- trunk/Source/WebCore/dom/PseudoElement.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/dom/PseudoElement.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -112,7 +112,7 @@
     RenderObject* renderer = this->renderer();
     for (RenderObject* child = renderer->nextInPreOrder(renderer); child; child = child->nextInPreOrder(renderer)) {
         // We only manage the style for the generated content which must be images or text.
-        if (!child->isImage())
+        if (!child->isRenderImage())
             continue;
         toRenderImage(*child).setStyle(RenderImage::createStyleInheritingFromPseudoStyle(renderer->style()));
     }

Modified: trunk/Source/WebCore/editing/ios/EditorIOS.mm (162678 => 162679)


--- trunk/Source/WebCore/editing/ios/EditorIOS.mm	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/editing/ios/EditorIOS.mm	2014-01-24 02:55:15 UTC (rev 162679)
@@ -345,7 +345,7 @@
 static void getImage(Element& imageElement, RefPtr<Image>& image, CachedImage*& cachedImage)
 {
     auto renderer = imageElement.renderer();
-    if (!renderer || !renderer->isImage())
+    if (!renderer || !renderer->isRenderImage())
         return;
 
     CachedImage* tentativeCachedImage = toRenderImage(renderer)->cachedImage();

Modified: trunk/Source/WebCore/editing/mac/EditorMac.mm (162678 => 162679)


--- trunk/Source/WebCore/editing/mac/EditorMac.mm	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/editing/mac/EditorMac.mm	2014-01-24 02:55:15 UTC (rev 162679)
@@ -366,7 +366,7 @@
 static void getImage(Element& imageElement, RefPtr<Image>& image, CachedImage*& cachedImage)
 {
     auto renderer = imageElement.renderer();
-    if (!renderer || !renderer->isImage())
+    if (!renderer || !renderer->isRenderImage())
         return;
 
     CachedImage* tentativeCachedImage = toRenderImage(renderer)->cachedImage();

Modified: trunk/Source/WebCore/html/HTMLAreaElement.cpp (162678 => 162679)


--- trunk/Source/WebCore/html/HTMLAreaElement.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/html/HTMLAreaElement.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -220,7 +220,7 @@
         return;
 
     auto renderer = imageElement->renderer();
-    if (!renderer || !renderer->isImage())
+    if (!renderer || !renderer->isRenderImage())
         return;
 
     toRenderImage(renderer)->areaElementFocusChanged(this);

Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (162678 => 162679)


--- trunk/Source/WebCore/html/HTMLImageElement.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -115,7 +115,7 @@
 void HTMLImageElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
 {
     if (name == altAttr) {
-        if (renderer() && renderer()->isImage())
+        if (renderer() && renderer()->isRenderImage())
             toRenderImage(renderer())->updateAltText();
     } else if (name == srcAttr || name == srcsetAttr) {
         m_bestFitImageURL = bestFitSourceForImageAttributes(document().deviceScaleFactor(), fastGetAttribute(srcAttr), fastGetAttribute(srcsetAttr));
@@ -192,7 +192,7 @@
 
 void HTMLImageElement::didAttachRenderers()
 {
-    if (!renderer() || !renderer()->isImage())
+    if (!renderer() || !renderer()->isRenderImage())
         return;
     if (m_imageLoader.hasPendingBeforeLoadEvent())
         return;

Modified: trunk/Source/WebCore/loader/ImageLoader.cpp (162678 => 162679)


--- trunk/Source/WebCore/loader/ImageLoader.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/loader/ImageLoader.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -325,7 +325,7 @@
 
     // We don't return style generated image because it doesn't belong to the ImageLoader.
     // See <https://bugs.webkit.org/show_bug.cgi?id=42840>
-    if (renderer->isImage() && !toRenderImage(*renderer).isGeneratedContent())
+    if (renderer->isRenderImage() && !toRenderImage(*renderer).isGeneratedContent())
         return &toRenderImage(*renderer).imageResource();
 
 #if ENABLE(SVG)

Modified: trunk/Source/WebCore/page/DragController.cpp (162678 => 162679)


--- trunk/Source/WebCore/page/DragController.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/page/DragController.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -655,7 +655,7 @@
 static CachedImage* getCachedImage(Element& element)
 {
     RenderObject* renderer = element.renderer();
-    if (!renderer || !renderer->isImage())
+    if (!renderer || !renderer->isRenderImage())
         return 0;
     RenderImage* image = toRenderImage(renderer);
     return image->cachedImage();

Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (162678 => 162679)


--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-01-24 02:55:15 UTC (rev 162679)
@@ -1865,7 +1865,7 @@
 // that require painting. Direct compositing saves backing store.
 bool RenderLayerBacking::isDirectlyCompositedImage() const
 {
-    if (!renderer().isImage() || m_owningLayer.hasBoxDecorationsOrBackground() || renderer().hasClip())
+    if (!renderer().isRenderImage() || m_owningLayer.hasBoxDecorationsOrBackground() || renderer().hasClip())
         return false;
 
     RenderImage& imageRenderer = toRenderImage(renderer());
@@ -1912,7 +1912,7 @@
 
 void RenderLayerBacking::updateImageContents()
 {
-    ASSERT(renderer().isImage());
+    ASSERT(renderer().isRenderImage());
     RenderImage& imageRenderer = toRenderImage(renderer());
 
     CachedImage* cachedImage = imageRenderer.cachedImage();

Modified: trunk/Source/WebKit/mac/ChangeLog (162678 => 162679)


--- trunk/Source/WebKit/mac/ChangeLog	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebKit/mac/ChangeLog	2014-01-24 02:55:15 UTC (rev 162679)
@@ -1,3 +1,23 @@
+2014-01-23  Jon Honeycutt  <jhoneyc...@apple.com>
+
+        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
+        <https://bugs.webkit.org/show_bug.cgi?id=126761>
+        <rdar://problem/15793540>
+
+        Some areas of code were erroneously checking the value of
+        RenderObject::isImage() rather than RenderObject::isRenderImage()
+        before casting the object to RenderImage.
+
+        This could lead to an assertion failure for RenderListMarkers, which
+        may return true for isImage(), but are not RenderImages.
+
+        Reviewed by Andy Estes.
+
+        * Misc/WebNSPasteboardExtras.mm:
+        (-[NSPasteboard _web_declareAndWriteDragImageForElement:URL:title:archive:source:]):
+        Check isRenderImage() rather than isImage() before casting to
+        RenderImage.
+
 2014-01-23  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Remove recompileAllJSFunctions timer in ScriptDebugServer

Modified: trunk/Source/WebKit/mac/Misc/WebNSPasteboardExtras.mm (162678 => 162679)


--- trunk/Source/WebKit/mac/Misc/WebNSPasteboardExtras.mm	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebKit/mac/Misc/WebNSPasteboardExtras.mm	2014-01-24 02:55:15 UTC (rev 162679)
@@ -272,7 +272,7 @@
 
     NSString *extension = @"";
     if (RenderObject* renderer = core(element)->renderer()) {
-        if (renderer->isImage()) {
+        if (renderer->isRenderImage()) {
             if (CachedImage* image = toRenderImage(renderer)->cachedImage()) {
                 extension = image->image()->filenameExtension();
                 if (![extension length])

Modified: trunk/Source/WebKit2/ChangeLog (162678 => 162679)


--- trunk/Source/WebKit2/ChangeLog	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebKit2/ChangeLog	2014-01-24 02:55:15 UTC (rev 162679)
@@ -1,3 +1,16 @@
+2014-01-23  Jon Honeycutt  <jhoneyc...@apple.com>
+
+        Assertion failure in WebCore::PseudoElement::didRecalcStyle()
+        <https://bugs.webkit.org/show_bug.cgi?id=126761>
+        <rdar://problem/15793540>
+
+        Reviewed by Andy Estes.
+
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::getPositionInformation):
+        Check isRenderImage() rather than isImage() before casting to
+        RenderImage.
+
 2014-01-23  Anders Carlsson  <ander...@apple.com>
 
         Move policy client into WKPage.cpp and get rid of WebPolicyClient files

Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (162678 => 162679)


--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2014-01-24 02:49:42 UTC (rev 162678)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm	2014-01-24 02:55:15 UTC (rev 162679)
@@ -823,7 +823,7 @@
         if (!element)
             return;
 
-        if (element->renderer() && element->renderer()->isImage()) {
+        if (element->renderer() && element->renderer()->isRenderImage()) {
             URL url = ""
             if (!url.string().isNull())
                 info.url = ""
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to