| OLD | NEW |
| 1 <html> | 1 <html> |
| 2 <head> | 2 <head> |
| 3 <script> | 3 <script> |
| 4 | 4 |
| 5 var logDiv; | 5 var logDiv; |
| 6 | 6 |
| 7 function log(msg, success) | 7 function log(msg, success) |
| 8 { | 8 { |
| 9 logDiv.appendChild(document.createElement('div')).textContent = msg + ': ' +
(success ? 'PASS' : 'FAIL'); | 9 logDiv.appendChild(document.createElement('div')).textContent = msg + ': ' +
(success ? 'PASS' : 'FAIL'); |
| 10 } | 10 } |
| 11 | 11 |
| 12 function clickOn(element) | 12 function clickOn(element) |
| 13 { | 13 { |
| 14 if (!window.eventSender) | 14 if (!window.eventSender) |
| 15 return; | 15 return; |
| 16 | 16 |
| 17 var x = element.offsetLeft + element.offsetWidth / 2; | 17 var x = element.offsetLeft + element.offsetWidth / 2; |
| 18 var y = element.offsetTop + element.offsetHeight / 2; | 18 var y = element.offsetTop + element.offsetHeight / 2; |
| 19 eventSender.mouseMoveTo(x, y); | 19 eventSender.mouseMoveTo(x, y); |
| 20 eventSender.mouseDown(); | 20 eventSender.mouseDown(); |
| 21 eventSender.mouseUp(); | 21 eventSender.mouseUp(); |
| 22 } | 22 } |
| 23 | 23 |
| 24 function clickOnLeftQuarterOf(element) |
| 25 { |
| 26 if (!window.eventSender) |
| 27 return; |
| 28 |
| 29 var x = element.offsetLeft + element.offsetWidth / 4; |
| 30 var y = element.offsetTop + element.offsetHeight / 2; |
| 31 eventSender.mouseMoveTo(x, y); |
| 32 eventSender.mouseDown(); |
| 33 eventSender.mouseUp(); |
| 34 } |
| 24 | 35 |
| 25 function leapForward() | 36 function leapForward() |
| 26 { | 37 { |
| 27 if (!window.eventSender) | 38 if (!window.eventSender) |
| 28 return; | 39 return; |
| 29 | 40 |
| 30 eventSender.leapForward(1000); | 41 eventSender.leapForward(1000); |
| 31 } | 42 } |
| 32 | 43 |
| 33 var tests = { | 44 var tests = { |
| 34 mutationEventPropagation: function() | 45 mutationEventPropagation: function() |
| 35 { | 46 { |
| 36 var textarea = document.body.appendChild(document.createElement('textare
a')); | 47 var textarea = document.body.appendChild(document.createElement('textare
a')); |
| 37 var mutationEventFired; | 48 var mutationEventFired; |
| 38 textarea.addEventListener('DOMSubtreeModified', function(e) | 49 textarea.addEventListener('DOMSubtreeModified', function(e) |
| 39 { | 50 { |
| 40 mutationEventFired = true; | 51 mutationEventFired = true; |
| 41 }, false); | 52 }, false); |
| 42 textarea.value = 'test'; | 53 textarea.value = 'test'; |
| 43 // Trigger style recalc and sadly, the actual mutation of the textarea s
hadow DOM. | 54 // Trigger style recalc and sadly, the actual mutation of the textarea s
hadow DOM. |
| 44 textarea.offsetHeight; | 55 textarea.offsetHeight; |
| 45 log('Mutation events should not propagate out of the shadow DOM', !mutat
ionEventFired); | 56 log('Mutation events should not propagate out of the shadow DOM', !mutat
ionEventFired); |
| 46 textarea.parentNode.removeChild(textarea); | 57 textarea.parentNode.removeChild(textarea); |
| 47 }, | 58 }, |
| 48 defaultEventRetargeting: function() | 59 labelSyntheticClick: function() |
| 49 { | 60 { |
| 50 var count = 0; | 61 var count = 0; |
| 51 var label = document.body.appendChild(document.createElement('label')); | 62 var label = document.body.appendChild(document.createElement('label')); |
| 52 var searchInput = label.appendChild(document.createElement('input')); | 63 var searchInput = label.appendChild(document.createElement('input')); |
| 53 searchInput.setAttribute('type', 'search'); | 64 searchInput.setAttribute('type', 'search'); |
| 54 searchInput.setAttribute('id', 'baz'); | 65 searchInput.setAttribute('id', 'baz'); |
| 55 label.setAttribute('for', 'baz'); | 66 label.setAttribute('for', 'baz'); |
| 56 searchInput.addEventListener('click', function(e) | 67 searchInput.addEventListener('click', function(e) |
| 57 { | 68 { |
| 58 count++; | 69 count++; |
| 59 }, false); | 70 }, false); |
| 60 clickOn(searchInput); | 71 clickOn(searchInput); |
| 61 log("Events for default event handler should also be retargeted", count
== 1); | 72 log("Label should look beyond shadow boundary to detect if it encloses i
ts associated element", count == 1); |
| 62 label.parentNode.removeChild(label); | 73 label.parentNode.removeChild(label); |
| 63 }, | 74 }, |
| 75 defaultEventRetargeting: function() |
| 76 { |
| 77 var count = 0; |
| 78 var fileInput = document.body.appendChild(document.createElement('input'
)); |
| 79 fileInput.setAttribute('type', 'file'); |
| 80 var counter = function() |
| 81 { |
| 82 count++; |
| 83 } |
| 84 document.body.addEventListener('DOMActivate', counter, false); |
| 85 clickOnLeftQuarterOf(fileInput); |
| 86 log("Events for default event handler should not be retargeted", count =
= 1); |
| 87 document.body.removeEventListener('DOMActivate', counter, false); |
| 88 fileInput.parentNode.removeChild(fileInput); |
| 89 }, |
| 64 eventInProgress: function() | 90 eventInProgress: function() |
| 65 { | 91 { |
| 66 var textInput = document.body.appendChild(document.createElement('input'
)); | 92 var textInput = document.body.appendChild(document.createElement('input'
)); |
| 67 textInput.addEventListener('click', function(e) | 93 textInput.addEventListener('click', function(e) |
| 68 { | 94 { |
| 69 log('Other events should be retargeted', e.target == textInput); | 95 log('Other events should be retargeted', e.target == textInput); |
| 70 }, false); | 96 }, false); |
| 71 clickOn(textInput); | 97 clickOn(textInput); |
| 72 textInput.parentNode.removeChild(textInput); | 98 textInput.parentNode.removeChild(textInput); |
| 73 }, | 99 }, |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 } | 138 } |
| 113 | 139 |
| 114 </script> | 140 </script> |
| 115 </head> | 141 </head> |
| 116 <body onload="runTest()"> | 142 <body onload="runTest()"> |
| 117 <p>Tests to ensure that shadow DOM boundary is not crossed during event prop
agation. Can only run within DRT. | 143 <p>Tests to ensure that shadow DOM boundary is not crossed during event prop
agation. Can only run within DRT. |
| 118 <p>See <a href="https://bugs.webkit.org/show_bug.cgi?id=46015">bug 46015</a>
for details. | 144 <p>See <a href="https://bugs.webkit.org/show_bug.cgi?id=46015">bug 46015</a>
for details. |
| 119 <div id="log"></div> | 145 <div id="log"></div> |
| 120 </body> | 146 </body> |
| 121 </html> | 147 </html> |
| OLD | NEW |