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