<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="spec/resources/custom-elements-helpers.js"></script>
<body>
<script>
'use strict';
(() => {
if (!window.testRunner) {
// Requires evaluateScriptInIsolatedWorld
return;
}
promise_test((t) => {
return create_window_in_test(t)
.then((w) => {
function in_isolated_world() {
let f = document.querySelector('iframe');
let w = f.contentWindow;
let e = w.document.body.lastChild;
w.postMessage(
e.localName == 'a-a' &&
Object.getPrototypeOf(e) === w.HTMLElement.prototype,
'*');
}
var p = new Promise((resolve) => {
w.addEventListener('message', t.step_func((event) => {
assert_true(event.data,
'the custom element prototype should not appear in ' +
'isolated worlds');
resolve();
}));
});
class X extends w.HTMLElement {}
w.customElements.define('a-a', X);
w.document.body.appendChild(new X);
testRunner.evaluateScriptInIsolatedWorld(
1,
`(${in_isolated_world.toString()})();`);
return p;
});
}, 'Retrieve a custom element in an isolated world');
// TODO(dominicc): Test retrieving a custom element that has not been wrapped
// before in any world, when upgrades are implemented.
promise_test((t) => {
return create_window_in_test(t)
.then((w) => {
function in_isolated_world() {
let f = document.querySelector('iframe');
let w = f.contentWindow;
w.postMessage(`customElements=${w.customElements}`, '*');
}
var p = new Promise((resolve) => {
w.addEventListener('message', t.step_func((event) => {
assert_equals(event.data,
'customElements=null',
'the customElements property should be null ' +
'in isolated worlds');
resolve();
}));
});
testRunner.evaluateScriptInIsolatedWorld(
1,
`(${in_isolated_world.toString()})();`);
return p;
});
}, 'No custom elements registry in isolated worlds');
})();
</script>