| <html> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| <script> |
| |
| let isLoadComplete = false; |
| let wasChildFrameWasNavigated = false; |
| onload = () => { |
| isLoadComplete = true; |
| if (wasChildFrameWasNavigated) |
| runTest(); |
| } |
| |
| function childFrameWasNavigated() |
| { |
| wasChildFrameWasNavigated = true; |
| if (isLoadComplete) |
| runTest(); |
| } |
| |
| function runTest() |
| { |
| // Check that the child frame was unable to load a plugin, since its parent is sandboxed. |
| shouldBeTrue("(self.sandboxedFrame.frameWithPlugin.document.getElementById('plugin').destroyStream) == undefined"); |
| |
| // Check a non-sandboxed frame as well, to ensure that the plugin is disabled by sandboxing |
| // and not some other failure |
| shouldBeTrue("(self.frameWithPlugin.document.getElementById('plugin').destroyStream) != undefined"); |
| |
| // When the child frame (grandchild of the main window) has been navigated, |
| // make the sandboxed frame navigate itself |
| self.sandboxedFrame.location.assign("javascript: top.sandboxWasNavigated();"); |
| } |
| |
| function sandboxWasNavigated() |
| { |
| shouldBeEqualToString("String(document.getElementById('sandboxedFrameId').sandbox)", "allow-scripts allow-same-origin"); |
| finishJSTest(); |
| } |
| |
| </script> |
| </head> |
| |
| <body> |
| |
| <iframe sandbox="allow-scripts allow-same-origin" |
| name="sandboxedFrame" |
| id="sandboxedFrameId" |
| src="resources/sandboxed-iframe-navigation-child.html"> |
| </iframe> |
| |
| <iframe name="frameWithPlugin" |
| src="resources/sandboxed-iframe-plugins-frame-object.html"> |
| </iframe> |
| |
| <script> |
| description("This test verifies that a sandboxed iframe CAN navigate both itself and a child in the frame tree. " |
| + "It also verifies that the sandbox attribute remains intact after a frame has been navigated, " |
| + "and that sandbox attributes are propagated through the frame hierarchy."); |
| jsTestIsAsync = true; |
| </script> |
| </body> |
| </html> |