04:57
<akaster>
referencing <https://github.com/whatwg/html/issues/9920>; is it the case that all 3 major engines use separate processes for Shared/ServiceWorkers but keep DedicatedWorkers in the same process as the renderer, just in different threads?
04:59
<akaster>
I was hoping to start implementing DedicatedWorkers in Ladybird assuming that any worker type would "always" have its own process (until there's too many processes and we have to start sharing etc etc). Which would mean we can keep covering our ears and pretend that the thread-unsafety of LibWeb/LibJS can wait until 'later' still.
05:01
<akaster>
Per the issue, Domenic: was saying his understanding was that that's not a good idea because of the requirements for SharedArrayBuffers in the ECMAScript spec.
05:03
<Domenic>
referencing <https://github.com/whatwg/html/issues/9920>; is it the case that all 3 major engines use separate processes for Shared/ServiceWorkers but keep DedicatedWorkers in the same process as the renderer, just in different threads?
Correct, I think. At least definitely correct for dedicated workers in same process; not sure if shared and service are process-isolated everywhere.
05:06
<akaster>
Hmm all right.. well, we'll have to handle distinct realms existing in the same process to handle window.open, so handling separate agents (called VM, in our implementation) is probably not going to be too far from that. I'm mostly worried about the places where we still reach out to the "main thread VM" Singleton.. would be nice to always know which agent we're working with though.
05:54
<Domenic>
same-origin window.open, but also same-origin iframes
06:41
<Jake Archibald>
HTML property setters seem inconsistent when it comes to throwing or silently ignoring invalid values. Is either of those seen as the "right way" these days?
07:35
<annevk>
Jake Archibald: methods generally throw, setters generally ignore (and then the getter continues to return the same value); this is somewhat enforced for enums
07:39
<annevk>
I guided someone to follow the "new feature" template a bit more closely and https://github.com/whatwg/dom/issues/1233 is quite understandable now in terms of what it's trying to achieve. Hopefully it continues to work that well.
07:45
<Jake Archibald>
Jake Archibald: methods generally throw, setters generally ignore (and then the getter continues to return the same value); this is somewhat enforced for enums
So things like valueAsDate throwing on, say, a range input, is that breaking convention, or is it correct by some other rule?
07:46
<Jake Archibald>
https://html.spec.whatwg.org/multipage/input.html#dom-input-valueasdate
07:50
<annevk>
Jake Archibald: I think valueAsDate is breaking several conventions; doesn't it return a new object each time you invoke the getter?
07:51
<Jake Archibald>
Ohh that's a good point
07:51
<annevk>
Jake Archibald: having said that, I guess I'm not entirely sure about what the convention is for non-enums, but I wouldn't base precedent on valueAsDate.
08:19
<Domenic>
I'm not sure setters ignoring is really best practice, but I admit not thinking too hard about it...
08:19
<Domenic>
In JS itself there are some cases where setters throw in strict mode and ignore in sloppy mode, IIRC.
08:51
<chargeitall>
Is this anchor meant to serve as a placeholder to describe the grammar and lexical scanner? https://www.w3.org/TR/css-syntax-3/#placement
10:13
<annevk>
Domenic: https://github.com/WICG/observable/issues/71#issuecomment-1804956795 say we had this "new thing", couldn't you refactor EventListener in terms of that?
10:14
<Domenic>
Domenic: https://github.com/WICG/observable/issues/71#issuecomment-1804956795 say we had this "new thing", couldn't you refactor EventListener in terms of that?
Probably, as long as we had the same sort of abstraction layer for turning raw JS functions into this new thing. (Which I am not sure I would otherwise add... although maybe, I dunno.)
10:15
<annevk>
Domenic: well that could also be the overload, provided Web IDL gets support for that
10:16
<annevk>
Domenic: but thanks, that confirms my suspicion that these patterns are in fact identical
10:17
<Domenic>

It's a bit tricky because it seems like the use cases are:

  • Streams: need to grab a property eagerly, need to grab methods to call later
  • Custom elements: needs to be a constructor, need to grab properties eagerly, need to grab its prototype methods to call later
  • EventListener: need to grab a single method eagerly, or convert an incoming JS function into a wrapper around that method. Only one function/method so it's kind of nicer if you don't have to specify the method name.
  • Observable, maybe: need to grab methods to call later, or convert an incoming JS function into a wrapper around one of the specific method.
10:18
<Domenic>
Unifying streams & EventListener & observable-maybe seems doable, with minor tradeoffs in syntax that make one case nicer than others.
10:19
<Domenic>
Custom elements is probably too wacky, although you might want to design both at once and share as much infrastructure & syntax as possible.
10:19
<Domenic>
Oh right, what do worklets need... I think they're the same as custom elements?
10:21
<Domenic>
Yes, or at least PaintWorklet is
10:23
<annevk>
Does kind of have strong "callback interface" vibes
10:25
<Domenic>
I dunno, I think you're forgetting how weird and Java-ey callback interfaces were. E.g. the constants, the legacy callback interface object stuff. They definitely didn't have dictionary-type semantics for properties, which is what we'd want here.
10:25
<Domenic>
I guess I would say "callback dictionary" is what we want, vs. "callback interface"
10:26
<annevk>
True, NodeFilter still exists btw
10:44
<annevk>
akaster: using a process as agent boundary seems interesting, but also quite bad for perf? The idea is that a document and its dedicated workers end up in a single agent cluster. Which can be 1:1 with a process, but even that you might not want to do as you'd get many processes that way too. Existing user agents typically share multiple agent clusters in a single process.
10:45
<annevk>
akaster: also note that you can have multiple realms/globals within a single agent with <iframe> too, not just window.open().
17:07
<akaster>
I think there's many lower hanging fruit for perf than process boundaries in our implementation at the moment. I think the isolation possibilities are a lot more interesting as well. And we don't even support SharedArrayBuffers yet šŸ˜…. From my reading of the JS spec it seems like there's no reason we *couldn't* do it that way, but perhaps some of the total ordering constraints will force us to put all the agents in an agent cluster in one memory space in the future
19:14
<Dominic Farolino>
Dependent/source abort signals are a little confusing to me. https://dom.spec.whatwg.org/#create-a-dependent-abort-signal step 4.2.1 seems to assert that a source signal is itself not dependent. Does this mean that there can not be a chain of dependent signals more than 3 long?
21:39
<TabAtkins>
Is this anchor meant to serve as a placeholder to describe the grammar and lexical scanner? https://www.w3.org/TR/css-syntax-3/#placement
No, those are both defined in CSS 2.1, as the text says. There's no reason to describe them here, particularly as this spec is completely superceding them.
23:01
<sideshowbarker>

TabAtkins: About the test at https://wpt.fyi/results/css/css-animations/animation-canceled-by-parent-details-element-being-closed.html, I havenā€™t managed to to figure out what that test should rightly be checking ā€” rather than checking for a cancel event to fire.

In Chrome that test fails, because when a details element is closed in Chrome, the content of the 2nd slot of that details element just becomes content-visibility: hidden ā€” but the test seems to instead assume that the element is completely removed from the DOM (in which case, I guess the cancel event fires).

But looking at https://drafts.csswg.org/css-animations/ and at https://drafts.csswg.org/css-contain-2/#:~:text=While%20an%20element%20is%20skipped%2C%20CSS%20transitions%20and%20animations%20on%20the%20element%20do%20not%20update, I anyway can find neither any spec support for firing a cancel event for that case, nor can I figure out what other event might supposed to be fired instead ā€” including, I canā€™t find any requirements for what happens to an animation when content-visibility of its containing element changes to hidden.

Iā€™d like to fix the test, but at this point, I have no idea what to make it check for.

23:12
<TabAtkins>
sideshowbarker: Oh sorry, I know you posted this earlier but I didn't get to it immediately and then immediately forgot about it.
23:13
<TabAtkins>
So the test previously was assuming that the contents of details was display:none when it closed, which does indeed cancel animations
23:13
<sideshowbarker>
No worries
23:14
<TabAtkins>
but yeah, assuming details are now specified to use content-visiblity, the animation won't be canceled, it'll just stop updating until it's relevant again
23:18
<sideshowbarker>
OK ā€” I guess thereā€™s no way to check for the the animation is in the ā€œhas stopped updatingā€ state?
23:19
<TabAtkins>
Correct. But you could ensure that the animation should run for a decent amount of time, and then verify you didn't get a cancel shortly after closing the details (implying that it's still active in some state)
23:20
<sideshowbarker>
OK