Index: third_party/WebKit/LayoutTests/custom-elements/isolated-worlds.html |
diff --git a/third_party/WebKit/LayoutTests/custom-elements/isolated-worlds.html b/third_party/WebKit/LayoutTests/custom-elements/isolated-worlds.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f7e635ec025e3d9f80ef11e99d0400bde50cbf57 |
--- /dev/null |
+++ b/third_party/WebKit/LayoutTests/custom-elements/isolated-worlds.html |
@@ -0,0 +1,81 @@ |
+<!DOCTYPE html> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharness-helpers.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> |