open-features-is-popup-condition.html (4632B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>HTML: window.open `features`: condition for is popup</title> 4 <meta name="variant" content="?single-1"> 5 <meta name="variant" content="?single-2"> 6 <meta name="variant" content="?position"> 7 <meta name="variant" content="?combination"> 8 <meta name=timeout content=long> 9 <link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#window-open-steps"> 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/is-popup-barprop.html'; 16 17 var target = document.location.search.substring(1); 18 19 // features, visible 20 // NOTE: visible == !isPopup 21 var tests = { 22 "single-1": [ 23 // Empty feature results in non-popup. 24 [undefined, true], 25 26 // The explicit popup feature. 27 ["popup", false], 28 ["popup=1", false], 29 ["popup=true", false], 30 ["popup=0", true], 31 32 // Other feature alone results in popup. 33 ["location", false], 34 ["location=yes", false], 35 ["location=true", false], 36 ["location=no", false], 37 38 ["toolbar", false], 39 ["toolbar=yes", false], 40 ["toolbar=true", false], 41 ["toolbar=no", false], 42 43 ["menubar", false], 44 ["menubar=yes", false], 45 ["menubar=true", false], 46 ["menubar=no", false], 47 48 ["resizable", false], 49 ["resizable=yes", false], 50 ["resizable=true", false], 51 ["resizable=no", false], 52 ], 53 "single-2": [ 54 ["scrollbars", false], 55 ["scrollbars=yes", false], 56 ["scrollbars=true", false], 57 ["scrollbars=no", false], 58 59 ["status", false], 60 ["status=yes", false], 61 ["status=true", false], 62 ["status=no", false], 63 64 ["titlebar", false], 65 ["titlebar=yes", false], 66 ["titlebar=true", false], 67 ["titlebar=no", false], 68 69 ["close", false], 70 ["close=yes", false], 71 ["close=true", false], 72 ["close=no", false], 73 74 ["minimizable", false], 75 ["minimizable=yes", false], 76 ["minimizable=true", false], 77 ["minimizable=no", false], 78 79 ["personalbar", false], 80 ["personalbar=yes", false], 81 ["personalbar=true", false], 82 ["personalbar=no", false], 83 ], 84 "position": [ 85 ["left=500", false], 86 ["screenX=500", false], 87 88 ["top=500", false], 89 ["screenY=500", false], 90 91 ["width=500", false], 92 ["innerWidth=500", false], 93 94 ["outerWidth=500", false], 95 96 ["height=500", false], 97 ["innerHeight=500", false], 98 99 ["outerHeight=500", false], 100 ], 101 "combination": [ 102 // The following combination results in non-popup. 103 ["location,toolbar,menubar,resizable,scrollbars,status", true], 104 105 // Either location or toolbar is required for non-popup. 106 ["location,menubar,resizable,scrollbars,status", true], 107 ["toolbar,menubar,resizable,scrollbars,status", true], 108 109 ["resizable,scrollbars,status", false], 110 ["location=no,menubar=no,resizable,scrollbars,status", false], 111 112 // menubar is required for non-popup. 113 ["location,toolbar,resizable,scrollbars,status", false], 114 115 // resizable is required for non-popup, but defaults to true 116 ["location,toolbar,menubar,scrollbars,status", true], 117 ["location,toolbar,menubar,resizable=no,scrollbars,status", false], 118 119 // scrollbars is required for non-popup. 120 ["location,toolbar,menubar,resizable,status", false], 121 122 // status is required for non-popup. 123 ["location,toolbar,menubar,resizable,scrollbars", false], 124 125 // The explicit popup feature has priority than others. 126 ["popup=1,location,toolbar,menubar,resizable,scrollbars,status", false], 127 ["popup=yes,location,toolbar,menubar,resizable,scrollbars,status", false], 128 ["popup=true,location,toolbar,menubar,resizable,scrollbars,status", false], 129 ["popup=0,location,toolbar,menubar,resizable,scrollbars", true], 130 ], 131 }; 132 133 tests[target].forEach(([features, visible]) => { 134 async_test(t => { 135 var prefixedMessage = new PrefixedMessageTest(); 136 prefixedMessage.onMessage(t.step_func_done((data, e) => { 137 e.source.close(); 138 assert_equals(data.locationbar, visible, `window.locationbar.visible`); 139 assert_equals(data.menubar, visible, `window.menubar.visible`); 140 assert_equals(data.personalbar, visible, `window.personalbar.visible`); 141 assert_equals(data.scrollbars, visible, `window.scrollbars.visible`); 142 assert_equals(data.statusbar, visible, `window.statusbar.visible`); 143 assert_equals(data.toolbar, visible, `window.toolbar.visible`); 144 })); 145 var win = window.open(prefixedMessage.url(windowURL), '', features); 146 }, `${format_value(features)} should set BarProp visibility to ${visible}`); 147 }); 148 149 </script>