Focus event dispatched in iframe causes parent document to scroll incorrectly
authorsimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Jun 2016 20:57:29 +0000 (20:57 +0000)
committersimon.fraser@apple.com <simon.fraser@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 21 Jun 2016 20:57:29 +0000 (20:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=158629
rdar://problem/26521616

Reviewed by Tim Horton.
Source/WebCore:

When focussing elements in iframes, the page could scroll to an incorrect location.
This happened because code in Element::focus() tried to disable scrolling on focus,
but did so only for the current frame, so ancestor frames got programmatically scrolled.
On iOS we handle the scrolling in the UI process, so never want the web process to
do programmatic scrolling.

Fix by changing the focus and cache restore code to use SelectionRevealMode::DoNotReveal,
rather than manually prohibiting frame scrolling. Pass SelectionRevealMode through various callers,
and use RevealUpToMainFrame for iOS, allowing the UI process to do the zoomToRect: for the main frame.

Tests: fast/forms/ios/focus-input-in-iframe.html
       fast/forms/ios/programmatic-focus-input-in-iframe.html

* dom/Document.h:
* dom/Element.cpp:
(WebCore::Element::scrollIntoView):
(WebCore::Element::scrollIntoViewIfNeeded):
(WebCore::Element::scrollIntoViewIfNotVisible):
(WebCore::Element::focus):
(WebCore::Element::updateFocusAppearance):
* dom/Element.h:
* editing/Editor.cpp:
(WebCore::Editor::insertTextWithoutSendingTextEvent):
(WebCore::Editor::revealSelectionAfterEditingOperation):
(WebCore::Editor::findStringAndScrollToVisible):
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::updateAndRevealSelection):
(WebCore::FrameSelection::revealSelection):
(WebCore::FrameSelection::FrameSelection): Deleted.
* editing/FrameSelection.h:
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::updateFocusAppearance):
* html/HTMLTextAreaElement.cpp:
(WebCore::HTMLTextAreaElement::updateFocusAppearance):
* page/ContextMenuController.cpp:
(WebCore::ContextMenuController::contextMenuItemSelected):
* page/FrameView.cpp:
(WebCore::FrameView::scrollToAnchor):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::scrollRectToVisible):
(WebCore::RenderLayer::autoscroll):
* rendering/RenderLayer.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::scrollRectToVisible):
* rendering/RenderObject.h:

Source/WebKit/mac:

Pass SelectionRevealMode::Reveal in existing code.

* WebView/WebFrame.mm:
(-[WebFrame _scrollDOMRangeToVisible:]):
(-[WebFrame _scrollDOMRangeToVisible:withInset:]):
(-[WebFrame revealSelectionAtExtent:]):
* WebView/WebHTMLView.mm:
(-[WebHTMLView jumpToSelection:]):
(-[WebHTMLView centerSelectionInVisibleArea:]):

Source/WebKit2:

Pass SelectionRevealMode::Reveal in existing code.

* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::centerSelectionInVisibleArea):

LayoutTests:

* fast/forms/ios/focus-input-in-iframe-expected.txt: Added.
* fast/forms/ios/focus-input-in-iframe.html: Added.
* fast/forms/ios/programmatic-focus-input-in-iframe-expected.txt: Added.
* fast/forms/ios/programmatic-focus-input-in-iframe.html: Added.

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

41 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/forms/ios/focus-input-in-iframe-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/ios/focus-input-in-iframe.html [new file with mode: 0644]
LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe-expected.txt [new file with mode: 0644]
LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe.html [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/TestExpectations
LayoutTests/platform/ios-simulator-wk1/fast/overflow/002-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/clip-rects-fixed-ancestor-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/float-in-relpositioned-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-auto-position-absolute-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-vertical-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow_hidden-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-with-column-gap-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/scrollRevealButton-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk1/fast/overflow/table-overflow-float-expected.txt [new file with mode: 0644]
LayoutTests/platform/ios-simulator-wk2/fast/overflow/scrollRevealButton-expected.txt
LayoutTests/platform/ios-simulator/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/dom/Document.h
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/editing/Editor.cpp
Source/WebCore/editing/FrameSelection.cpp
Source/WebCore/editing/FrameSelection.h
Source/WebCore/html/HTMLInputElement.cpp
Source/WebCore/html/HTMLTextAreaElement.cpp
Source/WebCore/page/ContextMenuController.cpp
Source/WebCore/page/FrameView.cpp
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/RenderLayer.h
Source/WebCore/rendering/RenderObject.cpp
Source/WebCore/rendering/RenderObject.h
Source/WebKit/mac/ChangeLog
Source/WebKit/mac/WebView/WebFrame.mm
Source/WebKit/mac/WebView/WebHTMLView.mm
Source/WebKit/win/WebView.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/WebPage/WebPage.cpp

index ed51627..f311cb7 100644 (file)
@@ -1,3 +1,16 @@
+2016-06-20  Simon Fraser  <simon.fraser@apple.com>
+
+        Focus event dispatched in iframe causes parent document to scroll incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=158629
+        rdar://problem/26521616
+
+        Reviewed by Tim Horton.
+
+        * fast/forms/ios/focus-input-in-iframe-expected.txt: Added.
+        * fast/forms/ios/focus-input-in-iframe.html: Added.
+        * fast/forms/ios/programmatic-focus-input-in-iframe-expected.txt: Added.
+        * fast/forms/ios/programmatic-focus-input-in-iframe.html: Added.
+
 2016-06-21  Alexey Proskuryakov  <ap@apple.com>
 
         Add an expectation for another copy of fast/canvas/webgl/premultiplyalpha-test.html
diff --git a/LayoutTests/fast/forms/ios/focus-input-in-iframe-expected.txt b/LayoutTests/fast/forms/ios/focus-input-in-iframe-expected.txt
new file mode 100644 (file)
index 0000000..f5a2ebd
--- /dev/null
@@ -0,0 +1,7 @@
+Tests zooming into a text input on tap.
+
+Click to focus input
+
+tap location   { x: 20.000, y: 62.000 }
+scale  1.455
+visibleRect    { left: 0.000, top: 1201.976, width: 219.979, height: 329.968 }
diff --git a/LayoutTests/fast/forms/ios/focus-input-in-iframe.html b/LayoutTests/fast/forms/ios/focus-input-in-iframe.html
new file mode 100644 (file)
index 0000000..c3712de
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=0.5">
+    <style>
+        button {
+            display: block;
+        }
+        iframe {
+            margin-top: 800px;
+        }
+    </style>
+    
+    <script src="resources/zooming-test-utils.js"></script>
+    <script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+
+    if (window.internals)
+        internals.settings.setFrameFlatteningEnabled(true);
+    
+    function buttonClicked()
+    {
+        document.getElementById('frame').contentDocument.getElementById('input').focus();
+    }
+
+    function doTest()
+    {
+        testZoomAfterTap(document.getElementById('target'), 10, 10);
+    }
+
+    window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body>
+
+<p>Tests zooming into a text input on tap.</p>
+<button id="target" onclick="buttonClicked()">Click to focus input</button>
+
+<iframe id="frame" srcdoc="<style>input { margin: 400px 20px; }</style>
+<input id='input' type='text'>
+"></iframe>
+
+</body>
+</html>
diff --git a/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe-expected.txt b/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe-expected.txt
new file mode 100644 (file)
index 0000000..4eef465
--- /dev/null
@@ -0,0 +1,4 @@
+Tests that a programmatic focus should not scroll into view
+
+PASS: page did not scroll.
+
diff --git a/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe.html b/LayoutTests/fast/forms/ios/programmatic-focus-input-in-iframe.html
new file mode 100644 (file)
index 0000000..6edb5fa
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] -->
+
+<html>
+<head>
+    <meta name="viewport" content="initial-scale=0.5">
+    <style>
+        button {
+            display: block;
+        }
+        iframe {
+            margin-top: 800px;
+        }
+    </style>
+    
+    <script>
+    if (window.testRunner) {
+        testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    if (window.internals)
+        internals.settings.setFrameFlatteningEnabled(true);
+    
+    function pageDidScroll()
+    {
+        document.getElementById('result').textContent = 'FAIL: page scrolled to ' + document.scrollingElement.scrollTop;
+    }
+
+    function doTest()
+    {
+        window.setTimeout(function() {
+            document.getElementById('frame').contentDocument.getElementById('input').focus();
+        }, 0);
+
+        // Wait for any scroll to happen.
+        window.setTimeout(function() {
+            if (window.testRunner)
+                testRunner.notifyDone();
+        }, 100);
+    }
+
+    window.addEventListener('load', doTest, false);
+    </script>
+</head>
+<body onscroll="pageDidScroll()">
+
+<p>Tests that a programmatic focus should not scroll into view</p>
+<div id="result">
+    PASS: page did not scroll.
+</div>
+
+<iframe id="frame" srcdoc="<style>input { margin: 400px 20px; }</style>
+<input id='input' type='text'>
+"></iframe>
+
+</body>
+</html>
index 5e466c9..82da34d 100644 (file)
@@ -860,7 +860,7 @@ fast/overflow/child-100percent-height-inside-fixed-container-with-overflow-auto.
 fast/overflow/overflow-focus-ring.html [ Failure ]
 fast/overflow/overflow-update-transform.html [ Failure ]
 fast/overflow/replaced-child-100percent-height-inside-fixed-container-with-overflow-auto.html [ Failure ]
-fast/overflow/scroll-vertical-not-horizontal.html [ Failure ]
+fast/overflow/scroll-vertical-not-horizontal.html [ Failure ]
 fast/regions/region-styling/region-style-block-background-color2.html [ ImageOnlyFailure ]
 fast/shapes/shape-outside-floats/shape-outside-floats-circle-000.html [ ImageOnlyFailure ]
 fast/shapes/shape-outside-floats/shape-outside-floats-ellipse-000.html [ ImageOnlyFailure ]
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/002-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/002-expected.txt
new file mode 100644 (file)
index 0000000..3228d7c
--- /dev/null
@@ -0,0 +1,83 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderTable {TABLE} at (0,0) size 212x312 [border: (2px outset #808080)]
+        RenderTableSection {TBODY} at (2,2) size 208x308
+          RenderTableRow {TR} at (0,2) size 208x304
+            RenderTableCell {TD} at (2,2) size 204x304 [border: (1px inset #808080)] [r=0 c=0 rs=1 cs=1]
+layer at (14,14) size 200x300 scrollHeight 480
+  RenderBlock {DIV} at (2,2) size 200x300
+    RenderText {#text} at (0,0) size 140x19
+      text run at (0,0) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,15) size 1x0
+    RenderText {#text} at (0,20) size 140x19
+      text run at (0,20) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,35) size 1x0
+    RenderText {#text} at (0,40) size 140x19
+      text run at (0,40) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,55) size 1x0
+    RenderText {#text} at (0,60) size 140x19
+      text run at (0,60) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,75) size 1x0
+    RenderText {#text} at (0,80) size 140x19
+      text run at (0,80) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,95) size 1x0
+    RenderText {#text} at (0,100) size 140x19
+      text run at (0,100) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,115) size 1x0
+    RenderText {#text} at (0,120) size 140x19
+      text run at (0,120) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,135) size 1x0
+    RenderText {#text} at (0,140) size 140x19
+      text run at (0,140) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,155) size 1x0
+    RenderText {#text} at (0,160) size 140x19
+      text run at (0,160) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,175) size 1x0
+    RenderText {#text} at (0,180) size 140x19
+      text run at (0,180) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,195) size 1x0
+    RenderText {#text} at (0,200) size 140x19
+      text run at (0,200) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,215) size 1x0
+    RenderText {#text} at (0,220) size 140x19
+      text run at (0,220) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,235) size 1x0
+    RenderText {#text} at (0,240) size 140x19
+      text run at (0,240) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,255) size 1x0
+    RenderText {#text} at (0,260) size 140x19
+      text run at (0,260) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,275) size 1x0
+    RenderText {#text} at (0,280) size 140x19
+      text run at (0,280) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,295) size 1x0
+    RenderText {#text} at (0,300) size 140x19
+      text run at (0,300) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,315) size 1x0
+    RenderText {#text} at (0,320) size 140x19
+      text run at (0,320) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,335) size 1x0
+    RenderText {#text} at (0,340) size 140x19
+      text run at (0,340) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,355) size 1x0
+    RenderText {#text} at (0,360) size 140x19
+      text run at (0,360) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,375) size 1x0
+    RenderText {#text} at (0,380) size 140x19
+      text run at (0,380) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,395) size 1x0
+    RenderText {#text} at (0,400) size 140x19
+      text run at (0,400) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,415) size 1x0
+    RenderText {#text} at (0,420) size 140x19
+      text run at (0,420) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,435) size 1x0
+    RenderText {#text} at (0,440) size 140x19
+      text run at (0,440) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,455) size 1x0
+    RenderText {#text} at (0,460) size 140x19
+      text run at (0,460) width 140: "Lots of overflow text."
+    RenderBR {BR} at (139,475) size 1x0
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/clip-rects-fixed-ancestor-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/clip-rects-fixed-ancestor-expected.txt
new file mode 100644 (file)
index 0000000..50f02ed
--- /dev/null
@@ -0,0 +1,189 @@
+layer at (0,0) size 800x1029
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x1029
+  RenderBlock {HTML} at (0,0) size 800x1030
+    RenderBody {BODY} at (8,21) size 784x1001
+      RenderBlock {H4} at (0,0) size 784x20
+        RenderText {#text} at (0,0) size 291x19
+          text run at (0,0) width 291: "Safari Fixed / Overflow Hidden Scroll Bug"
+      RenderBlock {PRE} at (0,41) size 784x0
+      RenderBlock {PRE} at (0,41) size 784x463
+        RenderText {#text} at (0,0) size 258x462
+          text run at (0,0) width 71: "#fixed1 {"
+          text run at (0,14) width 188: "\x{9}position: fixed;"
+          text run at (0,28) width 141: "\x{9}top: 80px;"
+          text run at (0,42) width 157: "\x{9}left: 300px;"
+          text run at (0,56) width 180: "\x{9}width: 150px; }"
+          text run at (0,70) width 71: "#fixed2 {"
+          text run at (0,84) width 188: "\x{9}position: fixed;"
+          text run at (0,98) width 141: "\x{9}top: 80px;"
+          text run at (0,112) width 157: "\x{9}left: 500px;"
+          text run at (0,126) width 180: "\x{9}width: 150px; }"
+          text run at (0,140) width 71: "#fixed3 {"
+          text run at (0,154) width 188: "\x{9}position: fixed;"
+          text run at (0,168) width 141: "\x{9}top: 80px;"
+          text run at (0,182) width 157: "\x{9}left: 700px;"
+          text run at (0,196) width 180: "\x{9}width: 150px; }"
+          text run at (0,210) width 133: ".overflowHidden {"
+          text run at (0,224) width 211: "\x{9}overflow: hidden; }"
+          text run at (0,238) width 86: ".relative {"
+          text run at (0,252) width 227: "\x{9}position: relative; }"
+          text run at (0,266) width 86: ".absolute {"
+          text run at (0,280) width 211: "\x{9}position: absolute;"
+          text run at (0,294) width 118: "\x{9}top: 0;"
+          text run at (0,308) width 149: "\x{9}right: 0; }"
+          text run at (0,322) width 40: "div {"
+          text run at (0,336) width 164: "\x{9}padding: 5px;"
+          text run at (0,350) width 157: "\x{9}margin: 5px;"
+          text run at (0,364) width 258: "\x{9}border: solid 1px #999; }"
+          text run at (0,378) width 94: "#veryLarge {"
+          text run at (0,392) width 211: "\x{9}position: relative;"
+          text run at (0,406) width 172: "\x{9}height:1000px;"
+          text run at (0,420) width 180: "\x{9}width:1500px; }"
+          text run at (0,434) width 63: "\x{9}"
+          text run at (0,448) width 0: " "
+      RenderBlock {P} at (0,519) size 784x21
+        RenderText {#text} at (0,0) size 410x19
+          text run at (0,0) width 410: "When you scroll this page the following objects will be clipped:"
+      RenderBlock {P} at (0,555) size 784x21
+        RenderText {#text} at (0,0) size 757x19
+          text run at (0,0) width 757: "- (relative objects and overflowHidden objects) inside (overflowHidden objects) inside (fixed objects) will be clipped;"
+      RenderBlock {P} at (0,591) size 784x41
+        RenderText {#text} at (0,0) size 733x39
+          text run at (0,0) width 733: "- (relative objects and overflowHidden objects and absolute objects) inside (fixed/overflowHidden objects) will be"
+          text run at (0,20) width 52: "clipped;"
+      RenderBlock {P} at (0,647) size 784x41
+        RenderText {#text} at (0,0) size 780x39
+          text run at (0,0) width 780: "Nice effect, but not what we want. Tested in Safari Version 2.0.4 (419.3), and WebKit Nightly Build Mon Nov 20 5:18:23"
+          text run at (0,20) width 76: "GMT 2006."
+layer at (305,85) size 162x348
+  RenderBlock (positioned) {DIV} at (305,85) size 162x348 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 150x20
+      RenderText {#text} at (0,0) size 49x19
+        text run at (0,0) width 49: "#fixed1"
+    RenderBlock {DIV} at (11,31) size 140x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (316,190) size 140x74 clip at (317,191) size 138x72
+  RenderBlock {DIV} at (11,105) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+    RenderBlock {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (316,269) size 140x74 clip at (317,270) size 138x72
+  RenderBlock {DIV} at (11,184) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (316,348) size 140x74 clip at (317,349) size 138x72
+  RenderBlock {DIV} at (11,263) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (327,379) size 118x32 clip at (328,380) size 116x30 scrollWidth 119
+  RenderBlock {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 109x19
+      text run at (6,6) width 109: ".overflowHidden"
+layer at (316,153) size 140x32
+  RenderBlock (relative positioned) {DIV} at (11,68) size 140x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
+layer at (392,91) size 69x32
+  RenderBlock (positioned) {DIV} at (86,6) size 70x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 58x19
+      text run at (6,6) width 58: ".absolute"
+layer at (327,300) size 118x32
+  RenderBlock (relative positioned) {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
+layer at (505,85) size 162x348 clip at (506,86) size 160x346 scrollWidth 163
+  RenderBlock (positioned) {DIV} at (505,85) size 162x348 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 150x20
+      RenderText {#text} at (0,0) size 158x19
+        text run at (0,0) width 158: "#fixed2.overflowHidden"
+    RenderBlock {DIV} at (11,31) size 140x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (516,190) size 140x74 clip at (517,191) size 138x72
+  RenderBlock {DIV} at (11,105) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+    RenderBlock {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (516,269) size 140x74 clip at (517,270) size 138x72
+  RenderBlock {DIV} at (11,184) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (516,348) size 140x74 clip at (517,349) size 138x72
+  RenderBlock {DIV} at (11,263) size 140x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (527,379) size 118x32 clip at (528,380) size 116x30 scrollWidth 119
+  RenderBlock {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 109x19
+      text run at (6,6) width 109: ".overflowHidden"
+layer at (516,153) size 140x32
+  RenderBlock (relative positioned) {DIV} at (11,68) size 140x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
+layer at (592,91) size 69x32
+  RenderBlock (positioned) {DIV} at (86,6) size 70x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 58x19
+      text run at (6,6) width 58: ".absolute"
+layer at (527,300) size 118x32
+  RenderBlock (relative positioned) {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
+layer at (705,85) size 162x390 backgroundClip at (0,0) size 800x1029 clip at (0,0) size 800x1029
+  RenderBlock (positioned) {DIV} at (705,85) size 162x390 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 150x20
+      RenderText {#text} at (0,0) size 49x19
+        text run at (0,0) width 49: "#fixed3"
+layer at (716,116) size 140x348 backgroundClip at (716,116) size 84x348 clip at (717,117) size 83x346
+  RenderBlock {DIV} at (11,31) size 140x348 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 128x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+    RenderBlock {DIV} at (11,31) size 118x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (727,221) size 118x74 backgroundClip at (727,221) size 73x74 clip at (728,222) size 72x72
+  RenderBlock {DIV} at (11,105) size 118x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 106x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+    RenderBlock {DIV} at (11,31) size 96x32 [border: (1px solid #999999)]
+      RenderText {#text} at (6,6) size 51x19
+        text run at (6,6) width 51: "no style"
+layer at (727,300) size 118x74 backgroundClip at (727,300) size 73x74 clip at (728,301) size 72x72
+  RenderBlock {DIV} at (11,184) size 118x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 106x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (727,379) size 118x74 backgroundClip at (727,379) size 73x74 clip at (728,380) size 72x72
+  RenderBlock {DIV} at (11,263) size 118x74 [border: (1px solid #999999)]
+    RenderBlock (anonymous) at (6,6) size 106x20
+      RenderText {#text} at (0,0) size 109x19
+        text run at (0,0) width 109: ".overflowHidden"
+layer at (738,410) size 96x32 backgroundClip at (738,410) size 62x32 clip at (739,411) size 61x30 scrollWidth 119
+  RenderBlock {DIV} at (11,31) size 96x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 109x19
+      text run at (6,6) width 109: ".overflowHidden"
+layer at (727,184) size 118x32 backgroundClip at (717,117) size 83x346 clip at (717,117) size 83x346
+  RenderBlock (relative positioned) {DIV} at (11,68) size 118x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
+layer at (792,91) size 69x32 backgroundClip at (0,0) size 800x1029 clip at (0,0) size 800x1029
+  RenderBlock (positioned) {DIV} at (86,6) size 70x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 58x19
+      text run at (6,6) width 58: ".absolute"
+layer at (738,331) size 96x32 backgroundClip at (728,301) size 72x72 clip at (728,301) size 72x72
+  RenderBlock (relative positioned) {DIV} at (11,31) size 96x32 [border: (1px solid #999999)]
+    RenderText {#text} at (6,6) size 52x19
+      text run at (6,6) width 52: ".relative"
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/float-in-relpositioned-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/float-in-relpositioned-expected.txt
new file mode 100644 (file)
index 0000000..505faf8
--- /dev/null
@@ -0,0 +1,43 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x582
+      RenderBlock {P} at (0,0) size 784x20
+        RenderText {#text} at (0,0) size 54x19
+          text run at (0,0) width 54: "Test for "
+        RenderInline {I} at (0,0) size 641x19
+          RenderInline {A} at (0,0) size 156x19 [color=#0000EE]
+            RenderText {#text} at (53,0) size 156x19
+              text run at (53,0) width 156: "rdar://problem/6059648"
+          RenderText {#text} at (208,0) size 486x19
+            text run at (208,0) width 5: " "
+            text run at (212,0) width 482: "Some content not visible when the window is short at courtneyalbright.com"
+        RenderText {#text} at (693,0) size 5x19
+          text run at (693,0) width 5: "."
+      RenderBlock {P} at (0,36) size 784x20
+        RenderText {#text} at (0,0) size 650x19
+          text run at (0,0) width 479: "Each black box below should have a scroll bar allowing the blue square to "
+          text run at (478,0) width 172: "be scrolled fully into view."
+layer at (18,80) size 102x102 clip at (19,81) size 100x100 scrollWidth 125
+  RenderBlock {DIV} at (10,72) size 102x102 [border: (1px solid #000000)]
+layer at (18,192) size 102x102 clip at (19,193) size 100x100 scrollHeight 125
+  RenderBlock {DIV} at (10,184) size 102x102 [border: (1px solid #000000)]
+layer at (18,304) size 102x102 clip at (19,305) size 100x100 scrollWidth 125
+  RenderBlock {DIV} at (10,296) size 102x102 [border: (1px solid #000000)]
+layer at (18,416) size 102x102 clip at (19,417) size 100x100 scrollHeight 125
+  RenderBlock {DIV} at (10,408) size 102x102 [border: (1px solid #000000)]
+layer at (69,81) size 25x25
+  RenderBlock (relative positioned) {DIV} at (1,1) size 25x25 [bgcolor=#000000]
+    RenderBlock (floating) {DIV} at (0,0) size 75x75 [bgcolor=#0000FF7F]
+layer at (19,243) size 25x25
+  RenderBlock (relative positioned) {DIV} at (1,1) size 25x25 [bgcolor=#000000]
+    RenderBlock (floating) {DIV} at (0,0) size 75x75 [bgcolor=#0000FF7F]
+layer at (69,305) size 25x25
+  RenderBlock (relative positioned) {DIV} at (1,1) size 25x25 [bgcolor=#000000]
+layer at (69,305) size 75x75 backgroundClip at (19,305) size 100x100 clip at (19,305) size 100x100
+  RenderBlock (positioned) {DIV} at (0,0) size 75x75 [bgcolor=#0000FF7F]
+layer at (19,467) size 25x25
+  RenderBlock (relative positioned) {DIV} at (1,1) size 25x25 [bgcolor=#000000]
+layer at (19,467) size 75x75 backgroundClip at (19,417) size 100x100 clip at (19,417) size 100x100
+  RenderBlock (positioned) {DIV} at (0,0) size 75x75 [bgcolor=#0000FF7F]
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-auto-position-absolute-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-auto-position-absolute-expected.txt
new file mode 100644 (file)
index 0000000..63f1d8c
--- /dev/null
@@ -0,0 +1,11 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (16,16) size 768x568 scrollHeight 1024
+  RenderBlock (positioned) {DIV} at (16,16) size 768x568
+layer at (16,16) size 768x1024 backgroundClip at (16,16) size 768x568 clip at (16,16) size 768x568
+  RenderBlock (positioned) {DIV} at (0,0) size 768x1024 [bgcolor=#008000]
+    RenderText {#text} at (0,0) size 316x19
+      text run at (0,0) width 316: "This test passes if there is no horizontal scrollbar."
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-expected.txt
new file mode 100644 (file)
index 0000000..111d8cc
--- /dev/null
@@ -0,0 +1,91 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x457
+  RenderBlock {HTML} at (0,0) size 800x457
+    RenderBody {BODY} at (8,16) size 784x433
+      RenderBlock {P} at (0,0) size 784x40
+        RenderText {#text} at (0,0) size 139x19
+          text run at (0,0) width 139: "This is a test case for "
+        RenderInline {I} at (0,0) size 774x39
+          RenderText {#text} at (138,0) size 774x39
+            text run at (138,0) width 636: "http://bugzilla.opendarwin.org/show_bug.cgi?id=5826 Blocks with direction:rtl and overflow:auto"
+            text run at (0,20) width 219: "or scroll have incorrect scrollbars"
+        RenderText {#text} at (218,20) size 5x19
+          text run at (218,20) width 5: "."
+      RenderBlock (anonymous) at (0,56) size 784x20
+        RenderText {#text} at (0,0) size 469x19
+          text run at (0,0) width 469: "The right column should be a mirror-image of the left column in terms of"
+      RenderBlock {UL} at (0,92) size 784x80
+        RenderListItem {LI} at (40,0) size 744x20
+          RenderListMarker at (-18,0) size 7x19: bullet
+          RenderText {#text} at (0,0) size 168x19
+            text run at (0,0) width 168: "the presence of a scrollbar"
+        RenderListItem {LI} at (40,20) size 744x20
+          RenderListMarker at (-18,0) size 7x19: bullet
+          RenderText {#text} at (0,0) size 242x19
+            text run at (0,0) width 242: "the initial position of the scroll thumb"
+        RenderListItem {LI} at (40,40) size 744x20
+          RenderListMarker at (-18,0) size 7x19: bullet
+          RenderText {#text} at (0,0) size 462x19
+            text run at (0,0) width 462: "which letters are visible initially and when you scroll (in the top 3 rows)"
+        RenderListItem {LI} at (40,60) size 744x20
+          RenderListMarker at (-18,0) size 7x19: bullet
+          RenderText {#text} at (0,0) size 591x19
+            text run at (0,0) width 591: "the position of the blue and olive boxes, initially and when you scroll (in the bottom 2 rows)"
+      RenderTable {TABLE} at (0,188) size 256x245
+        RenderTableSection {TBODY} at (0,0) size 256x245
+          RenderTableRow {TR} at (0,2) size 256x241
+            RenderTableCell {TD} at (2,2) size 125x241 [r=0 c=0 rs=1 cs=1]
+            RenderTableCell {TD} at (129,2) size 125x241 [r=0 c=1 rs=1 cs=1]
+layer at (15,211) size 115x43 clip at (25,211) size 100x43 scrollWidth 191
+  RenderBlock {DIV} at (5,5) size 115x43 [bgcolor=#FFFF00] [border: none (5px solid #008000) none (10px solid #FF0000)]
+    RenderText {#text} at (10,0) size 192x19
+      text run at (10,0) width 192: "abcdefghijklmnopqrstuvwxyz"
+layer at (15,258) size 115x43 clip at (25,258) size 100x43
+  RenderBlock {DIV} at (5,51) size 115x44 [bgcolor=#FFFF00] [border: none (5px solid #008000) none (10px solid #FF0000)]
+    RenderBlock {DIV} at (10,0) size 100x20 [bgcolor=#D3D3D3]
+      RenderText {#text} at (-91,0) size 192x19
+        text run at (-91,0) width 191: "abcdefghijklmnopqrstuvwxyz"
+layer at (15,305) size 115x43 clip at (25,305) size 100x43 scrollWidth 191
+  RenderBlock {DIV} at (5,98) size 115x44 [bgcolor=#FFFF00] [border: none (5px solid #008000) none (10px solid #FF0000)]
+    RenderBlock {DIV} at (10,0) size 100x20 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,0) size 192x19
+        text run at (0,0) width 192: "abcdefghijklmnopqrstuvwxyz"
+layer at (142,211) size 115x43 clip at (147,211) size 100x43 scrollX 91 scrollWidth 191
+  RenderBlock {DIV} at (5,5) size 115x43 [bgcolor=#FFFF00] [border: none (10px solid #FF0000) none (5px solid #008000)]
+    RenderText {#text} at (-86,0) size 192x19
+      text run at (-86,0) width 191: "zyxwvutsrqponmlkjihgfedcba"
+layer at (142,258) size 115x43 clip at (147,258) size 100x43
+  RenderBlock {DIV} at (5,51) size 115x44 [bgcolor=#FFFF00] [border: none (10px solid #FF0000) none (5px solid #008000)]
+    RenderBlock {DIV} at (5,0) size 100x20 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,0) size 192x19
+        text run at (0,0) width 192: "zyxwvutsrqponmlkjihgfedcba"
+layer at (142,305) size 115x43 clip at (147,305) size 100x43 scrollX 91 scrollWidth 191
+  RenderBlock {DIV} at (5,98) size 115x44 [bgcolor=#FFFF00] [border: none (10px solid #FF0000) none (5px solid #008000)]
+    RenderBlock {DIV} at (5,0) size 100x20 [bgcolor=#D3D3D3]
+      RenderText {#text} at (-91,0) size 192x19
+        text run at (-91,0) width 191: "zyxwvutsrqponmlkjihgfedcba"
+layer at (15,352) size 115x43 clip at (25,352) size 100x43
+  RenderBlock (relative positioned) {DIV} at (5,145) size 115x44 [bgcolor=#FFFF00] [border: none (5px solid #008000) none (10px solid #FF0000)]
+layer at (71,372) size 8x4
+  RenderBlock (positioned) {DIV} at (56,20) size 8x4 [bgcolor=#0000FF]
+layer at (-25,352) size 70x20 backgroundClip at (25,352) size 100x43 clip at (25,352) size 100x43
+  RenderBlock (positioned) {DIV} at (-40,0) size 70x20 [bgcolor=#808000]
+layer at (15,399) size 115x43 clip at (25,399) size 100x43 scrollWidth 150
+  RenderBlock (relative positioned) {DIV} at (5,192) size 115x44 [bgcolor=#FFFF00] [border: none (5px solid #008000) none (10px solid #FF0000)]
+layer at (71,419) size 8x4
+  RenderBlock (positioned) {DIV} at (56,20) size 8x4 [bgcolor=#0000FF]
+layer at (105,399) size 70x20 backgroundClip at (25,399) size 100x43 clip at (25,399) size 100x43
+  RenderBlock (positioned) {DIV} at (90,0) size 70x20 [bgcolor=#808000]
+layer at (142,352) size 115x43 clip at (147,352) size 100x43
+  RenderBlock (relative positioned) {DIV} at (5,145) size 115x44 [bgcolor=#FFFF00] [border: none (10px solid #FF0000) none (5px solid #008000)]
+layer at (193,372) size 8x4
+  RenderBlock (positioned) {DIV} at (51,20) size 8x4 [bgcolor=#0000FF]
+layer at (227,352) size 70x20 backgroundClip at (147,352) size 100x43 clip at (147,352) size 100x43
+  RenderBlock (positioned) {DIV} at (85,0) size 70x20 [bgcolor=#808000]
+layer at (142,399) size 115x43 clip at (147,399) size 100x43 scrollX 50 scrollWidth 150
+  RenderBlock (relative positioned) {DIV} at (5,192) size 115x44 [bgcolor=#FFFF00] [border: none (10px solid #FF0000) none (5px solid #008000)]
+layer at (193,419) size 8x4
+  RenderBlock (positioned) {DIV} at (51,20) size 8x4 [bgcolor=#0000FF]
+layer at (97,399) size 70x20 backgroundClip at (147,399) size 100x43 clip at (147,399) size 100x43
+  RenderBlock (positioned) {DIV} at (-45,0) size 70x20 [bgcolor=#808000]
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-vertical-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow-rtl-vertical-expected.txt
new file mode 100644 (file)
index 0000000..d5177c4
--- /dev/null
@@ -0,0 +1,63 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 343x600
+  RenderBlock {HTML} at (0,0) size 343x600
+    RenderBody {BODY} at (16,8) size 319x584
+      RenderBlock {P} at (0,0) size 40x584
+        RenderText {#text} at (0,0) size 19x139
+          text run at (0,0) width 139: "This is a test case for "
+        RenderInline {I} at (0,0) size 39x570
+          RenderText {#text} at (0,138) size 39x570
+            text run at (0,138) width 432: "http://bugzilla.opendarwin.org/show_bug.cgi?id=5826 Blocks with"
+            text run at (20,0) width 423: "direction:rtl and overflow:auto or scroll have incorrect scrollbars"
+        RenderText {#text} at (20,422) size 19x5
+          text run at (20,422) width 4: "."
+      RenderBlock (anonymous) at (56,0) size 20x584
+        RenderText {#text} at (0,0) size 19x469
+          text run at (0,0) width 469: "The right column should be a mirror-image of the left column in terms of"
+      RenderBlock {UL} at (92,0) size 60x584
+        RenderListItem {LI} at (0,40) size 20x544
+          RenderListMarker at (0,-18) size 19x7: bullet
+          RenderText {#text} at (0,0) size 19x168
+            text run at (0,0) width 168: "the presence of a scrollbar"
+        RenderListItem {LI} at (20,40) size 20x544
+          RenderListMarker at (0,-18) size 19x7: bullet
+          RenderText {#text} at (0,0) size 19x242
+            text run at (0,0) width 242: "the initial position of the scroll thumb"
+        RenderListItem {LI} at (40,40) size 20x544
+          RenderListMarker at (0,-18) size 19x7: bullet
+          RenderText {#text} at (0,0) size 19x340
+            text run at (0,0) width 340: "which letters are visible initially and when you scroll"
+      RenderTable {TABLE} at (168,0) size 151x256
+        RenderTableSection {TBODY} at (0,0) size 151x256
+          RenderTableRow {TR} at (0,2) size 147x256
+            RenderTableCell {TD} at (2,2) size 147x125 [r=0 c=0 rs=1 cs=1]
+            RenderTableCell {TD} at (2,129) size 147x125 [r=0 c=1 rs=1 cs=1]
+layer at (191,15) size 43x115 clip at (191,25) size 43x100 scrollHeight 191
+  RenderBlock {DIV} at (5,5) size 43x115 [bgcolor=#FFFF00] [border: (10px solid #FF0000) none (5px solid #008000) none]
+    RenderText {#text} at (0,10) size 19x192
+      text run at (0,10) width 192: "abcdefghijklmnopqrstuvwxyz"
+layer at (238,15) size 43x115 clip at (238,25) size 43x100
+  RenderBlock {DIV} at (51,5) size 44x115 [bgcolor=#FFFF00] [border: (10px solid #FF0000) none (5px solid #008000) none]
+    RenderBlock {DIV} at (0,10) size 20x100 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,-91) size 19x192
+        text run at (0,-91) width 192: "abcdefghijklmnopqrstuvwxyz"
+layer at (285,15) size 43x115 clip at (285,25) size 43x100 scrollHeight 191
+  RenderBlock {DIV} at (98,5) size 44x115 [bgcolor=#FFFF00] [border: (10px solid #FF0000) none (5px solid #008000) none]
+    RenderBlock {DIV} at (0,10) size 20x100 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,0) size 19x192
+        text run at (0,0) width 192: "abcdefghijklmnopqrstuvwxyz"
+layer at (191,142) size 43x115 clip at (191,147) size 43x100 scrollY 91 scrollHeight 191
+  RenderBlock {DIV} at (5,5) size 43x115 [bgcolor=#FFFF00] [border: (5px solid #008000) none (10px solid #FF0000) none]
+    RenderText {#text} at (0,-86) size 19x192
+      text run at (0,-86) width 192: "zyxwvutsrqponmlkjihgfedcba"
+layer at (238,142) size 43x115 clip at (238,147) size 43x100
+  RenderBlock {DIV} at (51,5) size 44x115 [bgcolor=#FFFF00] [border: (5px solid #008000) none (10px solid #FF0000) none]
+    RenderBlock {DIV} at (0,5) size 20x100 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,0) size 19x192
+        text run at (0,0) width 192: "zyxwvutsrqponmlkjihgfedcba"
+layer at (285,142) size 43x115 clip at (285,147) size 43x100 scrollY 91 scrollHeight 191
+  RenderBlock {DIV} at (98,5) size 44x115 [bgcolor=#FFFF00] [border: (5px solid #008000) none (10px solid #FF0000) none]
+    RenderBlock {DIV} at (0,5) size 20x100 [bgcolor=#D3D3D3]
+      RenderText {#text} at (0,-91) size 19x192
+        text run at (0,-91) width 192: "zyxwvutsrqponmlkjihgfedcba"
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow_hidden-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/overflow_hidden-expected.txt
new file mode 100644 (file)
index 0000000..f0c9ad8
--- /dev/null
@@ -0,0 +1,20 @@
+layer at (0,0) size 800x2158
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x2158
+  RenderBlock {HTML} at (0,0) size 800x2158
+    RenderBody {BODY} at (8,16) size 784x2126
+      RenderBlock {P} at (0,0) size 784x20
+        RenderText {#text} at (0,0) size 625x19
+          text run at (0,0) width 625: "Scrolling should occur even when the frame's overflow is hidden (i.e. it has no visible scrollbars)."
+      RenderBlock {DIV} at (0,36) size 784x2000
+        RenderInline {A} at (0,0) size 67x19 [color=#0000EE]
+          RenderText {#text} at (0,0) size 67x19
+            text run at (0,0) width 67: "Click here"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {H2} at (0,2055) size 784x31
+        RenderText {#text} at (0,1) size 118x28
+          text run at (0,1) width 118: "Test Passed"
+      RenderBlock {P} at (0,2105) size 784x21
+        RenderText {#text} at (0,0) size 509x19
+          text run at (0,0) width 509: "The test should have automatically scrolled down to show \"Test Passed\" above."
+scrolled to 0,1558
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-expected.txt
new file mode 100644 (file)
index 0000000..195b33a
--- /dev/null
@@ -0,0 +1,132 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 404x404 clip at (10,10) size 400x400 scrollWidth 2896
+  RenderBlock {DIV} at (0,0) size 404x404 [border: (2px solid #000000)]
+    RenderMultiColumnSet at (2,2) size 400x400
+layer at (10,10) size 400x2420 backgroundClip at (10,10) size 400x400 clip at (10,10) size 400x400
+  RenderMultiColumnFlowThread at (2,2) size 400x2420
+    RenderText {#text} at (0,0) size 399x2419
+      text run at (0,0) width 357: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+      text run at (0,20) width 399: "Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+      text run at (0,40) width 358: "viverra augue in leo faucibus congue. Vestibulum ligula"
+      text run at (0,60) width 362: "neque, commodo eget blandit sit amet, facilisis vitae mi."
+      text run at (0,80) width 379: "Vivamus pretium lorem a quam imperdiet in placerat purus"
+      text run at (0,100) width 344: "sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet"
+      text run at (0,120) width 364: "pellentesque. Curabitur vel tortor quam, ut pharetra eros."
+      text run at (0,140) width 383: "Mauris euismod, justo in mattis ultricies, risus velit pretium"
+      text run at (0,160) width 392: "ligula, eu sodales libero dolor et massa. Phasellus eros quam,"
+      text run at (0,180) width 344: "faucibus sed consectetur et, elementum ut erat. Morbi"
+      text run at (0,200) width 349: "fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,220) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,240) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,260) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,280) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,300) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,320) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,340) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,360) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,380) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,400) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,420) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,440) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,460) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,480) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,500) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,520) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,540) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,560) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,580) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,600) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,620) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,640) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,660) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,680) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,700) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,720) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,740) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,760) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,780) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,800) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,820) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,840) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,860) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,880) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,900) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,920) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,940) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,960) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,980) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1000) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1020) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1040) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1060) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1080) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1100) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1120) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1140) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1160) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1180) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1200) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1220) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1240) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1260) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1280) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1300) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1320) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1340) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1360) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1380) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1400) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1420) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1440) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1460) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1480) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1500) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1520) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1540) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1560) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1580) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1600) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1620) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1640) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1660) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1680) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1700) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1720) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1740) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1760) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1780) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1800) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1820) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1840) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1860) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1880) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1900) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1920) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1940) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1960) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1980) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,2000) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,2020) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,2040) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,2060) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,2080) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,2100) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,2120) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,2140) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,2160) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,2180) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,2200) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,2220) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,2240) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,2260) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,2280) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,2300) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,2320) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,2340) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,2360) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,2380) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,2400) width 101: "eu libero turpis."
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-with-column-gap-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/paged-x-div-with-column-gap-expected.txt
new file mode 100644 (file)
index 0000000..7f40d87
--- /dev/null
@@ -0,0 +1,132 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 404x404 clip at (10,10) size 400x400 scrollX 200 scrollWidth 3400
+  RenderBlock {DIV} at (0,0) size 404x404 [border: (2px solid #000000)]
+    RenderMultiColumnSet at (2,2) size 400x400
+layer at (-190,10) size 400x2420 backgroundClip at (10,10) size 400x400 clip at (10,10) size 400x400
+  RenderMultiColumnFlowThread at (2,2) size 400x2420
+    RenderText {#text} at (0,0) size 399x2419
+      text run at (0,0) width 357: "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+      text run at (0,20) width 399: "Maecenas lacinia massa in lectus pretium vulputate. Curabitur"
+      text run at (0,40) width 358: "viverra augue in leo faucibus congue. Vestibulum ligula"
+      text run at (0,60) width 362: "neque, commodo eget blandit sit amet, facilisis vitae mi."
+      text run at (0,80) width 379: "Vivamus pretium lorem a quam imperdiet in placerat purus"
+      text run at (0,100) width 344: "sagittis. Aliquam ut dui nibh. Cras faucibus imperdiet"
+      text run at (0,120) width 364: "pellentesque. Curabitur vel tortor quam, ut pharetra eros."
+      text run at (0,140) width 383: "Mauris euismod, justo in mattis ultricies, risus velit pretium"
+      text run at (0,160) width 392: "ligula, eu sodales libero dolor et massa. Phasellus eros quam,"
+      text run at (0,180) width 344: "faucibus sed consectetur et, elementum ut erat. Morbi"
+      text run at (0,200) width 349: "fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,220) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,240) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,260) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,280) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,300) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,320) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,340) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,360) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,380) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,400) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,420) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,440) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,460) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,480) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,500) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,520) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,540) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,560) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,580) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,600) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,620) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,640) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,660) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,680) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,700) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,720) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,740) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,760) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,780) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,800) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,820) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,840) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,860) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,880) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,900) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,920) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,940) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,960) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,980) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1000) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1020) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1040) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1060) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1080) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1100) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1120) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1140) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1160) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1180) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1200) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1220) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1240) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1260) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1280) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1300) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1320) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1340) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1360) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1380) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1400) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1420) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1440) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1460) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1480) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1500) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1520) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1540) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1560) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1580) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1600) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1620) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1640) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1660) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1680) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,1700) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,1720) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,1740) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,1760) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,1780) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,1800) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,1820) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,1840) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,1860) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,1880) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,1900) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,1920) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,1940) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,1960) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,1980) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,2000) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,2020) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,2040) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,2060) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,2080) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,2100) width 364: "eu libero turpis. Lorem ipsum dolor sit amet, consectetur"
+      text run at (0,2120) width 364: "adipiscing elit. Maecenas lacinia massa in lectus pretium"
+      text run at (0,2140) width 373: "vulputate. Curabitur viverra augue in leo faucibus congue."
+      text run at (0,2160) width 365: "Vestibulum ligula neque, commodo eget blandit sit amet,"
+      text run at (0,2180) width 399: "facilisis vitae mi. Vivamus pretium lorem a quam imperdiet in"
+      text run at (0,2200) width 373: "placerat purus sagittis. Aliquam ut dui nibh. Cras faucibus"
+      text run at (0,2220) width 395: "imperdiet pellentesque. Curabitur vel tortor quam, ut pharetra"
+      text run at (0,2240) width 364: "eros. Mauris euismod, justo in mattis ultricies, risus velit"
+      text run at (0,2260) width 371: "pretium ligula, eu sodales libero dolor et massa. Phasellus"
+      text run at (0,2280) width 374: "eros quam, faucibus sed consectetur et, elementum ut erat."
+      text run at (0,2300) width 393: "Morbi fringilla, lorem non fermentum vulputate, quam metus"
+      text run at (0,2320) width 398: "ullamcorper quam, eu porttitor diam metus eget augue. Donec"
+      text run at (0,2340) width 380: "non lorem et arcu adipiscing suscipit. Donec porta euismod"
+      text run at (0,2360) width 344: "magna a fermentum. Suspendisse vestibulum rhoncus"
+      text run at (0,2380) width 393: "bibendum. Nam in nisi eget nulla vestibulum rutrum. Aenean"
+      text run at (0,2400) width 101: "eu libero turpis."
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/scroll-nested-positioned-layer-in-overflow-expected.txt
new file mode 100644 (file)
index 0000000..0838b4c
--- /dev/null
@@ -0,0 +1,19 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (0,42) size 800x558 scrollY 286 scrollHeight 844
+  RenderBlock (positioned) {DIV} at (0,42) size 800x558
+layer at (0,-244) size 571x844 backgroundClip at (0,42) size 800x558 clip at (0,42) size 800x558
+  RenderBlock (positioned) {DIV} at (0,0) size 572x844
+    RenderBlock (anonymous) at (0,0) size 572x20
+      RenderText {#text} at (0,0) size 572x19
+        text run at (0,0) width 572: "This tests that we can scroll to reveal something in a nested positioned block in overflow."
+    RenderBlock {DIV} at (0,20) size 572x800
+    RenderBlock (anonymous) at (0,820) size 572x24
+      RenderButton {INPUT} at (2,2) size 196x20 [bgcolor=#FFFFFF02] [border: (1px solid #4C4C4C)]
+        RenderBlock (anonymous) at (12,3) size 172x14
+          RenderText at (0,0) size 172x14
+            text run at (0,0) width 172: "If you can see this, test has passed"
+      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/scrollRevealButton-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/scrollRevealButton-expected.txt
new file mode 100644 (file)
index 0000000..68ebf2d
--- /dev/null
@@ -0,0 +1,41 @@
+layer at (0,0) size 800x1190
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x1190
+  RenderBlock {HTML} at (0,0) size 800x1190
+    RenderBody {BODY} at (8,8) size 784x1174
+      RenderBlock (anonymous) at (0,0) size 784x20
+        RenderText {#text} at (0,0) size 348x19
+          text run at (0,0) width 348: "This test should scroll recursively to reveal the button."
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {DIV} at (0,20) size 784x500
+      RenderBlock (anonymous) at (0,520) size 784x154
+        RenderPartObject {IFRAME} at (0,0) size 304x154 [border: (2px inset #000000)]
+          layer at (0,0) size 308x316
+            RenderView at (0,0) size 300x150
+          layer at (0,0) size 300x316
+            RenderBlock {HTML} at (0,0) size 300x316
+              RenderBody {BODY} at (8,8) size 284x300
+          layer at (8,8) size 300x300 scrollY 545 scrollHeight 1270
+            RenderBlock {DIV} at (0,0) size 300x300
+              RenderBlock (anonymous) at (0,0) size 300x20
+                RenderText {#text} at (0,0) size 90x19
+                  text run at (0,0) width 90: "overflow:auto"
+              RenderBlock {DIV} at (0,20) size 300x600
+              RenderBlock {DIV} at (0,770) size 300x500
+          layer at (8,83) size 150x150 scrollY 477 scrollHeight 864
+            RenderBlock {DIV} at (0,620) size 150x150
+              RenderBlock (anonymous) at (0,0) size 150x20
+                RenderText {#text} at (0,0) size 90x19
+                  text run at (0,0) width 90: "overflow:auto"
+              RenderBlock {DIV} at (0,20) size 150x500
+              RenderBlock (anonymous) at (0,520) size 150x44
+                RenderBR {BR} at (0,0) size 0x19
+                RenderButton {INPUT} at (2,22) size 56x20 [bgcolor=#FFFFFF02] [border: (1px solid #4C4C4C)]
+                  RenderBlock (anonymous) at (12,3) size 32x14
+                    RenderText at (0,0) size 32x14
+                      text run at (0,0) width 32: "Button"
+                RenderText {#text} at (0,0) size 0x0
+              RenderBlock {DIV} at (0,564) size 150x300
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {DIV} at (0,674) size 784x500
+frame 'fr' scrolled to 0,18
diff --git a/LayoutTests/platform/ios-simulator-wk1/fast/overflow/table-overflow-float-expected.txt b/LayoutTests/platform/ios-simulator-wk1/fast/overflow/table-overflow-float-expected.txt
new file mode 100644 (file)
index 0000000..a1e30f8
--- /dev/null
@@ -0,0 +1,130 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderTable {TABLE} at (0,0) size 106x106
+        RenderTableSection {TBODY} at (0,0) size 106x106
+          RenderTableRow {TR} at (0,2) size 106x102
+            RenderTableCell {TD} at (2,2) size 102x102 [bgcolor=#CCCCCC] [r=0 c=0 rs=1 cs=1]
+      RenderBlock (anonymous) at (0,106) size 784x140
+        RenderText {#text} at (0,0) size 780x39
+          text run at (0,0) width 780: "Here it is: a gray, one-cell, no-width-specified table, with a 100x100 scrolling (overflow:auto) div inside. In this div, there"
+          text run at (0,20) width 379: "are floating (float: left) span tags with content inside (text)."
+        RenderBR {BR} at (378,35) size 1x0
+        RenderBR {BR} at (0,40) size 0x19
+        RenderText {#text} at (0,60) size 758x39
+          text run at (0,60) width 758: "You would expect that the table would expand to fit the defined width of the div tag. But in Safari and Shiira, the table"
+          text run at (0,80) width 200: "expands to fit the height of the "
+        RenderInline {I} at (0,0) size 137x19
+          RenderText {#text} at (199,80) size 137x19
+            text run at (199,80) width 137: "content inside the div"
+        RenderText {#text} at (335,80) size 779x39
+          text run at (335,80) width 444: ", not the height of the div. This behavior does not occur if the content"
+          text run at (0,100) width 88: "is not floated."
+        RenderBR {BR} at (87,115) size 1x0
+        RenderBR {BR} at (0,120) size 0x19
+layer at (11,11) size 100x100 scrollHeight 240
+  RenderBlock {DIV} at (1,1) size 100x100
+    RenderBlock (floating) {SPAN} at (0,0) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,0) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,0) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,20) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,20) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,20) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,40) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,40) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,40) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,60) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,60) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,60) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,80) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,80) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,80) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,100) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,100) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,100) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,120) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,120) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,120) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,140) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,140) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,140) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,160) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,160) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,160) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,180) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,180) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,180) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,200) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (29,200) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (58,200) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
+    RenderBlock (floating) {SPAN} at (0,220) size 30x20
+      RenderText {#text} at (0,0) size 30x19
+        text run at (0,0) width 30: "stuff"
index a4e9910..2bce270 100644 (file)
@@ -38,4 +38,3 @@ layer at (0,0) size 800x1190
               RenderBlock {DIV} at (0,564) size 135x300
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {DIV} at (0,674) size 784x500
-scrolled to 0,388
index 2879b1a..5c8d830 100644 (file)
@@ -1759,9 +1759,9 @@ fast/forms/onselect-textarea.html [ Failure ]
 fast/forms/onselect-textfield.html [ Failure ]
 fast/forms/option-mouseevents.html [ Failure ]
 fast/forms/password-doubleclick-selection.html [ Failure ]
-fast/forms/password-placeholder-text-security.html [ ImageOnlyFailure ]
+fast/forms/password-placeholder-text-security.html [ Pass ImageOnlyFailure ]
 fast/forms/placeholder-position.html [ Failure ]
-fast/forms/radio/indeterminate-radio.html [ Failure ]
+fast/forms/radio/indeterminate-radio.html [ Pass Failure ]
 fast/forms/range/range-drag-when-toggled-disabled.html [ Failure ]
 fast/forms/range/range-drag.html [ Failure ]
 fast/forms/range/range-hit-test-with-padding.html [ Failure ]
@@ -2941,7 +2941,7 @@ fast/css3-text/css3-text-decoration/text-decoration-line-through-mispositioned.h
 fast/forms/select-size.html [ ImageOnlyFailure ]
 fast/inline/inline-with-outline-offset.html [ ImageOnlyFailure ]
 fast/inline/outline-corners-with-offset.html [ ImageOnlyFailure ]
-fast/overflow/overflow-hidden-scroll-into-view.html [ ImageOnlyFailure ]
+fast/overflow/overflow-hidden-scroll-into-view.html [ Pass ImageOnlyFailure ]
 fast/regions/layers/region-removed-during-animation.html [ ImageOnlyFailure ]
 fast/sub-pixel/table-with-subpixel-cell-size.html [ ImageOnlyFailure ]
 svg/text/tspan-multiple-outline.svg [ ImageOnlyFailure ]
index 64caaba..b939c57 100644 (file)
@@ -1,3 +1,57 @@
+2016-06-20  Simon Fraser  <simon.fraser@apple.com>
+
+        Focus event dispatched in iframe causes parent document to scroll incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=158629
+        rdar://problem/26521616
+
+        Reviewed by Tim Horton.
+
+        When focussing elements in iframes, the page could scroll to an incorrect location.
+        This happened because code in Element::focus() tried to disable scrolling on focus,
+        but did so only for the current frame, so ancestor frames got programmatically scrolled.
+        On iOS we handle the scrolling in the UI process, so never want the web process to
+        do programmatic scrolling.
+
+        Fix by changing the focus and cache restore code to use SelectionRevealMode::DoNotReveal,
+        rather than manually prohibiting frame scrolling. Pass SelectionRevealMode through various callers,
+        and use RevealUpToMainFrame for iOS, allowing the UI process to do the zoomToRect: for the main frame.
+
+        Tests: fast/forms/ios/focus-input-in-iframe.html
+               fast/forms/ios/programmatic-focus-input-in-iframe.html
+
+        * dom/Document.h:
+        * dom/Element.cpp:
+        (WebCore::Element::scrollIntoView):
+        (WebCore::Element::scrollIntoViewIfNeeded):
+        (WebCore::Element::scrollIntoViewIfNotVisible):
+        (WebCore::Element::focus):
+        (WebCore::Element::updateFocusAppearance):
+        * dom/Element.h:
+        * editing/Editor.cpp:
+        (WebCore::Editor::insertTextWithoutSendingTextEvent):
+        (WebCore::Editor::revealSelectionAfterEditingOperation):
+        (WebCore::Editor::findStringAndScrollToVisible):
+        * editing/FrameSelection.cpp:
+        (WebCore::FrameSelection::updateAndRevealSelection):
+        (WebCore::FrameSelection::revealSelection):
+        (WebCore::FrameSelection::FrameSelection): Deleted.
+        * editing/FrameSelection.h:
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::updateFocusAppearance):
+        * html/HTMLTextAreaElement.cpp:
+        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
+        * page/ContextMenuController.cpp:
+        (WebCore::ContextMenuController::contextMenuItemSelected):
+        * page/FrameView.cpp:
+        (WebCore::FrameView::scrollToAnchor):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::scrollRectToVisible):
+        (WebCore::RenderLayer::autoscroll):
+        * rendering/RenderLayer.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::scrollRectToVisible):
+        * rendering/RenderObject.h:
+
 2016-06-21  Frederic Wang  <fwang@igalia.com>
 
         Implement RenderMathMLOperator::layoutBlock
index 8ffdd4c..57276be 100644 (file)
@@ -282,11 +282,6 @@ enum class SelectionRestorationMode {
     SetDefault,
 };
 
-enum class SelectionRevealMode {
-    Reveal,
-    DoNotReveal
-};
-
 enum class HttpEquivPolicy {
     Enabled,
     DisabledBySettings,
index 4806929..b8be71c 100644 (file)
@@ -639,9 +639,9 @@ void Element::scrollIntoView(bool alignToTop)
     LayoutRect bounds = renderer()->anchorRect();
     // Align to the top / bottom and to the closest edge.
     if (alignToTop)
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
     else
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignBottomAlways);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignBottomAlways);
 }
 
 void Element::scrollIntoViewIfNeeded(bool centerIfNeeded)
@@ -653,9 +653,9 @@ void Element::scrollIntoViewIfNeeded(bool centerIfNeeded)
 
     LayoutRect bounds = renderer()->anchorRect();
     if (centerIfNeeded)
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignCenterIfNeeded, ScrollAlignment::alignCenterIfNeeded);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignCenterIfNeeded, ScrollAlignment::alignCenterIfNeeded);
     else
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
 }
 
 void Element::scrollIntoViewIfNotVisible(bool centerIfNotVisible)
@@ -667,9 +667,9 @@ void Element::scrollIntoViewIfNotVisible(bool centerIfNotVisible)
     
     LayoutRect bounds = renderer()->anchorRect();
     if (centerIfNotVisible)
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignCenterIfNotVisible, ScrollAlignment::alignCenterIfNotVisible);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignCenterIfNotVisible, ScrollAlignment::alignCenterIfNotVisible);
     else
-        renderer()->scrollRectToVisible(bounds, ScrollAlignment::alignToEdgeIfNotVisible, ScrollAlignment::alignToEdgeIfNotVisible);
+        renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, bounds, ScrollAlignment::alignToEdgeIfNotVisible, ScrollAlignment::alignToEdgeIfNotVisible);
 }
     
 void Element::scrollByUnits(int units, ScrollGranularity granularity)
@@ -2245,20 +2245,18 @@ void Element::focus(bool restorePreviousSelection, FocusDirection direction)
     }
         
     cancelFocusAppearanceUpdate();
+
+    SelectionRevealMode revealMode = SelectionRevealMode::Reveal;
 #if PLATFORM(IOS)
     // Focusing a form element triggers animation in UIKit to scroll to the right position.
     // Calling updateFocusAppearance() would generate an unnecessary call to ScrollView::setScrollPosition(),
     // which would jump us around during this animation. See <rdar://problem/6699741>.
-    FrameView* view = document().view();
-    bool isFormControl = view && is<HTMLFormControlElement>(*this);
-    if (isFormControl)
-        view->setProhibitsScrolling(true);
-#endif
-    updateFocusAppearance(restorePreviousSelection ? SelectionRestorationMode::Restore : SelectionRestorationMode::SetDefault);
-#if PLATFORM(IOS)
+    bool isFormControl = is<HTMLFormControlElement>(*this);
     if (isFormControl)
-        view->setProhibitsScrolling(false);
+        revealMode = SelectionRevealMode::RevealUpToMainFrame;
 #endif
+
+    updateFocusAppearance(restorePreviousSelection ? SelectionRestorationMode::Restore : SelectionRestorationMode::SetDefault, revealMode);
 }
 
 void Element::updateFocusAppearanceAfterAttachIfNeeded()
@@ -2290,11 +2288,10 @@ void Element::updateFocusAppearance(SelectionRestorationMode, SelectionRevealMod
         
         if (frame->selection().shouldChangeSelection(newSelection)) {
             frame->selection().setSelection(newSelection, FrameSelection::defaultSetSelectionOptions(), Element::defaultFocusTextStateChangeIntent());
-            if (revealMode == SelectionRevealMode::Reveal)
-                frame->selection().revealSelection();
+            frame->selection().revealSelection(revealMode);
         }
-    } else if (renderer() && !renderer()->isWidget() && revealMode == SelectionRevealMode::Reveal)
-        renderer()->scrollRectToVisible(renderer()->anchorRect());
+    } else if (renderer() && !renderer()->isWidget())
+        renderer()->scrollRectToVisible(revealMode, renderer()->anchorRect());
 }
 
 void Element::blur()
index b31023b..30e053e 100644 (file)
@@ -60,6 +60,12 @@ enum SpellcheckAttributeState {
     SpellcheckAttributeDefault
 };
 
+enum class SelectionRevealMode {
+    Reveal,
+    RevealUpToMainFrame, // Scroll overflow and iframes, but not the main frame.
+    DoNotReveal
+};
+
 class Element : public ContainerNode {
 public:
     static Ref<Element> create(const QualifiedName&, Document&);
index f666330..cd7ff53 100644 (file)
@@ -1204,7 +1204,7 @@ bool Editor::insertTextWithoutSendingTextEvent(const String& text, bool selectIn
             // Reveal the current selection
             if (Frame* editedFrame = document->frame())
                 if (Page* page = editedFrame->page())
-                    page->focusController().focusedOrMainFrame().selection().revealSelection(ScrollAlignment::alignCenterIfNeeded);
+                    page->focusController().focusedOrMainFrame().selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignCenterIfNeeded);
         }
     }
 
@@ -2799,7 +2799,7 @@ void Editor::revealSelectionAfterEditingOperation(const ScrollAlignment& alignme
     if (m_ignoreCompositionSelectionChange)
         return;
 
-    m_frame.selection().revealSelection(alignment, revealExtentOption);
+    m_frame.selection().revealSelection(SelectionRevealMode::Reveal, alignment, revealExtentOption);
 }
 
 void Editor::setIgnoreCompositionSelectionChange(bool ignore, RevealSelection shouldRevealExistingSelection)
@@ -3147,7 +3147,7 @@ RefPtr<Range> Editor::findStringAndScrollToVisible(const String& target, Range*
     if (!nextMatch)
         return nullptr;
 
-    nextMatch->firstNode()->renderer()->scrollRectToVisible(nextMatch->absoluteBoundingBox(),
+    nextMatch->firstNode()->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, nextMatch->absoluteBoundingBox(),
         ScrollAlignment::alignCenterIfNeeded, ScrollAlignment::alignCenterIfNeeded);
 
     return nextMatch;
index a56e6b7..33834ad 100644 (file)
@@ -127,7 +127,6 @@ FrameSelection::FrameSelection(Frame* frame)
 #if PLATFORM(IOS)
     , m_updateAppearanceEnabled(false)
     , m_caretBlinks(true)
-    , m_scrollingSuppressCount(0)
 #endif
 {
     if (shouldAlwaysUseDirectionalSelection(m_frame))
@@ -388,7 +387,7 @@ void FrameSelection::updateAndRevealSelection(const AXTextStateChangeIntent& int
         else
             alignment = m_alwaysAlignCursorOnScrollWhenRevealingSelection ? ScrollAlignment::alignTopAlways : ScrollAlignment::alignToEdgeIfNeeded;
 
-        revealSelection(alignment, RevealExtent);
+        revealSelection(SelectionRevealMode::Reveal, alignment, RevealExtent);
     }
 
     notifyAccessibilityForSelectionChange(intent);
@@ -2290,8 +2289,11 @@ HTMLFormElement* FrameSelection::currentForm() const
     return scanForForm(start);
 }
 
-void FrameSelection::revealSelection(const ScrollAlignment& alignment, RevealExtentOption revealExtentOption)
+void FrameSelection::revealSelection(SelectionRevealMode revealMode, const ScrollAlignment& alignment, RevealExtentOption revealExtentOption)
 {
+    if (revealMode == SelectionRevealMode::DoNotReveal)
+        return;
+
     LayoutRect rect;
 
     switch (m_selection.selectionType()) {
@@ -2312,7 +2314,7 @@ void FrameSelection::revealSelection(const ScrollAlignment& alignment, RevealExt
         if (RenderLayer* layer = start.deprecatedNode()->renderer()->enclosingLayer()) {
             if (!m_scrollingSuppressCount) {
                 layer->setAdjustForIOSCaretWhenScrolling(true);
-                layer->scrollRectToVisible(rect, alignment, alignment);
+                layer->scrollRectToVisible(revealMode, rect, alignment, alignment);
                 layer->setAdjustForIOSCaretWhenScrolling(false);
                 updateAppearance();
                 if (m_frame->page())
@@ -2323,7 +2325,7 @@ void FrameSelection::revealSelection(const ScrollAlignment& alignment, RevealExt
         // FIXME: This code only handles scrolling the startContainer's layer, but
         // the selection rect could intersect more than just that.
         // See <rdar://problem/4799899>.
-        if (start.deprecatedNode()->renderer()->scrollRectToVisible(rect, alignment, alignment))
+        if (start.deprecatedNode()->renderer()->scrollRectToVisible(revealMode, rect, alignment, alignment))
             updateAppearance();
 #endif
     }
index 95ac377..f78f872 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "AXTextStateChangeIntent.h"
 #include "EditingStyle.h"
+#include "Element.h"
 #include "IntRect.h"
 #include "LayoutRect.h"
 #include "Range.h"
@@ -266,7 +267,7 @@ public:
 
     WEBCORE_EXPORT HTMLFormElement* currentForm() const;
 
-    WEBCORE_EXPORT void revealSelection(const ScrollAlignment& = ScrollAlignment::alignCenterIfNeeded, RevealExtentOption = DoNotRevealExtent);
+    WEBCORE_EXPORT void revealSelection(SelectionRevealMode = SelectionRevealMode::Reveal, const ScrollAlignment& = ScrollAlignment::alignCenterIfNeeded, RevealExtentOption = DoNotRevealExtent);
     WEBCORE_EXPORT void setSelectionFromNone();
 
     bool shouldShowBlockCursor() const { return m_shouldShowBlockCursor; }
@@ -350,7 +351,7 @@ private:
     bool m_updateAppearanceEnabled : 1;
     bool m_caretBlinks : 1;
     Color m_caretColor;
-    int m_scrollingSuppressCount;
+    int m_scrollingSuppressCount { 0 };
 #endif
 };
 
index 526c2ef..023ac33 100644 (file)
@@ -404,8 +404,8 @@ void HTMLInputElement::updateFocusAppearance(SelectionRestorationMode restoratio
             select(Element::defaultFocusTextStateChangeIntent());
         else
             restoreCachedSelection();
-        if (document().frame() && revealMode == SelectionRevealMode::Reveal)
-            document().frame()->selection().revealSelection();
+        if (document().frame())
+            document().frame()->selection().revealSelection(revealMode);
     } else
         HTMLTextFormControlElement::updateFocusAppearance(restorationMode, revealMode);
 }
index 255bed6..f92108a 100644 (file)
@@ -260,8 +260,8 @@ void HTMLTextAreaElement::updateFocusAppearance(SelectionRestorationMode restora
     } else
         restoreCachedSelection(Element::defaultFocusTextStateChangeIntent());
 
-    if (document().frame() && revealMode == SelectionRevealMode::Reveal)
-        document().frame()->selection().revealSelection();
+    if (document().frame())
+        document().frame()->selection().revealSelection(revealMode);
 }
 
 void HTMLTextAreaElement::defaultEventHandler(Event* event)
index ef22e52..394bb2c 100644 (file)
@@ -372,7 +372,7 @@ void ContextMenuController::contextMenuItemSelected(ContextMenuAction action, co
             ASSERT(document);
             RefPtr<ReplaceSelectionCommand> command = ReplaceSelectionCommand::create(*document, createFragmentFromMarkup(*document, title, ""), replaceOptions);
             applyCommand(command);
-            frame->selection().revealSelection(ScrollAlignment::alignToEdgeIfNeeded);
+            frame->selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignToEdgeIfNeeded);
         }
         break;
     }
index 106aebf..a311db0 100644 (file)
@@ -3050,11 +3050,11 @@ void FrameView::scrollToAnchor()
     // Scroll nested layers and frames to reveal the anchor.
     // Align to the top and to the closest side (this matches other browsers).
     if (anchorNode->renderer()->style().isHorizontalWritingMode())
-        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
+        anchorNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, rect, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
     else if (anchorNode->renderer()->style().isFlippedBlocksWritingMode())
-        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignRightAlways, ScrollAlignment::alignToEdgeIfNeeded);
+        anchorNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, rect, ScrollAlignment::alignRightAlways, ScrollAlignment::alignToEdgeIfNeeded);
     else
-        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignLeftAlways, ScrollAlignment::alignToEdgeIfNeeded);
+        anchorNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, rect, ScrollAlignment::alignLeftAlways, ScrollAlignment::alignToEdgeIfNeeded);
 
     if (AXObjectCache* cache = frame().document()->existingAXObjectCache())
         cache->handleScrolledToAnchor(anchorNode.get());
index 929014c..fa0a15a 100644 (file)
@@ -80,6 +80,7 @@
 #include "HitTestRequest.h"
 #include "HitTestResult.h"
 #include "Logging.h"
+#include "MainFrame.h"
 #include "NoEventDispatchAssertion.h"
 #include "OverflowEvent.h"
 #include "OverlapTestRequestClient.h"
@@ -2490,7 +2491,7 @@ bool RenderLayer::allowsCurrentScroll() const
     return box->hasHorizontalOverflow() || box->hasVerticalOverflow();
 }
 
-void RenderLayer::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignment& alignX, const ScrollAlignment& alignY)
+void RenderLayer::scrollRectToVisible(SelectionRevealMode revealMode, const LayoutRect& rect, const ScrollAlignment& alignX, const ScrollAlignment& alignY)
 {
     LOG_WITH_STREAM(Scrolling, stream << "Layer " << this << " scrollRectToVisible " << rect);
 
@@ -2550,6 +2551,9 @@ void RenderLayer::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignm
                     parentLayer = nullptr;
             }
         } else {
+            if (revealMode == SelectionRevealMode::RevealUpToMainFrame && frameView.frame().isMainFrame())
+                return;
+
 #if !PLATFORM(IOS)
             LayoutRect viewRect = frameView.visibleContentRect();
             LayoutRect visibleRectRelativeToDocument = viewRect;
@@ -2574,7 +2578,7 @@ void RenderLayer::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignm
     }
     
     if (parentLayer)
-        parentLayer->scrollRectToVisible(newRect, alignX, alignY);
+        parentLayer->scrollRectToVisible(revealMode, newRect, alignX, alignY);
 }
 
 void RenderLayer::updateCompositingLayersAfterScroll()
@@ -2667,7 +2671,7 @@ LayoutRect RenderLayer::getRectToExpose(const LayoutRect &visibleRect, const Lay
 void RenderLayer::autoscroll(const IntPoint& position)
 {
     IntPoint currentDocumentPosition = renderer().view().frameView().windowToContents(position);
-    scrollRectToVisible(LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
+    scrollRectToVisible(SelectionRevealMode::Reveal, LayoutRect(currentDocumentPosition, LayoutSize(1, 1)), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
 }
 
 bool RenderLayer::canResize() const
index ce190bf..ee93292 100644 (file)
@@ -205,7 +205,7 @@ public:
 
     void availableContentSizeChanged(AvailableSizeChangeReason) override;
 
-    void scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX, const ScrollAlignment& alignY);
+    void scrollRectToVisible(SelectionRevealMode, const LayoutRect&, const ScrollAlignment& alignX, const ScrollAlignment& alignY);
 
     LayoutRect getRectToExpose(const LayoutRect& visibleRect, const LayoutRect& visibleRectRelativeToDocument, const LayoutRect& exposeRect, const ScrollAlignment& alignX, const ScrollAlignment& alignY);
 
index cbd2e64..1b9cbb8 100644 (file)
@@ -358,13 +358,16 @@ RenderLayer* RenderObject::enclosingLayer() const
     return nullptr;
 }
 
-bool RenderObject::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignment& alignX, const ScrollAlignment& alignY)
+bool RenderObject::scrollRectToVisible(SelectionRevealMode revealMode, const LayoutRect& rect, const ScrollAlignment& alignX, const ScrollAlignment& alignY)
 {
+    if (revealMode == SelectionRevealMode::DoNotReveal)
+        return false;
+
     RenderLayer* enclosingLayer = this->enclosingLayer();
     if (!enclosingLayer)
         return false;
 
-    enclosingLayer->scrollRectToVisible(rect, alignX, alignY);
+    enclosingLayer->scrollRectToVisible(revealMode, rect, alignX, alignY);
     return true;
 }
 
index e3a7d7f..40fe111 100644 (file)
@@ -155,7 +155,7 @@ public:
     WEBCORE_EXPORT RenderLayer* enclosingLayer() const;
 
     // Scrolling is a RenderBox concept, however some code just cares about recursively scrolling our enclosing ScrollableArea(s).
-    WEBCORE_EXPORT bool scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded);
+    WEBCORE_EXPORT bool scrollRectToVisible(SelectionRevealMode, const LayoutRect&, const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded);
 
     // Convenience function for getting to the nearest enclosing box of a RenderObject.
     RenderBox& enclosingBox() const;
index 518eb69..4cf28bb 100644 (file)
@@ -1,3 +1,21 @@
+2016-06-20  Simon Fraser  <simon.fraser@apple.com>
+
+        Focus event dispatched in iframe causes parent document to scroll incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=158629
+        rdar://problem/26521616
+
+        Reviewed by Tim Horton.
+        
+        Pass SelectionRevealMode::Reveal in existing code.
+
+        * WebView/WebFrame.mm:
+        (-[WebFrame _scrollDOMRangeToVisible:]):
+        (-[WebFrame _scrollDOMRangeToVisible:withInset:]):
+        (-[WebFrame revealSelectionAtExtent:]):
+        * WebView/WebHTMLView.mm:
+        (-[WebHTMLView jumpToSelection:]):
+        (-[WebHTMLView centerSelectionInVisibleArea:]):
+
 2016-06-21  Amir Alavi  <aalavi@apple.com>
 
         Upstream WKHTTPCookiesForURL from WebKitSystemInterface to OpenSource
index 9cbf309..90a1bcc 100644 (file)
@@ -717,12 +717,12 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
         
     if (startNode && startNode->renderer()) {
 #if !PLATFORM(IOS)
-        startNode->renderer()->scrollRectToVisible(enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
+        startNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
 #else
         RenderLayer* layer = startNode->renderer()->enclosingLayer();
         if (layer) {
             layer->setAdjustForIOSCaretWhenScrolling(true);
-            startNode->renderer()->scrollRectToVisible(enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
+            startNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
             layer->setAdjustForIOSCaretWhenScrolling(false);
             _private->coreFrame->selection().setCaretRectNeedsUpdate();
             _private->coreFrame->selection().updateAppearance();
@@ -741,7 +741,7 @@ static inline WebDataSource *dataSource(DocumentLoader* loader)
         RenderLayer* layer = startNode->renderer()->enclosingLayer();
         if (layer) {
             layer->setAdjustForIOSCaretWhenScrolling(true);
-            startNode->renderer()->scrollRectToVisible(enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
+            startNode->renderer()->scrollRectToVisible(SelectionRevealMode::Reveal, enclosingIntRect(rangeRect), ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded);
             layer->setAdjustForIOSCaretWhenScrolling(false);
 
             Frame *coreFrame = core(self);
@@ -1375,7 +1375,7 @@ static WebFrameLoadType toWebFrameLoadType(FrameLoadType frameLoadType)
 {
     WebCore::Frame *frame = core(self);
     RevealExtentOption revealExtentOption = revealExtent ? RevealExtent : DoNotRevealExtent;
-    frame->selection().revealSelection(ScrollAlignment::alignToEdgeIfNeeded, revealExtentOption);
+    frame->selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignToEdgeIfNeeded, revealExtentOption);
 }
 
 - (void)resetSelection
index 7ef1a30..ff41bdd 100644 (file)
@@ -3146,7 +3146,7 @@ WEBCORE_COMMAND(toggleUnderline)
     COMMAND_PROLOGUE
 
     if (Frame* coreFrame = core([self _frame]))
-        coreFrame->selection().revealSelection(ScrollAlignment::alignCenterAlways);
+        coreFrame->selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignCenterAlways);
 }
 
 #if !PLATFORM(IOS)
@@ -5345,7 +5345,7 @@ static PassRefPtr<KeyboardEvent> currentKeyboardEvent(Frame* coreFrame)
     COMMAND_PROLOGUE
 
     if (Frame* coreFrame = core([self _frame]))
-        coreFrame->selection().revealSelection(ScrollAlignment::alignCenterAlways);
+        coreFrame->selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignCenterAlways);
 }
 
 #if !PLATFORM(IOS)
index 7791f85..0a4f3d1 100644 (file)
@@ -3972,7 +3972,7 @@ HRESULT WebView::centerSelectionInVisibleArea(_In_opt_ IUnknown* /* sender */)
     if (!coreFrame)
         return E_UNEXPECTED;
 
-    coreFrame->selection().revealSelection(ScrollAlignment::alignCenterAlways);
+    coreFrame->selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignCenterAlways);
     return S_OK;
 }
 
index 4e8c9ca..989ce66 100644 (file)
@@ -1,3 +1,16 @@
+2016-06-20  Simon Fraser  <simon.fraser@apple.com>
+
+        Focus event dispatched in iframe causes parent document to scroll incorrectly
+        https://bugs.webkit.org/show_bug.cgi?id=158629
+        rdar://problem/26521616
+
+        Reviewed by Tim Horton.
+
+        Pass SelectionRevealMode::Reveal in existing code.
+
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::centerSelectionInVisibleArea):
+
 2016-06-21  Said Abou-Hallawa  <sabouhallawa@apple,com>
 
         [iOS][WK2] When an animation frame is missed, the UI process should immediately notify the Web process once a frame is committed
index 45b8170..fffd3d0 100644 (file)
@@ -2396,7 +2396,7 @@ bool WebPage::scrollBy(uint32_t scrollDirection, uint32_t scrollGranularity)
 void WebPage::centerSelectionInVisibleArea()
 {
     Frame& frame = m_page->focusController().focusedOrMainFrame();
-    frame.selection().revealSelection(ScrollAlignment::alignCenterAlways);
+    frame.selection().revealSelection(SelectionRevealMode::Reveal, ScrollAlignment::alignCenterAlways);
     m_findController.showFindIndicatorInSelection();
 }