| <!doctype html> | |
| <title>'document-write' tests</title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script src="/document-policy/experimental-features/resources/common.js"></script> | |
| <style> | |
| html, body { | |
| height: 100%; | |
| width: 100%; | |
| } | |
| </style> | |
| <body> | |
| <script> | |
| "use strict"; | |
| function newIframe() { | |
| var i = document.createElement("iframe"); | |
| document.body.appendChild(i); | |
| return i; | |
| } | |
| let iframeElement = document.querySelector("iframe"); | |
| const allowed_url = url_base + "document-write-allowed.html"; | |
| const disallowed_url = url_base + "document-write-disallowed.html"; | |
| let text_to_write = "<div>FOO<\/div>"; | |
| let test_cases = [{ | |
| api: "open", | |
| query: "body", | |
| expected_value_enabled: false, | |
| }, | |
| { | |
| api: "close" | |
| }, | |
| { | |
| api: "write", | |
| args: text_to_write, | |
| query: "div", | |
| expected_value_enabled: "FOO" | |
| }, | |
| { | |
| api: "writeln", | |
| args: text_to_write, | |
| query: "div", | |
| expected_value_enabled: "FOO" | |
| }]; | |
| // The feature 'document-write' is enabled by default and when it | |
| // is enabled, all dynamic markup insertion API work as intended. | |
| test_cases.forEach((tc) => { | |
| promise_test(async() => { | |
| let iframeElement = newIframe(); | |
| await loadUrlInIframe(iframeElement, allowed_url); | |
| await sendMessageAndGetResponse(iframeElement.contentWindow, tc).then((response) => { | |
| assert_false( | |
| response.did_throw_exception, | |
| `When feature is disabled, invoking 'document.${tc.api}' should not` + | |
| " throw an exception."); | |
| if (tc.query) { | |
| assert_equals( | |
| response.value, | |
| tc.expected_value_enabled, | |
| `The added script tag by 'document.${tc.api}' must have run.`); | |
| } | |
| }); | |
| }, `Verify 'document.${tc.api}' is not normally blocked.` ); | |
| }); | |
| // Disabling 'document-write' throws exception on the included API. | |
| test_cases.forEach((tc) => { | |
| promise_test(async() => { | |
| let iframeElement = newIframe(); | |
| await loadUrlInIframe(iframeElement, disallowed_url); | |
| await sendMessageAndGetResponse(iframeElement.contentWindow, tc).then((response) => { | |
| assert_true( | |
| response.did_throw_exception, | |
| `When feature is enabled, invoking 'document.${tc.api}' should ` + | |
| " throw an exception."); | |
| if (tc.query) { | |
| assert_not_equals( | |
| response.value, | |
| tc.expected_value_enabled, | |
| `The added script tag by 'document.${tc.api}' must not have run.`); | |
| } | |
| }); | |
| }, `Verify 'document.${tc.api}' is blocked when the feature is disabled.` ); | |
| }); | |
| </script> | |
| </body> |