summaryrefslogtreecommitdiff
path: root/chromium/docs/user_data_dir.md
blob: ef6c13417f145dab96526a1d2ae9ae2f086ae6b7 (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
# User Data Directory

[TOC]

## Introduction

The user data directory contains profile data such as history, bookmarks, and
cookies, as well as other per-installation local state.

Each [profile](https://support.google.com/chrome/answer/2364824) is a
subdirectory (often `Default`) within the user data directory.

## Current Location

To determine the user data directory for a running Chrome instance:

1. Navigate to `chrome://version`
2. Look for the `Profile Path` field.  This gives the path to the profile
   directory.
3. The user data directory is the parent of the profile directory.

Example (Windows):

* [Profile Path] `C:\Users\Alice\AppData\Local\Google\Chrome\User Data\Default`
* [User Data Dir] `C:\Users\Alice\AppData\Local\Google\Chrome\User Data`

## Default Location

The default location of the user data directory is computed by
[`chrome::GetDefaultUserDataDirectory`](https://cs.chromium.org/chromium/src/chrome/common/chrome_paths_internal.h?q=GetDefaultUserDataDirectory).

Generally it varies by

* OS platform,
* branding ([Chrome vs. Chromium](chromium_browser_vs_google_chrome.md), based
  on `is_chrome_branded` in [GN
  args](https://www.chromium.org/developers/gn-build-configuration)), and
* [release channel](https://www.chromium.org/getting-involved/dev-channel)
  (stable / beta / dev / canary).

### Windows

The default location is in the local app data folder:

* [Chrome] `%LOCALAPPDATA%\Google\Chrome\User Data`
* [Chrome Beta] `%LOCALAPPDATA%\Google\Chrome Beta\User Data`
* [Chrome Canary] `%LOCALAPPDATA%\Google\Chrome SxS\User Data`
* [Chromium] `%LOCALAPPDATA%\Chromium\User Data`

(The canary channel suffix is determined using
[`InstallConstants::install_suffix`](https://cs.chromium.org/chromium/src/chrome/install_static/install_constants.h?q=install_suffix).)

### Mac OS X

The default location is in the `Application Support` folder:

* [Chrome] `~/Library/Application Support/Google/Chrome`
* [Chrome Beta] `~/Library/Application Support/Google/Chrome Beta`
* [Chrome Canary] `~/Library/Application Support/Google/Chrome Canary`
* [Chromium] `~/Library/Application Support/Chromium`

(The canary channel suffix is determined using the `CrProductDirName` key in the
browser app's `Info.plist`.)

### Linux

The default location is in `~/.config`:

* [Chrome Stable] `~/.config/google-chrome`
* [Chrome Beta] `~/.config/google-chrome-beta`
* [Chrome Dev] `~/.config/google-chrome-unstable`
* [Chromium] `~/.config/chromium`

(The beta and dev channel suffixes are determined from `$CHROME_VERSION_EXTRA`,
which is passed by the [launch wrapper script](https://cs.chromium.org/chromium/src/chrome/installer/linux/common/wrapper?q=CHROME_VERSION_EXTRA).)

The `~/.config` portion of the default location can be overridden by
`$CHROME_CONFIG_HOME` (since M61) or by `$XDG_CONFIG_HOME`.

Note that `$XDG_CONFIG_HOME` affects all applications conforming to the
[XDG Base Directory Spec](https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html),
while `$CHROME_CONFIG_HOME` is specific to Chrome and Chromium.

### Chrome OS

The default location is: `/home/chronos`

### Android

The default location comes from
[Context.getDir](https://developer.android.com/reference/android/content/Context.html#getDir%28java.lang.String,%20int%29)
and is specific to the app.

Example: `/data/user/0/com.android.chrome/app_chrome`

### iOS

The default location is inside the application support directory in the app
sandbox.

* [Chrome] `Library/Application Support/Google/Chrome`
* [Chromium] `Library/Application Support/Chromium`

## Overriding the User Data Directory

### Command Line

On most platforms, the user data directory can be overridden by passing the
`--user-data-dir` command-line flag to the Chrome binary.

The override happens in `chrome/app/chrome_main_delegate.cc`. Platforms not
building with the file may not have implemented the override. Overriding the
user data directory via the command line is not supported on iOS.

Example:

* [Windows] `chrome.exe --user-data-dir=c:\foo`
* [Linux] `google-chrome --user-data-dir=/path/to/foo`

### Environment (Linux)

On Linux, the user data directory can also be overridden with the
`$CHROME_USER_DATA_DIR` environment variable.

The `--user-data-dir` flag takes precedence if both are present.

### Chrome Remote Desktop sessions (Linux)

A single Chrome instance cannot show windows on multiple X displays, and two
running Chrome instances cannot share the same user data directory.
Therefore, it's desirable for Chrome to have a separate user data directory
when running inside a [Chrome Remote
Desktop](https://support.google.com/chrome/answer/1649523) (CRD) virtual session
on a Linux host.

By default, CRD achieves this by setting `$CHROME_USER_DATA_DIR` in the session.
Unfortunately this means that inside the session we don't get separate defaults
for different channels (Stable, Beta, Dev) or for Chrome vs. Chromium.  This can
lead to profile version errors ("Your profile can not be used because it is from
a newer version of Google Chrome").

Since M61, this can be solved by setting `$CHROME_CONFIG_HOME` instead of
`$CHROME_USER_DATA_DIR`. Specifically, put the following in
`~/.chrome-remote-desktop-session`:

```
export CHROME_CONFIG_HOME="$HOME/.config/chrome-remote-desktop/chrome-config"
unset CHROME_USER_DATA_DIR
. /etc/chrome-remote-desktop-session
```

Then restart the host by running: `/etc/init.d/chrome-remote-desktop restart`

### Writing an AppleScript wrapper (Mac OS X)

On Mac OS X, you can create an application that runs Chrome with a custom
`--user-data-dir`:

1. Open Applications > Utilities > Script Editor.

2. Enter:

```
set chrome to "\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\""
set userdatadir to "\"$HOME/Library/Application Support/Google/Chrome Alt\""
do shell script chrome & " --user-data-dir=" & userdatadir & " > /dev/null 2>&1 &"
```

3. Modify as needed for your installation path, Chrome versus Chromium, and
   desired user data directory.

4. Save the script in your Applications directory with the file format
   "Application".

5. Close the Script Editor, find your newly created application, and run it.
   This opens a Chrome instance pointing to your new profile.

If you want, you can give this application the same icon as Chrome:

1. Select the Google Chrome application and choose File > Get Info.
2. Select the icon at the top left of the info dialog.  You will see a blue
   highlight around the icon.
3. Press ⌘C to copy the icon.
4. Open the info dialog for the new application and select the icon in the
   top left.
5. Press ⌘V to paste the copied icon.

## User Cache Directory

On Windows and ChromeOS, the user cache dir is the same as the profile dir.
(The profile dir is inside the user data dir.)

On Mac OS X and iOS, the user cache dir is derived from the profile dir as
follows:

1. If `Library/Application Support` is an ancestor of the profile dir, the user
   cache dir is `Library/Caches` plus the relative path from `Application
   Support` to the profile dir.
2. Otherwise, the user cache dir is the same as the profile dir.

Example (Mac OS X):

* [user data dir] `~/Library/Application Support/Google/Chrome`
* [profile dir] `~/Library/Application Support/Google/Chrome/Default`
* [user cache dir] `~/Library/Caches/Google/Chrome/Default`

On Linux, the user cache dir is derived from the profile dir as follows:

1. Determine the system config dir.  This is `~/.config`, unless overridden by
   `$XDG_CONFIG_HOME`.  (This step ignores `$CHROME_CONFIG_HOME`.)
2. Determine the system cache dir.  This is `~/.cache`, unless overridden by
   `$XDG_CACHE_HOME`.
3. If the system config dir is an ancestor of the profile dir, the user cache
   dir is the system cache dir plus the relative path from the system config
   dir to the profile dir.
4. Otherwise, the user cache dir is the same as the profile dir.

Example (Linux):

* [user data dir] `~/.config/google-chrome`
* [profile dir] `~/.config/google-chrome/Default`
* [user cache dir] `~/.cache/google-chrome/Default`

On Android, the user cache directory comes from
[Context.getCacheDir](https://developer.android.com/reference/android/content/Context.html#getCacheDir%28%29).