Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How WebKit Works

How WebKit Works

Presentation by Adam Barth at Oct, 30, 2012.

Download from here:
https://docs.google.com/presentation/d/1ZRIQbUKw9Tf077odCh66OrrwRIVNLvI_nhLm2Gi__F0/edit#slide=id.p

Jingtao Liu

March 08, 2013
Tweet

More Decks by Jingtao Liu

Other Decks in Programming

Transcript

  1. What is WebKit? WebKit is a rendering engine for web

    content WebKit is not a browser, a science project, or the solution to every problem HTML JavaScript CSS WebKit Rendering of a web page
  2. WebCore (HTML, CSS, DOM, etc, etc) Major Components WTF (Data

    structures, Threading primitives) Platform (Network, Storage, Graphics) JavaScriptCore (JavaScript Virtual Machine) Bindings (JavaScript API, Objective-C API) WebKit and WebKit2 (Embedding API) This talk
  3. Page Main Frame Document Pages, Frames, and Documents Frame Frame

    Frame Document Document Document Frame Document
  4. Lifecycle of a Frame Uninitialized Initial Document Provisional Ready to

    Commit Committed Checking Policy • Committed is the quiescent state
  5. How the Loader Works (Idealized) MemoryCache CachedResourceLoader CachedResource ResourceRequest ResourceLoader

    ResourceHandle CachedResourceRequest The Loader is actually very messy and complicated, but we have a long-term project to clean up its nuttiness Platform-specific code
  6. Tokenizer TreeBuilder How the HTML Parser Works Bytes Characters Tokens

    Nodes DOM <body>Hello, <span>world!</span></body> StartTag: body Hello, StartTag: span world! EndTag: span body Hello, span world! body Hello, span world! 3C 62 6F 64 79 3E 48 65 6C 6C 6F 2C 20 3C 73 70 61 6E 3E 77 6F 72 6C 64 21 3C 2F 73 70 61 6E 3E 3C 2F 62 6F 64 79 3E
  7. Preload Scanning for Fun and Profit Mary had a little

    lamb Tokenizer TreeBuilder document.write("<textarea>"); Script execution can change the input stream Preload scanner tokenizes ahead • When parser is blocked on external scripts • Starts resource loads earlier
  8. XSSAuditor Tokenizer TreeBuilder HTTP Request HTTP Response XSSAuditor XSSAuditor examines

    token stream Looks for scripts that were also in the request • Assumes those scripts were reflected XSS • Blocks them
  9. DOM + CSS → Render Tree body Hello, span world!

    html head title Greeting img #footer { position: fixed; bottom: 0; left: 0 } body > span { font-weight: bold; } Render Block Render Inline Render Text Render Image Render Text bold Layout Render Block fixed
  10. Anonymous RenderObjects div Hello, div world! Render Block Render Block

    Render Text Render Block Render Text Anonymous • Not every RenderObject has a DOM Node • Every RenderBlock either: ◦ Has all inline children ◦ Has no inline children
  11. LayerTree Render Block Render Inline Render Text Render Image Render

    Text bold Render Block fixed Render Layer Render Layer • Sparse representation of RenderTree • Enables accelerated compositing, scrolling
  12. Yet Another Tree: LineBoxTree <div>An old silent pond... A frog

    jumps into the pond, splash! <b>Silence again.</b></div> InlineTextBox InlineTextBox InlineTextBox RootInlineBox RootInlineBox RootInlineBox InlineTextBox Render Block Render Text Render Inline Render Text bold • One RootInlineBox per line of text • List of inline flow and inline text boxes
  13. Conclusion • WebCore's main processing pipeline: ◦ Loader and Parser

    ◦ CSS, DOM, and Script ◦ RenderTree, LayerTree, and InlineBoxes • Other major subsystems ◦ Accessibility, Editing, Events, CSS, Web Inspector ◦ Plugins, SVG, MathML, XSLT... • Other components ◦ WebKit, Bindings, Platform, JavaScriptCore, WTF ◦ ... 1.5 MLOC of C++ • Learn more: ◦ http://www.webkit.org/coding/technical-articles.html