| OLD | NEW | 
|---|
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> | 
| 2 <html> | 2 <html> | 
| 3 <head> | 3 <head> | 
| 4 <style> | 4 <style> | 
|  | 5 /* Remove margin, border, and padding to allow comparing dialog's position with 
     that of plain span elements. */ | 
|  | 6 body { | 
|  | 7     margin: 0; | 
|  | 8 } | 
|  | 9 | 
|  | 10 dialog { | 
|  | 11     border: 0; | 
|  | 12     padding: 0; | 
|  | 13 } | 
|  | 14 | 
| 5 .filler { | 15 .filler { | 
| 6     height: 20000px; | 16     height: 20000px; | 
| 7 } | 17 } | 
| 8 | 18 | 
| 9 dialog { |  | 
| 10     /* Remove border and padding to allow comparing dialog's position with that 
     of plain span elements. */ |  | 
| 11     border: 0; |  | 
| 12     padding: 0; |  | 
| 13 } |  | 
| 14 </style> | 19 </style> | 
| 15 <script src="../../js/resources/js-test-pre.js"></script> | 20 <script src="../../js/resources/js-test-pre.js"></script> | 
| 16 <script> | 21 <script> | 
| 17 if (window.internals) | 22 if (window.internals) | 
| 18     internals.settings.setDialogElementEnabled(true); | 23     internals.settings.setDialogElementEnabled(true); | 
| 19 | 24 | 
| 20 function checkTopOfViewport(dialog) { | 25 function checkTopOfViewport(dialog) { | 
| 21     shouldBe('dialog.getBoundingClientRect().top', '0'); | 26     shouldBe('dialog.getBoundingClientRect().top', '0'); | 
| 22 } | 27 } | 
| 23 | 28 | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 36     checker(); | 41     checker(); | 
| 37     dialog.close(); | 42     dialog.close(); | 
| 38 } | 43 } | 
| 39 </script> | 44 </script> | 
| 40 </head> | 45 </head> | 
| 41 <body> | 46 <body> | 
| 42     <dialog id="mydialog">It is my dialog.</dialog> | 47     <dialog id="mydialog">It is my dialog.</dialog> | 
| 43     <div class="filler" id="fillerDiv"></div> | 48     <div class="filler" id="fillerDiv"></div> | 
| 44 </body> | 49 </body> | 
| 45 <script> | 50 <script> | 
| 46 description("Tests default positioning of non-anchored dialogs."); | 51 description("Tests positioning of non-anchored dialogs."); | 
| 47 | 52 | 
| 48 dialog = document.getElementById('mydialog'); | 53 dialog = document.getElementById('mydialog'); | 
| 49 | 54 | 
| 50 debug('Dialog should be centered in the viewport.'); | 55 debug('Dialog should be centered in the viewport.'); | 
| 51 showAndTestDialog(dialog, function() { checkCentered(dialog) }); | 56 showAndTestDialog(dialog, function() { checkCentered(dialog) }); | 
| 52 | 57 | 
| 53 debug('<br>Dialog should be recentered if show() is called after close().'); | 58 debug('<br>Dialog should be recentered if show() is called after close().'); | 
| 54 window.scroll(0, 500); | 59 window.scroll(0, 500); | 
| 55 dialog.show(); | 60 dialog.show(); | 
| 56 checkCentered(dialog); | 61 checkCentered(dialog); | 
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 130 | 135 | 
| 131 debug("<br>Dialog is recentered if show() is called after removing 'open'"); | 136 debug("<br>Dialog is recentered if show() is called after removing 'open'"); | 
| 132 dialog.removeAttribute('open'); | 137 dialog.removeAttribute('open'); | 
| 133 window.scroll(0, 1000); | 138 window.scroll(0, 1000); | 
| 134 dialog.show(); | 139 dialog.show(); | 
| 135 checkCentered(dialog); | 140 checkCentered(dialog); | 
| 136 dialog.close(); | 141 dialog.close(); | 
| 137 window.scroll(0, 500); | 142 window.scroll(0, 500); | 
| 138 | 143 | 
| 139 debug("<br>Dialog should not be centered if show() was called when an ancestor h
     ad display 'none'."); | 144 debug("<br>Dialog should not be centered if show() was called when an ancestor h
     ad display 'none'."); | 
| 140 var plainSpan = document.createElement('span'); |  | 
| 141 plainSpan.style.position = 'absolute'; |  | 
| 142 relativeContainer.appendChild(plainSpan); |  | 
| 143 expectedTop = plainSpan.getBoundingClientRect().top; |  | 
| 144 absoluteContainer.style.display = 'none'; | 145 absoluteContainer.style.display = 'none'; | 
| 145 dialog.show(); | 146 dialog.show(); | 
| 146 absoluteContainer.style.display = 'block'; | 147 absoluteContainer.style.display = 'block'; | 
|  | 148 // Since dialog's containing block is the ICB, it's statically positioned after 
     <body>. | 
|  | 149 expectedTop = document.body.getBoundingClientRect().bottom; | 
| 147 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); | 150 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); | 
| 148 dialog.close(); | 151 dialog.close(); | 
| 149 | 152 | 
| 150 debug("<br>Test that setting 'top' on dialog results in the same position as for
      a plain, absolutely positioned span."); | 153 debug("<br>Test that setting 'top' on dialog results in the same position as for
      a plain, absolutely positioned span."); | 
|  | 154 var plainSpan = document.createElement('span'); | 
|  | 155 plainSpan.style.position = 'absolute'; | 
|  | 156 document.body.appendChild(plainSpan); | 
| 151 plainSpan.style.top = '50px'; | 157 plainSpan.style.top = '50px'; | 
| 152 dialog.style.top = '50px'; | 158 dialog.style.top = '50px'; | 
| 153 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetTop', 'plainSpan.o
     ffsetTop'); }); | 159 expectedTop = plainSpan.getBoundingClientRect().top; | 
|  | 160 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
     top', 'expectedTop'); }); | 
| 154 | 161 | 
| 155 debug("<br>Test that setting 'bottom' on dialog results in the same position as 
     for a plain, absolutely positioned span."); | 162 debug("<br>Test that setting 'bottom' on dialog results in the same position as 
     for a plain, absolutely positioned span."); | 
| 156 dialog.style.top = 'auto'; | 163 dialog.style.top = 'auto'; | 
| 157 plainSpan.style.top = 'auto'; | 164 plainSpan.style.top = 'auto'; | 
| 158 dialog.style.bottom = '50px'; | 165 dialog.style.bottom = '50px'; | 
| 159 plainSpan.style.bottom = '50px'; | 166 plainSpan.style.bottom = '50px'; | 
| 160 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetBottom', 'plainSpa
     n.offsetBottom'); }); | 167 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
     bottom', 'plainSpan.getBoundingClientRect().bottom'); }); | 
| 161 | 168 | 
| 162 debug('<br>Test that fixed positioning for dialog has same behavior as for a pla
     in span.'); | 169 debug('<br>Test that fixed positioning for dialog has same behavior as for a pla
     in span.'); | 
| 163 plainSpan.style.position = 'fixed'; | 170 plainSpan.style.position = 'fixed'; | 
| 164 plainSpan.style.top = '50px'; | 171 plainSpan.style.top = '50px'; | 
| 165 dialog.style.position = 'fixed'; | 172 dialog.style.position = 'fixed'; | 
| 166 dialog.style.top = '50px'; | 173 dialog.style.top = '50px'; | 
| 167 showAndTestDialog(dialog, function() { shouldBe('dialog.offsetTop', 'plainSpan.o
     ffsetTop'); }); | 174 showAndTestDialog(dialog, function() { shouldBe('dialog.getBoundingClientRect().
     top', 'plainSpan.getBoundingClientRect().top'); }); | 
| 168 | 175 | 
| 169 debug('<br>Test that static position for a non-modal dialog has the same behavio
     r as for a plain span.'); | 176 debug('<br>Test that static position for a non-modal dialog has the same behavio
     r as for a plain span.'); | 
| 170 // Just test non-modal since modal is covered by other tests (for modal, static 
     computes to absolute) | 177 plainSpan.parentNode.removeChild(plainSpan); | 
|  | 178 relativeContainer.appendChild(plainSpan); | 
| 171 plainSpan.style.position = 'static'; | 179 plainSpan.style.position = 'static'; | 
| 172 var expectedTop = plainSpan.offsetTop; | 180 expectedTop = plainSpan.getBoundingClientRect().top; | 
| 173 plainSpan.parentNode.removeChild(plainSpan); | 181 plainSpan.parentNode.removeChild(plainSpan); | 
| 174 dialog.style.position = 'static'; | 182 dialog.style.position = 'static'; | 
|  | 183 // Just test non-modal since modal is covered by other tests (for modal, static 
     computes to absolute) | 
| 175 dialog.show(); | 184 dialog.show(); | 
| 176 shouldBe('dialog.offsetTop', 'expectedTop'); | 185 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); | 
| 177 dialog.close(); | 186 dialog.close(); | 
| 178 | 187 | 
| 179 debug('<br>Test that relative position for a non-modal dialog has the same behav
     ior as for a plain span.'); | 188 debug('<br>Test that relative position for a non-modal dialog has the same behav
     ior as for a plain span.'); | 
| 180 // Just test non-modal since modal is covered by other tests (for modal, relativ
     e computes to absolute) |  | 
| 181 relativeContainer.appendChild(plainSpan); | 189 relativeContainer.appendChild(plainSpan); | 
| 182 plainSpan.style.position = 'relative'; | 190 plainSpan.style.position = 'relative'; | 
| 183 plainSpan.style.top = '50px'; | 191 plainSpan.style.top = '50px'; | 
| 184 expectedTop = plainSpan.offsetTop; | 192 expectedTop = plainSpan.getBoundingClientRect().top; | 
| 185 plainSpan.parentNode.removeChild(plainSpan); | 193 plainSpan.parentNode.removeChild(plainSpan); | 
| 186 dialog.style.position = 'relative'; | 194 dialog.style.position = 'relative'; | 
| 187 dialog.style.top = '50px'; | 195 dialog.style.top = '50px'; | 
|  | 196 // Just test non-modal since modal is covered by other tests (for modal, relativ
     e computes to absolute) | 
| 188 dialog.show(); | 197 dialog.show(); | 
| 189 shouldBe('dialog.offsetTop', 'expectedTop'); | 198 shouldBe('dialog.getBoundingClientRect().top', 'expectedTop'); | 
| 190 dialog.close(); | 199 dialog.close(); | 
| 191 </script> | 200 </script> | 
| 192 <script src="../../js/resources/js-test-post.js"></script> | 201 <script src="../../js/resources/js-test-post.js"></script> | 
| 193 </body> | 202 </body> | 
| 194 </html> | 203 </html> | 
| OLD | NEW | 
|---|