| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <title>Cross-realm XPathNSResolver throws TypeError of its associated Realm</title> |
| <link rel="help" href="https://webidl.spec.whatwg.org/#ref-for-prepare-to-run-script"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/invalid_namespace_test.js"></script> |
| |
| <iframe name="resolverGlobalObject" src="resources/empty-document.html"></iframe> |
| |
| <script> |
| setup({ allow_uncaught_exception: true }); |
| |
| const iframeLoaded = new Promise(resolve => { window.addEventListener("load", resolve); }); |
| |
| promise_test(async t => { |
| await iframeLoaded; |
| const resolver = new resolverGlobalObject.Object; |
| |
| return promise_rejects_js(t, resolverGlobalObject.TypeError, |
| invalid_namespace_test(t, resolver, resolverGlobalObject) |
| ); |
| }, "XPathNSResolver is cross-realm plain object without 'lookupNamespaceURI' property"); |
| |
| promise_test(async t => { |
| await iframeLoaded; |
| const resolver = new resolverGlobalObject.Object; |
| resolver.lookupNamespaceURI = {}; |
| |
| return promise_rejects_js(t, resolverGlobalObject.TypeError, |
| invalid_namespace_test(t, resolver, resolverGlobalObject) |
| ); |
| }, "XPathNSResolver is cross-realm plain object with non-callable 'lookupNamespaceURI' property"); |
| |
| promise_test(async t => { |
| await iframeLoaded; |
| const { proxy, revoke } = Proxy.revocable(() => {}, {}); |
| revoke(); |
| |
| const resolver = new resolverGlobalObject.Object; |
| resolver.lookupNamespaceURI = proxy; |
| |
| return promise_rejects_js(t, resolverGlobalObject.TypeError, |
| invalid_namespace_test(t, resolver, resolverGlobalObject) |
| ); |
| }, "XPathNSResolver is cross-realm plain object with revoked Proxy as 'lookupNamespaceURI' property"); |
| |
| promise_test(async t => { |
| await iframeLoaded; |
| const { proxy, revoke } = resolverGlobalObject.Proxy.revocable({}, {}); |
| revoke(); |
| |
| return promise_rejects_js(t, resolverGlobalObject.TypeError, |
| invalid_namespace_test(t, proxy, resolverGlobalObject) |
| ); |
| }, "XPathNSResolver is cross-realm non-callable revoked Proxy"); |
| |
| promise_test(async t => { |
| await iframeLoaded; |
| const { proxy, revoke } = resolverGlobalObject.Proxy.revocable(() => {}, {}); |
| revoke(); |
| |
| return promise_rejects_js(t, resolverGlobalObject.TypeError, |
| invalid_namespace_test(t, proxy, resolverGlobalObject) |
| ); |
| }, "XPathNSResolver is cross-realm callable revoked Proxy"); |
| </script> |