tor-browser

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

window-open-popup-behavior.html (2287B)


      1 <!DOCTYPE html>
      2 <meta charset=utf-8>
      3 <meta name="timeout" content="long">
      4 <title>Window.open popup behavior</title>
      5 <link rel="author" href="masonf@chromium.org">
      6 <link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#window-open-steps">
      7 <script src="/resources/testharness.js"></script>
      8 <script src="/resources/testharnessreport.js"></script>
      9 
     10 <script>
     11 function testOne(windowFeatures, expectPopup) {
     12  const windowName = Math.round(Math.random()*1e12);
     13  const channel = new BroadcastChannel(windowName);
     14  var w;
     15  promise_test(() => {
     16    return new Promise(resolve => {
     17      w = window.open("support/window-open-popup-target.html", windowName, windowFeatures);
     18      channel.addEventListener('message', resolve);
     19    }).then(e => {
     20      // Send message first so if asserts throw the popup is still closed
     21      channel.postMessage(null);
     22      assert_false(e.data.mixedState, "No mixed state");
     23      assert_equals(e.data.isPopup, expectPopup, "Popup state");
     24    });
     25  },`${windowFeatures} (expect ${expectPopup ? "popup" : "tab"})`);
     26 }
     27 
     28 // No windowpreferences at all - tab.
     29 testOne(undefined, /*expectPopup=*/false);
     30 
     31 // Test all permutations of these properties:
     32 const features = ["location","toolbar","menubar","resizable","scrollbars","status"];
     33 const nProps = features.length;
     34 const skip = 7; // To speed up the test, don't test all values. Skip 7 to pseudo-randomize.
     35 for(let i=0;i<2**nProps;i+=skip) {
     36  const enableVec = Number(i).toString(2).padStart(nProps,'0').split('').map(s => (s==="1"));
     37  let windowFeatures = [];
     38  for(let i=0;i<nProps;++i) {
     39    if (enableVec[i])
     40      windowFeatures.push(features[i] + "=yes");
     41  }
     42  windowFeatures = windowFeatures.join(',');
     43  // We get a popup we got windowFeatures, and any of them are false:
     44  const expectPopup = !!windowFeatures.length && (!(enableVec[0] || enableVec[1]) || !enableVec[2] || !enableVec[3] || !enableVec[4] || !enableVec[5]);
     45  testOne(windowFeatures, expectPopup);
     46  testOne(windowFeatures + ",noopener", /*expectPopup=*/false);
     47  testOne(windowFeatures + ",noreferrer", /*expectPopup=*/false);
     48  testOne(windowFeatures + ",popup", /*expectPopup=*/true); // "popup" feature = popup
     49  testOne(windowFeatures + ",noopener,noreferrer,popup", /*expectPopup=*/false);
     50 }
     51 </script>