Professional Documents
Culture Documents
What is WebKit?
WebKit is a rendering engine for web content
HTML Rendering of a web page
JavaScript
WebKit
CSS
Major Components
This talk
WebKit and WebKit2 (Embedding API) Bindings (JavaScript API, Objective-C API) WebCore (HTML, CSS, DOM, etc, etc) Platform (Network, Storage, Graphics)
Loader
HTML Parser
CSS
DOM
Script
Render Tree
Graphics Context
Lifecycle of a Frame
Uninitialized
Initial Document
Provisional
Checking Policy
Ready to Commit
Committed
CachedResourceLoader
MemoryCache
CachedResource
The Loader is actually very messy and complicated, but we have a long-term project to clean up its nuttiness
ResourceRequest
ResourceLoader
Characters
<body>Hello, <span>world!</span></body>
Tokens
StartTag: body
Hello,
StartTag: span
world!
EndTag: span
Nodes
body
Hello,
span
world!
TreeBuilder
body
DOM
Hello, span
world!
Tokenizer
TreeBuilder
Script execution can change the input stream Preload scanner tokenizes ahead
When parser is blocked on external scripts Starts resource loads earlier
XSSAuditor
XSSAuditor
HTTP Request
HTTP Response
Tokenizer
TreeBuilder
XSSAuditor examines token stream Looks for scripts that were also in the request
Assumes those scripts were reflected XSS Blocks them
#footer { position: fixed; bottom: 0; left: 0 } body > span { font-weight: bold; }
Render Block
Layout
html Render Text head body
Render Block
Render Inline
bold
title
Hello,
span
Render Text
Render Image
fixed
Greeting
world!
img
Anonymous RenderObjects
Render Block Anonymous Hello, div Render Block Render Block
div
world!
Render Text
Render Text
LayerTree
Render Block Render Layer
Render Text
Render Image
fixed
One RootInlineBox per line of text List of inline flow and inline text boxes
Conclusion
WebCore's main processing pipeline:
Loader and Parser CSS, DOM, and Script RenderTree, LayerTree, and InlineBoxes
Other components
WebKit, Bindings, Platform, JavaScriptCore, WTF ... 1.5 MLOC of C++
Learn more:
http://www.webkit.org/coding/technical-articles.html
Thanks!
abarth@webkit.org