fune/testing/web-platform/tests/webidl/ecmascript-binding/constructors.html
Weizhong Xia 0108376e76 Bug 1730216 [wpt PR 30551] - Rename WebIDL to webidl, a=testonly
Automatic update from web-platform-tests
Rename WebIDL to webidl

WebIDL is renamed to webidl at up stream. Do this also in chromium to
unblock wpt-importer. Wpt-importer should be able to handle such cases
in future.

Bug: 1247327
Change-Id: Ib9c4ca3f4da55c6a25e56bc730a846b6fa95563b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3151416
Reviewed-by: Xianzhu Wang <wangxianzhu@chromium.org>
Commit-Queue: Weizhong Xia <weizhong@google.com>
Cr-Commit-Position: refs/heads/main@{#920025}

--

wpt-commits: a370aad338d6ed743abb4d2c6ae84a7f1058558c
wpt-pr: 30551
2021-09-29 09:23:56 +00:00

132 lines
5.5 KiB
HTML

<!DOCTYPE html>
<meta charset=utf-8>
<title>Realm for constructed objects</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<div id=log></div>
<script>
function object_realm(dp) {
// Note that browsers use the URL of the relevant global object's associated
// Document.
// https://github.com/w3c/DOM-Parsing/issues/46
var url = DOMParser.prototype.parseFromString.call(dp, "x", "text/html").documentURI;
var file = url.slice(url.lastIndexOf("/") + 1);
switch (file) {
case "constructors.html":
return "parent window";
case "constructors-support.html":
return "child window";
default:
return "???";
}
}
async_test(function() {
var iframe = document.createElement("iframe");
iframe.onload = this.step_func_done(function() {
var child = iframe.contentWindow;
test(function() {
var dp = new DOMParser();
assert_equals(Object.getPrototypeOf(dp), DOMParser.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Normal constructor in parent window");
test(function() {
var dp = new child.DOMParser();
assert_equals(Object.getPrototypeOf(dp), child.DOMParser.prototype);
assert_equals(object_realm(dp), "child window");
}, "Normal constructor in child window");
test(function() {
var dp = Reflect.construct(child.DOMParser, [], DOMParser);
assert_equals(Object.getPrototypeOf(dp), DOMParser.prototype);
assert_equals(object_realm(dp), "child window");
}, "Constructor in child window with normal NewTarget from parent window");
test(function() {
var dp = Reflect.construct(DOMParser, [], child.DOMParser);
assert_equals(Object.getPrototypeOf(dp), child.DOMParser.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Constructor in parent window with normal NewTarget from child window");
test(function() {
class DOMParserSubclass extends DOMParser {}
var dp = new DOMParserSubclass();
assert_equals(Object.getPrototypeOf(dp), DOMParserSubclass.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Subclass constructor in parent window");
test(function() {
var dp = new child.DOMParserSubclass();
assert_equals(Object.getPrototypeOf(dp), child.DOMParserSubclass.prototype);
assert_equals(object_realm(dp), "child window");
}, "Subclass constructor in child window");
test(function() {
class ForeignDOMParserSubclass extends child.DOMParser {}
var dp = new ForeignDOMParserSubclass();
assert_equals(Object.getPrototypeOf(dp), ForeignDOMParserSubclass.prototype);
assert_equals(object_realm(dp), "child window");
}, "Subclass constructor in parent window with parent class in child window");
test(function() {
var dp = new child.ForeignDOMParserSubclass();
assert_equals(Object.getPrototypeOf(dp), child.ForeignDOMParserSubclass.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Subclass constructor in child window with parent class in parent window");
test(function() {
var badNewTarget = function() {};
badNewTarget.prototype = 7;
var dp = Reflect.construct(child.DOMParser, [], badNewTarget);
assert_equals(Object.getPrototypeOf(dp), DOMParser.prototype);
assert_equals(object_realm(dp), "child window");
}, "Constructor in child window with bad NewTarget from parent window");
test(function() {
var dp = Reflect.construct(DOMParser, [], child.badNewTarget);
assert_equals(Object.getPrototypeOf(dp), child.DOMParser.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Constructor in parent window with bad NewTarget from child window");
test(function() {
var badNewTarget = Function.prototype.bind.call(new child.Function());
badNewTarget.prototype = 7;
var dp = Reflect.construct(DOMParser, [], badNewTarget);
assert_equals(Object.getPrototypeOf(dp), child.DOMParser.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Constructor in parent window with bad NewTarget from parent window that's a bound child window function");
test(function() {
var badNewTarget = child.Function.prototype.bind.call(new Function());
badNewTarget.prototype = 7;
var dp = Reflect.construct(child.DOMParser, [], badNewTarget);
assert_equals(Object.getPrototypeOf(dp), DOMParser.prototype);
assert_equals(object_realm(dp), "child window");
}, "Constructor in child window with bad NewTarget from child window that's a bound parent window function");
test(function() {
var badNewTarget = new Proxy(new child.Function(), {});
badNewTarget.prototype = 7;
var dp = Reflect.construct(DOMParser, [], badNewTarget);
assert_equals(Object.getPrototypeOf(dp), child.DOMParser.prototype);
assert_equals(object_realm(dp), "parent window");
}, "Constructor in parent window with bad NewTarget from parent window that's a proxy for a child window function");
test(function() {
var badNewTarget = new child.Proxy(new Function(), {});
badNewTarget.prototype = 7;
var dp = Reflect.construct(child.DOMParser, [], badNewTarget);
assert_equals(Object.getPrototypeOf(dp), DOMParser.prototype);
assert_equals(object_realm(dp), "child window");
}, "Constructor in child window with bad NewTarget from child window that's a proxy for a parent window function");
});
iframe.src = "support/constructors-support.html";
document.body.appendChild(iframe);
});
</script>