<rdar://problem/10246137> Duplicate ::after content when both ::before and ::after...
authormitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Oct 2011 00:46:53 +0000 (00:46 +0000)
committermitz@apple.com <mitz@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 11 Oct 2011 00:46:53 +0000 (00:46 +0000)
Reviewed by Sam Weinig.

Source/WebCore:

Test: fast/css-generated-content/table-parts-before-and-after.html

* rendering/RenderObject.cpp:
(WebCore::RenderObject::addChild): Prevented table part childern after a ::before table from being merged
into it.
* rendering/RenderTable.cpp:
(WebCore::RenderTable::addChild): Prevented children after a ::before table section from being merged
into it.

LayoutTests:

* fast/css-generated-content/table-parts-before-and-after-expected.png: Added.
* fast/css-generated-content/table-parts-before-and-after-expected.txt: Added.
* fast/css-generated-content/table-parts-before-and-after.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@97114 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.png [new file with mode: 0644]
LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.txt [new file with mode: 0644]
LayoutTests/fast/css-generated-content/table-parts-before-and-after.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderTable.cpp

index 905a625f6c099f2c69526af2c124209c6086fb19..0634b5b85262a06bf014dcd3e0ff821cd8aaba43 100644 (file)
@@ -1,3 +1,13 @@
+2011-10-10  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/10246137> Duplicate ::after content when both ::before and ::after are styled as table parts
+
+        Reviewed by Sam Weinig.
+
+        * fast/css-generated-content/table-parts-before-and-after-expected.png: Added.
+        * fast/css-generated-content/table-parts-before-and-after-expected.txt: Added.
+        * fast/css-generated-content/table-parts-before-and-after.html: Added.
+
 2011-10-10  Ryosuke Niwa  <rniwa@webkit.org>
 
         Chromium rebaseline after r97102.
diff --git a/LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.png b/LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.png
new file mode 100644 (file)
index 0000000..af5f2d7
Binary files /dev/null and b/LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.png differ
diff --git a/LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.txt b/LayoutTests/fast/css-generated-content/table-parts-before-and-after-expected.txt
new file mode 100644 (file)
index 0000000..14a0a47
--- /dev/null
@@ -0,0 +1,101 @@
+layer at (0,0) size 785x736
+  RenderView at (0,0) size 785x600
+layer at (0,0) size 785x736
+  RenderBlock {HTML} at (0,0) size 785x736
+    RenderBody {BODY} at (8,8) size 769x720
+      RenderBlock {DIV} at (0,0) size 769x120
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
+      RenderBlock {DIV} at (0,120) size 769x120 [color=#0000FF]
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
+      RenderBlock {DIV} at (0,240) size 769x120
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
+      RenderBlock {DIV} at (0,360) size 769x120 [color=#0000FF]
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
+      RenderBlock {DIV} at (0,480) size 769x120
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
+      RenderBlock {DIV} at (0,600) size 769x120 [color=#0000FF]
+        RenderTable at (0,0) size 40x40
+          RenderTableSection (anonymous) at (0,0) size 40x40
+            RenderTableRow (anonymous) at (0,0) size 40x40
+              RenderTableCell (anonymous) at (0,0) size 40x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 40x40
+                  text run at (0,0) width 40: "1"
+        RenderBlock (anonymous) at (0,40) size 769x40
+          RenderText {#text} at (0,0) size 80x40
+            text run at (0,0) width 80: "22"
+        RenderTable at (0,80) size 120x40
+          RenderTableSection (anonymous) at (0,0) size 120x40
+            RenderTableRow (anonymous) at (0,0) size 120x40
+              RenderTableCell (anonymous) at (0,0) size 120x40 [r=0 c=0 rs=1 cs=1]
+                RenderText at (0,0) size 120x40
+                  text run at (0,0) width 120: "333"
diff --git a/LayoutTests/fast/css-generated-content/table-parts-before-and-after.html b/LayoutTests/fast/css-generated-content/table-parts-before-and-after.html
new file mode 100644 (file)
index 0000000..bd14b14
--- /dev/null
@@ -0,0 +1,39 @@
+<style>
+    body {
+        font-family: ahem;
+        font-size: 40px;
+        -webkit-font-smoothing: none;
+    }
+
+    div::before {
+        content: "1";
+    }
+
+    div.table-before::before {
+        display: table;
+    }
+
+    div.row-group-before::before {
+        display: table-row-group;
+    }
+
+    div.row-before::before {
+        display: table-row;
+    }
+
+    div::after {
+        content: "333";
+        display: table-cell;
+    }
+</style>
+<div class="table-before">22</div>
+<div id="target-1" class="table-before">22</div>
+<div class="row-group-before">22</div>
+<div id="target-2" class="row-group-before">22</div>
+<div class="row-before">22</div>
+<div id="target-3" class="row-before">22</div>
+<script>
+    document.getElementById("target-1").style.color = "blue";
+    document.getElementById("target-2").style.color = "blue";
+    document.getElementById("target-3").style.color = "blue";
+</script>
index 9fabae92b9627491af3465262f79f8d1c258b023..f0a46fa16f80f132d95f261185ba0632befee32c 100644 (file)
@@ -1,3 +1,18 @@
+2011-10-10  Dan Bernstein  <mitz@apple.com>
+
+        <rdar://problem/10246137> Duplicate ::after content when both ::before and ::after are styled as table parts
+
+        Reviewed by Sam Weinig.
+
+        Test: fast/css-generated-content/table-parts-before-and-after.html
+
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::addChild): Prevented table part childern after a ::before table from being merged
+        into it.
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::addChild): Prevented children after a ::before table section from being merged
+        into it.
+
 2011-10-10  Nate Chapin  <japhet@chromium.org>
 
         Most of the functions in CachedResourceClient are specific
index ca100b7437f7e4798a2bde27be61e4737496677b..f0c19cc5526485d09dae8a3a2bba7c92c1e95f14 100644 (file)
@@ -309,7 +309,7 @@ void RenderObject::addChild(RenderObject* newChild, RenderObject* beforeChild)
     if (needsTable) {
         RenderTable* table;
         RenderObject* afterChild = beforeChild ? beforeChild->previousSibling() : children->lastChild();
-        if (afterChild && afterChild->isAnonymous() && afterChild->isTable())
+        if (afterChild && afterChild->isAnonymous() && afterChild->isTable() && !afterChild->isBeforeContent())
             table = toRenderTable(afterChild);
         else {
             table = new (renderArena()) RenderTable(document() /* is anonymous */);
index 45bef6f9e52a649e520351d41c5b5bc45aca5cbd..10ba1a0fb1e0a454c3460e37c87285d60fb3a07b 100644 (file)
@@ -179,7 +179,7 @@ void RenderTable::addChild(RenderObject* child, RenderObject* beforeChild)
         return;
     }
 
-    if (!beforeChild && lastChild() && lastChild()->isTableSection() && lastChild()->isAnonymous()) {
+    if (!beforeChild && lastChild() && lastChild()->isTableSection() && lastChild()->isAnonymous() && !lastChild()->isBeforeContent()) {
         lastChild()->addChild(child);
         return;
     }