Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: LayoutTests/fast/dom/HTMLDialogElement/modal-dialog-blocks-mouse-events.html

Issue 133393002: Make ancestors of modal <dialog> inert (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: move some expandos to window Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <style> 4 <style>
5 #inert-div { 5 #inert-div {
6 height: 100px; 6 height: 100px;
7 width: 100px; 7 width: 100px;
8 background: blue; 8 background: blue;
9 } 9 }
10 10
(...skipping 22 matching lines...) Expand all
33 description('Test for bug 110952. Ensure that mouse events are not ' + 33 description('Test for bug 110952. Ensure that mouse events are not ' +
34 'dispatched to an inert node. To test manually, move the mouse ' + 34 'dispatched to an inert node. To test manually, move the mouse ' +
35 'to the blue box, click, and then move the mouse outside. Then ' + 35 'to the blue box, click, and then move the mouse outside. Then ' +
36 'repeat for the red box. The test succeeds if both boxes turn ' + 36 'repeat for the red box. The test succeeds if both boxes turn ' +
37 'green.'); 37 'green.');
38 38
39 function clickOn(element) 39 function clickOn(element)
40 { 40 {
41 if (!window.eventSender) 41 if (!window.eventSender)
42 return; 42 return;
43 43 var rect = element.getBoundingClientRect();
44 var absoluteTop = 0; 44 eventSender.mouseMoveTo(rect.left + rect.width / 2, rect.top + rect.height / 2);
45 var absoluteLeft = 0;
46 for (var parentNode = element; parentNode; parentNode = parentNode.offsetPar ent) {
47 absoluteLeft += parentNode.offsetLeft;
48 absoluteTop += parentNode.offsetTop;
49 }
50
51 var x = absoluteLeft + element.offsetWidth / 2;
52 var y = absoluteTop + element.offsetHeight / 2;
53 eventSender.mouseMoveTo(x, y);
54 eventSender.mouseDown(); 45 eventSender.mouseDown();
55 eventSender.mouseUp(); 46 eventSender.mouseUp();
56 eventSender.mouseMoveTo(0, 0); 47 eventSender.mouseMoveTo(0, 0);
57 } 48 }
58 49
59 if (window.testRunner) 50 if (window.testRunner)
60 testRunner.dumpAsText(); 51 testRunner.dumpAsText();
61 52
62 dialog.showModal(); 53 dialog.showModal();
63 54
55 inertDivHandledEvent = false;
64 inertDiv = document.getElementById('inert-div'); 56 inertDiv = document.getElementById('inert-div');
65 inertDiv.firedOn = false;
66 eventFiredOnInertNode = function(event) { 57 eventFiredOnInertNode = function(event) {
67 inertDiv.firedOn = true; 58 inertDivHandledEvent = true;
68 inertDiv.style.backgroundColor = 'red'; 59 inertDiv.style.backgroundColor = 'red';
69 }; 60 };
70 61
71 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout' ]; 62 events = ['mousedown', 'mouseup', 'click', 'mousemove', 'mouseover', 'mouseout' ];
72 dialogDiv = document.getElementById('dialog-div'); 63 dialogDiv = document.getElementById('dialog-div');
73 dialogDiv.firedOnEvents = {}; 64 handledEvents = {};
65 handledEvents.dialogDiv = {};
74 eventFiredOnDialog = function(event) { 66 eventFiredOnDialog = function(event) {
75 dialogDiv.firedOnEvents[event.type] = true; 67 handledEvents.dialogDiv[event.type] = true;
76 if (Object.keys(dialogDiv.firedOnEvents).length == events.length) 68 if (Object.keys(handledEvents.dialogDiv).length == events.length)
77 dialogDiv.style.backgroundColor = 'green'; 69 dialogDiv.style.backgroundColor = 'green';
78 }; 70 };
79 71
80 body = document.body; 72 handledEvents.document = {};
81 body.firedOnEvents = {}; 73 expectedEventCountForDocument = events.length - 1; // document won't get 'mouseo ut'
82 eventFiredOnBody = function(event) { 74 eventFiredOnDocument = function(event) {
83 body.firedOnEvents[event.type] = true; 75 handledEvents.document[event.type] = true;
84 if (Object.keys(body.firedOnEvents).length == events.length && !inertDiv.fir edOn) 76 if (Object.keys(handledEvents.document).length == document.expectedEventCoun t && !inertDivHandledEvent)
85 inertDiv.style.backgroundColor = 'green'; 77 inertDiv.style.backgroundColor = 'green';
86 }; 78 };
87 79
88 for (var i = 0; i < events.length; ++i) { 80 for (var i = 0; i < events.length; ++i) {
89 inertDiv.addEventListener(events[i], eventFiredOnInertNode); 81 inertDiv.addEventListener(events[i], eventFiredOnInertNode);
90 dialogDiv.addEventListener(events[i], eventFiredOnDialog); 82 dialogDiv.addEventListener(events[i], eventFiredOnDialog);
91 document.body.addEventListener(events[i], eventFiredOnBody); 83 document.addEventListener(events[i], eventFiredOnDocument);
92 } 84 }
93 85
94 debug('Clicking on inert box'); 86 debug('Clicking on inert box');
95 clickOn(inertDiv); 87 clickOn(inertDiv);
96 shouldBeFalse('inertDiv.firedOn'); 88 shouldBeFalse('inertDivHandledEvent');
97 shouldBe('Object.keys(body.firedOnEvents).length', 'events.length'); 89 shouldBe('Object.keys(handledEvents.document).length', 'expectedEventCountForDoc ument');
98 90
99 debug('Clicking on non-inert box'); 91 debug('Clicking on non-inert box');
100 clickOn(dialogDiv); 92 clickOn(dialogDiv);
101 shouldBeFalse('inertDiv.firedOn'); 93 shouldBeFalse('inertDivHandledEvent');
102 shouldBe('Object.keys(dialogDiv.firedOnEvents).length', 'events.length'); 94 shouldBe('Object.keys(handledEvents.dialogDiv).length', 'events.length');
103 </script> 95 </script>
104 </body> 96 </body>
105 </html> 97 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698