2025-03-01 [02:18:09.0452] i wish there was one thing. favicons optional and not required, not asked by browsers unless site said so via manifest or . i really wish… (specially as a person testing on localhost in folders and subfolders…) 2025-03-02 [14:47:31.0873] Hmm, I don't think https://html.spec.whatwg.org/multipage/webappapis.html#await-a-stable-state works. Queuing microtasks from outside the main event loop doesn't make sense, and as far as I see, that 'await a stable state' may hang forever, since nothing guarantees the microtask is run. 2025-03-03 [20:23:46.0000] Anybody know of tests anywhere for “valid email address” as defined at https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address ? [23:17:37.0622] smaug: yeah I think I filed an issue on that. [23:18:32.0187] sideshowbarker: not sure, there's an issue on changing its definition to account for EAI [23:18:45.0608] * smaug: yeah I think I filed an issue on that [23:19:56.0445] * smaug: https://github.com/whatwg/html/issues/2882 [05:11:49.0724] Hi, I'm working on a possible proposal to improve window.print I only see a reference about the dialog and the print media. Where should I start this discussion? TIA [05:32:19.0686] Dan Howard: I might search through whatwg/html issues on GitHub first to see if anything has already been proposed. But failing that there would be a good place. [05:32:40.0290] (Though I would not expect there to be too much implementer interest in improving that API per se.) [05:59:54.0507] thanks [07:29:20.0788] smaug: sefeng: does https://github.com/whatwg/dom/pull/1342#discussion_r1973386577 match how Gecko feels about `getSelection()` or are you okay with it exposing the shadow tree when the end user selects shadow tree content? [07:55:18.0515] smaug: sefeng: see also https://github.com/whatwg/dom/issues/1362 [10:57:34.0766] Exposing shadow tree is not ok. 2025-03-04 [17:38:59.0156] I don't have a lot of hope that doing so would result in new resources magically being discovered. [18:22:34.0181] For those who are unfamiliar, NativeScript has added a spec-compliant URLPattern implementation to both of their iOS and Android runtimes - https://github.com/NativeScript/ios/pull/268 [23:34:58.0795] Domenic: could I ask you to get someone familiar with URLPattern to comment on https://github.com/w3c/IFT/issues/259? Perhaps the URLPattern specification should have some examples as how to address URI template use cases? [23:41:54.0646] I’m looking at the test case at https://github.com/web-platform-tests/wpt/blob/3c11c5bae7639991e1a300ad841dd53f571eecf3/html/semantics/forms/constraints/form-validation-checkValidity.html#L96 and trying to determine figure out how the expectation of false aligns with the actual spec requirements. That test case just creates this: ```html ``` [23:42:32.0325] So I guess the intent of that test case is, the value shouldn’t be allowed to have a `:00` seconds part. [23:43:59.0016] But determining whether it’s allowed or not involves running the algorithm at https://html.spec.whatwg.org/multipage/input.html#concept-input-min-zero — the second step of which is: > If the element has a value content attribute, and the result of applying the algorithm to convert a string to a number to the value of the value content attribute is not an error, then return that result. [23:44:40.0444] So the ”step base” is the same as the value. [23:46:03.0332] So then I look at https://html.spec.whatwg.org/multipage/input.html#the-step-attribute%3Asuffering-from-a-step-mismatch, and that says: > When the element has an allowed value step, and the result of applying the algorithm to convert a string to a number to the string given by the element's value is a number, and that number subtracted from the step base is not an integral multiple of the allowed value step, the element is suffering from a step mismatch [23:48:49.0506] “step base” - value = 0 (since “step base” is the same as the value) [23:49:47.0588] …and “allowed value step” is 2 * 60 * 1000 [00:03:15.0010] I’m wondering if the intended requirement is instead to just use the value as-is — that is, not subtract it from “step base” [00:04:27.0110] So, 12:03:00 is the number 43380000 — and 43380000 is not an integral multiple of 120000 (2 * 60 * 1000) [00:05:37.0535] Or maybe I’m just misreading the spec requirement — and the spec isn’t saying to do `“step base” - value` [00:11:57.0689] Or else at https://html.spec.whatwg.org/multipage/input.html#concept-input-min-zero, the 2nd step of that algorithm should just be removed — and then it would always return 0 unless there’s a `min` value or a “default step base“ defined (which is only the case for type=week) [00:12:16.0466] Doesn't it create ``? [00:12:43.0110] Yes [00:13:04.0406] All browsers appear to consider that valid. Maybe the test is wrong? [00:13:37.0733] Well, all of WebKit/Gecko/Blink pass that test [00:13:41.0080] I don't really like the way the `input` element is organized in the specification, but I also never attempted a different approach. [00:13:55.0997] Yeah I really don’t like it either [00:14:22.0661] But I also don’t have any great suggestions for how else to organize it [00:15:00.0746] It's weird that they all pass. Because `:invalid` doesn't match in any of them. [00:15:01.0900] https://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%3Cstyle%3E%0A%3Ainvalid%20%7B%20background%3Ared%20%7D%0A%3C%2Fstyle%3E%0A...%3Cinput%20type%3Dtime%20value%3D%2212%3A03%3A00%22%20step%3D%22120000%22%3E [00:16:18.0731] hmm, I hopes this is not one of those cases where existing engines just implemented whatever would get them passing the tests [00:16:42.0091] the constraint-validation tests are not super-great tests anyway [00:17:03.0049] the coverage is extremely minimal [00:18:31.0995] But I’m also not super enthusiastic about being the person who has to add more test coverage for all this stuff [00:19:46.0914] I think for my implementation I’m going to go ahead and drop step 2 of https://html.spec.whatwg.org/multipage/input.html#concept-input-min-zero from the implementation — with a comment saying why [00:24:25.0113] Because, If I do that that, the tests pass. And also, I can’t actually make sense of that step. I mean, it seems to me that step is _always_ going to end up returning the same thing as the `value` attribute value. And that doesn’t logically seem like the “step base” for the element should always be same as the value of the `value` attribute. Instead the “step base” should just be either `min` or a “default step base“ or else just zero. That is, it’s a floor against which the value is evaluated. [00:24:47.0214] * Because, If I do that that, the tests pass. And also, I can’t actually make sense of that step. I mean, it seems to me that step is _always_ going to end up returning the same thing as the `value` attribute value. And it doesn’t logically seem like the “step base” for the element should always be same as the value of the `value` attribute. Instead the “step base” should just be either `min` or a “default step base“ or else just zero. That is, it’s a floor against which the value is evaluated. [00:25:21.0877] * Because, If I do that that, the tests pass. And also, I can’t actually make sense of that step. I mean, it seems to me that step is _always_ going to end up returning the same thing as the `value` attribute value. And it doesn’t logically seem like the “step base” for the element should always be same as the value of the `value` attribute (in the absence of a `min` or “default step base“ ). Instead the “step base” should just be either `min` or a “default step base“ or else just zero. That is, it’s a floor against which the value is evaluated. [00:30:53.0767] I think this is https://github.com/whatwg/urlpattern/issues/73 , right? It's indeed not something that's possible right now, but with some extra spec and implementation work, it could be. [00:37:21.0612] Ah, I think you're right. Thanks. [01:14:46.0731] Even if I set `value=foo` there instead, that `:invalid { background:red }` doesn’t see to do anything [01:15:01.0378] Even if I set value=foo there instead, that :invalid { background:red } doesn’t see to do anything [01:16:59.0437] sideshowbarker: oh maybe it only starts applying once there's user modifications? It's kinda weird as `valid` does apply. [01:17:06.0768] * sideshowbarker: oh maybe it only starts applying once there's user modifications? It's kinda weird as `:valid` does apply. [01:18:06.0509] Yeah I don’t know. I rightly should understand the details of this API better before trying to implement it 😆 [01:19:51.0956] but yeah `:invalid` does seem to only work after user modification [01:19:55.0594] Hmm no, `:invalid` does not depend on end user input. Figuring this out properly would require quite a bit of time I want to spend on other things at the moment. [01:20:15.0641] * Hmm no, `:invalid` does not depend on end user input (per spec). Figuring this out properly would require quite a bit of time I want to spend on other things at the moment. [01:20:15.0835] yeah, no worries [01:20:39.0247] for now, I’ll just raise an issue about the “step base” thing [03:11:29.0736] Raised https://github.com/whatwg/html/issues/11097 2025-03-05 [06:46:59.0381] annevk smaug Are we still thinking of landing https://github.com/whatwg/dom/pull/1307 this week? [07:24:42.0842] Dominic Farolino: unclear, depends on smaug's availability and then on yours and mine if there's further feedback. He rightfully pointed out that due to the long iteration time review will take longer. [07:24:53.0164] I'll try to review it asap [07:26:13.0233] (which might be tomorrow) [09:54:59.0705] am I correct in thinking that it's weird https://w3c.github.io/resource-timing/#sec-extensions-performance-interface says "Each ECMAScript global environment has ..." followed by a bunch of buffer and integer properties? It links to https://webidl.spec.whatwg.org/#es-environment , which ... is not where I would expect anyone to be defining properties. I would expect them to be defined as belonging to an HTML Envrionment Settings Object, or a 'WindowOrWorkerGlobalScope' (or the new intermediary added by ShadowRealms). Or belonging to an Agent or Agent Cluster. Saying that the properties belong to "the ES environment" seems pretty vague [10:53:22.0842] Yea these are deprecated things that were shipped long ago so they're still in the spec [10:54:00.0996] I did a lot of work to clean up resource timing ~4 years ago and there's still lots of work left :) 2025-03-06 [04:23:10.0926] gotcha. I opened for this one. Luke opened two more issues he found in Ladybird's initial implementation over in the fetch repo as well. [05:07:02.0389] ntim: should there be a pseudo-element for ``? If we add `eyedropper` to it, we'd want a different icon in the button and allow customization [05:47:59.0817] zcorpan: shouldn't it be added at that point? [05:54:27.0117] annevk: I thought people may want to customize the inner content also for a regular `` [06:27:02.0026] I wonder if there is some addon which clicks "Load more..." as long as there is one in a github pr/issue [06:28:03.0086] Maybe I should try to use some AI tool to generate such addon [06:33:16.0639] I would be a user for sure [07:12:19.0485] zcorpan: I guess, but you already have `::before` and `::after` to play with and possibly more. Seems reasonable to discuss in an issue though, especially if there's some precedent in a UA style sheet. (I don't think there is in ours in this case.) [07:14:17.0103] Last time this was discussed Mike pointed out https://github.com/dlvhdr/gh-dash though looking at it now that's more of a CLI thing. [07:23:15.0468] Yeah, that thing is “TUI” (terminal UI — like a GUI but in the terminal) [07:24:02.0205] But if you’re OK with using the shell/CLI to do stuff, you don’t even need that [07:24:18.0967] You can instead just use the GitHub CLI [07:24:24.0374] `gh pr view` [07:24:48.0391] Example: ``` gh pr view --comments https://github.com/whatwg/dom/pull/1307 ``` [07:25:05.0153] * Example: ``` gh pr view --comments \ https://github.com/whatwg/dom/pull/1307 ``` [07:25:27.0085] That’ll show you all the comments — without you needing to expand anything [07:26:15.0683] @annevk yeah, I can file an issue. It seems ::before and ::after work in webkit and chromium, but not gecko. `input[type=color] { content: url(image) }` replaces the color well in webkit and chromium, does nothing in gecko. [07:26:16.0315] And also note that it _just_ shows the comments — minus all the other intervening noise that GitHub dumps into PR/issue discussions [07:27:02.0376] I mean minus the dozens of things like this: > chromium-wpt-export-bot mentioned this pull request on Dec 10, 2024 [07:27:45.0754] zcorpan: well you'd have to appearance:base first, right? [07:28:10.0862] There is also the replaced element concern for appearance:auto, but that seems like a separate topic. [07:28:32.0496] Hmm yeah [07:29:07.0931] For the web UI, even if you did have some addon that would click _“Load more…”_ for you, the web UI would still be showing you all that noise [07:29:25.0492] …you’d need another addon to filter out all the noise [07:30:36.0070] But the gh cli just omits all the stuff to begin with, and all the comments at one. You just page through it `less` or whatever you have as your pager in your shell [07:31:09.0035] Anyway, I recommend trying that `gh pr view` thing at least [15:19:00.0051] mfreed: still trying to find _when_ the focus fixup happens [15:19:37.0620] around rendering looks like [15:19:46.0933] isn't that broken? [15:20:43.0265] key events may come in between something becoming inert and rendering steps [15:52:50.0853] IIRC we moved to that model because we didn't want sync moving of focus. Chrome used to do sync moving of focus but no other browser did. [15:53:43.0658] https://github.com/whatwg/html/pull/8392 https://github.com/whatwg/html/issues/3847 https://github.com/whatwg/html/issues/8225 [15:54:18.0293] The current model is basically a request from Emilio 2025-03-07 [19:46:44.0710] so I used swift fiddle to transfer money from these Sha string to my bank account and I did over a hundred different string on 4 transfer code on fiddle Saturday evening and still no deposits yet [01:05:25.0695] Noam Rosenthal: did you see the latest `moveBefore()` comment against the HTML PR? I think it can be dismissed, but I'd like you or Dominic Farolino to do it. [01:09:19.0791] > <@domenicdenicola:matrix.org> IIRC we moved to that model because we didn't want sync moving of focus. Chrome used to do sync moving of focus but no other browser did. Chrome used to do sync moving in some cases, and async in others (off a timer) fwiw :) [01:11:42.0623] > <@smaug:mozilla.org> key events may come in between something becoming inert and rendering steps Yes, but rendering generally changes focusability as well (via display / visibility / etc), so seems nicer just doing the fixup once than doing it sync on DOM changes and async on style changes (specially since you'd need to do a style update when e.g. you add or remove the inert / tabindex / etc attributes) [01:12:08.0704] I guess only in some cases, but still [02:38:16.0021] I'll take a look, thanks! [03:45:22.0528] Noam Rosenthal: it also seems there's one comment still open on filing a follow-up issue and one formatting concern. I might have time later today, but maybe it's best to merge it all next week at this point. [05:03:40.0532] I responded to the former, will defer to Dominic Farolino for the formatting thing. [05:26:08.0571] > <@zcorpan:mozilla.org> ntim: should there be a pseudo-element for ``? If we add `eyedropper` to it, we'd want a different icon in the button and allow customization Fyi I've added a `::color-swatch` pseudo element to that draft. All the browsers have one so we should implement it for base. Makes the implementation in browsers less magic too. [05:36:30.0497] Luke Warlow: if you want macOS-style appearance I think you need an additional (child) box, assuming you care about ``. It's possible it all could be achieved through `::before` and `::after` though. Also not entirely sure I would count this yet as removing magic, maybe a tiny bit. [05:37:16.0122] And it might not actually remove magic if we decide that `appearance: auto` has to be behave as a replaced element without addressable inner parts. [05:37:20.0234] I managed to get something working with linear gradients that I think achieves the WebKit alpha appearance. [05:37:25.0373] Which I think emilio has argued for. [05:38:31.0829] Luke Warlow: oh, that might be a good replacement for my clipping thing if it works well. Would create less layers. [05:38:52.0098] Regarding magic I more meant that base appearance could be defined entirely through UA stylesheet targeting the element and it's pseudo. No need for anything extra. But yeah there's more work needed to be fully free of magic. [05:39:31.0313] I thought gradients wouldn't work due to arbitrary resizing. But I didn't play with them. [05:40:09.0652] https://github.com/w3c/csswg-drafts/issues/11837#issuecomment-2705108403 This was what I prototyped in a custom element and it seems to work but it's possible I've just scratched the surface and it doesn't actually replicate everything. [05:42:21.0457] Nice, that might well work. [05:48:00.0044] > <@annevk:matrix.org> And it might not actually remove magic if we decide that `appearance: auto` has to be behave as a replaced element without addressable inner parts. Fwiw the inner parts are already addressable in all engines. Just via prefixed pseudos. I didn't think they were web exposed either but they are. Idk if that changes things at all. [05:51:28.0222] Yeah I know. How `appearance: auto` gets standardized very much remains to be seen. [05:52:44.0913] Noam Rosenthal: I don't see your response to https://github.com/whatwg/html/pull/10657#pullrequestreview-2515171306? [05:53:07.0172] I guess I can do it. [06:09:57.0620] Hmm, there's also no PR to rename the tests away from tentative. I'm going to leave that for someone else as hopefully it's just a rename, but Dominic Farolino and Noam Rosenthal please remember that for next time. If you want something to land it really helps if the entire checklist is actually done. [06:18:15.0011] What is the formatting thing? Was it https://github.com/whatwg/html/pull/10657#pullrequestreview-2513609939? [06:19:06.0642] That had been addressed a while ago but I just marked it resolved now. I can't find any other formatting comments though annevk [06:42:33.0463] Thanks for merging annevk. CL to move tests out of /tentative is up for review.. [07:23:38.0635] Dominic Farolino: formatting was https://github.com/whatwg/html/pull/10657/commits/39b3664e9e0ee00dbc3ebf4446b52d8734a5eda3 [07:24:02.0651] (You might want to review that since nobody else has...) [08:09:48.0215] annevk: The `
` wrapping you did conflicts with wrapping guidance I've heard from Domenic about not wrapping specifically those elements (out of stylistic preference IIRC). I don't have strong opinions, but the wrapper tool follows that guidance (keeping `
` content on one line). [08:35:29.0082] I think that's likely the case for `
` `
`s, but not all. [08:36:07.0421] Anyway, good to know that case isn't covered by tooling. [15:22:33.0842] Also for dl class=props at least, so I think I generalized the advice 2025-03-10 [10:11:25.0040] If we manage to get rid of Mutation Events this year, I wonder what next. XSLT would be a nice candidate, hopefully wouldn't take quite as long as with MutationEvents (13 years). 2025-03-11 [17:25:46.0141] It's somewhat frustrating how rather fundamental bugs in URLPattern don't seem to get attention. [17:26:15.0716] E.g., https://github.com/whatwg/urlpattern/issues/252 [17:27:05.0111] The idea was that the polyfill was somehow fully compliant and therefore this was not a thing to worry about, but it seems like it absolutely was a thing to worry about cause now the specification is a mess and the tests are a mess too. [18:00:29.0741] should https://html.spec.whatwg.org/#willful-violation instead point to https://infra.spec.whatwg.org/#willful-violation ? [18:23:27.0609] Yeah, we can probably remove that section in favor of the Infra section. Want to PR? [18:30:55.0289] can try in a bit, sure :) 2025-03-12 [18:12:42.0686] Hmm, the `location.hostname` setter is still kinda bogus. E.g., set it to `^` and it throws in most implementations. But what argues for that? [18:13:15.0788] (I'm still trying to unravel `URLPattern` nonsense. But turns out there's non-`URLPattern` nonsense too.) [19:20:39.0377] Is it supposed to be legal to reject and resolve promises while "in parallel"? Or should spec authors wrap those in "queue a task on the such and such task source given such and such global object to resolve/reject `promise` with XYZ" [19:23:41.0665] Oh I asked this and then realized that the latest WebCrypto spec has a "when we say throw, we mean queue a task to resolve the promise with" in the latest draft and our implementation is wrong 😅 [19:27:50.0396] but then there's this from `extract a body` in Fetch https://fetch.spec.whatwg.org/#concept-bodyinit-extract, that says to create a Uint8Array while "in parallel", which seems unfortunate. I thought that "in parallel" was supposed to only operate on realm-independent WebIDL objects. > 12. If action is non-null, then run these steps in parallel: > 1. Run action. > 2. Whenever one or more bytes are available and stream is not errored, enqueue the result of creating a Uint8Array from the available bytes into stream. > 3. When running action is done, close stream. [19:28:12.0457] * but then there's this from `extract a body` in Fetch https://fetch.spec.whatwg.org/#concept-bodyinit-extract, that says to create a Uint8Array while "in parallel", which seems unfortunate. I thought that "in parallel" was supposed to only operate on realm-independent WebIDL objects. > 12. If action is non-null, then run these steps in parallel: > 1. Run action. > 2. Whenever one or more bytes are available and stream is not errored, enqueue the result of creating a Uint8Array from the available bytes into stream. > 3. When running action is done, close stream. [19:30:14.0612] > The next complication is that, in algorithm sections that are in parallel, you must not create or manipulate objects associated to a specific realm, global, or environment settings object. (Stated in more familiar terms, you must not directly access main-thread artifacts from a background thread.) Doing so would create data races observable to JavaScript code, since after all, your algorithm steps are running in parallel to the JavaScript code. https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-for-spec-authors [19:30:27.0055] * > The next complication is that, in algorithm sections that are in parallel, you must not create or manipulate objects associated to a specific realm, global, or environment settings object. (Stated in more familiar terms, you must not directly access main-thread artifacts from a background thread.) Doing so would create data races observable to JavaScript code, since after all, your algorithm steps are running in parallel to the JavaScript code. https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-for-spec-authors [19:39:14.0897] relatedly, I wrote up some thoughts about interacting with the HTML event loop from concurrent Swift code here today, if anyone in this forum is interested. https://forums.swift.org/t/ladybird-browser-event-loop-integration-with-swift-concurrency/78453 [20:00:33.0626] akaster: you may enjoy my recent braindump in this space. https://github.com/w3c/ServiceWorker/pull/1755#issuecomment-2661941708 [20:04:15.0499] I pinged Shunya internally. Unfortunately we lost Jeremy to a reorg... [20:04:43.0433] Oh that is interesting yeah. It's definitely the case for me that when I was reading through the Service worker spec a few months ago it was difficult to wrap my head around what spec objects were supposed to be "agent global" vs "event loop" vs "browser process/user agent global" [20:05:12.0363] And the spec at the time seemed to mix subobjects with different lifetimes in the same spec object. [23:56:16.0569] Layout-computation question: Given the following: ```html
Non-standard
``` …The containing block for the layout node for that `span` should be the `abbr` block, right? And if the `a` block is ending up as the containing block for that `span`, that’s just wrong? [00:17:36.0493] https://drafts.csswg.org/css-position-3/#def-cb > If the box has position: absolute: > The containing block is established by the nearest ancestor box that establishes an absolute positioning containing block [...} > > Note: Properties that can cause a box to establish an absolute positioning containing block include position, transform, will-change, contain… [00:18:13.0789] The spec doesn't say `display: inline-block` can make an abspos containing block [00:27:11.0464] annevk: let me know if you have any thoughts on https://github.com/httpwg/http-extensions/issues/2907 . I'll probably default to Martin's preference absent other thoughts. [05:58:48.0079] Domenic: I guess I would try to get away with it as it would seem annoying to adopt a different editorial style for the IETF, but it also doesn't matter too much. [10:11:12.0200] No, `inline-block` isn't one of the properties/values that magically creates a CB, so the CB will be generated by the `a` ancestor instead. [16:48:32.0670] Yagiz Nizipli: can you explain why "`https://{sub.}?example{.com/}foo`" as input would throw? I think I end up with a host of `{sub}`. [16:51:43.0615] * Yagiz Nizipli: can you explain why "`https://{sub.}?example{.com/}foo`" as input would throw? I think I end up with a host of `{sub.}`. [16:54:25.0135] I’m not sure. This is the only failing test on Node.js and Cloudflare Workers. I think this test is invalid. [16:54:52.0639] I see. I think so too. [16:55:39.0705] I don't think this fully resolves my concerns as to get here I do have a version of canonicalize a hostname that considers `:test` failure rather than just ignored input. 2025-03-13 [10:15:21.0628] dizhang168: actually, does anything in the current selection spec reveal shadow DOM stuff? [10:15:50.0414] (implementations do something very different) [13:23:48.0487] keithamus: is marking https://github.com/whatwg/url/issues/864 as invalid problematic for the anti-spam efforts? [13:24:35.0520] No, it’s one of many signals, alone it does not warrant something to be spam. 2025-03-15 [04:31:47.0625] dbaron: (or others who might know) In https://html.spec.whatwg.org/multipage/rendering.html#the-details-and-summary-elements the slot for the details content is specced to have an inline style attribute, is there an observable difference between this and just using ::details-content to set these styles in the UA stylesheet? If not should we update the spec to do that as it's simpler? [05:34:03.0418] Luke Warlow: I don't think there should be an observable difference, I think that predates the `::details-content` pseudo, and before that there was no way of selecting the first vs. the second slot without implementation details 2025-03-16 [00:08:23.0452] Hey all, I am new to this project and excited to contribute! Could someone guide me on which areas need contributions as an open-source contributor? I just joined this chat on Matrix. Looking forward to collaborating! [04:28:35.0313] Check out https://participate.whatwg.org/ Re which areas need contributions, note the para about "good first issue". [04:28:47.0815] * Check out https://participate.whatwg.org/ . Re which areas need contributions, note the para about "good first issue". [04:29:24.0968] * Check out https://participate.whatwg.org/ , in particular the para about "good first issue". 2025-03-17 [05:17:29.0352] While implementing the Fullscreen API for Ladybird I came across an issue with the fullscreen spec with respect to how it says to run "find the topmost popover ancestor" algorithm: https://fullscreen.spec.whatwg.org/#fullscreen-an-element It says: `Let hideUntil be the result of running topmost popover ancestor given element, null, and false.` but when looking at the algorithm, it is described as "using 4 parameters" so to speak: ```` To find the topmost popover ancestor, given a Node newPopoverOrTopLayerElement (1), a list popoverList(2), an HTML(3) element or null invoker(3), and a boolean isPopover(4), perform the following steps. They return an HTML element or null. ``` Is `popoverList` an implicit argument to the algorithm and if so, where is that documented? [05:18:17.0233] * While implementing the Fullscreen API for Ladybird I came across an issue with the fullscreen spec with respect to how it says to run "find the topmost popover ancestor" algorithm: https://fullscreen.spec.whatwg.org/#fullscreen-an-element It says: `Let hideUntil be the result of running topmost popover ancestor given element, null, and false.` but when looking at the algorithm, it is described as "using 4 parameters" so to speak: ``` To find the topmost popover ancestor, given a Node newPopoverOrTopLayerElement (1), a list popoverList(2), an HTML(3) element or null invoker(3), and a boolean isPopover(4), perform the following steps. They return an HTML element or null. ``` Is `popoverList` an implicit argument to the algorithm and if so, where is that documented? [05:18:37.0603] * While implementing the Fullscreen API for Ladybird I came across an issue with the fullscreen spec with respect to how it says to run "find the topmost popover ancestor" algorithm: https://fullscreen.spec.whatwg.org/#fullscreen-an-element It says: `Let hideUntil be the result of running topmost popover ancestor given element, null, and false.` but when looking at the algorithm, it is described as "using 4 parameters" so to speak: "To find the topmost popover ancestor, given a Node newPopoverOrTopLayerElement (1), a list popoverList(2), an HTML(3) element or null invoker(3), and a boolean isPopover(4), perform the following steps. They return an HTML element or null." Is `popoverList` an implicit argument to the algorithm and if so, where is that documented? [05:20:04.0132] And the topmost popover ancestor algo: https://html.spec.whatwg.org/multipage/popover.html#topmost-popover-ancestor [05:21:41.0701] I can't find any other places in the standard that refers to this algorithm, in the wording that the Fullscreen API does, namely "given element, null, false", i've only found "given foo, bar, baz, quux" [05:32:48.0075] If `popoverList` were optional, then it would be introduced as `an optional list popoverList`, and it would either be given a default value, or the algorithm would have to deal with the possibility that it's not supplied. And optional positional parameters are supposed to come at the end of the parameter list. None of that's true in this case, so you can be pretty confident that `popoverList` isn't optional. [05:35:06.0171] Right, that was my conclusion as well. So that would also make it safe to assume that the Fullscreen API is worded incorrectly? Judging by how Firefox has implemented this, they populate the `popoverPositions` using popover elements that `whose popover attribute is in the auto state.` in the document. But it would probably be best to also specify this in the standard, no? [05:35:28.0304] * Right, that was my conclusion as well. So that would also make it safe to assume that the Fullscreen API is worded incorrectly? Judging by how Firefox has implemented this, they populate the `popoverPositions` using popover elements that `whose popover attribute is in the auto state.` in the document for which `element` belongs to. But it would probably be best to also specify this in the standard, no? [05:41:34.0386] * Right, that was my conclusion as well. So that would also make it safe to assume that the Fullscreen API is worded incorrectly? Judging by how Firefox has implemented this, they populate the `popoverList` using popover elements that `whose popover attribute is in the auto state.` in the document for which `element` belongs to. But it would probably be best to also specify this in the standard, no? [05:42:31.0190] `topmost popover ancestor` used to have only 3 params, and then `popoverList` was added. So probably Fullscreen's invocation used to be correct, but then wasn't updated when it should have been. [05:42:43.0926] yeah, that was my speculation as well [05:43:30.0071] Should I file an issue with the Fullscreen spec? [05:43:30.0766] That happened only two months ago, in commit 7a307cd [05:43:36.0910] Oh wow [05:44:05.0153] sorry, but where can I look at that commit? [05:44:24.0167] just a minute... [05:45:53.0501] found it, this one right? https://github.com/whatwg/html/commit/7a307cdfdee23d28e9c043afd70fe46e27e40d45 [05:46:49.0721] yup, in particular line 86219 [05:52:27.0294] https://github.com/whatwg/html/pull/9778 is the PR that added it. I don't think it mentions the need to update downstream specs (but I only skimmed the discussion). I don't know how that's supposed to happen. [05:53:54.0269] right, so with my understanding, the new hints should just be dismissed upon fullscreen [05:56:22.0144] but, I would need to understand popovers better. who, what, where do I file issues? [05:57:12.0398] because it seems like filing an issue with the Fullscreen spec don't make all that much sense, since we'd need some understanding that the authors & reviewers of that PR can only provide, right? [05:58:41.0265] I think it makes sense to file an issue with the Fullscreen spec even if you don't know how to resolve it. [05:58:50.0266] right, okj [05:58:53.0769] * right, ok [05:59:16.0415] I'll file an issue, reference the PR and some of this discussion. [06:01:21.0434] Your issue can maybe 'at' josepharhar (author of 9778) to ask for advice. [06:02:16.0014] ok [06:02:24.0064] oh, first check if such an issue already exists on fullscreen. [06:02:36.0731] yeah it struck me too :) but there was none [06:08:18.0406] i'm guessing they missed it because when clicking the cross references, the fullscreen api does not show up [06:12:12.0759] clicking the algorithm name in the HTML spec? Does that ever bring up external references? [06:13:42.0555] That's maybe a bikeshed feature. HTML spec isn't built with bikeshed. [06:15:57.0076] right [06:16:12.0159] Idk that bikeshed even has that feature (it would be amazing if it did and html could get it though) [06:16:45.0699] * Idk that bikeshed even has that feature (it would be amazing if it did and html could get it though). For exactly this kind of purpose. Makes finding your consumers much easier. [06:38:35.0197] nazimshopen [10:18:04.0777] for cross-references, there's always https://dontcallmedom.github.io/webdex/ [10:18:15.0504] though it would definitely be nice if such metadata was available inline 2025-03-18 [19:33:54.0116] It's doable. Someone could even hack up something in JavaScript, that just loads the external cross-references after loading the internal ones. [10:11:53.0503] annevk: is there a TAG review issue for scoped custom element registires? [10:11:57.0024] * annevk: is there a TAG review issue for scoped custom element registries? [11:00:18.0851] keithamus: dunno [13:19:50.0371] https://github.com/w3ctag/design-reviews/issues/1070 just raised this then [13:24:10.0872] keithamus: parts were implemented by me, FWIW, not sure how accurate that needs to be [13:24:59.0833] oh apologies, shall I update to add "implementer" to your bit, or do I need to remove rniwa? [13:25:45.0147] I guess you can add implementer to my bit; don't remove rniwa though! [15:01:36.0053] Does HTML spec have concept of non-current Window [15:01:44.0986] * Does HTML spec have concept of non-current Window? I couldn't immediately find it [15:13:05.0556] What's a non-current Window? [15:15:40.0566] annevk: you have iframe and its window and then you navigate iframe to another page. The window in the original page may stay around still, internally [15:16:26.0460] smaug: we track that on the document, "fully active" [15:17:34.0214] I guess that is pretty much the same [15:21:46.0424] not all the algorithms check that, when they perhaps should [15:23:12.0550] smaug: please file an issue when you notice that. 2025-03-19 [21:10:13.0632] Shannon Booth: I see you're implementing URLPattern. Would be curious if you agree with the test changes I propose in https://github.com/web-platform-tests/wpt/pull/51316 [03:14:48.0808] Indeed, I've been working on it a little when I can find time outside of day job. it makes the '{ "protocol": "http", "port": "80 " }' test fail for me, and the 'https://{sub.}?example{.com/}foo' one pass. Will investigate why it's different. Could very well be an issue on my side, I'm sitting at 328 pass 22 fail overall, there are some issues I still need to debug. [04:43:38.0811] * Indeed, I've been working on it a little when I can find time outside of day job. it makes the '{ "protocol": "http", "port": "80 " }' test fail for me, and the 'https://{sub.}?example{.com/}foo' one pass. Will investigate why it's different. Could very well be an issue on my side, I'm sitting at 335 pass 15 fail overall, there are some issues I still need to debug. [05:19:39.0040] I left a comment on your URL merge request with what seems to be a related case that is currently failing locally [09:18:09.0167] How does chromium track intermittently failing tests? Maybe I'm just using wrong keywords when trying to find some information from issues.chromium.org [09:19:15.0911] annevk: you might know if webkit is doing something like that [09:20:51.0107] The background is that it might be useful to see if some tests are failing in multiple engines - especially if the tests are written in a way where they rely on certain scheduling even though the spec doesn't require that. [13:20:55.0008] Shannon Booth: cool, thanks for taking a look. [13:22:14.0210] smaug: in LayoutTests there's multiple TestExpectations files (one global and then one per platform) where we track skipping tests for flaky reasons. No standardized annotation I'm afraid, but if you have a file name it should be easyish to find there. [13:23:38.0820] smaug: https://github.com/WebKit/WebKit/blob/main/LayoutTests/TestExpectations (note that some of the things that are globally skipped are enabled on specific ports, we use that for certain types of form control tests for instance) [15:05:42.0801] > <@smaug:mozilla.org> How does chromium track intermittently failing tests? Maybe I'm just using wrong keywords when trying to find some information from issues.chromium.org If you search for the filename of the test, it will show up if it's in TestExpectations [15:05:53.0558] On source.chromium.org [15:06:05.0811] ah, thanks [15:06:19.0528] jarhar: and there is something to hint about intermittent issues? [15:07:05.0578] Perhaps [ Failure Pass ] ? [15:07:24.0971] If the test is flaky then it is almost certainly listed in TestExpectations. If it's in TestExpectations anywhere, then we most likely ignore the test basically [15:07:53.0385] Failure pass at the end of it means that we accept failure or pass results from the test [15:08:06.0962] Apparently "pass" is implied though which is unfortunate [15:08:18.0861] Timeout is another thing that can go in the square brackets [15:09:15.0261] If the test is failing consistently and isn't flaky or timing out, then instead of being in TestExpectations we might have another file next to it that ends with -expected.txt which contains the failing test cases/assertions [15:09:41.0085] ok, and [one](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/web_tests/TestExpectations;l=8271?q=beforematch-scroll-to-text-fragment.html) of the tests I was looking at earlier today is there 🙂 [15:10:42.0377] Great! Let me know if you want me to run the test for you to see what it prints out or how flaky it is [15:11:22.0892] we're fixing that test, well jjaschke is [15:14:32.0585] it is part of interop-25 though, but it expects certain scheduling which isn't defined, so need to make it less flaky [15:43:45.0597] smaug: FYI: https://github.com/whatwg/xhr/pull/394#issuecomment-2735275248 [15:45:43.0621] but the binding changes should be enough, I think. The relevant c++ is generated from the bindings [15:46:17.0513] * but the binding changes should be enough, I think. The relevant c++ is generated from the webidl interface [15:46:43.0025] smaug: including the internal fields to store the data? Because if those are `unsigned long long` as they are in WebKit, you'll get rounding where you should not have rounding, and such. [15:47:46.0169] It'd be pretty neat if you generated that much though. Might be possible for Events... [15:48:42.0128] yeah, there is event specific codegen, works with normal kinds of events [15:49:11.0148] Ah okay, very nice. [15:49:51.0905] (and searchfox can find the generated [code](https://searchfox.org/mozilla-central/source/__GENERATED__/dist/include/mozilla/dom/ProgressEvent.h)) 2025-03-20 [02:31:42.0126] Luke Warlow: in the setAttribute algorithm, isn't it a bit odd that step 5 may create a new attribute, which isn't necessarily used at all [02:33:21.0941] Why would it not be used? [02:33:30.0598] I guess if veriying an attribute value throws? [02:33:40.0277] oh wait, I'm missing something [02:34:00.0058] step 7 does explicit attribute check [02:34:47.0479] hmm, how would I implement that efficiently ... [02:36:19.0732] you can skip steps 6 and 7 if the CSP isn't enabled. And 7 if the attribute is a safe attribute [02:36:51.0011] * you can skip steps 6 and 7 if the CSP isn't enabled (in at least report only). And 7 if the attribute is a safe attribute [02:39:07.0992] It is just the identity of the attribute I'm pondering [02:41:50.0096] Luke Warlow: how does that work in webkit if the TT callback removes the relevant attribute and adds back an attribute with same qname? [02:42:39.0732] it resyncs the attribute index before setting the value [02:43:14.0480] but what does step 7 do? [02:43:17.0820] * it resyncs the attribute index before setting the value (but it only needs to do this when CSP is present AND when the attribute is one that requires a TrustedType) [02:43:21.0828] It is not anymore the same attribute [02:46:24.0343] That is true. [02:46:53.0086] and I wish we wouldn't need to do identity checks for attributes here [02:47:12.0122] I can probably move step 6 higher up [02:47:34.0730] Maybe even to step 3? [02:48:01.0016] It takes an attribute algorithmically but all it needs is an attributes local name and namespace [02:48:18.0836] so you need step 3 first [02:48:43.0576] We have qualifiedName already though right? [02:49:06.0051] And namespace is null [02:49:42.0895] That way all the actual lookups on the element etc happen after the default policy is called? And hopefully the flow looks nicer? [02:50:18.0678] the attribute may have non-null namespace [02:50:24.0936] if there is existing attribute [02:51:23.0657] Ahhh okay. Hmm in which case maybe we can't move it any earlier? [02:51:43.0673] * Ahhh okay. Hmm in which case maybe we can't move it any earlier? (Side note the default policy was a mistake 😅) [02:51:44.0072] There is _some_reason for the code Gecko has now 🙂 [02:51:53.0454] * There is \_some\_ reason for the code Gecko has now 🙂 [02:54:54.0815] Could you point me to the Gecko code? I guess to match WebKit (and I believe Chromium in this case), We need to redo step 3 after step 6 [02:55:44.0753] This is the [setAttribute](https://searchfox.org/mozilla-central/rev/4ce36232b265b53de4fb7eb754430f94e262bbbe/dom/base/Element.cpp#1679-1726). [02:56:38.0271] Yeah so I think duplicating step 3 copies Firefox too? [02:56:52.0692] Maybe it is quite similar to what webkit does [02:57:06.0809] but the spec pr does something else, because of the identity check [03:06:00.0771] This should match what we want right? [03:06:18.0204] * This should match what we want right? (with a similar change to setAttributeNS()) [03:06:22.0593] Looks like LadyBird stores actual Attr nodes, assuming I'm reading the code correctly [03:06:33.0889] looking [03:08:59.0291] that looks reasonable [03:18:58.0392] Luke Warlow: btw, in webkit, do you need to call synchronizeAttribute again after TT callback? (I was just randomly looking at the code and I'm not sure when synchronizeAttribute is needed) [03:23:03.0468] Hmm I'm not sure quite what it does but possibly yes. [03:24:09.0805] It seems to only care about style for HTML which won't be changed by in a meaningfull way [03:24:16.0390] But SVG might have some wonkiness? [03:27:11.0884] * But SVG might have some wonkiness? Though thinking about it anything weird you do in the default callback will also trigger that to be called by the respective DOM APIs? [10:21:51.0630] Hello, a quick check: what are the parsing rules for HTML entities inside non-script Alternatively, where in the HTML standard can I find the answer, please? [10:24:05.0093] https://html.spec.whatwg.org/multipage/parsing.html#scriptTag perhaps [10:25:37.0433] Ondřej Žára: they are the same for all `script` elements. It is extremely rare for the parser to depend on an attribute. [10:26:46.0067] ...riight, okay. So if I read this correctly -- the insides will be tokenized via https://html.spec.whatwg.org/multipage/parsing.html#script-data-state, so the "&" will produce literally 5 characters, no entity decoding happens, right? [10:27:40.0488] (in other words: no entity encoding should be performed for data being put into the