|
4 | 4 |
|
5 | 5 | import 'dart:async';
|
6 | 6 |
|
| 7 | +import 'package:collection/collection.dart'; |
7 | 8 | import 'package:meta/meta.dart';
|
8 | 9 | import 'package:process/process.dart';
|
9 | 10 | import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart' hide StackTrace;
|
@@ -145,6 +146,31 @@ class ChromiumLauncher {
|
145 | 146 | /// The executable this launcher will use.
|
146 | 147 | String findExecutable() => _browserFinder(_platform, _fileSystem);
|
147 | 148 |
|
| 149 | + /// Creates a user data directory for Chrome based on provided flags or creates a temporary one. |
| 150 | + /// |
| 151 | + /// This method handles the creation of Chrome's user data directory in two ways: |
| 152 | + /// 1. If webBrowserFlags contains a --user-data-dir flag, it uses that directory |
| 153 | + /// 2. Otherwise, it creates a temporary directory in the system's temp location |
| 154 | + /// |
| 155 | + /// The user data directory is where Chrome stores user preferences, cookies, |
| 156 | + /// and other session data. Using a temporary directory ensures a clean state |
| 157 | + /// for each launch, while allowing custom directories through flags for |
| 158 | + /// persistent configurations. |
| 159 | + Directory _createUserDataDirectory(List<String> webBrowserFlags) { |
| 160 | + if (webBrowserFlags.isNotEmpty) { |
| 161 | + final String? userDataDirFlag = webBrowserFlags.firstWhereOrNull( |
| 162 | + (String flag) => flag.startsWith('--user-data-dir='), |
| 163 | + ); |
| 164 | + |
| 165 | + if (userDataDirFlag != null) { |
| 166 | + final Directory userDataDir = _fileSystem.directory(userDataDirFlag.split('=')[1]); |
| 167 | + webBrowserFlags.remove(userDataDirFlag); |
| 168 | + return userDataDir; |
| 169 | + } |
| 170 | + } |
| 171 | + return _fileSystem.systemTempDirectory.createTempSync('flutter_tools_chrome_device.'); |
| 172 | + } |
| 173 | + |
148 | 174 | /// Launch a Chromium browser to a particular `host` page.
|
149 | 175 | ///
|
150 | 176 | /// [headless] defaults to false, and controls whether we open a headless or
|
@@ -189,9 +215,7 @@ class ChromiumLauncher {
|
189 | 215 | }
|
190 | 216 | }
|
191 | 217 |
|
192 |
| - final Directory userDataDir = _fileSystem.systemTempDirectory.createTempSync( |
193 |
| - 'flutter_tools_chrome_device.', |
194 |
| - ); |
| 218 | + final Directory userDataDir = _createUserDataDirectory(webBrowserFlags); |
195 | 219 |
|
196 | 220 | if (cacheDir != null) {
|
197 | 221 | // Seed data dir with previous state.
|
|
0 commit comments