On 1/9/13 1:23 PM, David Bruant wrote:
I don't think anyone (me including) really took the time to write an
example of how unknownPrivateSymbol works either. Let's do that:

Thank you, that helps a lot.

What happens if unknownPrivateSymbol throws?
I'm not sure yet. My guess is that the error should be propagated

So just to make sure we're on the same page here... Say I have a proxy for a <div> and I put it in the DOM. Say my page has:

  <style>
    section > div { color: green; }
  </style>

Should matching that selector against the div call unknownPrivateSymbol when getting the parent of the div? If so, what should it do if it throws? Note, by the way, that UAs are working on doing off-main-thread selector matching and that the exact timing/ordering of selector matching is not defined and won't be (because it's a state thing, not a procedural algorithm), so doing anything script-observable anywhere here is pretty weird.

On the other hand, selector matching allows one to exfiltrate things like which attributes are set and to what values, as well as information about the ancestors and often descendants of the element.

It would be up to spec writers of each sort of object to decide.

OK.

If the serialization algorithm is represented as a private symbol'ed
methods on objects, then, doing a [[Get]] with this symbol as argument
would call the unknownPrivateSymbol trap. The result of this trap (throw
or return (return value is ignored)) determines whether the algorithm is
actually called.

That wasn't my point. My point was what happens to the tree traversal the serialization algorithm does if the firstChild member (not the getter, the actual internal state that stores the first child) is defined to be a private symbol?

unknownPrivateSymbol is a trap, so I'm not sure I understand your
question.

My question boils down to this: are we talking about introducing things that would be able to modify a DOM tree while it's being iterated by internal browser algorithms? Because doing that is not acceptable.

It sounds like so far the answer is "maybe, depending on how those traversals are defined in the specs".

The trap in itself cannot do anything.

On the contrary, it can do anything any JS function on the page can do.

Best case, it forwards the operation to
the target, worst case, it cancels the operation entirely.

No, worst case it calls document.open() or window.close() or spins the event loop via showModalDialog or any of a number of other interesting things script can do.

The trap in itself can't do anything. The code in it is a function which
can't do anything more than what a function can do today.

That's a _really_ interesting definition of "can't do anything".

Functions today can totally destroy the world (as in, the entire web page they're running in). The only saving grace is that they can only be invoked at particular safe points when you allow the world to be destroyed.

Any proposal that would allow random functions to be invoked in too many cases is dead in the water from a security and performance standpoint.

It can have side-effects, the only important case is whether a public
method call result in 0 or 1+ calls on a given object.

Uh... no.  How can that be the only important case???

What I meant
above (but didn't say) is that whether it's called (0 or 1) is
important, but if it's 1 or 5 times for a given public method call, it
doesn't matter much.

For a function with side-effects this seems blatantly false to me, so I must be missing something. What am I mising?

-Boris
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to