<!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>[167803] 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/167803">167803</a></dd>
<dt>Author</dt> <dd>stavila@adobe.com</dd>
<dt>Date</dt> <dd>2014-04-25 06:56:12 -0700 (Fri, 25 Apr 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CSS Regions] Overflow selection doesn't work properly
https://bugs.webkit.org/show_bug.cgi?id=130715

Reviewed by David Hyatt.

Source/WebCore:
When hit-testing, painting block selection gaps and searching for the node at a specific point inside a flow thread,
the region range of the box being checked must be validated in order to not return false positives. Otherwise, hit-testing
at the top of region B could hit elements that overflow the bottom of region A.

Tests: fast/regions/selection-in-overflow-hit-testing.html
       fast/regions/selection-in-overflow.html
       fast/regions/selection-in-text-after-overflow-hit-testing.html

* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
(WebCore::AccessibilityRenderObject::visiblePositionForPoint):
* dom/Document.cpp:
(WebCore::Document::caretRangeFromPoint):
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::contains):
* editing/VisibleUnits.cpp:
(WebCore::previousLinePosition):
(WebCore::nextLinePosition):
* page/EventHandler.cpp:
(WebCore::EventHandler::selectClosestWordFromHitTestResult):
(WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
(WebCore::EventHandler::handleMousePressEventTripleClick):
(WebCore::EventHandler::handleMousePressEventSingleClick):
(WebCore::selectionExtentRespectingEditingBoundary):
(WebCore::EventHandler::updateSelectionForMouseDrag):
(WebCore::EventHandler::handleMouseReleaseEvent):
* page/Frame.cpp:
(WebCore::Frame::visiblePositionForPoint):
* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::selectionGaps):
(WebCore::RenderBlock::nodeAtPoint):
(WebCore::positionForPointRespectingEditingBoundaries):
(WebCore::RenderBlock::positionForPointWithInlineChildren):
(WebCore::isChildHitTestCandidate):
(WebCore::RenderBlock::positionForPoint):
* rendering/RenderBlock.h:
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
(WebCore::RenderBlockFlow::positionForPoint):
* rendering/RenderBlockFlow.h:
* rendering/RenderBox.cpp:
(WebCore::RenderBox::positionForPoint):
* rendering/RenderBox.h:
* rendering/RenderFileUploadControl.cpp:
(WebCore::RenderFileUploadControl::positionForPoint):
* rendering/RenderFileUploadControl.h:
* rendering/RenderInline.cpp:
(WebCore::RenderInline::positionForPoint):
* rendering/RenderInline.h:
* rendering/RenderLineBreak.cpp:
(WebCore::RenderLineBreak::positionForPoint):
* rendering/RenderLineBreak.h:
* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::positionForPoint):
* rendering/RenderMultiColumnSet.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::positionForPoint):
* rendering/RenderObject.h:
* rendering/RenderRegion.cpp:
(WebCore::RenderRegion::positionForPoint):
* rendering/RenderRegion.h:
* rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::positionForPoint):
* rendering/RenderReplaced.h:
* rendering/RenderText.cpp:
(WebCore::RenderText::positionForPoint):
* rendering/RenderText.h:
* rendering/svg/RenderSVGInlineText.cpp:
(WebCore::RenderSVGInlineText::positionForPoint):
* rendering/svg/RenderSVGInlineText.h:
* rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::positionForPoint):
* rendering/svg/RenderSVGText.h:

LayoutTests:
Added tests for hit-testing and painting selection gaps in the region's overflow area.

* fast/regions/selection-in-overflow-expected.html: Added.
* fast/regions/selection-in-overflow-hit-testing-expected.html: Added.
* fast/regions/selection-in-overflow-hit-testing.html: Added.
* fast/regions/selection-in-overflow.html: Added.
* fast/regions/selection-in-text-after-overflow-hit-testing-expected.html: Added.
* fast/regions/selection-in-text-after-overflow-hit-testing.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="#trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCoredomDocumentcpp">trunk/Source/WebCore/dom/Document.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingFrameSelectioncpp">trunk/Source/WebCore/editing/FrameSelection.cpp</a></li>
<li><a href="#trunkSourceWebCoreeditingVisibleUnitscpp">trunk/Source/WebCore/editing/VisibleUnits.cpp</a></li>
<li><a href="#trunkSourceWebCorepageEventHandlercpp">trunk/Source/WebCore/page/EventHandler.cpp</a></li>
<li><a href="#trunkSourceWebCorepageFramecpp">trunk/Source/WebCore/page/Frame.cpp</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="#trunkSourceWebCorerenderingRenderFileUploadControlcpp">trunk/Source/WebCore/rendering/RenderFileUploadControl.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFileUploadControlh">trunk/Source/WebCore/rendering/RenderFileUploadControl.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderInlinecpp">trunk/Source/WebCore/rendering/RenderInline.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderInlineh">trunk/Source/WebCore/rendering/RenderInline.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLineBreakcpp">trunk/Source/WebCore/rendering/RenderLineBreak.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLineBreakh">trunk/Source/WebCore/rendering/RenderLineBreak.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>
<li><a href="#trunkSourceWebCorerenderingRenderObjectcpp">trunk/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRegioncpp">trunk/Source/WebCore/rendering/RenderRegion.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderRegionh">trunk/Source/WebCore/rendering/RenderRegion.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderReplacedcpp">trunk/Source/WebCore/rendering/RenderReplaced.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderReplacedh">trunk/Source/WebCore/rendering/RenderReplaced.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderTextcpp">trunk/Source/WebCore/rendering/RenderText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderTexth">trunk/Source/WebCore/rendering/RenderText.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGInlineTextcpp">trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGInlineTexth">trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGTextcpp">trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGTexth">trunk/Source/WebCore/rendering/svg/RenderSVGText.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastregionsselectioninoverflowexpectedhtml">trunk/LayoutTests/fast/regions/selection-in-overflow-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsselectioninoverflowhittestingexpectedhtml">trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsselectioninoverflowhittestinghtml">trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsselectioninoverflowhtml">trunk/LayoutTests/fast/regions/selection-in-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsselectionintextafteroverflowhittestingexpectedhtml">trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastregionsselectionintextafteroverflowhittestinghtml">trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/LayoutTests/ChangeLog        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2014-04-25  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSS Regions] Overflow selection doesn't work properly
+        https://bugs.webkit.org/show_bug.cgi?id=130715
+
+        Reviewed by David Hyatt.
+
+        Added tests for hit-testing and painting selection gaps in the region's overflow area.
+
+        * fast/regions/selection-in-overflow-expected.html: Added.
+        * fast/regions/selection-in-overflow-hit-testing-expected.html: Added.
+        * fast/regions/selection-in-overflow-hit-testing.html: Added.
+        * fast/regions/selection-in-overflow.html: Added.
+        * fast/regions/selection-in-text-after-overflow-hit-testing-expected.html: Added.
+        * fast/regions/selection-in-text-after-overflow-hit-testing.html: Added.
+
</ins><span class="cx"> 2014-04-25  Enrique Ocaña González  &lt;eocanha@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed GTK gardening.
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectioninoverflowexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-overflow-expected.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-overflow-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-overflow-expected.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region1&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 200;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 40;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        height: 120px;
+        width: 100px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting the text that overflows the &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; properly selects and no selection artifacts are visible in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;
+        &lt;div class=&quot;content&quot;&gt;
+            &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectioninoverflowhittestingexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing-expected.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing-expected.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region2&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 20;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 60;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        height: 120px;
+        width: 100px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; has no effect on the text in the first &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;.&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;
+        &lt;div class=&quot;content&quot;&gt;
+            &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectioninoverflowhittestinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-overflow-hit-testing.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region2&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 20;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 60;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        -webkit-flow-from: flow;
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        height: 120px;
+        width: 100px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    .content {
+        -webkit-flow-into: flow;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; has no effect on the text in the first &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;.&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+
+    &lt;div class=&quot;content&quot;&gt;
+        &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectioninoverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-overflow.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-overflow.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,67 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region1&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 200;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 40;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        -webkit-flow-from: flow;
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        height: 120px;
+        width: 100px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    .content {
+        -webkit-flow-into: flow;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting the text that overflows the &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; properly selects and no selection artifacts are visible in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+
+    &lt;div class=&quot;content&quot;&gt;
+        &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectionintextafteroverflowhittestingexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing-expected.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing-expected.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region2&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 20;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 60;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        width: 100px;
+        height: 110px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; properly selects the BBBB texts and has no effect on the text in the first &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;.&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;
+        &lt;div class=&quot;content&quot;&gt;
+            &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;
+        &lt;div id=&quot;two&quot;&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsselectionintextafteroverflowhittestinghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing.html (0 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/selection-in-text-after-overflow-hit-testing.html        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -0,0 +1,68 @@
</span><ins>+&lt;script type=&quot;text/javascript&quot;&gt;
+    function onBodyLoad() {
+        if (window.testRunner) {
+            var selection = window.getSelection();
+
+            // Test selection on the overflow below the last region.
+            var region = document.getElementById(&quot;region2&quot;);
+            var startPositionX = region.offsetLeft + 20;
+            var startPositionY = region.offsetTop + 20;
+            var endPositionX = startPositionX + 20;
+            var endPositionY = startPositionY + 60;
+
+            eventSender.mouseMoveTo(startPositionX, startPositionY);
+            eventSender.mouseDown();
+            eventSender.mouseMoveTo(endPositionX, endPositionY);
+            eventSender.mouseUp();
+        }
+    }
+&lt;/script&gt;
+
+&lt;style type=&quot;text/css&quot;&gt;
+    .region {
+        -webkit-flow-from: flow;
+        border: thin solid blue;
+        margin: 5px;
+        position: relative;
+        left: 1px;
+    }
+
+    #region1
+    {
+        width: 100px;
+        height: 110px;
+    }
+
+    #region2
+    {
+        height: 200px;
+        position: relative;
+        left: 120px;
+        top: -127px;
+        width: 100px;
+    }
+
+    .content {
+        -webkit-flow-into: flow;
+    }
+
+    #one {
+        background-color: green;
+        width: 100px;
+        height: 100px;
+    }
+&lt;/style&gt;
+
+&lt;body onload=&quot;onBodyLoad()&quot;&gt;
+    &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=130715&quot;&gt;Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.&lt;/a&gt;
+    &lt;div&gt;The test passes if selecting in the second &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt; properly selects the BBBB texts and has no effect on the text in the first &lt;span style=&quot;color:blue&quot;&gt;region&lt;/span&gt;.&lt;/div&gt;
+    &lt;br/&gt;
+
+    &lt;div id=&quot;region1&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+    &lt;div id=&quot;region2&quot; class=&quot;region&quot;&gt;&lt;/div&gt;
+
+    &lt;div class=&quot;content&quot;&gt;
+        &lt;div id=&quot;one&quot;&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;AAAA&lt;br/&gt;&lt;/div&gt;
+        &lt;div id=&quot;two&quot;&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;br/&gt;BBBB&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/ChangeLog        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -1,3 +1,84 @@
</span><ins>+2014-04-25  Radu Stavila  &lt;stavila@adobe.com&gt;
+
+        [CSS Regions] Overflow selection doesn't work properly
+        https://bugs.webkit.org/show_bug.cgi?id=130715
+
+        Reviewed by David Hyatt.
+
+        When hit-testing, painting block selection gaps and searching for the node at a specific point inside a flow thread,
+        the region range of the box being checked must be validated in order to not return false positives. Otherwise, hit-testing
+        at the top of region B could hit elements that overflow the bottom of region A.
+
+        Tests: fast/regions/selection-in-overflow-hit-testing.html
+               fast/regions/selection-in-overflow.html
+               fast/regions/selection-in-text-after-overflow-hit-testing.html
+
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
+        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
+        * dom/Document.cpp:
+        (WebCore::Document::caretRangeFromPoint):
+        * editing/FrameSelection.cpp:
+        (WebCore::FrameSelection::contains):
+        * editing/VisibleUnits.cpp:
+        (WebCore::previousLinePosition):
+        (WebCore::nextLinePosition):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::selectClosestWordFromHitTestResult):
+        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
+        (WebCore::EventHandler::handleMousePressEventTripleClick):
+        (WebCore::EventHandler::handleMousePressEventSingleClick):
+        (WebCore::selectionExtentRespectingEditingBoundary):
+        (WebCore::EventHandler::updateSelectionForMouseDrag):
+        (WebCore::EventHandler::handleMouseReleaseEvent):
+        * page/Frame.cpp:
+        (WebCore::Frame::visiblePositionForPoint):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::selectionGaps):
+        (WebCore::RenderBlock::nodeAtPoint):
+        (WebCore::positionForPointRespectingEditingBoundaries):
+        (WebCore::RenderBlock::positionForPointWithInlineChildren):
+        (WebCore::isChildHitTestCandidate):
+        (WebCore::RenderBlock::positionForPoint):
+        * rendering/RenderBlock.h:
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::positionForPointWithInlineChildren):
+        (WebCore::RenderBlockFlow::positionForPoint):
+        * rendering/RenderBlockFlow.h:
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::positionForPoint):
+        * rendering/RenderBox.h:
+        * rendering/RenderFileUploadControl.cpp:
+        (WebCore::RenderFileUploadControl::positionForPoint):
+        * rendering/RenderFileUploadControl.h:
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::positionForPoint):
+        * rendering/RenderInline.h:
+        * rendering/RenderLineBreak.cpp:
+        (WebCore::RenderLineBreak::positionForPoint):
+        * rendering/RenderLineBreak.h:
+        * rendering/RenderMultiColumnSet.cpp:
+        (WebCore::RenderMultiColumnSet::positionForPoint):
+        * rendering/RenderMultiColumnSet.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::positionForPoint):
+        * rendering/RenderObject.h:
+        * rendering/RenderRegion.cpp:
+        (WebCore::RenderRegion::positionForPoint):
+        * rendering/RenderRegion.h:
+        * rendering/RenderReplaced.cpp:
+        (WebCore::RenderReplaced::positionForPoint):
+        * rendering/RenderReplaced.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::positionForPoint):
+        * rendering/RenderText.h:
+        * rendering/svg/RenderSVGInlineText.cpp:
+        (WebCore::RenderSVGInlineText::positionForPoint):
+        * rendering/svg/RenderSVGInlineText.h:
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::positionForPoint):
+        * rendering/svg/RenderSVGText.h:
+
</ins><span class="cx"> 2014-04-25  Philippe Normand  &lt;pnormand@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Iframe seamless support was removed in r163427
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -1824,7 +1824,7 @@
</span><span class="cx">     // iterate over the lines
</span><span class="cx">     // FIXME: this is wrong when lineNumber is lineCount+1,  because nextLinePosition takes you to the
</span><span class="cx">     // last offset of the last line
</span><del>-    VisiblePosition visiblePos = m_renderer-&gt;view().positionForPoint(IntPoint());
</del><ins>+    VisiblePosition visiblePos = m_renderer-&gt;view().positionForPoint(IntPoint(), nullptr);
</ins><span class="cx">     VisiblePosition savedVisiblePos;
</span><span class="cx">     while (--lineCount) {
</span><span class="cx">         savedVisiblePos = visiblePos;
</span><span class="lines">@@ -2032,7 +2032,7 @@
</span><span class="cx"> #endif
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    return innerNode-&gt;renderer()-&gt;positionForPoint(pointResult);
</del><ins>+    return innerNode-&gt;renderer()-&gt;positionForPoint(pointResult, nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // NOTE: Consider providing this utility method as AX API
</span></span></pre></div>
<a id="trunkSourceWebCoredomDocumentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Document.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Document.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/dom/Document.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -1421,7 +1421,7 @@
</span><span class="cx">     RenderObject* renderer = node-&gt;renderer();
</span><span class="cx">     if (!renderer)
</span><span class="cx">         return nullptr;
</span><del>-    VisiblePosition visiblePosition = renderer-&gt;positionForPoint(localPoint);
</del><ins>+    VisiblePosition visiblePosition = renderer-&gt;positionForPoint(localPoint, nullptr);
</ins><span class="cx">     if (visiblePosition.isNull())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingFrameSelectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/FrameSelection.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/FrameSelection.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/editing/FrameSelection.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -1585,7 +1585,7 @@
</span><span class="cx">     if (!innerNode || !innerNode-&gt;renderer())
</span><span class="cx">         return false;
</span><span class="cx">     
</span><del>-    VisiblePosition visiblePos(innerNode-&gt;renderer()-&gt;positionForPoint(result.localPoint()));
</del><ins>+    VisiblePosition visiblePos(innerNode-&gt;renderer()-&gt;positionForPoint(result.localPoint(), nullptr));
</ins><span class="cx">     if (visiblePos.isNull())
</span><span class="cx">         return false;
</span><span class="cx">         
</span></span></pre></div>
<a id="trunkSourceWebCoreeditingVisibleUnitscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/editing/VisibleUnits.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/editing/VisibleUnits.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/editing/VisibleUnits.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -973,7 +973,7 @@
</span><span class="cx">         Node* node = renderer.node();
</span><span class="cx">         if (node &amp;&amp; editingIgnoresContent(node))
</span><span class="cx">             return positionInParentBeforeNode(node);
</span><del>-        return renderer.positionForPoint(pointInLine);
</del><ins>+        return renderer.positionForPoint(pointInLine, nullptr);
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // Could not find a previous line. This means we must already be on the first line.
</span><span class="lines">@@ -1031,7 +1031,7 @@
</span><span class="cx">         Node* node = renderer.node();
</span><span class="cx">         if (node &amp;&amp; editingIgnoresContent(node))
</span><span class="cx">             return positionInParentBeforeNode(node);
</span><del>-        return renderer.positionForPoint(pointInLine);
</del><ins>+        return renderer.positionForPoint(pointInLine, nullptr);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Could not find a next line. This means we must already be on the last line.
</span></span></pre></div>
<a id="trunkSourceWebCorepageEventHandlercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/EventHandler.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/EventHandler.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/page/EventHandler.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -525,7 +525,7 @@
</span><span class="cx">     VisibleSelection newSelection;
</span><span class="cx"> 
</span><span class="cx">     if (targetNode &amp;&amp; targetNode-&gt;renderer()) {
</span><del>-        VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(result.localPoint()));
</del><ins>+        VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(result.localPoint(), nullptr));
</ins><span class="cx">         if (pos.isNotNull()) {
</span><span class="cx">             newSelection = VisibleSelection(pos);
</span><span class="cx">             newSelection.expandUsingGranularity(WordGranularity);
</span><span class="lines">@@ -556,7 +556,7 @@
</span><span class="cx">     if (targetNode &amp;&amp; targetNode-&gt;renderer() &amp;&amp; m_mouseDownMayStartSelect) {
</span><span class="cx">         VisibleSelection newSelection;
</span><span class="cx">         Element* URLElement = result.hitTestResult().URLElement();
</span><del>-        VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(result.localPoint()));
</del><ins>+        VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(result.localPoint(), nullptr));
</ins><span class="cx">         if (pos.isNotNull() &amp;&amp; pos.deepEquivalent().deprecatedNode()-&gt;isDescendantOf(URLElement))
</span><span class="cx">             newSelection = VisibleSelection::selectionFromContentsOfNode(URLElement);
</span><span class="cx"> 
</span><span class="lines">@@ -592,7 +592,7 @@
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="cx">     VisibleSelection newSelection;
</span><del>-    VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(event.localPoint()));
</del><ins>+    VisiblePosition pos(targetNode-&gt;renderer()-&gt;positionForPoint(event.localPoint(), nullptr));
</ins><span class="cx">     if (pos.isNotNull()) {
</span><span class="cx">         newSelection = VisibleSelection(pos);
</span><span class="cx">         newSelection.expandUsingGranularity(ParagraphGranularity);
</span><span class="lines">@@ -627,7 +627,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    VisiblePosition visiblePos(targetNode-&gt;renderer()-&gt;positionForPoint(event.localPoint()));
</del><ins>+    VisiblePosition visiblePos(targetNode-&gt;renderer()-&gt;positionForPoint(event.localPoint(), nullptr));
</ins><span class="cx">     if (visiblePos.isNull())
</span><span class="cx">         visiblePos = VisiblePosition(firstPositionInOrBeforeNode(targetNode), DOWNSTREAM);
</span><span class="cx">     Position pos = visiblePos.deepEquivalent();
</span><span class="lines">@@ -860,7 +860,7 @@
</span><span class="cx">         targetNode = editableElement;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return targetNode-&gt;renderer()-&gt;positionForPoint(selectionEndPoint);
</del><ins>+    return targetNode-&gt;renderer()-&gt;positionForPoint(selectionEndPoint, nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void EventHandler::updateSelectionForMouseDrag(const HitTestResult&amp; hitTestResult)
</span><span class="lines">@@ -906,11 +906,11 @@
</span><span class="cx">         newSelection.setExtent(positionAfterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
</span><span class="cx">     } else {
</span><span class="cx">         // Reset base for user select all when base is inside user-select-all area and extent &lt; base.
</span><del>-        if (rootUserSelectAllForMousePressNode &amp;&amp; comparePositions(target-&gt;renderer()-&gt;positionForPoint(hitTestResult.localPoint()), m_mousePressNode-&gt;renderer()-&gt;positionForPoint(m_dragStartPos)) &lt; 0)
</del><ins>+        if (rootUserSelectAllForMousePressNode &amp;&amp; comparePositions(target-&gt;renderer()-&gt;positionForPoint(hitTestResult.localPoint(), nullptr), m_mousePressNode-&gt;renderer()-&gt;positionForPoint(m_dragStartPos, nullptr)) &lt; 0)
</ins><span class="cx">             newSelection.setBase(positionAfterNode(rootUserSelectAllForMousePressNode).downstream(CanCrossEditingBoundary));
</span><span class="cx">         
</span><span class="cx">         Node* rootUserSelectAllForTarget = Position::rootUserSelectAllForNode(target);
</span><del>-        if (rootUserSelectAllForTarget &amp;&amp; m_mousePressNode-&gt;renderer() &amp;&amp; comparePositions(target-&gt;renderer()-&gt;positionForPoint(hitTestResult.localPoint()), m_mousePressNode-&gt;renderer()-&gt;positionForPoint(m_dragStartPos)) &lt; 0)
</del><ins>+        if (rootUserSelectAllForTarget &amp;&amp; m_mousePressNode-&gt;renderer() &amp;&amp; comparePositions(target-&gt;renderer()-&gt;positionForPoint(hitTestResult.localPoint(), nullptr), m_mousePressNode-&gt;renderer()-&gt;positionForPoint(m_dragStartPos, nullptr)) &lt; 0)
</ins><span class="cx">             newSelection.setExtent(positionBeforeNode(rootUserSelectAllForTarget).upstream(CanCrossEditingBoundary));
</span><span class="cx">         else if (rootUserSelectAllForTarget &amp;&amp; m_mousePressNode-&gt;renderer())
</span><span class="cx">             newSelection.setExtent(positionAfterNode(rootUserSelectAllForTarget).downstream(CanCrossEditingBoundary));
</span><span class="lines">@@ -982,7 +982,7 @@
</span><span class="cx">         Node* node = event.targetNode();
</span><span class="cx">         bool caretBrowsing = m_frame.settings().caretBrowsingEnabled();
</span><span class="cx">         if (node &amp;&amp; node-&gt;renderer() &amp;&amp; (caretBrowsing || node-&gt;hasEditableStyle())) {
</span><del>-            VisiblePosition pos = node-&gt;renderer()-&gt;positionForPoint(event.localPoint());
</del><ins>+            VisiblePosition pos = node-&gt;renderer()-&gt;positionForPoint(event.localPoint(), nullptr);
</ins><span class="cx">             newSelection = VisibleSelection(pos);
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageFramecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/Frame.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/Frame.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/page/Frame.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -853,7 +853,7 @@
</span><span class="cx">     auto renderer = node-&gt;renderer();
</span><span class="cx">     if (!renderer)
</span><span class="cx">         return VisiblePosition();
</span><del>-    VisiblePosition visiblePos = renderer-&gt;positionForPoint(result.localPoint());
</del><ins>+    VisiblePosition visiblePos = renderer-&gt;positionForPoint(result.localPoint(), nullptr);
</ins><span class="cx">     if (visiblePos.isNull())
</span><span class="cx">         visiblePos = firstPositionInOrBeforeNode(node);
</span><span class="cx">     return visiblePos;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -2412,6 +2412,12 @@
</span><span class="cx">         lastLogicalRight = logicalRightSelectionOffset(rootBlock, logicalHeight(), cache);
</span><span class="cx">         return result;
</span><span class="cx">     }
</span><ins>+    
+    if (paintInfo &amp;&amp; paintInfo-&gt;renderNamedFlowFragment &amp;&amp; paintInfo-&gt;paintContainer-&gt;isRenderFlowThread()) {
+        // Make sure the current object is actually flowed into the region being painted.
+        if (!toRenderFlowThread(paintInfo-&gt;paintContainer)-&gt;objectShouldPaintInFlowRegion(this, paintInfo-&gt;renderNamedFlowFragment))
+            return result;
+    }
</ins><span class="cx"> 
</span><span class="cx">     if (childrenInline())
</span><span class="cx">         result = inlineSelectionGaps(rootBlock, rootBlockPhysicalPosition, offsetFromRootBlock, lastLogicalTop, lastLogicalLeft, lastLogicalRight, cache, paintInfo);
</span><span class="lines">@@ -2947,6 +2953,15 @@
</span><span class="cx">     LayoutPoint adjustedLocation(accumulatedOffset + location());
</span><span class="cx">     LayoutSize localOffset = toLayoutSize(adjustedLocation);
</span><span class="cx"> 
</span><ins>+    // If we are now searching inside a region, make sure this element
+    // is being fragmented into this region.
+    if (locationInContainer.region()) {
+        RenderFlowThread* flowThread = flowThreadContainingBlock();
+        ASSERT(flowThread);
+        if (!flowThread-&gt;objectShouldPaintInFlowRegion(this, locationInContainer.region()))
+            return false;
+    }
+
</ins><span class="cx">     if (!isRenderView()) {
</span><span class="cx">         // Check if we need to do anything at all.
</span><span class="cx">         LayoutRect overflowBox = visualOverflowRect();
</span><span class="lines">@@ -3140,7 +3155,7 @@
</span><span class="cx">     // If this is an anonymous renderer, we just recur normally
</span><span class="cx">     Element* childElement= child.nonPseudoElement();
</span><span class="cx">     if (!childElement)
</span><del>-        return child.positionForPoint(pointInChildCoordinates);
</del><ins>+        return child.positionForPoint(pointInChildCoordinates, nullptr);
</ins><span class="cx"> 
</span><span class="cx">     // Otherwise, first make sure that the editability of the parent and child agree.
</span><span class="cx">     // If they don't agree, then we return a visible position just before or after the child
</span><span class="lines">@@ -3150,7 +3165,7 @@
</span><span class="cx"> 
</span><span class="cx">     // If we can't find an ancestor to check editability on, or editability is unchanged, we recur like normal
</span><span class="cx">     if (isEditingBoundary(ancestor, child))
</span><del>-        return child.positionForPoint(pointInChildCoordinates);
</del><ins>+        return child.positionForPoint(pointInChildCoordinates, nullptr);
</ins><span class="cx">     
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     // On iOS we want to constrain VisiblePositions to the editable region closest to the input position, so
</span><span class="lines">@@ -3169,7 +3184,7 @@
</span><span class="cx">     return ancestor-&gt;createVisiblePosition(childElement-&gt;nodeIndex() + 1, UPSTREAM);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderBlock::positionForPointWithInlineChildren(const LayoutPoint&amp;)
</del><ins>+VisiblePosition RenderBlock::positionForPointWithInlineChildren(const LayoutPoint&amp;, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx">     return VisiblePosition();
</span><span class="lines">@@ -3181,7 +3196,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Valid candidates in a FlowThread must be rendered by the region.
</span><del>-static inline bool isChildHitTestCandidate(const RenderBox&amp; box, RenderRegion* region, const LayoutPoint&amp; point)
</del><ins>+static inline bool isChildHitTestCandidate(const RenderBox&amp; box, const RenderRegion* region, const LayoutPoint&amp; point)
</ins><span class="cx"> {
</span><span class="cx">     if (!isChildHitTestCandidate(box))
</span><span class="cx">         return false;
</span><span class="lines">@@ -3191,10 +3206,10 @@
</span><span class="cx">     return block.regionAtBlockOffset(point.y()) == region;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderBlock::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderBlock::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     if (isTable())
</span><del>-        return RenderBox::positionForPoint(point);
</del><ins>+        return RenderBox::positionForPoint(point, region);
</ins><span class="cx"> 
</span><span class="cx">     if (isReplaced()) {
</span><span class="cx">         // FIXME: This seems wrong when the object's writing-mode doesn't match the line's writing-mode.
</span><span class="lines">@@ -3214,10 +3229,13 @@
</span><span class="cx">         pointInLogicalContents = pointInLogicalContents.transposedPoint();
</span><span class="cx"> 
</span><span class="cx">     if (childrenInline())
</span><del>-        return positionForPointWithInlineChildren(pointInLogicalContents);
</del><ins>+        return positionForPointWithInlineChildren(pointInLogicalContents, region);
</ins><span class="cx"> 
</span><del>-    RenderRegion* region = regionAtBlockOffset(pointInLogicalContents.y());
</del><span class="cx">     RenderBox* lastCandidateBox = lastChildBox();
</span><ins>+
+    if (!region)
+        region = regionAtBlockOffset(pointInLogicalContents.y());
+
</ins><span class="cx">     while (lastCandidateBox &amp;&amp; !isChildHitTestCandidate(*lastCandidateBox, region, pointInLogicalContents))
</span><span class="cx">         lastCandidateBox = lastCandidateBox-&gt;previousSiblingBox();
</span><span class="cx"> 
</span><span class="lines">@@ -3239,7 +3257,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // We only get here if there are no hit test candidate children below the click.
</span><del>-    return RenderBox::positionForPoint(point);
</del><ins>+    return RenderBox::positionForPoint(point, region);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderBlock::offsetForContents(LayoutPoint&amp; offset) const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBlock.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -183,7 +183,7 @@
</span><span class="cx"> 
</span><span class="cx">     LayoutUnit textIndentOffset() const;
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx">     
</span><span class="cx">     // Block flows subclass availableWidth to handle multi column layout (shrinking the width available to children when laying out.)
</span><span class="cx">     virtual LayoutUnit availableLogicalWidth() const override final;
</span><span class="lines">@@ -543,7 +543,7 @@
</span><span class="cx">     void adjustPointToColumnContents(LayoutPoint&amp;) const;
</span><span class="cx">     
</span><span class="cx">     // FIXME-BLOCKFLOW: Remove virtualizaion when all callers have moved to RenderBlockFlow
</span><del>-    virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint&amp;);
</del><ins>+    virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint&amp;, const RenderRegion*);
</ins><span class="cx"> 
</span><span class="cx">     virtual void computeColumnCountAndWidth();
</span><span class="cx">     void makeChildrenAnonymousColumnBlocks(RenderObject* beforeChild, RenderBlock* newBlockBox, RenderObject* newChild);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -3092,7 +3092,7 @@
</span><span class="cx">     return createLegacyEditingPosition(box-&gt;renderer().nonPseudoNode(), start ? textBox-&gt;start() : textBox-&gt;start() + textBox-&gt;len());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderBlockFlow::positionForPointWithInlineChildren(const LayoutPoint&amp; pointInLogicalContents)
</del><ins>+VisiblePosition RenderBlockFlow::positionForPointWithInlineChildren(const LayoutPoint&amp; pointInLogicalContents, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(childrenInline());
</span><span class="cx"> 
</span><span class="lines">@@ -3109,6 +3109,9 @@
</span><span class="cx">     RootInlineBox* firstRootBoxWithChildren = 0;
</span><span class="cx">     RootInlineBox* lastRootBoxWithChildren = 0;
</span><span class="cx">     for (RootInlineBox* root = firstRootBox(); root; root = root-&gt;nextRootBox()) {
</span><ins>+        if (region &amp;&amp; root-&gt;containingRegion() != region)
+            continue;
+
</ins><span class="cx">         if (!root-&gt;firstLeafChild())
</span><span class="cx">             continue;
</span><span class="cx">         if (!firstRootBoxWithChildren)
</span><span class="lines">@@ -3165,7 +3168,7 @@
</span><span class="cx">             point = point.transposedPoint();
</span><span class="cx">         if (closestBox-&gt;renderer().isReplaced())
</span><span class="cx">             return positionForPointRespectingEditingBoundaries(*this, toRenderBox(closestBox-&gt;renderer()), point);
</span><del>-        return closestBox-&gt;renderer().positionForPoint(point);
</del><ins>+        return closestBox-&gt;renderer().positionForPoint(point, nullptr);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (lastRootBoxWithChildren) {
</span><span class="lines">@@ -3182,11 +3185,11 @@
</span><span class="cx">     return createVisiblePosition(0, DOWNSTREAM);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderBlockFlow::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderBlockFlow::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     if (auto fragment = renderNamedFlowFragment())
</span><del>-        return fragment-&gt;positionForPoint(point);
-    return RenderBlock::positionForPoint(point);
</del><ins>+        return fragment-&gt;positionForPoint(point, region);
+    return RenderBlock::positionForPoint(point, region);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockFlowh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlockFlow.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBlockFlow.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -285,7 +285,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void deleteLines() override;
</span><span class="cx">     virtual void computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats = false) override;
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     void removeFloatingObjects();
</span><span class="cx">     void markAllDescendantsWithFloatsForLayout(RenderBox* floatToRemove = nullptr, bool inLayout = true);
</span><span class="lines">@@ -510,7 +510,7 @@
</span><span class="cx">         LayoutUnit&amp; lastLogicalTop, LayoutUnit&amp; lastLogicalLeft, LayoutUnit&amp; lastLogicalRight, const LogicalSelectionOffsetCaches&amp;, const PaintInfo*) override;
</span><span class="cx">     
</span><span class="cx">     Position positionForBox(InlineBox*, bool start = true) const;
</span><del>-    virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint&amp; pointInLogicalContents) override;
</del><ins>+    virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint&amp; pointInLogicalContents, const RenderRegion*) override;
</ins><span class="cx">     virtual void addFocusRingRectsForInlineChildren(Vector&lt;IntRect&gt;&amp; rects, const LayoutPoint&amp; additionalOffset, const RenderLayerModelObject*) override;
</span><span class="cx"> 
</span><span class="cx"> // FIXME-BLOCKFLOW: These methods have implementations in
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -4129,7 +4129,7 @@
</span><span class="cx">     return rect;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderBox::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderBox::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     // no children...return this render object's element, if there is one, and offset 0
</span><span class="cx">     if (!firstChild())
</span><span class="lines">@@ -4156,6 +4156,13 @@
</span><span class="cx">     for (RenderObject* renderObject = firstChild(); renderObject; renderObject = renderObject-&gt;nextSibling()) {
</span><span class="cx">         if (!renderObject-&gt;isBox())
</span><span class="cx">             continue;
</span><ins>+
+        if (isRenderFlowThread()) {
+            ASSERT(region);
+            if (!toRenderFlowThread(this)-&gt;objectShouldPaintInFlowRegion(renderObject, region))
+                continue;
+        }
+
</ins><span class="cx">         RenderBox* renderer = toRenderBox(renderObject);
</span><span class="cx"> 
</span><span class="cx">         if ((!renderer-&gt;firstChild() &amp;&amp; !renderer-&gt;isInline() &amp;&amp; !renderer-&gt;isRenderBlockFlow() )
</span><span class="lines">@@ -4169,8 +4176,8 @@
</span><span class="cx">         
</span><span class="cx">         if (point.x() &lt;= right &amp;&amp; point.x() &gt;= left &amp;&amp; point.y() &lt;= top &amp;&amp; point.y() &gt;= bottom) {
</span><span class="cx">             if (renderer-&gt;isTableRow())
</span><del>-                return renderer-&gt;positionForPoint(point + adjustedPoint - renderer-&gt;locationOffset());
-            return renderer-&gt;positionForPoint(point - renderer-&gt;locationOffset());
</del><ins>+                return renderer-&gt;positionForPoint(point + adjustedPoint - renderer-&gt;locationOffset(), region);
+            return renderer-&gt;positionForPoint(point - renderer-&gt;locationOffset(), region);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Find the distance from (x, y) to the box.  Split the space around the box into 8 pieces
</span><span class="lines">@@ -4207,7 +4214,7 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     if (closestRenderer)
</span><del>-        return closestRenderer-&gt;positionForPoint(adjustedPoint - closestRenderer-&gt;locationOffset());
</del><ins>+        return closestRenderer-&gt;positionForPoint(adjustedPoint - closestRenderer-&gt;locationOffset(), region);
</ins><span class="cx">     
</span><span class="cx">     return createVisiblePosition(firstPositionInOrBeforeNode(nonPseudoElement()));
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderBox.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -512,7 +512,7 @@
</span><span class="cx"> 
</span><span class="cx">     LayoutRect maskClipRect();
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     RenderBlockFlow* outermostBlockContainingFloatingObject();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFileUploadControlcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFileUploadControl.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFileUploadControl.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderFileUploadControl.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -246,7 +246,7 @@
</span><span class="cx">     setPreferredLogicalWidthsDirty(false);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderFileUploadControl::positionForPoint(const LayoutPoint&amp;)
</del><ins>+VisiblePosition RenderFileUploadControl::positionForPoint(const LayoutPoint&amp;, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     return VisiblePosition();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFileUploadControlh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFileUploadControl.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFileUploadControl.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderFileUploadControl.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -57,7 +57,7 @@
</span><span class="cx"> 
</span><span class="cx">     int maxFilenameWidth() const;
</span><span class="cx">     
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     HTMLInputElement* uploadButton() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderInlinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderInline.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -845,14 +845,14 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderInline::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderInline::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: Does not deal with relative or sticky positioned inlines (should it?)
</span><span class="cx">     RenderBlock* cb = containingBlock();
</span><span class="cx">     if (firstLineBox()) {
</span><span class="cx">         // This inline actually has a line box.  We must have clicked in the border/padding of one of these boxes.  We
</span><span class="cx">         // should try to find a result by asking our containing block.
</span><del>-        return cb-&gt;positionForPoint(point);
</del><ins>+        return cb-&gt;positionForPoint(point, region);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Translate the coords from the pre-anonymous block to the post-anonymous block.
</span><span class="lines">@@ -861,11 +861,11 @@
</span><span class="cx">     while (c) {
</span><span class="cx">         RenderBox* contBlock = c-&gt;isInline() ? c-&gt;containingBlock() : toRenderBlock(c);
</span><span class="cx">         if (c-&gt;isInline() || c-&gt;firstChild())
</span><del>-            return c-&gt;positionForPoint(parentBlockPoint - contBlock-&gt;locationOffset());
</del><ins>+            return c-&gt;positionForPoint(parentBlockPoint - contBlock-&gt;locationOffset(), region);
</ins><span class="cx">         c = toRenderBlock(c)-&gt;inlineElementContinuation();
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    return RenderBoxModelObject::positionForPoint(point);
</del><ins>+    return RenderBoxModelObject::positionForPoint(point, region);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderInlineh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderInline.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderInline.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderInline.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -144,7 +144,7 @@
</span><span class="cx">     virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&amp;, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const override;
</span><span class="cx">     virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&amp;) const override;
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override final;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override final;
</ins><span class="cx"> 
</span><span class="cx">     virtual LayoutRect frameRectForStickyPositioning() const override final { return linesBoundingBox(); }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLineBreakcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLineBreak.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLineBreak.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderLineBreak.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderLineBreak::positionForPoint(const LayoutPoint&amp;)
</del><ins>+VisiblePosition RenderLineBreak::positionForPoint(const LayoutPoint&amp;, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     return createVisiblePosition(0, DOWNSTREAM);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLineBreakh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLineBreak.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLineBreak.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderLineBreak.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx">     virtual bool canHaveChildren() const override { return false; }
</span><span class="cx">     virtual void paint(PaintInfo&amp;, const LayoutPoint&amp;) override final { }
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx">     virtual int caretMinOffset() const override;
</span><span class="cx">     virtual int caretMaxOffset() const override;
</span><span class="cx">     virtual bool canBeSelectionLeaf() const override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnSetcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -867,7 +867,7 @@
</span><span class="cx">         addVisualOverflow(lastRect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderMultiColumnSet::positionForPoint(const LayoutPoint&amp; physicalPoint)
</del><ins>+VisiblePosition RenderMultiColumnSet::positionForPoint(const LayoutPoint&amp; physicalPoint, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     // Determine which columns we intersect.
</span><span class="cx">     LayoutUnit colGap = columnGap();
</span><span class="lines">@@ -914,7 +914,7 @@
</span><span class="cx">                 LayoutRect portion = flowThreadPortionRect();
</span><span class="cx">                 flipForWritingMode(portion);
</span><span class="cx">                 point.move(isHorizontalWritingMode() ? LayoutUnit() : portion.x(), isHorizontalWritingMode() ? portion.y() : LayoutUnit());
</span><del>-                return multiColumnFlowThread()-&gt;positionForPoint(point);
</del><ins>+                return multiColumnFlowThread()-&gt;positionForPoint(point, this);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             // Move to the next position.
</span><span class="lines">@@ -951,7 +951,7 @@
</span><span class="cx">                 flipForWritingMode(portion);
</span><span class="cx">                 point.move(isHorizontalWritingMode() ? LayoutUnit() : portion.x(), isHorizontalWritingMode() ? portion.y() : LayoutUnit());
</span><span class="cx">                 
</span><del>-                return multiColumnFlowThread()-&gt;positionForPoint(point);
</del><ins>+                return multiColumnFlowThread()-&gt;positionForPoint(point, this);
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             // Move to the next position.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderMultiColumnSeth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderMultiColumnSet.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderMultiColumnSet.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnSet.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual void adjustRegionBoundsFromFlowThreadPortionRect(const LayoutPoint&amp; layerOffset, LayoutRect&amp; regionBounds) override;
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual const char* renderName() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -2001,7 +2001,7 @@
</span><span class="cx">     delete this;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderObject::positionForPoint(const LayoutPoint&amp;)
</del><ins>+VisiblePosition RenderObject::positionForPoint(const LayoutPoint&amp;, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     return createVisiblePosition(caretMinOffset(), DOWNSTREAM);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -59,6 +59,7 @@
</span><span class="cx"> class RenderLayer;
</span><span class="cx"> class RenderLayerModelObject;
</span><span class="cx"> class RenderNamedFlowThread;
</span><ins>+class RenderRegion;
</ins><span class="cx"> class RenderTheme;
</span><span class="cx"> class SelectionSubtreeRoot;
</span><span class="cx"> class TransformState;
</span><span class="lines">@@ -648,7 +649,7 @@
</span><span class="cx">     virtual void updateHitTestResult(HitTestResult&amp;, const LayoutPoint&amp;);
</span><span class="cx">     virtual bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset, HitTestAction);
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;);
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*);
</ins><span class="cx">     VisiblePosition createVisiblePosition(int offset, EAffinity) const;
</span><span class="cx">     VisiblePosition createVisiblePosition(const Position&amp;) const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRegioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRegion.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRegion.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderRegion.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -104,12 +104,12 @@
</span><span class="cx">     return isHorizontalWritingMode() ? pointInThread : pointInThread.transposedPoint();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderRegion::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderRegion::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     if (!isValid() || !m_flowThread-&gt;firstChild()) // checking for empty region blocks.
</span><del>-        return RenderBlock::positionForPoint(point);
</del><ins>+        return RenderBlock::positionForPoint(point, region);
</ins><span class="cx"> 
</span><del>-    return m_flowThread-&gt;positionForPoint(mapRegionPointIntoFlowThreadCoordinates(point));
</del><ins>+    return m_flowThread-&gt;positionForPoint(mapRegionPointIntoFlowThreadCoordinates(point), this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> LayoutUnit RenderRegion::pageLogicalWidth() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderRegionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderRegion.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderRegion.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderRegion.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -124,7 +124,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool canHaveChildren() const override { return false; }
</span><span class="cx">     virtual bool canHaveGeneratedChildren() const override { return true; }
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     virtual bool hasAutoLogicalHeight() const { return false; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderReplacedcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderReplaced.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderReplaced.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderReplaced.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -517,7 +517,7 @@
</span><span class="cx">     setPreferredLogicalWidthsDirty(false);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderReplaced::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderReplaced::positionForPoint(const LayoutPoint&amp; point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     // FIXME: This code is buggy if the replaced element is relative positioned.
</span><span class="cx">     InlineBox* box = inlineBoxWrapper();
</span><span class="lines">@@ -541,7 +541,7 @@
</span><span class="cx">         return createVisiblePosition(1, DOWNSTREAM);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return RenderBox::positionForPoint(point);
</del><ins>+    return RenderBox::positionForPoint(point, region);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> LayoutRect RenderReplaced::selectionRectForRepaint(const RenderLayerModelObject* repaintContainer, bool clipToVisibleContent)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderReplacedh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderReplaced.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderReplaced.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderReplaced.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const override;
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override final;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override final;
</ins><span class="cx">     
</span><span class="cx">     virtual bool canBeSelectionLeaf() const override { return true; }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderText.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderText.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderText.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -431,7 +431,7 @@
</span><span class="cx">     return m_lineBoxes.absoluteQuadsForRange(*this, start, end, useSelectionHeight, wasFixed);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderText::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderText::positionForPoint(const LayoutPoint&amp; point, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     ensureLineBoxes();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderTexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderText.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderText.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/RenderText.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;FloatQuad&gt; absoluteQuadsClippedToEllipsis() const;
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx"> 
</span><span class="cx">     bool is8Bit() const { return m_text.impl()-&gt;is8Bit(); }
</span><span class="cx">     const LChar* characters8() const { return m_text.impl()-&gt;characters8(); }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGInlineTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -166,7 +166,7 @@
</span><span class="cx">     return it-&gt;value.x != SVGTextLayoutAttributes::emptyValue() || it-&gt;value.y != SVGTextLayoutAttributes::emptyValue();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderSVGInlineText::positionForPoint(const LayoutPoint&amp; point)
</del><ins>+VisiblePosition RenderSVGInlineText::positionForPoint(const LayoutPoint&amp; point, const RenderRegion*)
</ins><span class="cx"> {
</span><span class="cx">     if (!firstTextBox() || !textLength())
</span><span class="cx">         return createVisiblePosition(0, DOWNSTREAM);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGInlineTexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInlineText.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool isSVGInlineText() const override { return true; }
</span><span class="cx"> 
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;) override;
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*) override;
</ins><span class="cx">     virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* extraWidthToEndOfLine = 0) override;
</span><span class="cx">     virtual IntRect linesBoundingBox() const override;
</span><span class="cx">     virtual std::unique_ptr&lt;InlineTextBox&gt; createTextBox() override;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -465,7 +465,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-VisiblePosition RenderSVGText::positionForPoint(const LayoutPoint&amp; pointInContents)
</del><ins>+VisiblePosition RenderSVGText::positionForPoint(const LayoutPoint&amp; pointInContents, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx">     RootInlineBox* rootBox = firstRootBox();
</span><span class="cx">     if (!rootBox)
</span><span class="lines">@@ -479,7 +479,7 @@
</span><span class="cx">     if (!closestBox)
</span><span class="cx">         return createVisiblePosition(0, DOWNSTREAM);
</span><span class="cx"> 
</span><del>-    return closestBox-&gt;renderer().positionForPoint(LayoutPoint(pointInContents.x(), closestBox-&gt;y()));
</del><ins>+    return closestBox-&gt;renderer().positionForPoint(LayoutPoint(pointInContents.x(), closestBox-&gt;y()), region);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderSVGText::absoluteQuads(Vector&lt;FloatQuad&gt;&amp; quads, bool* wasFixed) const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGTexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (167802 => 167803)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h        2014-04-25 13:35:26 UTC (rev 167802)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h        2014-04-25 13:56:12 UTC (rev 167803)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx">     virtual void paint(PaintInfo&amp;, const LayoutPoint&amp;);
</span><span class="cx">     virtual bool nodeAtPoint(const HitTestRequest&amp;, HitTestResult&amp;, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset, HitTestAction) override;
</span><span class="cx">     virtual bool nodeAtFloatPoint(const HitTestRequest&amp;, HitTestResult&amp;, const FloatPoint&amp; pointInParent, HitTestAction);
</span><del>-    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;);
</del><ins>+    virtual VisiblePosition positionForPoint(const LayoutPoint&amp;, const RenderRegion*);
</ins><span class="cx"> 
</span><span class="cx">     virtual bool requiresLayer() const { return false; }
</span><span class="cx">     virtual void layout();
</span></span></pre>
</div>
</div>

</body>
</html>