| 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(); |