SlideShare a Scribd company logo
Chromium 
Source Tree Overview
Chang W. Doh 
<hi> </hi> 
GDG Korea WebTech Organizer 
HTML5Rocks/KO Contributor/Coordinator
CAUTION! 
Many documents being mentioned from this 
slide are outdated. Don’t believe everything. =)
Overall Top-Projects
Simplified top-projects 
Project Description 
android_webview Integration of /content into android. 
base Common code shared between all sub-projects. 
build Build Configurations shared by all projects 
cc chrome Compositor implementations 
components components for Content Module layer 
content Core code for multi-process sandboxed browser 
net Network libraries for Chromium 
sandbox Sandbox for preventing hacked renderer from modified system. 
skia skia Graphics library, some classes in ui/gfx wrap skia 
third_party External libaries such as blink, decoders, compression, ... 
ui ● /gfx: Shared graphics lib, base of Chromium UI grp. 
● /views: frameworks for UI; rendering, layout, event 
handling. 
○ ALSO CHECK! chrome/browser/ui/view 
v8 V8 JavaScript Engine 
webkit WebKit glues & some web features
Historical changes of 
Chromium Dependency Diagram
Dependency diagram: V1 
/chrome 
/net 
/webkit WebKit API 
/base /third_party//webkit 
/V8
Dependency diagram: V2 
/chrome 
/content 
/net /webkit 
Content API 
/base /third_party//webkit 
/V8 
WebKit API
Dependency diagram: V3 
/chrome OR /android_webview OR ... 
/components 
/content 
/net /webkit 
Content API 
/base /third_party//webkit 
/V8 
WebKit API
Dependency diagram: V3 
/chrome OR /android_webview OR ... 
/components 
/content 
/net /webkit 
Chromium browser 
implementation 
Content API 
/base /third_party//webkit 
/V8 
WebKit 
API 
Network libraries for 
Chromium 
Common code to be 
shared between all 
sub-projects 
WebKit glue. 
NEED RESEARCH 
SOMEMORE 
Shared codes between 
browser 
implemetations 
Blink PART 
All the web platform 
features, HW acc. except 
Chrome features
Overview of Top-level projects
/android_webview 
● Facades over src/content to integrate into 
Android 
○ References 
■ Java Resource on Android 
● http://www.chromium.org/developers/design-documents/java-resources- 
on-android 
■ JNI on Chromium for Android 
● http://www.chromium.org/developers/design-documents/ 
android-jni 
● WARNING! Use jar_file_jni_generator.gypi for generating 
JNI of system classes instead of 
system_classes_jni_generator.gypi 
■ Organization of code for Android WebView
/base 
● Common code shared betweeen sub-projects 
○ e.g. String manipulations, file, … 
● Guideline 
○ Adding things under /base, only if that code must be 
shared between more than 1 other top-level project.
● Build-related configuration shared by all 
projects 
○ NOTE: 
■ gyp_chromium 
● Wrapper of gyp for chromium build 
■ all.gyp 
● Everything starts at here!!! 
■ android 
● jni_generator.gypi 
○ JNI generator for user-defined class 
● jar_file_jni_generator.gypi 
○ JNI generator for system class 
/build
/cc 
● Chrome compositor implementations 
○ References: 
■ GPU Accelerated Compositing in Chrome 
● http://www.chromium.org/developers/design-documents/gpu-accelerated- 
compositing-in-chrome 
■ Compositing in Blink/Webcore [slide] 
● https://docs.google. 
com/presentation/d/1dDE5u76ZBIKmsqkWi2apx3BqV8HOcN 
f4xxBdyNywZR8/edit#slide=id.gccb6cccc_0709 
■ Compositor Thread Architecture 
● http://www.chromium.org/developers/design-documents/ 
compositor-thread-architecture 
NOTE: Implementations in ‘cc’ don’t have whole part in above references.
/chrome 
● Chromium browser implementations 
○ e.g. Extensions, NaCl, ChromeFrame, SpellCheck, 
Autofill, Sync, Prerendering, Safe Browsing, 
Translate, ... 
● See also: 
○ chrome.gyp 
○ chrome_browser.gypi 
○ chrome_browser_ui.gypi 
○ chrome_browser_ui_views.gypi 
○ chrome_android.gypi
/components 
● Features for reusing across # of targets 
○ for browser features, NOT the web! 
■ e.g. Bookmarks, autofill, autocomplete, search 
engine, history, … 
● Guidelines 
○ By default, depend only on the lower layers of the 
Chromium codebase( /base, /net, etc) 
■ Individually, allow additional dependencies on the 
content API and IPC
/components 
● Guidelines 
○ Directory & Subdirectories 
■ Directory could have 
● DEPS : Dependencies such as rules, include_dir, ... 
● OWNERS 
● {DIR}.gypi 
■ subdirectories 
● Components need to live in different processes should 
separate the code into different subdirectories. 
components/foo DEPS, OWNERS, foo.gypi 
components/foo/browser Code that needs the browser process 
components/foo/renderer IPC constants, ... 
components/foo/common Code that needs renderer process
/components 
● Guidelines 
○ Directory & Subdirectories (cont’d) 
■ Subdirectory should have DEPS file 
● with the relevant restrictions in place 
○ i.e. only components/*/browser should be allowed to 
#include from content/public/browser. 
○ Naming conventions 
■ namespace = the name of the component. 
● e.g. //components/foo 
○ code should be in the foo:: namespace
/components 
● Guidelines 
○ Android 
■ 'android' subdirectory with a Java source 
● SHOULD BE: code structure = package name 
components/foo/android/OWNERS 
components/foo/android/DEPS 
components/foo/android/java/src/org/chromium/components/foo/browser/ 
components/foo/android/javatests/src/org/chromium/components/foo/browser/ 
● Reference 
○ http://www.chromium.org/developers/design-documents/ 
structure-of-layered-components-within-the- 
chromium-codebase
/components 
● References 
○ Structure of layered components 
■ http://www.chromium.org/developers/design-documents/ 
structure-of-layered-components-within- 
the-chromium-codebase 
○ Life of a browser component 
■ https://docs.google.com/viewer? 
a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRld 
nxneDoxNzgxYjJjMTI0YjBkNTk1
/content 
● Core code for multi-process sandboxed 
browser. 
○ The core code needed to render a page using a 
multi-process sandboxed browser. 
○ Includes all the web platform features and GPU 
acceleration except Chrome features. 
● The goal 
○ Being able to build a browser by starting with 
content, and then pick and choose Chrome features.
/content 
● Historical motivation 
○ Consensus was reached to move the core 
Chrome code into srccontent. 
■ Hard to figure out what the "best" way, because 
the APIs and features were together in the same 
directory. 
■ To add a clear separation between the core 
pieces of the code that render a page using a 
multi-process browser 
■ Not chrome features!!
/ipc 
● IPC(Inter-Process Communication) module 
for communcation between chromium 
processes. 
● Reference 
○ Multi-process architecture 
■ http://www.chromium.org/developers/design-documents/ 
multi-process-architecture
/mojo 
● New project for isolating components of 
chromium multi-process architecture that are 
concerned with ‘Process management’, 
‘Sandboxing’, ‘IPC’. 
○ 3Q 2013, started & in progress 
○ Similar with ‘IDL’ based generating & binding 
system. 
● Currently, out of our focus :)
/net 
● The neworking library developed for 
Chromium 
○ can be used seperately from Chromium. 
■ see also: chrome/common/net 
○ Mostly single-threaded cross-platform library 
primarily for resource fetching 
http://www.chromium.org/developers/design-documents/network-stack
/net 
● Code layout 
Directory Descriptions 
base net utilities. e.g. host resolution, cookies, network change detection, SSL. 
disk_cache Cache for web resources. 
websockets WebSockets implementation. 
url_request URLRequest, URLRequestContext, URLRequestJob implementations. 
spdy SPDY implementation. 
socket_stream socket streams for WebSockets 
socket Cross-platform implementations of TCP sockets, "SSL sockets", and socket pools. 
proxy Proxy (SOCKS and HTTP) configuration, resolution, script fetching, etc.
/sandbox 
● To prevent a hacked renderer from 
modifying system 
○ C++ library for the creation of sandboxed processes 
■ processes that execute within a very restrictive 
environment. 
■ The only resources sandboxed processes can 
freely use are CPU cycles and memory. 
● e.g. Chromium renderers are sandboxed processes. 
http://www.chromium.org/developers/design-documents/sandbox
/skia 
● Google’s skia graphics library 
○ /skia has configurations only. 
■ Skia implemetation is located in 
● /third_party/skia 
○ https://code.google.com/p/skia/ 
○ See also: some wrappers in /ui/gfx
/third_party 
● All third-party libraries that Chrome used. 
○ /third_party/webkit 
■ webkit fork, known as ‘blink’ 
○ /third_party/webrtc 
○ /third_party/webgl 
○ /third_party/libc++ 
○ /third_party/flac 
○ … 
● Not only C/C++, Java libraries 
○ You can find js project or python tools in this 
directories. :)
/ui 
● Contains discrete components used to build 
Chromium’s user interfaces 
○ each subdir has to have isolated component. 
■ ui/gfx 
● Shared graphics classes. 
● These form the base of Chromium’s UI Graphics 
■ ui/views 
● A simple framework for doing UI development, providing 
rendering, layout and event handling. 
○ Most of the browser UI is implemented in this. 
○ Contains the base objects. 
● See also: 
○ /chrome/browser/ui/views.
/v8 
● Google JavaScript Engine 
○ except Chrome for iOS 
■ The iOS security model does not allow an app to 
execute native code from writeable memory. 
■ Memory is either writeable or executable (but 
read-only). 
■ However, V8 is a pure compiler, and doesn't 
have an interpreter. 
○ Project Home: 
■ https://code.google.com/p/v8/
/webkit 
● All of Chromium's Webkit related stuff 
○ But, currently there’re quite many actions are that 
moving to out of ‘/webkit’ 
■ e.g. /content, /chrome, … 
○ Will be deprecated? Maybe?!

More Related Content

What's hot

Study of Chromium OS
Study of Chromium OSStudy of Chromium OS
Study of Chromium OS
William Lee
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
KyeongWon Koo
 
Hypervisor seminar
Hypervisor seminarHypervisor seminar
Hypervisor seminar
용환 노
 

What's hot (20)

Puppeteer
PuppeteerPuppeteer
Puppeteer
 
Study of Chromium OS
Study of Chromium OSStudy of Chromium OS
Study of Chromium OS
 
Open Source Identity Management
Open Source Identity ManagementOpen Source Identity Management
Open Source Identity Management
 
Puppeteer can automate that! - Frontmania
Puppeteer can automate that! - FrontmaniaPuppeteer can automate that! - Frontmania
Puppeteer can automate that! - Frontmania
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
빌드 속도를 올려보자
빌드 속도를 올려보자빌드 속도를 올려보자
빌드 속도를 올려보자
 
Robot framework and selenium2 library
Robot framework and selenium2 libraryRobot framework and selenium2 library
Robot framework and selenium2 library
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
The WebKit project
The WebKit projectThe WebKit project
The WebKit project
 
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
 
JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리JIRA 업무 생산성 향상 및 프로젝트 관리
JIRA 업무 생산성 향상 및 프로젝트 관리
 
Detecting headless browsers
Detecting headless browsersDetecting headless browsers
Detecting headless browsers
 
.Net Core
.Net Core.Net Core
.Net Core
 
Introduction to java standard portlets
Introduction to java standard portletsIntroduction to java standard portlets
Introduction to java standard portlets
 
웹을 지탱하는 기술
웹을 지탱하는 기술웹을 지탱하는 기술
웹을 지탱하는 기술
 
Webdriver.io
Webdriver.io Webdriver.io
Webdriver.io
 
Ksh portfolio
Ksh portfolioKsh portfolio
Ksh portfolio
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Hypervisor seminar
Hypervisor seminarHypervisor seminar
Hypervisor seminar
 
스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기스타트업처럼 토이프로젝트하기
스타트업처럼 토이프로젝트하기
 

Viewers also liked

Charity apprentice logo-blue-6675
Charity apprentice logo-blue-6675Charity apprentice logo-blue-6675
Charity apprentice logo-blue-6675
FITC
 

Viewers also liked (16)

Chromium ui framework(shared)
Chromium ui framework(shared)Chromium ui framework(shared)
Chromium ui framework(shared)
 
Chrome & Webkit overview
Chrome & Webkit overviewChrome & Webkit overview
Chrome & Webkit overview
 
Accelerating performance on Qt and WebKit for the MIPS architecture
Accelerating performance on Qt and WebKit for the MIPS architectureAccelerating performance on Qt and WebKit for the MIPS architecture
Accelerating performance on Qt and WebKit for the MIPS architecture
 
Designing and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the EnterpriseDesigning and Building (Your Own) UI Frameworks For the Enterprise
Designing and Building (Your Own) UI Frameworks For the Enterprise
 
03 - Qt UI Development
03 - Qt UI Development03 - Qt UI Development
03 - Qt UI Development
 
了解 Qt
了解 Qt了解 Qt
了解 Qt
 
Maemo 6 UI Framework
Maemo 6 UI FrameworkMaemo 6 UI Framework
Maemo 6 UI Framework
 
Charity apprentice logo-blue-6675
Charity apprentice logo-blue-6675Charity apprentice logo-blue-6675
Charity apprentice logo-blue-6675
 
Qt5 embedded
Qt5 embeddedQt5 embedded
Qt5 embedded
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitation
 
Ketan seminar ppt
Ketan seminar pptKetan seminar ppt
Ketan seminar ppt
 
Chemistry of Chromium
Chemistry of ChromiumChemistry of Chromium
Chemistry of Chromium
 
Chromium ppt
Chromium pptChromium ppt
Chromium ppt
 
Removal of chromium
Removal of chromiumRemoval of chromium
Removal of chromium
 
Chromium problems
Chromium problemsChromium problems
Chromium problems
 

Similar to OVERVIEW: Chromium Source Tree

Leveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VILeveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VI
Opersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon VLeveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon V
Opersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IV
Opersys inc.
 
Is Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VIIs Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VI
Opersys inc.
 
Is Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon VIs Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon V
Opersys inc.
 

Similar to OVERVIEW: Chromium Source Tree (20)

Leveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VILeveraging Android's Linux Heritage at AnDevCon VI
Leveraging Android's Linux Heritage at AnDevCon VI
 
Code-Hub
Code-HubCode-Hub
Code-Hub
 
Electron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologiesElectron JS | Build cross-platform desktop applications with web technologies
Electron JS | Build cross-platform desktop applications with web technologies
 
Leveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon VLeveraging Android's Linux Heritage at AnDevCon V
Leveraging Android's Linux Heritage at AnDevCon V
 
Voxxed days Vilnius 2015 - Android Reverse Engineering Lab
Voxxed days Vilnius 2015 - Android Reverse Engineering LabVoxxed days Vilnius 2015 - Android Reverse Engineering Lab
Voxxed days Vilnius 2015 - Android Reverse Engineering Lab
 
Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IV
 
[scala.by] Launching new application fast
[scala.by] Launching new application fast[scala.by] Launching new application fast
[scala.by] Launching new application fast
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things Internals
 
Android Things: Android for IoT
Android Things: Android for IoTAndroid Things: Android for IoT
Android Things: Android for IoT
 
HKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRMHKG18-203 - Overview of Linaro DRM
HKG18-203 - Overview of Linaro DRM
 
CodeMotion tel aviv 2015 - android reverse engineering lab
CodeMotion tel aviv 2015 - android reverse engineering labCodeMotion tel aviv 2015 - android reverse engineering lab
CodeMotion tel aviv 2015 - android reverse engineering lab
 
You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)You Can Work on the Web Patform! (GOSIM 2023)
You Can Work on the Web Patform! (GOSIM 2023)
 
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScriptENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
ENIB 2015 2016 - CAI Web S02E03- Forge JS 1/4 - La forge JavaScript
 
Android Things Internals
Android Things InternalsAndroid Things Internals
Android Things Internals
 
Brillo / Weave Internals
Brillo / Weave InternalsBrillo / Weave Internals
Brillo / Weave Internals
 
Is Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VIIs Android the New Embedded Linux? at AnDevCon VI
Is Android the New Embedded Linux? at AnDevCon VI
 
Extending Android's Platform Toolsuite
Extending Android's Platform ToolsuiteExtending Android's Platform Toolsuite
Extending Android's Platform Toolsuite
 
Is Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon VIs Android the New Embedded Linux? at AnDevCon V
Is Android the New Embedded Linux? at AnDevCon V
 
Polymer 101
Polymer 101Polymer 101
Polymer 101
 
Keep calm and write reusable code in Android
Keep calm and write reusable code in AndroidKeep calm and write reusable code in Android
Keep calm and write reusable code in Android
 

More from Chang W. Doh

Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
Chang W. Doh
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
Chang W. Doh
 

More from Chang W. Doh (20)

Exploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively appExploring what're new in Web for the Natively app
Exploring what're new in Web for the Natively app
 
Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가Kotlin의 코루틴은 어떻게 동작하는가
Kotlin의 코루틴은 어떻게 동작하는가
 
Hey Kotlin, How it works?
Hey Kotlin, How it works?Hey Kotlin, How it works?
Hey Kotlin, How it works?
 
Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요Kotlin, 어떻게 동작하나요
Kotlin, 어떻게 동작하나요
 
introduction to Web Assembly
introduction to Web Assembly introduction to Web Assembly
introduction to Web Assembly
 
PWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - KeynotePWA Roadshow Seoul - Keynote
PWA Roadshow Seoul - Keynote
 
PWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPSPWA Roadshow Seoul - HTTPS
PWA Roadshow Seoul - HTTPS
 
CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나CSS 다시 파서 어디에 쓰나
CSS 다시 파서 어디에 쓰나
 
Natively Web App & Service Worker
Natively Web App & Service WorkerNatively Web App & Service Worker
Natively Web App & Service Worker
 
초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101초보 개발자를 위한 웹 프론트엔드 개발 101
초보 개발자를 위한 웹 프론트엔드 개발 101
 
Service Worker 201 (한국어)
Service Worker 201 (한국어)Service Worker 201 (한국어)
Service Worker 201 (한국어)
 
Service Worker 201 (en)
Service Worker 201 (en)Service Worker 201 (en)
Service Worker 201 (en)
 
Service Worker 101 (en)
Service Worker 101 (en)Service Worker 101 (en)
Service Worker 101 (en)
 
Service Worker 101 (한국어)
Service Worker 101 (한국어)Service Worker 101 (한국어)
Service Worker 101 (한국어)
 
What is next for the web
What is next for the webWhat is next for the web
What is next for the web
 
Instant and offline apps with Service Worker
Instant and offline apps with Service WorkerInstant and offline apps with Service Worker
Instant and offline apps with Service Worker
 
Chrome enchanted 2015
Chrome enchanted 2015Chrome enchanted 2015
Chrome enchanted 2015
 
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
프론트엔드 개발자를 위한 크롬 렌더링 성능인자 이해하기
 
Polymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymerPolymer Codelab: Before diving into polymer
Polymer Codelab: Before diving into polymer
 
알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations알아봅시다, Polymer: Web Components & Web Animations
알아봅시다, Polymer: Web Components & Web Animations
 

Recently uploaded

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 

Recently uploaded (20)

GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
Speed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in MinutesSpeed Wins: From Kafka to APIs in Minutes
Speed Wins: From Kafka to APIs in Minutes
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
Exploring UiPath Orchestrator API: updates and limits in 2024 🚀
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
In-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT ProfessionalsIn-Depth Performance Testing Guide for IT Professionals
In-Depth Performance Testing Guide for IT Professionals
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...When stars align: studies in data quality, knowledge graphs, and machine lear...
When stars align: studies in data quality, knowledge graphs, and machine lear...
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...Designing Great Products: The Power of Design and Leadership by Chief Designe...
Designing Great Products: The Power of Design and Leadership by Chief Designe...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 

OVERVIEW: Chromium Source Tree

  • 2. Chang W. Doh <hi> </hi> GDG Korea WebTech Organizer HTML5Rocks/KO Contributor/Coordinator
  • 3. CAUTION! Many documents being mentioned from this slide are outdated. Don’t believe everything. =)
  • 5. Simplified top-projects Project Description android_webview Integration of /content into android. base Common code shared between all sub-projects. build Build Configurations shared by all projects cc chrome Compositor implementations components components for Content Module layer content Core code for multi-process sandboxed browser net Network libraries for Chromium sandbox Sandbox for preventing hacked renderer from modified system. skia skia Graphics library, some classes in ui/gfx wrap skia third_party External libaries such as blink, decoders, compression, ... ui ● /gfx: Shared graphics lib, base of Chromium UI grp. ● /views: frameworks for UI; rendering, layout, event handling. ○ ALSO CHECK! chrome/browser/ui/view v8 V8 JavaScript Engine webkit WebKit glues & some web features
  • 6. Historical changes of Chromium Dependency Diagram
  • 7. Dependency diagram: V1 /chrome /net /webkit WebKit API /base /third_party//webkit /V8
  • 8. Dependency diagram: V2 /chrome /content /net /webkit Content API /base /third_party//webkit /V8 WebKit API
  • 9. Dependency diagram: V3 /chrome OR /android_webview OR ... /components /content /net /webkit Content API /base /third_party//webkit /V8 WebKit API
  • 10. Dependency diagram: V3 /chrome OR /android_webview OR ... /components /content /net /webkit Chromium browser implementation Content API /base /third_party//webkit /V8 WebKit API Network libraries for Chromium Common code to be shared between all sub-projects WebKit glue. NEED RESEARCH SOMEMORE Shared codes between browser implemetations Blink PART All the web platform features, HW acc. except Chrome features
  • 12. /android_webview ● Facades over src/content to integrate into Android ○ References ■ Java Resource on Android ● http://www.chromium.org/developers/design-documents/java-resources- on-android ■ JNI on Chromium for Android ● http://www.chromium.org/developers/design-documents/ android-jni ● WARNING! Use jar_file_jni_generator.gypi for generating JNI of system classes instead of system_classes_jni_generator.gypi ■ Organization of code for Android WebView
  • 13. /base ● Common code shared betweeen sub-projects ○ e.g. String manipulations, file, … ● Guideline ○ Adding things under /base, only if that code must be shared between more than 1 other top-level project.
  • 14. ● Build-related configuration shared by all projects ○ NOTE: ■ gyp_chromium ● Wrapper of gyp for chromium build ■ all.gyp ● Everything starts at here!!! ■ android ● jni_generator.gypi ○ JNI generator for user-defined class ● jar_file_jni_generator.gypi ○ JNI generator for system class /build
  • 15. /cc ● Chrome compositor implementations ○ References: ■ GPU Accelerated Compositing in Chrome ● http://www.chromium.org/developers/design-documents/gpu-accelerated- compositing-in-chrome ■ Compositing in Blink/Webcore [slide] ● https://docs.google. com/presentation/d/1dDE5u76ZBIKmsqkWi2apx3BqV8HOcN f4xxBdyNywZR8/edit#slide=id.gccb6cccc_0709 ■ Compositor Thread Architecture ● http://www.chromium.org/developers/design-documents/ compositor-thread-architecture NOTE: Implementations in ‘cc’ don’t have whole part in above references.
  • 16. /chrome ● Chromium browser implementations ○ e.g. Extensions, NaCl, ChromeFrame, SpellCheck, Autofill, Sync, Prerendering, Safe Browsing, Translate, ... ● See also: ○ chrome.gyp ○ chrome_browser.gypi ○ chrome_browser_ui.gypi ○ chrome_browser_ui_views.gypi ○ chrome_android.gypi
  • 17. /components ● Features for reusing across # of targets ○ for browser features, NOT the web! ■ e.g. Bookmarks, autofill, autocomplete, search engine, history, … ● Guidelines ○ By default, depend only on the lower layers of the Chromium codebase( /base, /net, etc) ■ Individually, allow additional dependencies on the content API and IPC
  • 18. /components ● Guidelines ○ Directory & Subdirectories ■ Directory could have ● DEPS : Dependencies such as rules, include_dir, ... ● OWNERS ● {DIR}.gypi ■ subdirectories ● Components need to live in different processes should separate the code into different subdirectories. components/foo DEPS, OWNERS, foo.gypi components/foo/browser Code that needs the browser process components/foo/renderer IPC constants, ... components/foo/common Code that needs renderer process
  • 19. /components ● Guidelines ○ Directory & Subdirectories (cont’d) ■ Subdirectory should have DEPS file ● with the relevant restrictions in place ○ i.e. only components/*/browser should be allowed to #include from content/public/browser. ○ Naming conventions ■ namespace = the name of the component. ● e.g. //components/foo ○ code should be in the foo:: namespace
  • 20. /components ● Guidelines ○ Android ■ 'android' subdirectory with a Java source ● SHOULD BE: code structure = package name components/foo/android/OWNERS components/foo/android/DEPS components/foo/android/java/src/org/chromium/components/foo/browser/ components/foo/android/javatests/src/org/chromium/components/foo/browser/ ● Reference ○ http://www.chromium.org/developers/design-documents/ structure-of-layered-components-within-the- chromium-codebase
  • 21. /components ● References ○ Structure of layered components ■ http://www.chromium.org/developers/design-documents/ structure-of-layered-components-within- the-chromium-codebase ○ Life of a browser component ■ https://docs.google.com/viewer? a=v&pid=sites&srcid=Y2hyb21pdW0ub3JnfGRld nxneDoxNzgxYjJjMTI0YjBkNTk1
  • 22. /content ● Core code for multi-process sandboxed browser. ○ The core code needed to render a page using a multi-process sandboxed browser. ○ Includes all the web platform features and GPU acceleration except Chrome features. ● The goal ○ Being able to build a browser by starting with content, and then pick and choose Chrome features.
  • 23. /content ● Historical motivation ○ Consensus was reached to move the core Chrome code into srccontent. ■ Hard to figure out what the "best" way, because the APIs and features were together in the same directory. ■ To add a clear separation between the core pieces of the code that render a page using a multi-process browser ■ Not chrome features!!
  • 24. /ipc ● IPC(Inter-Process Communication) module for communcation between chromium processes. ● Reference ○ Multi-process architecture ■ http://www.chromium.org/developers/design-documents/ multi-process-architecture
  • 25. /mojo ● New project for isolating components of chromium multi-process architecture that are concerned with ‘Process management’, ‘Sandboxing’, ‘IPC’. ○ 3Q 2013, started & in progress ○ Similar with ‘IDL’ based generating & binding system. ● Currently, out of our focus :)
  • 26. /net ● The neworking library developed for Chromium ○ can be used seperately from Chromium. ■ see also: chrome/common/net ○ Mostly single-threaded cross-platform library primarily for resource fetching http://www.chromium.org/developers/design-documents/network-stack
  • 27. /net ● Code layout Directory Descriptions base net utilities. e.g. host resolution, cookies, network change detection, SSL. disk_cache Cache for web resources. websockets WebSockets implementation. url_request URLRequest, URLRequestContext, URLRequestJob implementations. spdy SPDY implementation. socket_stream socket streams for WebSockets socket Cross-platform implementations of TCP sockets, "SSL sockets", and socket pools. proxy Proxy (SOCKS and HTTP) configuration, resolution, script fetching, etc.
  • 28. /sandbox ● To prevent a hacked renderer from modifying system ○ C++ library for the creation of sandboxed processes ■ processes that execute within a very restrictive environment. ■ The only resources sandboxed processes can freely use are CPU cycles and memory. ● e.g. Chromium renderers are sandboxed processes. http://www.chromium.org/developers/design-documents/sandbox
  • 29. /skia ● Google’s skia graphics library ○ /skia has configurations only. ■ Skia implemetation is located in ● /third_party/skia ○ https://code.google.com/p/skia/ ○ See also: some wrappers in /ui/gfx
  • 30. /third_party ● All third-party libraries that Chrome used. ○ /third_party/webkit ■ webkit fork, known as ‘blink’ ○ /third_party/webrtc ○ /third_party/webgl ○ /third_party/libc++ ○ /third_party/flac ○ … ● Not only C/C++, Java libraries ○ You can find js project or python tools in this directories. :)
  • 31. /ui ● Contains discrete components used to build Chromium’s user interfaces ○ each subdir has to have isolated component. ■ ui/gfx ● Shared graphics classes. ● These form the base of Chromium’s UI Graphics ■ ui/views ● A simple framework for doing UI development, providing rendering, layout and event handling. ○ Most of the browser UI is implemented in this. ○ Contains the base objects. ● See also: ○ /chrome/browser/ui/views.
  • 32. /v8 ● Google JavaScript Engine ○ except Chrome for iOS ■ The iOS security model does not allow an app to execute native code from writeable memory. ■ Memory is either writeable or executable (but read-only). ■ However, V8 is a pure compiler, and doesn't have an interpreter. ○ Project Home: ■ https://code.google.com/p/v8/
  • 33. /webkit ● All of Chromium's Webkit related stuff ○ But, currently there’re quite many actions are that moving to out of ‘/webkit’ ■ e.g. /content, /chrome, … ○ Will be deprecated? Maybe?!