test_top_navigation_by_location.html (6251B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=785310 5 html5 sandboxed iframe should not be able to perform top navigation with scripts allowed 6 --> 7 <head> 8 <meta charset="utf-8"> 9 <title>Test for Bug 785310 - iframe sandbox top navigation by location tests</title> 10 <script src="/tests/SimpleTest/SimpleTest.js"></script> 11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 12 <script> 13 SimpleTest.waitForExplicitFinish(); 14 15 var testWin; 16 17 function runScriptNavigationTest(testCase) { 18 window.onmessage = function(event) { 19 if (event.data != "newTop") { 20 ok(false, "event.data: got '" + event.data + "', expected 'newTop'"); 21 } 22 ok(!testCase.shouldBeBlocked, testCase.desc + " - top navigation was NOT blocked"); 23 runNextTest(); 24 }; 25 try { 26 SpecialPowers.wrap(testWin[testCase.iframeName]).eval(testCase.script); 27 } catch (e) { 28 ok(testCase.shouldBeBlocked, testCase.desc + " - " + SpecialPowers.wrap(e).message); 29 runNextTest(); 30 } 31 } 32 33 var testCaseIndex = -1; 34 var testCases = [ 35 { 36 desc: "Test 1: top.location.replace should be blocked when sandboxed without allow-top-navigation", 37 script: "top.location.replace('file_top_navigation_by_location.html')", 38 iframeName: "if1", 39 shouldBeBlocked: true, 40 }, 41 { 42 desc: "Test 2: top.location.assign should be blocked when sandboxed without allow-top-navigation", 43 script: "top.location.assign('file_top_navigation_by_location.html')", 44 iframeName: "if1", 45 shouldBeBlocked: true, 46 }, 47 { 48 desc: "Test 3: top.location.href should be blocked when sandboxed without allow-top-navigation", 49 script: "top.location.href = 'file_top_navigation_by_location.html'", 50 iframeName: "if1", 51 shouldBeBlocked: true, 52 }, 53 { 54 desc: "Test 4: top.location.pathname should be blocked when sandboxed without allow-top-navigation", 55 script: "top.location.pathname = top.location.pathname", 56 iframeName: "if1", 57 shouldBeBlocked: true, 58 }, 59 { 60 desc: "Test 5: top.location should be blocked when sandboxed without allow-top-navigation", 61 script: "top.location = 'file_top_navigation_by_location.html'", 62 iframeName: "if1", 63 shouldBeBlocked: true, 64 }, 65 { 66 desc: "Test 6: top.location.hash should be blocked when sandboxed without allow-top-navigation", 67 script: "top.location.hash = 'wibble'", 68 iframeName: "if1", 69 shouldBeBlocked: true, 70 }, 71 { 72 desc: "Test 7: top.location.replace should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 73 script: "top.location.replace('file_top_navigation_by_location.html')", 74 iframeName: "if2", 75 shouldBeBlocked: false, 76 }, 77 { 78 desc: "Test 8: top.location.assign should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 79 script: "top.location.assign('file_top_navigation_by_location.html')", 80 iframeName: "if2", 81 shouldBeBlocked: false, 82 }, 83 { 84 desc: "Test 9: top.location.href should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 85 script: "top.location.href = 'file_top_navigation_by_location.html'", 86 iframeName: "if2", 87 shouldBeBlocked: false, 88 }, 89 { 90 desc: "Test 10: top.location.pathname should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 91 script: "top.location.pathname = top.location.pathname", 92 iframeName: "if2", 93 shouldBeBlocked: false, 94 }, 95 { 96 desc: "Test 11: top.location should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 97 script: "top.location = 'file_top_navigation_by_location.html'", 98 iframeName: "if2", 99 shouldBeBlocked: false, 100 }, 101 { 102 desc: "Test 12: top.location.hash should NOT be blocked when sandboxed with allow-same-origin allow-top-navigation", 103 script: "top.location.hash = 'wibble'", 104 iframeName: "if2", 105 shouldBeBlocked: false, 106 }, 107 { 108 desc: "Test 13: top.location.replace should NOT be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 109 script: "top.location.replace('file_top_navigation_by_location.html')", 110 iframeName: "if3", 111 shouldBeBlocked: false, 112 }, 113 { 114 desc: "Test 14: top.location.assign should be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 115 script: "top.location.assign('file_top_navigation_by_location.html')", 116 iframeName: "if3", 117 shouldBeBlocked: true, 118 }, 119 { 120 desc: "Test 15: top.location.href should NOT be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 121 script: "top.location.href = 'file_top_navigation_by_location.html'", 122 iframeName: "if3", 123 shouldBeBlocked: false, 124 }, 125 { 126 desc: "Test 16: top.location.pathname should be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 127 script: "top.location.pathname = top.location.pathname", 128 iframeName: "if3", 129 shouldBeBlocked: true, 130 }, 131 { 132 desc: "Test 17: top.location should NOT be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 133 script: "top.location = 'file_top_navigation_by_location.html'", 134 iframeName: "if3", 135 shouldBeBlocked: false, 136 }, 137 { 138 desc: "Test 18: top.location.hash should be blocked when sandboxed with allow-top-navigation, but without allow-same-origin", 139 script: "top.location.hash = 'wibble'", 140 iframeName: "if3", 141 shouldBeBlocked: true, 142 }, 143 ]; 144 145 function runNextTest() { 146 ++testCaseIndex; 147 if (testCaseIndex == testCases.length) { 148 testWin.close(); 149 SimpleTest.finish(); 150 return; 151 } 152 153 runScriptNavigationTest(testCases[testCaseIndex]); 154 } 155 156 window.onmessage = runNextTest; 157 testWin = window.open("file_top_navigation_by_location.html", "newTop"); 158 </script> 159 </head> 160 <body> 161 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=785310">Mozilla Bug 785310</a> 162 <p id="display"></p> 163 <div id="content"> 164 Tests for Bug 785310 165 </div> 166 </body> 167 </html>