[heycam/webidl] Does WebIDL define whether or not the interface constructor should be exposed on the global? (#820)

Here is something I observed on modern browsers

Navigator:

```
> window.Navigator
< function Navigator() {
      [native code]
  }
> window.navigator
< Navigator {...}
> window.navigator instanceof window.Navigator
< true
> window.navigator.constructor === window.navigator
< false
> Navigator.prototype === navigator.constructor.prototype
< true
```

Geolocation (Chrome):

```
> navigator.geolocation
< Geolocation {...}
> navigator.geolocation.constructor
< function Geolocation() {
      [native code]
  }
> window.Geolocation
< undefined
```

Geolocation (Safari and Firefox):

```
> navigator.geolocation.constructor
< function Object() {
      [native code]
  }
< navigator.geolocation.constructor === Object
> true
```

There are a few issues here:

1. Constructors are not available on the global (`window`). When I look up the WebIDLs of these interfaces, I don't see there are being defined differently. They are both defined with `[Exposed=Window]` extended attribute. Isn't this what `Exposed` do — to make the constructor available on `window`?
2. In Chrome's case for `navigator`, `<instance>.constructor` seems to point to different version of that, even when `<instance>.constructor.prototype` is pointing to the same object. Is this a bug in the implementation, or something not defined in WebIDL?
3. In Safari & Firefox's case, `Geolocation` constructor is not exposed, and `navigator.geolocation.constructor` simply gives me the `Object` constructor. Is this a bug in the implementation, or something not defined in WebIDL?

Use case:

The `Navigator` and `Geolocation` constructors are bad examples — they are not useful. But for instances of objects that can only be accessed via a callback, for example, `GeolocationCoordinates`, having access to `GeolocationCoordinates.prototype` allow me to look at the available properties without invoke a geolocation request.

Let me know if I should file an issue to browsers or redirect the issue to other spec. Thanks.

-- 
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/820

Received on Friday, 8 November 2019 20:42:00 UTC