Friday, 27 July 2007

Brrrrrr

Today was the last scheduled day for major Web-facing features to be landed for Gecko 1.9. As always this "freeze day" was very exciting as many people raced to get large last-minute patches completed, reviewed and safely landed. There was tree breakage, as always, but in general I felt today was less frantic than freeze days in the past. I'm not sure why, because a lot of cool stuff did land!

I landed my CSS 'text-rendering' patch that I discussed earlier. This means, among other things, that on trunk you can now set browser.display.auto_quality_min_font_size to 0 to get maximum quality text on all sites that don't override text-rendering (i.e., all sites!). So on Linux it's now easy to use Pango for everything --- something I know some people have wanted to be supported properly for a long time.

Eli Friedman landed a patch that exposes "full zoom" functionality from Gecko to chrome; there's no UI yet but it is now fairly trivial to create Firefox UI (or an extension!) to scale all the contents of a Web page. This will be great. This will interact nicely with my text-rendering patch because as you zoom in, the font size in device pixels increases so we'll engage high quality mode automatically. It would be really helpful if there was an extension we could use right now for testing ... hint hint ...

Support for 'oncopy', 'onpaste' and 'oncut' events landed --- that's something I know Web authors have been asking for for a while; thanks to Mathieu Fenniak.

Dave Camp's support for client-side access to the conents of local files via <input type="file"> landed (actually a couple of days ago). This is a really neat feature; instead of script having to upload files to a server to work with them, script can now just read the files locally. This could be cool for Webmail previews of attachments being uploaded, for example, or script could just open local text files and interpret their contents. It is also of course very useful for offline apps. He worked with Hixie on this so I think a spec should show up at WHATWG soon.

We also landed fantasai's patch for "overflow containers". This is a mighty piece of work that significantly extends our frame model. It is designed to handle situations where an element B overflows its parent element A vertically and B does not fit in a constrained-height container (e.g. a page) although A does. We need to place a box for B on the next page but its parent A has no box on the page, so what should the box tree look like? There's no easy answer but we decided the least of evils would be to create an "overflow container" box for A: a sort of ghost box that doesn't map any of A's actual content, but only serves as a container for A's overflowing children. This is a difficult part of our code and I'm very pleased that we have a solution. The best part is that it means we have a fighting chance of fixing in 1.9 the infamous "cannot split absolutely positioned elements" bug --- the bug that means printing a document that's mostly inside an absolutely positioned element only ever prints the first page.

Lots of other stuff landed that I have no time to mention here. Hopefully someone more diligent than I will get around to writing it all down.

It's been a long day --- up at 6am for the Gecko 1.9 phone call, and now it's nearly 1am. But it's a fun day, one of the more exciting days in Gecko development. Someone should make CODE RUSH 2 on corresponding day in the next release cycle!