| // META: timeout=long |
| // META: script=/common/utils.js |
| // META: script=/common/dispatcher/dispatcher.js |
| |
| // Regression test for: https://crbug.com/1256822. |
| // |
| // From a sandboxed iframe allowing popups, scripts, and same-origin. Open a |
| // popup using the WindowProxy of a new iframe that is still on the initial |
| // empty document. Check that the sandbox flags are properly inherited. |
| |
| // Return true if the execution context is sandboxed. |
| const isSandboxed = () => { |
| try { |
| // Setting document.domain in sandboxed document throw errors. |
| document.domain = document.domain; |
| return false; |
| } catch (error) { |
| return true; |
| } |
| } |
| |
| promise_test(async test => { |
| // 1. Create a sandboxed iframe, allowing popups, same-origin and scripts. |
| const iframe_token = token(); |
| const iframe_document = new RemoteContext(iframe_token); |
| const iframe_url = remoteExecutorUrl(iframe_token); |
| const iframe = document.createElement("iframe"); |
| iframe.sandbox = "allow-same-origin allow-scripts allow-popups"; |
| iframe.src = iframe_url; |
| document.body.appendChild(iframe); |
| assert_true(await iframe_document.execute_script(isSandboxed), |
| "iframe is sandboxed"); |
| |
| // 2. From the sandboxed iframe, create an empty iframe, and open a popup |
| // using it's WindowProxy. The popup must inherit sandbox flags. |
| const popup_token = token(); |
| const popup_document = new RemoteContext(popup_token); |
| const popup_url = remoteExecutorUrl(popup_token); |
| iframe_document.execute_script((popup_url) => { |
| let iframe = document.createElement("iframe"); |
| iframe.name = "iframe_name"; |
| document.body.appendChild(iframe); |
| iframe_name.open(popup_url); |
| }, [popup_url.href]); |
| assert_true(await popup_document.execute_script(isSandboxed), "popup is sandboxed"); |
| }); |