blob: 777b543fa5b6ced6b1994a682536d850ebdf5592 [file] [log] [blame] [view]
# Chromium docs
This directory contains chromium project documentation in
[Gitiles-flavored Markdown]. It is automatically [rendered by Gitiles].
[Gitiles-flavored Markdown]:
[rendered by Gitiles]:
If you add new documents, please also add a link to them in the Document Index
## Creating Documentation
Markdown documents must follow the
[style guide](
### Preview local changes using [md_browser](../tools/md_browser/):
# in chromium checkout
This is only an estimate. The **gitiles** view may differ.
### Review changes online with gerrit's links to gitiles:
1. Upload a patch to gerrit, or receive a review request.
2. View a specific .md file.
3. Click on **gitiles** link at top of page.
This **gitiles** view is the authoritative view, exactly the same as will be
used when committed.
## Document Index
### Checking Out and Building
* [Linux Build Instructions]( - Linux
* [Mac Build Instructions]( - MacOS
* [Windows Build Instructions]( - Windows
* [Android Build Instructions]( - Android target
(on a Linux host)
* [Cast Build Instructions]( - Cast target
(on a Linux host)
* [Cast for Android Build Instructions]( -
Cast for Android (on a Linux host)
* [iOS Build Instructions](ios/ - iOS target (on a MacOS
* [Linux Chromium ARM Recipes]( - Recipes for building
Chromium for ARM on Linux.
* [Common Build Tasks]( - Recipes for slightly more
advanced build tasks
* [Chrome Component Build]( - Faster builds using more
* [Using the BuildRunner]( - Scripts that extract build
stops from builders and runs them locally on a slave
* [Cr User Manual]( - Manual for `cr`, a tool that tries to
hide some of the tools used for working on Chromium behind an abstraction
### Design Docs
* See [design/](design/
### Integrated Development Environment (IDE) Set Up Guides
* [Android Studio]( - Android Studio for Android builds
* [Eclipse for Android]( - Eclipse for Android
* [Eclipse for Linux]( - Eclipse for other platforms
(This guide was written for Linux, but is probably usable on Windows/MacOS
as well)
* [Qt Creator]( - Using Qt Creator as an IDE or GUI debugger
* [Setting up Visual Studio Code]( - Visual Studio Code
* [EMACS Notes]( - EMACS commands/styles/tool integrations
* [Atom]( - Atom multi-platform code editor
### Git
* [Git Cookbook]( - A collection of git recipes for common
* [Git Tips]( - More git tips
### Clang
* [Clang Compiler]( - General information on the clang compiler, used
by default on Mac and Linux
* [Clang Tool Refactoring]( - Leveraging clang tools
to perform refactorings that are AST-aware
* [The Clang Static Analyzer]( - How to enable static
analysis at build time
* [Writing Clang Plugins]( - Don't write a clang
plugin, but if you do, read this
* [Updating Clang]( - Updating the version of Clang used to
* [Using clang-format on Chromium C++ Code]( - Various ways to
invoke clang-format on C++ code
* [Clang Tidy]( - Support for the `clang-tidy` tool in Chromium
* [Updating Clang Format Binaries]( - How up
update the clang-format binaries that come with a checkout of Chromium
### General Development
* [Code Reviews]( - Code review requirements and guidelines
* [Respectful Code Reviews]( - A guide for code reviewers
* [Respectful Changes]( - A guide for code authors
* [LUCI Migration FAQ]( - FAQ on Buildbot-to-LUCI
builder migration for Chromium
* [Tour of Continuous Integration UI]( - A tour of our
the user interface for LUCI, our continuous integration system
* [Closure Compilation]( - The _Closure_ JavaScript
* [Threading and Tasks in Chrome]( - How to run tasks
and handle thread safety in Chrome.
* [Subtle Threading Bugs and Patterns to Avoid Them]( -
Threading pitfalls to avoid.
* [Callback<> and Bind()]( - All about Callbacks, Closures, and
* [Views Platform Styling](ui/views/ - How views are styled
to fit in different native platforms
* [Tab Helpers]( - Using WebContents/WebContentsObserver to add
features to browser tabs.
* [Adding third_party Libraries]( - How to get code
into third_party/
* [Graphical Debugging Aid for Chromium Views]( -
Visualizing view trees during debugging
* [Bitmap Pipeline]( - How bitmaps are moved from the
renderer to the screen.
* [base::Optional]( - How to use `base::Optional` in C++ code.
* [Using the Origin Trials Framework]( - A
framework for conditionally enabling experimental APIs for testing.
* [`ClientTagBasedModelTypeProcessor` in Unified Sync and Storage](sync/uss/ -
Notes on the central data structure used in Chrome Sync.
* [Chrome Sync's Model API](sync/ - Data models used for syncing
information across devices using Chrome Sync.
* [Ozone Overview]( - Ozone is an abstraction layer between
the window system and low level input and graphics.
* [Optimizing Chrome Web UIs]( - Notes on making webuis
more performant
* [ES6 Support in Chromium]( - Implementation of ECMAScript6
features in Chromium
* [Adding a new feature flag in chrome://flags]( - Quick
guide to add a new feature flag to experiment your feature.
* [Guidelines for considering branch dates in project planning]( -
What to do (and not to do) around branch dates when scheduling your project
### Testing
* [Running and Debugging Layout Tests](testing/
* [Writing Layout Tests](testing/ - Layout Tests using
* [Layout Test Expectations and Baselines](testing/ -
Setting expected results of layout tests.
* [Layout Tests Tips](testing/ - Best practices for Layout
* [Layout Tests with Manual Fallback](testing/ -
Writing tests that simulate manual interventions
* [Extending the Layout Test Framework](
* [Fixing Layout Test Flakiness](testing/ -
Diagnosing and fixing layout test flakiness due to ordering dependencies.
* [Running Layout Tests using `content_shell`](testing/ -
Running layout tests by hand.
* [Testing Browser UI](testing/ - Using TestBrowserUi
* [Web Platform Tests](testing/ - Shared tests across
browser vendors
* [Using Breakpad with `content_shell`](testing/ -
Capture stack traces on layout test crashes without an attached debugger
* [Test Descriptions]( - Unit test targets that can be
built, with associated desciptions.
* [IPC Fuzzer]( - Fuzz testing of Chromium IPC interfaces.
### Misc Linux-Specific Docs
* [Linux Proxy Config]( - Network proxy sources on Linux
* [Debugging SSL on Linux]( - Tips on debugging SSL
code in Linux
* [Linux Cert Managment]( - Managing X.509
Certificates in Linux
* [Tips for Debugging on Linux](
* [Linux GTK Theme Integration]( - Having
Chrome match the GTK+ theme.
* [Gtk vs ViewsGtk]( - Notes on when to use Gtk vs
* [Browser Plugins on Linux]( - A collection of links to
information on how browser plugins work on Linux
* [Linux Crash Dumping]( - How Breakpad uploads crash
reports to Google crash servers.
* [Linux Minidump to Core]( - How to convert a
Breakpad-generated minidump files to a core file readable by most debuggersx
* [Linux Sandbox IPC]( - The lower level UPC system used
to route requests from the bottom of the call stack up into the browser.
* [Linux Dev Build as Default Browser]( -
How to configure a Dev build of Chrome as the default browser in Linux.
* [Linux Chromium Packages]( - Packages of Chromium
browser (not Chrome) provided by some Linux distributions.
* [`seccomp` Sandbox Crash Dumping]( - Notes
on crash dumping a process running in a seccomp sandbox.
* [Linux Password Storage]( - Keychain integrations
between Chromium and Linux.
* [Linux Sublime Development]( - Using Sublime as an IDE
for Chromium development on Linux.
* [Building and Debugging GTK]( - Building
Chromium against GTK using lower optimization levels and/or more debugging
* [Debugging GTK]( - Using the GTK Debug packages and
related tools.
* [Chroot Notes]( - Setting up a chroot to work around
libfreetype differences in some versions of Linux.
* [Linux Sandboxing]( - The Linux multi-process model to
isolate browser components with different privileges.
* [Zygote Process]( - How the Linux Zygote process, used to
spawn new processes, works.
* [Running Layout Tests on Linux]( - Linux-specific
instructions for running layout tests.
* [Linux Sysroot Images]( - How builds use libraries on Linux
* [Linux Hardware Video Decoding]( - Enabling
hardware video decode codepaths on Linux
### Misc MacOS-Specific Docs
* [Using CCache on Mac]( - Speed up builds on Mac using ccache
with clang/ninja
* [Cocoa tips and tricks]( - A collection of idioms
used when writing Cocoa views and controllers
* [MacViews Release Plan](ui/views/
### Misc Windows-Specific Docs
* [Handling cygwin rebaseall failures](
* [Hacking on ANGLE in Chromium]( - OpenGL ES 2.0 built
on top of DirectX
* [Retrieveing Code Analysis Warnings]( -
How to retrieve and summarize the warnings generated by Microsoft VC++'s
`/analyze` compile option.
* [Windows Split DLLs]( - Splitting `chrome.dll` into
multiple dlls to work around toolchain limitations on Windows.
### Misc Android-Specific Docs
* [Google Play Services in Chrome for Android](
* [Accessing C++ Enums in Java]( - How
to use C++-defined enums in Java code
* [Profiling Content Shell on Android]( -
Setting up profiling for `content_shell` on Android
* [Working Remotely with Android]( - Building
on a remote machine for an Android device connected to your local machine
* [Android Test Instructions]( - Running a build
on an Android device or emulator.
* [Android Debugging]( - Tools and tips for
how to debug Java and/or C/C++ code running on Android.
* [Android Logging]( - How Chrome's logging API works with
`android.util.Log` on Android, and usage guidelines.
* [Chromoting Android Hacking]( - Viewing the
logs and debugging the Chrome Remote Desktop Android client.
* [Android Java Static Analysis](../build/android/docs/ - Catching
Java related issues at compile time with the 'lint' tool.
* [Java Code Coverage](../build/android/docs/ - Collecting code
coverage data with the EMMA tool.
* [Android BuildConfig files](../build/android/docs/ -
What are .build_config files and how they are used.
### Misc iOS-Specific Docs
* [Continuous Build and Test Infrastructure for Chromium for iOS](ios/
* [Opening links in Chrome for iOS](ios/ - How to have your
iOS app open links in Chrome.
* [User Agent in Chrome for iOS](ios/ - Notes on User Agent
strings using Chrome for iOS.
* [Running iOS test suites locally](ios/
### Misc Chrome-OS-Specific Docs
* [Chrome Logging on Chrome OS](
### Media
* [Audio Focus Handling](media/ - How multiple MediaSession
audio streams interact
* [Autoplay of HTMLMediaElements](media/ - How HTMLMediaElements
are autoplayed.
* [Piranha Plant]( - Future architecture of MediaStreams
### Accessibility
* [Accessibility Overview](accessibility/ - Overview of
accessibility concerns and approaches in Chromium.
* [Accessibility Tests](accessibility/ - Where to find
accessibility-related tests in the codebase.
* [ChromeVox on Chrome OS](accessibility/ - Enabling spoken
feedback (ChromeVox) on Chrome OS.
* [ChromeVox on Desktop Linux](accessibility/ -
Enabling spoken feedback (ChromeVox) on desktop Linux.
* [BRLTTY in Chrome OS](accessibility/ - Chrome OS integration with
BRLTTY to support refreshable braille displays
* [PATTS on Chrome OS](accessibility/ - Notes on the PATTS speech
sythesis engine used on Chrome OS
* [VoiceOver](ios/ - Using Apple's VoiceOver feature with
Chromium on iOS.
### Memory Infrastructure Timeline Profiling (MemoryInfra)
* [Overview](memory-infra/
* [GPU Profiling](memory-infra/
* [Adding Tracing to a Component](memory-infra/
* [Enabling Startup Tracing](memory-infra/
* [Memory Usage in CC](memory-infra/
* [Memory Benchmarks](memory-infra/
* [Heap Profiling](memory-infra/
* [Heap Profiling Internals](memory-infra/
### Misc
* [Useful URLs]( - A collection of links to various tools and
* [ERC IRC]( - Using ERC in EMACS to access IRC
* [Kiosk Mode]( - Simulating kiosk mode.
* [User Handle Mapping]( - Names of developers across
* [Documentation Best Practices](
* [Documentation Guidelines](
* [Shift-Based Development]( - An experiment in
handing off development of coordinated work between developers in different
time zones.
* [Chromium Browser vs Google Chrome]( -
What's the difference between _Chromium Browser_ and _Google Chrome_?
* [Proxy Auto Config using WPAD]( - How WPAD servers are
used to automatically set proxy settings.
* [Installing Chromium OS on VMWare]( - How to
install Chromium OS on VMWare.
* [User Data Directory]( - How the user data and cache
directories are determined on all platforms.
### Probably Obsolete
* [Old Chrome OS build instructions](
* [TPM Quick Reference]( - Trusted Platform Module notes.
* [System Hardening Features]( - A list of
current and planned Chrome OS security features.
* [Browser View Resizer]( - Design doc for making
browser window resizing easier on Windows.
* [WebView Policies](
* [Linux Profiling]( - How to profile Chromium on Linux
* [Linux Graphics Pipeline](
* [Linux `SUID` Sandbox]( - Sandboxing renderers using a
SUID binary on Linux
* [Linux `SUID` Sandbox Development]( -
Development on the above system.
* [Linux PID Namespace Support](
* [Vanilla msysgit workflow]( - A workflow for
using mostly vanilla git on Windows.
* [Old Chromoting Build Instructions](
* [Old Options]( - Pre-Material Design chrome://settings