Re: [heycam/webidl] Consider removing call to named property setter in legacy platform object [[Set]] (#630)

I confused myself again; it looks like WebKit is following the spec in all cases I tested. Results:

| Test | Spec | Gecko | Chrome | WebKit |
|-|-|-|-|-|
| no \[OB], *O* = *Receiver* | named setter | proto.\[[Set]]() | proto.\[[Set]]() | named setter |
| no \[OB], *O* ≠ *Receiver* | proto.\[[Set]]() | proto.\[[Set]]() | proto.\[[Set]]() | proto.\[[Set]]() |
| \[OB], *O* = *Receiver* | named setter | named setter | named setter | named setter |
| \[OB], *O* ≠ *Receiver* | proto.\[[Set]]() | named setter | proto.\[[Set]]() | proto.\[[Set]]() |

<details>
<summary>Tests</summary>

# no \[OB], *O* = *Receiver*
```html
<!DOCTYPE html>
<script>
sessionStorage.clear()
var a = new Proxy(Object.getPrototypeOf(sessionStorage), {
  set(...args) { w(args); return false; },
});
Object.setPrototypeOf(sessionStorage, a);
sessionStorage.x = "foo";
w(sessionStorage.x)
</script>
```

```
C
log: object "[object Storage],x,foo,[object Storage]" (4 props: 0="[object Storage]", 1="x", 2="foo", 3="[object Storage]")
log: undefined
G
log: object "[object StoragePrototype],x,foo,[object Storage]" (4 props: 0="[object StoragePrototype]", 1="x", 2="foo", 3="[object Storage]")
log: undefined
W
log: foo
```

# no \[OB], *O* ≠ *Receiver*
```html
<!DOCTYPE html>
<script>
sessionStorage.clear()
var a = new Proxy(Object.getPrototypeOf(sessionStorage), {
  set(...args) { w(args); return false; },
});
Object.setPrototypeOf(sessionStorage, a);
Object.create(sessionStorage).x = "foo";
w(sessionStorage.x)
</script>
```

```
C
log: object "[object Storage],x,foo,[object Storage]" (4 props: 0="[object Storage]", 1="x", 2="foo", 3="[object Storage]")
log: undefined

G
log: object "[object StoragePrototype],x,foo,[object Object]" (4 props: 0="[object StoragePrototype]", 1="x", 2="foo", 3="[object Object]")
log: undefined

W
log: object "[object Object],x,foo,[object Object]" (4 props: 0="[object Object]", 1="x", 2="foo", 3="[object Object]")
log: undefined
```

# \[OB], *O* = *Receiver*
```html
<!DOCTYPE html>
<script>
var ds = document.documentElement.dataset;
var a = new Proxy(Object.getPrototypeOf(ds), {
  set(...args) { w(args); return false; },
});
Object.setPrototypeOf(ds, a);
ds.x = "foo";
w(ds.x)
</script>
```

```
C
log: foo

G
log: foo

W
log: foo
```

# \[OB], *O* ≠ *Receiver*
```html
<!DOCTYPE html>
<script>
var ds = document.documentElement.dataset;
var a = new Proxy(Object.getPrototypeOf(ds), {
  set(...args) { w(args); return false; },
});
Object.setPrototypeOf(ds, a);
Object.create(ds).x = "foo";
w(ds.x)
</script>
```

```
C
log: object "[object DOMStringMap],x,foo,[object DOMStringMap]" (4 props: 0="[object DOMStringMap]", 1="x", 2="foo", 3="[object DOMStringMap]")
log: undefined

G
log: foo

W
log: object "[object DOMStringMapPrototype],x,foo,[object Object]" (4 props: 0="[object DOMStringMapPrototype]", 1="x", 2="foo", 3="[object Object]")
log: undefined
```

</details>

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/heycam/webidl/issues/630#issuecomment-458913289

Received on Wednesday, 30 January 2019 11:38:22 UTC