[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

tony at chromium.org tony at chromium.org
Wed Dec 22 11:21:10 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit a397befcb49d8f17624bcf3d84119a30d0d62494
Author: tony at chromium.org <tony at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jul 20 08:17:32 2010 +0000

    2010-07-20  Tony Chang  <tony at chromium.org>
    
            Reviewed by Dan Bernstein.
    
            [chromium] crash in Position::getInlineBoxAndOffset
            https://bugs.webkit.org/show_bug.cgi?id=42202
    
            * editing/selection/firstRect-crash-expected.txt: Added.
            * editing/selection/firstRect-crash.html: Added.
            * platform/mac/editing/input/caret-primary-bidi-expected.txt: Fix some negative ranges.
            * platform/mac/editing/input/range-for-empty-document-expected.txt:
            * platform/mac/editing/selection/move-left-right-expected.txt: Removed since we now match the shared expected results.
            * platform/win/editing/selection/move-left-right-expected.txt: Removed since it's the same as the shared expected results.
    2010-07-20  Tony Chang  <tony at chromium.org>
    
            Reviewed by Dan Bernstein.
    
            [chromium] crash in Position::getInlineBoxAndOffset
            https://bugs.webkit.org/show_bug.cgi?id=42202
    
            Test: editing/selection/firstRect-crash.html
            Manual test: win/contextmenu-key2.html
    
            * page/EventHandler.cpp: Code no longer needed
            * page/Frame.cpp:
            (WebCore::Frame::firstRectForRange): Normalize Positions to VisiblePositions because
                Positions may be pointing to nodes that have no renderer.  If there's no renderer,
                getInlineBoxAndOffset will crash.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@63731 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 21a6751..1d663b7 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,17 @@
+2010-07-20  Tony Chang  <tony at chromium.org>
+
+        Reviewed by Dan Bernstein.
+
+        [chromium] crash in Position::getInlineBoxAndOffset
+        https://bugs.webkit.org/show_bug.cgi?id=42202
+
+        * editing/selection/firstRect-crash-expected.txt: Added.
+        * editing/selection/firstRect-crash.html: Added.
+        * platform/mac/editing/input/caret-primary-bidi-expected.txt: Fix some negative ranges.
+        * platform/mac/editing/input/range-for-empty-document-expected.txt:
+        * platform/mac/editing/selection/move-left-right-expected.txt: Removed since we now match the shared expected results.
+        * platform/win/editing/selection/move-left-right-expected.txt: Removed since it's the same as the shared expected results.
+
 2010-07-20  Nikolas Zimmermann  <nzimmermann at rim.com>
 
         Reviewed by Maciej Stachowiak.
diff --git a/LayoutTests/editing/selection/firstRect-crash-expected.txt b/LayoutTests/editing/selection/firstRect-crash-expected.txt
new file mode 100644
index 0000000..863bbee
--- /dev/null
+++ b/LayoutTests/editing/selection/firstRect-crash-expected.txt
@@ -0,0 +1,3 @@
+This test passes if we don't crash.
+
+PASSED
diff --git a/LayoutTests/editing/selection/firstRect-crash.html b/LayoutTests/editing/selection/firstRect-crash.html
new file mode 100644
index 0000000..32763cb
--- /dev/null
+++ b/LayoutTests/editing/selection/firstRect-crash.html
@@ -0,0 +1,20 @@
+<body>
+<p>This test passes if we don't crash.</p>
+<h2 id='h2' class="sidebar-title">Trending:</h2>
+<p id='p'>test</p>
+<script>
+function runTest()
+{
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    window.getSelection().setBaseAndExtent(
+        document.getElementById("h2").firstChild, 9,
+        document.getElementById("p"), 0);
+    document.getElementById("p").style.display = "none";
+
+    document.getElementById("h2").innerText = "PASSED";
+}
+runTest();
+</script>
+</body>
diff --git a/LayoutTests/platform/mac/editing/input/caret-primary-bidi-expected.txt b/LayoutTests/platform/mac/editing/input/caret-primary-bidi-expected.txt
index 25646db..70bbad5 100644
--- a/LayoutTests/platform/mac/editing/input/caret-primary-bidi-expected.txt
+++ b/LayoutTests/platform/mac/editing/input/caret-primary-bidi-expected.txt
@@ -1,6 +1,6 @@
-0: -1,572,0,28
-1: -1,572,0,28
-2: 8,478,0,28
+0: 125,508,0,28
+1: 21,564,0,28
+2: 36,564,0,28
 3: 49,564,0,28
 4: 157,564,0,28
 5: 143,564,0,28
diff --git a/LayoutTests/platform/mac/editing/input/range-for-empty-document-expected.txt b/LayoutTests/platform/mac/editing/input/range-for-empty-document-expected.txt
index c889620..2f4cd28 100644
--- a/LayoutTests/platform/mac/editing/input/range-for-empty-document-expected.txt
+++ b/LayoutTests/platform/mac/editing/input/range-for-empty-document-expected.txt
@@ -1,2 +1,2 @@
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-(0, 0): 0,582,0,18
+(0, 0): 8,574,0,18
diff --git a/LayoutTests/platform/mac/editing/selection/move-left-right-expected.txt b/LayoutTests/platform/mac/editing/selection/move-left-right-expected.txt
deleted file mode 100644
index bbff7f4..0000000
--- a/LayoutTests/platform/mac/editing/selection/move-left-right-expected.txt
+++ /dev/null
@@ -1,250 +0,0 @@
-Test 1, LTR:
-  Moving right: "\n        abc\n    "[9, 10, 11, 12]
-  Moving left:  "\n        abc\n    "[12, 11, 10, 9]
-Test 1, RTL:
-  Moving left: "\n        abc\n    "[9, 11, 10, 12]
-  Moving right:  "\n        abc\n    "[12, 10, 11, 9]
-Test 2, LTR:
-  Moving right: "\n        ABC\n    "[9, 11, 10, 12]
-  Moving left:  "\n        ABC\n    "[12, 10, 11, 9]
-Test 2, RTL:
-  Moving left: "\n        ABC\n    "[9, 10, 11, 12]
-  Moving right:  "\n        ABC\n    "[12, 11, 10, 9]
-Test 3, LTR:
-  Moving right: <DIV>[0], "abc\n    "[0, 1, 2, 3]
-  Moving left:  "abc\n    "[3, 2, 1, 0], <DIV>[0]
-Test 3, RTL:
-  Moving left: <DIV>[0], "abc\n    "[0, 2, 1, 3]
-  Moving right:  "abc\n    "[3, 1, 2, 0], <DIV>[0]
-Test 4, LTR:
-  Moving right: <DIV>[0], "ABC\n    "[0, 2, 1, 3]
-  Moving left:  "ABC\n    "[3, 1, 2, 0], <DIV>[0]
-Test 4, RTL:
-  Moving left: <DIV>[0], "ABC\n    "[0, 1, 2, 3]
-  Moving right:  "ABC\n    "[3, 2, 1, 0], <DIV>[0]
-Test 5, LTR:
-  Moving right: "\n        abcABCdef\n    "[9, 10, 11, 12, 14, 13, 15, 16, 17, 18]
-  Moving left:  "\n        abcABCdef\n    "[18, 17, 16, 15, 13, 14, 12, 11, 10, 9]
-Test 5, RTL:
-  Moving left: "\n        abcABCdef\n    "[9, 11, 10, 12, 13, 14, 15, 17, 16, 18]
-  Moving right:  "\n        abcABCdef\n    "[18, 16, 17, 15, 14, 13, 12, 10, 11, 9]
-Test 6, LTR:
-  Moving right: "\n        ABCabcDEF\n    "[9, 11, 10, 12, 13, 14, 15, 17, 16, 18]
-  Moving left:  "\n        ABCabcDEF\n    "[18, 16, 17, 15, 14, 13, 12, 10, 11, 9]
-Test 6, RTL:
-  Moving left: "\n        ABCabcDEF\n    "[9, 10, 11, 12, 14, 13, 15, 16, 17, 18]
-  Moving right:  "\n        ABCabcDEF\n    "[18, 17, 16, 15, 13, 14, 12, 11, 10, 9]
-Test 7, LTR:
-  Moving right: "\n        abcABCDEF\n    "[9, 10, 11, 12, 17, 16, 15, 14, 13, 18]
-  Moving left:  "\n        abcABCDEF\n    "[18, 13, 14, 15, 16, 17, 12, 11, 10, 9]
-Test 7, RTL:
-  Moving left: "\n        abcABCDEF\n    "[9, 11, 10, 12, 13, 14, 15, 16, 17, 18]
-  Moving right:  "\n        abcABCDEF\n    "[18, 17, 16, 15, 14, 13, 12, 10, 11, 9]
-Test 8, LTR:
-  Moving right: "\n        ABCabcdef\n    "[9, 11, 10, 12, 13, 14, 15, 16, 17, 18]
-  Moving left:  "\n        ABCabcdef\n    "[18, 17, 16, 15, 14, 13, 12, 10, 11, 9]
-Test 8, RTL:
-  Moving left: "\n        ABCabcdef\n    "[9, 10, 11, 12, 17, 16, 15, 14, 13, 18]
-  Moving right:  "\n        ABCabcdef\n    "[18, 13, 14, 15, 16, 17, 12, 11, 10, 9]
-Test 9, LTR:
-  Moving right: "abc"[0, 1, 2, 3], "ABCdef\n    "[2, 1, 3, 4, 5, 6]
-  Moving left:  "ABCdef\n    "[6, 5, 4, 3, 1, 2], "abc"[3, 2, 1, 0]
-Test 9, RTL:
-  Moving left: "abc"[0, 2, 1, 3], "ABCdef\n    "[1, 2, 3, 5, 4, 6]
-  Moving right:  "ABCdef\n    "[6, 4, 5, 3, 2, 1], "abc"[3, 1, 2, 0]
-Test 10, LTR:
-  Moving right: "ABC"[0, 2, 1, 3], "abcDEF\n    "[1, 2, 3, 5, 4, 6]
-  Moving left:  "abcDEF\n    "[6, 4, 5, 3, 2, 1], "ABC"[3, 1, 2, 0]
-Test 10, RTL:
-  Moving left: "ABC"[0, 1, 2, 3], "abcDEF\n    "[2, 1, 3, 4, 5, 6]
-  Moving right:  "abcDEF\n    "[6, 5, 4, 3, 1, 2], "ABC"[3, 2, 1, 0]
-Test 11, LTR:
-  Moving right: "abcABC123DEFdef\n    "[0, 1, 2, 3, 11, 10, 6, 7, 8, 9, 5, 4, 12, 13, 14, 15]
-  Moving left:  "abcABC123DEFdef\n    "[15, 14, 13, 12, 4, 5, 9, 8, 7, 6, 10, 11, 3, 2, 1, 0]
-Test 11, RTL:
-  Moving left: "abcABC123DEFdef\n    "[0, 2, 1, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 14, 13, 15]
-  Moving right:  "abcABC123DEFdef\n    "[15, 13, 14, 12, 11, 10, 9, 7, 8, 6, 5, 4, 3, 1, 2, 0]
-Test 12, LTR:
-  Moving right: "abcABC123\n    "[0, 1, 2, 3, 7, 8, 5, 4, 9]
-  Moving left:  "abcABC123\n    "[9, 4, 5, 8, 7, 3, 2, 1, 0]
-Test 12, RTL:
-  Moving left: "abcABC123\n    "[0, 2, 1, 3, 4, 5, 6, 8, 7, 9]
-  Moving right:  "abcABC123\n    "[9, 7, 8, 6, 5, 4, 3, 1, 2, 0]
-Test 13, LTR:
-  Moving right: "abcABC123def\n    "[0, 1, 2, 3, 7, 8, 5, 4, 9, 10, 11, 12]
-  Moving left:  "abcABC123def\n    "[12, 11, 10, 9, 4, 5, 8, 7, 6, 2, 1, 0]
-WARNING: Moving to the left did not visit the same positions in reverse order as moving to the right.
-Test 13, RTL:
-  Moving left: "abcABC123def\n    "[0, 2, 1, 3, 4, 5, 6, 11, 10, 9, 8, 7, 12]
-  Moving right:  "abcABC123def\n    "[12, 7, 8, 9, 10, 11, 6, 5, 4, 3, 1, 2, 0]
-Test 14, LTR:
-  Moving right: "ABC123DEFabcGHI456JLM\n    "[0, 8, 7, 3, 4, 5, 6, 2, 1, 9, 10, 11, 12, 20, 19, 15, 16, 17, 18, 14, 13, 21]
-  Moving left:  "ABC123DEFabcGHI456JLM\n    "[21, 13, 14, 18, 17, 16, 15, 19, 20, 12, 11, 10, 9, 1, 2, 6, 5, 4, 3, 7, 8, 0]
-Test 14, RTL:
-  Moving left: "ABC123DEFabcGHI456JLM\n    "[0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15, 17, 16, 18, 19, 20, 21]
-  Moving right:  "ABC123DEFabcGHI456JLM\n    "[21, 20, 19, 18, 16, 17, 15, 14, 13, 12, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0]
-Test 15, LTR:
-  Moving right: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 10, 11, 12, 13, 14, 15, 16, 22, 21, 20, 23, 24, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 35]
-  Moving left:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 24, 23, 20, 21, 22, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 15, RTL:
-  Moving left: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 14, 13, 12, 11, 10, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving right:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 16, LTR:
-  Moving right: "\n        MUQJ    after encyclopedia\n    "[9, 12, 11, 10, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving left:  "\n        MUQJ    after encyclopedia\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 14, 13, 10, 11, 12, 9]
-Test 16, RTL:
-  Moving left: "\n        MUQJ    after encyclopedia\n    "[9, 10, 11, 12, 13, 14, 21, 20, 19, 18, 22, 23, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 35]
-  Moving right:  "\n        MUQJ    after encyclopedia\n    "[35, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 23, 22, 18, 19, 20, 21, 14, 13, 12, 11, 10, 9]
-Test 17, LTR:
-  Moving right: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 10, 11, 12, 13, 14, 15, 16, 22, 21, 20, 23, 24, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 35]
-  Moving left:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 24, 23, 20, 21, 22, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 17, RTL:
-  Moving left: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 14, 13, 12, 11, 10, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving right:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 18, LTR:
-  Moving right: "\n        MUQJ    after encyclopedia\n    "[9, 12, 11, 10, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving left:  "\n        MUQJ    after encyclopedia\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 14, 13, 10, 11, 12, 9]
-Test 18, RTL:
-  Moving left: "\n        MUQJ    after encyclopedia\n    "[9, 10, 11, 12, 13, 14, 21, 20, 19, 18, 22, 23, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 35]
-  Moving right:  "\n        MUQJ    after encyclopedia\n    "[35, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 23, 22, 18, 19, 20, 21, 14, 13, 12, 11, 10, 9]
-Test 19, LTR:
-  Moving right: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 19, 18, 21, 22, 28, 27, 26, 25, 24, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
-  Moving left:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 23, 24, 25, 26, 27, 28, 22, 21, 18, 19, 20, 17, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 19, RTL:
-  Moving left: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 15, 14, 13, 12, 11, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 38, 37, 36, 35, 39, 40]
-  Moving right:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 35, 36, 37, 38, 34, 33, 31, 32, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 10, 11, 12, 13, 14, 15, 9]
-Test 20, LTR:
-  Moving right: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 19, 18, 21, 22, 28, 27, 26, 25, 24, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
-  Moving left:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 23, 24, 25, 26, 27, 28, 22, 21, 18, 19, 20, 17, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 20, RTL:
-  Moving left: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 15, 14, 13, 12, 11, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 38, 37, 36, 35, 39, 40]
-  Moving right:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 35, 36, 37, 38, 34, 33, 31, 32, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 10, 11, 12, 13, 14, 15, 9]
-Test 21, LTR:
-  Moving right: "\n        Lorem\n        "[9, 10, 11, 12, 13, 14], <DIV>[0], "\n        ipsum\n    "[9, 10, 11, 12, 13, 14]
-  Moving left:  "\n        ipsum\n    "[14, 13, 12, 11, 10, 9], <DIV>[0], "\n        Lorem\n        "[14, 13, 12, 11, 10, 9]
-Test 21, RTL:
-  Moving left: "\n        Lorem\n        "[9, 13, 12, 11, 10, 14], <DIV>[0], "\n        ipsum\n    "[9, 13, 12, 11, 10, 14]
-  Moving right:  "\n        ipsum\n    "[14, 10, 11, 12, 13, 9], <DIV>[0], "\n        Lorem\n        "[14, 10, 11, 12, 13, 9]
-Test 22, LTR:
-  Moving right: "\n        WMH[\n        "[9, 12, 11, 10, 13], <DIV>[0], "\n        OWQU[\n    "[9, 13, 12, 11, 10, 14]
-  Moving left:  "\n        OWQU[\n    "[14, 10, 11, 12, 13, 9], <DIV>[0], "\n        WMH[\n        "[13, 10, 11, 12, 9]
-Test 22, RTL:
-  Moving left: "\n        WMH[\n        "[9, 10, 11, 12, 13], <DIV>[0], "\n        OWQU[\n    "[9, 10, 11, 12, 13, 14]
-  Moving right:  "\n        OWQU[\n    "[14, 13, 12, 11, 10, 9], <DIV>[0], "\n        WMH[\n        "[13, 12, 11, 10, 9]
-Test 23, LTR:
-  Moving right: "\n        abcdefABC"[9, 10, 11, 12, 13, 14, 15], "DEF\n    "[2, 1], <DIV>[2], "\n        abcdefABC"[18, 17, 16], "DEF\n    "[3]
-  Moving left:  "DEF\n    "[3], "\n        abcdefABC"[16, 17, 18], <DIV>[2], "DEF\n    "[1, 2], "\n        abcdefABC"[15, 14, 13, 12, 11, 10, 9]
-Test 23, RTL:
-  Moving left: "\n        abcdefABC"[9, 14, 13, 12, 11, 10, 15, 16, 17, 18], <DIV>[2], "DEF\n    "[1, 2, 3]
-  Moving right:  "DEF\n    "[3, 2, 1], <DIV>[2], "\n        abcdefABC"[18, 17, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 24, LTR:
-  Moving right: "\n        ABCDEFabc"[9, 14, 13, 12, 11, 10, 15, 16, 17, 18], <DIV>[2], "def\n    "[1, 2, 3]
-  Moving left:  "def\n    "[3, 2, 1], <DIV>[2], "\n        ABCDEFabc"[18, 17, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 24, RTL:
-  Moving left: "\n        ABCDEFabc"[9, 10, 11, 12, 13, 14, 15], "def\n    "[2, 1], <DIV>[2], "\n        ABCDEFabc"[18, 17, 16], "def\n    "[3]
-  Moving right:  "def\n    "[3], "\n        ABCDEFabc"[16, 17, 18], <DIV>[2], "def\n    "[1, 2], "\n        ABCDEFabc"[15, 14, 13, 12, 11, 10, 9]
-Test 25, LTR:
-  Moving right: "\n        abc"[9, 10, 11, 12], <DIV>[2], "DEFghi\n    "[2, 1], <DIV>[5, 4], "ABC"[3, 2, 1], "DEFghi\n    "[3, 4, 5, 6]
-  Moving left:  "DEFghi\n    "[6, 5, 4, 3], "ABC"[1, 2, 3], <DIV>[4, 5], "DEFghi\n    "[1, 2], <DIV>[2], "\n        abc"[12, 11, 10, 9]
-Test 25, RTL:
-  Moving left: "\n        abc"[9, 11, 10, 12], <DIV>[2], "ABC"[1, 2, 3], <DIV>[4, 5], "DEFghi\n    "[1, 2, 3, 5, 4, 6]
-  Moving right:  "DEFghi\n    "[6, 4, 5, 3, 2, 1], <DIV>[5, 4], "ABC"[3, 2, 1], <DIV>[2], "\n        abc"[12, 10, 11, 9]
-Test 26, LTR:
-  Moving right: "\n        ABC"[9, 11, 10, 12], <DIV>[2], "abc"[1, 2, 3], <DIV>[4, 5], "defDEF\n    "[1, 2, 3, 5, 4, 6]
-  Moving left:  "defDEF\n    "[6, 4, 5, 3, 2, 1], <DIV>[5, 4], "abc"[3, 2, 1], <DIV>[2], "\n        ABC"[12, 10, 11, 9]
-Test 26, RTL:
-  Moving left: "\n        ABC"[9, 10, 11, 12], <DIV>[2], "defDEF\n    "[2, 1], <DIV>[5, 4], "abc"[3, 2, 1], "defDEF\n    "[3, 4, 5, 6]
-  Moving right:  "defDEF\n    "[6, 5, 4, 3], "abc"[1, 2, 3], <DIV>[4, 5], "defDEF\n    "[1, 2], <DIV>[2], "\n        ABC"[12, 11, 10, 9]
-Test 27, LTR:
-  Moving right: "\n        abcABC"[9, 10, 11, 12], "DEF"[2, 1], "\n        abcABC"[15, 14, 13], "DEF"[3]
-  Moving left:  "DEF"[3], "\n        abcABC"[13, 14, 15], "DEF"[1, 2], "\n        abcABC"[12, 11, 10, 9]
-Test 27, RTL:
-  Moving left: "\n        abcABC"[9, 11, 10, 12, 13, 14, 15], "DEF"[1, 2, 3]
-  Moving right:  "DEF"[3, 2, 1], "\n        abcABC"[15, 14, 13, 12, 10, 11, 9]
-Test 28, LTR:
-  Moving right: "\n        ABCabc"[9, 11, 10, 12, 13, 14, 15], "def"[1, 2, 3]
-  Moving left:  "def"[3, 2, 1], "\n        ABCabc"[15, 14, 13, 12, 10, 11, 9]
-Test 28, RTL:
-  Moving left: "\n        ABCabc"[9, 10, 11, 12], "def"[2, 1], "\n        ABCabc"[15, 14, 13], "def"[3]
-  Moving right:  "def"[3], "\n        ABCabc"[13, 14, 15], "def"[1, 2], "\n        ABCabc"[12, 11, 10, 9]
-Test 29, LTR:
-  Moving right: "\n        ab"[9, 10, 11], "cABCdef"[1, 3, 2, 4, 5, 6, 7]
-  Moving left:  "cABCdef"[7, 6, 5, 4, 2, 3, 1], "\n        ab"[11, 10, 9]
-Test 29, RTL:
-  Moving left: "\n        ab"[9, 11, 10], "cABCdef"[1, 2, 3, 4, 6, 5, 7]
-  Moving right:  "cABCdef"[7, 5, 6, 4, 3, 2, 1], "\n        ab"[10, 11, 9]
-Test 30, LTR:
-  Moving right: "\n        AB"[9, 11, 10], "CabcDEF"[1, 2, 3, 4, 6, 5, 7]
-  Moving left:  "CabcDEF"[7, 5, 6, 4, 3, 2, 1], "\n        AB"[10, 11, 9]
-Test 30, RTL:
-  Moving left: "\n        AB"[9, 10, 11], "CabcDEF"[1, 3, 2, 4, 5, 6, 7]
-  Moving right:  "CabcDEF"[7, 6, 5, 4, 2, 3, 1], "\n        AB"[11, 10, 9]
-Test 31, LTR:
-  Moving right: "\n        abc"[9, 10, 11, 12], "ABCdef"[2, 1, 3, 4, 5, 6]
-  Moving left:  "ABCdef"[6, 5, 4, 3, 1, 2], "\n        abc"[12, 11, 10, 9]
-Test 31, RTL:
-  Moving left: "\n        abc"[9, 11, 10, 12], "ABCdef"[1, 2, 3, 5, 4, 6]
-  Moving right:  "ABCdef"[6, 4, 5, 3, 2, 1], "\n        abc"[12, 10, 11, 9]
-Test 32, LTR:
-  Moving right: "\n        ABC"[9, 11, 10, 12], "abcDEF"[1, 2, 3, 5, 4, 6]
-  Moving left:  "abcDEF"[6, 4, 5, 3, 2, 1], "\n        ABC"[12, 10, 11, 9]
-Test 32, RTL:
-  Moving left: "\n        ABC"[9, 10, 11, 12], "abcDEF"[2, 1, 3, 4, 5, 6]
-  Moving right:  "abcDEF"[6, 5, 4, 3, 1, 2], "\n        ABC"[12, 11, 10, 9]
-Test 33, LTR:
-  Moving right: "\n        abcAdef\n    "[9, 10, 11, 12, 13, 14, 15, 16]
-  Moving left:  "\n        abcAdef\n    "[16, 15, 14, 13, 12, 11, 10, 9]
-Test 33, RTL:
-  Moving left: "\n        abcAdef\n    "[9, 11, 10, 12, 13, 15, 14, 16]
-  Moving right:  "\n        abcAdef\n    "[16, 14, 15, 13, 12, 10, 11, 9]
-Test 34, LTR:
-  Moving right: "\n        ABCaDEF\n    "[9, 11, 10, 12, 13, 15, 14, 16]
-  Moving left:  "\n        ABCaDEF\n    "[16, 14, 15, 13, 12, 10, 11, 9]
-Test 34, RTL:
-  Moving left: "\n        ABCaDEF\n    "[9, 10, 11, 12, 13, 14, 15, 16]
-  Moving right:  "\n        ABCaDEF\n    "[16, 15, 14, 13, 12, 11, 10, 9]
-Test 35, LTR:
-  Moving right: "\n        abcABC"[9, 10, 11, 12, 14, 13, 15], "def"[1, 2, 3]
-  Moving left:  "def"[3, 2, 1], "\n        abcABC"[15, 13, 14, 12, 11, 10, 9]
-Test 35, RTL:
-  Moving left: "\n        abcABC"[9, 11, 10, 12, 13, 14, 15], "def"[2, 1, 3]
-  Moving right:  "def"[3, 1, 2], "\n        abcABC"[15, 14, 13, 12, 10, 11, 9]
-Test 36, LTR:
-  Moving right: "\n        ABCabc"[9, 11, 10, 12, 13, 14, 15], "DEF"[2, 1, 3]
-  Moving left:  "DEF"[3, 1, 2], "\n        ABCabc"[15, 14, 13, 12, 10, 11, 9]
-Test 36, RTL:
-  Moving left: "\n        ABCabc"[9, 10, 11, 12, 14, 13, 15], "DEF"[1, 2, 3]
-  Moving right:  "DEF"[3, 2, 1], "\n        ABCabc"[15, 13, 14, 12, 11, 10, 9]
-Test 37, LTR:
-  Moving right: "\n        abcA"[9, 10, 11, 12], "BCdef"[1], "\n        abcA"[13], "BCdef"[2, 3, 4, 5]
-  Moving left:  "BCdef"[5, 4, 3, 2], "\n        abcA"[13], "BCdef"[1], "\n        abcA"[12, 11, 10, 9]
-Test 37, RTL:
-  Moving left: "\n        abcA"[9, 11, 10, 12, 13], "BCdef"[1, 2, 4, 3, 5]
-  Moving right:  "BCdef"[5, 3, 4, 2, 1], "\n        abcA"[13, 12, 10, 11, 9]
-Test 38, LTR:
-  Moving right: "\n        ABCa"[9, 11, 10, 12, 13], "bcDEF"[1, 2, 4, 3, 5]
-  Moving left:  "bcDEF"[5, 3, 4, 2, 1], "\n        ABCa"[13, 12, 10, 11, 9]
-Test 38, RTL:
-  Moving left: "\n        ABCa"[9, 10, 11, 12], "bcDEF"[1], "\n        ABCa"[13], "bcDEF"[2, 3, 4, 5]
-  Moving right:  "bcDEF"[5, 4, 3, 2], "\n        ABCa"[13], "bcDEF"[1], "\n        ABCa"[12, 11, 10, 9]
-Test 39, LTR:
-  Moving right: "abc"[0, 1, 2, 3], "def"[0, 1, 2, 3]
-WARNING: Moved in the wrong direction in step 4: from (65, -955) to (0, 600).
-  Moving left:  "def"[3, 2, 1, 0], "abc"[3, 2, 1, 0]
-WARNING: Moved in the wrong direction in step 4: from (0, 600) to (65, -955).
-Test 39, RTL:
-  Moving left: "abc"[0, 2, 1, 3], "def"[0, 2, 1, 3]
-WARNING: Moved in the wrong direction in step 4: from (740, -955) to (0, 600).
-  Moving right:  "def"[3, 1, 2, 0], "abc"[3, 1, 2, 0]
-WARNING: Moved in the wrong direction in step 4: from (0, 600) to (740, -955).
-Test 40, LTR:
-  Moving right: "ABC"[0, 2, 1, 3], "DEF"[0, 2, 1, 3]
-WARNING: Moved in the wrong direction in step 4: from (64, -1005) to (0, 600).
-  Moving left:  "DEF"[3, 1, 2, 0], "ABC"[3, 1, 2, 0]
-WARNING: Moved in the wrong direction in step 4: from (0, 600) to (64, -1005).
-Test 40, RTL:
-  Moving left: "ABC"[0, 1, 2, 3], "DEF"[0, 1, 2, 3]
-WARNING: Moved in the wrong direction in step 4: from (741, -1005) to (0, 600).
-  Moving right:  "DEF"[3, 2, 1, 0], "ABC"[3, 2, 1, 0]
-WARNING: Moved in the wrong direction in step 4: from (0, 600) to (741, -1005).
-
diff --git a/LayoutTests/platform/win/editing/selection/move-left-right-expected.txt b/LayoutTests/platform/win/editing/selection/move-left-right-expected.txt
deleted file mode 100644
index f2500a5..0000000
--- a/LayoutTests/platform/win/editing/selection/move-left-right-expected.txt
+++ /dev/null
@@ -1,242 +0,0 @@
-Test 1, LTR:
-  Moving right: "\n        abc\n    "[9, 10, 11, 12]
-  Moving left:  "\n        abc\n    "[12, 11, 10, 9]
-Test 1, RTL:
-  Moving left: "\n        abc\n    "[9, 11, 10, 12]
-  Moving right:  "\n        abc\n    "[12, 10, 11, 9]
-Test 2, LTR:
-  Moving right: "\n        ABC\n    "[9, 11, 10, 12]
-  Moving left:  "\n        ABC\n    "[12, 10, 11, 9]
-Test 2, RTL:
-  Moving left: "\n        ABC\n    "[9, 10, 11, 12]
-  Moving right:  "\n        ABC\n    "[12, 11, 10, 9]
-Test 3, LTR:
-  Moving right: <DIV>[0], "abc\n    "[0, 1, 2, 3]
-  Moving left:  "abc\n    "[3, 2, 1, 0], <DIV>[0]
-Test 3, RTL:
-  Moving left: <DIV>[0], "abc\n    "[0, 2, 1, 3]
-  Moving right:  "abc\n    "[3, 1, 2, 0], <DIV>[0]
-Test 4, LTR:
-  Moving right: <DIV>[0], "ABC\n    "[0, 2, 1, 3]
-  Moving left:  "ABC\n    "[3, 1, 2, 0], <DIV>[0]
-Test 4, RTL:
-  Moving left: <DIV>[0], "ABC\n    "[0, 1, 2, 3]
-  Moving right:  "ABC\n    "[3, 2, 1, 0], <DIV>[0]
-Test 5, LTR:
-  Moving right: "\n        abcABCdef\n    "[9, 10, 11, 12, 14, 13, 15, 16, 17, 18]
-  Moving left:  "\n        abcABCdef\n    "[18, 17, 16, 15, 13, 14, 12, 11, 10, 9]
-Test 5, RTL:
-  Moving left: "\n        abcABCdef\n    "[9, 11, 10, 12, 13, 14, 15, 17, 16, 18]
-  Moving right:  "\n        abcABCdef\n    "[18, 16, 17, 15, 14, 13, 12, 10, 11, 9]
-Test 6, LTR:
-  Moving right: "\n        ABCabcDEF\n    "[9, 11, 10, 12, 13, 14, 15, 17, 16, 18]
-  Moving left:  "\n        ABCabcDEF\n    "[18, 16, 17, 15, 14, 13, 12, 10, 11, 9]
-Test 6, RTL:
-  Moving left: "\n        ABCabcDEF\n    "[9, 10, 11, 12, 14, 13, 15, 16, 17, 18]
-  Moving right:  "\n        ABCabcDEF\n    "[18, 17, 16, 15, 13, 14, 12, 11, 10, 9]
-Test 7, LTR:
-  Moving right: "\n        abcABCDEF\n    "[9, 10, 11, 12, 17, 16, 15, 14, 13, 18]
-  Moving left:  "\n        abcABCDEF\n    "[18, 13, 14, 15, 16, 17, 12, 11, 10, 9]
-Test 7, RTL:
-  Moving left: "\n        abcABCDEF\n    "[9, 11, 10, 12, 13, 14, 15, 16, 17, 18]
-  Moving right:  "\n        abcABCDEF\n    "[18, 17, 16, 15, 14, 13, 12, 10, 11, 9]
-Test 8, LTR:
-  Moving right: "\n        ABCabcdef\n    "[9, 11, 10, 12, 13, 14, 15, 16, 17, 18]
-  Moving left:  "\n        ABCabcdef\n    "[18, 17, 16, 15, 14, 13, 12, 10, 11, 9]
-Test 8, RTL:
-  Moving left: "\n        ABCabcdef\n    "[9, 10, 11, 12, 17, 16, 15, 14, 13, 18]
-  Moving right:  "\n        ABCabcdef\n    "[18, 13, 14, 15, 16, 17, 12, 11, 10, 9]
-Test 9, LTR:
-  Moving right: "abc"[0, 1, 2, 3], "ABCdef\n    "[2, 1, 3, 4, 5, 6]
-  Moving left:  "ABCdef\n    "[6, 5, 4, 3, 1, 2], "abc"[3, 2, 1, 0]
-Test 9, RTL:
-  Moving left: "abc"[0, 2, 1, 3], "ABCdef\n    "[1, 2, 3, 5, 4, 6]
-  Moving right:  "ABCdef\n    "[6, 4, 5, 3, 2, 1], "abc"[3, 1, 2, 0]
-Test 10, LTR:
-  Moving right: "ABC"[0, 2, 1, 3], "abcDEF\n    "[1, 2, 3, 5, 4, 6]
-  Moving left:  "abcDEF\n    "[6, 4, 5, 3, 2, 1], "ABC"[3, 1, 2, 0]
-Test 10, RTL:
-  Moving left: "ABC"[0, 1, 2, 3], "abcDEF\n    "[2, 1, 3, 4, 5, 6]
-  Moving right:  "abcDEF\n    "[6, 5, 4, 3, 1, 2], "ABC"[3, 2, 1, 0]
-Test 11, LTR:
-  Moving right: "abcABC123DEFdef\n    "[0, 1, 2, 3, 11, 10, 6, 7, 8, 9, 5, 4, 12, 13, 14, 15]
-  Moving left:  "abcABC123DEFdef\n    "[15, 14, 13, 12, 4, 5, 9, 8, 7, 6, 10, 11, 3, 2, 1, 0]
-Test 11, RTL:
-  Moving left: "abcABC123DEFdef\n    "[0, 2, 1, 3, 4, 5, 6, 8, 7, 9, 10, 11, 12, 14, 13, 15]
-  Moving right:  "abcABC123DEFdef\n    "[15, 13, 14, 12, 11, 10, 9, 7, 8, 6, 5, 4, 3, 1, 2, 0]
-Test 12, LTR:
-  Moving right: "abcABC123\n    "[0, 1, 2, 3, 7, 8, 5, 4, 9]
-  Moving left:  "abcABC123\n    "[9, 4, 5, 8, 7, 3, 2, 1, 0]
-Test 12, RTL:
-  Moving left: "abcABC123\n    "[0, 2, 1, 3, 4, 5, 6, 8, 7, 9]
-  Moving right:  "abcABC123\n    "[9, 7, 8, 6, 5, 4, 3, 1, 2, 0]
-Test 13, LTR:
-  Moving right: "abcABC123def\n    "[0, 1, 2, 3, 7, 8, 5, 4, 9, 10, 11, 12]
-  Moving left:  "abcABC123def\n    "[12, 11, 10, 9, 4, 5, 8, 7, 6, 2, 1, 0]
-WARNING: Moving to the left did not visit the same positions in reverse order as moving to the right.
-Test 13, RTL:
-  Moving left: "abcABC123def\n    "[0, 2, 1, 3, 4, 5, 6, 11, 10, 9, 8, 7, 12]
-  Moving right:  "abcABC123def\n    "[12, 7, 8, 9, 10, 11, 6, 5, 4, 3, 1, 2, 0]
-Test 14, LTR:
-  Moving right: "ABC123DEFabcGHI456JLM\n    "[0, 8, 7, 3, 4, 5, 6, 2, 1, 9, 10, 11, 12, 20, 19, 15, 16, 17, 18, 14, 13, 21]
-  Moving left:  "ABC123DEFabcGHI456JLM\n    "[21, 13, 14, 18, 17, 16, 15, 19, 20, 12, 11, 10, 9, 1, 2, 6, 5, 4, 3, 7, 8, 0]
-Test 14, RTL:
-  Moving left: "ABC123DEFabcGHI456JLM\n    "[0, 1, 2, 3, 5, 4, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15, 17, 16, 18, 19, 20, 21]
-  Moving right:  "ABC123DEFabcGHI456JLM\n    "[21, 20, 19, 18, 16, 17, 15, 14, 13, 12, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0]
-Test 15, LTR:
-  Moving right: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 10, 11, 12, 13, 14, 15, 16, 22, 21, 20, 23, 24, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 35]
-  Moving left:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 24, 23, 20, 21, 22, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 15, RTL:
-  Moving left: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 14, 13, 12, 11, 10, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving right:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 16, LTR:
-  Moving right: "\n        MUQJ    after encyclopedia\n    "[9, 12, 11, 10, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving left:  "\n        MUQJ    after encyclopedia\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 14, 13, 10, 11, 12, 9]
-Test 16, RTL:
-  Moving left: "\n        MUQJ    after encyclopedia\n    "[9, 10, 11, 12, 13, 14, 21, 20, 19, 18, 22, 23, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 35]
-  Moving right:  "\n        MUQJ    after encyclopedia\n    "[35, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 23, 22, 18, 19, 20, 21, 14, 13, 12, 11, 10, 9]
-Test 17, LTR:
-  Moving right: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 10, 11, 12, 13, 14, 15, 16, 22, 21, 20, 23, 24, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 35]
-  Moving left:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 24, 23, 20, 21, 22, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 17, RTL:
-  Moving left: "\n        before    AHYJ AQWJXMFUDJE\n    "[9, 14, 13, 12, 11, 10, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving right:  "\n        before    AHYJ AQWJXMFUDJE\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 18, LTR:
-  Moving right: "\n        MUQJ    after encyclopedia\n    "[9, 12, 11, 10, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]
-  Moving left:  "\n        MUQJ    after encyclopedia\n    "[35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 14, 13, 10, 11, 12, 9]
-Test 18, RTL:
-  Moving left: "\n        MUQJ    after encyclopedia\n    "[9, 10, 11, 12, 13, 14, 21, 20, 19, 18, 22, 23, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 35]
-  Moving right:  "\n        MUQJ    after encyclopedia\n    "[35, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 23, 22, 18, 19, 20, 21, 14, 13, 12, 11, 10, 9]
-Test 19, LTR:
-  Moving right: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 19, 18, 21, 22, 28, 27, 26, 25, 24, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
-  Moving left:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 23, 24, 25, 26, 27, 28, 22, 21, 18, 19, 20, 17, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 19, RTL:
-  Moving left: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 15, 14, 13, 12, 11, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 38, 37, 36, 35, 39, 40]
-  Moving right:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 35, 36, 37, 38, 34, 33, 31, 32, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 10, 11, 12, 13, 14, 15, 9]
-Test 20, LTR:
-  Moving right: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 19, 18, 21, 22, 28, 27, 26, 25, 24, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40]
-  Moving left:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 23, 24, 25, 26, 27, 28, 22, 21, 18, 19, 20, 17, 16, 15, 14, 13, 12, 11, 10, 9]
-Test 20, RTL:
-  Moving left: "\n        This is JF[Y WY OJ[Y the boxes. \n    "[9, 15, 14, 13, 12, 11, 10, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 32, 31, 33, 34, 38, 37, 36, 35, 39, 40]
-  Moving right:  "\n        This is JF[Y WY OJ[Y the boxes. \n    "[40, 39, 35, 36, 37, 38, 34, 33, 31, 32, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 10, 11, 12, 13, 14, 15, 9]
-Test 21, LTR:
-  Moving right: "\n        Lorem\n        "[9, 10, 11, 12, 13, 14], <DIV>[0], "\n        ipsum\n    "[9, 10, 11, 12, 13, 14]
-  Moving left:  "\n        ipsum\n    "[14, 13, 12, 11, 10, 9], <DIV>[0], "\n        Lorem\n        "[14, 13, 12, 11, 10, 9]
-Test 21, RTL:
-  Moving left: "\n        Lorem\n        "[9, 13, 12, 11, 10, 14], <DIV>[0], "\n        ipsum\n    "[9, 13, 12, 11, 10, 14]
-  Moving right:  "\n        ipsum\n    "[14, 10, 11, 12, 13, 9], <DIV>[0], "\n        Lorem\n        "[14, 10, 11, 12, 13, 9]
-Test 22, LTR:
-  Moving right: "\n        WMH[\n        "[9, 12, 11, 10, 13], <DIV>[0], "\n        OWQU[\n    "[9, 13, 12, 11, 10, 14]
-  Moving left:  "\n        OWQU[\n    "[14, 10, 11, 12, 13, 9], <DIV>[0], "\n        WMH[\n        "[13, 10, 11, 12, 9]
-Test 22, RTL:
-  Moving left: "\n        WMH[\n        "[9, 10, 11, 12, 13], <DIV>[0], "\n        OWQU[\n    "[9, 10, 11, 12, 13, 14]
-  Moving right:  "\n        OWQU[\n    "[14, 13, 12, 11, 10, 9], <DIV>[0], "\n        WMH[\n        "[13, 12, 11, 10, 9]
-Test 23, LTR:
-  Moving right: "\n        abcdefABC"[9, 10, 11, 12, 13, 14, 15], "DEF\n    "[2, 1], <DIV>[2], "\n        abcdefABC"[18, 17, 16], "DEF\n    "[3]
-  Moving left:  "DEF\n    "[3], "\n        abcdefABC"[16, 17, 18], <DIV>[2], "DEF\n    "[1, 2], "\n        abcdefABC"[15, 14, 13, 12, 11, 10, 9]
-Test 23, RTL:
-  Moving left: "\n        abcdefABC"[9, 14, 13, 12, 11, 10, 15, 16, 17, 18], <DIV>[2], "DEF\n    "[1, 2, 3]
-  Moving right:  "DEF\n    "[3, 2, 1], <DIV>[2], "\n        abcdefABC"[18, 17, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 24, LTR:
-  Moving right: "\n        ABCDEFabc"[9, 14, 13, 12, 11, 10, 15, 16, 17, 18], <DIV>[2], "def\n    "[1, 2, 3]
-  Moving left:  "def\n    "[3, 2, 1], <DIV>[2], "\n        ABCDEFabc"[18, 17, 16, 15, 10, 11, 12, 13, 14, 9]
-Test 24, RTL:
-  Moving left: "\n        ABCDEFabc"[9, 10, 11, 12, 13, 14, 15], "def\n    "[2, 1], <DIV>[2], "\n        ABCDEFabc"[18, 17, 16], "def\n    "[3]
-  Moving right:  "def\n    "[3], "\n        ABCDEFabc"[16, 17, 18], <DIV>[2], "def\n    "[1, 2], "\n        ABCDEFabc"[15, 14, 13, 12, 11, 10, 9]
-Test 25, LTR:
-  Moving right: "\n        abc"[9, 10, 11, 12], <DIV>[2], "DEFghi\n    "[2, 1], <DIV>[5, 4], "ABC"[3, 2, 1], "DEFghi\n    "[3, 4, 5, 6]
-  Moving left:  "DEFghi\n    "[6, 5, 4, 3], "ABC"[1, 2, 3], <DIV>[4, 5], "DEFghi\n    "[1, 2], <DIV>[2], "\n        abc"[12, 11, 10, 9]
-Test 25, RTL:
-  Moving left: "\n        abc"[9, 11, 10, 12], <DIV>[2], "ABC"[1, 2, 3], <DIV>[4, 5], "DEFghi\n    "[1, 2, 3, 5, 4, 6]
-  Moving right:  "DEFghi\n    "[6, 4, 5, 3, 2, 1], <DIV>[5, 4], "ABC"[3, 2, 1], <DIV>[2], "\n        abc"[12, 10, 11, 9]
-Test 26, LTR:
-  Moving right: "\n        ABC"[9, 11, 10, 12], <DIV>[2], "abc"[1, 2, 3], <DIV>[4, 5], "defDEF\n    "[1, 2, 3, 5, 4, 6]
-  Moving left:  "defDEF\n    "[6, 4, 5, 3, 2, 1], <DIV>[5, 4], "abc"[3, 2, 1], <DIV>[2], "\n        ABC"[12, 10, 11, 9]
-Test 26, RTL:
-  Moving left: "\n        ABC"[9, 10, 11, 12], <DIV>[2], "defDEF\n    "[2, 1], <DIV>[5, 4], "abc"[3, 2, 1], "defDEF\n    "[3, 4, 5, 6]
-  Moving right:  "defDEF\n    "[6, 5, 4, 3], "abc"[1, 2, 3], <DIV>[4, 5], "defDEF\n    "[1, 2], <DIV>[2], "\n        ABC"[12, 11, 10, 9]
-Test 27, LTR:
-  Moving right: "\n        abcABC"[9, 10, 11, 12], "DEF"[2, 1], "\n        abcABC"[15, 14, 13], "DEF"[3]
-  Moving left:  "DEF"[3], "\n        abcABC"[13, 14, 15], "DEF"[1, 2], "\n        abcABC"[12, 11, 10, 9]
-Test 27, RTL:
-  Moving left: "\n        abcABC"[9, 11, 10, 12, 13, 14, 15], "DEF"[1, 2, 3]
-  Moving right:  "DEF"[3, 2, 1], "\n        abcABC"[15, 14, 13, 12, 10, 11, 9]
-Test 28, LTR:
-  Moving right: "\n        ABCabc"[9, 11, 10, 12, 13, 14, 15], "def"[1, 2, 3]
-  Moving left:  "def"[3, 2, 1], "\n        ABCabc"[15, 14, 13, 12, 10, 11, 9]
-Test 28, RTL:
-  Moving left: "\n        ABCabc"[9, 10, 11, 12], "def"[2, 1], "\n        ABCabc"[15, 14, 13], "def"[3]
-  Moving right:  "def"[3], "\n        ABCabc"[13, 14, 15], "def"[1, 2], "\n        ABCabc"[12, 11, 10, 9]
-Test 29, LTR:
-  Moving right: "\n        ab"[9, 10, 11], "cABCdef"[1, 3, 2, 4, 5, 6, 7]
-  Moving left:  "cABCdef"[7, 6, 5, 4, 2, 3, 1], "\n        ab"[11, 10, 9]
-Test 29, RTL:
-  Moving left: "\n        ab"[9, 11, 10], "cABCdef"[1, 2, 3, 4, 6, 5, 7]
-  Moving right:  "cABCdef"[7, 5, 6, 4, 3, 2, 1], "\n        ab"[10, 11, 9]
-Test 30, LTR:
-  Moving right: "\n        AB"[9, 11, 10], "CabcDEF"[1, 2, 3, 4, 6, 5, 7]
-  Moving left:  "CabcDEF"[7, 5, 6, 4, 3, 2, 1], "\n        AB"[10, 11, 9]
-Test 30, RTL:
-  Moving left: "\n        AB"[9, 10, 11], "CabcDEF"[1, 3, 2, 4, 5, 6, 7]
-  Moving right:  "CabcDEF"[7, 6, 5, 4, 2, 3, 1], "\n        AB"[11, 10, 9]
-Test 31, LTR:
-  Moving right: "\n        abc"[9, 10, 11, 12], "ABCdef"[2, 1, 3, 4, 5, 6]
-  Moving left:  "ABCdef"[6, 5, 4, 3, 1, 2], "\n        abc"[12, 11, 10, 9]
-Test 31, RTL:
-  Moving left: "\n        abc"[9, 11, 10, 12], "ABCdef"[1, 2, 3, 5, 4, 6]
-  Moving right:  "ABCdef"[6, 4, 5, 3, 2, 1], "\n        abc"[12, 10, 11, 9]
-Test 32, LTR:
-  Moving right: "\n        ABC"[9, 11, 10, 12], "abcDEF"[1, 2, 3, 5, 4, 6]
-  Moving left:  "abcDEF"[6, 4, 5, 3, 2, 1], "\n        ABC"[12, 10, 11, 9]
-Test 32, RTL:
-  Moving left: "\n        ABC"[9, 10, 11, 12], "abcDEF"[2, 1, 3, 4, 5, 6]
-  Moving right:  "abcDEF"[6, 5, 4, 3, 1, 2], "\n        ABC"[12, 11, 10, 9]
-Test 33, LTR:
-  Moving right: "\n        abcAdef\n    "[9, 10, 11, 12, 13, 14, 15, 16]
-  Moving left:  "\n        abcAdef\n    "[16, 15, 14, 13, 12, 11, 10, 9]
-Test 33, RTL:
-  Moving left: "\n        abcAdef\n    "[9, 11, 10, 12, 13, 15, 14, 16]
-  Moving right:  "\n        abcAdef\n    "[16, 14, 15, 13, 12, 10, 11, 9]
-Test 34, LTR:
-  Moving right: "\n        ABCaDEF\n    "[9, 11, 10, 12, 13, 15, 14, 16]
-  Moving left:  "\n        ABCaDEF\n    "[16, 14, 15, 13, 12, 10, 11, 9]
-Test 34, RTL:
-  Moving left: "\n        ABCaDEF\n    "[9, 10, 11, 12, 13, 14, 15, 16]
-  Moving right:  "\n        ABCaDEF\n    "[16, 15, 14, 13, 12, 11, 10, 9]
-Test 35, LTR:
-  Moving right: "\n        abcABC"[9, 10, 11, 12, 14, 13, 15], "def"[1, 2, 3]
-  Moving left:  "def"[3, 2, 1], "\n        abcABC"[15, 13, 14, 12, 11, 10, 9]
-Test 35, RTL:
-  Moving left: "\n        abcABC"[9, 11, 10, 12, 13, 14, 15], "def"[2, 1, 3]
-  Moving right:  "def"[3, 1, 2], "\n        abcABC"[15, 14, 13, 12, 10, 11, 9]
-Test 36, LTR:
-  Moving right: "\n        ABCabc"[9, 11, 10, 12, 13, 14, 15], "DEF"[2, 1, 3]
-  Moving left:  "DEF"[3, 1, 2], "\n        ABCabc"[15, 14, 13, 12, 10, 11, 9]
-Test 36, RTL:
-  Moving left: "\n        ABCabc"[9, 10, 11, 12, 14, 13, 15], "DEF"[1, 2, 3]
-  Moving right:  "DEF"[3, 2, 1], "\n        ABCabc"[15, 13, 14, 12, 11, 10, 9]
-Test 37, LTR:
-  Moving right: "\n        abcA"[9, 10, 11, 12], "BCdef"[1], "\n        abcA"[13], "BCdef"[2, 3, 4, 5]
-  Moving left:  "BCdef"[5, 4, 3, 2], "\n        abcA"[13], "BCdef"[1], "\n        abcA"[12, 11, 10, 9]
-Test 37, RTL:
-  Moving left: "\n        abcA"[9, 11, 10, 12, 13], "BCdef"[1, 2, 4, 3, 5]
-  Moving right:  "BCdef"[5, 3, 4, 2, 1], "\n        abcA"[13, 12, 10, 11, 9]
-Test 38, LTR:
-  Moving right: "\n        ABCa"[9, 11, 10, 12, 13], "bcDEF"[1, 2, 4, 3, 5]
-  Moving left:  "bcDEF"[5, 3, 4, 2, 1], "\n        ABCa"[13, 12, 10, 11, 9]
-Test 38, RTL:
-  Moving left: "\n        ABCa"[9, 10, 11, 12], "bcDEF"[1], "\n        ABCa"[13], "bcDEF"[2, 3, 4, 5]
-  Moving right:  "bcDEF"[5, 4, 3, 2], "\n        ABCa"[13], "bcDEF"[1], "\n        ABCa"[12, 11, 10, 9]
-Test 39, LTR:
-  Moving right: "abc"[0, 1, 2, 3], "def"[0, 1, 2, 3]
-  Moving left:  "def"[3, 2, 1, 0], "abc"[3, 2, 1, 0]
-Test 39, RTL:
-  Moving left: "abc"[0, 2, 1, 3], "def"[0, 2, 1, 3]
-  Moving right:  "def"[3, 1, 2, 0], "abc"[3, 1, 2, 0]
-Test 40, LTR:
-  Moving right: "ABC"[0, 2, 1, 3], "DEF"[0, 2, 1, 3]
-  Moving left:  "DEF"[3, 1, 2, 0], "ABC"[3, 1, 2, 0]
-Test 40, RTL:
-  Moving left: "ABC"[0, 1, 2, 3], "DEF"[0, 1, 2, 3]
-  Moving right:  "DEF"[3, 2, 1, 0], "ABC"[3, 2, 1, 0]
-
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index f796abd..f0fb9ad 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-07-20  Tony Chang  <tony at chromium.org>
+
+        Reviewed by Dan Bernstein.
+
+        [chromium] crash in Position::getInlineBoxAndOffset
+        https://bugs.webkit.org/show_bug.cgi?id=42202
+
+        Test: editing/selection/firstRect-crash.html
+        Manual test: win/contextmenu-key2.html
+
+        * page/EventHandler.cpp: Code no longer needed
+        * page/Frame.cpp:
+        (WebCore::Frame::firstRectForRange): Normalize Positions to VisiblePositions because
+            Positions may be pointing to nodes that have no renderer.  If there's no renderer,
+            getInlineBoxAndOffset will crash.
+
 2010-07-20  Adam Barth  <abarth at webkit.org>
 
         Reviewed by Darin Adler.
diff --git a/WebCore/manual-tests/win/contextmenu-key2.html b/WebCore/manual-tests/win/contextmenu-key2.html
new file mode 100644
index 0000000..2833e58
--- /dev/null
+++ b/WebCore/manual-tests/win/contextmenu-key2.html
@@ -0,0 +1,13 @@
+<div oncontextmenu="contextmenu(event)">
+Select some text in the contenteditable below and press the context menu key
+(or shift+F10).  The browser should not crash.
+<div contenteditable id="a">
+<p>|content editable|</p>
+</div>
+After content editable.
+</div>
+<script>
+function contextmenu(event) {
+  document.getElementById("a").style.visibility = "hidden";
+}
+</script>
diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp
index 8e3f70e..e7f94b0 100644
--- a/WebCore/page/EventHandler.cpp
+++ b/WebCore/page/EventHandler.cpp
@@ -2045,10 +2045,6 @@ bool EventHandler::sendContextMenuEventForKey()
     Position start = selectionController->selection().start();
 
     if (start.node() && (selectionController->rootEditableElement() || selectionController->isRange())) {
-        RenderObject* renderer = start.node()->renderer();
-        if (!renderer)
-            return false;
-
         RefPtr<Range> selection = selectionController->toNormalizedRange();
         IntRect firstRect = m_frame->firstRectForRange(selection.get());
 
diff --git a/WebCore/page/Frame.cpp b/WebCore/page/Frame.cpp
index 39740b8..f558fc1 100644
--- a/WebCore/page/Frame.cpp
+++ b/WebCore/page/Frame.cpp
@@ -294,24 +294,31 @@ String Frame::selectedText() const
 IntRect Frame::firstRectForRange(Range* range) const
 {
     int extraWidthToEndOfLine = 0;
-    ExceptionCode ec = 0;
-    ASSERT(range->startContainer(ec));
-    ASSERT(range->endContainer(ec));
+    ASSERT(range->startContainer());
+    ASSERT(range->endContainer());
 
     InlineBox* startInlineBox;
     int startCaretOffset;
-    range->startPosition().getInlineBoxAndOffset(DOWNSTREAM, startInlineBox, startCaretOffset);
+    Position startPosition = VisiblePosition(range->startPosition()).deepEquivalent();
+    if (startPosition.isNull())
+        return IntRect();
+    startPosition.getInlineBoxAndOffset(DOWNSTREAM, startInlineBox, startCaretOffset);
 
-    RenderObject* startRenderer = range->startContainer(ec)->renderer();
+    RenderObject* startRenderer = startPosition.node()->renderer();
+    ASSERT(startRenderer);
     IntRect startCaretRect = startRenderer->localCaretRect(startInlineBox, startCaretOffset, &extraWidthToEndOfLine);
     if (startCaretRect != IntRect())
         startCaretRect = startRenderer->localToAbsoluteQuad(FloatRect(startCaretRect)).enclosingBoundingBox();
 
     InlineBox* endInlineBox;
     int endCaretOffset;
-    range->endPosition().getInlineBoxAndOffset(UPSTREAM, endInlineBox, endCaretOffset);
+    Position endPosition = VisiblePosition(range->endPosition()).deepEquivalent();
+    if (endPosition.isNull())
+        return IntRect();
+    endPosition.getInlineBoxAndOffset(UPSTREAM, endInlineBox, endCaretOffset);
 
-    RenderObject* endRenderer = range->endContainer(ec)->renderer();
+    RenderObject* endRenderer = endPosition.node()->renderer();
+    ASSERT(endRenderer);
     IntRect endCaretRect = endRenderer->localCaretRect(endInlineBox, endCaretOffset);
     if (endCaretRect != IntRect())
         endCaretRect = endRenderer->localToAbsoluteQuad(FloatRect(endCaretRect)).enclosingBoundingBox();

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list