TrustedTypes: Added TrustedTypes.getPolicyNames & minor changes

Changed window.trustedTypes to window.TrustedTypes.
Added TrustedTypes.getPolicyNames.
Throw exception for TrustedTypes.createPolicy with non-unique policy name.
Adapted tests to match.
Most existing applications are synchronous, createPolicy was made synchronous.
Changed tests from async_test to test, because of change mentioned above.

Bug: 739170
Change-Id: Ie4e2702994a8674e65376b7bf4b42d4c41e9cec4
Reviewed-on: https://chromium-review.googlesource.com/1181362
Commit-Queue: Orsolya Bernadett Batiz <orsibatiz@google.com>
Reviewed-by: Mike West <mkwst@chromium.org>
Reviewed-by: Daniel Vogelheim <vogelheim@chromium.org>
Cr-Commit-Position: refs/heads/master@{#586630}
diff --git a/trusted-types/DOMParser-parseFromString.tentative.html b/trusted-types/DOMParser-parseFromString.tentative.html
index 2fe9b31..2dfc376 100644
--- a/trusted-types/DOMParser-parseFromString.tentative.html
+++ b/trusted-types/DOMParser-parseFromString.tentative.html
@@ -4,14 +4,12 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        let parser = new DOMParser();
-        let doc = parser.parseFromString(html, "text/html");
-        assert_equals(doc.body.innerText, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    let parser = new DOMParser();
+    let doc = parser.parseFromString(html, "text/html");
+    assert_equals(doc.body.innerText, RESULTS.HTML);
   }, "document.innerText assigned via policy (successful HTML transformation).");
 
   test(t => {
diff --git a/trusted-types/Document-write.tentative.html b/trusted-types/Document-write.tentative.html
index 3a63e92..79247fb 100644
--- a/trusted-types/Document-write.tentative.html
+++ b/trusted-types/Document-write.tentative.html
@@ -4,12 +4,10 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        document.write(html);
-        assert_equals(document.body.innerText, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    document.write(html);
+    assert_equals(document.body.innerText, RESULTS.HTML);
   }, "document.write with html assigned via policy (successful URL transformation).");
 </script>
diff --git a/trusted-types/Element-insertAdjacentHTML.tentative.html b/trusted-types/Element-insertAdjacentHTML.tentative.html
index 599ade4..d5db793 100644
--- a/trusted-types/Element-insertAdjacentHTML.tentative.html
+++ b/trusted-types/Element-insertAdjacentHTML.tentative.html
@@ -7,32 +7,30 @@
 <script>
   var container = document.querySelector('#container');
 
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
 
-        var d = document.createElement('div');
-        container.appendChild(d);
+    var d = document.createElement('div');
+    container.appendChild(d);
 
-        d.insertAdjacentHTML('beforebegin', html);
-        assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
-        assert_equals(d.previousSibling.data, RESULTS.HTML);
+    d.insertAdjacentHTML('beforebegin', html);
+    assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
+    assert_equals(d.previousSibling.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('afterbegin', html);
-        assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
-        assert_equals(d.firstChild.data, RESULTS.HTML);
+    d.insertAdjacentHTML('afterbegin', html);
+    assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
+    assert_equals(d.firstChild.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('beforeend', html);
-        assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
-        assert_equals(d.lastChild.data, RESULTS.HTML);
+    d.insertAdjacentHTML('beforeend', html);
+    assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
+    assert_equals(d.lastChild.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('afterend', html);
-        assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
-        assert_equals(d.nextSibling.data, RESULTS.HTML);
+    d.insertAdjacentHTML('afterend', html);
+    assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
+    assert_equals(d.nextSibling.data, RESULTS.HTML);
 
-        while (container.firstChild)
-          container.firstChild.remove();
-    }));
+    while (container.firstChild)
+      container.firstChild.remove();
   }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation).");
 </script>
diff --git a/trusted-types/Element-outerHTML.tentative.html b/trusted-types/Element-outerHTML.tentative.html
index a0bb6c1..c8daddf 100644
--- a/trusted-types/Element-outerHTML.tentative.html
+++ b/trusted-types/Element-outerHTML.tentative.html
@@ -5,20 +5,18 @@
 <body>
 <div id="container"></div>
 <script>
-  var container = document.querySelector('#container')
+  var container = document.querySelector('#container');
 
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
 
-        var d = document.createElement('div');
-        document.querySelector('#container').appendChild(d);
-        d.outerHTML = html;
-        assert_equals(container.innerText, RESULTS.HTML);
+    var d = document.createElement('div');
+    document.querySelector('#container').appendChild(d);
+    d.outerHTML = html;
+    assert_equals(container.innerText, RESULTS.HTML);
 
-        while (container.firstChild)
-          container.firstChild.remove();
-    }));
+    while (container.firstChild)
+      container.firstChild.remove();
   }, "outerHTML with html assigned via policy (successful HTML transformation).");
 </script>
diff --git a/trusted-types/HTMLElement-generic.tentative.html b/trusted-types/HTMLElement-generic.tentative.html
index cea32a5..08d165a 100644
--- a/trusted-types/HTMLElement-generic.tentative.html
+++ b/trusted-types/HTMLElement-generic.tentative.html
@@ -24,8 +24,8 @@
   ];
 
   testCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL);
+    test(t => {
+      assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL);
     }, c[0] + "." + c[1] + " assigned via policy (successful URL transformation)");
   });
 
@@ -36,8 +36,8 @@
   ];
 
   scriptTestCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL);
+    test(t => {
+      assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL);
     }, c[0] + "." + c[1] + " assigned via policy (successful ScriptURL transformation)");
   });
 
@@ -48,8 +48,8 @@
   ];
 
   HTMLTestCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML);
+    test(t => {
+      assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML);
     }, c[0] + "." + c[1] + " assigned via policy (successful HTML transformation)");
   });
 </script>
diff --git a/trusted-types/Location-assign.tentative.html b/trusted-types/Location-assign.tentative.html
index 13cca56..62f98e9 100644
--- a/trusted-types/Location-assign.tentative.html
+++ b/trusted-types/Location-assign.tentative.html
@@ -4,12 +4,10 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-          let url = p.createURL(location.href + "#xxx");
-          location.assign(url);
-          assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.assign(url);
+    assert_equals("" + url, location.href, "location href");
   }, "location.assign via policy (successful URL transformation).");
 </script>
diff --git a/trusted-types/Location-href.tentative.html b/trusted-types/Location-href.tentative.html
index d759d28..bacadf6 100644
--- a/trusted-types/Location-href.tentative.html
+++ b/trusted-types/Location-href.tentative.html
@@ -4,12 +4,10 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createURL_policy(window)
-      .then(t.step_func_done(p => {
-        let url = p.createURL(location.href + "#xxx");
-        location.href = url;
-        assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.href = url;
+    assert_equals("" + url, location.href, "location href");
   }, "location.href assigned via policy (successful URL transformation).");
 </script>
diff --git a/trusted-types/Location-replace.tentative.html b/trusted-types/Location-replace.tentative.html
index 7d84905..4fb53d0 100644
--- a/trusted-types/Location-replace.tentative.html
+++ b/trusted-types/Location-replace.tentative.html
@@ -4,12 +4,10 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-          let url = p.createURL(location.href + "#xxx");
-          location.replace(url);
-          assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.replace(url);
+    assert_equals("" + url, location.href, "location href");
   }, "location.replace via policy (successful URL transformation).");
 </script>
diff --git a/trusted-types/Range-createContextualFragment.tentative.html b/trusted-types/Range-createContextualFragment.tentative.html
index 3d45b33..3a880a5 100644
--- a/trusted-types/Range-createContextualFragment.tentative.html
+++ b/trusted-types/Range-createContextualFragment.tentative.html
@@ -4,14 +4,12 @@
 <script src="support/helper.sub.js"></script>
 <body>
 <script>
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        var range = document.createRange();
-        range.selectNodeContents(document.documentElement);
-        var result = range.createContextualFragment(html);
-        assert_equals(result.textContent, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    var range = document.createRange();
+    range.selectNodeContents(document.documentElement);
+    var result = range.createContextualFragment(html);
+    assert_equals(result.textContent, RESULTS.HTML);
   }, "range.createContextualFragment assigned via policy (successful HTML transformation).");
 </script>
diff --git a/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html b/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html
new file mode 100644
index 0000000..b20fcf2
--- /dev/null
+++ b/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+<body>
+<script>
+  //HTML tests
+  function createHTMLTest(policyName, policy, expectedHTML, t) {
+    let p = window.TrustedTypes.createPolicy(policyName, policy);
+    assert_true(p.createHTML('whatever') instanceof TrustedHTML);
+    assert_equals(p.createHTML('whatever') + "", expectedHTML);
+  }
+
+  test(t => {
+    createHTMLTest('TestPolicyHTML1', { createHTML: s => s }, 'whatever', t);
+  }, "html = identity function");
+
+  test(t => {
+    createHTMLTest('TestPolicyHTML2', { createHTML: s => null }, "null", t);
+  }, "html = null");
+
+  var HTMLstr = 'well, ';
+  test(t => {
+    createHTMLTest('TestPolicyHTML3', { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t);
+  }, "html = string + global string");
+
+  var HTMLx = 'global';
+  test(t => {
+    createHTMLTest('TestPolicyHTML4', { createHTML: s => { HTMLx = s; return s; } }, 'whatever', t);
+    assert_equals(HTMLx, 'whatever');
+  }, "html = identity function, global string changed");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyHTML5', { createHTML: s => { throw new Error(); }});
+    assert_throws(new Error(), _ => {
+      p.createHTML('whatever');
+    });
+  }, "html = callback that throws");
+
+  var obj = {
+    "foo": "well,"
+  }
+
+  function getHTML(s) {
+    return this.foo + " " + s;
+  }
+
+  test(t => {
+    createHTMLTest('TestPolicyHTML6', { createHTML: getHTML.bind(obj) }, 'well, whatever', t);
+  }, "html = this bound to an object");
+
+  var foo = "well,";
+  test(t => {
+    createHTMLTest('TestPolicyHTML7', { createHTML: s => getHTML(s) }, 'well, whatever', t);
+  }, "html = this without bind");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyHTML8', null);
+    assert_throws(new TypeError(), _ => {
+      p.createHTML('whatever');
+    });
+  }, "html - calling undefined callback throws");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyHTML9', { createHTML: createHTMLJS });
+    assert_throws(new TypeError(), _ => {
+      p.createScript(INPUTS.SCRIPT);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createScriptURL(INPUTS.SCRIPTURL);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createURL(INPUTS.URL);
+    });
+  }, "createHTML defined - calling undefined callbacks throws");
+
+  //Script tests
+  function createScriptTest(policyName, policy, expectedScript, t) {
+    let p = window.TrustedTypes.createPolicy(policyName, policy);
+    assert_true(p.createScript('whatever') instanceof TrustedScript);
+    assert_equals(p.createScript('whatever') + "", expectedScript);
+  }
+
+  test(t => {
+    createScriptTest('TestPolicyScript1', { createScript: s => s }, 'whatever', t);
+  }, "script = identity function");
+
+  test(t => {
+    createScriptTest('TestPolicyScript2', { createScript: s => null }, "null", t);
+  }, "script = null");
+
+  var Scriptstr = 'well, ';
+  test(t => {
+    createScriptTest('TestPolicyScript3', { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t);
+  }, "script = string + global string");
+
+  var Scriptx = 'global';
+  test(t => {
+    createScriptTest('TestPolicyScript4', { createScript: s => { Scriptx = s; return s; } }, 'whatever', t);
+    assert_equals(Scriptx, 'whatever');
+  }, "script = identity function, global string changed");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScript5', {
+      createScript: s => { throw new Error(); }
+    });
+    assert_throws(new Error(), _ => {
+      p.createScript('whatever');
+    });
+  }, "script = callback that throws");
+
+  var obj = {
+    "foo": "well,"
+  }
+
+  function getScript(s) {
+    return this.foo + " " + s;
+  }
+
+  test(t => {
+    createScriptTest('TestPolicyScript6', { createScript: getScript.bind(obj) }, 'well, whatever', t);
+  }, "script = this bound to an object");
+
+  var foo = "well,";
+  test(t => {
+    createScriptTest('TestPolicyScript7', { createScript: s => getScript(s) }, 'well, whatever', t);
+  }, "script = this without bind");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScript8', null);
+    assert_throws(new TypeError(), _ => {
+      p.createScript('whatever');
+    });
+  }, "script - calling undefined callback throws");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScript9', { createScript: createScriptJS });
+    assert_throws(new TypeError(), _ => {
+      p.createHTML(INPUTS.HTML);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createScriptURL(INPUTS.SCRIPTURL);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createURL(INPUTS.URL);
+    });
+  }, "createScript defined - calling undefined callbacks throws");
+
+
+  //ScriptURL tests
+  function createScriptURLTest(policyName, policy, expectedScriptURL, t) {
+    let p = window.TrustedTypes.createPolicy(policyName, policy);
+    assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
+    assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL);
+  }
+
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL1', { createScriptURL: s => s }, INPUTS.SCRIPTURL, t);
+  }, "script_url = identity function");
+
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL2', { createScriptURL: s => null }, "", t);
+  }, "script_url = null");
+
+  var scriptURLstr = '#duck';
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL3', { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t);
+  }, "script_url = string + global string");
+
+  var scriptURLx = 'global';
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL4', { createScriptURL: s => { ScriptURLx = s; return s; } }, INPUTS.SCRIPTURL, t);
+    assert_equals(ScriptURLx, INPUTS.SCRIPTURL);
+  }, "script_url = identity function, global string changed");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL5', {
+      createScriptURL: s => { throw new Error(); }
+    });
+    assert_throws(new Error(), _ => {
+      p.createScriptURL(INPUTS.SCRIPTURL);
+    });
+  }, "script_url = callback that throws");
+
+  function getScriptURL(s) {
+    return s + this.baz;
+  }
+
+  var obj = {
+    "baz": "#duck"
+  }
+
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL6', { createScriptURL: getScriptURL.bind(obj) }, INPUTS.SCRIPTURL + "#duck", t);
+  }, "script_url = this bound to an object");
+
+  var baz = "#duck";
+  test(t => {
+    createScriptURLTest('TestPolicyScriptURL7', { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t);
+  }, "script_url = this without bind");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL8', null);
+    assert_throws(new TypeError(), _ => {
+      p.createScriptURL(INPUTS.SCRIPTURL);
+    });
+  }, "script_url - calling undefined callback throws");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL9', { createScriptURL: createScriptURLJS });
+    assert_throws(new TypeError(), _ => {
+      p.createHTML(INPUTS.HTML);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createScript(INPUTS.SCRIPT);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createURL(INPUTS.URL);
+    });
+  }, "createScriptURL defined - calling undefined callbacks throws");
+
+
+  //URL tests
+  function createURLTest(policyName, policy, expectedURL, t) {
+    let p = window.TrustedTypes.createPolicy(policyName, policy);
+    assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
+    assert_equals(p.createURL(INPUTS.URL) + "", expectedURL);
+  }
+
+  test(t => {
+    createURLTest('TestPolicyURL1', { createURL: s => s }, INPUTS.URL, t);
+  }, "url = identity function");
+
+  test(t => {
+    createURLTest('TestPolicyURL2', { createURL: s => null }, "", t);
+  }, "url = null");
+
+  var URLstr = '#x';
+  test(t => {
+    createURLTest('TestPolicyURL3', { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t);
+  }, "url = string + global string");
+
+  var URLx = 'global';
+  test(t => {
+    createURLTest('TestPolicyURL4', { createURL: s => { URLx = s; return s; } }, INPUTS.URL, t);
+    assert_equals(URLx, INPUTS.URL);
+  }, "url = identity function, global string changed");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyURL5', {
+      createURL: s => { throw new Error(); }
+    });
+    assert_throws(new Error(), _ => {
+      p.createURL(INPUTS.URL);
+    });
+  }, "url = callback that throws");
+
+  function getURL(s) {
+    return s + this.bar;
+  }
+
+  var obj = {
+    "bar": "#x"
+  }
+
+  test(t => {
+    createURLTest('TestPolicyURL6', { createURL: getURL.bind(obj) }, INPUTS.URL + "#x", t);
+  }, "url = this bound to an object");
+
+  var bar = "#x";
+  test(t => {
+    createURLTest('TestPolicyURL7', { createURL: s => getURL(s) }, INPUTS.URL + bar, t);
+  }, "url = this without bind");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyURL8', null);
+    assert_throws(new TypeError(), _ => {
+      p.createURL(INPUTS.URL);
+    });
+  }, "url - calling undefined callback throws");
+
+  test(t => {
+    let p = window.TrustedTypes.createPolicy('TestPolicyURL9', { createURL: createURLJS });
+    assert_throws(new TypeError(), _ => {
+      p.createHTML(INPUTS.HTML);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createScript(INPUTS.SCRIPT);
+    });
+    assert_throws(new TypeError(), _ => {
+      p.createScriptURL(INPUTS.SCRIPTURL);
+    });
+  }, "createURL defined - calling undefined callbacks throws");
+</script>
diff --git a/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html b/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html
new file mode 100644
index 0000000..6d43e0b
--- /dev/null
+++ b/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+<body>
+<script>
+  //Policy name test
+  test(t => {
+    let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
+    assert_true(policy instanceof TrustedTypePolicy);
+    assert_equals(policy.name, 'SomeName');
+  }, "policy.name = name");
+
+  //Duplicate names test
+  test(t => {
+    assert_throws(new TypeError(), _ => {
+     window.TrustedTypes.createPolicy('SomeName', { createURL: s => s } );
+    });
+  }, "duplicate policy name attempt throws");
+
+  //Retrieve policy names tests
+  test(t => {
+    let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } );
+    let names = window.TrustedTypes.getPolicyNames();
+    assert_true(names.includes('SomeName'));
+    assert_true(names.includes('SomeOtherName'));
+  }, "Retrieving policy names");
+</script>
diff --git a/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html b/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html
deleted file mode 100644
index 76e6d13..0000000
--- a/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js" ></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/helper.sub.js"></script>
-<body>
-<script>
-  //Policy name test
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', { createHTML: s => s } )
-        .then(t.step_func_done(policy => {
-            assert_true(policy instanceof TrustedTypePolicy);
-            assert_equals(policy.name, 'SomeName');
-    }));
-  }, "policy.name = name");
-
-  //HTML tests
-  function createHTMLTest(policy, expectedHTML, t) {
-    window.trustedTypes.createPolicy('SomeName', policy)
-        .then(t.step_func_done(p => {
-            assert_true(p.createHTML('whatever') instanceof TrustedHTML);
-            assert_equals(p.createHTML('whatever') + "", expectedHTML);
-    }));
-  }
-
-  async_test(t => {
-    createHTMLTest( { createHTML: s => s }, 'whatever', t);
-  }, "html = identity function");
-
-  async_test(t => {
-    createHTMLTest( { createHTML: s => null }, "null", t);
-  }, "html = null");
-
-  var HTMLstr = 'well, ';
-  async_test(t => {
-    createHTMLTest( { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t);
-  }, "html = string + global string");
-
-  var HTMLx = 'global';
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createHTML: s => { HTMLx = s; return s; }
-      })
-      .then(t.step_func_done(p => {
-        assert_true(p.createHTML('whatever') instanceof TrustedHTML);
-        assert_equals(p.createHTML('whatever') + "", 'whatever');
-        assert_equals(HTMLx, 'whatever');
-    }));
-  }, "html = identity function, global string changed");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createHTML: s => { throw new Error(); }
-      })
-      .then(t.step_func_done(p => {
-        assert_throws(new Error(), _ => {
-          p.createHTML('whatever');
-        });
-    }));
-  }, "html = callback that throws");
-
-  var obj = {
-    "foo": "well,"
-  }
-
-  function getHTML(s) {
-    return this.foo + " " + s;
-  }
-
-  async_test(t => {
-    createHTMLTest( {
-      createHTML: getHTML.bind(obj)},
-      'well, whatever', t);
-  }, "html = this bound to an object");
-
-  var foo = "well,";
-  async_test(t => {
-    createHTMLTest( { createHTML: s => getHTML(s) }, 'well, whatever', t);
-  }, "html = this without bind");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', null)
-        .then(t.step_func_done(p => {
-            assert_equals(p.createHTML('whatever'), null);
-    }));
-  }, "html - calling undefined callback");
-
-  //Script tests
-  function createScriptTest(policy, expectedScript, t) {
-    let p = window.trustedTypes.createPolicy('SomeName', policy)
-        .then(t.step_func_done(p => {
-            assert_true(p.createScript('whatever') instanceof TrustedScript);
-            assert_equals(p.createScript('whatever') + "", expectedScript);
-    }));
-  }
-
-  async_test(t => {
-    createScriptTest( { createScript: s => s }, 'whatever', t);
-  }, "script = identity function");
-
-  async_test(t => {
-    createScriptTest( { createScript: s => null }, "null", t);
-  }, "script = null");
-
-  var Scriptstr = 'well, ';
-  async_test(t => {
-    createScriptTest( { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t);
-  }, "script = string + global string");
-
-  var Scriptx = 'global';
-  async_test(t => {
-    let p = window.trustedTypes.createPolicy('SomeName', {
-        createScript: s => { Scriptx = s; return s; }
-      })
-      .then(t.step_func_done(p => {
-        assert_true(p.createScript('whatever') instanceof TrustedScript);
-        assert_equals(p.createScript('whatever') + "", 'whatever');
-        assert_equals(Scriptx, 'whatever');
-    }));
-  }, "script = identity function, global string changed");
-
-  async_test(t => {
-    let p = window.trustedTypes.createPolicy('SomeName', {
-        createScript: s => { throw new Error(); }
-      })
-      .then(t.step_func_done(p => {
-        assert_throws(new Error(), _ => {
-          p.createScript('whatever');
-        });
-    }));
-  }, "script = callback that throws");
-
-  var obj = {
-    "foo": "well,"
-  }
-
-  function getScript(s) {
-    return this.foo + " " + s;
-  }
-
-  async_test(t => {
-    createScriptTest( {
-      createScript: getScript.bind(obj)},
-      'well, whatever', t);
-  }, "script = this bound to an object");
-
-  var foo = "well,";
-  async_test(t => {
-    createScriptTest( { createScript: s => getScript(s) }, 'well, whatever', t);
-  }, "script = this without bind");
-
-  async_test(t => {
-    let p = window.trustedTypes.createPolicy('SomeName', null)
-        .then(t.step_func_done(p => {
-            assert_equals(p.createScript('whatever'), null);
-    }));
-  }, "script - calling undefined callback");
-
-  //ScriptURL tests
-  function createScriptURLTest(policy, expectedScriptURL, t) {
-    window.trustedTypes.createPolicy('SomeName', policy)
-        .then(t.step_func_done(p => {
-            assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
-            assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL);
-    }));
-  }
-
-  async_test(t => {
-    createScriptURLTest( { createScriptURL: s => s }, INPUTS.SCRIPTURL, t);
-  }, "script_url = identity function");
-
-  async_test(t => {
-    createScriptURLTest( { createScriptURL: s => null }, "", t);
-  }, "script_url = null");
-
-  var scriptURLstr = '#duck';
-  async_test(t => {
-    createScriptURLTest( { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t);
-  }, "script_url = string + global string");
-
-  var scriptURLx = 'global';
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createScriptURL: s => { ScriptURLx = s; return s; }
-      })
-      .then(t.step_func_done(p => {
-        assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
-        assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", INPUTS.SCRIPTURL);
-        assert_equals(ScriptURLx, INPUTS.SCRIPTURL);
-    }));
-  }, "script_url = identity function, global string changed");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createScriptURL: s => { throw new Error(); }
-      })
-      .then(t.step_func_done(p => {
-        assert_throws(new Error(), _ => {
-          p.createScriptURL(INPUTS.SCRIPTURL);
-        });
-    }));
-  }, "script_url = callback that throws");
-
-  function getScriptURL(s) {
-    return s + this.baz;
-  }
-
-  var obj = {
-    "baz": "#duck"
-  }
-
-  async_test(t => {
-    createScriptURLTest( {
-      createScriptURL: getScriptURL.bind(obj)},
-      INPUTS.SCRIPTURL + "#duck", t);
-  }, "script_url = this bound to an object");
-
-  var baz = "#duck";
-  async_test(t => {
-    createScriptURLTest( { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t);
-  }, "script_url = this without bind");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', null)
-        .then(t.step_func_done(p => {
-            assert_equals(p.createScriptURL(INPUTS.SCRIPTURL), null);
-    }));
-  }, "script_url - calling undefined callback");
-
-  //URL tests
-  function createURLTest(policy, expectedURL, t) {
-    window.trustedTypes.createPolicy('SomeName', policy)
-        .then(t.step_func_done(p => {
-            assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
-            assert_equals(p.createURL(INPUTS.URL) + "", expectedURL);
-    }));
-  }
-
-  async_test(t => {
-    createURLTest( { createURL: s => s }, INPUTS.URL, t);
-  }, "url = identity function");
-
-  async_test(t => {
-    createURLTest( { createURL: s => null }, "", t);
-  }, "url = null");
-
-  var URLstr = '#x';
-  async_test(t => {
-    createURLTest( { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t);
-  }, "url = string + global string");
-
-  var URLx = 'global';
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createURL: s => { URLx = s; return s; }
-      })
-      .then(t.step_func_done(p => {
-        assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
-        assert_equals(p.createURL(INPUTS.URL) + "", INPUTS.URL);
-        assert_equals(URLx, INPUTS.URL);
-    }));
-  }, "url = identity function, global string changed");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', {
-        createURL: s => { throw new Error(); }
-      })
-      .then(t.step_func_done(p => {
-        assert_throws(new Error(), _ => {
-          p.createURL(INPUTS.URL);
-        });
-    }));
-  }, "url = callback that throws");
-
-  function getURL(s) {
-    return s + this.bar;
-  }
-
-  var obj = {
-    "bar": "#x"
-  }
-
-  async_test(t => {
-    createURLTest( {
-      createURL: getURL.bind(obj)},
-      INPUTS.URL + "#x", t);
-  }, "url = this bound to an object");
-
-  var bar = "#x";
-  async_test(t => {
-    createURLTest( { createURL: s => getURL(s) }, INPUTS.URL + bar, t);
-  }, "url = this without bind");
-
-  async_test(t => {
-    window.trustedTypes.createPolicy('SomeName', null)
-        .then(t.step_func_done(p => {
-            assert_equals(p.createURL(INPUTS.URL), null);
-    }));
-  }, "url - calling undefined callback");
-</script>
diff --git a/trusted-types/Window-trustedTypes.tentative.html b/trusted-types/Window-TrustedTypes.tentative.html
similarity index 77%
rename from trusted-types/Window-trustedTypes.tentative.html
rename to trusted-types/Window-TrustedTypes.tentative.html
index ef44877..8e20e49 100644
--- a/trusted-types/Window-trustedTypes.tentative.html
+++ b/trusted-types/Window-TrustedTypes.tentative.html
@@ -5,7 +5,7 @@
 <body>
 <script>
   test(t => {
-    let factory = window.trustedTypes;
+    let factory = window.TrustedTypes;
     assert_true(factory instanceof TrustedTypePolicyFactory);
-  }, "factory = window.trustedTypes");
+  }, "factory = window.TrustedTypes");
 </script>
diff --git a/trusted-types/Window-open.tentative.html b/trusted-types/Window-open.tentative.html
index c005fbb..172d566 100644
--- a/trusted-types/Window-open.tentative.html
+++ b/trusted-types/Window-open.tentative.html
@@ -5,23 +5,21 @@
 <body>
 <script>
   // helper functions for the tests
-  function testWindowOpen(t, win) {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-            let url = p.createURL(INPUTS.URL);
-            let child_window = win.open(url, "", "");
-            child_window.onload = t.step_func_done(_ => {
-              assert_equals(child_window.location.href, "" + url);
-              child_window.close();
-            });
-        }));
+  function testWindowOpen(t, win, testNumber) {
+    let p = createURL_policy(window, testNumber);
+    let url = p.createURL(INPUTS.URL);
+    let child_window = win.open(url, "", "");
+    child_window.onload = t.step_func_done(_ => {
+      assert_equals(child_window.location.href, "" + url);
+      child_window.close();
+    });
   }
 
-  async_test(t => {
-    testWindowOpen(t, window);
+  test(t => {
+    testWindowOpen(t, window, 1);
   }, "window.open via policy (successful URL transformation).");
 
-  async_test(t => {
-    testWindowOpen(t, document);
+  test(t => {
+    testWindowOpen(t, document, 2);
   }, "document.open via policy (successful URL transformation).");
 </script>
diff --git a/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html b/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
index cc575dc..e5959a4 100644
--- a/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
+++ b/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
@@ -7,14 +7,12 @@
 <body>
 <script>
   // Trusted HTML assignments do not throw.
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        let parser = new DOMParser();
-        let doc = parser.parseFromString(html, "text/html");
-        assert_equals(doc.body.innerText, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    let parser = new DOMParser();
+    let doc = parser.parseFromString(html, "text/html");
+    assert_equals(doc.body.innerText, RESULTS.HTML);
   }, "document.innerText assigned via policy (successful HTML transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Document-write.tentative.html b/trusted-types/block-string-assignment-to-Document-write.tentative.html
index 28813d7..06532c3 100644
--- a/trusted-types/block-string-assignment-to-Document-write.tentative.html
+++ b/trusted-types/block-string-assignment-to-Document-write.tentative.html
@@ -10,13 +10,11 @@
 <body>
 <script>
   // TrustedURL assignments do not throw.
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        document.write(html);
-        assert_equals(document.body.innerText, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    document.write(html);
+    assert_equals(document.body.innerText, RESULTS.HTML);
   }, "document.write with html assigned via policy (successful URL transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html b/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
index ad94b44..1fb3bbd 100644
--- a/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
+++ b/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
@@ -13,33 +13,31 @@
   var container = document.querySelector('#container');
 
   // Trusted HTML assignments do not throw.
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
 
-        var d = document.createElement('div');
-        container.appendChild(d);
+    var d = document.createElement('div');
+    container.appendChild(d);
 
-        d.insertAdjacentHTML('beforebegin', html);
-        assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
-        assert_equals(d.previousSibling.data, RESULTS.HTML);
+    d.insertAdjacentHTML('beforebegin', html);
+    assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
+    assert_equals(d.previousSibling.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('afterbegin', html);
-        assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
-        assert_equals(d.firstChild.data, RESULTS.HTML);
+    d.insertAdjacentHTML('afterbegin', html);
+    assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
+    assert_equals(d.firstChild.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('beforeend', html);
-        assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
-        assert_equals(d.lastChild.data, RESULTS.HTML);
+    d.insertAdjacentHTML('beforeend', html);
+    assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
+    assert_equals(d.lastChild.data, RESULTS.HTML);
 
-        d.insertAdjacentHTML('afterend', html);
-        assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
-        assert_equals(d.nextSibling.data, RESULTS.HTML);
+    d.insertAdjacentHTML('afterend', html);
+    assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
+    assert_equals(d.nextSibling.data, RESULTS.HTML);
 
-        while (container.firstChild)
-          container.firstChild.remove();
-    }));
+    while (container.firstChild)
+      container.firstChild.remove();
   }, "insertAdjacentHTML with html assigned via policy (successful HTML transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html b/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
index 47f1165..abb5952 100644
--- a/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
+++ b/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
@@ -13,19 +13,17 @@
   var container = document.querySelector('#container')
 
   // TrustedHTML assignments do not throw.
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
 
-        var d = document.createElement('div');
-        document.querySelector('#container').appendChild(d);
-        d.outerHTML = html;
-        assert_equals(container.innerText, RESULTS.HTML);
+    var d = document.createElement('div');
+    document.querySelector('#container').appendChild(d);
+    d.outerHTML = html;
+    assert_equals(container.innerText, RESULTS.HTML);
 
-        while (container.firstChild)
-          container.firstChild.remove();
-    }));
+    while (container.firstChild)
+      container.firstChild.remove();
   }, "outerHTML with html assigned via policy (successful HTML transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html b/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
index eae5262..7b1a579 100644
--- a/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
+++ b/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
@@ -27,8 +27,8 @@
   ];
 
   testCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL);
+    test(t => {
+      assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL);
       assert_throws_no_trusted_type(c[0], c[1], 'A string');
       assert_throws_no_trusted_type(c[0], c[1], null);
     }, c[0] + "." + c[1] + " accepts only TrustedURL");
@@ -41,8 +41,8 @@
   ];
 
   scriptTestCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL);
+    test(t => {
+      assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL);
       assert_throws_no_trusted_type(c[0], c[1], 'A string');
       assert_throws_no_trusted_type(c[0], c[1], null);
     }, c[0] + "." + c[1] + " accepts only TrustedScriptURL");
@@ -55,8 +55,8 @@
   ];
 
   HTMLTestCases.forEach(c => {
-    async_test(t => {
-      assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML);
+    test(t => {
+      assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML);
       assert_throws_no_trusted_type(c[0], c[1], 'A string');
       assert_throws_no_trusted_type(c[0], c[1], null);
     }, c[0] + "." + c[1] + " accepts only TrustedHTML");
diff --git a/trusted-types/block-string-assignment-to-Location-assign.tentative.html b/trusted-types/block-string-assignment-to-Location-assign.tentative.html
index 8079335..cd375b9 100644
--- a/trusted-types/block-string-assignment-to-Location-assign.tentative.html
+++ b/trusted-types/block-string-assignment-to-Location-assign.tentative.html
@@ -10,13 +10,11 @@
 <body>
 <script>
   // TrustedURL assignments do not throw.
-  async_test(t => {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-          let url = p.createURL(location.href + "#xxx");
-          location.assign(url);
-          assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.assign(url);
+    assert_equals("" + url, location.href, "location href");
   }, "location.assign via policy (successful URL transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Location-href.tentative.html b/trusted-types/block-string-assignment-to-Location-href.tentative.html
index 4e393f9..14fbcb2f 100644
--- a/trusted-types/block-string-assignment-to-Location-href.tentative.html
+++ b/trusted-types/block-string-assignment-to-Location-href.tentative.html
@@ -10,13 +10,11 @@
 <body>
 <script>
   // TrustedURL assignments do not throw.
-  async_test(t => {
-    createURL_policy(window)
-      .then(t.step_func_done(p => {
-        let url = p.createURL(location.href + "#xxx");
-        location.href = url;
-        assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.href = url;
+    assert_equals("" + url, location.href, "location href");
   }, "location.href assigned via policy (successful URL transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Location-replace.tentative.html b/trusted-types/block-string-assignment-to-Location-replace.tentative.html
index 872f14e..9d00fcd 100644
--- a/trusted-types/block-string-assignment-to-Location-replace.tentative.html
+++ b/trusted-types/block-string-assignment-to-Location-replace.tentative.html
@@ -10,13 +10,11 @@
 <body>
 <script>
   // TrustedURL replacements do not throw.
-  async_test(t => {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-          let url = p.createURL(location.href + "#xxx");
-          location.replace(url);
-          assert_equals("" + url, location.href, "location href");
-    }));
+  test(t => {
+    let p = createURL_policy(window, 1);
+    let url = p.createURL(location.href + "#xxx");
+    location.replace(url);
+    assert_equals("" + url, location.href, "location href");
   }, "location.replace via policy (successful URL transformation).");
 
   // String replacements throw.
diff --git a/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html b/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
index 2afa257..ff9be06 100644
--- a/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
+++ b/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
@@ -7,15 +7,13 @@
 <body>
 <script>
   // TrustedHTML assignments do not throw.
-  async_test(t => {
-    createHTML_policy(window)
-      .then(t.step_func_done(p => {
-        let html = p.createHTML(INPUTS.HTML);
-        var range = document.createRange();
-        range.selectNodeContents(document.documentElement);
-        var result = range.createContextualFragment(html);
-        assert_equals(result.textContent, RESULTS.HTML);
-    }));
+  test(t => {
+    let p = createHTML_policy(window, 1);
+    let html = p.createHTML(INPUTS.HTML);
+    var range = document.createRange();
+    range.selectNodeContents(document.documentElement);
+    var result = range.createContextualFragment(html);
+    assert_equals(result.textContent, RESULTS.HTML);
   }, "range.createContextualFragment assigned via policy (successful HTML transformation).");
 
   // String assignments throw.
diff --git a/trusted-types/block-string-assignment-to-Window-open.tentative.html b/trusted-types/block-string-assignment-to-Window-open.tentative.html
index f571229..ae4b038 100644
--- a/trusted-types/block-string-assignment-to-Window-open.tentative.html
+++ b/trusted-types/block-string-assignment-to-Window-open.tentative.html
@@ -9,54 +9,51 @@
 </head>
 <body>
 <script>
+  var testnb = 0;
   // helper functions for the tests
-  function testWindowOpen(t, win) {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-            let url = p.createURL(INPUTS.URL);
-            let child_window = win.open(url, "", "");
-            child_window.onload = t.step_func_done(_ => {
-              assert_equals(child_window.location.href, "" + url);
-              child_window.close();
-            });
-        }));
+  function testWindowOpen(t, win, nb) {
+    let p = createURL_policy(window, nb);
+    let url = p.createURL(INPUTS.URL);
+    let child_window = win.open(url, "", "");
+    child_window.onload = t.step_func_done(_ => {
+      assert_equals(child_window.location.href, "" + url);
+      child_window.close();
+    });
   }
 
-  function testWindowThrows(t, url, win) {
-    createURL_policy(window)
-        .then(t.step_func_done(p => {
-            assert_throws(new TypeError(), _ => {
-              let child_window = win.open(url, "", "");
-              child_window.close();
-            });
-        }));
+  function testWindowThrows(t, url, win, nb) {
+    let p = createURL_policy(window, nb);
+    assert_throws(new TypeError(), _ => {
+      let child_window = win.open(url, "", "");
+      child_window.close();
+    });
   }
 
   // TrustedURL assignments do not throw.
-  async_test(t => {
-    testWindowOpen(t, window);
+  test(t => {
+    testWindowOpen(t, window, ++testnb);
   }, "window.open via policy (successful URL transformation).");
 
-  async_test(t => {
-    testWindowOpen(t, document);
+  test(t => {
+    testWindowOpen(t, document, ++testnb);
   }, "document.open via policy (successful URL transformation).");
 
   // String assignments throw.
-  async_test(t => {
-    testWindowThrows(t, 'A string', window);
+  test(t => {
+    testWindowThrows(t, 'A string', window, ++testnb);
   }, "`window.open(string)` throws.");
 
-  async_test(t => {
-    testWindowThrows(t, 'A string', document);
+  test(t => {
+    testWindowThrows(t, 'A string', document, ++testnb);
   }, "`document.open(string)` throws.");
 
   // Null assignment throws.
-  async_test(t => {
-    testWindowThrows(t, null, window);
+  test(t => {
+    testWindowThrows(t, null, window, ++testnb);
   }, "`window.open(null)` throws.");
 
-  async_test(t => {
-    testWindowThrows(t, null, document);
+  test(t => {
+    testWindowThrows(t, null, document, ++testnb);
   }, "`document.open(null)` throws.");
 </script>
 </body>
diff --git a/trusted-types/support/helper.sub.js b/trusted-types/support/helper.sub.js
index b543591..617e02a 100644
--- a/trusted-types/support/helper.sub.js
+++ b/trusted-types/support/helper.sub.js
@@ -31,52 +31,44 @@
       .replace("an.url", "successfully.transformed");
 }
 
-function createHTML_policy(win) {
-  return win.trustedTypes.createPolicy('SomeName', { createHTML: createHTMLJS });
+function createHTML_policy(win, c) {
+  return win.TrustedTypes.createPolicy('SomeHTMLPolicyName' + c, { createHTML: createHTMLJS });
 }
 
-function createScript_policy(win) {
-  return win.trustedTypes.createPolicy('SomeName', { createScript: createScriptJS });
+function createScript_policy(win, c) {
+  return win.TrustedTypes.createPolicy('SomeScriptPolicyName' + c, { createScript: createScriptJS });
 }
 
-function createScriptURL_policy(win) {
-  return win.trustedTypes.createPolicy('SomeName', { createScriptURL: createScriptURLJS });
+function createScriptURL_policy(win, c) {
+  return win.TrustedTypes.createPolicy('SomeScriptURLPolicyName' + c, { createScriptURL: createScriptURLJS });
 }
 
-function createURL_policy(win) {
-  return win.trustedTypes.createPolicy('SomeName', { createURL: createURLJS });
+function createURL_policy(win, c) {
+  return win.TrustedTypes.createPolicy('SomeURLPolicyName' + c, { createURL: createURLJS });
 }
 
-function assert_element_accepts_trusted_html(win, t, tag, attribute, expected) {
-  createHTML_policy(win)
-      .then(t.step_func_done(p => {
-          let html = p.createHTML(INPUTS.HTML);
-          assert_element_accepts_trusted_type(tag, attribute, html, expected);
-      }));
+function assert_element_accepts_trusted_html(win, c, t, tag, attribute, expected) {
+  let p = createHTML_policy(win, c);
+  let html = p.createHTML(INPUTS.HTML);
+  assert_element_accepts_trusted_type(tag, attribute, html, expected);
 }
 
-function assert_element_accepts_trusted_script(win, t, tag, attribute, expected) {
-  createScript_policy(win)
-      .then(t.step_func_done(p => {
-          let script = p.createScript(INPUTS.SCRIPT);
-          assert_element_accepts_trusted_type(tag, attribute, script, expected);
-      }));
+function assert_element_accepts_trusted_script(win, c, t, tag, attribute, expected) {
+  let p = createScript_policy(win, c);
+  let script = p.createScript(INPUTS.SCRIPT);
+  assert_element_accepts_trusted_type(tag, attribute, script, expected);
 }
 
-function assert_element_accepts_trusted_script_url(win, t, tag, attribute, expected) {
-  createScriptURL_policy(win)
-      .then(t.step_func_done(p => {
-          let scripturl = p.createScriptURL(INPUTS.SCRIPTURL);
-          assert_element_accepts_trusted_type(tag, attribute, scripturl, expected);
-      }));
+function assert_element_accepts_trusted_script_url(win, c, t, tag, attribute, expected) {
+  let p = createScriptURL_policy(win, c);
+  let scripturl = p.createScriptURL(INPUTS.SCRIPTURL);
+  assert_element_accepts_trusted_type(tag, attribute, scripturl, expected);
 }
 
-function assert_element_accepts_trusted_url(win, t, tag, attribute, expected) {
-  createURL_policy(win)
-      .then(t.step_func_done(p => {
-          let url = p.createURL(INPUTS.URL);
-          assert_element_accepts_trusted_type(tag, attribute, url, expected);
-      }));
+function assert_element_accepts_trusted_url(win, c, t, tag, attribute, expected) {
+  let p = createURL_policy(win, c);
+  let url = p.createURL(INPUTS.URL);
+  assert_element_accepts_trusted_type(tag, attribute, url, expected);
 }
 
 function assert_element_accepts_trusted_type(tag, attribute, value, expected) {