Source code

Revision control

Copy as Markdown

Other Tools

let test_setup_policy = trustedTypes.createPolicy("hurrayanythinggoes", {
createScriptURL: x => x
});
importScripts(test_setup_policy.createScriptURL("/resources/testharness.js"));
// Determine worker type (for better logging)
let worker_type = "unknown";
if (this.DedicatedWorkerGlobalScope !== undefined) {
worker_type = "dedicated worker";
} else if (this.SharedWorkerGlobalScope !== undefined) {
worker_type = "shared worker";
} else if (this.ServiceWorkerGlobalScope !== undefined) {
worker_type = "service worker";
}
let test_policy = trustedTypes.createPolicy("xxx", {
createScriptURL: url => url.replace("play", "work")
});
test(t => {
self.result = "Fail";
let trusted_url = test_policy.createScriptURL("player.js");
assert_true(this.trustedTypes.isScriptURL(trusted_url));
importScripts(trusted_url); // worker.js modifies self.result.
assert_equals(self.result, "Pass");
}, "importScripts with TrustedScriptURL works in " + worker_type);
test(t => {
let untrusted_url = "player.js";
assert_throws_js(TypeError,
function() { importScripts(untrusted_url) },
"importScripts(untrusted_url)");
}, "importScripts with untrusted URLs throws in " + worker_type);
test(t => {
assert_throws_js(TypeError,
function() { importScripts(null) },
"importScripts(null)");
}, "null is not a trusted script URL throws in " + worker_type);
test(t => {
self.result = "Fail";
let trusted_url = test_policy.createScriptURL("player.js?variant1");
let trusted_url2 = test_policy.createScriptURL("player.js?variant2");
importScripts(trusted_url, trusted_url2);
assert_equals(self.result, "Pass");
}, "importScripts with two URLs, both trusted, in " + worker_type);
test(t => {
let untrusted_url = "player.js?variant1";
let untrusted_url2 = "player.js?variant2";
assert_throws_js(TypeError,
function() { importScripts(untrusted_url, untrusted_url2) },
"importScripts(untrusted_url, untrusted_url2)");
}, "importScripts with two URLs, both strings, in " + worker_type);
test(t => {
let untrusted_url = "player.js";
let trusted_url = test_policy.createScriptURL(untrusted_url);
assert_throws_js(TypeError,
function() { importScripts(untrusted_url, trusted_url) },
"importScripts(untrusted_url, trusted_url)");
}, "importScripts with two URLs, one trusted, in " + worker_type);
// Test default policy application:
trustedTypes.createPolicy("default", {
createScriptURL: url => url.replace("play", "work")
}, true);
test(t => {
self.result = "Fail";
let untrusted_url = "player.js";
importScripts(untrusted_url);
assert_equals(self.result, "Pass");
}, "importScripts with untrusted URLs and default policy works in " + worker_type);
test(t => {
self.result = "Fail";
let untrusted_url = "player.js";
let trusted_url = test_policy.createScriptURL(untrusted_url);
importScripts(untrusted_url, trusted_url);
assert_equals(self.result, "Pass");
}, "importScripts with one trusted and one untrusted URLs and default policy works in " + worker_type);
done();