- From: Rik Cabanier <cabanier@gmail.com>
- Date: Fri, 27 Jun 2014 21:35:30 -0700
- To: Domenic Denicola <domenic@domenicdenicola.com>
- Cc: Anne van Kesteren <annevk@annevk.nl>, Dirk Schulze <dschulze@adobe.com>, "public-script-coord@w3.org" <public-script-coord@w3.org>
- Message-ID: <CAGN7qDBsKZJo9r=JLthtFkwJeW6WToWVDuE4u4KSD2GJPHdbrw@mail.gmail.com>
On Fri, Jun 27, 2014 at 6:39 AM, Domenic Denicola < domenic@domenicdenicola.com> wrote: > From: annevankesteren@gmail.com [mailto:annevankesteren@gmail.com] On > Behalf Of Anne van Kesteren > > > The way Domenic explained this the last time around was that certain > constructors would accept an ID of sorts as argument that only the UA would > know about. > > > Given that explanation, I don't see the problem throwing for these > constructors, just like we throw for > > >> new Navigator > >> new Window > > To be clear, here is the code you would have to write to explain this in > JavaScript: > > ```js > var unguessableSecret = generateSecret(); > > class DOMRectReadOnly { > constructor(x, y, width, height, secret) { > if (secret !== unguessableSecret) { > throw new TypeError("Only UAs can construct DOMRectReadOnlys!"); > } > .... > } > > get x() { ... } > ... > } > ``` > But this is just silly in the case of DOMRectReadOnly and friends. There > is no magic data, like a browser-internal representation of a window or > navigator, or of a crypto algorithm (see > https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#dfn-CryptoKey-slot-handle), > which cannot be used by a user. You are instead just artificially limiting > users for no good reason, by not giving them the unguessable secret. > The ReadOnly interface names should not be exposed to the user. I think this is a oversight in the spec and we should put [NoInterfaceObject] on them. Instead, the conceptual model is that method that returns a readonly object does the following: function getMatrix() { var retval = { m11: 5, m12: 6, .... }; Object,DefineAttribute(retval, "a", function() { retval.m11;}). retval.translate = function(...){...}; ... return retval; } FWIW Cameron told me that an author could create these readonly objects without having the instantiate a full mutable object. If there's a DOM method that takes a DOMPointReadOnly, he could write: Translate({x: 2, y: 5, z:0, w:1}); Maybe he can fill in how that works. This has no benefits, since it does not enable implementations to do > anything special with e.g. object layout or tying it to special object > pointers. It has only downsides. > > From: Dirk Schulze [mailto:dschulze@adobe.com] > > > My concern is that we expose functionality that might not be used by > authors (creating a readonly object that even the creator can not modify). > > Why is the DOM creating a readonly object that even the DOM cannot modify? > Or is the DOM somehow able to modify these objects? The ReadOnly object are indeed designed to be live. For instance, you can hold on to the matrix of an SVG element [1] and look at its changes. SVG had big problem with return live, *modifiable* objects and we want to avoid repeating that mistake. > I notice that despite there being no setter for x, y, width, and height, > the spec says things like > > "The x attribute, on setting, must set the x coordinate to the new value." > > Since you can't set a readonly attribute, this is just a bug in the spec > as it stands. > Can you point to where in the spec that is stated? I can only find the setter language for DOMPoint which is not read-only. > The question is whether the intention was to allow the DOM to modify the > object, in which case they would do so via mutable internal slots that the > x, y, width, and height public getters return the value of, or whether the > intention was for these objects to be immutable after creation. (Again, for > an excellent example of this, see WebCrypto, e.g. > https://dvcs.w3.org/hg/webcrypto-api/raw-file/tip/spec/Overview.html#cryptokey-interface-members > where the getters are specified.) > I don't see the language in that spec to be all that different. Do you prefer that we use "reflect" instead of "correspond"? 1: http://www.w3.org/TR/SVG/coords.html#__svg__SVGTransform__matrix
Received on Saturday, 28 June 2014 04:35:58 UTC