[OS X] Scrollbars of overflow:scroll divs should appear on the left on RTL systems
authormmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 12 Mar 2016 21:18:25 +0000 (21:18 +0000)
committermmaxfield@apple.com <mmaxfield@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 12 Mar 2016 21:18:25 +0000 (21:18 +0000)
https://bugs.webkit.org/show_bug.cgi?id=155385

Reviewed by Simon Fraser.

Source/WebCore:

There is already some existing setup for RTL scrollbars. This patch hooks up this
existing support to the OS X triggering mechanism introduced in r197956. It also
fixes up the existing support to function even when the direction of the
RTL-scrollbar div is LTR (this means the contents of the div must be pushed
over by the width of the scrollbar).

Tests: fast/scrolling/rtl-scrollbars-overflow-contents.html
       fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html
       fast/scrolling/rtl-scrollbars-overflow-padding.html
       fast/scrolling/rtl-scrollbars-overflow-simple.html
       fast/scrolling/rtl-scrollbars-overflow.html

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::addOverflowFromPositionedObjects):
(WebCore::RenderBlock::logicalLeftOffsetForContent):
(WebCore::RenderBlock::logicalRightOffsetForContent):
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::overflowClipRect):
(WebCore::RenderBox::layoutOverflowRectForPropagation):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::computeScrollDimensions):
* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::shouldPlaceBlockDirectionScrollbarOnLogicalLeft):
* rendering/style/RenderStyle.h:

LayoutTests:

* platform/mac-wk1/TestExpectations:
* platform/mac/TestExpectations:
* platform/efl/TestExpectations:
* platform/gtk/TestExpectations:
* platform/ios-simulator/TestExpectations:
* platform/win/TestExpectations:
* fast/scrolling/rtl-scrollbars-overflow-contents-expected.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-contents.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-dir-rtl-expected.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-expected.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-padding-expected.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-padding.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-simple-expected-mismatch.html: Added.
* fast/scrolling/rtl-scrollbars-overflow-simple.html: Added.
* fast/scrolling/rtl-scrollbars-overflow.html: Added.

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

24 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents-expected.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl-expected.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-expected.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding-expected.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple-expected-mismatch.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple.html [new file with mode: 0644]
LayoutTests/fast/scrolling/rtl-scrollbars-overflow.html [new file with mode: 0644]
LayoutTests/platform/efl/TestExpectations
LayoutTests/platform/gtk/TestExpectations
LayoutTests/platform/ios-simulator/TestExpectations
LayoutTests/platform/mac-wk1/TestExpectations
LayoutTests/platform/mac/TestExpectations
LayoutTests/platform/win/TestExpectations
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderBlock.cpp
Source/WebCore/rendering/RenderBlockFlow.cpp
Source/WebCore/rendering/RenderBox.cpp
Source/WebCore/rendering/RenderLayer.cpp
Source/WebCore/rendering/style/RenderStyle.cpp
Source/WebCore/rendering/style/RenderStyle.h

index 6b36d04..70a781d 100644 (file)
@@ -1,3 +1,27 @@
+2016-03-12  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [OS X] Scrollbars of overflow:scroll divs should appear on the left on RTL systems
+        https://bugs.webkit.org/show_bug.cgi?id=155385
+
+        Reviewed by Simon Fraser.
+
+        * platform/mac-wk1/TestExpectations: 
+        * platform/mac/TestExpectations: 
+        * platform/efl/TestExpectations: 
+        * platform/gtk/TestExpectations: 
+        * platform/ios-simulator/TestExpectations: 
+        * platform/win/TestExpectations: 
+        * fast/scrolling/rtl-scrollbars-overflow-contents-expected.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-contents.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-dir-rtl-expected.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-expected.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-padding-expected.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-padding.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-simple-expected-mismatch.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow-simple.html: Added.
+        * fast/scrolling/rtl-scrollbars-overflow.html: Added.
+
 2016-03-12  Zalan Bujtas  <zalan@apple.com>
 
         [Forms: focus] focus rings around text fields do not follow contour (border-radius)
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents-expected.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents-expected.html
new file mode 100644 (file)
index 0000000..2ab8289
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 684px; height: 484px; position: relative; top: 15px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-contents.html
new file mode 100644 (file)
index 0000000..ff0a786
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 700px; height: 500px; position: relative;">
+<div id="element" style="overflow: scroll; width: 700px; height: 500px; position: absolute; left: -15px; bottom: -15px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl-expected.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl-expected.html
new file mode 100644 (file)
index 0000000..35615ad
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: hidden; width: 685px; height: 484px; position: relative; top: 15px; padding: 20px;" dir="rtl">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+<script>
+var selection = window.getSelection();
+selection.removeAllRanges();
+var range = document.createRange();
+range.selectNode(document.getElementById("element"));
+selection.addRange(range);
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html
new file mode 100644 (file)
index 0000000..1959332
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 100%; height: 539px; position: relative;">
+<div id="element" style="overflow: scroll; width: 700px; height: 500px; position: absolute; left: -15px; bottom: -16px; padding: 20px;" dir="rtl">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</div>
+<script>
+var selection = window.getSelection();
+selection.removeAllRanges();
+var range = document.createRange();
+range.selectNode(document.getElementById("element"));
+selection.addRange(range);
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-expected.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-expected.html
new file mode 100644 (file)
index 0000000..c7f2e5c
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: scroll; width: 700px; height: 500px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+<script>
+var element = document.getElementById("element");
+element.scrollTop = 1000;
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding-expected.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding-expected.html
new file mode 100644 (file)
index 0000000..fd68a39
--- /dev/null
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: hidden; width: 685px; height: 484px; position: relative; top: 15px; padding: 20px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+<script>
+var selection = window.getSelection();
+selection.removeAllRanges();
+var range = document.createRange();
+range.selectNode(document.getElementById("element"));
+selection.addRange(range);
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-padding.html
new file mode 100644 (file)
index 0000000..51d880b
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div style="overflow: hidden; width: 100%; height: 539px; position: relative;">
+<div id="element" style="overflow: scroll; width: 700px; height: 500px; position: absolute; left: -15px; bottom: -16px; padding: 20px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</div>
+<script>
+var selection = window.getSelection();
+selection.removeAllRanges();
+var range = document.createRange();
+range.selectNode(document.getElementById("element"));
+selection.addRange(range);
+</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple-expected-mismatch.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple-expected-mismatch.html
new file mode 100644 (file)
index 0000000..2c3cf27
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: scroll; width: 700px; height: 500px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow-simple.html
new file mode 100644 (file)
index 0000000..40d61af
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: scroll; width: 700px; height: 500px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/fast/scrolling/rtl-scrollbars-overflow.html b/LayoutTests/fast/scrolling/rtl-scrollbars-overflow.html
new file mode 100644 (file)
index 0000000..21cf683
--- /dev/null
@@ -0,0 +1,29 @@
+<!DOCTYPE html><!-- webkit-test-runner [ rtlScrollbars=true ] -->
+<html>
+<head>
+</head>
+<body>
+<div id="element" style="overflow: scroll; width: 700px; height: 500px;">
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus ultrices dapibus nunc, id porttitor quam mollis id. Morbi tincidunt mi neque, eget convallis ante convallis at. Donec gravida leo lacus, sit amet cursus ex vehicula eget. Vivamus vitae elit vel felis luctus posuere at in arcu. Ut eu bibendum lectus. Aliquam erat volutpat. Nullam nisl urna, malesuada eget feugiat vitae, tempus vel diam. Curabitur venenatis finibus egestas. Sed imperdiet molestie fermentum. Nullam pulvinar ultrices justo, eu gravida lacus sodales ac. Donec efficitur porttitor nisi, sit amet aliquam libero vulputate consectetur. Sed malesuada diam at euismod aliquam. Vestibulum maximus eu purus vitae porttitor.</p>
+
+<p>Etiam ut ipsum vitae neque malesuada accumsan. Nam sit amet turpis quis magna condimentum euismod at sed ante. Sed a metus ac tortor cursus mollis. Aenean vitae libero eu lorem egestas faucibus. Fusce eget velit sollicitudin, efficitur erat sit amet, auctor massa. Donec non est dolor. Phasellus efficitur fringilla euismod. Aliquam finibus sapien non volutpat venenatis. Maecenas id urna sit amet magna feugiat sagittis vel et ligula. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas molestie hendrerit dolor, imperdiet posuere est. Etiam molestie dictum tincidunt.</p>
+
+<p>Cras tincidunt lorem eu nisl tempor elementum. Vivamus tempor mi eu ligula eleifend, ut posuere metus imperdiet. Nam tristique commodo commodo. Proin vitae auctor ante. Mauris ullamcorper vitae urna in lacinia. Praesent euismod scelerisque felis, nec eleifend nulla vulputate non. Mauris nec rutrum diam. Morbi vitae magna sollicitudin, pellentesque diam vitae, faucibus turpis. Sed pellentesque eros quis condimentum cursus. Ut id viverra dui. Integer convallis nulla vel ipsum pretium, eget imperdiet ligula tincidunt.</p>
+
+<p>Sed lacus enim, pretium et sapien vel, auctor euismod ex. Nulla vestibulum nulla ut nisi tincidunt condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed lobortis id mauris dignissim vehicula. Vivamus sed ex ipsum. Vivamus suscipit neque quis ultrices posuere. Sed dignissim sapien non sapien venenatis, at lacinia felis efficitur.</p>
+
+<p>Nunc viverra nulla eget lacus imperdiet, et ullamcorper augue viverra. Nunc maximus consectetur malesuada. Nulla eget volutpat turpis. Nulla nec cursus purus, at consectetur sem. Sed pretium ipsum eu risus bibendum lacinia. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec laoreet nunc et lacus consequat, ut malesuada tortor bibendum. Maecenas vitae erat consectetur, lacinia libero nec, placerat leo. Suspendisse rutrum nisl nec urna tempus ultricies. Cras pharetra tortor quis lorem ultrices pharetra. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Pellentesque consectetur nunc malesuada, accumsan leo vel, cursus massa. In sodales libero nec ligula maximus ullamcorper. Maecenas porttitor condimentum dignissim.</p>
+
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse a risus nisi. Maecenas ut metus gravida, tincidunt arcu nec, ultrices dui. Vivamus at pretium purus, in feugiat odio. Phasellus facilisis mi id condimentum congue. Aenean sollicitudin risus a accumsan facilisis. Sed ac fringilla felis. Morbi malesuada vehicula sapien.</p>
+</div>
+<script>
+if (window.eventSender) {
+       var element = document.getElementById("element");
+    eventSender.mouseMoveTo(11, 20);
+    eventSender.mouseDown();
+    eventSender.mouseMoveTo(11, element.clientHeight - 20);
+    eventSender.mouseUp();
+}
+</script>
+</body>
+</html>
\ No newline at end of file
index c2bfd61..d280c80 100644 (file)
@@ -2961,3 +2961,8 @@ webkit.org/b/153772 fast/shadow-dom/slot-removal-crash-2.html [ Timeout ]
 # RTL Scrollbars are only implemented on OS X
 fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
index 91b6924..f02b27e 100644 (file)
@@ -2707,3 +2707,8 @@ fast/text/arabic-blacklisted-expected.html [ Pass ImageOnlyFailure ]
 # RTL Scrollbars are only implemented on OS X
 fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
index 3be721c..72f579a 100644 (file)
@@ -2993,6 +2993,11 @@ webkit.org/b/155271 [ Debug ] js/regress/getter-richards-try-catch.html [ Skip ]
 # RTL Scrollbars are only implemented on OS X.
 fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
 
 webkit.org/b/155372 [ Debug ] css3/masking/mask-luminance-svg.html [ Pass Crash ]
 webkit.org/b/155372 [ Debug ] css3/masking/mask-svg-script-none-to-png.html [ Pass Crash]
index 1881865..7dca715 100644 (file)
@@ -201,3 +201,8 @@ fast/scrolling/scroll-animator-overlay-scrollbars-hovered.html [ Skip ]
 # RTL Scrollbars are only implemented in WK2
 fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
index aa01589..8de0b92 100644 (file)
@@ -1339,3 +1339,8 @@ webkit.org/b/155140 js/promises-tests/promises-tests-2-3-3.html [ Pass Failure ]
 # RTL Scrollbars are only implemented on certain OSes.
 [ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 [ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+[ Yosemite ElCapitan ] fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
index b046aee..66812a8 100644 (file)
@@ -3364,3 +3364,8 @@ fast/text/arabic-blacklisted-expected.html [ Pass ImageOnlyFailure ]
 # RTL Scrollbars are only implemented on OS X
 fast/scrolling/rtl-scrollbars.html [ ImageOnlyFailure ]
 fast/scrolling/rtl-scrollbars-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-contents.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-padding.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow-simple.html [ ImageOnlyFailure ]
+fast/scrolling/rtl-scrollbars-overflow.html [ ImageOnlyFailure ]
index cac98fc..6f3f27f 100644 (file)
@@ -1,3 +1,37 @@
+2016-03-12  Myles C. Maxfield  <mmaxfield@apple.com>
+
+        [OS X] Scrollbars of overflow:scroll divs should appear on the left on RTL systems
+        https://bugs.webkit.org/show_bug.cgi?id=155385
+
+        Reviewed by Simon Fraser.
+
+        There is already some existing setup for RTL scrollbars. This patch hooks up this
+        existing support to the OS X triggering mechanism introduced in r197956. It also
+        fixes up the existing support to function even when the direction of the
+        RTL-scrollbar div is LTR (this means the contents of the div must be pushed
+        over by the width of the scrollbar).
+
+        Tests: fast/scrolling/rtl-scrollbars-overflow-contents.html
+               fast/scrolling/rtl-scrollbars-overflow-dir-rtl.html
+               fast/scrolling/rtl-scrollbars-overflow-padding.html
+               fast/scrolling/rtl-scrollbars-overflow-simple.html
+               fast/scrolling/rtl-scrollbars-overflow.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::addOverflowFromPositionedObjects):
+        (WebCore::RenderBlock::logicalLeftOffsetForContent):
+        (WebCore::RenderBlock::logicalRightOffsetForContent):
+        * rendering/RenderBlockFlow.cpp:
+        (WebCore::RenderBlockFlow::determineLogicalLeftPositionForChild):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::overflowClipRect):
+        (WebCore::RenderBox::layoutOverflowRectForPropagation):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::computeScrollDimensions):
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::shouldPlaceBlockDirectionScrollbarOnLogicalLeft):
+        * rendering/style/RenderStyle.h:
+
 2016-03-12  Zalan Bujtas  <zalan@apple.com>
 
         [Forms: focus] focus rings around text fields do not follow contour (border-radius)
index 2b04584..dd5b048 100644 (file)
@@ -1066,8 +1066,8 @@ void RenderBlock::addOverflowFromPositionedObjects()
         // Fixed positioned elements don't contribute to layout overflow, since they don't scroll with the content.
         if (positionedObject->style().position() != FixedPosition) {
             LayoutUnit x = positionedObject->x();
-            if (style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
-                x -= verticalScrollbarWidth();
+            if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
+                x += (style().isLeftToRightDirection() ? 1 : -1) * verticalScrollbarWidth();
             addOverflowFromChild(positionedObject, LayoutSize(x, positionedObject->y()));
         }
     }
@@ -2285,6 +2285,8 @@ LayoutUnit RenderBlock::textIndentOffset() const
 LayoutUnit RenderBlock::logicalLeftOffsetForContent(RenderRegion* region) const
 {
     LayoutUnit logicalLeftOffset = style().isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop();
+    if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
+        logicalLeftOffset += verticalScrollbarWidth();
     if (!region)
         return logicalLeftOffset;
     LayoutRect boxRect = borderBoxRectInRegion(region);
@@ -2294,6 +2296,8 @@ LayoutUnit RenderBlock::logicalLeftOffsetForContent(RenderRegion* region) const
 LayoutUnit RenderBlock::logicalRightOffsetForContent(RenderRegion* region) const
 {
     LayoutUnit logicalRightOffset = style().isHorizontalWritingMode() ? borderLeft() + paddingLeft() : borderTop() + paddingTop();
+    if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
+        logicalRightOffset += verticalScrollbarWidth();
     logicalRightOffset += availableLogicalWidth();
     if (!region)
         return logicalRightOffset;
index 6204ffa..5e96b4d 100644 (file)
@@ -828,8 +828,8 @@ LayoutUnit RenderBlockFlow::marginOffsetForSelfCollapsingBlock()
 void RenderBlockFlow::determineLogicalLeftPositionForChild(RenderBox& child, ApplyLayoutDeltaMode applyDelta)
 {
     LayoutUnit startPosition = borderStart() + paddingStart();
-    if (style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
-        startPosition -= verticalScrollbarWidth();
+    if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
+        startPosition += (style().isLeftToRightDirection() ? 1 : -1) * verticalScrollbarWidth();
     LayoutUnit totalAvailableLogicalWidth = borderAndPaddingLogicalWidth() + availableLogicalWidth();
 
     // Add in our start margin.
index 5cef073..c62a530 100644 (file)
@@ -1821,11 +1821,11 @@ LayoutRect RenderBox::overflowClipRect(const LayoutPoint& location, RenderRegion
     clipRect.setSize(clipRect.size() - LayoutSize(borderLeft() + borderRight(), borderTop() + borderBottom()));
 
     // Subtract out scrollbars if we have them.
-     if (layer()) {
-        if (style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+    if (layer()) {
+        if (style().shouldPlaceBlockDirectionScrollbarOnLeft())
             clipRect.move(layer()->verticalScrollbarWidth(relevancy), 0);
         clipRect.contract(layer()->verticalScrollbarWidth(relevancy), layer()->horizontalScrollbarHeight(relevancy));
-     }
+    }
 
     return clipRect;
 }
@@ -4892,6 +4892,8 @@ LayoutRect RenderBox::flippedClientBoxRect() const
     flipForWritingMode(rect);
     // Subtract space occupied by scrollbars. They are at their physical edge in this coordinate
     // system, so order is important here: first flip, then subtract scrollbars.
+    if (style().shouldPlaceBlockDirectionScrollbarOnLeft() && style().isLeftToRightDirection())
+        rect.move(verticalScrollbarWidth(), 0);
     rect.contract(verticalScrollbarWidth(), horizontalScrollbarHeight());
     return rect;
 }
index 6fdd60f..70ed2a8 100644 (file)
@@ -2688,7 +2688,7 @@ void RenderLayer::resize(const PlatformMouseEvent& evt, const LayoutSize& oldOff
     element->setMinimumSizeForResizing(minimumSize);
     
     LayoutSize adjustedOldOffset = LayoutSize(oldOffset.width() / zoomFactor, oldOffset.height() / zoomFactor);
-    if (renderer->style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) {
+    if (renderer->style().shouldPlaceBlockDirectionScrollbarOnLeft()) {
         newOffset.setWidth(-newOffset.width());
         adjustedOldOffset.setWidth(-adjustedOldOffset.width());
     }
@@ -2792,7 +2792,7 @@ bool RenderLayer::isActive() const
 
 static int cornerStart(const RenderLayer* layer, int minX, int maxX, int thickness)
 {
-    if (layer->renderer().style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+    if (layer->renderer().style().shouldPlaceBlockDirectionScrollbarOnLeft())
         return minX + layer->renderer().style().borderLeftWidth();
     return maxX - thickness - layer->renderer().style().borderRightWidth();
 }
@@ -2984,7 +2984,7 @@ IntRect RenderLayer::rectForVerticalScrollbar(const IntRect& borderBoxRect) cons
 LayoutUnit RenderLayer::verticalScrollbarStart(int minX, int maxX) const
 {
     const RenderBox* box = renderBox();
-    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLeft())
         return minX + box->borderLeft();
     return maxX - box->borderRight() - m_vBar->width();
 }
@@ -2993,7 +2993,7 @@ LayoutUnit RenderLayer::horizontalScrollbarStart(int minX) const
 {
     const RenderBox* box = renderBox();
     int x = minX + box->borderLeft();
-    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLeft())
         x += m_vBar ? m_vBar->width() : roundToInt(resizerCornerRect(this, box->borderBoxRect()).width());
     return x;
 }
@@ -3258,7 +3258,7 @@ IntSize RenderLayer::offsetFromResizeCorner(const IntPoint& absolutePoint) const
     // Currently the resize corner is either the bottom right corner or the bottom left corner.
     // FIXME: This assumes the location is 0, 0. Is this guaranteed to always be the case?
     IntSize elementSize = size();
-    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft())
+    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLeft())
         elementSize.setWidth(0);
     IntPoint resizerPoint = IntPoint(elementSize);
     IntPoint localPoint = roundedIntPoint(absoluteToContents(absolutePoint));
@@ -3364,6 +3364,8 @@ void RenderLayer::computeScrollDimensions()
     m_scrollSize.setHeight(overflowBottom() - overflowTop());
 
     int scrollableLeftOverflow = overflowLeft() - box->borderLeft();
+    if (box->style().isLeftToRightDirection() && box->style().shouldPlaceBlockDirectionScrollbarOnLeft() && m_vBar)
+        scrollableLeftOverflow -= m_vBar->width();
     int scrollableTopOverflow = overflowTop() - box->borderTop();
     setScrollOrigin(IntPoint(-scrollableLeftOverflow, -scrollableTopOverflow));
 }
@@ -3656,7 +3658,7 @@ void RenderLayer::drawPlatformResizerImage(GraphicsContext& context, const Layou
         cornerResizerSize = resizeCornerImage->size();
     }
 
-    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) {
+    if (renderer().style().shouldPlaceBlockDirectionScrollbarOnLeft()) {
         context.save();
         context.translate(resizerCornerRect.x() + cornerResizerSize.width(), resizerCornerRect.y() + resizerCornerRect.height() - cornerResizerSize.height());
         context.scale(FloatSize(-1.0, 1.0));
index bb1d3ff..e609075 100644 (file)
@@ -2042,4 +2042,15 @@ float RenderStyle::outlineOffset() const
     return m_background->outline().offset();
 }
 
+bool RenderStyle::shouldPlaceBlockDirectionScrollbarOnLeft() const
+{
+#if PLATFORM(MAC)
+    return ScrollableArea::systemLanguageIsRTL();
+#elif USE(RTL_SCROLLBAR)
+    return !isLeftToRightDirection() && isHorizontalWritingMode();
+#else
+    return false;
+#endif
+}
+
 } // namespace WebCore
index 97455ed..ed17e76 100644 (file)
@@ -1185,12 +1185,8 @@ public:
     Isolation isolation() const { return IsolationAuto; }
     bool hasIsolation() const { return false; }
 #endif
-#if USE(RTL_SCROLLBAR)
-    bool shouldPlaceBlockDirectionScrollbarOnLogicalLeft() const { return !isLeftToRightDirection() && isHorizontalWritingMode(); }
-#else
-    bool shouldPlaceBlockDirectionScrollbarOnLogicalLeft() const { return false; }
-#endif
+
+    bool shouldPlaceBlockDirectionScrollbarOnLeft() const;
 
 #if ENABLE(CSS_TRAILING_WORD)
     TrailingWord trailingWord() const { return static_cast<TrailingWord>(rareInheritedData->trailingWord); }