Déjà vu, huh? I announced joining Mozilla and have been working since October 1st, under a 6 month fixed-term contract. Until now! Today I signed a new offer to become a permanent employee! 🎉
Why does it matter?
- I will continue working on Firefox/Gecko for the foreseeable future!
- My work seems to be important enough for me to continue :^)
Work (October - December)
As a bonus, here’s a detailed recap of significant work I’ve done since joining (October - December), with some comments/rants (in order of ship date):
User activation API (Firefox 120)
This wasfor oncerelatively easy/small and probably the simplest API I’ve added, mostly hooking up the existing internal API to the API as per spec. A good project to start with.Lazy loading iframes (Firefox 121)
This was not like the last. After a ~week of focused development, I had a decent WIP patch. Some refinement later, we now passed most WPTs and I thought it was good enough to ship. Even though the end of the 120 release cycle was very close, I decided to push it through on by default as I thought it would be fine (see: naivety).
After a (very helpful!) bug report in Nightly, I switched to Nightly only. Delayed to 121, I enabled it by default again after it was fixed thanks to a handy patch.<hr>
in<select>
(Firefox 122)
I opened a WIP patch in September before getting hired, so I stopped working on it since then. Some time later, it was agreed it would be good to have so I started working on it again. This kind of spec change seems on the surface really easy - the eventual patch wasn’t even that complex (imo) - but it was quite the experience for me (I only blame my unaware past self, everyone else was great):- The HTML parser. Code changes were quite simple after some helpful review comments.
- The toolkit (~desktop UI). Changes were okay, a bit overcomplicated to support styling the
color
of<hr>s
but understandable. - Android. The tiny GeckoView change was incredibly easy on my end, the only problem is it doesn’t work. Fenix (Firefox for Android)’s menus for
<select>
do not support separators yet, so nothing renders in the menu. More work is needed there to match desktop completely, but that’s okay for now (imo). - The spec. You might think (as did I) “How could the spec be complex? It’s just adding if
<hr>
in<select>
, show separator”. You’re right, that’s essentially what the spec PR did. However, no. Pointed out in a great comment on the patch (I would have missed this otherwise, thank review processes), we did weird things when used in a<select>
with asize
>1 (~showing part of the dropdown in the element). I checked Blink and WebKit expecting it to be a mistake in my patch, but actually they do the same as my WIP patch did, not render separators. This feels wrong, or at least not what I would expect, so eventually I opened a spec issue for it (for now Gecko matches others). Another shoutout to<hr>
not being allowed in<optgroup>
. - The WPT tests. After accidentally finding some WebDriver bugs due to Fission (~cross-origin process isolation) not being cooperating, I ended up marking them as flaky, only passing with Fission off. I tried fixing the WD bugs, but ended up more confused than I started (modern browsers are complex indeed).
- Let’s start by cleaning up older Gecko code to stop using ~deprecated internal Intl APIs.
- First batter up: Make XSLT not use sort key objects for collation. A nice small patch replacing old code with a nicer, smaller implementation using newer Intl APIs, yay!
- Next: Drop all IDB locale custom support. Two huge patches, removing ~3K lines of code in total. As of writing 1/2 have landed!
- I also began trying upstream some small ICU4X patches:
- Expose if a date is in a leap year: relatively straight-forward patch to expose an already existing internal API.
- Add
is_normalized_up_to
to Normalizer: the patch itself is quite nice, but accidentally poked a nest restarting a (now resolved?) debate 😅. Update soon™.
- Let’s start by cleaning up older Gecko code to stop using ~deprecated internal Intl APIs.
Entire year recap
For a recap of notable events/contributions/work throughout the entire year:
- Implemented various notable things in Firefox (with ~4x as many random minor fixes):
@media (scripting)
(113)- CSS
NaN
/infinity
fixes + ship (114) @import supports()
(115)URL.canParse()
(115)- – Exams –
<search>
(118)- CSS Values 4 functions ship (118)
attr()
fallback (119)@media (prefers-reduced-transparency)
(behind pref)@media (inverted-colors)
(behind pref)- NVIDIA Video Super Resolution (behind pref)
- – Joined Mozilla –
navigator.userActivation
(120)<iframe loading=lazy
> (121)<hr>
in<select>
(122)
- Did my first conference thing by running a session about my experience being a new contributor to web engines at Web Engines Hackfest (didn’t expect today at the time!). I’m not planning to speak or anything this year, but maybe the next?
Resolutions
- Meet and talk to more people! This is mostly to simply meet cool people (yes that includes you) and also half to improve my own anxiety ;)
- Travel more! I am already planning to attend 2 conferences so far (and probably 2 work things), potentially more?
- Start doing (more) work on standards and other upstream projects like ICU4X
- Get my JS engine into a mostly usable state for basic projects?
Talking with people it still feels.. incredible to say where I work and what I do. I am very privileged to be in my current position and continue to be thankful to everyone who helped me along the way to today. Thanks for reading! I hope 2024 goes well for you :)