<!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>[162892] trunk</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/162892">162892</a></dd>
<dt>Author</dt> <dd>hyatt@apple.com</dd>
<dt>Date</dt> <dd>2014-01-27 17:26:37 -0800 (Mon, 27 Jan 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[New Multicolumn] Add support for block progression axis and reverse direction
https://bugs.webkit.org/show_bug.cgi?id=127715

Reviewed by thorton.

This patch adds support for -webkit-progression-direction and -webkit-progression-axis
to the new column code. This allows columns to stack along the block axis instead of
the inline axis or to reverse directions along that progression axis.

Added fast/multicol/newmulticol/progression-reverse.html and
      fast/multicol/newmulticol/progression-reverse-overflow.html

Source/WebCore: 

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::isTopLayoutOverflowAllowed):
(WebCore::RenderBlock::isLeftLayoutOverflowAllowed):
New functions have been added for top and left layout overflow in order to get
a bunch of code out of RenderBox that didn't belong there. RenderBlock is overriding
the functions for the old multicolumn layout code to keep it working.

* rendering/RenderBlock.h:
Added the new top/left overflow functions.

* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
Moved from RenderBlock, since it didn't belong there.

(WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed):
(WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed):
* rendering/RenderBlockFlow.h:
Overridden for the new multi-column code to specify when top/left overflow are
allowed (e.g., when the columns go backwards).

* rendering/RenderBox.cpp:
(WebCore::RenderBox::addLayoutOverflow):
Overridden to use the new top/left overflow functions.

* rendering/RenderBox.h:
(WebCore::RenderBox::isTopLayoutOverflowAllowed):
(WebCore::RenderBox::isLeftLayoutOverflowAllowed):
Added base definitions that look at direction and writing-mode.

* rendering/RenderFlexibleBox.cpp:
(WebCore::RenderFlexibleBox::isTopLayoutOverflowAllowed):
(WebCore::RenderFlexibleBox::isLeftLayoutOverflowAllowed):
* rendering/RenderFlexibleBox.h:
Overrides for flexible box of the top/left overflow functions.

* rendering/RenderMultiColumnFlowThread.h:
Make sure requiresBalancing() is set to false if the axis of the columns
is block, since at least right now, we don't support balancing columns
along the block axis. (In theory we could support this in the future, but
nobody has requested it.)

* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::updateLogicalWidth):
Remove the code that expands the width of multi column sets. We now always
let their logical width match the containing block's content width and instead
add the overflow to the set itself.

(WebCore::RenderMultiColumnSet::columnRectAt):
(WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
(WebCore::RenderMultiColumnSet::paintColumnRules):
(WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
(WebCore::RenderMultiColumnSet::collectLayerFragments):
(WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
Patch all of these functions to know how to handle a block axis or reversed
direction.

(WebCore::RenderMultiColumnSet::addOverflowFromChildren):
* rendering/RenderMultiColumnSet.h:
Make multi-column set add in its overflow in the same way that the old
multi-column code did, by looking at the last column rect. (This is really
not a very good way to do it, but it's the same as the old code for now.)

LayoutTests: 

* fast/multicol/newmulticol/progression-reverse-expected.html: Added.
* fast/multicol/newmulticol/progression-reverse-overflow-expected.html: Added.
* fast/multicol/newmulticol/progression-reverse-overflow.html: Added.
* fast/multicol/newmulticol/progression-reverse.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockh">trunk/Source/WebCore/rendering/RenderBlock.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowcpp">trunk/Source/WebCore/rendering/RenderBlockFlow.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBlockFlowh">trunk/Source/WebCore/rendering/RenderBlockFlow.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxh">trunk/Source/WebCore/rendering/RenderBox.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlexibleBoxcpp">trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlexibleBoxh">trunk/Source/WebCore/rendering/RenderFlexibleBox.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMultiColumnFlowThreadh">trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMultiColumnSetcpp">trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderMultiColumnSeth">trunk/Source/WebCore/rendering/RenderMultiColumnSet.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastmulticolnewmulticolprogressionreverseexpectedhtml">trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastmulticolnewmulticolprogressionreverseoverflowexpectedhtml">trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastmulticolnewmulticolprogressionreverseoverflowhtml">trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastmulticolnewmulticolprogressionreversehtml">trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/LayoutTests/ChangeLog        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2014-01-27  David Hyatt  &lt;hyatt@apple.com&gt;
+
+        [New Multicolumn] Add support for block progression axis and reverse direction
+        https://bugs.webkit.org/show_bug.cgi?id=127715
+
+        Reviewed by thorton.
+
+        This patch adds support for -webkit-progression-direction and -webkit-progression-axis
+        to the new column code. This allows columns to stack along the block axis instead of
+        the inline axis or to reverse directions along that progression axis.
+
+        Added fast/multicol/newmulticol/progression-reverse.html and
+              fast/multicol/newmulticol/progression-reverse-overflow.html
+
+        * fast/multicol/newmulticol/progression-reverse-expected.html: Added.
+        * fast/multicol/newmulticol/progression-reverse-overflow-expected.html: Added.
+        * fast/multicol/newmulticol/progression-reverse-overflow.html: Added.
+        * fast/multicol/newmulticol/progression-reverse.html: Added.
+
</ins><span class="cx"> 2014-01-27  Jinwoo Song  &lt;jinwoo7.song@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed EFL gardening. Add test expectations for failing tests.
</span></span></pre></div>
<a id="trunkLayoutTestsfastmulticolnewmulticolprogressionreverseexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-expected.html (0 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-expected.html        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -0,0 +1,124 @@
</span><ins>+&lt;style&gt;
+    div.test {
+        border: solid silver;
+        -webkit-border-before-width: 2px;
+        -webkit-border-end-width: 4px;
+        -webkit-border-after-width: 1px;
+        -webkit-border-start-width: 3px;
+        -webkit-logical-width: 64px;
+        -webkit-logical-height: 32px;
+        -webkit-column-count: 2;
+        -webkit-column-gap: 4px;
+        -webkit-column-rule: 2px solid orange;
+        -webkit-column-fill: auto;
+        -webkit-column-progression: reverse;
+        column-count: 2;
+        column-gap: 4px;
+        column-rule: 2px solid orange;
+        column-fill: auto;
+    }
+
+    .writing-mode-lr div.test {
+        -webkit-writing-mode: vertical-lr;
+    }
+
+    .writing-mode-rl div.test {
+        -webkit-writing-mode: vertical-rl;
+    }
+
+    .writing-mode-tb div.test {
+        -webkit-writing-mode: horizontal-tb;
+    }
+
+    .writing-mode-bt div.test {
+        -webkit-writing-mode: horizontal-bt;
+    }
+
+    div.axis-vertical {
+        -webkit-column-axis: vertical;
+    }
+
+    div.axis-horizontal {
+        -webkit-column-axis: horizontal;
+    }
+
+    .writing-mode-tb div.axis-vertical, .writing-mode-bt div.axis-vertical,
+    .writing-mode-lr div.axis-horizontal, .writing-mode-rl div.axis-horizontal {
+        -webkit-margin-after: 16px;
+        -webkit-margin-before: 96px;
+    }
+
+    .writing-mode-tb div.axis-horizontal, .writing-mode-bt div.axis-horizontal,
+    .writing-mode-lr div.axis-vertical, .writing-mode-rl div.axis-vertical {
+        -webkit-margin-start: 96px;
+        margin-bottom: 16px;
+        margin-top: 48px;
+    }
+
+    div.test &gt; div {
+        -webkit-logical-height: 20px;
+        -webkit-border-before: 4px dotted;
+        -webkit-border-start: 2px dotted white;
+    }
+
+    div.test &gt; div:nth-child(1) { background-color: #707; }
+    div.test &gt; div:nth-child(2) { background-color: #00f; }
+    div.test &gt; div:nth-child(3) { background-color: #0bf; }
+    div.test &gt; div:nth-child(4) { background-color: #086; }
+&lt;/style&gt;
+&lt;div class=&quot;writing-mode-tb&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-bt&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-lr&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-rl&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastmulticolnewmulticolprogressionreverseoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow-expected.html (0 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow-expected.html        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -0,0 +1,56 @@
</span><ins>+&lt;style&gt;
+    div.test {
+        width: 100px;
+        height: 100px;
+        -webkit-column-width: 100px;
+        -webkit-column-gap: 0;
+        -webkit-column-fill: auto;
+        -webkit-column-progression: reverse;
+        column-width: 100px;
+        column-gap: 0;
+        column-fill: auto;
+        overflow: hidden;
+    }
+
+    div.test &gt; div {
+        -webkit-logical-height: 100%;
+    }
+
+    div.test &gt; div:first-child {
+        background-color: red;
+    }
+
+    div.test &gt; div:last-child {
+        background-color: green;
+    }
+&lt;/style&gt;
+&lt;div class=&quot;test&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;direction: rtl;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: horizontal-bt;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: vertical-lr;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-column-axis: vertical;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: vertical-lr; -webkit-column-axis: horizontal;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;script&gt;
+    var tests = document.querySelectorAll(&quot;div.test&quot;);
+    for (var i = 0; i &lt; tests.length; ++i) {
+        var test = tests[i];
+        if (test.scrollLeft)
+            test.scrollLeft = 0;
+        else
+            test.scrollLeft = test.scrollWidth;
+        if (test.scrollTop)
+            test.scrollTop = 0;
+    }
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastmulticolnewmulticolprogressionreverseoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow.html (0 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse-overflow.html        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+&lt;script&gt;
+      if (window.internals)
+        internals.settings.setRegionBasedColumnsEnabled(true);
+&lt;/script&gt;
+&lt;style&gt;
+    div.test {
+        width: 100px;
+        height: 100px;
+        -webkit-column-width: 100px;
+        -webkit-column-gap: 0;
+        -webkit-column-fill: auto;
+        -webkit-column-progression: reverse;
+        column-width: 100px;
+        column-gap: 0;
+        column-fill: auto;
+        overflow: hidden;
+    }
+
+    div.test &gt; div {
+        -webkit-logical-height: 100%;
+    }
+
+    div.test &gt; div:first-child {
+        background-color: red;
+    }
+
+    div.test &gt; div:last-child {
+        background-color: green;
+    }
+&lt;/style&gt;
+&lt;div class=&quot;test&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;direction: rtl;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: horizontal-bt;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: vertical-lr;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-column-axis: vertical;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;test&quot; style=&quot;-webkit-writing-mode: vertical-lr; -webkit-column-axis: horizontal;&quot;&gt;
+    &lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
+&lt;/div&gt;
+&lt;script&gt;
+    var tests = document.querySelectorAll(&quot;div.test&quot;);
+    for (var i = 0; i &lt; tests.length; ++i) {
+        var test = tests[i];
+        if (test.scrollLeft)
+            test.scrollLeft = 0;
+        else
+            test.scrollLeft = test.scrollWidth;
+        if (test.scrollTop)
+            test.scrollTop = 0;
+    }
+&lt;/script&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastmulticolnewmulticolprogressionreversehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse.html (0 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse.html                                (rev 0)
+++ trunk/LayoutTests/fast/multicol/newmulticol/progression-reverse.html        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -0,0 +1,128 @@
</span><ins>+&lt;script&gt;
+      if (window.internals)
+        internals.settings.setRegionBasedColumnsEnabled(true);
+&lt;/script&gt;
+&lt;style&gt;
+    div.test {
+        border: solid silver;
+        -webkit-border-before-width: 2px;
+        -webkit-border-end-width: 4px;
+        -webkit-border-after-width: 1px;
+        -webkit-border-start-width: 3px;
+        -webkit-logical-width: 64px;
+        -webkit-logical-height: 32px;
+        -webkit-column-count: 2;
+        -webkit-column-gap: 4px;
+        -webkit-column-rule: 2px solid orange;
+        -webkit-column-fill: auto;
+        -webkit-column-progression: reverse;
+        column-count: 2;
+        column-gap: 4px;
+        column-rule: 2px solid orange;
+        column-fill: auto;
+    }
+
+    .writing-mode-lr div.test {
+        -webkit-writing-mode: vertical-lr;
+    }
+
+    .writing-mode-rl div.test {
+        -webkit-writing-mode: vertical-rl;
+    }
+
+    .writing-mode-tb div.test {
+        -webkit-writing-mode: horizontal-tb;
+    }
+
+    .writing-mode-bt div.test {
+        -webkit-writing-mode: horizontal-bt;
+    }
+
+    div.axis-vertical {
+        -webkit-column-axis: vertical;
+    }
+
+    div.axis-horizontal {
+        -webkit-column-axis: horizontal;
+    }
+
+    .writing-mode-tb div.axis-vertical, .writing-mode-bt div.axis-vertical,
+    .writing-mode-lr div.axis-horizontal, .writing-mode-rl div.axis-horizontal {
+        -webkit-margin-after: 16px;
+        -webkit-margin-before: 96px;
+    }
+
+    .writing-mode-tb div.axis-horizontal, .writing-mode-bt div.axis-horizontal,
+    .writing-mode-lr div.axis-vertical, .writing-mode-rl div.axis-vertical {
+        -webkit-margin-start: 96px;
+        margin-bottom: 16px;
+        margin-top: 48px;
+    }
+
+    div.test &gt; div {
+        -webkit-logical-height: 20px;
+        -webkit-border-before: 4px dotted;
+        -webkit-border-start: 2px dotted white;
+    }
+
+    div.test &gt; div:nth-child(1) { background-color: #707; }
+    div.test &gt; div:nth-child(2) { background-color: #00f; }
+    div.test &gt; div:nth-child(3) { background-color: #0bf; }
+    div.test &gt; div:nth-child(4) { background-color: #086; }
+&lt;/style&gt;
+&lt;div class=&quot;writing-mode-tb&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-bt&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-lr&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+&lt;div class=&quot;writing-mode-rl&quot;&gt;
+    &lt;div class=&quot;test axis-horizontal&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+    &lt;div class=&quot;test axis-vertical&quot;&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+        &lt;div&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/ChangeLog        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -1,3 +1,79 @@
</span><ins>+2014-01-27  David Hyatt  &lt;hyatt@apple.com&gt;
+
+        [New Multicolumn] Add support for block progression axis and reverse direction
+        https://bugs.webkit.org/show_bug.cgi?id=127715
+
+        Reviewed by thorton.
+
+        This patch adds support for -webkit-progression-direction and -webkit-progression-axis
+        to the new column code. This allows columns to stack along the block axis instead of
+        the inline axis or to reverse directions along that progression axis.
+
+        Added fast/multicol/newmulticol/progression-reverse.html and
+              fast/multicol/newmulticol/progression-reverse-overflow.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::isTopLayoutOverflowAllowed):
+        (WebCore::RenderBlock::isLeftLayoutOverflowAllowed):
+        New functions have been added for top and left layout overflow in order to get
+        a bunch of code out of RenderBox that didn't belong there. RenderBlock is overriding
+        the functions for the old multicolumn layout code to keep it working.
+
+        * rendering/RenderBlock.h:
+        Added the new top/left overflow functions.
+
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
+        Moved from RenderBlock, since it didn't belong there.
+
+        (WebCore::RenderBlockFlow::isTopLayoutOverflowAllowed):
+        (WebCore::RenderBlockFlow::isLeftLayoutOverflowAllowed):
+        * rendering/RenderBlockFlow.h:
+        Overridden for the new multi-column code to specify when top/left overflow are
+        allowed (e.g., when the columns go backwards).
+
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::addLayoutOverflow):
+        Overridden to use the new top/left overflow functions.
+
+        * rendering/RenderBox.h:
+        (WebCore::RenderBox::isTopLayoutOverflowAllowed):
+        (WebCore::RenderBox::isLeftLayoutOverflowAllowed):
+        Added base definitions that look at direction and writing-mode.
+
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::isTopLayoutOverflowAllowed):
+        (WebCore::RenderFlexibleBox::isLeftLayoutOverflowAllowed):
+        * rendering/RenderFlexibleBox.h:
+        Overrides for flexible box of the top/left overflow functions.
+
+        * rendering/RenderMultiColumnFlowThread.h:
+        Make sure requiresBalancing() is set to false if the axis of the columns
+        is block, since at least right now, we don't support balancing columns
+        along the block axis. (In theory we could support this in the future, but
+        nobody has requested it.)
+
+        * rendering/RenderMultiColumnSet.cpp:
+        (WebCore::RenderMultiColumnSet::updateLogicalWidth):
+        Remove the code that expands the width of multi column sets. We now always
+        let their logical width match the containing block's content width and instead
+        add the overflow to the set itself.
+
+        (WebCore::RenderMultiColumnSet::columnRectAt):
+        (WebCore::RenderMultiColumnSet::flowThreadPortionOverflowRect):
+        (WebCore::RenderMultiColumnSet::paintColumnRules):
+        (WebCore::RenderMultiColumnSet::initialBlockOffsetForPainting):
+        (WebCore::RenderMultiColumnSet::collectLayerFragments):
+        (WebCore::RenderMultiColumnSet::adjustRegionBoundsFromFlowThreadPortionRect):
+        Patch all of these functions to know how to handle a block axis or reversed
+        direction.
+
+        (WebCore::RenderMultiColumnSet::addOverflowFromChildren):
+        * rendering/RenderMultiColumnSet.h:
+        Make multi-column set add in its overflow in the same way that the old
+        multi-column code did, by looking at the last column rect. (This is really
+        not a very good way to do it, but it's the same as the old code for now.)
+
</ins><span class="cx"> 2014-01-27  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix the Mac build following &lt;http://trac.webkit.org/changeset/162887&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -1677,6 +1677,30 @@
</span><span class="cx">         flowThread-&gt;addRegionsVisualOverflowFromTheme(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool RenderBlock::isTopLayoutOverflowAllowed() const
+{
+    bool hasTopOverflow = RenderBox::isTopLayoutOverflowAllowed();
+    if (!hasColumns() || style().columnProgression() == NormalColumnProgression)
+        return hasTopOverflow;
+    
+    if (!(isHorizontalWritingMode() ^ !style().hasInlineColumnAxis()))
+        hasTopOverflow = !hasTopOverflow;
+
+    return hasTopOverflow;
+}
+
+bool RenderBlock::isLeftLayoutOverflowAllowed() const
+{
+    bool hasLeftOverflow = RenderBox::isLeftLayoutOverflowAllowed();
+    if (!hasColumns() || style().columnProgression() == NormalColumnProgression)
+        return hasLeftOverflow;
+    
+    if (isHorizontalWritingMode() ^ !style().hasInlineColumnAxis())
+        hasLeftOverflow = !hasLeftOverflow;
+
+    return hasLeftOverflow;
+}
+
</ins><span class="cx"> bool RenderBlock::expandsToEncloseOverhangingFloats() const
</span><span class="cx"> {
</span><span class="cx">     return isInlineBlockOrInlineTable() || isFloatingOrOutOfFlowPositioned() || hasOverflowClip() || (parent() &amp;&amp; parent()-&gt;isFlexibleBoxIncludingDeprecated())
</span><span class="lines">@@ -1846,25 +1870,6 @@
</span><span class="cx">     return newPosition - oldPosition;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderBlock::determineLogicalLeftPositionForChild(RenderBox&amp; child, ApplyLayoutDeltaMode applyDelta)
-{
-    LayoutUnit startPosition = borderStart() + paddingStart();
-    if (style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
-        startPosition -= verticalScrollbarWidth();
-    LayoutUnit totalAvailableLogicalWidth = borderAndPaddingLogicalWidth() + availableLogicalWidth();
-
-    // Add in our start margin.
-    LayoutUnit childMarginStart = marginStartForChild(child);
-    LayoutUnit newPosition = startPosition + childMarginStart;
-        
-    // Some objects (e.g., tables, horizontal rules, overflow:auto blocks) avoid floats.  They need
-    // to shift over as necessary to dodge any floats that might get in the way.
-    if (child.avoidsFloats() &amp;&amp; containsFloats() &amp;&amp; !flowThreadContainingBlock())
-        newPosition += computeStartPositionDeltaForChildAvoidingFloats(child, marginStartForChild(child));
-
-    setLogicalLeftForChild(child, style().isLeftToRightDirection() ? newPosition : totalAvailableLogicalWidth - newPosition - logicalWidthForChild(child), applyDelta);
-}
-
</del><span class="cx"> void RenderBlock::setLogicalLeftForChild(RenderBox&amp; child, LayoutUnit logicalLeft, ApplyLayoutDeltaMode applyDelta)
</span><span class="cx"> {
</span><span class="cx">     if (isHorizontalWritingMode()) {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBlock.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -423,9 +423,13 @@
</span><span class="cx"> public:
</span><span class="cx">     virtual void computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats = false);
</span><span class="cx">     void clearLayoutOverflow();
</span><ins>+    
+    bool isTopLayoutOverflowAllowed() const override;
+    bool isLeftLayoutOverflowAllowed() const override;
+
</ins><span class="cx"> protected:
</span><span class="cx">     virtual void addOverflowFromChildren();
</span><del>-    // FIXME-BLOCKFLOW: Remove virtualizaion when all callers have moved to RenderBlockFlow
</del><ins>+    // FIXME-BLOCKFLOW: Remove virtualization when all callers have moved to RenderBlockFlow
</ins><span class="cx">     virtual void addOverflowFromInlineChildren() { }
</span><span class="cx">     void addOverflowFromBlockChildren();
</span><span class="cx">     void addOverflowFromPositionedObjects();
</span><span class="lines">@@ -581,8 +585,6 @@
</span><span class="cx"> protected:
</span><span class="cx">     void dirtyForLayoutFromPercentageHeightDescendants();
</span><span class="cx">     
</span><del>-    void determineLogicalLeftPositionForChild(RenderBox&amp; child, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
-    
</del><span class="cx">     virtual ColumnInfo::PaginationUnit paginationUnit() const;
</span><span class="cx"> 
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -762,7 +762,25 @@
</span><span class="cx">     return LayoutUnit();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox&amp; child, ApplyLayoutDeltaMode applyDelta)
+{
+    LayoutUnit startPosition = borderStart() + paddingStart();
+    if (style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+        startPosition -= verticalScrollbarWidth();
+    LayoutUnit totalAvailableLogicalWidth = borderAndPaddingLogicalWidth() + availableLogicalWidth();
</ins><span class="cx"> 
</span><ins>+    // Add in our start margin.
+    LayoutUnit childMarginStart = marginStartForChild(child);
+    LayoutUnit newPosition = startPosition + childMarginStart;
+        
+    // Some objects (e.g., tables, horizontal rules, overflow:auto blocks) avoid floats. They need
+    // to shift over as necessary to dodge any floats that might get in the way.
+    if (child.avoidsFloats() &amp;&amp; containsFloats() &amp;&amp; !flowThreadContainingBlock())
+        newPosition += computeStartPositionDeltaForChildAvoidingFloats(child, marginStartForChild(child));
+
+    setLogicalLeftForChild(child, style().isLeftToRightDirection() ? newPosition : totalAvailableLogicalWidth - newPosition - logicalWidthForChild(child), applyDelta);
+}
+
</ins><span class="cx"> void RenderBlockFlow::adjustFloatingBlock(const MarginInfo&amp; marginInfo)
</span><span class="cx"> {
</span><span class="cx">     // The float should be positioned taking into account the bottom margin
</span><span class="lines">@@ -3646,5 +3664,29 @@
</span><span class="cx">     return 1;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool RenderBlockFlow::isTopLayoutOverflowAllowed() const
+{
+    bool hasTopOverflow = RenderBlock::isTopLayoutOverflowAllowed();
+    if (!multiColumnFlowThread() || style().columnProgression() == NormalColumnProgression)
+        return hasTopOverflow;
+    
+    if (!(isHorizontalWritingMode() ^ !style().hasInlineColumnAxis()))
+        hasTopOverflow = !hasTopOverflow;
+
+    return hasTopOverflow;
</ins><span class="cx"> }
</span><ins>+
+bool RenderBlockFlow::isLeftLayoutOverflowAllowed() const
+{
+    bool hasLeftOverflow = RenderBlock::isLeftLayoutOverflowAllowed();
+    if (!multiColumnFlowThread() || style().columnProgression() == NormalColumnProgression)
+        return hasLeftOverflow;
+    
+    if (isHorizontalWritingMode() ^ !style().hasInlineColumnAxis())
+        hasLeftOverflow = !hasLeftOverflow;
+
+    return hasLeftOverflow;
+}
+
+}
</ins><span class="cx"> // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -441,6 +441,9 @@
</span><span class="cx"> 
</span><span class="cx">     virtual LayoutUnit computedColumnWidth() const override;
</span><span class="cx">     virtual unsigned computedColumnCount() const override;
</span><ins>+    
+    bool isTopLayoutOverflowAllowed() const override;
+    bool isLeftLayoutOverflowAllowed() const override;
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     // Called to lay out the legend for a fieldset or the ruby text of a ruby run. Also used by multi-column layout to handle
</span><span class="lines">@@ -483,6 +486,8 @@
</span><span class="cx">     bool hasOverhangingFloats() { return parent() &amp;&amp; !hasColumns() &amp;&amp; containsFloats() &amp;&amp; lowestFloatLogicalBottom() &gt; logicalHeight(); }
</span><span class="cx">     LayoutUnit getClearDelta(RenderBox&amp; child, LayoutUnit yPos);
</span><span class="cx"> 
</span><ins>+    void determineLogicalLeftPositionForChild(RenderBox&amp; child, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
+    
</ins><span class="cx">     virtual bool hitTestFloats(const HitTestRequest&amp;, HitTestResult&amp;, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset) override;
</span><span class="cx">     virtual bool hitTestInlineChildren(const HitTestRequest&amp;, HitTestResult&amp;, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset, HitTestAction) override;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -4307,23 +4307,9 @@
</span><span class="cx">         // Overflow is in the block's coordinate space and thus is flipped for horizontal-bt and vertical-rl 
</span><span class="cx">         // writing modes.  At this stage that is actually a simplification, since we can treat horizontal-tb/bt as the same
</span><span class="cx">         // and vertical-lr/rl as the same.
</span><del>-        bool hasTopOverflow = !style().isLeftToRightDirection() &amp;&amp; !isHorizontalWritingMode();
-        bool hasLeftOverflow = !style().isLeftToRightDirection() &amp;&amp; isHorizontalWritingMode();
-        if (isFlexibleBox() &amp;&amp; style().isReverseFlexDirection()) {
-            RenderFlexibleBox* flexibleBox = toRenderFlexibleBox(this);
-            if (flexibleBox-&gt;isHorizontalFlow())
-                hasLeftOverflow = true;
-            else
-                hasTopOverflow = true;
-        }
</del><ins>+        bool hasTopOverflow = isTopLayoutOverflowAllowed();
+        bool hasLeftOverflow = isLeftLayoutOverflowAllowed();
</ins><span class="cx"> 
</span><del>-        if (hasColumns() &amp;&amp; style().columnProgression() == ReverseColumnProgression) {
-            if (isHorizontalWritingMode() ^ !style().hasInlineColumnAxis())
-                hasLeftOverflow = !hasLeftOverflow;
-            else
-                hasTopOverflow = !hasTopOverflow;
-        }
-
</del><span class="cx">         if (!hasTopOverflow)
</span><span class="cx">             overflowRect.shiftYEdgeTo(std::max(overflowRect.y(), clientBox.y()));
</span><span class="cx">         else
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderBox.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -197,6 +197,9 @@
</span><span class="cx">     void addVisualOverflow(const LayoutRect&amp;);
</span><span class="cx">     void clearOverflow();
</span><span class="cx">     
</span><ins>+    virtual bool isTopLayoutOverflowAllowed() const { return !style().isLeftToRightDirection() &amp;&amp; !isHorizontalWritingMode(); }
+    virtual bool isLeftLayoutOverflowAllowed() const { return !style().isLeftToRightDirection() &amp;&amp; isHorizontalWritingMode(); }
+    
</ins><span class="cx">     void addVisualEffectOverflow();
</span><span class="cx">     LayoutRect applyVisualEffectOverflow(const LayoutRect&amp;) const;
</span><span class="cx">     void addOverflowFromChild(RenderBox* child) { addOverflowFromChild(child, child-&gt;locationOffset()); }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlexibleBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.cpp        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -1384,4 +1384,22 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool RenderFlexibleBox::isTopLayoutOverflowAllowed() const
+{
+    bool hasTopOverflow = RenderBlock::isTopLayoutOverflowAllowed();
+    if (hasTopOverflow || !style().isReverseFlexDirection())
+        return hasTopOverflow;
+    
+    return !isHorizontalFlow();
</ins><span class="cx"> }
</span><ins>+
+bool RenderFlexibleBox::isLeftLayoutOverflowAllowed() const
+{
+    bool hasLeftOverflow = RenderBlock::isLeftLayoutOverflowAllowed();
+    if (hasLeftOverflow || !style().isReverseFlexDirection())
+        return hasLeftOverflow;
+    
+    return isHorizontalFlow();
+}
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlexibleBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlexibleBox.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlexibleBox.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderFlexibleBox.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -57,6 +57,9 @@
</span><span class="cx"> 
</span><span class="cx">     bool isHorizontalFlow() const;
</span><span class="cx"> 
</span><ins>+    bool isTopLayoutOverflowAllowed() const override;
+    bool isLeftLayoutOverflowAllowed() const override;
+
</ins><span class="cx"> protected:
</span><span class="cx">     virtual void computeIntrinsicLogicalWidths(LayoutUnit&amp; minLogicalWidth, LayoutUnit&amp; maxLogicalWidth) const override;
</span><span class="cx">     virtual void computePreferredLogicalWidths() override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnFlowThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlowThread.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -47,7 +47,7 @@
</span><span class="cx">     
</span><span class="cx">     bool shouldRelayoutForPagination() const { return !m_inBalancingPass &amp;&amp; m_needsRebalancing; }
</span><span class="cx">     
</span><del>-    bool requiresBalancing() const { return !columnHeightAvailable() || parent()-&gt;style().columnFill() == ColumnFillBalance; }
</del><ins>+    bool requiresBalancing() const { return progressionIsInline() &amp;&amp; (!columnHeightAvailable() || parent()-&gt;style().columnFill() == ColumnFillBalance); }
</ins><span class="cx"> 
</span><span class="cx">     void setColumnCountAndWidth(unsigned count, LayoutUnit width)
</span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -205,18 +205,6 @@
</span><span class="cx">     // FIXME: When we add regions support, we'll start it off at the width of the multi-column
</span><span class="cx">     // block in that particular region.
</span><span class="cx">     setLogicalWidth(parentBox()-&gt;contentLogicalWidth());
</span><del>-
-    // If we overflow, increase our logical width.
-    unsigned colCount = columnCount();
-    LayoutUnit colGap = columnGap();
-    LayoutUnit minimumContentLogicalWidth = colCount * computedColumnWidth() + (colCount - 1) * colGap;
-    LayoutUnit currentContentLogicalWidth = contentLogicalWidth();
-    LayoutUnit delta = std::max(LayoutUnit(), minimumContentLogicalWidth - currentContentLogicalWidth);
-    if (!delta)
-        return;
-
-    // Increase our logical width by the delta.
-    setLogicalWidth(logicalWidth() + delta);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderMultiColumnSet::prepareForLayout()
</span><span class="lines">@@ -295,11 +283,23 @@
</span><span class="cx">     LayoutUnit colLogicalTop = borderAndPaddingBefore();
</span><span class="cx">     LayoutUnit colLogicalLeft = borderAndPaddingLogicalLeft();
</span><span class="cx">     LayoutUnit colGap = columnGap();
</span><del>-    if (style().isLeftToRightDirection())
-        colLogicalLeft += index * (colLogicalWidth + colGap);
-    else
-        colLogicalLeft += contentLogicalWidth() - colLogicalWidth - index * (colLogicalWidth + colGap);
-
</del><ins>+    
+    RenderBlockFlow* parentFlow = toRenderBlockFlow(parent());
+    bool progressionReversed = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsReversed();
+    bool progressionInline = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsInline();
+    
+    if (progressionInline) {
+        if (style().isLeftToRightDirection() ^ progressionReversed)
+            colLogicalLeft += index * (colLogicalWidth + colGap);
+        else
+            colLogicalLeft += contentLogicalWidth() - colLogicalWidth - index * (colLogicalWidth + colGap);
+    } else {
+        if (!progressionReversed)
+            colLogicalTop += index * (colLogicalHeight + colGap);
+        else
+            colLogicalTop += contentLogicalHeight() - colLogicalHeight - index * (colLogicalHeight + colGap);
+    }
+    
</ins><span class="cx">     if (isHorizontalWritingMode())
</span><span class="cx">         return LayoutRect(colLogicalLeft, colLogicalTop, colLogicalWidth, colLogicalHeight);
</span><span class="cx">     return LayoutRect(colLogicalTop, colLogicalLeft, colLogicalHeight, colLogicalWidth);
</span><span class="lines">@@ -347,10 +347,14 @@
</span><span class="cx">     // FIXME: Eventually we will know overflow on a per-column basis, but we can't do this until we have a painting
</span><span class="cx">     // mode that understands not to paint contents from a previous column in the overflow area of a following column.
</span><span class="cx">     // This problem applies to regions and pages as well and is not unique to columns.
</span><ins>+    
+    RenderBlockFlow* parentFlow = toRenderBlockFlow(parent());
+    bool progressionReversed = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsReversed();
+    
</ins><span class="cx">     bool isFirstColumn = !index;
</span><span class="cx">     bool isLastColumn = index == colCount - 1;
</span><del>-    bool isLeftmostColumn = style().isLeftToRightDirection() ? isFirstColumn : isLastColumn;
-    bool isRightmostColumn = style().isLeftToRightDirection() ? isLastColumn : isFirstColumn;
</del><ins>+    bool isLeftmostColumn = style().isLeftToRightDirection() ^ progressionReversed ? isFirstColumn : isLastColumn;
+    bool isRightmostColumn = style().isLeftToRightDirection() ^ progressionReversed ? isLastColumn : isFirstColumn;
</ins><span class="cx"> 
</span><span class="cx">     // Calculate the overflow rectangle, based on the flow thread's, clipped at column logical
</span><span class="cx">     // top/bottom unless it's the first/last column.
</span><span class="lines">@@ -395,6 +399,7 @@
</span><span class="cx">     if (paintInfo.context-&gt;paintingDisabled())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    RenderMultiColumnFlowThread* flowThread = toRenderBlockFlow(parent())-&gt;multiColumnFlowThread();
</ins><span class="cx">     const RenderStyle&amp; blockStyle = parent()-&gt;style();
</span><span class="cx">     const Color&amp; ruleColor = blockStyle.visitedDependentColor(CSSPropertyWebkitColumnRuleColor);
</span><span class="cx">     bool ruleTransparent = blockStyle.columnRuleIsTransparent();
</span><span class="lines">@@ -411,36 +416,66 @@
</span><span class="cx"> 
</span><span class="cx">     bool antialias = shouldAntialiasLines(paintInfo.context);
</span><span class="cx"> 
</span><del>-    bool leftToRight = style().isLeftToRightDirection();
-    LayoutUnit currLogicalLeftOffset = leftToRight ? LayoutUnit() : contentLogicalWidth();
-    LayoutUnit ruleAdd = borderAndPaddingLogicalLeft();
-    LayoutUnit ruleLogicalLeft = leftToRight ? LayoutUnit() : contentLogicalWidth();
-    LayoutUnit inlineDirectionSize = computedColumnWidth();
-    BoxSide boxSide = isHorizontalWritingMode()
-        ? leftToRight ? BSLeft : BSRight
-        : leftToRight ? BSTop : BSBottom;
</del><ins>+    if (flowThread-&gt;progressionIsInline()) {
+        bool leftToRight = style().isLeftToRightDirection() ^ flowThread-&gt;progressionIsReversed();
+        LayoutUnit currLogicalLeftOffset = leftToRight ? LayoutUnit() : contentLogicalWidth();
+        LayoutUnit ruleAdd = logicalLeftOffsetForContent();
+        LayoutUnit ruleLogicalLeft = leftToRight ? LayoutUnit() : contentLogicalWidth();
+        LayoutUnit inlineDirectionSize = computedColumnWidth();
+        BoxSide boxSide = isHorizontalWritingMode()
+            ? leftToRight ? BSLeft : BSRight
+            : leftToRight ? BSTop : BSBottom;
</ins><span class="cx"> 
</span><del>-    for (unsigned i = 0; i &lt; colCount; i++) {
-        // Move to the next position.
-        if (leftToRight) {
-            ruleLogicalLeft += inlineDirectionSize + colGap / 2;
-            currLogicalLeftOffset += inlineDirectionSize + colGap;
-        } else {
-            ruleLogicalLeft -= (inlineDirectionSize + colGap / 2);
-            currLogicalLeftOffset -= (inlineDirectionSize + colGap);
</del><ins>+        for (unsigned i = 0; i &lt; colCount; i++) {
+            // Move to the next position.
+            if (leftToRight) {
+                ruleLogicalLeft += inlineDirectionSize + colGap / 2;
+                currLogicalLeftOffset += inlineDirectionSize + colGap;
+            } else {
+                ruleLogicalLeft -= (inlineDirectionSize + colGap / 2);
+                currLogicalLeftOffset -= (inlineDirectionSize + colGap);
+            }
+
+            // Now paint the column rule.
+            if (i &lt; colCount - 1) {
+                LayoutUnit ruleLeft = isHorizontalWritingMode() ? paintOffset.x() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd : paintOffset.x() + borderLeft() + paddingLeft();
+                LayoutUnit ruleRight = isHorizontalWritingMode() ? ruleLeft + ruleThickness : ruleLeft + contentWidth();
+                LayoutUnit ruleTop = isHorizontalWritingMode() ? paintOffset.y() + borderTop() + paddingTop() : paintOffset.y() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd;
+                LayoutUnit ruleBottom = isHorizontalWritingMode() ? ruleTop + contentHeight() : ruleTop + ruleThickness;
+                IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(ruleLeft, ruleTop, ruleRight, ruleBottom);
+                drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
+            }
+            
+            ruleLogicalLeft = currLogicalLeftOffset;
</ins><span class="cx">         }
</span><ins>+    } else {
+        bool topToBottom = !style().isFlippedBlocksWritingMode() ^ flowThread-&gt;progressionIsReversed();
+        LayoutUnit ruleLeft = isHorizontalWritingMode() ? LayoutUnit() : colGap / 2 - colGap - ruleThickness / 2;
+        LayoutUnit ruleWidth = isHorizontalWritingMode() ? contentWidth() : ruleThickness;
+        LayoutUnit ruleTop = isHorizontalWritingMode() ? colGap / 2 - colGap - ruleThickness / 2 : LayoutUnit();
+        LayoutUnit ruleHeight = isHorizontalWritingMode() ? ruleThickness : contentHeight();
+        LayoutRect ruleRect(ruleLeft, ruleTop, ruleWidth, ruleHeight);
</ins><span class="cx"> 
</span><del>-        // Now paint the column rule.
-        if (i &lt; colCount - 1) {
-            LayoutUnit ruleLeft = isHorizontalWritingMode() ? paintOffset.x() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd : paintOffset.x() + borderLeft() + paddingLeft();
-            LayoutUnit ruleRight = isHorizontalWritingMode() ? ruleLeft + ruleThickness : ruleLeft + contentWidth();
-            LayoutUnit ruleTop = isHorizontalWritingMode() ? paintOffset.y() + borderTop() + paddingTop() : paintOffset.y() + ruleLogicalLeft - ruleThickness / 2 + ruleAdd;
-            LayoutUnit ruleBottom = isHorizontalWritingMode() ? ruleTop + contentHeight() : ruleTop + ruleThickness;
-            IntRect pixelSnappedRuleRect = pixelSnappedIntRectFromEdges(ruleLeft, ruleTop, ruleRight, ruleBottom);
</del><ins>+        if (!topToBottom) {
+            if (isHorizontalWritingMode())
+                ruleRect.setY(height() - ruleRect.maxY());
+            else
+                ruleRect.setX(width() - ruleRect.maxX());
+        }
+
+        ruleRect.moveBy(paintOffset);
+
+        BoxSide boxSide = isHorizontalWritingMode() ? topToBottom ? BSTop : BSBottom : topToBottom ? BSLeft : BSRight;
+
+        LayoutSize step(0, topToBottom ? computedColumnHeight() + colGap : -(computedColumnHeight() + colGap));
+        if (!isHorizontalWritingMode())
+            step = step.transposedSize();
+
+        for (unsigned i = 1; i &lt; colCount; i++) {
+            ruleRect.move(step);
+            IntRect pixelSnappedRuleRect = pixelSnappedIntRect(ruleRect);
</ins><span class="cx">             drawLineForBoxSide(paintInfo.context, pixelSnappedRuleRect.x(), pixelSnappedRuleRect.y(), pixelSnappedRuleRect.maxX(), pixelSnappedRuleRect.maxY(), boxSide, ruleColor, ruleStyle, 0, 0, antialias);
</span><span class="cx">         }
</span><del>-        
-        ruleLogicalLeft = currLogicalLeftOffset;
</del><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -482,6 +517,22 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+LayoutUnit RenderMultiColumnSet::initialBlockOffsetForPainting() const
+{
+    RenderBlockFlow* parentFlow = toRenderBlockFlow(parent());
+    bool progressionReversed = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsReversed();
+    bool progressionIsInline = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsInline();
+    
+    LayoutUnit result = 0;
+    if (!progressionIsInline &amp;&amp; progressionReversed) {
+        LayoutRect colRect = columnRectAt(0);
+        result = isHorizontalWritingMode() ? colRect.y() : colRect.x();
+        if (style().isFlippedBlocksWritingMode())
+            result = -result;
+    }
+    return result;
+}
+
</ins><span class="cx"> void RenderMultiColumnSet::collectLayerFragments(LayerFragments&amp; fragments, const LayoutRect&amp; layerBoundingBox, const LayoutRect&amp; dirtyRect)
</span><span class="cx"> {
</span><span class="cx">     // Let's start by introducing the different coordinate systems involved here. They are different
</span><span class="lines">@@ -535,6 +586,12 @@
</span><span class="cx">     LayoutUnit colGap = columnGap();
</span><span class="cx">     unsigned colCount = columnCount();
</span><span class="cx">     
</span><ins>+    RenderBlockFlow* parentFlow = toRenderBlockFlow(parent());
+    bool progressionReversed = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsReversed();
+    bool progressionIsInline = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsInline();
+    
+    LayoutUnit initialBlockOffset = initialBlockOffsetForPainting();
+    
</ins><span class="cx">     for (unsigned i = startColumn; i &lt;= endColumn; i++) {
</span><span class="cx">         // Get the portion of the flow thread that corresponds to this column.
</span><span class="cx">         LayoutRect flowThreadPortion = flowThreadPortionRectAt(i);
</span><span class="lines">@@ -551,11 +608,22 @@
</span><span class="cx">         // We also need to intersect the dirty rect. We have to apply a translation and shift based off
</span><span class="cx">         // our column index.
</span><span class="cx">         LayoutPoint translationOffset;
</span><del>-        LayoutUnit inlineOffset = i * (colLogicalWidth + colGap);
-        if (!style().isLeftToRightDirection())
</del><ins>+        LayoutUnit inlineOffset = progressionIsInline ? i * (colLogicalWidth + colGap) : LayoutUnit();
+        
+        bool leftToRight = style().isLeftToRightDirection() ^ progressionReversed;
+        if (!leftToRight) {
</ins><span class="cx">             inlineOffset = -inlineOffset;
</span><ins>+            if (progressionReversed)
+                inlineOffset += contentLogicalWidth() - colLogicalWidth;
+        }
</ins><span class="cx">         translationOffset.setX(inlineOffset);
</span><del>-        LayoutUnit blockOffset = isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x();
</del><ins>+        LayoutUnit blockOffset = initialBlockOffset + (isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x());
+        if (!progressionIsInline) {
+            if (!progressionReversed)
+                blockOffset = i * colGap;
+            else
+                blockOffset -= i * (computedColumnHeight() + colGap);
+        }
</ins><span class="cx">         if (isFlippedBlocksWritingMode(style().writingMode()))
</span><span class="cx">             blockOffset = -blockOffset;
</span><span class="cx">         translationOffset.setY(blockOffset);
</span><span class="lines">@@ -597,13 +665,29 @@
</span><span class="cx">     
</span><span class="cx">     LayoutRect flowThreadPortion = flowThreadPortionRectAt(startColumn);
</span><span class="cx">     LayoutPoint translationOffset;
</span><del>-
-    LayoutUnit inlineOffset = startColumn * (colLogicalWidth + colGap);
-    if (!style().isLeftToRightDirection())
</del><ins>+    
+    RenderBlockFlow* parentFlow = toRenderBlockFlow(parent());
+    bool progressionReversed = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsReversed();
+    bool progressionIsInline = parentFlow-&gt;multiColumnFlowThread()-&gt;progressionIsInline();
+    
+    LayoutUnit initialBlockOffset = initialBlockOffsetForPainting();
+    
+    LayoutUnit inlineOffset = progressionIsInline ? startColumn * (colLogicalWidth + colGap) : LayoutUnit();
+    
+    bool leftToRight = style().isLeftToRightDirection() ^ progressionReversed;
+    if (!leftToRight) {
</ins><span class="cx">         inlineOffset = -inlineOffset;
</span><ins>+        if (progressionReversed)
+            inlineOffset += contentLogicalWidth() - colLogicalWidth;
+    }
</ins><span class="cx">     translationOffset.setX(inlineOffset);
</span><del>-        
-    LayoutUnit blockOffset = isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x();
</del><ins>+    LayoutUnit blockOffset = initialBlockOffset + (isHorizontalWritingMode() ? -flowThreadPortion.y() : -flowThreadPortion.x());
+    if (!progressionIsInline) {
+        if (!progressionReversed)
+            blockOffset = startColumn * colGap;
+        else
+            blockOffset -= startColumn * (computedColumnHeight() + colGap);
+    }
</ins><span class="cx">     if (isFlippedBlocksWritingMode(style().writingMode()))
</span><span class="cx">         blockOffset = -blockOffset;
</span><span class="cx">     translationOffset.setY(blockOffset);
</span><span class="lines">@@ -617,6 +701,19 @@
</span><span class="cx">     regionBounds.moveBy(roundedIntPoint(-translationOffset));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMultiColumnSet::addOverflowFromChildren()
+{
+    // FIXME: Need to do much better here.
+    unsigned colCount = columnCount();
+    if (!colCount)
+        return;
+    
+    LayoutRect lastRect = columnRectAt(colCount - 1);
+    addLayoutOverflow(lastRect);
+    if (!hasOverflowClip())
+        addVisualOverflow(lastRect);
+}
+
</ins><span class="cx"> const char* RenderMultiColumnSet::renderName() const
</span><span class="cx"> {    
</span><span class="cx">     return &quot;RenderMultiColumnSet&quot;;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.h (162891 => 162892)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.h        2014-01-28 01:17:40 UTC (rev 162891)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.h        2014-01-28 01:26:37 UTC (rev 162892)
</span><span class="lines">@@ -82,6 +82,9 @@
</span><span class="cx"> 
</span><span class="cx">     void prepareForLayout();
</span><span class="cx"> 
</span><ins>+protected:
+    void addOverflowFromChildren() override;
+    
</ins><span class="cx"> private:
</span><span class="cx">     virtual void computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues&amp;) const override;
</span><span class="cx"> 
</span><span class="lines">@@ -112,6 +115,8 @@
</span><span class="cx">     LayoutRect flowThreadPortionRectAt(unsigned index) const;
</span><span class="cx">     LayoutRect flowThreadPortionOverflowRect(const LayoutRect&amp; flowThreadPortion, unsigned index, unsigned colCount, LayoutUnit colGap);
</span><span class="cx"> 
</span><ins>+    LayoutUnit initialBlockOffsetForPainting() const;
+
</ins><span class="cx">     enum ColumnIndexCalculationMode {
</span><span class="cx">         ClampToExistingColumns, // Stay within the range of already existing columns.
</span><span class="cx">         AssumeNewColumns // Allow column indices outside the range of already existing columns.
</span></span></pre>
</div>
</div>

</body>
</html>