Necko News #6 - 2024 Q2 Recap
Highlights
- Sean Kim, a student worker from UoT has joined the Necko team. Welcome!
- Max Inden is joining the Necko team as a contract worker to help improve UDP I/O. Welcome!
- Manuel, a student worker, has now been hired as a full-time employee and is working with the privacy team.
- In bug 1356686, decompression was moved off the MainThread for most loads, resulting in significant performance improvements on CI pageload metrics, with up to 46% speedindex gains and up to 56% improvements in FCP without regressions.
- In bug 1883496, we recently implemented a patch that moved search header interception from GeckoView to Necko, resulting in 13-24% improvements in Speed Index for Google searches on Android devices.
- We landed support for Zstd (ZStandard) decompression in Bug 1871963. This is used heavily by all Meta websites (Facebook, Instagram, etc) and will likely rapidly be picked up by other sites since Chrome just shipped support
- We moved search header interception into Necko in Bug 1883496, resulting in 13-23% improvements in google search speed tests on android
Friends of Necko
We had quite a few new and known community members contribute to our Necko code base. We are happy about everyone that wants to get involved. Reporting bugs, submitting logs, and also patches are all highly valued by us. You can take a look at our good-first-bugs and also reach out to us at matrix #necko:mozilla.org if you want to start getting more involved.
Setting up the toolchain can be quite challenging. Therefore, we sometimes have good-first-bugs that give you the opportunity to just test out the toolchain.
Thank you all for helping improve Firefox Networking!!
- New contributors to rust-url 2.5.1
- Masatoshi Kimura
- 1891926: “Use system Web Proxy Auto-Discovery setting” checkbox is not shown even if “network.proxy.system_wpad.allowed” is set to true
- Alexandra Borovova
-
1898129: Perma [tier 2] /fetch/api/abort/serviceworker-intercepted.https.html response.bytes() rejects if already aborted - promise_test: Unhandled rejection with value: object “TypeError: response[bodyMethod] is not a function” -
1897959: Perma /client-hints/sec-ch-width.https.html Sec-CH-Width should be set - assert_equals: expected 100 but got 1
-
- Bob Owen
- 1892226: Use inet_ntop directly on Windows to prevent mswsock.dll load.
- Andrew Sutherland
- 1900681: XMLHttpRequestMainThread::DisconnectFromOwner should not call Abort for
mForWorker
XHRs because it double-clocks the state machine
- 1900681: XMLHttpRequestMainThread::DisconnectFromOwner should not call Abort for
- Christoph Moench-Tegeder
- 1890593: breakage after “button to allow WPAD while using system proxy settings” (#621429)
- Andrew McCreight
- 1899863: Extremely frequent PNecko::Msg_CancelHTMLDNSPrefetch log spam
- Chris Peterson
- endington543
-
1820570: Intermittent netwerk/test/unit/test_progress_no_proxy_and_proxy.js single tracking bug
-
- Emilio Cobos Álvarez
- [evilpies]
- 1896475: Implement Request/Response
.bytes()
method
- 1896475: Implement Request/Response
- Frederik Braun
- 1897132: make netwerk/test/browser/browser_dns_prefetch_link_header.js work with https-first
- Frédéric Wang
- 1900764: urgency of fonts in fetchpriority-urgency.h2.html are not affected by fetchpriority
- 1892734: Add tests for checking the priority set in our HTTP requests
- 1881040: Use the destination to refine the fetchpriority mapping of FetchDriver::HttpFetch
- 1882548: Enable “fetchpriority” feature by default in nightly
- 1882084: Support fetchpriority in Early Hints preloader
-
1901220: Perma TEST-UNEXPECTED-FAIL /_mozilla/fetch/fetchpriority/fetchpriority-urgency.h2.html Adjustment of urgency parameter for <…> when Gecko 128 merges to beta on 2024-06-10
- Gijs
- 1881800: Make credentialed network fetches with system (chrome) principals opt-in (ie default to
credentials: omit
)
- 1881800: Make credentialed network fetches with system (chrome) principals opt-in (ie default to
- Gregory Pappas
- 1887611: Implement URL.parse()
- Henri Sivonen
- Julian Descottes
- 1892440: Expose chrome only method to flip HttpChannel’s StoreRequestObserversCalled
- 1899563: Perform SW upgrade before http-on-before-connect
- 1899291: Improve channelId generation code to avoid clashes between tabs with identical pID
- 1895198: Move the assert !LoadWasOpened() in HttpBaseChannel::ExplicitSetUploadStreamLength to HttpChannelChild
- John Schanck
- 1892528: Enable Xyber768 in Http/3 TLS handshakes under a pref
- Robert Longson
- 1891349: Firefox doesn’t treat cookie name prefixes as case-insensitive
- 1891941: Use StringBeginsWith in CookieService
- 1892748: Reject most control characters in cookie attributes
-
1892450: Perma Late Beta TEST-UNEXPECTED-PASS /cookies/prefix/__secure.header.https.html __SeCuRe: secure origin: Should not set ‘Path=/;domain=not-web-platform.test’ - expected FAIL when Gecko 127 switches from Early Beta to Late Beta on 2024-05-24
- Leander Schwarz
-
1893480: Perma /cookies/third-party-cookies/third-party-cookies.tentative.https.html 3P fetch: Cookies are not accessible via HTTP - assert_equals: Expected cookie 1P_http to not be available expected false but got true
-
- Max Inden
- 1895319: refactor http3server to use neqo-bin for I/O, timers, event-loop etc.
- Manuel Bucher
- Mike Conley
- 1896929: Allow nsInputStreamChannel to have an arbitrary content type set on it
- Mika Valkealahti
- 1879304: Remove mention of FTP in ContentParent
- [mike.maksymowych]
- 1883282: Log message incorrectly logs split string parts
- Neel Chauhan
- 1855652: Remove unused nsDownloader and IncrementalDownloader
- Nika Layzell
- 1718673: text/event-stream mime type starts downloading instead of streaming content
- [serfreeman1337]
- 1810362: Firefox does not seem to support IPv6 unless DNS-over-HTTPS is enabled
- Thomas Wisniewski
- 1893257: Firefox-only failures in WPT fetch/http-cache/cache-mode.any.js
- 1886757: network.dns.localdomains does not apply to FQDN
- 1893219: Failing WPT fetch/content-length/too-long.window.html
- 1491010: [Fetch API] Headers.get(“WWW-Authenticate”) does not return anything, if server sends more than one such header
- 1889075: New wpt crashes in /fetch/api/request/ [request-bad-port.any.worker.html, request-bad-port.any.html, request-bad-port.any.sharedworker.html]
Project Updates
Q2 2024 has been a busy with many started and completed projects:
Completed:
- Optimized speculative connection socket pool shipped in Fx126 - showing significant improvements in sub-resource connection times (35-68%) and first byte sent (15-45%).
- Decompression(gzip and brotli) have been moved off main thread(OMT) in Fx126 reducing FCP and LCP by 10%.
- Support for zstd compression shipped in Fx126, enabling pages to load faster and/or use less bandwidth, which can be especially important for mobile users and users with limited data plans.
- We optimized and enabled Firefox’s support for
<link rel=dns-prefetch>
in Fx127,
In progress:
- Extending native DNS API’s to support HTTPS RR, increasing HTTPS usage and ECH support when Firefox performs native DNS lookups. Targeting Q3 2024.
- Interop 2024 URL is progressing well, targeting Q4 2024.
- Firefox/Chrome networking benchmark framework is on track to complete Q3 2024.
- Fetch keepalive support is on track to complete Q3 2024.
- 3rd party cookie deprecation - support for limiting size of partition store size is on track to complete Q4 2024.
- HTTP Priorities support is on track to complete Q3 2024.
- Fast UDP I/O in Firefox is on track to complete in Q3 2024.
Below the fold
- We resolved the issue where downloading Firefox updates would make the browser unresponsive:
- We backed out HTTPS RR (which landed in 1852752 - Allow resolving HTTPS (or arbitrary record types) RR with native DNS (without TRR) ) due to performance regressions in Bug 1893970 , and re-landed for 127 (and it should ride the trains there) in Bug 1898191 and Bug 1895226 “Don’t perform native HTTPS lookups if network doesn’t support them.”
- Bug 1891349 (CVE-2024-5699) “Firefox doesn’t treat cookie name prefixes as case-insensitive” fixed a minor security issue
- Fixed a series of cookie bugs:
- Fixed an issue with DoH that could cause 30s delays on startup: bug 1885801 Secure DNS causes delayed website loading at startup
- Fixed a 10 second delay accessing .local domains in Bug 1893944
- A large numbers of TCP RSTs could cause Firefox to hang or be very janky; fixed in Bug 1719046
- In Bug 1816539 we increased the number of sockets available for speculative connections from 6 to 20, which shows improvements in sites known to work with speculative connections. We might increase it to 30 in the future
- We resolved a significant cause of UI/mainthread jank when downloading updates in the background in Bug 1510262; a bug which had been open for 6 years.
- Fixed a number of network URL parsing issues
- In total, we closed 225 bugs as Fixed
- Work week in Berlin, hack day and strategy session
- The Necko team had a very successful work week in Berlin in conjunction with the rest of Security and Privacy, and in the same time/place as the DOM team.
- We had a ‘hack day’, which included building a prototype for a system to submit Network logs and other data with PII to the networking team, and avoid asking users to email logs. In addition two team members completed the bulk of the work to move search header interception into Necko, resulting in significant performance win on Android.
- Bug Bash Day
- Total Bugs updated: 197(7 off team)
- Closed: 41 (3 off team)!
- 14 fixed
- 6 invalid
- 11 won’t fix
- 8 works for me
- 1 duplicate
- 4 incomplete