-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add a Trusted Type test for setting ShadowRoot's innerHTML.
This is essentially a copy of block-string-assignment-to-ShadowRoot-setHTMLUnsafe.html, replacing set `shadowRoot.setHTMLUnsafe(html)` with `shadowRoot.innerHTML = html`. Note that innerHTML uses `LegacyNullToEmptyString`, so setting it to a null behaves slightly differently. Differential Revision: https://phabricator.services.mozilla.com/D229149 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1931276 gecko-commit: 4b6f5fdc1a0ddf5ebd66be2d36743ac965489599 gecko-reviewers: smaug
- Loading branch information
1 parent
643af85
commit 982d859
Showing
2 changed files
with
88 additions
and
14 deletions.
There are no files selected for viewing
79 changes: 79 additions & 0 deletions
79
trusted-types/block-string-assignment-to-ShadowRoot-innerHTML.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<script src="/resources/testharness.js"></script> | ||
<script src="/resources/testharnessreport.js"></script> | ||
<script src="support/helper.sub.js"></script> | ||
|
||
<meta http-equiv="Content-Security-Policy" content="require-trusted-types-for 'script';"> | ||
</head> | ||
<body> | ||
<div id="container"></div> | ||
<script> | ||
var container = document.querySelector('#container') | ||
const cleanupPolicy = | ||
trustedTypes.createPolicy('cleanup', { createHTML: _ => "" }); | ||
function cleanup() { container.innerHTML = cleanupPolicy.createHTML(""); } | ||
|
||
// TrustedHTML assignments do not throw. | ||
test(t => { | ||
t.add_cleanup(cleanup); | ||
let p = createHTML_policy(window, 1); | ||
let html = p.createHTML(INPUTS.HTML); | ||
|
||
let d = document.createElement('div'); | ||
let s = d.attachShadow({mode: 'open'}); | ||
document.querySelector('#container').appendChild(d); | ||
s.innerHTML = html; | ||
assert_equals(s.innerHTML, RESULTS.HTML); | ||
}, "shadowRoot.innerHTML = html assigned via policy (successful HTML transformation)."); | ||
|
||
// String assignments throw. | ||
test(t => { | ||
t.add_cleanup(cleanup); | ||
let d = document.createElement('div'); | ||
let s = d.attachShadow({mode: 'open'}); | ||
container.appendChild(d); | ||
assert_throws_js(TypeError, _ => { | ||
s.innerHTML = "Fail"; | ||
}); | ||
assert_equals(s.innerHTML, ""); | ||
}, "`shadowRoot.innerHTML = string` throws."); | ||
|
||
// Null assignment throws. | ||
test(t => { | ||
t.add_cleanup(cleanup); | ||
let d = document.createElement('div'); | ||
let s = d.attachShadow({mode: 'open'}); | ||
container.appendChild(d); | ||
assert_throws_js(TypeError, _ => { | ||
s.innerHTML = null; | ||
}); | ||
assert_equals(s.innerHTML, ""); | ||
}, "`shadowRoot.innerHTML = null` throws."); | ||
|
||
// After default policy creation string assignment implicitly calls createHTML. | ||
test(t => { | ||
t.add_cleanup(cleanup); | ||
let p = window.trustedTypes.createPolicy("default", { createHTML: createHTMLJS }); | ||
|
||
let d = document.createElement('div'); | ||
let s = d.attachShadow({mode: 'open'}); | ||
document.querySelector('#container').appendChild(d); | ||
s.innerHTML = INPUTS.HTML; | ||
assert_equals(s.innerHTML, RESULTS.HTML); | ||
}, "`shadowRoot.innerHTML = string` assigned via default policy (successful HTML transformation)."); | ||
|
||
// After default policy creation null assignment implicitly calls createHTML. | ||
// null is treated as an empty string. | ||
test(t => { | ||
t.add_cleanup(cleanup); | ||
let d = document.createElement('div'); | ||
let s = d.attachShadow({mode: 'open'}); | ||
container.appendChild(d); | ||
s.innerHTML = null; | ||
assert_equals(s.innerHTML, ""); | ||
}, "`shadowRoot.innerHTML = string` assigned via default policy does not throw"); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters