<!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 <stavila@adobe.com>
+
+ [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 <eocanha@igalia.com>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region1");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting the text that overflows the <span style="color:blue">region</span> properly selects and no selection artifacts are visible in the second <span style="color:blue">region</span></div>
+ <br/>
+
+ <div id="region1" class="region">
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ </div>
+ </div>
+
+ <div id="region2" class="region"></div>
+</body>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region2");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting in the second <span style="color:blue">region</span> has no effect on the text in the first <span style="color:blue">region</span>.</div>
+ <br/>
+
+ <div id="region1" class="region">
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ </div>
+ </div>
+
+ <div id="region2" class="region"></div>
+</body>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region2");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting in the second <span style="color:blue">region</span> has no effect on the text in the first <span style="color:blue">region</span>.</div>
+ <br/>
+
+ <div id="region1" class="region"></div>
+ <div id="region2" class="region"></div>
+
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ </div>
+</body>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region1");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting the text that overflows the <span style="color:blue">region</span> properly selects and no selection artifacts are visible in the second <span style="color:blue">region</span></div>
+ <br/>
+
+ <div id="region1" class="region"></div>
+ <div id="region2" class="region"></div>
+
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ </div>
+</body>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region2");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting in the second <span style="color:blue">region</span> properly selects the BBBB texts and has no effect on the text in the first <span style="color:blue">region</span>.</div>
+ <br/>
+
+ <div id="region1" class="region">
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ </div>
+ </div>
+
+ <div id="region2" class="region">
+ <div id="two">BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB</div>
+ </div>
+</body>
</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>+<script type="text/javascript">
+ function onBodyLoad() {
+ if (window.testRunner) {
+ var selection = window.getSelection();
+
+ // Test selection on the overflow below the last region.
+ var region = document.getElementById("region2");
+ 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();
+ }
+ }
+</script>
+
+<style type="text/css">
+ .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;
+ }
+</style>
+
+<body onload="onBodyLoad()">
+ <a href="https://bugs.webkit.org/show_bug.cgi?id=130715">Bug 130715 - Test that overflow content for the first and last regions in the chain is correctly displayed in different situations.</a>
+ <div>The test passes if selecting in the second <span style="color:blue">region</span> properly selects the BBBB texts and has no effect on the text in the first <span style="color:blue">region</span>.</div>
+ <br/>
+
+ <div id="region1" class="region"></div>
+ <div id="region2" class="region"></div>
+
+ <div class="content">
+ <div id="one">AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/>AAAA<br/></div>
+ <div id="two">BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB<br/>BBBB</div>
+ </div>
+</body>
</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 <stavila@adobe.com>
+
+ [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 <pnormand@igalia.com>
</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->view().positionForPoint(IntPoint());
</del><ins>+ VisiblePosition visiblePos = m_renderer->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->renderer()->positionForPoint(pointResult);
</del><ins>+ return innerNode->renderer()->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->renderer();
</span><span class="cx"> if (!renderer)
</span><span class="cx"> return nullptr;
</span><del>- VisiblePosition visiblePosition = renderer->positionForPoint(localPoint);
</del><ins>+ VisiblePosition visiblePosition = renderer->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->renderer())
</span><span class="cx"> return false;
</span><span class="cx">
</span><del>- VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(result.localPoint()));
</del><ins>+ VisiblePosition visiblePos(innerNode->renderer()->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 && 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 && 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 && targetNode->renderer()) {
</span><del>- VisiblePosition pos(targetNode->renderer()->positionForPoint(result.localPoint()));
</del><ins>+ VisiblePosition pos(targetNode->renderer()->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 && targetNode->renderer() && m_mouseDownMayStartSelect) {
</span><span class="cx"> VisibleSelection newSelection;
</span><span class="cx"> Element* URLElement = result.hitTestResult().URLElement();
</span><del>- VisiblePosition pos(targetNode->renderer()->positionForPoint(result.localPoint()));
</del><ins>+ VisiblePosition pos(targetNode->renderer()->positionForPoint(result.localPoint(), nullptr));
</ins><span class="cx"> if (pos.isNotNull() && pos.deepEquivalent().deprecatedNode()->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->renderer()->positionForPoint(event.localPoint()));
</del><ins>+ VisiblePosition pos(targetNode->renderer()->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->renderer()->positionForPoint(event.localPoint()));
</del><ins>+ VisiblePosition visiblePos(targetNode->renderer()->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->renderer()->positionForPoint(selectionEndPoint);
</del><ins>+ return targetNode->renderer()->positionForPoint(selectionEndPoint, nullptr);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void EventHandler::updateSelectionForMouseDrag(const HitTestResult& 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 < base.
</span><del>- if (rootUserSelectAllForMousePressNode && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
</del><ins>+ if (rootUserSelectAllForMousePressNode && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint(), nullptr), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos, nullptr)) < 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 && m_mousePressNode->renderer() && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint()), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos)) < 0)
</del><ins>+ if (rootUserSelectAllForTarget && m_mousePressNode->renderer() && comparePositions(target->renderer()->positionForPoint(hitTestResult.localPoint(), nullptr), m_mousePressNode->renderer()->positionForPoint(m_dragStartPos, nullptr)) < 0)
</ins><span class="cx"> newSelection.setExtent(positionBeforeNode(rootUserSelectAllForTarget).upstream(CanCrossEditingBoundary));
</span><span class="cx"> else if (rootUserSelectAllForTarget && m_mousePressNode->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 && node->renderer() && (caretBrowsing || node->hasEditableStyle())) {
</span><del>- VisiblePosition pos = node->renderer()->positionForPoint(event.localPoint());
</del><ins>+ VisiblePosition pos = node->renderer()->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->renderer();
</span><span class="cx"> if (!renderer)
</span><span class="cx"> return VisiblePosition();
</span><del>- VisiblePosition visiblePos = renderer->positionForPoint(result.localPoint());
</del><ins>+ VisiblePosition visiblePos = renderer->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 && paintInfo->renderNamedFlowFragment && paintInfo->paintContainer->isRenderFlowThread()) {
+ // Make sure the current object is actually flowed into the region being painted.
+ if (!toRenderFlowThread(paintInfo->paintContainer)->objectShouldPaintInFlowRegion(this, paintInfo->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->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->createVisiblePosition(childElement->nodeIndex() + 1, UPSTREAM);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-VisiblePosition RenderBlock::positionForPointWithInlineChildren(const LayoutPoint&)
</del><ins>+VisiblePosition RenderBlock::positionForPointWithInlineChildren(const LayoutPoint&, 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& box, RenderRegion* region, const LayoutPoint& point)
</del><ins>+static inline bool isChildHitTestCandidate(const RenderBox& box, const RenderRegion* region, const LayoutPoint& 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& point)
</del><ins>+VisiblePosition RenderBlock::positionForPoint(const LayoutPoint& 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 && !isChildHitTestCandidate(*lastCandidateBox, region, pointInLogicalContents))
</span><span class="cx"> lastCandidateBox = lastCandidateBox->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& 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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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&) 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&);
</del><ins>+ virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint&, 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->renderer().nonPseudoNode(), start ? textBox->start() : textBox->start() + textBox->len());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-VisiblePosition RenderBlockFlow::positionForPointWithInlineChildren(const LayoutPoint& pointInLogicalContents)
</del><ins>+VisiblePosition RenderBlockFlow::positionForPointWithInlineChildren(const LayoutPoint& 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->nextRootBox()) {
</span><ins>+ if (region && root->containingRegion() != region)
+ continue;
+
</ins><span class="cx"> if (!root->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->renderer().isReplaced())
</span><span class="cx"> return positionForPointRespectingEditingBoundaries(*this, toRenderBox(closestBox->renderer()), point);
</span><del>- return closestBox->renderer().positionForPoint(point);
</del><ins>+ return closestBox->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& point)
</del><ins>+VisiblePosition RenderBlockFlow::positionForPoint(const LayoutPoint& point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx"> if (auto fragment = renderNamedFlowFragment())
</span><del>- return fragment->positionForPoint(point);
- return RenderBlock::positionForPoint(point);
</del><ins>+ return fragment->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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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& lastLogicalTop, LayoutUnit& lastLogicalLeft, LayoutUnit& lastLogicalRight, const LogicalSelectionOffsetCaches&, 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& pointInLogicalContents) override;
</del><ins>+ virtual VisiblePosition positionForPointWithInlineChildren(const LayoutPoint& pointInLogicalContents, const RenderRegion*) override;
</ins><span class="cx"> virtual void addFocusRingRectsForInlineChildren(Vector<IntRect>& rects, const LayoutPoint& 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& point)
</del><ins>+VisiblePosition RenderBox::positionForPoint(const LayoutPoint& 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->nextSibling()) {
</span><span class="cx"> if (!renderObject->isBox())
</span><span class="cx"> continue;
</span><ins>+
+ if (isRenderFlowThread()) {
+ ASSERT(region);
+ if (!toRenderFlowThread(this)->objectShouldPaintInFlowRegion(renderObject, region))
+ continue;
+ }
+
</ins><span class="cx"> RenderBox* renderer = toRenderBox(renderObject);
</span><span class="cx">
</span><span class="cx"> if ((!renderer->firstChild() && !renderer->isInline() && !renderer->isRenderBlockFlow() )
</span><span class="lines">@@ -4169,8 +4176,8 @@
</span><span class="cx">
</span><span class="cx"> if (point.x() <= right && point.x() >= left && point.y() <= top && point.y() >= bottom) {
</span><span class="cx"> if (renderer->isTableRow())
</span><del>- return renderer->positionForPoint(point + adjustedPoint - renderer->locationOffset());
- return renderer->positionForPoint(point - renderer->locationOffset());
</del><ins>+ return renderer->positionForPoint(point + adjustedPoint - renderer->locationOffset(), region);
+ return renderer->positionForPoint(point - renderer->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->positionForPoint(adjustedPoint - closestRenderer->locationOffset());
</del><ins>+ return closestRenderer->positionForPoint(adjustedPoint - closestRenderer->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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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&)
</del><ins>+VisiblePosition RenderFileUploadControl::positionForPoint(const LayoutPoint&, 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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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& point)
</del><ins>+VisiblePosition RenderInline::positionForPoint(const LayoutPoint& 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->positionForPoint(point);
</del><ins>+ return cb->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->isInline() ? c->containingBlock() : toRenderBlock(c);
</span><span class="cx"> if (c->isInline() || c->firstChild())
</span><del>- return c->positionForPoint(parentBlockPoint - contBlock->locationOffset());
</del><ins>+ return c->positionForPoint(parentBlockPoint - contBlock->locationOffset(), region);
</ins><span class="cx"> c = toRenderBlock(c)->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&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const override;
</span><span class="cx"> virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
</span><span class="cx">
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&) override final;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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&)
</del><ins>+VisiblePosition RenderLineBreak::positionForPoint(const LayoutPoint&, 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&, const LayoutPoint&) override final { }
</span><span class="cx">
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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& physicalPoint)
</del><ins>+VisiblePosition RenderMultiColumnSet::positionForPoint(const LayoutPoint& 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()->positionForPoint(point);
</del><ins>+ return multiColumnFlowThread()->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()->positionForPoint(point);
</del><ins>+ return multiColumnFlowThread()->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& layerOffset, LayoutRect& regionBounds) override;
</span><span class="cx">
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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&)
</del><ins>+VisiblePosition RenderObject::positionForPoint(const LayoutPoint&, 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&, const LayoutPoint&);
</span><span class="cx"> virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction);
</span><span class="cx">
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&);
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, const RenderRegion*);
</ins><span class="cx"> VisiblePosition createVisiblePosition(int offset, EAffinity) const;
</span><span class="cx"> VisiblePosition createVisiblePosition(const Position&) 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& point)
</del><ins>+VisiblePosition RenderRegion::positionForPoint(const LayoutPoint& point, const RenderRegion* region)
</ins><span class="cx"> {
</span><span class="cx"> if (!isValid() || !m_flowThread->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->positionForPoint(mapRegionPointIntoFlowThreadCoordinates(point));
</del><ins>+ return m_flowThread->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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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& point)
</del><ins>+VisiblePosition RenderReplaced::positionForPoint(const LayoutPoint& 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&) override final;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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& point)
</del><ins>+VisiblePosition RenderText::positionForPoint(const LayoutPoint& 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<FloatQuad> absoluteQuadsClippedToEllipsis() const;
</span><span class="cx">
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, const RenderRegion*) override;
</ins><span class="cx">
</span><span class="cx"> bool is8Bit() const { return m_text.impl()->is8Bit(); }
</span><span class="cx"> const LChar* characters8() const { return m_text.impl()->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->value.x != SVGTextLayoutAttributes::emptyValue() || it->value.y != SVGTextLayoutAttributes::emptyValue();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-VisiblePosition RenderSVGInlineText::positionForPoint(const LayoutPoint& point)
</del><ins>+VisiblePosition RenderSVGInlineText::positionForPoint(const LayoutPoint& 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&) override;
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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<InlineTextBox> 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& pointInContents)
</del><ins>+VisiblePosition RenderSVGText::positionForPoint(const LayoutPoint& 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->renderer().positionForPoint(LayoutPoint(pointInContents.x(), closestBox->y()));
</del><ins>+ return closestBox->renderer().positionForPoint(LayoutPoint(pointInContents.x(), closestBox->y()), region);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RenderSVGText::absoluteQuads(Vector<FloatQuad>& 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&, const LayoutPoint&);
</span><span class="cx"> virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
</span><span class="cx"> virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction);
</span><del>- virtual VisiblePosition positionForPoint(const LayoutPoint&);
</del><ins>+ virtual VisiblePosition positionForPoint(const LayoutPoint&, 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>