| 1 | = URLs, CMake, and Networking = |
| 2 | |
| 3 | Alex Christensen, Apple |
| 4 | |
| 5 | == URLs == |
| 6 | |
| 7 | - guy in Netherlands who is trying to unify URL standard across all browsers |
| 8 | - implemented spec inside WebKit |
| 9 | - mostly a good idea |
| 10 | - currently passing 2/3 of tests |
| 11 | - most browsers pass at least that amount (but of different tests) |
| 12 | - there are open issues (not perfect) |
| 13 | - e.g. how to deal with unicode fragments |
| 14 | - the spec is changing |
| 15 | - implementation uses finite state machine to look at the string |
| 16 | - zero allocations in one pass |
| 17 | - certain characters (tab, newline, etc.) should be ignored |
| 18 | - input can be any sequence of unicode |
| 19 | - output *should* be ascii |
| 20 | - %2E is sometimes a `.` (depending on the server) |
| 21 | - ~1000 unit tests for a bunch of weird URLs |
| 22 | - `http://127.0.0.-/` should be invalid |
| 23 | - modifies DOMURL and urls everywhere |
| 24 | - interfaces with NSURL, etc. |
| 25 | - ~25% faster than old parser |
| 26 | - blog post coming soon :) |
| 27 | - unfortunately, there is always someone with “old” spec |
| 28 | - should communicate to web authors |
| 29 | - typically, authors don’t use weird edge cases |
| 30 | - but, WebKit apps may implicitly assume some of these “old” points |
| 31 | - e.g. not having the second `/` after scheme |
| 32 | - as such, we cannot delete the old parser (for now) |
| 33 | - currently on by default, but only for Desktop and Mobile Safari |
| 34 | - these changes effect URL components as well |
| 35 | - e.g. changes to query or path via JS |
| 36 | |
| 37 | == CMake == |
| 38 | |
| 39 | - works everywhere except on Mac using WebKit2 |
| 40 | - slightly different directory structure with CMake |
| 41 | - >30% build time improvement compared to XCode |
| 42 | - we also have a bot for this |
| 43 | - `build webkit --cmake` |
| 44 | - preprocessing of IDLs must be done |
| 45 | |
| 46 | == Networking == |
| 47 | |
| 48 | - `ResourceHandle` class, designed for networking in 2001 |
| 49 | - contains a `ResourceHandleClient` that has information about the networking |
| 50 | - functions have been added with `Async` for WebKit2, that doesn’t use the synchronous model of networking |
| 51 | - will be changing the logic of all network code to remove synchronous methods |
| 52 | - all code will now be asynchronous |
| 53 | - will replace `Network*` instead of `ResourceHandle*` as the completion handler |
| 54 | - designed to be more asynchronous |