W3C home > Mailing lists > Public > public-webapps@w3.org > January to March 2014

Re: [webcomponents] Encapsulation and defaulting to open vs closed (was in www-style)

From: Elliott Sprehn <esprehn@chromium.org>
Date: Fri, 14 Feb 2014 14:50:30 -0800
Message-ID: <CAO9Q3iJO3VU8H7svKV8dDKAtwt-qOP+0fAk2WpzWsZnY7Fvkwg@mail.gmail.com>
To: Boris Zbarsky <bzbarsky@mit.edu>
Cc: public-webapps <public-webapps@w3.org>
On Fri, Feb 14, 2014 at 2:39 PM, Boris Zbarsky <bzbarsky@mit.edu> wrote:

> On 2/14/14 5:31 PM, Jonas Sicking wrote:
>
>> Also, I think that the Type 2 encapsulation has the same
>> characteristics. If the component author does things perfectly and
>> doesn't depend on any outside code
>>
>
> And never invokes any DOM methods on the nodes in the component's
> anonymous content.  Which is a pretty strong restriction; I'm having a bit
> of trouble thinking of a useful component with this property.
>
>
Indeed.

I think my biggest issue with Type-2 is that unlike the languages cited for
providing "private" it's trying to mimic it provides no backdoor for tools
and frameworks to get at private state and at the same time it doesn't add
any security benefits.

Ruby, Python, Java, C# and almost all other modern languages that provide a
private facility for interfaces (as advocated by the Type-2 design) provide
a backdoor through reflection to get at the variables and methods anyway.
This allowed innovation like AOP, dependency injection, convention based
frameworks and more.

So if we provide Type-2 I'd argue we _must_ provide some kind of escape
hatch to still get into the ShadowRoot from script. I'm fine providing some
kind of "don't let CSS styles enter me" feature, but hiding the shadowRoot
property from the Element makes no sense. We all agree it's not a security
boundary and you can go through great lengths to get into the ShadowRoot if
you really wanted, all we've done by not exposing it is make sure that
users include some crazy jquery-make-shadows-visible.js library so they can
build tools like Google Feedback or use a new framework or polyfill.

So given that we should have ShadowRoot.getPrivateType2Root(element) to
provide a sensible modern api like other languages, is providing the
shadowRoot property on the Element any different?

I think we need to steer this conversation back to CSS's ability to style
the ShadowRoot. There's no reason we can't provide a "no styles can enter
me flag" while still having the shadowRoot property and the node
distribution APIs.

- E
Received on Friday, 14 February 2014 22:51:42 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 18:14:21 UTC