| OLD | NEW |
| (Empty) | |
| 1 <!doctype html> |
| 2 <meta charset=utf-8> |
| 3 <title>window.open() with "noopener" tests</title> |
| 4 <script src=/resources/testharness.js></script> |
| 5 <script src=/resources/testharnessreport.js></script> |
| 6 <script> |
| 7 var testData = [ |
| 8 { testDescription: "window.open() with 'noopener' should not reuse existing ta
rget", |
| 9 secondWindowFeatureString: "noopener", |
| 10 shouldReuse: false }, |
| 11 { testDescription: "noopener needs to be present as a token on its own", |
| 12 secondWindowFeatureString: "noopener=1", |
| 13 shouldReuse: true }, |
| 14 { testDescription: "noopener needs to be present as a token on its own again", |
| 15 secondWindowFeatureString: "noopener=0", |
| 16 shouldReuse: true }, |
| 17 { testDescription: "noopener needs to be present as a token on its own yet aga
in", |
| 18 secondWindowFeatureString: "make me noopener", |
| 19 shouldReuse: true }, |
| 20 { testDescription: "Trailing noopener should work", |
| 21 secondWindowFeatureString: "abc def, \n\r noopener", |
| 22 shouldReuse: false }, |
| 23 { testDescription: "Leading noopener should work", |
| 24 secondWindowFeatureString: "noopener \f\t , hey, there", |
| 25 shouldReuse: false }, |
| 26 { testDescription: "Interior noopener should work", |
| 27 secondWindowFeatureString: "and now, noopener , hey, there", |
| 28 shouldReuse: false }, |
| 29 ]; |
| 30 |
| 31 var tests = []; |
| 32 /** |
| 33 * Loop over our testData array and kick off an async test for each entry. Each |
| 34 * async test opens a window using window.open() with some per-test unique name, |
| 35 * then tries to do a second window.open() call with the same name and the |
| 36 * test-specific feature string. It then checks whether that second |
| 37 * window.open() call reuses the existing window, whether the return value of |
| 38 * the second window.open() call is correct (it should be null in the noopener |
| 39 * cases and non-null in the cases when the existing window gets reused) and so |
| 40 * forth. |
| 41 */ |
| 42 for (var i = 0; i < testData.length; ++i) { |
| 43 var test = testData[i]; |
| 44 var t = async_test(test.testDescription); |
| 45 tests.push(t); |
| 46 t.secondWindowFeatureString = test.secondWindowFeatureString; |
| 47 t.windowName = "someuniquename" + i; |
| 48 |
| 49 if (test.shouldReuse) { |
| 50 t.step(function() { |
| 51 var windowName = this.windowName; |
| 52 |
| 53 var w1 = window.open("", windowName); |
| 54 this.add_cleanup(function() { w1.close(); }); |
| 55 |
| 56 assert_equals(w1.opener, window); |
| 57 |
| 58 var w2 = window.open("", windowName, this.secondWindowFeatureString); |
| 59 assert_equals(w2, w1); |
| 60 assert_equals(w2.opener, w1.opener); |
| 61 assert_equals(w2.opener, window); |
| 62 this.done(); |
| 63 }); |
| 64 } else { |
| 65 t.step(function() { |
| 66 var w1; |
| 67 this.add_cleanup(function() { w1.close(); }); |
| 68 |
| 69 var windowName = this.windowName; |
| 70 var channel = new BroadcastChannel(windowName); |
| 71 |
| 72 channel.onmessage = this.step_func_done(function(e) { |
| 73 var data = e.data; |
| 74 assert_equals(data.name, windowName, "Should have the right name"); |
| 75 assert_equals(data.haveOpener, false, "Should not have opener"); |
| 76 assert_equals(w1.opener, window); |
| 77 assert_equals(w1.location.href, "about:blank"); |
| 78 }); |
| 79 |
| 80 w1 = window.open("", windowName); |
| 81 assert_equals(w1.opener, window); |
| 82 |
| 83 var w2 = window.open("support/noopener-target.html?" + windowName, |
| 84 windowName, this.secondWindowFeatureString); |
| 85 assert_equals(w2, null); |
| 86 |
| 87 assert_equals(w1.opener, window); |
| 88 }); |
| 89 } |
| 90 } |
| 91 |
| 92 /** |
| 93 * Loop over the special targets that ignore noopener and check that doing a |
| 94 * window.open() with those targets correctly reuses the existing window. |
| 95 */ |
| 96 for (var target of ["_self", "_parent", "_top"]) { |
| 97 var t = async_test("noopener window.open targeting " + target); |
| 98 tests.push(t); |
| 99 t.openedWindow = window.open(`javascript:var w2 = window.open("", "${target}",
"noopener"); this.checkValues(w2); this.close(); void(0);`); |
| 100 assert_equals(t.openedWindow.opener, window); |
| 101 t.openedWindow.checkValues = t.step_func_done(function(win) { |
| 102 assert_equals(win, this.openedWindow); |
| 103 }); |
| 104 } |
| 105 </script> |
| OLD | NEW |