Title: [116527] trunk
Revision
116527
Author
[email protected]
Date
2012-05-09 08:37:33 -0700 (Wed, 09 May 2012)

Log Message

Crash in WebCore::RenderBoxModelObject::paddingLeft
https://bugs.webkit.org/show_bug.cgi?id=83889

Patch by Takashi Sakamoto <[email protected]> on 2012-05-09
Reviewed by Abhishek Arya.

Source/WebCore:

RenderScrollbar creates RenderScrollbarPart without any parent
renderers. However, if the scrollbar has percent padding styles,
non-null parent renderer is required. So after creating/destroying
RenderScrollbarPart instances, set owningRenderer(creating)/0
(destroying) as its parent renderer.

Test: scrollbars/scrollbar-percent-padding-crash.html
      scrollbars/scrollbar-percent-padding-crash-expected.txt

* rendering/RenderScrollbar.cpp:
(WebCore::RenderScrollbar::updateScrollbarPart):
Added setParent after creating/destroying RenderScrollbarPart.
* rendering/RenderScrollbarPart.cpp:
Made RenderScollbar friend, because setParent is protected and
RenderScrollbar is not inherited from class RenderObject.

LayoutTests:

As just invoking layoutTestController.display() invokes scrollbar's
WebCore::RenderScrollbarPart::paintIntoRect(), adding display() after
invoking layoutTestController.dumpAsText().

* scrollbars/scrollbar-percent-padding-crash.html: Added.
* scrollbars/scrollbar-percent-padding-crash-expected.txt: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (116526 => 116527)


--- trunk/LayoutTests/ChangeLog	2012-05-09 15:28:01 UTC (rev 116526)
+++ trunk/LayoutTests/ChangeLog	2012-05-09 15:37:33 UTC (rev 116527)
@@ -1,3 +1,17 @@
+2012-05-09  Takashi Sakamoto  <[email protected]>
+
+        Crash in WebCore::RenderBoxModelObject::paddingLeft
+        https://bugs.webkit.org/show_bug.cgi?id=83889
+
+        Reviewed by Abhishek Arya.
+
+        As just invoking layoutTestController.display() invokes scrollbar's
+        WebCore::RenderScrollbarPart::paintIntoRect(), adding display() after
+        invoking layoutTestController.dumpAsText().
+
+        * scrollbars/scrollbar-percent-padding-crash.html: Added.
+        * scrollbars/scrollbar-percent-padding-crash-expected.txt: Added.
+
 2012-05-09  Antti Koivisto  <[email protected]>
 
         Skip failing test http/tests/loading/post-in-iframe-with-back-navigation.html.

Added: trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash-expected.txt (0 => 116527)


--- trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash-expected.txt	2012-05-09 15:37:33 UTC (rev 116527)
@@ -0,0 +1,3 @@
+Test for bug 83889: This tests that there is no crash when using percentage value for scrollbar's padding property. On success you should see a frame with scrollbars and one PASS message in it.
+
+

Added: trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash.html (0 => 116527)


--- trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash.html	                        (rev 0)
+++ trunk/LayoutTests/scrollbars/scrollbar-percent-padding-crash.html	2012-05-09 15:37:33 UTC (rev 116527)
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+::-webkit-scrollbar {
+ -webkit-padding-start: 1%; background: #666 -webkit-gradient(linear, left top, right top, from(rgba(255,255,255,0.5)), color-stop(0.5, rgba(255,255,255,0.1)), color-stop(0.5, rgba(0,0,0,0)), to(rgba(0,0,0,0.01)));
+}
+</style>
+<script>
+function runTest() {
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        document.body.offsetTop;
+        layoutTestController.display();
+    }
+};
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Test for <a href="" 83889</a>:
+This tests that there is no crash when using percentage value for scrollbar's padding property. On success you should see a frame with scrollbars and one PASS message in it.
+<div style="height: 1000px;"></div>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (116526 => 116527)


--- trunk/Source/WebCore/ChangeLog	2012-05-09 15:28:01 UTC (rev 116526)
+++ trunk/Source/WebCore/ChangeLog	2012-05-09 15:37:33 UTC (rev 116527)
@@ -1,5 +1,28 @@
 2012-05-09  Takashi Sakamoto  <[email protected]>
 
+        Crash in WebCore::RenderBoxModelObject::paddingLeft
+        https://bugs.webkit.org/show_bug.cgi?id=83889
+
+        Reviewed by Abhishek Arya.
+
+        RenderScrollbar creates RenderScrollbarPart without any parent
+        renderers. However, if the scrollbar has percent padding styles,
+        non-null parent renderer is required. So after creating/destroying
+        RenderScrollbarPart instances, set owningRenderer(creating)/0
+        (destroying) as its parent renderer.
+
+        Test: scrollbars/scrollbar-percent-padding-crash.html
+              scrollbars/scrollbar-percent-padding-crash-expected.txt
+
+        * rendering/RenderScrollbar.cpp:
+        (WebCore::RenderScrollbar::updateScrollbarPart):
+        Added setParent after creating/destroying RenderScrollbarPart.
+        * rendering/RenderScrollbarPart.cpp:
+        Made RenderScollbar friend, because setParent is protected and
+        RenderScrollbar is not inherited from class RenderObject.
+
+2012-05-09  Takashi Sakamoto  <[email protected]>
+
         ShadowRoot needs applyAuthorStyles
         https://bugs.webkit.org/show_bug.cgi?id=78472
 

Modified: trunk/Source/WebCore/rendering/RenderScrollbar.cpp (116526 => 116527)


--- trunk/Source/WebCore/rendering/RenderScrollbar.cpp	2012-05-09 15:28:01 UTC (rev 116526)
+++ trunk/Source/WebCore/rendering/RenderScrollbar.cpp	2012-05-09 15:37:33 UTC (rev 116527)
@@ -270,9 +270,11 @@
     RenderScrollbarPart* partRenderer = m_parts.get(partType);
     if (!partRenderer && needRenderer) {
         partRenderer = new (owningRenderer()->renderArena()) RenderScrollbarPart(owningRenderer()->document(), this, partType);
+        partRenderer->setParent(owningRenderer());
         m_parts.set(partType, partRenderer);
     } else if (partRenderer && !needRenderer) {
         m_parts.remove(partType);
+        partRenderer->setParent(0);
         partRenderer->destroy();
         partRenderer = 0;
     }

Modified: trunk/Source/WebCore/rendering/RenderScrollbarPart.h (116526 => 116527)


--- trunk/Source/WebCore/rendering/RenderScrollbarPart.h	2012-05-09 15:28:01 UTC (rev 116526)
+++ trunk/Source/WebCore/rendering/RenderScrollbarPart.h	2012-05-09 15:37:33 UTC (rev 116527)
@@ -35,6 +35,8 @@
 
 class RenderScrollbarPart : public RenderBlock {
 public:
+    friend class RenderScrollbar;
+
     RenderScrollbarPart(Node*, RenderScrollbar* = 0, ScrollbarPart = NoPart);
     virtual ~RenderScrollbarPart();
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to