2020-02-04 [07:16:46.0000] annevk: RE https://github.com/whatwg/html/issues/5250#issuecomment-581941697: Delaying the load event is controlled by the `delay the load event` variable, which I think is independent of the return value from the `will lazy load image` steps, right? [07:19:22.0000] domfarolino: yeah [07:19:39.0000] domfarolino: hence the question šŸ™‚ [07:19:45.0000] So I think even if scripting being disabled does impact the `will lazy load image` steps, the `delay the load event` variable would still have the image delay the load event [07:20:19.0000] Oh hmm [07:20:35.0000] annevk: Sorry, would _not_ delay the load event [07:21:08.0000] Ughh, I'm misinterpreting everything tonight :/ [07:23:44.0000] domfarolino: afaict delay load event depends solely on the loading attribute [07:24:40.0000] domfarolino: I guess that's what you're also saying, in which case the question is, is that what we want or should scripting disabled be equivalent to eager? [07:25:02.0000] domfarolino: if it's not equal to eager, what causes it to be fetched? [07:26:13.0000] domfarolino: separate thing, the PR needs to be rebased and INSERT FINGERPRINT needs to be replaced with INSERT TRACKING, I can do that later, but also don't really want to stamp on any work you might be doing [07:33:40.0000] annevk: Eager-fetching and eager-load-event semantics are separate as you've mentioned (former is controlled by the [07:34:01.0000] will lazy load image steps, and the latter is controlled solely by the attribute [07:35:08.0000] We'd want environments where scripting is disabled, to always eagerly-fetch the image, for privacy/tracking reasons. But the image would still have lazy-load-event semantics (which I don't think has any tracking concerns?), unless we handle it separately. Does that make sense? [07:36:15.0000] domfarolino: actually, I guess that's a fine outcome too [07:37:04.0000] domfarolino: it might make refactoring this will lazy load thing trickier, is what I'm saying [07:37:49.0000] domfarolino: since if we move that to "update the rendering" as desired, we'd need something else for script being disabled [07:39:01.0000] annevk: Right, good point. So I'm OK with leaving the load event behavior as-is even when scripting is disabled, since it makes the refactoring simpler and also doesn't (seem to) expose a tracking vector. [07:45:27.0000] annevk: let me know if that's what you had in mind/we're on the same page [07:46:51.0000] domfarolino: ideally you have an opinion on it šŸ™‚ [07:47:34.0000] domfarolino: but either that or not delaying the load event but fetching directly anyway work for me [07:55:36.0000] annevk: As long as scripting-disabled == fetch eagerly, I don't have a strong pref on the load event. For consistency, I prefer scripting-disabled == everything eager (delay load event). Not sure if either way complicates the refactoring. Will think on it more 2020-02-05 [19:29:54.0000] about rel=preload in Link headers, in Chrome is there a way to opt out of it? some user option/flag? [19:29:57.0000] see https://stackoverflow.com/questions/60064866/for-fetch-request-from-chrome-extension-how-to-prevent-chrome-from-also-automat [20:43:17.0000] That seems like a bug, except perhaps if the site uses push, but why would that show up as requests? Surely the console knows [21:29:12.0000] annevk: I'm happy to answer any questions for https://github.com/mikewest/corpp/pull/8. [21:39:45.0000] annevk: The OP doesnā€™t cite any console error messages. In my experience with reading a lot of StackOverflow questions, it seems like a lot of devs donā€™t actually think to look at the console errors. Which suprises me (or used to...) [21:53:23.0000] annevk: btw that site is using HTTP/2 so maybe it is actually also using push. Do you know of a way I can tell if it is using push? [21:53:32.0000] the site is https://victoryroadvgc.com/ [21:54:34.0000] if I look at the requests in the Network pane, I see some where the Initiator is listed as "Other"... maybe that indicates theyā€™re coming from push? [21:56:34.0000] s/in the Network pane/in the Network pane in Chrome/ [23:51:54.0000] MikeSmith: there are CDNs that translate preload into push so that is certainly plausible [23:52:14.0000] MikeSmith: no experience debugging personally [23:53:24.0000] yhirano: will look more closely today I hope [00:01:51.0000] yhirano: I think the problem with that approach is that itā€™s not future proof; at least, I think you want enforce value A, while getting a report for value B [00:02:18.0000] (Thanks for the extremely clear written summary!) [00:05:23.0000] yhirano: if weā€™ll never expect to extend this header it seems fine, but other Googlers have suggested new values [00:09:20.0000] annevk: we can introduce a new parameter, say report-as, when necessary. [00:09:50.0000] annevk: at this moment report-as is fixed to "require-corp" so we don't need it [00:20:31.0000] yhirano: true, but it still limits us in ways; e.g., we couldn't add an optional parameter to require-corp [00:20:54.0000] yhirano: but maybe that's okay [00:38:39.0000] annevk: thanks. Would that be a problem for COOP? [00:41:40.0000] annevk: we want to have a consistent syntax for COEP reporting and COOP reporting if possible [00:41:55.0000] yhirano: it's hard to say in advance [00:42:03.0000] yhirano: if we're okay sticking with enums it's not a problem [00:43:11.0000] yhirano: https://github.com/w3c/webappsec-feature-policy/issues/362 is somewhat related [00:49:16.0000] yhirano: I added a comment there to express my overarching concern; last time some of us discussed this in person nobody had a really compelling take for one solution over another [00:51:03.0000] I'm probably overthinking it though as most headers don't grow that many values [00:55:16.0000] annevk: yeah. I still think the simplest one is good for the current COOP&COEP proposal, and it will not be too bad to make the reporting syntax complex when they grow... [06:46:46.0000] given an HTMLImageElement `img`, does img.src = "/example.png"; img.src = "/example.jpg"; cause one (1) network request? (given step 8 of the update the image data?) [06:52:14.0000] gsnedders: should be 1 [06:53:53.0000] okay, far as I can see we have no tests for this [06:54:24.0000] (don't worry, I'm only writing tests along these lines which get progressively more evil, who knows what interop is like) [06:55:23.0000] gsnedders: because that would be lovely [06:55:26.0000] gsnedders: someone contracted you to work on the img element? [06:55:39.0000] (not sure why the first message didn't get send directly) [06:56:11.0000] annevk: no, just playing around with some kinda crazy ideas in my head and I feel like I should check browsers actually do the right underlying behaviour before I start relying on it [06:56:31.0000] so don't expect anything super-exhaustive, just the cases I care about for what I'm playing with :) [06:56:46.0000] Fair enough [06:57:16.0000] Alternative plan: get super popular so browsers have to align around what you happen to do [07:19:25.0000] gsnedders: We don't have tests for a lot of the "relevant mutations" and intricacies in the #updating-the-image-data microtask-queueing logic, and there seems to be a decent interop gap. I talked with zcorpan about this a little recently, it would be great to get a lot of tests for this stuff written! I'm happy to help [08:59:09.0000] Domenic: do you recall why Worker.fromString(...) is not yet a thing? Writing a Blob wrapper is rather tedious [09:04:12.0000] Similarly, we should have a way to load up a worklet from a string rather than a url; someone filed an issue about that a few days ago. [09:07:00.0000] Yeah, the current setup is rather awkward. Having said, I'm sure this has been discussed before [09:07:09.0000] that* [09:18:30.0000] domfarolino: I'll look once more tomorrow, but I think your change was fine [09:18:41.0000] domfarolino: from your checklist we're still awaiting a test though right? [09:19:40.0000] domfarolino: and I guess it'd be nice if ecobos (or hiikezoe) had a final skim [14:35:29.0000] annevk: yep hiikezoeā€™s test should be it if youā€™re ok with the spec [14:35:54.0000] Sure Iā€™m happy waiting for a final skim 2020-02-07 [18:35:29.0000] I see Alex Surkov left Mozilla and is now at Igalia [18:36:09.0000] I wonder who else at Mozilla is working on implementing accessibility-related features [19:31:02.0000] MikeSmith, not sure of moz a11y group structure, but you might try Marco Zehe [19:33:06.0000] MikeSmith, you can normally find MarcoZ on moznet #accessibility [19:33:51.0000] (til moznet IRC server goes away soon) [20:08:32.0000] trying to figure out something re: Request.prototype.destination ā€” Iā€™m seeing the value "empty" for fetches and webmanifest links (Chrome). I donā€™t see this in the fetch spec, which lists a bunch of other values. [20:09:35.0000] ā€œUnless stated otherwise it is the empty string.ā€ ... is it possible this was misinterpreted as ā€˜the string ā€emptyā€?ā€™ 2020-02-10 [08:33:04.0000] JakeA: https://github.com/annevk/orb/pull/1 [08:34:25.0000] Ohhh will take a look [09:27:23.0000] annevk: Like your new Twitter bio. :) [09:37:35.0000] annevk: ping [09:38:06.0000] shu: heya [09:38:26.0000] annevk: hey, wondering if you got an opinion on [Unforgeable] [09:38:59.0000] annevk: is it a generally useful thing for the host to be able to do? i feel like it is, though outside of some legacy properties (document, etc) and trusted types i don't see much use [09:39:24.0000] shu: we only have it for plugins, basically, to avoid them being lied to [09:40:03.0000] shu: and I guess for Location it might also simplify some of the proxy setup since everything becomes an own property iirc [09:40:10.0000] annevk: ah ok [09:40:33.0000] annevk: so tl;dr: narrow scope, but still definitely useful for hosts to be able to express [09:41:00.0000] shu: I don't see us getting rid of it before plugins and even after that it might be tricky [09:41:43.0000] annevk: expand a bit on why it might be tricky afterwards? [09:41:57.0000] shu: also, it ought to be renamed to LegacyUnforgeable, we don't want new things using it [09:42:22.0000] https://github.com/heycam/webidl/issues/350#issuecomment-335454404 [09:42:41.0000] shu: well, we'd need something to express it being an own property I suspect for compat reasons [09:43:02.0000] annevk: makes sense, ok [09:43:03.0000] shu: definitely Location would need something special [09:46:12.0000] annevk: why is Unforgeable legacy btw? non-configurable own props are just not how web apis are done? [09:47:12.0000] shu: yeah, all the ones we have are rather out of place [09:47:37.0000] annevk: great, thanks a lot for the info [09:48:16.0000] shu: and I think there were a few occasions where people wanted to use it to match some idea of precedent without that being okay [09:48:43.0000] so best to discourage and then if it's really needed enshrine more legacy [09:48:50.0000] +1 [10:10:13.0000] if you do `() => { new ReadableStream(...) }` why does that return undefined? [11:10:45.0000] annevk, Domenic: Hi. May I poke you guys about https://github.com/whatwg/infra/pull/289 for a second? [11:11:33.0000] Seems like both of you agree that, rather than defining code unit prefix and less-than as JS-string algorithms, their use of "length" should be changed and made clear. [11:11:42.0000] Since that goes in quite a different direction than the PR, it'd be best to close it and open another for the same issue, right? [11:34:23.0000] andreubotella: that sounds reasonable to me! [11:37:57.0000] ok, just wanted to make sure [11:56:08.0000] annevk: if you use {} for the body of the arrow func, it's a normal function body and needs `return` to return a value. [12:41:42.0000] Thanks, yeah, bz pointed that out too 2020-02-11 [03:22:39.0000] annevk: there was a more recent proposal from Domenic using [Unforgeable] in an earlier iteration of get-originals, but I guess that's now based on built-in modules. When I was reviewing this, I had no idea Unforgeable was deprecated/legacy. https://github.com/domenic/get-originals/tree/bb9d33b3225cac2c1b2dc0a2aca31e62fef58715#the-api [03:23:11.0000] so, yeah, documenting this better sounds like a good idea [04:26:16.0000] littledan: that might well be one of those exception use cases I suppose [06:12:30.0000] well, I guess the continued existence of exception cases is pretty relevant for these kinds of TC39 proposals that want to thoroughly ban this practice [08:31:56.0000] littledan: oh, what proposal? [08:32:17.0000] littledan: how could TC39 forbid it? some new mode flag? 2020-02-12 [02:23:37.0000] annevk: I think the idea is to tell host environments that they're wrong if they do something like [Unforgeable]. So I'm not sure what it'd mean in practice. https://github.com/Agoric/proposal-preserve-virtualizability [02:25:51.0000] littledan: ah, Agoric [02:26:40.0000] they did make a positive shoutout to annevk 's work making WebIDL in terms of the JS object model [02:26:41.0000] Wait, why are they writing EcmaScript? [02:26:56.0000] what do you mean? [02:27:15.0000] I thought it was ECMAScript [02:27:57.0000] yeah, it is. I guess this could be a PR? But IMO the higher priority PR would be saying exactly what the proposal would mean [02:28:02.0000] Oh I see, the whole thing is generally quite sloppy about casing [02:29:26.0000] I like how Mark et al first went through great trouble to get ECMAScript to match Host capabilities and now they want to limit what Hosts can do [02:30:34.0000] If I had these goals I might put more effort into IDL I suppose [02:31:50.0000] In terms of limiting what hosts can introduce and influencing the people that can help with that, it's a good place [02:58:13.0000] I'm trying to convince Mark that he should try to build consensus with web people if he wants to influence the web, rather than put prohibitions into the JS spec saying the web is wrong [02:58:49.0000] but, sounds like marking [Unforgeable] as legacy would be a good way to influence things, yeah [02:59:47.0000] looks like Trusted Types makes pretty heavy use of Unforgeable. Is this what we want? https://w3c.github.io/webappsec-trusted-types/dist/spec/ [03:02:48.0000] littledan: dunno, https://github.com/mozilla/standards-positions/issues/20 [03:03:18.0000] littledan: I had not looked deeply at the APIs there, mostly on when code would run [03:11:51.0000] annevk: This doesn't seem specific to a Mozilla position, so I filed https://github.com/w3c/webappsec-trusted-types/issues/257 [03:12:32.0000] littledan: thanks [03:14:52.0000] there were some earlier ideas about trusted types which had to do with enforcement of the literal-ness of strings. I really liked that approach. This has evolved into TC39's `Array.isTemplateObject` proposal, which could be used to build a TT policy and set of template tags that checks that strings were literals created with a particular tag. [03:15:21.0000] the concern was, restricting entirely to literal strings if the CSP policy is on would be too inflexible to work in practice, so this may be one element of a more detailed policy [03:16:34.0000] (and the other concern was a misunderstanding about whether such literal-ness checks would be possible through TC39--I think the current progress of `Array.isTemplateObject` shows that it is possible, but I think this wasn't clear for a while.) [04:38:30.0000] andreubotella: I'll take a stab at that string issue [04:56:19.0000] annevk: I see. I was gonna try and glance at the usages of "length" in some of the specs linked in the wiki. [04:58:07.0000] andreubotella: that sounds great [04:58:57.0000] andreubotella: I'm mostly leaning towards replacing any usages of string's length with code unit length or code point length and then removing both concepts of length [04:59:41.0000] andreubotella: and I guess if we keep the single word length around it will have to mean code unit length as otherwise it's too confusing with JS [05:00:51.0000] I wouldn't be opposed to just removing both concepts, but I'd prefer keeping length as code unit length. [05:07:21.0000] I could go for length and code point length too, let's see what Domenic and Addison think [05:11:31.0000] Right [06:47:09.0000] annevk: Thanks a bunch for all of the reviews and design discussions recently. Glad to have lazy load landed! [06:49:39.0000] \o/ [08:27:30.0000] Domenic: if you have some advice for https://github.com/web-platform-tests/wpt/pull/21146 that'd be cool; I haven't worked a lot with templating before and the whole thing ends up looking rather messy even though there's not a whole lot of duplication left [08:31:51.0000] Will take a look, hmm [08:32:14.0000] In general in tests I favor duplication/explicitness over clever loops/templating [08:36:00.0000] annevk: yeah I guess that would be my advice, is to just have explicit files with the tests (maybe one file per test), instead of using JavaScript to create strings repeatedly. If you really need to then you can write a Python/Node.js script to generate the tests but the actual test files would be easier to understand if they were not templated. [08:36:00.0000] https://testing.googleblog.com/2019/12/testing-on-toilet-tests-too-dry-make.html [08:40:09.0000] I don't really agree with that [08:40:34.0000] OK, well, it's kind of standard engineering best practice, but, I'm not going to block tests merging over it. [08:40:35.0000] To some extent sure, but verifying for correctness is also relevant over a series of tests [08:40:58.0000] And then a loop can help to verify there's no copypasta somewhere [08:41:19.0000] So can code generation, if that's the higher priority than auditability [08:41:39.0000] The point though is that loops without tests are bug-factories [08:41:47.0000] So using them in tests, which are themselves untested, is not great [08:45:08.0000] Also, this isn't using loops [08:45:30.0000] True, yeah, I was going to say, loops can be fairly easy to understand... [08:45:41.0000] This templating though, I just have no idea how many tests are being generated. [08:45:46.0000] (Do you?) [08:48:32.0000] 18 iirc [08:49:01.0000] 5 * 2 for blobs and 4 * 2 for datas [08:49:49.0000] OK, well, I guess if one person understands the tests, that's something [08:51:43.0000] heh [08:59:48.0000] annevk: intuitively speaking what does the loop in process a navigate fetch do? Is it following redirects through the location header? [09:14:06.0000] Domenic: for HTTP URLs, yes [09:14:28.0000] Domenic: non-HTTP in a location is post-loop atm [09:14:34.0000] Cool. I think it'd be a bit clearer if "location URL" was typographically "`Location` URL" [09:14:48.0000] I'll open a fetch issue [09:15:00.0000] Domenic: well itā€™s a type [09:15:21.0000] Isn't it a field of response? [09:15:21.0000] Domenic: and Fetch has processed the value [09:15:42.0000] Domenic: sure but itā€™s not the Location header [09:15:46.0000] Yeah I'm just saying "location" is pretty ambiguous, I didn't know you were talking about the location header [09:16:18.0000] Okay, add it to the existing refactoring issue for that field? [09:16:18.0000] Meh, I guess if I just clicked on the dfn, it'd be clear enough [09:16:42.0000] Nah I changed my mind, things don't need to be 100% clear for people who are too lazy to click on s when they are confused :) [09:27:59.0000] annevk: quick review on https://github.com/whatwg/html/pull/5212 ? littledan already approved so mostly editorial [09:43:21.0000] Domenic: you got it [10:04:30.0000] Also, agreed that we need to define a user-initiated navigation to a data URL. Maybe the time has finally come to try to sort out again if source browsing context can finally become source document [10:04:59.0000] And then also what to do if it's null [10:06:28.0000] That'd be fun :) [10:10:15.0000] So much yak shaving around COOP+COEP/Spectre, but yeah, it's mostly good; still a bit scared of history, but I've been thinking of more concretely writing down what browsers are reportedly doing as some kind of model description [10:25:44.0000] I mean these are kind of your favorite yaks to shave; seems good to have an excuse to work on it :) 2020-02-13 [05:12:37.0000] anyone around who has access to the https://validator.w3.org/ server? I've been getting Error 503 and timeouts for a few hours now [05:17:30.0000] /CC @MikeSmith when you are around :) [05:19:35.0000] XhmikosR: I can reach it, FWIW [05:19:51.0000] annevk: can you post a few times successfully? [05:20:09.0000] I can also reach the site, but it fails when uploading a doc or making a POST request [05:20:32.0000] XhmikosR: ah, I tried to validate whatwg.org [05:21:01.0000] maybe there's some kind of ongoing DDoS attack going on? [05:21:25.0000] XhmikosR: uploading a test from wpt also works [05:22:15.0000] it seems it works now for me too, let me restart CI [05:23:16.0000] yup it seems it works now again [05:23:28.0000] minus a few cases https://github.com/MaxCDN/bootstrapcdn/pull/1457/checks?check_run_id=443612129 [05:24:50.0000] we have the issue on all other branches too so it doesn't seem to be related to an npm package, and I could also reproduce just a few minutes ago on the browser [06:48:01.0000] XhmikosR: here now [06:48:44.0000] MikeSmith: I'm still seeing the failures on CI :/ [06:49:16.0000] yeah will try to fix the server now [06:49:27.0000] thanks! [06:57:17.0000] XhmikosR: OK, should be back to normal now [06:57:24.0000] thank you! [06:58:06.0000] cheers [07:53:13.0000] https://html.spec.whatwg.org/#nonce-attributes [07:53:18.0000] trying to understand that [07:53:46.0000] "Elements that have a nonce content attribute" ... ok, some elements have nonce content attribute [07:54:18.0000] but somehow _that_ isn't exposed to CSS [07:56:15.0000] "extracting the value from the content attribute" means probably something [07:56:17.0000] but not sure what [07:56:31.0000] the value is extracted but is the content attribute still there? [07:56:38.0000] and if it is there, what is the value? [07:56:57.0000] annevk: do you happen to recall [07:57:07.0000] I'm probably missing some bits elsewhere in the spec [07:58:23.0000] oh, when element gets connected, then the value becomes empty string [07:58:55.0000] but when does the "extract" happen? [08:03:44.0000] smaug____: seems prett clear if you read on [08:04:00.0000] smaug____: normative requirements are further down [08:04:00.0000] annevk: I'm missing where the extract happens [08:04:22.0000] > Whenever an element including HTMLOrSVGElement has its nonce attribute is set or changed, set this element's [[CryptographicNonce]] to the given value. [08:04:31.0000] right [08:04:36.0000] I understand that sets the slot [08:04:53.0000] but nothing says the content attribute isn't set too [08:05:14.0000] smaug____: it is set [08:05:30.0000] oh [08:05:45.0000] but if I remove element from DOM and put it back, then value is "" [08:05:49.0000] smaug____: so if you manipulate post tree connection you are leaking [08:05:56.0000] Hai [08:05:56.0000] bizarre [08:06:37.0000] Well, seems a tad better than hijacking setAttribute() entirely in novel ways [08:07:19.0000] so if parser sets the attribute, it gets cleared when element gets connected [08:07:32.0000] after that attribute changes aren't affected [08:07:48.0000] but slot gets updated [08:08:21.0000] and then when connecting again, attribute value is cleared [08:08:42.0000] Sounds right [08:08:51.0000] super weird, but ok. Just trying to understand how one should implement this [08:08:55.0000] thanks [08:09:02.0000] There should be tests for all of this [08:09:23.0000] bz and I were involved in agreeing on these semantics iirc [08:11:03.0000] it might have been simpler to just always clear the nonce attribute [08:12:03.0000] And somehow avoid a loop and create weird mutation records? [08:13:20.0000] hmm, which loop? [08:14:22.0000] MutationRecord has the old value, so it would just always have "" [08:14:31.0000] but anyhow, this is what it is now [08:14:42.0000] just a bit more difficult to implement [08:23:37.0000] Set attribute invoking set attribute, spec doesnā€™t have a clear to change an attribute without side effects apart from direct manipulation [08:24:31.0000] Thereā€™s also no real precedent for no-opping setAttribute() calls [08:25:32.0000] But yeah, it is what it is šŸ˜Š [08:25:33.0000] was there precedent for changing attribute values when connecting an element to document? [08:25:45.0000] I guess all the options are weird [08:26:23.0000] smaug____:
maybe? But yeah, weird too [08:26:30.0000] some kind of change to parser to set the slot, and not attribute [08:26:47.0000] but changing parser is scary [08:27:11.0000] I think that ruled that out, but itā€™s been a while 2020-02-14 [16:05:16.0000] hmm, I hope there is a test ensuring childList and attributes MutationRecord ordering [18:20:37.0000] agree with https://github.com/mfreed7/declarative-shadow-dom/issues/1 [22:44:34.0000] annevk: regarding https://github.com/whatwg/html/pull/4734 [22:44:52.0000] annevk: crossOriginIsolated is based on agent cluster's cross-origin isolated flag [22:45:17.0000] annevk: agent cluster's cross-origin isolated flag is based on browsing context groups' cross-origin isolated flag [22:46:03.0000] annevk: how browsing context group's cross-origin isolated flag is set has not been specified yet, right? [00:57:40.0000] yhirano: 6.i. in https://gist.github.com/annevk/6f2dd8c79c77123f39797f6bdac43f3e#changes-to-navigation should set that [01:02:33.0000] yhirano: but you're right that I hadn't really connected all the dots yet [01:10:19.0000] annevk: thanks. My understanding is cross-origin isolated is set if and only if COOP is same-origin and COEP is require-corp when creating the browsing context group. Is that correct? [01:11:18.0000] Yeah, "same-origin + COEP" [01:12:03.0000] yhirano: FWIW, for shared/service workers it only depends on COEP, that's also not that well-defined yet [01:12:33.0000] yhirano: as their agent clusters are not owned by a browsing context group [01:12:54.0000] annevk: thank you! [13:56:48.0000] TIL you can run JS before the first `