[ES5] Implement Object.keys
[WebKit-https.git] / LayoutTests / http / tests / security / cross-frame-access-enumeration.html
1 <html>
2 <head>
3     <script src="resources/cross-frame-access.js"></script>
4     <script>
5         window.onload = function()
6         {
7             if (window.layoutTestController) {
8                 layoutTestController.dumpAsText();
9                 layoutTestController.waitUntilDone();
10             }
11
12             if (window.layoutTestController) {
13                 setTimeout(pollForTest, 1);
14             } else {
15                 log("To run the test, click the button below when the frame finishes loading.");
16                 var button = document.createElement("button");
17                 button.appendChild(document.createTextNode("Run Test"));
18                 button.onclick = runTest;
19                 document.body.appendChild(button);
20             }
21         }
22     
23         pollForTest = function()
24         {
25             if (!layoutTestController.globalFlag) {
26                 setTimeout(pollForTest, 1);
27                 return;
28             }
29             runTest();
30             layoutTestController.notifyDone();
31         }
32
33         runTest = function()
34         {
35             // Test enumerating the Window object
36             var b_win = document.getElementsByTagName("iframe")[0].contentWindow;
37             try {
38                 for (var k in b_win) {
39                     if (k == "customWindowProperty") {
40                         log("FAIL: Cross frame access by enumerating the window object was allowed.");
41                         return;
42                     }
43                 }
44             } catch (e) {
45             }
46             log("PASS: Cross frame access by enumerating the window object was denied.");
47
48             var b_winKeys = Object.keys(b_win);
49             if (b_winKeys.indexOf("customWindowProperty") != -1) { 
50                 log("FAIL: Cross frame access by getting the keys of the window object was allowed.");
51                 return;
52             }
53             log("PASS: Cross frame access by getting the keys of the window object was denied.");
54
55             // Test enumerating the History object
56             var b_win_history = b_win.history;
57             try {
58                 for (var k in b_win_history) {
59                     if (k == "customHistoryProperty") {
60                         log("FAIL: Cross frame access by enumerating the History object was allowed.");
61                         return;
62                     }
63                 }
64             } catch (e) {
65             }
66             log("PASS: Cross frame access by enumerating the History object was denied.");
67
68             var b_winHistoryKeys = Object.keys(b_win_history);
69             if (b_winHistoryKeys.indexOf("customHistoryProperty") != -1) { 
70                 log("FAIL: Cross frame access by getting the keys of the History object was allowed.");
71                 return;
72             }
73             log("PASS: Cross frame access by getting the keys of the History object was denied.");
74
75             // Test enumerating the Location object
76             var b_win_location = b_win.location;
77             try {
78                 for (var k in b_win_location) {
79                     if (k == "customLocationProperty") {
80                         log("FAIL: Cross frame access by enumerating the Location object was allowed.");
81                         return;
82                     }
83                 }
84             } catch (e) {
85             }
86             log("PASS: Cross frame access by enumerating the Location object was denied.");
87
88             var b_winLocationKeys = Object.keys(b_win_location);
89             if (b_winLocationKeys.indexOf("customLocationProperty") != -1) { 
90                 log("FAIL: Cross frame access by getting the keys of the Location object was allowed.");
91                 return;
92             }
93             log("PASS: Cross frame access by getting the keys of the Location object was denied.");
94         }
95     </script>
96 </head>
97 <body>
98     <p>This tests that variable names can't be enumerated cross domain (see http://bugs.webkit.org/show_bug.cgi?id=16387)</p>
99     <iframe src="http://localhost:8000/security/resources/cross-frame-iframe-for-enumeration-test.html"></iframe>
100     <pre id="console"></pre>
101 </body>
102 </html>