profile
viewpoint
Tab Atkins Jr. tabatkins Google United States http://xanthir.com Programmer, web standards hacker

tabatkins/bikeshed 646

:bike: A preprocessor for anyone writing specifications that converts source files into actual specs.

LeaVerou/color.js 88

Color space conversion & manipulation lib. Work in progress.

tabatkins/depixel 14

:sparkler:Depixelating Pixel Art

tabatkins/bignum 8

:keycap_ten: JS Bignum classes

birtles/web-animations 5

Temporary repo for the draft Web Animations spec and who knows, maybe some tests, presentations, prototypes, cake recipes etc.

fantasai/csswg-status-radar 3

CSSWG spec status scratchpad

tabatkins/animal-diet 1

Personal project for managing animal diet sheets.

tabatkins/cssmath 1

⊕⊖⊗⊘ Testing ground for a template-tag-based DSL for CSS math

tabatkins/dom 1

DOM Standard

tabatkins/explain-git-with-d3 1

Use D3 to visualize simple git branching operations.

issue commentwhatwg/html

"create new browsing context" incorrectly calls algorithm requiring document before document is set

In general, we don't try to maintain consistency in between individual algorithm steps. E.g. "create a new browsing context" is doing a bunch of setup of related objects, so it's fine if during some of those steps, not all of the relationships which are usually established are yet set up. The point is that by the end of the algorithm, they will be.

OK this makes perfect sense and I think clears up a lot of my confusion, I think I was being too pedantic/nit-picky, sorry for the rabbit hole. Thank you very much!

Back to the actual problem, I agree that passing a URL into #set-up-a-window-environment-settings-object and having that algorithm's step 3 set the Window's URL to it works fine. In that case, I'm inclined to put a note saying that we can't just use the associated document's URL because it might not be set yet, but the two URLs are ultimately equivalent, if that sounds good?

wanderview

comment created time in 15 minutes

push eventtabatkins/bikeshed-data

bikeshed-bot

commit sha f99af2f929157e8805d328582f0641a87c21e4a1

update 1 files: wpt-tests.txt

view details

push time in 16 minutes

push eventw3c/csswg-drafts

jfkthame

commit sha c8788c6bccb30f6c3b59414332939ad4d39a5adc

Remove throw

view details

push time in 22 minutes

PR merged w3c/csswg-drafts

[css-font-loading] Remove step 3 from FontFaceSet.check()

This fixes #5744 by removing the exception-throwing step in the algorithm (that nobody has implemented), and adjusting the related note to reflect this.

+4 -13

2 comments

1 changed file

jfkthame

pr closed time in 22 minutes

issue closedw3c/csswg-drafts

[css-font-loading] FontFaceSet.check() method: reality vs spec vs privacy

The description in the spec of the FontFaceSet.check() method does not match reality as implemented in any of the major browsers I've tried; moreover, the behavior called for by the spec is bad for privacy as it trivially exposes the set of installed fonts.

Consider the behavior of document.fonts.check("12px foobar"), assuming no font family named "foobar" is present.

According to step 3 of the algorithm in the spec,

If found faces is false, throw an XXX error and abort this algorithm.

this should throw an (unspecified?) error.

No browser I have tested does this. It seems that:

  • Gecko (Firefox) returns true, which makes sense in terms of the general description of what check() does:

If the given text/font combo will render without attempting to use any unloaded or currently-loading fonts, this method will return true

but does not take account of step 3 in the algorithm, which is explicitly called out as the second "special case" in the note.

  • Webkit (Safari) also returns true.

  • Blink (Chrome, Brave) returns false, which I believe must be considered a bug: the given font/text will not "use any unloaded or currently-loading fonts", so this is both misleading to the author (it implies the given font is known but currently unloaded or loading) and non-spec-compliant.

The fact that browsers are supposed (per spec) to throw if check() is called with a non-existent font name was noted 5 years ago in bug reports against both (Gecko)[https://bugzilla.mozilla.org/show_bug.cgi?id=1252821#c7] and (Blink)[https://bugs.chromium.org/p/chromium/issues/detail?id=591602#c7], but the situation remains unchanged: no browser does so.

Given that:

  • Nobody has apparently implemented step 3 of the specified algorithm (so the web cannot be depending on it); and

  • If implemented, it would offer authors a trivial way to probe the set of installed system fonts, which represents an attractive fingerprinting vector;

I propose we should simply remove this step (and the corresponding note about the special-case behavior) from the spec.

(I am aware that font fingerprinting can also be achieved through @font-face, as mentioned in the spec, but FontFaceSet.check() with the throw-on-unknown-font behavior would make it particularly easy and efficient for authors.)

closed time in 22 minutes

jfkthame

pull request commentw3c/csswg-drafts

[css-font-loading] Remove step 3 from FontFaceSet.check()

@jfkthame have you linked your W3C account with your GitHub account. Our IPR bot claims not to know who you work for. We do, of course, but the bot won't listen to us.

I have now. :) (I wasn't aware of that procedure/requirement. But it turned out to be trivial, of course.)

jfkthame

comment created time in 28 minutes

issue commenttc39/ecma402

Option eraDisplay in Intl.DateTimeFormat()

Yes, I will. I'll join with Google Meet.

Louis-Aime

comment created time in 30 minutes

issue commenttabatkins/bikeshed

Can't docker-install

Ah no worries. To be honest I have no idea how docker works either. I decided to use it for the first time today because I wanted to see what all the fuzz was about. I suppose pip3 install bikeshed is the workaround then.

jakearchibald

comment created time in an hour

pull request commentw3c/csswg-drafts

[css-font-loading] Remove step 3 from FontFaceSet.check()

@jfkthame have you linked your W3C account with your GitHub account. Our IPR bot claims not to know who you work for. We do, of course, but the bot won't listen to us.

jfkthame

comment created time in an hour

issue commenttc39/ecma402

Option eraDisplay in Intl.DateTimeFormat()

@Louis-Aime would you be able to join the ECMA402 monthly meeting tomorrow to discuss this ?

Louis-Aime

comment created time in an hour

issue commenttc39/ecma402

DateTimeFormat: consider adding more timezone display options

perhaps id / locode should be 'getters' rather than format option in this case.

What does this mean (of be a getters)? could you show me some example JS code to express what you wish the API would do for that?

I meant as getters on resolvedOptions. i.e. my default zone is Central Time, so I could imagine a resolvedOptions taking into account environment defaults, the -u-tz subtag, etc etc and returning { timeZone: 'America/Chicago', timeZoneLocode: 'uschi' }. That's the concept. (of course timeZone is already there)

so far the "tz" in the "-u-" extension is ignored per: https://ecma-international.org/ecma-402/#sec-intl.datetimeformat-internal-slots

NOTE 1 Unicode Technical Standard 35 describes three locale extension keys that are relevant to date and time formatting, "ca" for calendar, "tz" for time zone, "hc" for hour cycle, and implicitly "nu" for the numbering system of the number format used for numbers within the date format. DateTimeFormat, however, requires that the time zone is specified through the "timeZone" property in the options objects.

jungshik

comment created time in an hour

issue commenttabatkins/bikeshed

Can't docker-install

I'm having the same issue, is there a workaround for this?

jakearchibald

comment created time in an hour

push eventtabatkins/bikeshed-data

bikeshed-bot

commit sha 094e766fc7693383677359549c6e874b2e2baa88

update 1 files: wpt-tests.txt

view details

push time in an hour

pull request commentweb-platform-tests/rfcs

RFC 72: Address space overrides.

I will open issues against other browsers to seek their input. Thanks for the discussion so far!

letitz

comment created time in 2 hours

pull request commentweb-platform-tests/rfcs

RFC 72: Address space overrides.

To keep this RFC up-to-date, at this point I believe WPT's stance is that this should be done via browser flags rather than have the testrunner (or some setup done by the testrunner) have system privileges. Both Blink and Gecko infra have said that having privileges in this way is at least not commonly done (but not explicitly banned).

We would like to see the aforementioned issues against browsers opened and discussions occur there (please link to them in this discussion). If a reasonable number of browsers think the level of support is unacceptably high, we can revisit the system-privilege angle.

letitz

comment created time in 2 hours

pull request commentweb-platform-tests/rfcs

RFC: Support adding URI fragments for reftests

@jgraham and I discussed this RFC today (apologies for the delay). We agree that the multiple variants problem needs some thought; both of us have committed to think about it and get back to this issue. Please ping me if there isn't an update by next week :)

lilles

comment created time in 2 hours

issue commentw3c/csswg-drafts

[css-fonts] font-variant-numeric: diagonal-fractions, in most fonts, doesn't work with semantic markup

I have contacted David Jonathan Ross, creator of Gimlet, with a pointer to this issue in case they have time to comment.

jyasskin

comment created time in 2 hours

push eventw3c/csswg-drafts

fantasai

commit sha eb61086757842c0b38489c856ba434b8fe4f9013

[css-text-3] Editorial rewrite of bidi + line boxes section, for clarity. #5759

view details

fantasai

commit sha 83e344e3c19476224659dcc464e858c2ee868218

[css-text-3] Simplify examples. #5759

view details

push time in 3 hours

issue commentwhatwg/html

"create new browsing context" incorrectly calls algorithm requiring document before document is set

#concept-document-window mentions that the Window's associated document is set when the Window is created, when it actually isn't. But now I'm confused about that.

Well, we could fix that by just removing the sentence, or making it less specific. I think the real intention of that sentence is "around the time the Window object is created" or "shortly after the Window object is created" or "in the same algorithm where the Window object is created".

In #creating-a-new-browsing-context in between steps 7 & 8, does the Window have an associated document? I guess it gets implicitly "set" by virtue of the Window being constructed?

No. It's set in step 15.

In general, we don't try to maintain consistency in between individual algorithm steps. E.g. "create a new browsing context" is doing a bunch of setup of related objects, so it's fine if during some of those steps, not all of the relationships which are usually established are yet set up. The point is that by the end of the algorithm, they will be.

This does require a bit of careful code review to make sure none of the intermediate steps (in this case, steps between 7 and 15) use the "associated Document" concept. And indeed, currently step 10 is wrong in that regard: that's the original subject of this issue. But we can fix this in a targeted manner.

#concept-document-window mentions that the Window's associated document is only set once, that is, when navigating from the initial about:blank document to the document that the Window will carry "forever" I guess. However it is in fact set twice:

It doens't say it's only set once. It says it's only changed once. It's set "when the Window object is created" (which, as per the above, really means "in the create a new browsing context algorithm"), then it's changed in history traversal.

To be clear, the fact that all of this has managed to confuse you means there's definitely room for improvement. E.g. I can understand how the spec making a distinction between "set" and "changed" is confusing. I'm just explaining how things currently are meant to fit together :). For another instance:

It can't be null, because the spec says the member is a Document, not "a Document or null", so is it just a weird un-initialized Document?

Right, it's "un-set". I think we've previously shied away from making this very temporary, intra-setup-algorithm state part of the type definition for "associated Document", but maybe we should. We can just be very clear that it's only null for a few algorithm steps around the time Window and Document objects are being creatd, so that callers don't start thinking that it's necessary to null-check every use of "associated Document".

wanderview

comment created time in 3 hours

push eventtabatkins/bikeshed-data

bikeshed-bot

commit sha d015134e13951786bc9768c597ede3a641504433

update 1 files: wpt-tests.txt

view details

push time in 3 hours

pull request commentwhatwg/html

Allow an image to indicate its own density and correct its intrinsic size

Since an implementation of this has landed in both WebKit and Chromium, then perhaps "needs implementer interest" label should be removed? I think we can assume implementing the proposal counts as interest.

In addition, in the checklist in the top comment, Chrome and Safari could be listed as interested. The tests line could be checked off. Ideally, a Firefox implementation bug should also be filed.

noamr

comment created time in 3 hours

issue commenttc39/ecma402

Require options to be an object

I'm not available for the 402 monthly meeting tomorrow to discuss this, but if there's anything blocking merging the editorial PR, please let me know!

sffc

comment created time in 4 hours

push eventtabatkins/bikeshed-data

bikeshed-bot

commit sha 3c7b158ad32c130d68a3941f496bc276e406e49e

update 1 files: anchors/anchors-na.data

view details

push time in 4 hours

delete branch w3c/csswg-drafts

delete branch : css-cascade-5-wrong-audio-link

delete time in 4 hours

issue closedw3c/csswg-drafts

[css-text-3] Persian examples correct?

8.3. Bidirectionality and Line Boxes https://www.w3.org/TR/css-text-3/#bidi-linebox

Example 31 I'm curious about whether the Persian example text و·کمی is correct. I was surprised to see the

· U+00B7 MIDDLE DOT

(The meaning doesn't seem to match the Latin alternative, ie. it doesn't say 'Arabic'.)

closed time in 4 hours

r12a

push eventw3c/csswg-drafts

fantasai

commit sha ef471fc3dd621eb37846e1e45a45e7b79af36aba

[css-text-3] Fix example text. #5758

view details

push time in 4 hours

issue commentw3c/csswg-drafts

[css-text-3] Note unclear in bidi & line boxes

The paragraph is talking about the inline base direction of the line box, not of the paragraph within it. We need to distinguish, because the text content always has an inline base direction but the line box is sometimes neutral. I'll try to make that clearer.

r12a

comment created time in 4 hours

issue openedw3c/csswg-drafts

[css-highlight-api] Should the HighlightsRegister be renamed to HighlightsRegistry

https://www.w3.org/TR/css-highlight-api-1/#highlightsregister

An object that you register things on is a "registry". The list of registered objects is a "register". I think in this use case, "registry" makes more sense.

Prior art: ServiceWorkerRegistration, RTCIdentityProviderRegistrar, CustomElementRegistry

created time in 4 hours

push eventtabatkins/bikeshed-data

bikeshed-bot

commit sha 3018bff1c1420b8afb233fba2ab9c2e59e423982

update 1 files: wpt-tests.txt

view details

push time in 4 hours

push eventwhatwg/html

Domenic Denicola

commit sha 65b2af51897b10130f7a6cb2b403cc096b924265

Gate beforeunload dialogs behind sticky activation Closes #6139.

view details

push time in 5 hours

more