Skip to content

Commit

Permalink
Test that createPolicy correctly fires securitypolicyviolation events
Browse files Browse the repository at this point in the history
  • Loading branch information
lukewarlow committed Jul 17, 2024
1 parent afb7384 commit 6946a88
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,40 @@
<meta http-equiv="Content-Security-Policy" content="trusted-types 'none'">
<body>
<script>
test(t => {
function promise_violation(filter_arg) {
return _ => new Promise((resolve, reject) => {
function handler(e) {
let matches = (filter_arg instanceof Function)
? filter_arg(e)
: (e.originalPolicy.includes(filter_arg));
if (matches) {
document.removeEventListener("securitypolicyviolation", handler);
e.stopPropagation();
resolve(e);
}
}

document.addEventListener("securitypolicyviolation", handler);
});
}

promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types 'none'"));

assert_throws_js(TypeError, _ => {
window.trustedTypes.createPolicy('SomeName', { createHTML: s => s } );
});
return p;
}, "Cannot create policy with name 'SomeName' - policy creation throws");

test(t => {
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types 'none'"));

assert_throws_js(TypeError, _ => {
window.trustedTypes.createPolicy('default', { createHTML: s => s } );
});
return p;
}, "Cannot create policy with name 'default' - policy creation throws");
</script>
41 changes: 39 additions & 2 deletions trusted-types/TrustedTypePolicyFactory-createPolicy-cspTests.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,62 @@
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>

<meta http-equiv="Content-Security-Policy" content="trusted-types SomeName JustOneMoreName">
<meta http-equiv="Content-Security-Policy" content="trusted-types SomeName JustOneMoreName AnotherName">
<body>
<script>
// Allowed name test
test(t => {
let policy = window.trustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_true(policy instanceof TrustedTypePolicy);
assert_equals(policy.name, 'SomeName');
}, "Allowed-name policy creation works.");

// Another allowed name test
test(t => {
let policy = window.trustedTypes.createPolicy('JustOneMoreName', { createHTML: s => s } );
assert_true(policy instanceof TrustedTypePolicy);
assert_equals(policy.name, 'JustOneMoreName');
}, "Another allowed-name policy creation works.");

function promise_violation(filter_arg) {
return _ => new Promise((resolve, reject) => {
function handler(e) {
let matches = (filter_arg instanceof Function)
? filter_arg(e)
: (e.originalPolicy.includes(filter_arg));
if (matches) {
document.removeEventListener("securitypolicyviolation", handler);
e.stopPropagation();
resolve(e);
}
}

document.addEventListener("securitypolicyviolation", handler);
});
}

// Non-allowed names test
test(t => {
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types SomeName JustOneMoreName AnotherName"));

assert_throws_js(TypeError, _ => {
window.trustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } );
});
return p;
}, "Non-allowed name policy creation throws.");

// Duplicate names test
promise_test(t => {
let p = Promise.resolve()
.then(promise_violation("trusted-types SomeName JustOneMoreName AnotherName"));

let policy = window.trustedTypes.createPolicy('AnotherName', { createHTML: s => s } );
assert_equals(policy.name, 'AnotherName');

assert_throws_js(TypeError, _ => {
window.trustedTypes.createPolicy('AnotherName', { createHTML: s => s } );
});
return p;
}, "Duplicate name policy creation throws.");
</script>
40 changes: 0 additions & 40 deletions trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.html

This file was deleted.

0 comments on commit 6946a88

Please sign in to comment.