03:55
<domfarolino>
Anyone happen to know how many concurrent http/1.1 connections the latest versions of firefox/chrome can make? I heard at least one point it was ~6?
04:47
<annevk>
domfarolino: per origin, sounds about right
04:52
<domfarolino>
ah
07:37
<annevk>
JakeA: Domenic: mkwst: did you already consider alternative timing scenarios?
07:37
<mkwst>
alternative to what?
07:37
<annevk>
mkwst: to synchronous
07:39
<mkwst>
How would you expect that to look?
07:39
<annevk>
mkwst: see last comment in the issue
07:39
<annevk>
mkwst: well and second-to-last (why is that called second and not first?)
07:41
<mkwst>
*sigh* I only picked this up because webauthn needed something simple and it looked like folks had already converged on a design, not because I have deep opinions on cancellation (except, of course, about the spelling). I don't think I'm the right guy to define the behavior.
07:42
<mkwst>
The needs I know about are super-simple, so either synchronous or asynchronous mechanisms could easily fit them.
07:42
<annevk>
mkwst: good to know, just thought I'd check
07:42
<mkwst>
I appreciate it! I hope JakeA has more interesting opinions for you!
07:48
<annevk>
mkwst: either way, I think we're pretty close to success
07:49
<mkwst>
I hope so! To be clear, I'm willing to do the work to specify what folks want. I just don't have strong opinions about what that might be, nor have I done the background work to gather context on alternative approaches.
07:50
<annevk>
I somewhat hope Domenic already thought through the timing implications given his long history with promises and will tell us why "asynchronous" isn't important
08:31
<MikeSmith>
annevk: success https://travis-ci.org/whatwg/encoding/builds/220466241
08:32
<MikeSmith>
as far as testing the new checker message-dropping feature
08:32
<MikeSmith>
and just as far as the “Text run is not in Unicode Normalization Form C.”
08:33
<annevk>
MikeSmith: great, that looks more like what I was expecting
08:33
<MikeSmith>
yeah and I’ll deal with the “document appears to be written in Kinyarwanda” upstream
08:34
<annevk>
MikeSmith: I'm happy with excluding that too
08:34
<annevk>
MikeSmith: same for private use, which was also intentional
08:34
<annevk>
Once those two warnings are gone it should succeed I expect
08:34
<MikeSmith>
yeah
08:35
<MikeSmith>
and yeah the private-use one I will add to the filter
08:35
<annevk>
This is really great MikeSmith, much faster turnaround than I could have hoped for
08:36
<MikeSmith>
yeah I’m glad I managed to get it to work
08:37
<MikeSmith>
and the Kinyarwanda error, that is a general problem with the language profile for that language and that I realize now must be affecting other checker users. So upstream in the checker source I should either fix that language profile or drop it
08:41
<MikeSmith>
annevk: btw if you remember anything other issues or PRs you’ve been waiting on me for, lemme know
08:43
<MikeSmith>
over the weekend, tried to respond to all that I could find (where I had mentions or was assigned)
08:44
<annevk>
MikeSmith: I think you managed to hit most, I'll let you know if I spot another
08:45
<MikeSmith>
cheers
08:46
<annevk>
MikeSmith: actually, I was just looking at one: https://github.com/w3c/web-platform-tests/issues/2669
08:46
MikeSmith
looks
08:47
<MikeSmith>
thanks not sure I got an e-mail notification for that
08:47
<MikeSmith>
seems like e-mail for some of my GitHub notifications is not reaching me lately
12:13
<zcorpan>
https://github.com/whatwg/html/issues/1013 - why not use the javascript: scheme here? :-)
12:24
<annevk>
hehe
12:54
<zcorpan>
TabAtkins: how can i specify caniuse="" for a css property? <dfn caniuse> in <pre class=propdef> is ignored
12:55
<MikeSmith>
annevk: OK finally all green at https://github.com/whatwg/encoding/pull/101
12:55
<MikeSmith>
> Ran for 12 min 41 sec
12:56
<MikeSmith>
but given 103 files to check (twice) with the HTML checker I guess that’s not so bad
13:14
<annevk>
MikeSmith: great!
13:23
<annevk>
MikeSmith: maybe one thing we could do is to only run the HTML checker for the main index file and not any of the generated files
13:23
<annevk>
MikeSmith: as the generated files are only rarely modified
13:24
<annevk>
MikeSmith: of course, that nullifies the need to exclude warnings :/
13:24
<gsnedders>
annevk: you could just try running it on files that have changed in a PR
13:58
<MikeSmith>
annevk: happy to go with whatever you prefer, but I was assuming part of the bigger goal here is to move to having resources.whatwg.org/build/deploy.sh be the common script that each spec/repo uses, and that causes everything under $WEB_ROOT to be checked
13:59
<MikeSmith>
I guess we could always add a hook to allow any spec/repo .travis.yml to override that recursive $WEB_ROOT html checking and instead just check a given list of files
14:01
<gsnedders>
is there any way to somehow compare performance.now() with performance.timing.responseStart?
14:06
<annevk>
MikeSmith: yeah, I guess it's ok, just a bit wasteful
14:07
<gsnedders>
given performance.timing.responseStart returns ms since the unix epoch
14:08
<gsnedders>
(can we really not change the behaviour of performance.timing? I'd have expected most people were just comparing values in a single page-load?)
14:35
<MikeSmith>
annevk: https://stackoverflow.com/questions/43325912/how-to-post-with-application-x-www-form-urlencoded-header-and-urlsearchparams-us
14:37
<annevk>
MikeSmith: added a comment to OP, seems like a bug in the library
14:45
<MikeSmith>
annevk: thanks yeah
14:46
<MikeSmith>
though I think the bug might be in the underlying “github-fetch” code
14:47
<MikeSmith>
that isomorphic-fetch library seems to be just a thin wrapper around “github-fetch”
14:48
<annevk>
Ah, okay
14:51
<annevk>
zcorpan: an interesting thing you might want to test with insertRule is using it on cross-origin stylesheets
14:51
<annevk>
zcorpan: apparently not all browsers throw
14:51
<annevk>
zcorpan: opaque cross-origin, not CORS
14:55
<zcorpan>
annevk: yeah. filed https://github.com/w3c/web-platform-tests/issues/5526
15:14
<annevk>
When I run https://w3c-test.org/service-workers/service-worker/client-navigate.https.html Firefox finds five tests and Chrome three
15:34
<annevk>
Domenic: maybe remove StructuredCloneWithTransfer and add messageerror? Otherwise everyone that uses it needs to update twice
15:35
<wanderview>
annevk: yea, that test is incorrect and timesout in chrome... I'm fixing it
15:36
<wanderview>
although in firefox I see 7 tests?
15:37
<Domenic>
annevk: hmm maybe
15:38
<annevk>
Domenic: if we don't do that it seems best to tightly couple it with together with SAB
15:38
<annevk>
Domenic: so you have SAB + messageerror + removal of StructuredCloneWithTransfer
15:38
<annevk>
Domenic: separate from that we can have 1) rework of worker internals to make agent clusters possible
15:38
<annevk>
Domenic: 2) definition of agent clusters upon reworked internals
15:38
<Domenic>
annevk: asynchronous for cancel signals isn't important. It's forced if you are only using ECMAScript and your only way of doing notification is promises. But if you have an event primitive then you're better of sync. It avoids a lot of headaches, e.g. trying to create composition operators (like "follow" or "race"), which is basically impossible with async.
15:40
<annevk>
Domenic: it's not weird that the cancel signal says cancel and the fetch says TypeError: "invalid URL"?
15:43
<Domenic>
Hmm why would that happen?
15:44
<annevk>
Domenic: fetch("https://test:test/";); controller.abort()
15:45
<annevk>
Domenic: example is outlined in more detail in the whatwg/dom PR
15:45
<Domenic>
Why isn't fetch validating the URL sync?
15:45
<annevk>
Domenic: it is?
15:46
<Domenic>
Ah right
15:46
<Domenic>
Yeah seems fine then
15:46
<Domenic>
It's just like any other case of passing the signal to someone who ignores it
15:48
<Domenic>
even if you did async it'd still be the same errors, just in the other order
15:49
<annevk>
With async we could .then() the promise returned by fetch() and dispatch cancel from there if the exception was cancel
15:49
<Domenic>
Sure, but you can do that with sync too
15:49
<Domenic>
It's pretty unnatural in both cases, IMO
15:50
<annevk>
What is unnatural?
15:50
<Domenic>
To wait instead of just calling controller.cancel() immediately
15:50
<annevk>
That's not what I'm saying?
15:51
<annevk>
I'm saying that you'd delay updating the signal
15:51
<Domenic>
Then I don't understand; are we still using the example code `fetch("https://test:test/";, { signal: controller.signal }); controller.abort()` ?
15:52
<annevk>
Domenic: yeah, but also with an event listener on the signal
15:52
<Domenic>
Can you type the example then?
15:52
<annevk>
Domenic: https://github.com/whatwg/dom/pull/434#issuecomment-292869591
15:53
<Domenic>
I'm confused, I thought you were saying that you would .then() the promise before doing controller.abort()
15:54
<annevk>
Domenic: no, I was talking about specification-internals to delay notifying the signal about what happened until we're sure
15:54
<Domenic>
How does the signal/controller know about fetch() promises?
15:55
<annevk>
Domenic: fetch() would have that as part of its signal logic
15:55
<Domenic>
So then it doesn't matter, because by the time fetch() notifies the signal, controller.abort() has already been called
15:55
<annevk>
Domenic: yes, but if the fetch() didn't end up being aborted because of it, signal wouldn't have had its event fire
15:56
<Domenic>
why not? controller.abort() was called...
15:57
<annevk>
Because nothing got aborted
15:57
<Domenic>
how is that possibly true if controller.abort() is called?
15:58
<Domenic>
maybe you can write up the alternate spec for controller.abort() you are envisioining
15:58
<Domenic>
because the spec for it right now is very clear that it would cause the signal to move to the aborted state
15:58
<Domenic>
and even if you introduce a microtask delay before doing so, that wouldn't change anything
15:59
<annevk>
Domenic: basically, you'd put fetch() in charge of changing the state, and fetch() only changes the state if aborting itself ended with an AbortError
15:59
<Domenic>
So you'd remove signal.abort() entirely?
16:00
<Domenic>
*controller.abort()
16:00
<annevk>
Domenic: no, that'd still exist to initiate the whole setup
16:01
<annevk>
controller aborts, fetch aborts, waits for rejection, if it gets a rejection and its an AbortError, changes state of the signal
16:01
<Domenic>
This sounds very unlike the existing PR, so I'd need to see it written up. I can't imagine how that would work without very tight coupling between fetch and these controller/signal objects.
16:02
<annevk>
I dunno though, I was just trying to figure out if there was a way to make less code paths run
16:02
<Domenic>
It may help to re-conceptualize canceled/oncancel as cancelRequested/oncancelrequested
16:02
<Domenic>
it's just setting a boolean/firing an event to let you know a boolean was set
16:03
<annevk>
Yeah, maybe that's good enough
16:03
<Domenic>
then consumers like fetch() can look at that boolean/react to the event and say "ok, i see i was requested to cancel, let me do that"
16:04
<annevk>
Domenic: see, I didn't realize the event was mostly for JavaScript-implemented consumers of signals
16:04
<Domenic>
ah ok :)
16:04
<annevk>
Domenic: I thought the event was for end users of the fetch() API as well
16:04
<Domenic>
Nah, they just use the fetch() return value.
16:05
<annevk>
Domenic: I'm not sure about the comments from rbuckton then
16:05
<annevk>
Domenic: I'll post an update on the issue
16:43
<gsnedders>
hmm, is it possible to detect background-image loads now using the performance APIs?
16:45
<annevk>
gsnedders: yeah, if the stylesheet is CORS-same-origin
16:48
<gsnedders>
I'd totally missed that until now. That's pretty significant.
16:48
<jyasskin>
annevk: FWIW, I'd like to lobby against including "abortion" anywhere in the abort/cancel spec, even in example code. It's too charged, at least in the U.S.
17:04
<dmarr>
i wish i could figure out why fetch isn't sending if-none-match headers. it does when i make a call from the console, but not from my webpack-bundled app
17:05
<annevk>
jyasskin: I thought it might be, hence suggesting "stop" / " halt"
17:05
<annevk>
jyasskin: but those don't work well with the existing "AbortError"
17:06
<jyasskin>
annevk: Yep. Even treating "abort" as a noun would be fine with me.
17:06
<annevk>
jyasskin: having said that, you'd think all the child mutation algorithms would be a little worse
17:06
<jyasskin>
I personally lean toward using CancelError, CancelToken, CancelController, and then using cancel[l]ation in the non-normative bits of the spec, but I'm not that picky.
17:07
<jyasskin>
"mutation" isn't a political issue, unless you're way too deep in the X-men. ;)
17:09
<annevk>
jyasskin: if we're going to use "AbortError" we might as well align all the terms
17:10
<jyasskin>
Yeah, in that case, it should be "an abort", etc.
17:22
<dmarr>
what does it mean when my browser gives me a 200 but its from disk cache
17:25
<annevk>
dmarr: I don't understand the question
17:26
<dmarr>
annevk: like a GET /foo is 200 but being served from disk cache. Shouldn't that be a 304?
17:26
<dmarr>
or I guess what are the cases where something will 200 but be a cached response
17:27
<annevk>
dmarr: unless it was not a 200/304 to begin with, you'll almost always get a 200 through fetch()/XHR
17:32
<dmarr>
annevk: I get a 304 as expected when using the if-none-match header with a value of the current etag from the server
17:32
<dmarr>
but on other requests not using if-none-match i get 200 from disk - I guess thats normal
17:33
<annevk>
dmarr: yeah, there's a few ways to get the 304 back, but by default it's always "flattened" into a 200
17:43
<annevk>
Hmm, so dedicated/shared workers have pointers to 1) one or more documents 2) zero or more child workers 3) a parent (not covered by HTML) 4) a browsing context (for the purpose of checking if script is enabled; does that really live there?)
17:43
<annevk>
Seems so messy
17:45
<wanderview>
annevk: implementation-wise I am thinking of making Workers reference Client objects
17:45
<wanderview>
should be easy for the SharedWorker case
17:45
<wanderview>
less sure about dedicated workers
17:46
<wanderview>
so SharedWorker would have an array of attached Client objects instead of an array of attached documents
17:47
<wanderview>
might need a bit of work-around logic to make it handle the replaced about:blank document case since the Client is the environment instead of the document
17:49
<annevk>
wanderview: hmm, the replaced about:blank document case makes me wonder if it's not global objects already
17:49
<wanderview>
annevk: we could probably make it so... its got relatively low usage and a bit of a corner case
17:49
<annevk>
Guess I should write tests, but not today
17:58
<aklein>
annevk: I'm trying to grok your comment on https://github.com/whatwg/dom/pull/434#issuecomment-292696490 about cancel tokens not meeting the fetch use case. what do you mean by "we need objects that we can extend"?
18:00
<dmarr>
annevk: so the case where no if-none-match is sent in the request and a cached 200 comes back, is there another response header that causes that to happen? My server is sending etag, cache-control, date
18:53
<Domenic>
annevk: I believe bz has commented a few times that the scripting-enabled checks in the spec don't match impls :-/
19:21
<annevk>
dmarr: custom if-none-match?
19:22
<annevk>
aklein: what is the shape of a theoretical cancel token? Can it do events?
19:23
<annevk>
aklein: the signal we have is also going to be able to carry priority data and other such things
19:24
<annevk>
Domenic: did he say what impls do? I guess we need to make it official as long as noscript is around? Could also just remove the concept…
19:25
<jyasskin>
annevk: Dumb question: If we have the ES AbortSignal.register(callback) function, what's the benefit of using events instead?
19:25
<Domenic>
annevk: context?
19:25
<botie>
hmmm... context is https://github.com/validator/validator/issues/284
19:26
<annevk>
jyasskin: you can have a different event for priorities?
19:26
<jyasskin>
aklein: https://github.com/whatwg/fetch/issues/447#issuecomment-281731850 has the FetchController design. It'd want to be a subclass of the AbortController, or have AbortController mixed into it.
19:27
<jyasskin>
annevk: Ah, instead of having multiple signals, you'd have one signal with multiple events.
19:27
<annevk>
Domenic: your statement about scripting-enabled
19:28
<Domenic>
annevk: ah right. Let me dig it up. I think most UAs still have a toggle, someone showed me where Chrome's was recently.
19:28
<annevk>
jyasskin: yes, a FetchSignal tracks a bunch of bits and can then be reused across fetches
19:28
<Domenic>
Yeah and FetchSignal needs EventTarget anyway for other events.
19:31
<Domenic>
Hmm found https://github.com/whatwg/html/issues/1580 so far, not the issue I was thinking of though...
19:34
<jyasskin>
annevk/Domenic: If the ES system gave AbortSignal an onabort(callback) function instead of a register(callback) function (https://github.com/rbuckton/prex/blob/master/docs/cancellation.md#tokenregistercallback), would that be sufficient to let FetchSignal extend it as you want?
19:34
<Domenic>
No
19:35
<Domenic>
Because the inheritance hierarchy wouldn't work
19:35
<Domenic>
We need to inherit from EventTarget, not from ESAbortSignal
19:35
<jyasskin>
Oh, because EventTarget is a base class instead of a mixin. :(
19:35
<Domenic>
And it's a strictly worse experience for our users to have two ways of registering events, anyway
19:35
<Domenic>
Better to just use addEventListener for both abort and the other things
19:36
<Domenic>
There's no benefit to putting this in ES without syntax (e.g. my old third state proposal)
19:39
<jyasskin>
Sharing code with Node would be a benefit, although not to pure web users, and I see that moving away from addEventListener would be painful. aklein, is that convincing to the ES folks?
19:40
<Domenic>
node can share code, just like with fetch, they just need to copy the API over
19:40
<Domenic>
https://github.com/matthew-andrews/isomorphic-fetch/ etc.
19:41
<jyasskin>
Domenic: They'd copy the AbortSignal implementation including the EventTarget implementation, right?
19:42
<Domenic>
Yeah, or they'd make their own using EventEmitter, their choice
19:44
<jyasskin>
Domenic: Thanks.
19:44
<annevk>
Now that observables are gone we could revisit a better EventTarget and maybe get Node on board
19:44
<annevk>
With full compat on our side of course
19:46
<Domenic>
annevk: it's actually on my quarterly goal to write a spec for event-delegation and and event "namespaces" (https://github.com/whatwg/dom/issues/215 and https://github.com/whatwg/dom/issues/208) as first steps in exploring their feasibility and getting that rolling
19:47
<annevk>
Cool cool
19:47
<TabAtkins>
Ugh, observables got dropped?
19:48
<TabAtkins>
Events suck. :(
19:59
<aklein>
annevk: where do you see observables being gone?
20:28
<Domenic>
TabAtkins: thoughts on https://github.com/whatwg/html/pull/2517 ?
20:30
<TabAtkins>
Domenic: You want the attr-value type file:///usr/local/google/home/tabatkins/bikeshed/docs/index.html#dfn-types
20:30
<TabAtkins>
Whoops, one sec for better links
20:31
<TabAtkins>
https://tabatkins.github.io/bikeshed/#dfn-types
20:33
<Domenic>
TabAtkins: ah makes sense, so the for is... for="link/rel"?
20:33
<TabAtkins>
Yup
20:33
<TabAtkins>
Then <{link/rel/serviceworker}>
20:34
<TabAtkins>
I think <{rel/serviceworker}> might work too? I forget how strict I am with that shorthand.
20:36
<Domenic>
Awesome, thanks
21:03
<aklein>
jyasskin: I'm unclear as to why events are now considered a requirement of this API, while they weren't when the plan of record was to wait for whatever TC39 came up with. but I do think I understand annevk's comment about "extending" now
21:31
<wanderview>
annevk: JakeA: that cross-origin referer footgun in new Request() hit mobile twitter :-( https://bugzilla.mozilla.org/show_bug.cgi?id=1352101#c10
21:31
<wanderview>
our fix is in FF54... has chrome started implementing the spec change yet?