-
Notifications
You must be signed in to change notification settings - Fork 3.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
WebKit export of https://bugs.webkit.org/show_bug.cgi?id=232387 (#32449)
- Loading branch information
1 parent
d779a4e
commit 2692698
Showing
9 changed files
with
217 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<title>Cross-realm EventListener 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> | ||
|
||
<iframe name="eventListenerGlobalObject" src="resources/empty-document.html"></iframe> | ||
|
||
<script> | ||
setup({ allow_uncaught_exception: true }); | ||
|
||
test_onload(() => { | ||
const eventTarget = new EventTarget; | ||
const eventListener = new eventListenerGlobalObject.Object; | ||
|
||
eventTarget.addEventListener("foo", eventListener); | ||
assert_reports_exception(eventListenerGlobalObject.TypeError, () => { eventTarget.dispatchEvent(new Event("foo")); }); | ||
}, "EventListener is cross-realm plain object without 'handleEvent' property"); | ||
|
||
test_onload(() => { | ||
const eventTarget = new EventTarget; | ||
const eventListener = new eventListenerGlobalObject.Object; | ||
eventListener.handleEvent = {}; | ||
|
||
eventTarget.addEventListener("foo", eventListener); | ||
assert_reports_exception(eventListenerGlobalObject.TypeError, () => { eventTarget.dispatchEvent(new Event("foo")); }); | ||
}, "EventListener is cross-realm plain object with non-callable 'handleEvent' property"); | ||
|
||
test_onload(() => { | ||
const eventTarget = new EventTarget; | ||
const { proxy, revoke } = Proxy.revocable(() => {}, {}); | ||
revoke(); | ||
|
||
const eventListener = new eventListenerGlobalObject.Object; | ||
eventListener.handleEvent = proxy; | ||
|
||
eventTarget.addEventListener("foo", eventListener); | ||
assert_reports_exception(eventListenerGlobalObject.TypeError, () => { eventTarget.dispatchEvent(new Event("foo")); }); | ||
}, "EventListener is cross-realm plain object with revoked Proxy as 'handleEvent' property"); | ||
|
||
test_onload(() => { | ||
const eventTarget = new EventTarget; | ||
const { proxy, revoke } = eventListenerGlobalObject.Proxy.revocable({}, {}); | ||
revoke(); | ||
|
||
eventTarget.addEventListener("foo", proxy); | ||
assert_reports_exception(eventListenerGlobalObject.TypeError, () => { eventTarget.dispatchEvent(new Event("foo")); }); | ||
}, "EventListener is cross-realm non-callable revoked Proxy"); | ||
|
||
test_onload(() => { | ||
const eventTarget = new EventTarget; | ||
const { proxy, revoke } = eventListenerGlobalObject.Proxy.revocable(() => {}, {}); | ||
revoke(); | ||
|
||
eventTarget.addEventListener("foo", proxy); | ||
assert_reports_exception(eventListenerGlobalObject.TypeError, () => { eventTarget.dispatchEvent(new Event("foo")); }); | ||
}, "EventListener is cross-realm callable revoked Proxy"); | ||
|
||
function test_onload(fn, desc) { | ||
async_test(t => { window.addEventListener("load", t.step_func_done(fn)); }, desc); | ||
} | ||
|
||
function assert_reports_exception(expectedConstructor, fn) { | ||
let error; | ||
const onErrorHandler = event => { error = event.error; }; | ||
|
||
eventListenerGlobalObject.addEventListener("error", onErrorHandler); | ||
fn(); | ||
eventListenerGlobalObject.removeEventListener("error", onErrorHandler); | ||
|
||
assert_equals(typeof error, "object"); | ||
assert_equals(error.constructor, expectedConstructor); | ||
} | ||
</script> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
67 changes: 53 additions & 14 deletions
67
dom/traversal/TreeWalker-acceptNode-filter-cross-realm.html
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,60 @@ | ||
<!DOCTYPE html> | ||
<title>TreeWalker: cross-realm NodeFilter throws TypeError of current realm</title> | ||
<meta charset="utf-8"> | ||
<title>TreeWalker: cross-realm NodeFilter 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> | ||
<link rel="help" href="https://webidl.spec.whatwg.org/#call-a-user-objects-operation"> | ||
|
||
<body id="treeWalkerRoot"> | ||
<div></div> | ||
<iframe name="nodeFilterGlobalObject" src="support/empty-document.html"></iframe> | ||
|
||
<div id="treeWalkerRoot"> | ||
<div class="firstChild"></div> | ||
</div> | ||
|
||
<script> | ||
const iframe = document.createElement("iframe"); | ||
iframe.src = "support/TreeWalker-acceptNode-filter-cross-realm-subframe.html"; | ||
iframe.onload = () => { | ||
for (const testCase of iframe.contentWindow.testCases) { | ||
test(t => { | ||
assert_equals(testCase.actual.constructor, testCase.expected); | ||
}, testCase.description); | ||
} | ||
}; | ||
document.body.append(iframe); | ||
test_onload(() => { | ||
const nodeFilter = new nodeFilterGlobalObject.Object; | ||
|
||
const walker = document.createTreeWalker(treeWalkerRoot, NodeFilter.SHOW_ELEMENT, nodeFilter); | ||
assert_throws_js(nodeFilterGlobalObject.TypeError, () => { walker.firstChild(); }); | ||
}, "NodeFilter is cross-realm plain object without 'acceptNode' property"); | ||
|
||
test_onload(() => { | ||
const nodeFilter = new nodeFilterGlobalObject.Object; | ||
nodeFilter.acceptNode = {}; | ||
|
||
const walker = document.createTreeWalker(treeWalkerRoot, NodeFilter.SHOW_ELEMENT, nodeFilter); | ||
assert_throws_js(nodeFilterGlobalObject.TypeError, () => { walker.firstChild(); }); | ||
}, "NodeFilter is cross-realm plain object with non-callable 'acceptNode' property"); | ||
|
||
test_onload(() => { | ||
const { proxy, revoke } = Proxy.revocable(() => {}, {}); | ||
revoke(); | ||
|
||
const nodeFilter = new nodeFilterGlobalObject.Object; | ||
nodeFilter.acceptNode = proxy; | ||
|
||
const walker = document.createTreeWalker(treeWalkerRoot, NodeFilter.SHOW_ELEMENT, nodeFilter); | ||
assert_throws_js(nodeFilterGlobalObject.TypeError, () => { walker.firstChild(); }); | ||
}, "NodeFilter is cross-realm plain object with revoked Proxy as 'acceptNode' property"); | ||
|
||
test_onload(() => { | ||
const { proxy, revoke } = nodeFilterGlobalObject.Proxy.revocable({}, {}); | ||
revoke(); | ||
|
||
const walker = document.createTreeWalker(treeWalkerRoot, NodeFilter.SHOW_ELEMENT, proxy); | ||
assert_throws_js(nodeFilterGlobalObject.TypeError, () => { walker.firstChild(); }); | ||
}, "NodeFilter is cross-realm non-callable revoked Proxy"); | ||
|
||
test_onload(() => { | ||
const { proxy, revoke } = nodeFilterGlobalObject.Proxy.revocable(() => {}, {}); | ||
revoke(); | ||
|
||
const walker = document.createTreeWalker(treeWalkerRoot, NodeFilter.SHOW_ELEMENT, proxy); | ||
assert_throws_js(nodeFilterGlobalObject.TypeError, () => { walker.firstChild(); }); | ||
}, "NodeFilter is cross-realm callable revoked Proxy"); | ||
|
||
function test_onload(fn, desc) { | ||
async_test(t => { window.addEventListener("load", t.step_func_done(fn)); }, desc); | ||
} | ||
</script> |
22 changes: 0 additions & 22 deletions
22
dom/traversal/support/TreeWalker-acceptNode-filter-cross-realm-subframe.html
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<!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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!DOCTYPE html> | ||
<meta charset="utf-8"> | ||
<body> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters