Changeset 140177 in webkit
- Timestamp:
- Jan 18, 2013 10:28:42 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 9 added
- 18 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r140174 r140177 1 2013-01-18 Terry Anderson <tdanderson@chromium.org> 2 3 Scroll gestures should not create wheel events 4 https://bugs.webkit.org/show_bug.cgi?id=103952 5 6 Reviewed by James Robinson. 7 8 Added five new layout tests to check that scroll gestures will correctly scroll 9 nested divs and iframes. Also modified existing layout tests to no longer 10 expect mousewheel events. 11 12 * fast/events/touch/gesture/resources/scroll-inside-editable-iframe.html: Added. 13 * fast/events/touch/gesture/touch-gesture-scroll-div-propagated-expected.txt: Added. 14 * fast/events/touch/gesture/touch-gesture-scroll-div-propagated.html: Copied from LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page.html. 15 * fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html: 16 * fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated-expected.txt: Added. 17 * fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated.html: Copied from LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page.html. 18 * fast/events/touch/gesture/touch-gesture-scroll-div.html: 19 * fast/events/touch/gesture/touch-gesture-scroll-iframe-editable-expected.txt: Copied from LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-iframe-expected.txt. 20 * fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html: Copied from LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-iframe.html. 21 * fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated-expected.txt: Added. 22 * fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated.html: Copied from LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page.html. 23 * fast/events/touch/gesture/touch-gesture-scroll-iframe.html: 24 * fast/events/touch/gesture/touch-gesture-scroll-page-propagated-expected.txt: Added. 25 * fast/events/touch/gesture/touch-gesture-scroll-page-propagated.html: Copied from LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page.html. 26 * fast/events/touch/gesture/touch-gesture-scroll-page.html: 27 * fast/events/touch/gesture/touch-gesture-scroll-shy-target.html: 28 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-expected.txt: 29 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-propagated-expected.txt: Added. 30 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt: 31 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated-expected.txt: Added. 32 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-iframe-expected.txt: 33 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated-expected.txt: Added. 34 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-page-expected.txt: 35 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-page-propagated-expected.txt: Added. 36 * platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-shy-target-expected.txt: 37 * platform/chromium/plugins/gesture-events-expected.txt: 38 * platform/chromium/plugins/gesture-events-scrolled-expected.txt: 39 1 40 2013-01-18 Nate Chapin <japhet@chromium.org> 2 41 -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-propagated.html
r140174 r140177 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE html> 2 2 <html> 3 3 <head> … … 6 6 <script src="resources/gesture-helpers.js"></script> 7 7 <style type="text/css"> 8 8 9 ::-webkit-scrollbar { 9 10 width: 0px; … … 18 19 margin: 0px; 19 20 } 21 20 22 #redbox { 21 23 width: 100px; … … 26 28 } 27 29 30 #bluebox { 31 width: 100px; 32 height: 100px; 33 background: blue; 34 padding: 0px; 35 margin: 0px; 36 } 37 38 #innerdiv { 39 width: 200px; 40 height: 200px; 41 overflow-y: scroll; 42 overflow-x: scroll; 43 } 44 45 #outerdiv { 46 width: 250px; 47 height: 250px; 48 overflow-y: scroll; 49 overflow-x: scroll; 50 } 51 28 52 td { 29 53 padding: 0px; 30 54 } 55 31 56 </style> 32 57 </head> 33 58 <body style="margin:0" onload="runTest();"> 34 59 35 <table id="table_to_fill"> 36 <tr><td><div id="greenbox"></div></td></tr> 37 <tr><td><div id="redbox"></div></td></tr> 38 </table> 60 <div id="outerdiv"> 61 <table border="0" cellspacing="0px" > 62 <tr><td> 63 <div id="innerdiv"> 64 <table border="0" cellspacing="0px" > 65 <tr><td><div id="greenbox"></div></td></tr> 66 <tr><td><div id="redbox"></div></td></tr> 67 <tr><td><div id="greenbox"></div></td></tr> 68 <tr><td><div id="redbox"></div></td></tr> 69 </table> 70 </div> 71 </td></tr> 72 <tr><td> 73 <div id="bluebox"></div> 74 </td></tr> 75 </table> 76 </div> 39 77 40 78 <p id="description"></p> … … 42 80 <script type="text/javascript"> 43 81 82 var movedbox; 83 var touchtarget; 44 84 var expectedGesturesTotal = 2; 45 85 var gesturesOccurred = 0; 46 86 var scrollAmountX = ['0', '0']; 47 var scrollAmountY = [' 70', '130'];87 var scrollAmountY = ['0', '10']; 48 88 var wheelEventsOccurred = 0; 49 var expectedWheelEventsOccurred = [' 2', '2'];89 var expectedWheelEventsOccurred = ['0', '0']; 50 90 var scrollEventsOccurred = 0; 51 var scrolledElement = ' document.body'91 var scrolledElement = 'movedbox' 52 92 var scrollEventsOccurred = 0; 53 93 var expectedScrollEventsOccurred = '1'; 94 54 95 55 96 function recordScroll(event) { … … 70 111 } 71 112 72 // Always construct a page larger than the vertical height of the window.73 function buildPage()74 {75 var table = document.getElementById('table_to_fill');76 var targetHeight = document.body.offsetHeight;77 var cellPairHeight = table.offsetHeight;78 var numberOfReps = targetHeight / cellPairHeight * 2;79 var i;80 for (i = 0; i < numberOfReps; i++) {81 var p = document.createElement('tr');82 p.innerHTML = '<td><div id="greenbox"></div></td>';83 table.appendChild(p);84 var p = document.createElement('tr');85 p.innerHTML = '<td><div id="redbox"></div></td>';86 table.appendChild(p);87 }88 89 window.addEventListener("scroll", recordScroll);90 window.addEventListener("mousewheel", recordWheel);91 }92 113 93 114 function firstGestureScroll() … … 95 116 debug("first gesture"); 96 117 eventSender.gestureScrollBegin(10, 72); 97 eventSender.gestureScrollUpdate(0, -30); 98 eventSender.gestureScrollUpdate(0, -40); 118 eventSender.gestureScrollUpdate(0, -150); 99 119 eventSender.gestureScrollEnd(0, 0); 100 120 … … 107 127 debug("second gesture"); 108 128 eventSender.gestureScrollBegin(12, 40); 109 eventSender.gestureScrollUpdate(0, -30); 110 eventSender.gestureScrollUpdate(0, -30); 129 eventSender.gestureScrollUpdate(0, -60); 111 130 eventSender.gestureScrollEnd(0, 0); 112 131 … … 120 139 function runTest() 121 140 { 122 buildPage(); 141 movedbox = document.getElementById("outerdiv"); 142 touchtarget = document.getElementById("innerdiv"); 143 touchtarget.addEventListener("scroll", recordScroll); 144 touchtarget.addEventListener("mousewheel", recordWheel); 145 123 146 if (window.eventSender) { 124 description('This tests scroll gesture event scrolling on a whole page.'); 147 description('This tests that a gesture scroll is propagated from an ' + 148 'inner div to an outer div when the inner div has no ' + 149 'remaining scroll offset.'); 125 150 if (checkTestDependencies()) 126 151 firstGestureScroll(); -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-scaled.html
r139022 r140177 72 72 var gesturesOccurred = 0; 73 73 var scrollAmountX = ['45', '45']; 74 var scrollAmountY = ['0', '4 8'];74 var scrollAmountY = ['0', '47']; 75 75 var wheelEventsOccurred = 0; 76 var expectedWheelEventsOccurred = [' 1', '1'];76 var expectedWheelEventsOccurred = ['0', '0']; 77 77 var scrollEventsOccurred = 0; 78 78 var expectedScrollEventsOccurred = '1'; -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated.html
r140174 r140177 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE html> 2 2 <html> 3 3 <head> … … 6 6 <script src="resources/gesture-helpers.js"></script> 7 7 <style type="text/css"> 8 8 9 ::-webkit-scrollbar { 9 10 width: 0px; … … 18 19 margin: 0px; 19 20 } 21 20 22 #redbox { 21 23 width: 100px; … … 26 28 } 27 29 30 #bluebox { 31 width: 100px; 32 height: 100px; 33 background: blue; 34 padding: 0px; 35 margin: 0px; 36 } 37 38 #yellowbox { 39 width: 100px; 40 height: 100px; 41 background: yellow; 42 padding: 0px; 43 margin: 0px; 44 } 45 46 #innerdiv { 47 width: 200px; 48 height: 200px; 49 overflow-y: scroll; 50 overflow-x: scroll; 51 } 52 53 #outerdiv { 54 width: 250px; 55 height: 250px; 56 overflow-y: scroll; 57 overflow-x: scroll; 58 } 59 60 #outermostdiv { 61 width: 300px; 62 height: 300px; 63 overflow-y: scroll; 64 overflow-x: scroll; 65 } 66 28 67 td { 29 68 padding: 0px; 30 69 } 70 31 71 </style> 32 72 </head> 33 73 <body style="margin:0" onload="runTest();"> 34 74 35 <table id="table_to_fill"> 36 <tr><td><div id="greenbox"></div></td></tr> 37 <tr><td><div id="redbox"></div></td></tr> 38 </table> 75 <div id="outermostdiv"> 76 <table border="0" cellspacing="0px" > 77 <tr><td> 78 <div id="outerdiv"> 79 <table border="0" cellspacing="0px" > 80 <tr><td> 81 <div id="innerdiv"> 82 <table border="0" cellspacing="0px" > 83 <tr><td><div id="greenbox"></div></td></tr> 84 <tr><td><div id="redbox"></div></td></tr> 85 <tr><td><div id="greenbox"></div></td></tr> 86 <tr><td><div id="redbox"></div></td></tr> 87 </table> 88 </div> 89 </td></tr> 90 <tr><td> 91 <div id="bluebox"></div> 92 </td></tr> 93 </table> 94 </div> 95 </td></tr> 96 <tr><td> 97 <div id="yellowbox"></div> 98 </td></tr> 99 </table> 100 </div> 39 101 40 102 <p id="description"></p> … … 42 104 <script type="text/javascript"> 43 105 106 var movedbox; 107 var touchtarget; 44 108 var expectedGesturesTotal = 2; 45 109 var gesturesOccurred = 0; 46 110 var scrollAmountX = ['0', '0']; 47 var scrollAmountY = [' 70', '130'];111 var scrollAmountY = ['0', '25']; 48 112 var wheelEventsOccurred = 0; 49 var expectedWheelEventsOccurred = [' 2', '2'];113 var expectedWheelEventsOccurred = ['0', '0']; 50 114 var scrollEventsOccurred = 0; 51 var scrolledElement = ' document.body'115 var scrolledElement = 'movedbox' 52 116 var scrollEventsOccurred = 0; 53 117 var expectedScrollEventsOccurred = '1'; 118 54 119 55 120 function recordScroll(event) { … … 70 135 } 71 136 72 // Always construct a page larger than the vertical height of the window.73 function buildPage()74 {75 var table = document.getElementById('table_to_fill');76 var targetHeight = document.body.offsetHeight;77 var cellPairHeight = table.offsetHeight;78 var numberOfReps = targetHeight / cellPairHeight * 2;79 var i;80 for (i = 0; i < numberOfReps; i++) {81 var p = document.createElement('tr');82 p.innerHTML = '<td><div id="greenbox"></div></td>';83 table.appendChild(p);84 var p = document.createElement('tr');85 p.innerHTML = '<td><div id="redbox"></div></td>';86 table.appendChild(p);87 }88 89 window.addEventListener("scroll", recordScroll);90 window.addEventListener("mousewheel", recordWheel);91 }92 137 93 138 function firstGestureScroll() … … 95 140 debug("first gesture"); 96 141 eventSender.gestureScrollBegin(10, 72); 97 eventSender.gestureScrollUpdate(0, -30); 98 eventSender.gestureScrollUpdate(0, -40); 142 eventSender.gestureScrollUpdate(0, -230); 99 143 eventSender.gestureScrollEnd(0, 0); 100 144 … … 107 151 debug("second gesture"); 108 152 eventSender.gestureScrollBegin(12, 40); 109 eventSender.gestureScrollUpdate(0, -30); 110 eventSender.gestureScrollUpdate(0, -30); 153 eventSender.gestureScrollUpdate(0, -45); 111 154 eventSender.gestureScrollEnd(0, 0); 112 155 … … 120 163 function runTest() 121 164 { 122 buildPage(); 165 movedbox = document.getElementById("outermostdiv"); 166 touchtarget = document.getElementById("innerdiv"); 167 touchtarget.addEventListener("scroll", recordScroll); 168 touchtarget.addEventListener("mousewheel", recordWheel); 169 123 170 if (window.eventSender) { 124 description('This tests scroll gesture event scrolling on a whole page.'); 171 description('This tests that a gesture scroll is propagated from an ' + 172 'inner div to an outer div twice when the scrolled divs have no ' + 173 'remaining scroll offset.'); 125 174 if (checkTestDependencies()) 126 175 firstGestureScroll(); -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-div.html
r120792 r140177 74 74 var scrollAmountY = ['0', '95']; 75 75 var wheelEventsOccurred = 0; 76 var expectedWheelEventsOccurred = [' 1', '1'];76 var expectedWheelEventsOccurred = ['0', '0']; 77 77 var scrollEventsOccurred = 0; 78 78 var expectedScrollEventsOccurred = '1'; -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-iframe-editable-expected.txt
r140174 r140177 1 1 2 This tests gesture event scrolling in iframes. Red-green strip is scrolled on pass.2 This tests gesture event scrolling of an iframe in an overflow div. Red-green strip is scrolled on pass. 3 3 4 4 On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". … … 6 6 7 7 first gesture 8 wheel event 0+> [object HTMLDivElement]9 8 PASS touchtarget.contentDocument.body.scrollTop is 140 10 9 PASS touchtarget.contentDocument.body.scrollLeft is 0 11 PASS wheelEventsOccurred is 110 PASS wheelEventsOccurred is 0 12 11 second gesture 13 wheel event 0+> [object HTMLDivElement]14 12 PASS touchtarget.contentDocument.body.scrollTop is 200 15 13 PASS touchtarget.contentDocument.body.scrollLeft is 0 16 PASS wheelEventsOccurred is 114 PASS wheelEventsOccurred is 0 17 15 scroll event 0+> [object HTMLDocument] 18 16 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html
r140174 r140177 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE html> 2 2 <html> 3 3 <head> … … 7 7 <style type="text/css"> 8 8 #touchtarget { 9 width: 200px;10 height: 200px;11 position: relative;12 9 background: white; 13 10 } 14 11 15 12 ::-webkit-scrollbar { 16 13 width: 0px; … … 18 15 } 19 16 17 #container { 18 width: 200px; 19 height: 200px; 20 overflow-y: scroll; 21 overflow-x: scroll; 22 display: block; 23 } 24 20 25 </style> 21 26 </head> 22 27 <body> 23 <iframe id="touchtarget" src="resources/scroll-inside-iframe.html"></iframe> 28 <div id="container"> 29 <iframe id="touchtarget" src="resources/scroll-inside-editable-iframe.html"></iframe> 30 </div> 24 31 <p id="description"></p> 25 32 <div id="console"></div> … … 32 39 var scrollAmountY = ['140', '200']; 33 40 var wheelEventsOccurred = 0; 34 var expectedWheelEventsOccurred = [' 1', '1'];41 var expectedWheelEventsOccurred = ['0', '0']; 35 42 var scrollEventsOccurred = 0; 36 43 var expectedScrollEventsOccurred = '1'; … … 58 65 checkScrollOffset(); 59 66 } 60 67 61 68 if (window.testRunner) 62 69 testRunner.waitUntilDone(); 63 70 64 71 function runTest() 65 72 { … … 69 76 70 77 if (window.eventSender) { 71 description('This tests gesture event scrolling in iframes. ' +78 description('This tests gesture event scrolling of an iframe in an overflow div. ' + 72 79 'Red-green strip is scrolled on pass.'); 73 80 if (checkTestDependencies()) … … 76 83 exitIfNecessary(); 77 84 } else { 78 debug("This test requires DumpRenderTree 85 debug("This test requires DumpRenderTree. Touch-scroll the red/green strip."); 79 86 } 80 87 } -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated.html
r140174 r140177 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE html> 2 2 <html> 3 3 <head> … … 6 6 <script src="resources/gesture-helpers.js"></script> 7 7 <style type="text/css"> 8 8 9 ::-webkit-scrollbar { 9 10 width: 0px; … … 11 12 } 12 13 13 # greenbox {14 #bluebox { 14 15 width: 100px; 15 16 height: 100px; 16 background: green;17 background: blue; 17 18 padding: 0px; 18 19 margin: 0px; 19 20 } 20 #redbox { 21 width: 100px; 22 height: 100px; 23 background: red; 24 padding: 0px; 25 margin: 0px; 21 22 #container { 23 width: 150px; 24 height: 150px; 25 overflow-y: scroll; 26 overflow-x: scroll; 27 } 28 29 #outerdiv { 30 width: 200px; 31 height: 200px; 32 overflow-y: scroll; 33 overflow-x: scroll; 26 34 } 27 35 … … 29 37 padding: 0px; 30 38 } 39 31 40 </style> 32 41 </head> 33 <body style="margin:0" onload="runTest();">42 <body style="margin:0" > 34 43 35 <table id="table_to_fill"> 36 <tr><td><div id="greenbox"></div></td></tr> 37 <tr><td><div id="redbox"></div></td></tr> 38 </table> 44 <div id="outerdiv"> 45 <table border="0" cellspacing="0px" > 46 <tr><td> 47 <div id="container"> 48 <iframe id="touchtargetiframe" src="resources/scroll-inside-editable-iframe.html"></iframe> 49 </div> 50 </td></tr> 51 <tr><td> 52 <div id="bluebox"></div> 53 </td></tr> 54 </table> 55 </div> 39 56 40 57 <p id="description"></p> … … 42 59 <script type="text/javascript"> 43 60 61 var movedbox; 62 var touchtarget; 44 63 var expectedGesturesTotal = 2; 45 64 var gesturesOccurred = 0; 46 65 var scrollAmountX = ['0', '0']; 47 var scrollAmountY = [' 70', '130'];66 var scrollAmountY = ['0', '50']; 48 67 var wheelEventsOccurred = 0; 49 var expectedWheelEventsOccurred = [' 2', '2'];68 var expectedWheelEventsOccurred = ['0', '0']; 50 69 var scrollEventsOccurred = 0; 51 var scrolledElement = ' document.body'70 var scrolledElement = 'movedbox' 52 71 var scrollEventsOccurred = 0; 53 72 var expectedScrollEventsOccurred = '1'; 73 54 74 55 75 function recordScroll(event) { … … 70 90 } 71 91 72 // Always construct a page larger than the vertical height of the window.73 function buildPage()74 {75 var table = document.getElementById('table_to_fill');76 var targetHeight = document.body.offsetHeight;77 var cellPairHeight = table.offsetHeight;78 var numberOfReps = targetHeight / cellPairHeight * 2;79 var i;80 for (i = 0; i < numberOfReps; i++) {81 var p = document.createElement('tr');82 p.innerHTML = '<td><div id="greenbox"></div></td>';83 table.appendChild(p);84 var p = document.createElement('tr');85 p.innerHTML = '<td><div id="redbox"></div></td>';86 table.appendChild(p);87 }88 89 window.addEventListener("scroll", recordScroll);90 window.addEventListener("mousewheel", recordWheel);91 }92 92 93 93 function firstGestureScroll() … … 95 95 debug("first gesture"); 96 96 eventSender.gestureScrollBegin(10, 72); 97 eventSender.gestureScrollUpdate(0, -30); 98 eventSender.gestureScrollUpdate(0, -40); 97 eventSender.gestureScrollUpdate(0, -700); 99 98 eventSender.gestureScrollEnd(0, 0); 100 99 … … 107 106 debug("second gesture"); 108 107 eventSender.gestureScrollBegin(12, 40); 109 eventSender.gestureScrollUpdate(0, -30); 110 eventSender.gestureScrollUpdate(0, -30); 108 eventSender.gestureScrollUpdate(0, -100); 111 109 eventSender.gestureScrollEnd(0, 0); 112 110 … … 120 118 function runTest() 121 119 { 122 buildPage(); 120 movedbox = document.getElementById("outerdiv"); 121 touchtarget = document.getElementById("touchtargetiframe"); 122 touchtarget.contentDocument.addEventListener("scroll", recordScroll); 123 touchtarget.contentDocument.body.addEventListener("mousewheel", recordWheel); 124 123 125 if (window.eventSender) { 124 description('This tests scroll gesture event scrolling on a whole page.'); 126 description('This tests that a gesture scroll is propagated from an ' + 127 'iframe to an outer div when the iframe has no remaining ' + 128 'scroll offset.'); 125 129 if (checkTestDependencies()) 126 130 firstGestureScroll(); -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-iframe.html
r120792 r140177 32 32 var scrollAmountY = ['140', '200']; 33 33 var wheelEventsOccurred = 0; 34 var expectedWheelEventsOccurred = [' 1', '1'];34 var expectedWheelEventsOccurred = ['0', '0']; 35 35 var scrollEventsOccurred = 0; 36 36 var expectedScrollEventsOccurred = '1'; -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page-propagated.html
r140174 r140177 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">1 <!DOCTYPE html> 2 2 <html> 3 3 <head> … … 18 18 margin: 0px; 19 19 } 20 20 21 #redbox { 21 22 width: 100px; … … 24 25 padding: 0px; 25 26 margin: 0px; 27 } 28 29 #bluebox { 30 width: 100px; 31 height: 100px; 32 background: blue; 33 padding: 0px; 34 margin: 0px; 35 } 36 37 #yellowbox { 38 width: 100px; 39 height: 100px; 40 background: yellow; 41 padding: 0px; 42 margin: 0px; 43 } 44 45 #touchtargetdiv { 46 width: 200px; 47 height: 200px; 48 overflow-y: scroll; 49 overflow-x: scroll; 26 50 } 27 51 … … 33 57 <body style="margin:0" onload="runTest();"> 34 58 35 <table id="table_to_fill"> 36 <tr><td><div id="greenbox"></div></td></tr> 37 <tr><td><div id="redbox"></div></td></tr> 59 <div id="touchtargetdiv"> 60 <table border="0" cellspacing="0px" > 61 <tr><td><div id="yellowbox"></div></td></tr> 62 <tr><td><div id="bluebox"></div></td></tr> 63 <tr><td><div id="yellowbox"></div></td></tr> 64 <tr><td><div id="bluebox"></div></td></tr> 65 </table> 66 </div> 67 68 <table id="table_to_fill" border="0" cellspacing="0px"> 69 <tr><td><div id="greenbox"></div></td></tr> 70 <tr><td><div id="redbox"></div></td></tr> 38 71 </table> 39 72 … … 42 75 <script type="text/javascript"> 43 76 77 var touchtarget; 44 78 var expectedGesturesTotal = 2; 45 79 var gesturesOccurred = 0; 46 80 var scrollAmountX = ['0', '0']; 47 var scrollAmountY = [' 70', '130'];81 var scrollAmountY = ['0', '160']; 48 82 var wheelEventsOccurred = 0; 49 var expectedWheelEventsOccurred = [' 2', '2'];83 var expectedWheelEventsOccurred = ['0', '0']; 50 84 var scrollEventsOccurred = 0; 51 85 var scrolledElement = 'document.body' … … 86 120 table.appendChild(p); 87 121 } 88 89 window.addEventListener("scroll", recordScroll);90 window.addEventListener("mousewheel", recordWheel);91 122 } 92 123 … … 95 126 debug("first gesture"); 96 127 eventSender.gestureScrollBegin(10, 72); 97 eventSender.gestureScrollUpdate(0, -30); 98 eventSender.gestureScrollUpdate(0, -40); 128 eventSender.gestureScrollUpdate(0, -110); 99 129 eventSender.gestureScrollEnd(0, 0); 100 130 … … 107 137 debug("second gesture"); 108 138 eventSender.gestureScrollBegin(12, 40); 109 eventSender.gestureScrollUpdate(0, -30); 110 eventSender.gestureScrollUpdate(0, -30); 139 eventSender.gestureScrollUpdate(0, -250); 111 140 eventSender.gestureScrollEnd(0, 0); 112 141 … … 121 150 { 122 151 buildPage(); 152 touchtarget = document.getElementById('touchtargetdiv'); 153 touchtarget.addEventListener("scroll", recordScroll); 154 touchtarget.addEventListener("mousewheel", recordWheel); 155 123 156 if (window.eventSender) { 124 description('This tests scroll gesture event scrolling on a whole page.'); 157 description('This tests that a gesture scroll is propagated from a div ' + 158 'to the page when the div has no remaining scroll offset.'); 125 159 if (checkTestDependencies()) 126 160 firstGestureScroll(); -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-page.html
r120792 r140177 47 47 var scrollAmountY = ['70', '130']; 48 48 var wheelEventsOccurred = 0; 49 var expectedWheelEventsOccurred = [' 2', '2'];49 var expectedWheelEventsOccurred = ['0', '0']; 50 50 var scrollEventsOccurred = 0; 51 51 var scrolledElement = 'document.body' -
trunk/LayoutTests/fast/events/touch/gesture/touch-gesture-scroll-shy-target.html
r120792 r140177 77 77 var scrollAmountY = ['62', '0']; 78 78 var wheelEventsOccurred = 0; 79 var expectedWheelEventsOccurred = [' 3', '2'];79 var expectedWheelEventsOccurred = ['0', '0']; 80 80 var scrollEventsOccurred = 0; 81 81 var expectedScrollEventsOccurred = '1'; -
trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-expected.txt
r110240 r140177 5 5 6 6 first gesture 7 wheel event 0+> [object HTMLDivElement]8 7 PASS movingdiv.scrollTop is 0 9 8 PASS movingdiv.scrollLeft is 90 10 PASS wheelEventsOccurred is 19 PASS wheelEventsOccurred is 0 11 10 second gesture 12 wheel event 0+> [object HTMLDivElement]13 11 PASS movingdiv.scrollTop is 95 14 12 PASS movingdiv.scrollLeft is 90 15 PASS wheelEventsOccurred is 113 PASS wheelEventsOccurred is 0 16 14 scroll event 0+> [object HTMLDivElement] 17 15 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-div-scaled-expected.txt
r139022 r140177 5 5 6 6 first gesture 7 wheel event 0+> [object HTMLDivElement]8 7 PASS movingdiv.scrollTop is 0 9 8 PASS movingdiv.scrollLeft is 45 10 PASS wheelEventsOccurred is 19 PASS wheelEventsOccurred is 0 11 10 second gesture 12 wheel event 0+> [object HTMLDivElement] 13 PASS movingdiv.scrollTop is 48 11 PASS movingdiv.scrollTop is 47 14 12 PASS movingdiv.scrollLeft is 45 15 PASS wheelEventsOccurred is 113 PASS wheelEventsOccurred is 0 16 14 scroll event 0+> [object HTMLDivElement] 17 15 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-iframe-expected.txt
r110240 r140177 6 6 7 7 first gesture 8 wheel event 0+> [object HTMLDivElement]9 8 PASS touchtarget.contentDocument.body.scrollTop is 140 10 9 PASS touchtarget.contentDocument.body.scrollLeft is 0 11 PASS wheelEventsOccurred is 110 PASS wheelEventsOccurred is 0 12 11 second gesture 13 wheel event 0+> [object HTMLDivElement]14 12 PASS touchtarget.contentDocument.body.scrollTop is 200 15 13 PASS touchtarget.contentDocument.body.scrollLeft is 0 16 PASS wheelEventsOccurred is 114 PASS wheelEventsOccurred is 0 17 15 scroll event 0+> [object HTMLDocument] 18 16 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-page-expected.txt
r110240 r140177 5 5 6 6 first gesture 7 wheel event 0+> [object HTMLDivElement]8 wheel event 1+> [object HTMLDivElement]9 7 PASS document.body.scrollTop is 70 10 8 PASS document.body.scrollLeft is 0 11 PASS wheelEventsOccurred is 29 PASS wheelEventsOccurred is 0 12 10 second gesture 13 wheel event 0+> [object HTMLDivElement]14 wheel event 1+> [object HTMLDivElement]15 11 PASS document.body.scrollTop is 130 16 12 PASS document.body.scrollLeft is 0 17 PASS wheelEventsOccurred is 213 PASS wheelEventsOccurred is 0 18 14 scroll event 0+> [object HTMLDocument] 19 15 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/platform/chromium/fast/events/touch/gesture/touch-gesture-scroll-shy-target-expected.txt
r110371 r140177 5 5 6 6 first gesture 7 wheel event 0+> [object HTMLDivElement]8 wheel event 1+> [object HTMLDivElement]9 wheel event 2+> [object HTMLDivElement]10 7 PASS movingdiv.scrollTop is 62 11 8 PASS movingdiv.scrollLeft is 63 12 PASS wheelEventsOccurred is 39 PASS wheelEventsOccurred is 0 13 10 second gesture 14 wheel event 0+> [object HTMLDivElement]15 wheel event 1+> [object HTMLDivElement]16 11 received element removing keypress 17 12 PASS movingdiv.scrollTop is 0 18 13 PASS movingdiv.scrollLeft is 0 19 PASS wheelEventsOccurred is 214 PASS wheelEventsOccurred is 0 20 15 scroll event 0+> [object HTMLDivElement] 21 16 PASS scrollEventsOccurred is 1 -
trunk/LayoutTests/platform/chromium/plugins/gesture-events-expected.txt
r124906 r140177 7 7 Plugin received event: GestureScrollBegin 8 8 Plugin received event: GestureScrollUpdate 9 Plugin received event: MouseWheel10 9 Plugin received event: GestureScrollEnd 11 10 -
trunk/LayoutTests/platform/chromium/plugins/gesture-events-scrolled-expected.txt
r128615 r140177 6 6 Plugin received event: GestureScrollBegin 7 7 Plugin received event: GestureScrollUpdate 8 Plugin received event: MouseWheel9 8 Plugin received event: GestureScrollEnd 10 9 -
trunk/Source/WebCore/ChangeLog
r140174 r140177 1 2013-01-18 Terry Anderson <tdanderson@chromium.org> 2 3 Scroll gestures should not create wheel events 4 https://bugs.webkit.org/show_bug.cgi?id=103952 5 6 Reviewed by James Robinson. 7 8 Tests: fast/events/touch/gesture/touch-gesture-scroll-div-propagated.html 9 fast/events/touch/gesture/touch-gesture-scroll-div-twice-propagated.html 10 fast/events/touch/gesture/touch-gesture-scroll-iframe-editable.html 11 fast/events/touch/gesture/touch-gesture-scroll-iframe-propagated.html 12 fast/events/touch/gesture/touch-gesture-scroll-page-propagated.html 13 14 In EventHandler::handleGestureEvent(), scroll gestures should not be handled by synthesizing 15 and dispatching wheel events; we should instead scroll the relevant layer directly. 16 17 Note that this patch should be landed together with the patch for 18 https://bugs.webkit.org/show_bug.cgi?id=106589. 19 20 * page/EventHandler.cpp: 21 (WebCore::EventHandler::EventHandler): 22 (WebCore::EventHandler::clear): 23 (WebCore::EventHandler::handleGestureEvent): 24 (WebCore::EventHandler::passGestureEventToWidget): 25 (WebCore::EventHandler::passGestureEventToWidgetIfPossible): 26 (WebCore): 27 (WebCore::closestScrollableNodeInDocumentIfPossibleOrSelfIfNotScrollable): 28 (WebCore::EventHandler::handleGestureScrollBegin): 29 (WebCore::EventHandler::handleGestureScrollUpdate): 30 (WebCore::EventHandler::isScrollbarHandlingGestures): 31 * page/EventHandler.h: 32 (EventHandler): 33 * rendering/RenderLayer.cpp: 34 (WebCore::RenderLayer::scrollByRecursively): 35 * rendering/RenderLayer.h: 36 1 37 2013-01-18 Nate Chapin <japhet@chromium.org> 2 38 -
trunk/Source/WebCore/page/EventHandler.cpp
r139939 r140177 340 340 , m_touchPressed(false) 341 341 #endif 342 #if ENABLE(GESTURE_EVENTS) 343 , m_scrollGestureHandlingNode(0) 344 , m_lastHitTestResultOverWidget(false) 345 #endif 342 346 , m_maxMouseMovedDuration(0) 343 347 , m_baseEventType(PlatformEvent::NoType) … … 397 401 #if ENABLE(GESTURE_EVENTS) 398 402 m_scrollGestureHandlingNode = 0; 403 m_lastHitTestResultOverWidget = false; 399 404 m_scrollbarHandlingScrollGesture = 0; 400 405 #endif … … 2450 2455 if (eventTarget) { 2451 2456 bool eventSwallowed = eventTarget->dispatchGestureEvent(gestureEvent); 2452 2453 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) { 2457 if (gestureEvent.type() == PlatformEvent::GestureScrollBegin || gestureEvent.type() == PlatformEvent::GestureScrollEnd) { 2454 2458 if (eventSwallowed) 2455 2459 m_scrollGestureHandlingNode = eventTarget; 2456 else2457 m_scrollGestureHandlingNode = 0;2458 2460 } 2459 2461 … … 2468 2470 switch (gestureEvent.type()) { 2469 2471 case PlatformEvent::GestureScrollBegin: 2470 return handleGestureScroll Core(gestureEvent, ScrollByPixelWheelEvent, false);2472 return handleGestureScrollBegin(gestureEvent); 2471 2473 case PlatformEvent::GestureScrollUpdate: 2472 2474 return handleGestureScrollUpdate(gestureEvent); … … 2584 2586 } 2585 2587 2588 bool EventHandler::passGestureEventToWidget(const PlatformGestureEvent& gestureEvent, Widget* widget) 2589 { 2590 if (!widget) 2591 return false; 2592 2593 if (!widget->isFrameView()) 2594 return false; 2595 2596 return static_cast<FrameView*>(widget)->frame()->eventHandler()->handleGestureEvent(gestureEvent); 2597 } 2598 2599 bool EventHandler::passGestureEventToWidgetIfPossible(const PlatformGestureEvent& gestureEvent, RenderObject* renderer) 2600 { 2601 if (m_lastHitTestResultOverWidget && renderer && renderer->isWidget()) { 2602 Widget* widget = toRenderWidget(renderer)->widget(); 2603 return widget && passGestureEventToWidget(gestureEvent, widget); 2604 } 2605 return false; 2606 } 2607 2608 static const Node* closestScrollableNodeInDocumentIfPossibleOrSelfIfNotScrollable(const Node* node) 2609 { 2610 for (const Node* scrollableNode = node; scrollableNode; scrollableNode = scrollableNode->parentNode()) { 2611 if (scrollableNode->isDocumentNode()) 2612 break; 2613 RenderObject* renderer = scrollableNode->renderer(); 2614 if (renderer && renderer->isBox() && toRenderBox(renderer)->canBeScrolledAndHasScrollableArea()) 2615 return scrollableNode; 2616 } 2617 return node; 2618 } 2619 2620 bool EventHandler::handleGestureScrollBegin(const PlatformGestureEvent& gestureEvent) 2621 { 2622 Document* document = m_frame->document(); 2623 RenderObject* documentRenderer = document->renderer(); 2624 if (!documentRenderer) 2625 return false; 2626 2627 FrameView* view = m_frame->view(); 2628 if (!view) 2629 return false; 2630 2631 LayoutPoint viewPoint = view->windowToContents(gestureEvent.position()); 2632 HitTestRequest request(HitTestRequest::ReadOnly); 2633 HitTestResult result(viewPoint); 2634 document->renderView()->hitTest(request, result); 2635 2636 m_lastHitTestResultOverWidget = result.isOverWidget(); 2637 m_scrollGestureHandlingNode = result.innerNode(); 2638 2639 Node* node = m_scrollGestureHandlingNode.get(); 2640 if (node) 2641 passGestureEventToWidgetIfPossible(gestureEvent, node->renderer()); 2642 2643 return node && node->renderer(); 2644 } 2645 2586 2646 bool EventHandler::handleGestureScrollUpdate(const PlatformGestureEvent& gestureEvent) 2587 2647 { 2588 return handleGestureScrollCore(gestureEvent, ScrollByPixelWheelEvent, true); 2648 // Ignore this event if we don't already have a targeted node with a valid renderer. 2649 const Node* node = m_scrollGestureHandlingNode.get(); 2650 if (!node) 2651 return false; 2652 2653 RenderObject* latchedRenderer = node->renderer(); 2654 if (!latchedRenderer) 2655 return false; 2656 2657 IntSize delta(-gestureEvent.deltaX(), -gestureEvent.deltaY()); 2658 if (delta.isZero()) 2659 return false; 2660 2661 RefPtr<FrameView> protector(m_frame->view()); 2662 2663 // Try to send the event to the correct view. 2664 if (passGestureEventToWidgetIfPossible(gestureEvent, latchedRenderer)) 2665 return true; 2666 2667 // Otherwise if this is the correct view for the event, find the closest scrollable 2668 // ancestor of the targeted node and scroll the layer that contains this node's renderer. 2669 node = closestScrollableNodeInDocumentIfPossibleOrSelfIfNotScrollable(node); 2670 if (!node) 2671 return false; 2672 2673 latchedRenderer = node->renderer(); 2674 if (!latchedRenderer) 2675 return false; 2676 2677 const float scaleFactor = m_frame->pageZoomFactor() * m_frame->frameScaleFactor(); 2678 delta.scale(1 / scaleFactor, 1 / scaleFactor); 2679 2680 bool result = latchedRenderer->enclosingLayer()->scrollByRecursively(delta, RenderLayer::ScrollOffsetClamped); 2681 2682 if (result) 2683 setFrameWasScrolledByUser(); 2684 2685 return result; 2589 2686 } 2590 2687 … … 2593 2690 return m_scrollbarHandlingScrollGesture.get(); 2594 2691 } 2595 2596 bool EventHandler::handleGestureScrollCore(const PlatformGestureEvent& gestureEvent, PlatformWheelEventGranularity granularity, bool latchedWheel) 2597 { 2598 const float tickDivisor = (float)WheelEvent::tickMultiplier; 2599 const float scaleFactor = m_frame->pageZoomFactor() * m_frame->frameScaleFactor(); 2600 float scaledDeltaX = gestureEvent.deltaX() / scaleFactor; 2601 float scaledDeltaY = gestureEvent.deltaY() / scaleFactor; 2602 IntPoint point(gestureEvent.position().x(), gestureEvent.position().y()); 2603 IntPoint globalPoint(gestureEvent.globalPosition().x(), gestureEvent.globalPosition().y()); 2604 PlatformWheelEvent syntheticWheelEvent(point, globalPoint, 2605 scaledDeltaX, scaledDeltaY, scaledDeltaX / tickDivisor, scaledDeltaY / tickDivisor, 2606 granularity, 2607 gestureEvent.shiftKey(), gestureEvent.ctrlKey(), gestureEvent.altKey(), gestureEvent.metaKey()); 2608 syntheticWheelEvent.setUseLatchedEventNode(latchedWheel); 2609 return handleWheelEvent(syntheticWheelEvent); 2610 } 2611 #endif 2692 #endif // ENABLE(GESTURE_EVENTS) 2612 2693 2613 2694 #if ENABLE(TOUCH_ADJUSTMENT) -
trunk/Source/WebCore/page/EventHandler.h
r139419 r140177 183 183 bool handleGestureTwoFingerTap(const PlatformGestureEvent&); 184 184 bool handleGestureScrollUpdate(const PlatformGestureEvent&); 185 bool handleGestureScrollBegin(const PlatformGestureEvent&); 185 186 bool isScrollbarHandlingGestures() const; 186 187 #endif … … 376 377 377 378 #if ENABLE(GESTURE_EVENTS) 378 bool handleGestureScrollCore(const PlatformGestureEvent&, PlatformWheelEventGranularity, bool latchedWheel);379 379 bool handleGestureTapDown(); 380 380 bool handleGestureForTextSelectionOrContextMenu(const PlatformGestureEvent&); 381 bool passGestureEventToWidget(const PlatformGestureEvent&, Widget*); 382 bool passGestureEventToWidgetIfPossible(const PlatformGestureEvent&, RenderObject*); 381 383 #endif 382 384 … … 469 471 #if ENABLE(GESTURE_EVENTS) 470 472 RefPtr<Node> m_scrollGestureHandlingNode; 473 bool m_lastHitTestResultOverWidget; 471 474 RefPtr<Scrollbar> m_scrollbarHandlingScrollGesture; 472 475 #endif -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r140075 r140177 1963 1963 } 1964 1964 1965 voidRenderLayer::scrollByRecursively(const IntSize& delta, ScrollOffsetClamping clamp)1965 bool RenderLayer::scrollByRecursively(const IntSize& delta, ScrollOffsetClamping clamp) 1966 1966 { 1967 1967 if (delta.isZero()) 1968 return ;1968 return false; 1969 1969 1970 1970 bool restrictedByLineClamp = false; … … 1978 1978 // If this layer can't do the scroll we ask the next layer up that can scroll to try 1979 1979 IntSize remainingScrollOffset = newScrollOffset - scrollOffset(); 1980 bool didScroll = true; 1980 1981 if (!remainingScrollOffset.isZero() && renderer()->parent()) { 1981 1982 if (RenderLayer* scrollableLayer = enclosingScrollableLayer()) 1982 scrollableLayer->scrollByRecursively(remainingScrollOffset);1983 didScroll = scrollableLayer->scrollByRecursively(remainingScrollOffset, clamp); 1983 1984 1984 1985 Frame* frame = renderer()->frame(); … … 1986 1987 frame->eventHandler()->updateAutoscrollRenderer(); 1987 1988 } 1989 return didScroll; 1988 1990 } else if (renderer()->view()->frameView()) { 1989 1991 // If we are here, we were called on a renderer that can be programmatically scrolled, but doesn't 1990 1992 // have an overflow clip. Which means that it is a document node that can be scrolled. 1991 renderer()->view()->frameView()->scrollBy(delta); 1993 FrameView* view = renderer()->view()->frameView(); 1994 IntPoint scrollPositionBefore = view->scrollPosition(); 1995 view->scrollBy(delta); 1996 IntPoint scrollPositionAfter = view->scrollPosition(); 1997 return scrollPositionBefore != scrollPositionAfter; 1998 1992 1999 // FIXME: If we didn't scroll the whole way, do we want to try looking at the frames ownerElement? 1993 2000 // https://bugs.webkit.org/show_bug.cgi?id=28237 1994 2001 } 2002 2003 return false; 1995 2004 } 1996 2005 -
trunk/Source/WebCore/rendering/RenderLayer.h
r140068 r140177 330 330 331 331 // Scrolling methods for layers that can scroll their overflow. 332 voidscrollByRecursively(const IntSize&, ScrollOffsetClamping = ScrollOffsetUnclamped);332 bool scrollByRecursively(const IntSize&, ScrollOffsetClamping = ScrollOffsetUnclamped); 333 333 void scrollToOffset(const IntSize&, ScrollOffsetClamping = ScrollOffsetUnclamped); 334 334 void scrollToXOffset(int x, ScrollOffsetClamping clamp = ScrollOffsetUnclamped) { scrollToOffset(IntSize(x, scrollYOffset()), clamp); }
Note: See TracChangeset
for help on using the changeset viewer.