WebKitGTK+ Hackfest 2013: The Network Process
As every year many ideas came up during the WebKitGTK+ hackfest presentation, but this time there was one we all were very excited about, the multiple web processes support. Apple developers already implemented the support for multiple web processes in WebKit, which is mostly cross platform, but it requires the network process support to properly work (we need a common network process where cookies, HTTP cache, etc are shared for all web processes in the same web context). Soup based WebKit ports don’t implement the network process yet, so the goal of the hackfest became to complete the network process implementation previously started by EFL and Nix guys, as a first step to enable the multiple web processes support. Around 10 people were working on this goal during the whole hackfest, meeting from time to time to track the status of the tasks and assigning new ones.
- Andy updated some of the patches already waiting for a review and set up github repo with all those patches so that we all could work without dealing with individual patches.
- Sergio updated the patch proposed by Balazs to implement the bits required to connect the network process with the web process using UNIX domain sockets.
- Brian added the option to build with the network process enabled (disabled by default).
- Martin updated the soup backend to use WebKit buffers when reading network data instead of char pointers because the network process only accepts WebKit buffers.
- Kwang and Brian fixed the SSL errors policy handling when using the network process.
- Berto fixed the way the network process was enabled, by moving it to the right place and enabling it by default when WebKit is build with network process support.
- Kwang fixed a method in the web context to send messages to the current networking process to allow sending messages to the network process even when using the single shared process model.
- Berto added support to run the network process with an arbitrary prefix command in debug builds for easily debugging crashes or leaks.
- Gustavo fixed the original encoded data size calculation, since we were using the decoded data size instead.
- Kwang updated the patch he started and Csaba continued to add support for cache model in the network process.
After all this awesome work we managed to have the basic support, with MiniBrowser perfectly rendering pages and allowing navigation using the network process. But as expected, there were some bugs and missing features, so I ran the WebKit2 unit tests and we took failing tests to investigate why they were failing and how to fix them.
- Berto is working on loader client tests failing due to missing notifications in the network process.
- Adrian submitted a patch to add new API to select the process model that will be used when the network process support is finished. He is also working on the problems of having multiple instances of the web extensions.
- Kwang is working on fixing the cookies handling in the network process.
- I submitted a patch to implement the initiating page support in the remote networking context used by the network process. I’m working on adding support for custom URI schemes to the network process as well.
So, we are actually far from having a complete and stable network process support, but it’s a huge step forward. The good news is that once we have network process implemented, the multiple web processes support will work automatically just by selecting the multiple web process model.
All this sounds like a lot of work done, but that’s only a small part of what has happened this week in Coruña:
- Martin and Gustavo made more parts of WebKit actually build with the cmake build.
- Jon made several improvements in Epiphany UI.
- Gustavo fixed the default charset encoding used by Epiphany.
- Iago, Edu made some progress in the wayland support for WebKit2.
- Dan was working on HTTP2 implementation for libsoup.
- Zan was finalizing his GSoC work under Martin’s mentorship to bring WebGL support under Wayland
- Gustavo added support for right-side docking of the web inspector in WebKitGTK+.
- Javi, Rego and Minhea were focused on a new implementation for the selections in CSS regions.
- Zan finished the patches to add battery support in WebKitGTK+ using upower.
- Martin, Gustavo and Zan worked on support for testing WebGL and accelerated compositing layout tests in WebKitGTK+.
- Brian, Alex and Zan were working on the parsing of the valgrind xml output used when running the tests under valgrind to detect memory leaks.
- Brendan added a setting to both WebKit1 and WebKit2 APIs to enable media source and fixed a crash in several video layout tests.
- Claudio went back to his work on the notifications support for WebKitGTK+ and was reviewing patches like crazy.
- Philippe worked on the WebRTC implementation for the GStreamer WebKit media backend.
- Mario, Joanie and API were focused on accessibility, also making sure that the multiple web processes doesn’t affect the accessibility support.
- Brendan also worked on MediaSource, investigating how to handle video resolution changes.
- I removed all the WebKit1 unused code from Epiphany, and moved the GNOME shell search provider to its own binary.
And I’m sure I’m missing more great stuff done that I could not follow closely. It’s definitely been a very productive hackfest that it would haven’t been possible without the sponsors, Igalia and the GNOME Foundation. Thanks!