summaryrefslogtreecommitdiff
path: root/chromium/docs/README.md
blob: b4601dfc03c97b8f97dfd2d64fae859e78a811f7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
# Chromium docs

This directory contains chromium project documentation in
[Gitiles-flavored Markdown](https://gerrit.googlesource.com/gitiles/+/master/Documentation/markdown.md).
It is automatically
[rendered by Gitiles](https://chromium.googlesource.com/chromium/src/+/master/docs/).

If you add new documents, please also add a link to them in the Document Index
below.

[TOC]

## Style guide

Markdown documents must follow the [style guide](https://github.com/google/styleguide/tree/gh-pages/docguide).

## Previewing changes

You can preview your local changes using [md_browser](../tools/md_browser/):

```bash
# in chromium checkout
./tools/md_browser/md_browser.py
```

To review someone else's changes, apply them locally first:

```bash
# in chromium checkout
git cl patch <CL number or URL>
./tools/md_browser/md_browser.py
```

## Document Index

### Checking Out and Building
*   [Linux Build Instructions](linux_build_instructions.md) - Linux
*   [Mac Build Instructions](mac_build_instructions.md) - MacOS
*   [Windows Build Instructions](windows_build_instructions.md) - Windows
*   [Android Build Instructions](android_build_instructions.md) - Android target
    (on a Linux host)
*   [Cast Build Instructions](linux_cast_build_instructions.md) - Cast target
    (on a Linux host)
*   [Cast for Android Build Instructions](android_cast_build_instructions.md) -
    Cast for Android (on a Linux host)
*   [iOS Build Instructions](ios/build_instructions.md) - iOS target (on a MacOS
    host)
*   [Linux Chromium ARM Recipes](linux_chromium_arm.md) - Recipes for building
    Chromium for ARM on Linux.
*   [Common Build Tasks](common_build_tasks.md) - Recipes for slightly more
    advanced build tasks
*   [Chrome Component Build](component_build.md) - Faster builds using more
    libraries
*   [Using the BuildRunner](using_build_runner.md) - Scripts that extract build
    stops from builders and runs them locally on a slave
*   [Cr User Manual](cr_user_manual.md) - Manual for `cr`, a tool that tries to
    hide some of the tools used for working on Chromium behind an abstraction
    layer

### Design Docs
*   See [design/README.md](design/README.md)

### Integrated Development Environment (IDE) Set Up Guides
*   [Android Studio](android_studio.md) - Android Studio for Android builds
*   [Eclipse for Android](eclipse.md) - Eclipse for Android
*   [Eclipse for Linux](linux_eclipse_dev.md) - Eclipse for other platforms
    (This guide was written for Linux, but is probably usable on Windows/MacOS
    as well)
*   [Qt Creator](qtcreator.md) - Using Qt Creator as an IDE or GUI debugger
*   [Setting up Visual Studio Code](vscode.md) - Visual Studio Code
*   [EMACS Notes](emacs.md) - EMACS commands/styles/tool integrations
*   [Atom](atom.md) - Atom multi-platform code editor

### Git
*   [Git Cookbook](git_cookbook.md) - A collection of git recipes for common
    tasks
*   [Git Tips](git_tips.md) - More git tips

### Clang
*   [Clang Compiler](clang.md) - General information on the clang compiler, used
    by default on Mac and Linux
*   [Clang Tool Refactoring](clang_tool_refactoring.md) - Leveraging clang tools
    to perform refactorings that are AST-aware
*   [The Clang Static Analyzer](clang_static_analyzer.md) - How to enable static
    analysis at build time
*   [Writing Clang Plugins](writing_clang_plugins.md) - Don't write a clang
    plugin, but if you do, read this
*   [Updating Clang](updating_clang.md) - Updating the version of Clang used to
    build
*   [Using clang-format on Chromium C++ Code](clang_format.md) - Various ways to
    invoke clang-format on C++ code
*   [Clang Tidy](clang_tidy.md) - Support for the `clang-tidy` tool in Chromium
*   [Updating Clang Format Binaries](updating_clang_format_binaries.md) - How up
    update the clang-format binaries that come with a checkout of Chromium

### General Development
*   [Code Reviews](code_reviews.md) - Code review requirements and guidelines
*   [Closure Compilation](closure_compilation.md) - The _Closure_ JavaScript
    compiler
*   [Threading and Tasks in Chrome](threading_and_tasks.md) - How to run tasks
    and handle thread safety in Chrome.
*   [Subtle Threading Bugs and Patterns to Avoid Them](subtle_threading_bugs.md) -
    Threading pitfalls to avoid.
*   [Callback<> and Bind()](callback.md) - All about Callbacks, Closures, and
    Bind().
*   [Views Platform Styling](ui/views/platform_style.md) - How views are styled
    to fit in different native platforms
*   [Tab Helpers](tab_helpers.md) - Using WebContents/WebContentsObserver to add
    features to browser tabs.
*   [Adding third_party Libraries](adding_to_third_party.md) - How to get code
    into third_party/
*   [Graphical Debugging Aid for Chromium Views](graphical_debugging_aid_chromium_views.md) -
    Visualizing view trees during debugging
*   [Bitmap Pipeline](bitmap_pipeline.md) - How bitmaps are moved from the
    renderer to the screen.
*   [base::Optional](optional.md) - How to use `base::Optional` in C++ code.
*   [Using the Origin Trials Framework](origin_trials_integration.md) - A
    framework for conditionally enabling experimental APIs for testing.
*   [`SharedModelTypeProcessor` in Unified Sync and Storage](sync/uss/shared_model_type_processor.md) -
    Notes on the central data structure used in Chrome Sync.
*   [Chrome Sync's Model API](sync/model_api.md) - Data models used for syncing
    information across devices using Chrome Sync.
*   [Ozone Overview](ozone_overview.md) - Ozone is an abstraction layer between
    the window system and low level input and graphics.
*   [Optimizing Chrome Web UIs](optimizing_web_uis.md) - Notes on making webuis
    more performant
*   [ES6 Support in Chromium](es6_chromium.md) - Implementation of ECMAScript6
    features in Chromium

### Testing
*   [Running and Debugging Layout Tests](testing/layout_tests.md)
*   [Writing Layout Tests](testing/writing_layout_tests.md) - Layout Tests using
    `content_shell`
*   [Layout Test Expectations and Baselines](testing/layout_test_expectations.md) -
    Setting expected results of layout tests.
*   [Layout Tests Tips](testing/layout_tests_tips.md) - Best practices for Layout
    Tests
*   [Layout Tests with Manual Fallback](testing/layout_tests_with_manual_fallback.md) -
    Writing tests that simulate manual interventions
*   [Extending the Layout Test Framework](how_to_extend_layout_test_framework.md)
*   [Fixing Layout Test Flakiness](testing/identifying_tests_that_depend_on_order.md) -
    Diagnosing and fixing layout test flakiness due to ordering dependencies.
*   [Running Layout Tests using `content_shell`](testing/layout_tests_in_content_shell.md) -
    Running layout tests by hand.
*   [Testing Browser Dialogs](testing/test_browser_dialog.md) - Using
    TestBrowserDialog
*   [Web Platform Tests](testing/web_platform_tests.md) - Shared tests across
    browser vendors
*   [Using Breakpad with `content_shell`](testing/using_breakpad_with_content_shell.md) -
    Capture stack traces on layout test crashes without an attached debugger
*   [Test Descriptions](test_descriptions.md) - Unit test targets that can be
    built, with associated desciptions.
*   [IPC Fuzzer](ipc_fuzzer.md) - Fuzz testing of Chromium IPC interfaces.

### Misc Linux-Specific Docs
*   [Linux Proxy Config](linux_proxy_config.md) - Network proxy sources on Linux
*   [Debugging SSL on Linux](linux_debugging_ssl.md) - Tips on debugging SSL
    code in Linux
*   [Linux Cert Managment](linux_cert_management.md) - Managing X.509
    Certificates in Linux
*   [Tips for Debugging on Linux](linux_debugging.md)
*   [Linux GTK Theme Integration](linux_gtk_theme_integration.md) - Having
    Chrome match the GTK+ theme.
*   [Gtk vs ViewsGtk](gtk_vs_views_gtk.md) - Notes on when to use Gtk vs
    ViewsGtk
*   [Browser Plugins on Linux](linux_plugins.md) - A collection of links to
    information on how browser plugins work on Linux
*   [Linux Crash Dumping](linux_crash_dumping.md) - How Breakpad uploads crash
    reports to Google crash servers.
*   [Linux Minidump to Core](linux_minidump_to_core.md) - How to convert a
    Breakpad-generated minidump files to a core file readable by most debuggersx
*   [Linux Sandbox IPC](linux_sandbox_ipc.md) - 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](linux_dev_build_as_default_browser.md) -
    How to configure a Dev build of Chrome as the default browser in Linux.
*   [Linux Chromium Packages](linux_chromium_packages.md) - Packages of Chromium
    browser (not Chrome) provided by some Linux distributions.
*   [`seccomp` Sandbox Crash Dumping](seccomp_sandbox_crash_dumping.md) - Notes
    on crash dumping a process running in a seccomp sandbox.
*   [Linux Password Storage](linux_password_storage.md) - Keychain integrations
    between Chromium and Linux.
*   [Linux Sublime Development](linux_sublime_dev.md) - Using Sublime as an IDE
    for Chromium development on Linux.
*   [Building and Debugging GTK](linux_building_debug_gtk.md) - Building
    Chromium against GTK using lower optimization levels and/or more debugging
    symbols.
*   [Debugging GTK](linux_debugging_gtk.md) - Using the GTK Debug packages and
    related tools.
*   [Chroot Notes](using_a_linux_chroot.md) - Setting up a chroot to work around
    libfreetype differences in some versions of Linux.
*   [Linux Sandboxing](linux_sandboxing.md) - The Linux multi-process model to
    isolate browser components with different privileges.
*   [Zygote Process](linux_zygote.md) - How the Linux Zygote process, used to
    spawn new processes, works.
*   [Running Layout Tests on Linux](layout_tests_linux.md) - Linux-specific
    instructions for running layout tests.
*   [Linux Sysroot Images](linux_sysroot.md) - How builds use libraries on Linux
*   [`msttcorefonts` on Mandriva](mandriva_msttcorefonts.md) - Getting fonts
    needed to build Chrome that are not available for Mandriva
*   [Linux Hardware Video Decoding](linux_hw_video_decode.md) - Enabling
    hardware video decode codepaths on Linux

### Misc MacOS-Specific Docs
*   [Using CCache on Mac](ccache_mac.md) - Speed up builds on Mac using ccache
    with clang/ninja
*   [Cocoa tips and tricks](cocoa_tips_and_tricks.md) - A collection of idioms
    used when writing Cocoa views and controllers
*   [MacViews Release Plan](ui/views/macviews_release.md)

### Misc Windows-Specific Docs
*   [Handling cygwin rebaseall failures](cygwin_dll_remapping_failure.md)
*   [Hacking on ANGLE in Chromium](angle_in_chromium.md) - OpenGL ES 2.0 built
    on top of DirectX
*   [Retrieveing Code Analysis Warnings](retrieving_code_analysis_warnings.md) -
    How to retrieve and summarize the warnings generated by Microsoft VC++'s
    `/analyze` compile option.
*   [Windows Split DLLs](windows_split_dll.md) - Splitting `chrome.dll` into
    multiple dlls to work around toolchain limitations on Windows.

### Misc Android-Specific Docs
*   [Google Play Services in Chrome for Android](google_play_services.md)
*   [Accessing C++ Enums in Java](android_accessing_cpp_enums_in_java.md) - How
    to use C++-defined enums in Java code
*   [Profiling Content Shell on Android](profiling_content_shell_on_android.md) -
    Setting up profiling for `content_shell` on Android
*   [Working Remotely with Android](working_remotely_with_android.md) - Building
    on a remote machine for an Android device connected to your local machine
*   [Using FindBugs for Android](use_find_bugs_for_android.md) - Using the open
    source static analysis tool findbugs on the Java code.
*   [Android Test Instructions](android_test_instructions.md) - Running a build
    on an Android device or emulator.
*   [Android Debugging](android_debugging_instructions.md) - Tools and tips for
    how to debug Java and/or C/C++ code running on Android.
*   [Android Logging](android_logging.md) - How Chrome's logging API works with
    `android.util.Log` on Android, and usage guidelines.
*   [Chromoting Android Hacking](chromoting_android_hacking.md) - Viewing the
    logs and debugging the Chrome Remote Desktop Android client.

### Misc iOS-Specific Docs
*   [Continuous Build and Test Infrastructure for Chromium for iOS](ios/infra.md)
*   [Opening links in Chrome for iOS](ios/opening_links.md) - How to have your
    iOS app open links in Chrome.
*   [User Agent in Chrome for iOS](ios/user_agent.md) - Notes on User Agent
    strings using Chrome for iOS.

### Media
*   [Audio Focus Handling](media/audio_focus.md) - How multiple MediaSession
    audio streams interact
*   [Autoplay of HTMLMediaElements](media/autoplay.md) - How HTMLMediaElements
    are autoplayed.
*   [Piranha Plant](piranha_plant.md) - Future architecture of MediaStreams

### Accessibility
*   [Accessibility Overview](accessibility/overview.md) - Overview of
    accessibility concerns and approaches in Chromium.
*   [Accessibility Tests](accessibility/tests.md) - Where to find
    accessibility-related tests in the codebase.
*   [ChromeVox on Chrome OS](accessibility/chromevox.md) - Enabling spoken
    feedback (ChromeVox) on Chrome OS.
*   [ChromeVox on Desktop Linux](accessibility/chromevox_on_desktop_linux.md) -
    Enabling spoken feedback (ChromeVox) on desktop Linux.
*   [BRLTTY in Chrome OS](accessibility/brltty.md) - Chrome OS integration with
    BRLTTY to support refreshable braille displays
*   [PATTS on Chrome OS](accessibility/patts.md) - Notes on the PATTS speech
    sythesis engine used on Chrome OS
*   [VoiceOver](ios/voiceover.md) - Using Apple's VoiceOver feature with
    Chromium on iOS.

### Memory Infrastructure Timeline Profiling (MemoryInfra)
*   [Overview](memory-infra/README.md)
*   [GPU Profiling](memory-infra/probe-gpu.md)
*   [Adding Tracing to a Component](memory-infra/adding_memory_infra_tracing.md)
*   [Enabling Startup Tracing](memory-infra/memory_infra_startup_tracing.md)
*   [Memory Usage in CC](memory-infra/probe-cc.md)
*   [Memory Benchmarks](memory-infra/memory_benchmarks.md)
*   [Heap Profiling](memory-infra/heap_profiler.md)
*   [Heap Profiling Internals](memory-infra/heap_profiler_internals.md)

### Misc
*   [Useful URLs](useful_urls.md) - A collection of links to various tools and
    dashboards
*   [ERC IRC](erc_irc.md) - Using ERC in EMACS to access IRC
*   [Kiosk Mode](kiosk_mode.md) - Simulating kiosk mode.
*   [User Handle Mapping](user_handle_mapping.md) - Names of developers across
    Chromium/IRC/Google
*   [Documentation Best Practices](documentation_best_practices.md)
*   [Documentation Guidelines](documentation_guidelines.md)
*   [Shift-Based Development](shift_based_development.md) - An experiment in
    handing off development of coordinated work between developers in different
    time zones.
*   [Chromium Browser vs Google Chrome](chromium_browser_vs_google_chrome.md) -
    What's the difference between _Chromium Browser_ and _Google Chrome_?
*   [Proxy Auto Config using WPAD](proxy_auto_config.md) - How WPAD servers are
    used to automatically set proxy settings.
*   [Installing Chromium OS on VMWare](installation_at_vmware.md) - How to
    install Chromium OS on VMWare.

### Probably Obsolete
*   [Old ChromeOS build instructions](old_chromeos_build_instructions.md)
*   [TPM Quick Reference](tpm_quick_ref.md) - Trusted Platform Module notes.
*   [System Hardening Features](system_hardening_features.md) - A list of
    current and planned Chrome OS security features.
*   [Browser View Resizer](browser_view_resizer.md) - Design doc for making
    browser window resizing easier on Windows.
*   [WebView Policies](webview_policies.md)
*   [Linux Profiling](linux_profiling.md) - How to profile Chromium on Linux
*   [Linux Graphics Pipeline](linux_graphics_pipeline.md)
*   [Linux `SUID` Sandbox](linux_suid_sandbox.md) - Sandboxing renderers using a
    SUID binary on Linux
*   [Linux `SUID` Sandbox Development](linux_suid_sandbox_development.md) -
    Development on the above system.
*   [Linux PID Namespace Support](linux_pid_namespace_support.md)
*   [Vanilla msysgit workflow](vanilla_msysgit_workflow.md) - A workflow for
    using mostly vanilla git on Windows.
*   [Old Chromoting Build Instructions](old_chromoting_build_instructions.md)
*   [Old Options](chrome_settings.md) - Pre-Material Design chrome://settings
    notes.