= WebKit Feature Focus for 2018-2019 = ''by Geoff Garen'' '''200 features planned''' == Build == - XCBuild - CMake - ccache - Precompiled headers Focused on the build system and especially moving to unified build for 2x speed up All non-Apple ports have moved to CMake, Apple still working on moving to CMake for build speed up Interested in ccache by default Precompiled headers == JavaScriptCore == - New byte code format - No pointers - Load bytecode out of cache - The more we use process isolation the less hits in cache - Node.js prototype - Participation helps standardization and performance testing - JetStream 2 == Layout == - Next-Generation layout - Complete rewrite of the layout engine - Closer to spec language - A lot more efficient - Parallelize-able - Initial speed-up from initial design is already faster on its own - Right now it draws boxes - LFC == Web Standards == - Pointer Events - New form controls - Removing WebSQL - Web Components Polish - Intersection Observer (non-Apple dev, Google) - WebShare API (done) - Payment Request - Font Color Palettes - Web Animations (close to done) - CSS logical properties (in-progress, going ok) - Better text decorations - CSS conic-gradient (done) - Datalist - File upload enhancements - WebAuthentication - CSS @page - CSS logical properties - Unicode 12 - Implement CSS Text Module Level 4 - IndexedDB Quality == Service Workers == - Long strange trip - We did a great job at delivering high quality SW - Not a lot of adoption of offline mode - More interest in using Service Workers to make your website fast - But everyone knows it makes your site slower - It launches a separate process, and that takes time - Then they try to pose new standards to make SW faster - We need to focus on an effort to optimize SW - Merged the storage process into the network process - Now only have to launch the network process - First time startup is 250 ms faster - Doesn’t eliminate the launch of SW itself and XPC messaging - SW launch the sw in process - Any other tab will have to use the same SW, no cold start penalty, but still XPC overhead - If the Network is really slow, SW may make it faster - Mobile specific - In countries with slow cell service, mobile devices, may be a big part of browsing - Should we rename NetworkProcess? - Kinda… maybe? - LocalStorage is in the UIProcess - Payments? - NetworkProcess or their own process? - It’s possible it will be the generic helper process - HelperProcess, DoerProcess, DoallthethingsProcess == WebRTC & getUserMedia == - Using it for tech or learning support system - WebRTC h.264 simulcast (done) - VP8 for WebRTC (the libwebrtc implementation) - Fuller support for WebRTC 1.0 APIs - May break some sites - Support mDNS ICE Candidates - New proposal for a standard for privately sharing your IP address - VCP for WebRTC - Screen capture - MediaCapabilities API == Security & Privacy == - Process per origin (PSON, frames) [it’s really process per site] - Process swap on navigation - Isolate frame content, hasn’t been designed it yet - ITP 3.0 - May create web compatibility concerns - New design patterns for sharing info - Fingerprinting Mitigations 2.0 - May create web compatibility concerns - New design patterns for sharing info - Safe Browsing in WKWebView - Fuzz-0 for JSC - Apple should take the action to Open-Source fuzzers - WebKit should run DOM fuzzers - Make available to WebKit Security Team - Consider blocking third-party iframe redirects - Attack, ad in iframe top.locaiton.href sends to App Store or other page - Hard for web to protect itself from this - CSP protections available, no one understands or uses them - Other window or tab used to navigate to somewhere of attackers choosing (phishing page etc) - Prohibit like pop-up blocking - Prevent navigation hijacking - Sandbox Hardening 2.0 - Find and correct CSP Implementations - CSP (Content Security Policy) level 3 - New content blocker action: insert stub == Graphics & Media == - WebGPU - Improvement over GL designs - WebGL 2 - Because people use it - “It’s the best” - mmaxfield - Modern EME - Support codec and container switching in MSE - AirPlay improvements - Fullscreen quality - Implement PiP JS API - Autoplay API - API to determine if autoplay will succeed - If you can’t autoplay, you provide a button - Spec is in flux - Will discuss at TPAC - HDR video == Performance Defense == “A big part of being fast is not getting slow” - Geoff Garen - PLT 5 - Performance regression defense coordination - Throttled PLT (Page Load Test for iOS) - no regression - PLT (macOS) - no regression - Speedometer2 - no regression - PLUM - no regression - Membuster - no regression == Performance Offense == - Opitimize “first meaningful paint” - JS bytecode caching - Match Lua memory usage on Lua JSFight - A lot of system services that take advantage of JS scripting - Fixed cost memory is too high - Excited to set a goal to be just as good as Lua - JetStream 2 - 6% faster - MotionMark - 5% faster - Improve page loading performance on watchOS by 20% - JetStream 2 - 20% faster - RAMification - 30% less memory - MotionMark - 10% faster - == Scrolling == - Use async scrolling in overflow == Web Inspector & WebDriver == - Handle big sites - Modern architecture - Medis debugging - Multiple disjoint selection in grids and trees (cookies) - Editing improvements in styles sidebar - WebDriver for wkwebview - Tab UI refresh - more… == WebKit API == - UIWebView on top of WKEWebView - Disable iOS WK1 WebThread - Downloads - More apps on Modern WebKit - Enhanced editing APIs - “One Network Process” - Partition-aware website data API == Infrastructure & Testing == - Improved EWS - webkit.org improvement 2019 - Upgrade build.webkit.org to Buildbot 1.0 - iOS LayoutTest Cleanup - API testing technical debt reduction