Re: [css-houdini-drafts] [worklets] First pass of fixing import for worklets.

(Sorry for cluttering up your pull request, @bfgeek!)

> I think our general rule as stated is probably wrong. 

Hmm. I don't really agree, because I think the idea of objects having 
realms is a bit unnatural. As a developer I think if anything I'd 
expect the object's realm to that detected via its `__proto__` chain 
(i.e., which `Object.prototype` does it bottom out in). But that's not
 what relevant realm is; relevant realm is immutable over time. In 
contrast, it makes sense to me to think of "what is the realm in which
 the code that's running was 'declared'", i.e. it makes sense for 
functions to have realms.

In other words, putting on my naive developer hat, I'd conceptualize 
`import` to be written as something like

```js
Worklet.prototype.import = function (url) {
  const resolvedURL = new URL(url, location.href).href;  // (1)
  // ...
  fetch(resolvedURL, ...).then(...); // (2)
}
```

Here at both (1) and (2) I am implicitly using "current". I'd have no 
way to get "relevant" from JS code; it's fairly unnatural to think of 
doing so.

> In this particular case, it seems to me that relative URL resolution
 for a worklet would naturally be a property of the worklet itself, 
not of the function you happened to call to trigger the load.

In contrast, to me it seems that the function that I happened to call 
to trigger the load is the one doing URL resolution, so it should be a
 property of the function, since that's what's actually executing the 
load.

> Or put another way, if you import two things into the same worklet 
but using import methods from different globals for whatever reason 
(probably because your libraries are doing something bizarre), would 
you expect different base URLs to be used or the same base URL?

When you make it concrete like this, I can't say I have any particular
 expectations. Both seem equally weird to me. You'd be forcing me as a
 developer to confront the question of "what does a relative URL 
really mean in a multi-global context," and I don't have a good 
intuitive answer. I can only fall back to more principled arguments 
like the above.

---

That said, I'm OK changing our position here. If you find my above 
arguments unpersuasive, then I'd like to get the resulting advice 
written up into HTML's multi-globals section. I can't tell if you're 
advocating for a more general "relevant by default, current when 
nothing else makes sense" position, or specifically for saying that 
URL resolution should use a relevant object.

(We should probably also include a note that in constructors, relevant
 = current.)

-- 
GitHub Notification of comment by domenic
Please view or discuss this issue at 
https://github.com/w3c/css-houdini-drafts/pull/251#issuecomment-229458719
 using your GitHub account

Received on Wednesday, 29 June 2016 19:14:11 UTC