open-features-non-integer-height.html (3595B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>HTML: window.open `features`: non-integer values for feature `height`</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 featuresPrefix = `top=0,left=0,width=401,`; 16 var windowURL = 'resources/message-opener.html'; 17 18 // https://html.spec.whatwg.org/multipage/infrastructure.html#rules-for-parsing-integers 19 20 setup (() => { 21 // Before running tests, open a window using features that mimic 22 // what would happen if the feature tested here were set to 0 23 // for comparison later. 24 var featureString = `${featuresPrefix}height=0`; 25 var prefixedMessage = new PrefixedMessageTest(); 26 prefixedMessage.onMessage((data, e) => { 27 e.source.close(); 28 runWindowTests(data); 29 }); 30 var win = window.open(prefixedMessage.url(windowURL), '', featureString); 31 }); 32 33 function runWindowTests (baselineDimensions) { 34 // The absence of the sizing feature should have the same behavior 35 // as that feature set to 0 36 [ featuresPrefix, 37 'top=0,left=0', 38 ].forEach(feature => { 39 async_test(t => { 40 var prefixedMessage = new PrefixedMessageTest(); 41 prefixedMessage.onMessage(t.step_func_done((data, e) => { 42 e.source.close(); 43 assert_equals(data.height, baselineDimensions.height); 44 })); 45 var win = window.open(prefixedMessage.url(windowURL) + '&expected_innerHeight=' + baselineDimensions.height, '', feature); 46 }, `${feature}: absence of feature "height" should be treated same as "height=0"`); 47 }); 48 49 // When code point in first position is not an ASCII digit, "+" or "-", 50 // that's an error and the value becomes 0 51 [ 'height=/404', 52 'height=_404', 53 'height=L404' 54 ].forEach(feature => { 55 async_test(t => { 56 var prefixedMessage = new PrefixedMessageTest(); 57 var featureString = `${featuresPrefix}${feature}`; 58 prefixedMessage.onMessage(t.step_func_done((data, e) => { 59 e.source.close(); 60 assert_equals(data.height, baselineDimensions.height, `"${feature} begins with an invalid character and should be ignored"`); 61 })); 62 var win = window.open(prefixedMessage.url(windowURL) + '&expected_innerHeight=' + baselineDimensions.height, '', featureString); 63 }, `features "${feature}" should NOT set "height=404"`); 64 }); 65 66 // Codepoints that are valid ASCII digits should be collected 67 // Non-ASCII digits and subsequent code points are ignored 68 [ 'height=405.5', 69 'height=405.32', 70 'height=405LLl', 71 'height=405^4', 72 'height=405*3', 73 'height=405/5', 74 'height=405 ', 75 'height=405e1', 76 'height=405e-1' 77 ].forEach(feature => { 78 async_test(t => { 79 var prefixedMessage = new PrefixedMessageTest(); 80 var featureString = `${featuresPrefix}${feature}`; 81 prefixedMessage.onMessage(t.step_func_done((data, e) => { 82 e.source.close(); 83 assert_equals(data.height, 405, `"${featureString} value after first non-digit will be ignored"`); 84 })); 85 var win = window.open(prefixedMessage.url(windowURL) + "&expected_innerHeight=405", '', featureString); 86 }, `features "${feature}" should set "height=405"`); 87 }); 88 89 } 90 91 </script>