Quo vadis, Epiphany

It’s time for a brief (and late!) recap of some of the most notorious things we did in Epiphany for 2.30, and a short update on what’s already happening in the road to 3.0.


For 2.30 we focused on fixing all the regressions introduced by the switch to WebKit in 2.28. Overall we did a pretty good job, and there’s only a few things missing to reach the no-regressions goal. Here’s everything that used to work in 2.26, didn’t work in 2.28 and that we fixed for 2.30: middle-click to open clipboard contents, bring back our old context menus, up arrow functionality, do a web search with the URL entry contents on Ctrl+Enter too, EphyEmbedSingle::handle-content signal for external download managers, favicon support, send HTTP ‘Accept-Language’ headers with the user language preferences, custom User-Agent support, javascript: and mailto: URI support, close and movement DOM methods for window, shift+click in text areas, and, yes, form authentication auto-completion.


OK, so that’s a lot of stuff, but we were not happy with only bringing back old functionality, we also made some improvement here and there:

GNOME Keyring storage for form auths + Infobar goodness:

In 2.30 not only all your form authentication data is stored in the keyring, but we walked the extra mile to migrate the data in the gecko profile to the new format (not a particularly funny thing to do) and we now show a shiny infobar each time you are about to submit never-seen-before data:

Page cache

After much painful debugging we managed to make the Page Cache support in WebKitGTK+ stable enough for widespread usage. These means that when a page passes some preconditions its whole in-memory representation will be saved for some time, making going back to it with the Back/Forward button blindingly fast. Fast is Good.

Favicons in the Tab Menu:

Back in 2007 I opened a bug suggesting to put favicons next to the page titles in our Tabs menu, arguing that this would make it much much easier to identify a certain page when you have lots of tabs opened; having said that, I promised to attach a patch with the fix “soonish”.

3 years and one week later Olivier Tilloy probably got fed up of waiting and decided to just send a patch himself, making our lives (well, at least mine) much better:

Hey, can you see the bug in that screenshot? An opportunity to contribute!

Disable all plugins at runtime:

Back in the day all you could do in Epiphany was to disable the Java plugin, which nowadays is, to say the least, a feature of questionable usefulness. What we all want to do, surely, is to disable Flash unless we actually need to use it, right? Actually, make it all plugins in general, just in case:


And what about the next release? We haven’t stopped working. In fact at Igalia we are increasing our commitment with the platform, and we are growing the team: Alejandro García is working on rendering performance and in reminding everyone how many years it takes to get anything done in software, always; Sergio Villar is working on libsoup, aiming to finish the disk-cache for 3.0; Mario Sánchez is focused on our accessibility support, fixing bugs left and right (with the help of two of our interns, Diego Escalante and José Millán); Philippe keeps rocking on the media front, and our most recent hiring, Martin Robinson is rewriting and improving our DnD support so fast that it’s hard to keep track of it! Oh, and yeah, myself I’m still working on the GObject DOM bindings, a new post about all the new features I’ve added these past weeks is way overdue.

And what about Epiphany? For the next release (due on Wednesday) you can expect a bunch of bugfixes and some UI improvements. One that I’m enjoying a lot is something I implemented last week; I finally got rid of our statusbar for good, and now by default we’ll show contextual messages in a Chrome-like embedded statusbar (which we already had, but that I have reimplemented and made visible by default):

More vertical space for web content, less code!

Posted in Blogroll, General, webkit | 17 Comments

Just the bindings, ma’am

My goodness was that cheese good

After finishing some loose ends in a remarkable place I found in Bairro Alto the GObject DOM bindings are in good enough shape to start doing some damage in this world (queue video that probably won’t appear in Planet GNOME, click into my blog to see it):

What you just (hopefully) saw is a GTK+ button that, when clicked, gets all the links from its cousin WebKitWebView and makes them do a small bounce, all with the DOM APIs you know and hate^Wlove exported through GObject.

For instance, to get all links simply call webkit_dom_document_get_links on the WebKitDOMDocument associated with the WebView, which will return a WebKitDOMHTMLCollection. Now we just iterate through the elements, get the WebKitDOMCSSStyleDeclaration associated to each one, and set the CSS properties we want on each one. Simple as that! No “evaluate this string as JavaScript”, and no using the JavaScript bindings through JavaScriptCore. In fact, since we are generating our own bindings instead of using the JavaScript ones, we can get the proper semantics for GObject toolkits instead of having to live with the decisions other people made for other languages and contexts. You can see the code snippet here; I use a two-step animation instead of using the full-blown css transitions because of a small technical issue that I didn’t want to fix before pushing this post, but of course we should be doing it right in the future. In fact, we should create proper APIs for CSS animations in general, not too different from what you have in, say, Clutter.

Most of the code for this is already in Webkit trunk, and now that the initial phase of the work is done I keep improving the code incrementally and pushing the patches to bugzilla, where my compadre Gustavo promptly reviews them. Now if you’ll excuse me I’ll go to expose all events as glib signals on the DOM objects, watch this space (or the upstream bug) for more updates. Happy hacking!

Posted in Blogroll, General, webkit | 3 Comments

A few days in Lisbon

Starting this Saturday I’m going to spend a few days (at least 7) in Lisbon. Not really on holidays, but since my company is awesome and I just have to do my hours from anywhere I want I figured I might as well see a bit more of the world I live in.

So here’s the deal: if you live in the city, or near, and want to talk about free software, WebKit, GNOME, politics or metaphysics and get a free lunch, you can get that and in exchange you only have to show me around a bit. Or, better yet, do you belong to a LUG or any other social group with some interest in free software?  If you want we can arrange some kind of GNOME/WebKit/Epiphany talk, or we can improvise some kind of hackfest (“Your first GNOME patch”?, “Become a WebKitGTK+ hacker in 4 hours”?). Or maybe you have better ideas? Just leave a comment in my blog, or drop me a few lines at ‘xan at gnome dot org’. See you around!

Posted in Blogroll, General | 1 Comment

WebKit Contributors Meeting

I hadn’t blogged about it yet, but the last weekend I crossed 10 time zones, one ocean and some insane border inspections to attend the first ever WebKit Contributors Meeting. I just returned to my hotel in San Francisco from two hectic days at the Apple campus in Cupertino, putting faces to the names I see daily in my WebKit work and attending some really interesting working sessions and hackatons. Of course a lot of productive discussions and coding happened, but I also value some incorporeal sense of unity and direction that you can get when you put a bunch of people that work together in a project physically in the same place for a couple of days; I’m already looking forward to next year’s meeting, and I thank Apple for organizing the event.

4 of us from Igalia have come to the US (Álex, Philippe, Juanjo and myself), and we’ll stay until Saturday to attend the Linux Collaboration Summit and do some fast-paced sight-seeing around the city (although we already enjoyed a great day off on Sunday with Martin around the city, including the awesome shoe-garden in Alamo Square).

To finish it off, I have to mention that I used the ever productive airplane time and some dead hours these days to advance quite a bit in the GObject DOM Bindings for WebKitGTK+, and that I can already correctly generate large enough portions of it to do actual applications and meaningful unit testing (basically, I cover Document and most of its dependencies!). More about this soon!

Posted in Blogroll, General, webkit | 3 Comments

It’s too late to be a pessimist

Home is an spectacular wake-up call for all of us living on this planet, if we’d only care to listen. Accompanied by a series of stunning aerial images of Earth, the history of our relationship with the environment is quickly reconstructed, and the unsustainability of our current practices made very explicit.

Its authors want the move to have the biggest exposure, and it can be freely distributed with their permission. I personally got it in HD from this torrent, but you can find alternative sources from a quick google search. Go and watch it when you have some time, I think it’s an hour and a half well spent.

Posted in Blogroll, General | 2 Comments

Browser Pong

Fresh from the ovens of Igalia‘s Industrial Web Hackery division I bring you what all of you were waiting for: support for the DOM methods window.{moveTo, resizeTo, moveBy, resizeBy} in WebKitGTK+, and the corresponding fix in Epiphany. What does this mean? It means that Browser Pong now works in Epiphany!

What? Browser Pong? Yes: Browser Pong.

Go nuts, this is better than World of Warcraft.

Posted in Blogroll, General, webkit | 4 Comments

Unless the enemy has studied his Agrippa, which I have

In a few days we’ll release Epiphany 2.29.90, so this is a good time as any to show a few of the new cool things it will bring.

The big one is, without doubt, good enough support for HTML5 video tag for the Youtube HTML5 beta to work. Pretty much all of the credit goes to the dynamic duo of Sebastian Dröge and Philippe Normand, which have been working tirelessly to improve our media support all across the board. As you probably know we use GStreamer for all our media needs, so if you happen to have the right codecs installed stuff will just work out of the box, like it should. Here you can see it in action, playing one scene everybody should know and love:

Screenshot-YouTube - The Chatty Duel---The Princess Bride

Another recently fixed bug is support for windowless NPAPI plugins, contributed by Brian Tarricone. For those of you still enslaved to plugins it should fix a few annoyances, not to mention that it allows for the plugin content to be manipulated alongside the rest of the web content, since it’s rendered directly in the browser window.

The world-famous Diego Escalante, who is doing an internship in our company with the mission of fixing as many Epiphany bugs as he possibly can, reimplemented EphyEmbedPersist on top of WebKitDownload , which will have the visible effect of making those mysteriously broken save-related context menu items work again.

On the same “kill all regressions” mood I spent some time implementing acceptance policies for cookies in libsoup and hooking the new APIs here and there. The result? This pesky items in the preferences dialog should do something again:


When I was not doing that or losing my youth in the depths of WebKit chasing some nasty bugs I’ve also been spending some time on the GObject DOM bindings for WebKit. I’m happy to say that a couple of preliminary patches have been already committed, and the first big-step patch of the process is under active review and hopefully will be accepted shortly, so you should begin to get some exciting new APIs to manipulate web content in a not-so-distant release!

There are just a few of the latest things we have been working on. I’ll, as usual, keep you more or less up to date here, but if you want the gory details of the day to day business, or even get your hands dirty on the stuff yourself, don’t hesitate to join our IRC channels (#epiphany on GimpNet and #webkit-gtk on FreeNode) or mailing lists. Happy hacking!

Posted in General | 18 Comments

WebKitGTK+ Hackfest – Day G_MAXINT

Haven’t blogged about the hackfest since the day zero (although others have done a great job), but I guess I have a good excuse since we have been working all day every day, no time for blogging!

A lot of progress was made in many areas, but I can try to give a brief summary:

  • Gustavo and myself focused on fixing the form password saving regression during the first days. We wrote the basic code to hook into the webviews using JSC, store the auth data in the keyring, and refactored the Epiphany codebase a bit to be able to show infobars with the available options when submitting a form, like most browsers do. I know this was one of the most painful shortcomings of the browser for a lot of people, so I’m happy to put it behind us.
  • Dan, Benjamin and others spent a lot of time hacking on libsoup. The Content-Encoding support landed in both 2.28.2 and master, which should make us render correctly some pages instead of showing gzip compressed garbage. Other things of interest were the GIO Socket support, a requisite for better SSL support (including certificate management) and the so-called URI Loader, which was redesigned and advanced enough for Dan to be able to write basic about: support for Epiphany/WebKit and that is a blocker feature for mail clients that need to support CID URIs (like Modest or Evolution).
  • I spent some time finishing my refactoring of the work previously done in the DOM bindings bug. We are not there yet, but I have a quite smaller patch with a reduced scope (supporting a subset of the Node API) which already works and that I’ll try to upload when I’m back in Finland and that should be easier for the reviewers to accept as a first step.
  • We enabled the page cache support in WebKitGTK+, which uncovered a series of interesting issues that we spent some time fixing up. On top of that Álex also landed the first step of better cache management APIs, a widely requested feature. Both will be important in providing faster and more responsive web content for our users.
  • Oh my God, have to catch a train to Vigo soon and this list is endless!
  • Evan and Behdad teamed up to work on a Harfbuzz font backend for WebKit. They were able to make it show some fancy text by the last day, and the current plan is to land this at some point in the first half of the next year, with WebKitGTK+ and Chromium/Linux sharing most of the implementation.
  • Cody worked on using the new offscreen rendering support in GTK+ for our theming code. He made great progress, identifying some new features we need on GTK+, and hacking up a GtkOffscreenContainer that might end up going into GTK+ upstream and that was enough to make his proof of concept implementation actually show properly themed widgets in a page.
  • Philippe kept rocking on the media side of things, as usual. He finished the HTML5 media control patch which Zan started, and made other nice fixes to our increasingly awesome media support.
  • Martin Robinson worked on various cool things when he managed to find some free time in between his eternal quest to find his missing luggage (which AFAIK he only managed to get back on his way back to Barcelona!), including transparency support for WebViews and his improved DnD code.
  • What else! We worked on accessibility bugs and random epiphany issues (custom User Agent support by Vincent Untz, send the proper Accept-Language HTTP headers on requests by Mario, respecting web context menus including a way to override them to show the epiphany menu…), making our regression list shorter and shorter, and other invisible but important things like making our binaries both smaller and faster to build.
  • We reached some important conclusions on the gaming side of things, like Smash Brothers for the Wii being an insane game, proving that my Ryu totally owns Gustavo’s Ken or finding out about Benjamin’s past life as a Starcraft quasi-progamer. Speaking of games, don’t forget to enter the Konami Code in Epiphany 2.30 :D.


I’m probably forgetting things, but that’s about it. I think we all had a great time, great progress was made, and I want to thank Igalia, Collabora and the Foundation for their sponsoring and support for the event. Let’s do it again next year!

Posted in General | 8 Comments

WebKitGTK+ Hackfest – Day Zero

Arrived yesterday night to Coruña for the WebKitGTK+ hackfest, a couple of hours before Gustavo did. Today he and I kicked off the day zero of the hackfest, before everybody arrives starting tomorrow.

We spent the whole day hacking on form login/password saving, and despite some issues with GNOME keyring being unhappy and dying on us, I can say we made good progress for one day of work:


This is epiphany/webkit master auto-filling my twitter.com login/password after launch, which as some people know is one of our last nasty regressions. There’s still a few things to do, but I’m confident about landing this before we leave Spain. Also, for those of you not following our development closely, the screenshot also shows the twitter favicon, since Gustavo recently fixed our favicon support in master.

Later today, Álex and Philippe joined us. Álex continued working in a tough accessibility bug in WebKitGTK+ he’s been fighting with, and Philippe arrived just in time for a nice dinner downtown. Not bad for one day, considering we were even not supposed to be here today!

Posted in Blogroll, General, webkit | 13 Comments

WebKitGTK+ Hackfest 2009

You might have heard the rumors, and it’s true: we’ll be holding a WebKitGTK+ hackfest right before Christmas, from the 15th to the 21st of December, 2009.

A group of core WebKitGTK+ hackers and contributors will meet at the Igalia offices in A Coruña, and we’ll hack for a week on things like GObject DOM bindings, libsoup, a harfbuzz backend, native theming through offscreen widgets, HTML5 video/audio support and many more things.

I’ve put up a wiki page with all the information we have so far, so keep an eye on it if you are interested. Also, we have two sponsors so far, Collabora and Igalia (thanks!), but we can always use a few more of them. If you feel like you could contribute to advance the state of the Web support in our platform, please drop me a line at my email address, xan gnome org, or contact the GNOME foundation directly.

Happy hacking!

Posted in General | 4 Comments