Scrolling to anchor tags does nothing in vertical-rl writing mode
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Dec 2014 01:02:29 +0000 (01:02 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 10 Dec 2014 01:02:29 +0000 (01:02 +0000)
https://bugs.webkit.org/show_bug.cgi?id=137838

Reviewed by David Hyatt.

Source/WebCore:

Scroll to a particular tag, and make sure the viewport is rendered as expected.

Tests: fast/events/scroll-to-anchor-vertical-lr-writing-mode.html
       fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html
       fast/events/scroll-to-anchor-vertical-writing-mode-contained.html
       fast/events/scroll-to-anchor-vertical-writing-mode.html

* page/FrameView.cpp:
(WebCore::FrameView::scrollToAnchor):
* rendering/ScrollBehavior.cpp:
* rendering/ScrollBehavior.h:

LayoutTests:

When we specify the behavior regarding scrolling to anchor tags, we previously had
only described behavior regarding horizontal text. When we have vertical text, we
need to switch the horizontal and vertical scrolling policies.

* fast/events/scroll-to-anchor-vertical-lr-writing-mode-expected.html: Added.
* fast/events/scroll-to-anchor-vertical-lr-writing-mode.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode-contained-2-expected.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode-contained-expected.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode-contained.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode-expected.html: Added.
* fast/events/scroll-to-anchor-vertical-writing-mode.html: Added.

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

13 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode-expected.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2-expected.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-expected.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-expected.html [new file with mode: 0644]
LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/page/FrameView.cpp
Source/WebCore/rendering/ScrollBehavior.cpp
Source/WebCore/rendering/ScrollBehavior.h

index 263a6d74da325f7a88eff7f4783ed8aa767eaa31..7e1a7c51cb97ddd4f6ec3e02a3beaad6925d46c4 100644 (file)
@@ -1,3 +1,23 @@
+2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Scrolling to anchor tags does nothing in vertical-rl writing mode
+        https://bugs.webkit.org/show_bug.cgi?id=137838
+
+        Reviewed by David Hyatt.
+
+        When we specify the behavior regarding scrolling to anchor tags, we previously had
+        only described behavior regarding horizontal text. When we have vertical text, we
+        need to switch the horizontal and vertical scrolling policies.
+
+        * fast/events/scroll-to-anchor-vertical-lr-writing-mode-expected.html: Added.
+        * fast/events/scroll-to-anchor-vertical-lr-writing-mode.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode-contained-2-expected.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode-contained-expected.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode-contained.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode-expected.html: Added.
+        * fast/events/scroll-to-anchor-vertical-writing-mode.html: Added.
+
 2014-12-09  Adenilson Cavalcanti  <cavalcantii@gmail.com>
 
         Groove/inset/outset borders show solid if the color is black
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode-expected.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode-expected.html
new file mode 100644 (file)
index 0000000..1f10a8b
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-lr}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<div id="last">If the test is successful, this text is on the left of the window upon navigation to this page.</div>
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+</div>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-lr-writing-mode.html
new file mode 100644 (file)
index 0000000..b9bd2b4
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-lr}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+<div id="last">If the test is successful, this text is on the left of the window upon navigation to this page.</div>
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2-expected.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2-expected.html
new file mode 100644 (file)
index 0000000..fc931fd
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<div id="last" style="-webkit-writing-mode: vertical-rl;">
+<p>Nam vel nisi non quam rutrum fermentum. Sed scelerisque magna eget dictum pretium. Phasellus ac hendrerit elit, id iaculis urna. Donec molestie lacus quis metus feugiat blandit. Cras in fermentum arcu. Phasellus enim lacus, placerat non arcu id, faucibus convallis turpis. Nullam eleifend eget arcu eget pretium. Donec pulvinar pellentesque leo.</p>
+<p>Proin posuere tincidunt lorem id efficitur. Etiam sollicitudin ex lectus, id suscipit nunc blandit non. Duis pretium eget lectus non porta. Pellentesque mattis ex at urna elementum, sed sollicitudin nunc consectetur. Donec vehicula justo felis, nec malesuada orci cursus pellentesque. Nunc nec ligula nunc. Donec lorem nibh, posuere auctor ultrices quis, sollicitudin id erat. Donec consequat tellus arcu, mattis pharetra lectus euismod ut. Cras et enim in ex laoreet dignissim id ornare nisl. Phasellus ac placerat elit. In at placerat ligula. Nulla id nisl et diam faucibus euismod. Aenean libero ligula, viverra eu lacinia in, interdum eu erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor, dolor et blandit rutrum, est orci egestas lorem, non lacinia ligula sapien quis enim. Quisque ornare, mi et commodo tincidunt, tellus ligula ultricies justo, ac sagittis augue dui ac nibh.</p>
+</div>
+</div>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html
new file mode 100644 (file)
index 0000000..2266f8e
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum volutpat consectetur enim a porttitor. Donec semper dignissim gravida. Suspendisse hendrerit faucibus sodales. Nulla at libero quis nisl pretium rhoncus. Nam id enim elementum, ultrices eros vehicula, eleifend lorem. Fusce blandit, lacus et blandit tristique, dui tellus rutrum sapien, et accumsan orci enim non ante. Vestibulum blandit nec nulla a mattis. Cras odio lorem, consectetur congue nulla sed, lacinia consectetur felis. Etiam quis dapibus quam, eget dignissim neque. Suspendisse blandit semper velit, a luctus risus. Sed placerat dolor vitae lacinia tempus. Donec sagittis metus eget euismod vulputate. Vivamus ultricies felis sed libero varius tempus vitae in est. Donec sodales leo at ornare dapibus. Etiam vel interdum neque, vel ullamcorper ante. Donec dictum tempor odio, efficitur pulvinar nibh efficitur sit amet.</p>
+<div id="last" style="-webkit-writing-mode: vertical-rl;">
+<p>Nam vel nisi non quam rutrum fermentum. Sed scelerisque magna eget dictum pretium. Phasellus ac hendrerit elit, id iaculis urna. Donec molestie lacus quis metus feugiat blandit. Cras in fermentum arcu. Phasellus enim lacus, placerat non arcu id, faucibus convallis turpis. Nullam eleifend eget arcu eget pretium. Donec pulvinar pellentesque leo.</p>
+<p>Proin posuere tincidunt lorem id efficitur. Etiam sollicitudin ex lectus, id suscipit nunc blandit non. Duis pretium eget lectus non porta. Pellentesque mattis ex at urna elementum, sed sollicitudin nunc consectetur. Donec vehicula justo felis, nec malesuada orci cursus pellentesque. Nunc nec ligula nunc. Donec lorem nibh, posuere auctor ultrices quis, sollicitudin id erat. Donec consequat tellus arcu, mattis pharetra lectus euismod ut. Cras et enim in ex laoreet dignissim id ornare nisl. Phasellus ac placerat elit. In at placerat ligula. Nulla id nisl et diam faucibus euismod. Aenean libero ligula, viverra eu lacinia in, interdum eu erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor, dolor et blandit rutrum, est orci egestas lorem, non lacinia ligula sapien quis enim. Quisque ornare, mi et commodo tincidunt, tellus ligula ultricies justo, ac sagittis augue dui ac nibh.</p>
+</div>
+<p>Vivamus justo felis, porttitor in metus at, dapibus iaculis mauris. Suspendisse hendrerit, metus at consectetur convallis, nisi nisl euismod ipsum, sed vulputate neque leo in ipsum. Maecenas vitae viverra felis, sed elementum purus. Curabitur hendrerit viverra tortor, sit amet elementum augue iaculis eget. Donec in lectus efficitur, congue urna et, ornare metus. Aliquam varius maximus dui vitae gravida. Pellentesque tortor tellus, blandit id nibh sit amet, egestas pellentesque nisl. Sed eget consectetur ipsum, sed rhoncus libero. Aenean efficitur justo facilisis nisi convallis vehicula. In volutpat sagittis mollis. Sed consequat tortor diam, eu vestibulum ipsum blandit sit amet. Pellentesque quis tincidunt sapien, at cursus metus. Suspendisse ut pulvinar augue, vitae efficitur metus. Pellentesque vitae vestibulum elit, sit amet maximus metus. Vivamus consectetur quis orci vitae elementum. Maecenas et euismod sapien.</p>
+</div>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-expected.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained-expected.html
new file mode 100644 (file)
index 0000000..5c801e6
--- /dev/null
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-rl}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<div style="-webkit-writing-mode: horizontal-tb;">
+<p id="last">Proin posuere tincidunt lorem id efficitur. Etiam sollicitudin ex lectus, id suscipit nunc blandit non. Duis pretium eget lectus non porta. Pellentesque mattis ex at urna elementum, sed sollicitudin nunc consectetur. Donec vehicula justo felis, nec malesuada orci cursus pellentesque. Nunc nec ligula nunc. Donec lorem nibh, posuere auctor ultrices quis, sollicitudin id erat. Donec consequat tellus arcu, mattis pharetra lectus euismod ut. Cras et enim in ex laoreet dignissim id ornare nisl. Phasellus ac placerat elit. In at placerat ligula. Nulla id nisl et diam faucibus euismod. Aenean libero ligula, viverra eu lacinia in, interdum eu erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor, dolor et blandit rutrum, est orci egestas lorem, non lacinia ligula sapien quis enim. Quisque ornare, mi et commodo tincidunt, tellus ligula ultricies justo, ac sagittis augue dui ac nibh.</p>
+</div>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-contained.html
new file mode 100644 (file)
index 0000000..6f60121
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-rl}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum volutpat consectetur enim a porttitor. Donec semper dignissim gravida. Suspendisse hendrerit faucibus sodales. Nulla at libero quis nisl pretium rhoncus. Nam id enim elementum, ultrices eros vehicula, eleifend lorem. Fusce blandit, lacus et blandit tristique, dui tellus rutrum sapien, et accumsan orci enim non ante. Vestibulum blandit nec nulla a mattis. Cras odio lorem, consectetur congue nulla sed, lacinia consectetur felis. Etiam quis dapibus quam, eget dignissim neque. Suspendisse blandit semper velit, a luctus risus. Sed placerat dolor vitae lacinia tempus. Donec sagittis metus eget euismod vulputate. Vivamus ultricies felis sed libero varius tempus vitae in est. Donec sodales leo at ornare dapibus. Etiam vel interdum neque, vel ullamcorper ante. Donec dictum tempor odio, efficitur pulvinar nibh efficitur sit amet.</p>
+<div style="-webkit-writing-mode: horizontal-tb;">
+<p>Nam vel nisi non quam rutrum fermentum. Sed scelerisque magna eget dictum pretium. Phasellus ac hendrerit elit, id iaculis urna. Donec molestie lacus quis metus feugiat blandit. Cras in fermentum arcu. Phasellus enim lacus, placerat non arcu id, faucibus convallis turpis. Nullam eleifend eget arcu eget pretium. Donec pulvinar pellentesque leo.</p>
+<p id="last">Proin posuere tincidunt lorem id efficitur. Etiam sollicitudin ex lectus, id suscipit nunc blandit non. Duis pretium eget lectus non porta. Pellentesque mattis ex at urna elementum, sed sollicitudin nunc consectetur. Donec vehicula justo felis, nec malesuada orci cursus pellentesque. Nunc nec ligula nunc. Donec lorem nibh, posuere auctor ultrices quis, sollicitudin id erat. Donec consequat tellus arcu, mattis pharetra lectus euismod ut. Cras et enim in ex laoreet dignissim id ornare nisl. Phasellus ac placerat elit. In at placerat ligula. Nulla id nisl et diam faucibus euismod. Aenean libero ligula, viverra eu lacinia in, interdum eu erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce auctor, dolor et blandit rutrum, est orci egestas lorem, non lacinia ligula sapien quis enim. Quisque ornare, mi et commodo tincidunt, tellus ligula ultricies justo, ac sagittis augue dui ac nibh.</p>
+</div>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-expected.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode-expected.html
new file mode 100644 (file)
index 0000000..78728e1
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-rl}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<div id="last">If the test is successful, this text is on the right of the window upon navigation to this page.</div>
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+</div>
+</body>
+</html>
diff --git a/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode.html b/LayoutTests/fast/events/scroll-to-anchor-vertical-writing-mode.html
new file mode 100644 (file)
index 0000000..05888b1
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html lang="zh-Hant">
+<head>
+<style>
+    html {-webkit-writing-mode: vertical-rl}
+</style>
+</head>
+<body>
+<div style="overflow: hidden; width: 300px; height: 300px;">
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+<div id="last">If the test is successful, this text is on the right of the window upon navigation to this page.</div>
+<script>
+for (var i = 0; i < 100; ++i)
+    document.writeln("<br>");
+</script>
+</div>
+<script>
+window.location = "#last";
+</script>
+</body>
+</html>
index 7ee85aa8b1f9b34052064c764837318072499153..16cdebac2f5e17fbeab04f5d70c02ccf6f078968 100644 (file)
@@ -1,3 +1,22 @@
+2014-12-09  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        Scrolling to anchor tags does nothing in vertical-rl writing mode
+        https://bugs.webkit.org/show_bug.cgi?id=137838
+
+        Reviewed by David Hyatt.
+
+        Scroll to a particular tag, and make sure the viewport is rendered as expected.
+
+        Tests: fast/events/scroll-to-anchor-vertical-lr-writing-mode.html
+               fast/events/scroll-to-anchor-vertical-writing-mode-contained-2.html
+               fast/events/scroll-to-anchor-vertical-writing-mode-contained.html
+               fast/events/scroll-to-anchor-vertical-writing-mode.html
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::scrollToAnchor):
+        * rendering/ScrollBehavior.cpp:
+        * rendering/ScrollBehavior.h:
+
 2014-12-09  Bem Jones-Bey  <bjonesbe@adobe.com>
 
         REGRESSION(r155906): Page content disappears on Tuaw article after loading
index f07cc4e7c59782dff9a5a07852a0018f720aa037..9ca1ff2eb3f9dbc2405638a9e5601d68b40e373e 100644 (file)
@@ -2791,7 +2791,12 @@ 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).
-    anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
+    if (anchorNode->renderer()->style().isHorizontalWritingMode())
+        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignTopAlways);
+    else if (anchorNode->renderer()->style().isFlippedBlocksWritingMode())
+        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignRightAlways, ScrollAlignment::alignToEdgeIfNeeded);
+    else
+        anchorNode->renderer()->scrollRectToVisible(rect, ScrollAlignment::alignLeftAlways, ScrollAlignment::alignToEdgeIfNeeded);
 
     if (AXObjectCache* cache = frame().document()->existingAXObjectCache())
         cache->handleScrolledToAnchor(anchorNode.get());
index 2e7ae7481c13a547aadf0368afc75ffae60abedf..b58b33184e6af2db4517e4e3d6acf9982608f06f 100644 (file)
@@ -50,6 +50,8 @@ const ScrollAlignment ScrollAlignment::alignCenterIfNeeded = { noScroll, alignCe
 WEBCORE_EXPORT const ScrollAlignment ScrollAlignment::alignToEdgeIfNeeded = { noScroll, alignToClosestEdge, alignToClosestEdge };
 WEBCORE_EXPORT const ScrollAlignment ScrollAlignment::alignCenterAlways = { alignCenter, alignCenter, alignCenter };
 const ScrollAlignment ScrollAlignment::alignTopAlways = { alignTop, alignTop, alignTop };
+const ScrollAlignment ScrollAlignment::alignRightAlways = { alignRight, alignRight, alignRight };
+const ScrollAlignment ScrollAlignment::alignLeftAlways = { alignLeft, alignLeft, alignLeft };
 const ScrollAlignment ScrollAlignment::alignBottomAlways = { alignBottom, alignBottom, alignBottom };
 
 }; // namespace WebCore
index 390c68a5f6c3ec78cde14c5147a7f6a8993b3a05..272bce3faa20acd3ca5394b4577d8a5c34253d70 100644 (file)
@@ -65,6 +65,8 @@ struct ScrollAlignment {
     static const ScrollAlignment alignToEdgeIfNeeded;
     static const ScrollAlignment alignCenterAlways;
     static const ScrollAlignment alignTopAlways;
+    static const ScrollAlignment alignRightAlways;
+    static const ScrollAlignment alignLeftAlways;
     static const ScrollAlignment alignBottomAlways;
 
     ScrollBehavior m_rectVisible;