tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>