open-features-non-integer-top.html (2806B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>HTML: window.open `features`: non-integer values for feature `top`</title> 4 <meta name=timeout content=long> 5 <link rel="help" href="https://html.spec.whatwg.org/multipage/#apis-for-creating-and-navigating-browsing-contexts-by-name"> 6 7 <!-- user agents are not required to support open features other than `noopener` 8 and on some platforms position and size features don't make sense --> 9 <meta name="flags" content="may" /> 10 11 <script src="/resources/testharness.js"></script> 12 <script src="/resources/testharnessreport.js"></script> 13 <script src="/common/PrefixedPostMessage.js"></script> 14 <script> 15 var windowURL = 'resources/message-opener.html'; 16 var featuresPrefix = `width=401,height=204,left=0,`; 17 18 setup (() => { 19 // Before running tests, open a window using features that mimic 20 // what would happen if the feature tested here were set to 0 21 // for comparison later. 22 var featureString = `${featuresPrefix}top=0`; 23 var prefixedMessage = new PrefixedMessageTest(); 24 prefixedMessage.onMessage((data, e) => { 25 e.source.close(); 26 runWindowTests(data); 27 }); 28 var win = window.open(prefixedMessage.url(windowURL), '', featureString); 29 }); 30 31 function runWindowTests (baselineDimensions) { 32 // When code point in first position is not an ASCII digit, "+" or "-", 33 // that's an error and the value becomes 0 34 [ 'top=/104', 35 'top=_104', 36 'top=L104' 37 ].forEach(feature => { 38 async_test(t => { 39 var prefixedMessage = new PrefixedMessageTest(); 40 var featureString = `${featuresPrefix}${feature}`; 41 prefixedMessage.onMessage(t.step_func_done((data, e) => { 42 e.source.close(); 43 assert_equals(data.top, baselineDimensions.top, `"${feature} begins with an invalid character and should be ignored"`); 44 })); 45 var win = window.open(prefixedMessage.url(windowURL) + '&expected_screenY=' + baselineDimensions.top, '', featureString); 46 }, `features "${feature}" should NOT set "top=104"`); 47 }); 48 49 // Codepoints that are valid ASCII digits should be collected 50 // Non-ASCII digits and subsequent code points are ignored 51 [ 'top=105.5', 52 'top=105.32', 53 'top=105LLl', 54 'top=105^4', 55 'top=105*3', 56 'top=105/5', 57 'top=105 ', 58 'top=105e1', 59 'top=105e-1' 60 ].forEach(feature => { 61 async_test(t => { 62 var featureString = `${featuresPrefix}${feature}`; 63 var prefixedMessage = new PrefixedMessageTest(); 64 prefixedMessage.onMessage(t.step_func_done((data, e) => { 65 e.source.close(); 66 assert_equals(data.top, 105, `"${feature} value after first non-digit will be ignored"`); 67 })); 68 var win = window.open(prefixedMessage.url(windowURL) + '&expected_screenY=105', '', featureString); 69 }, `features "${feature}" should set "top=105"`); 70 }); 71 } 72 73 </script>