Skip to content

Commit

Permalink
Add ElementInternals.shadowRoot which returns both open and closed roots
Browse files Browse the repository at this point in the history
See [1] for context. This CL adds the shadowRoot attribute to ElementInternals,
which allows custom elements to access their own shadow roots, including in
the case that the shadowRoot is closed. Without this capability, custom
elements that use closed declarative shadow roots would have no ability to
retrieve the contents of their own shadow root.

Bug: 1042130

[1] WICG/webcomponents#871 (comment)

Change-Id: I33606144bec3c27600d2e67f108d0344f7696dd2
  • Loading branch information
mfreed7 authored and chromium-wpt-export-bot committed Aug 11, 2020
1 parent 6bf0749 commit 61c3f20
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions shadow-dom/declarative/element-internals-shadowroot.tentative.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>ElementInternals.shadowRoot</title>
<link rel="author" title="Mason Freed" href="mailto:masonfreed@chromium.org">
<link rel="help" href="https://github.com/w3c/webcomponents/issues/871">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>

<script>

test(() => {
let constructed = false;
customElements.define('custom-open', class extends HTMLElement {
constructor() {
super();
const elementInternals = this.attachInternals();
assert_equals(elementInternals.shadowRoot, null);
const shadow = this.attachShadow({mode: 'open'});
assert_equals(elementInternals.shadowRoot, shadow);
constructed = true;
}
});
const element = document.createElement('custom-open');
assert_true(constructed);
}, 'ElementInternals.shadowRoot allows access to open shadow root');

test(() => {
let constructed = false;
customElements.define('custom-closed', class extends HTMLElement {
constructor() {
super();
const elementInternals = this.attachInternals();
assert_equals(elementInternals.shadowRoot, null);
const shadow = this.attachShadow({mode: 'closed'});
assert_equals(elementInternals.shadowRoot, shadow);
assert_equals(this.shadowRoot, null);
constructed = true;
}
});
const element = document.createElement('custom-closed');
assert_true(constructed);
}, 'ElementInternals.shadowRoot allows access to closed shadow root');

</script>

0 comments on commit 61c3f20

Please sign in to comment.