-
Notifications
You must be signed in to change notification settings - Fork 29.8k
feat(tool): Respect user-data-dir flag from web-browser-flag #169445
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(tool): Respect user-data-dir flag from web-browser-flag #169445
Conversation
|
It looks like this pull request may not have tests. Please make sure to add tests or get an explicit test exemption before merging. If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix? Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.If you believe this PR qualifies for a test exemption, contact "@test-exemption-reviewer" in the #hackers channel in Discord (don't just cc them here, they won't see it!). The test exemption team is a small volunteer group, so all reviewers should feel empowered to ask for tests, without delegating that responsibility entirely to the test exemption group. |
bkonyi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the contribution!
This should ideally be tested. Can you add a test to make sure this flag is respected properly?
mdebbar
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM if it LGT @bkonyi
…d rearranged variables
bkonyi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Almost there!
There's some analysis and formatting failures that need to be addressed before this can land:
info • The imported package 'collection' isn't a dependency of the importing package • packages/flutter_tools/lib/src/web/chrome.dart:7:8 • depend_on_referenced_packages
info • Use 'const' with the constructor to improve performance • packages/flutter_tools/test/web.shard/chrome_test.dart:942:7 • prefer_const_constructors
info • Use 'const' literals as arguments to constructors of '@immutable' classes • packages/flutter_tools/test/web.shard/chrome_test.dart:943:18 • prefer_const_literals_to_create_immutables
|
@reynaldots, just checking in. Do you still plan on moving forward with this PR? |
@bkonyi Yes! I've been having a crazy month releasing an app, but this weekend I'm going to refactor it. And when analysis sad: info • The imported package 'collection' isn't a dependency of the importing package • packages/flutter_tools/lib/src/web/chrome.dart:7:8 • depend_on_referenced_packages What should i do? Because firstWhereOrNull uses that package. |
|
Not a problem! Just wanted to make sure you had intentions of coming back to this :) To fix the formatting issue, you should just have to run For the |
|
Hi @bkonyi! I finished the corrections. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
|
autosubmit label was removed for flutter/flutter/169445, because This PR has not met approval requirements for merging. The PR author is not a member of flutter-hackers and needs 1 more review(s) in order to merge this PR.
|
|
Unable to create the revert pull request due to ProcessException: Standard out |
|
Oops. You're right. Thanks! |
…#169445) ### Respect user-data-dir flag from web-browser-flag Currently, it's already possible to pass `web-browser-flag` when launching Chrome, but the `user-data-dir` flag doesn't work as expected, and there are some reasons for that. In the implementation made in [PR flutter#104935](flutter#104935), the `web-browser-flag` is appended at the end of the Chrome launch arguments. For most scenarios, this works fine, as demonstrated in the Chrome unit test below: https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc ``` TEST(CommandLineTest, MultipleSameSwitch) { const CommandLine::CharType* argv[] = { FILE_PATH_LITERAL("program"), FILE_PATH_LITERAL("--foo=one"), // --foo first time FILE_PATH_LITERAL("-baz"), FILE_PATH_LITERAL("--foo=two") // --foo second time }; CommandLine cl(std::size(argv), argv); EXPECT_TRUE(cl.HasSwitch("foo")); EXPECT_TRUE(cl.HasSwitch("baz")); EXPECT_EQ("two", cl.GetSwitchValueASCII("foo")); } ``` In this scenario, the parser will consider the last occurrence of a flag. However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for `--user-data-dir`, which is parsed very early during Chrome startup. The proposed code checks whether `--user-data-dir` was provided via `web-browser-flag`, and if so, it uses that value instead of the default `%temp%\flutter_tools_chrome_device.xpto` temporary directory. This also resolve this comment: flutter#104935 (comment) Example: `launch.json` ``` { "version": "0.2.0", "configurations": [ { "name": "flutter", "request": "launch", "type": "dart" }, { "name": "flutter (profile mode)", "request": "launch", "type": "dart", "flutterMode": "profile" }, { "name": "flutter (release mode)", "request": "launch", "type": "dart", "flutterMode": "release" }, { "name": "Flutter for web (hot reloadable)", "type": "dart", "request": "launch", "program": "lib/main.dart", "args": [ "-d", "chrome", "--web-port=5000", "--web-experimental-hot-reload", "--web-browser-flag=--user-data-dir=D:\\_Desenv\\flutter_tests\\chrome_profile" ] } ] } ``` `chrome://version` | Before | After | |--------|--------| |  |  | Folder | Before | After | |--------|--------| |  |  | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
flutter#169445 was stale (not re-based), causing a tree failure. Let's just land this versus reverting.
Roll Flutter from 20788c0 to cfbaa18 (43 revisions) flutter/flutter@20788c0...cfbaa18 2025-07-28 git@reki.re Remove shortner (flutter/flutter#172844) 2025-07-28 matanlurey@users.noreply.github.com Update `flutter pub get` to use `flutter.version.json` (instead of `version`) (flutter/flutter#172798) 2025-07-27 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from i7RS-4iBtdndwa3Jy... to tK_PAaLeo0pUxi8hv... (flutter/flutter#172827) 2025-07-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 4IewCwqcEm7r4QsXd... to i7RS-4iBtdndwa3Jy... (flutter/flutter#172808) 2025-07-26 98614782+auto-submit[bot]@users.noreply.github.com Reverts "fix: get content hash for master on local engine branches (#172792)" (flutter/flutter#172805) 2025-07-26 codefu@google.com fix: build size_exp artifacts in post (flutter/flutter#172802) 2025-07-26 codefu@google.com fix: get content hash for master on local engine branches (flutter/flutter#172792) 2025-07-25 matanlurey@users.noreply.github.com Update `main`/`master` repoExceptions analysis set (flutter/flutter#172796) 2025-07-25 matanlurey@users.noreply.github.com Remove deprecated `--[no-]-disable-dds` (flutter/flutter#172791) 2025-07-25 matanlurey@users.noreply.github.com `last_engine_commit.ps1`: Use `$flutterRoot` instead of `$gitTopLevel` (flutter/flutter#172786) 2025-07-25 matanlurey@users.noreply.github.com Check file contents, remove tests that are now invalid (`: 'none'`) (flutter/flutter#172788) 2025-07-25 loic.peron@inetum.com windows: allow pwsh.bat wrapper (flutter/flutter#171778) 2025-07-25 bdero@google.com [Impeller] Log glCheckFrameBufferStatus output when it fails in blit pass. (flutter/flutter#172592) 2025-07-25 matanlurey@users.noreply.github.com Remove deprecated `AssetManifest.json` file (flutter/flutter#172594) 2025-07-25 matanlurey@users.noreply.github.com Refactor `verifyVersion` into typed `Version` object, use it (flutter/flutter#172780) 2025-07-25 jmccandless@google.com Bump the customer tests to pick up an update to Zulip's tests, for th… (flutter/flutter#172733) 2025-07-25 matanlurey@users.noreply.github.com Rename `AppRunLogger`, stop writing status messages that break JSON (flutter/flutter#172591) 2025-07-25 matanlurey@users.noreply.github.com Add `--dart-define`, `-D` to `assemble`, deprecate `--define`, `-d`. (flutter/flutter#172510) 2025-07-25 rmolivares@renzo-olivares.dev Fix previous text input connection interrupts enter/space (flutter/flutter#171973) 2025-07-25 1063596+reidbaker@users.noreply.github.com Update CHANGELOG.md for 3.32.8 (flutter/flutter#172779) 2025-07-25 matanlurey@users.noreply.github.com Fix an `omit-type` lint that is breaking the tree (flutter/flutter#172776) 2025-07-25 reynaldots@gmail.com feat(tool): Respect user-data-dir flag from web-browser-flag (flutter/flutter#169445) 2025-07-25 mdebbar@google.com [web] Fix empty first frame in multiview mode (flutter/flutter#172493) 2025-07-25 jssaadeh@outlook.com Migrate to null aware elements - Part 3 (flutter/flutter#172307) 2025-07-25 mdebbar@google.com Update few links in docs (flutter/flutter#172166) 2025-07-25 engine-flutter-autoroll@skia.org Roll Skia from 768ace3fd144 to 409e1c7ba09b (1 revision) (flutter/flutter#172745) 2025-07-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from a_55b5hqpRnigzuNC... to 4IewCwqcEm7r4QsXd... (flutter/flutter#172742) 2025-07-25 engine-flutter-autoroll@skia.org Roll Skia from 094ac350125f to 768ace3fd144 (18 revisions) (flutter/flutter#172735) 2025-07-25 matanlurey@users.noreply.github.com Remove 2023 deprecated `'platforms'` key from daemon output (flutter/flutter#172593) 2025-07-24 a-siva@users.noreply.github.com Manual roll of Dart from 26dece893751 to 5ede85aff798 (flutter/flutter#172731) 2025-07-24 ievdokdm@gmail.com 169108 ci debug (flutter/flutter#172589) 2025-07-24 31685655+SalehTZ@users.noreply.github.com Improve assertion message in `_MixedBorderRadius.resolve()` (flutter/flutter#172100) 2025-07-24 ahmedsameha1@gmail.com Make sure that a BottomAppBar doesn't crash in 0x0 environment (flutter/flutter#172097) 2025-07-24 ahmedsameha1@gmail.com Handle#6537 bottom navigation bar (flutter/flutter#172404) 2025-07-24 ahmedsameha1@gmail.com Make sure that a MaterialBanner doesn't crash in 0x0 environment (flutter/flutter#172074) 2025-07-24 matanlurey@users.noreply.github.com Remove support for `pluginClass: none` (on `master`; `> 3.35.0`) (flutter/flutter#172579) 2025-07-24 ahmedsameha1@gmail.com Make sure that a Card doesn't crash in 0x0 environment (flutter/flutter#172373) 2025-07-24 ahmedsameha1@gmail.com Make sure that an AboutDialog doesn't crash in 0x0 environment (flutter/flutter#172444) 2025-07-24 ahmedsameha1@gmail.com Make sure that an ActionChip doesn't crash in 0x0 environment (flutter/flutter#172684) 2025-07-24 matanlurey@users.noreply.github.com Delete (unused) `dev/checks_tool` directory (flutter/flutter#172715) 2025-07-24 34871572+gmackall@users.noreply.github.com [Android] Add missing ci configuration for `Linux android_java17_tool_integration_tests` (flutter/flutter#172702) 2025-07-24 srawlins@google.com Flutter-Cherrypick-Process.md - Spell cherry-pick consistently (flutter/flutter#172697) 2025-07-24 matanlurey@users.noreply.github.com Bringup `linux_web_engine_tests`; failing 4+ times in a row (flutter/flutter#172714) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: ...
Roll Flutter from 20788c0 to cfbaa18 (43 revisions) flutter/flutter@20788c0...cfbaa18 2025-07-28 git@reki.re Remove shortner (flutter/flutter#172844) 2025-07-28 matanlurey@users.noreply.github.com Update `flutter pub get` to use `flutter.version.json` (instead of `version`) (flutter/flutter#172798) 2025-07-27 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from i7RS-4iBtdndwa3Jy... to tK_PAaLeo0pUxi8hv... (flutter/flutter#172827) 2025-07-26 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from 4IewCwqcEm7r4QsXd... to i7RS-4iBtdndwa3Jy... (flutter/flutter#172808) 2025-07-26 98614782+auto-submit[bot]@users.noreply.github.com Reverts "fix: get content hash for master on local engine branches (#172792)" (flutter/flutter#172805) 2025-07-26 codefu@google.com fix: build size_exp artifacts in post (flutter/flutter#172802) 2025-07-26 codefu@google.com fix: get content hash for master on local engine branches (flutter/flutter#172792) 2025-07-25 matanlurey@users.noreply.github.com Update `main`/`master` repoExceptions analysis set (flutter/flutter#172796) 2025-07-25 matanlurey@users.noreply.github.com Remove deprecated `--[no-]-disable-dds` (flutter/flutter#172791) 2025-07-25 matanlurey@users.noreply.github.com `last_engine_commit.ps1`: Use `$flutterRoot` instead of `$gitTopLevel` (flutter/flutter#172786) 2025-07-25 matanlurey@users.noreply.github.com Check file contents, remove tests that are now invalid (`: 'none'`) (flutter/flutter#172788) 2025-07-25 loic.peron@inetum.com windows: allow pwsh.bat wrapper (flutter/flutter#171778) 2025-07-25 bdero@google.com [Impeller] Log glCheckFrameBufferStatus output when it fails in blit pass. (flutter/flutter#172592) 2025-07-25 matanlurey@users.noreply.github.com Remove deprecated `AssetManifest.json` file (flutter/flutter#172594) 2025-07-25 matanlurey@users.noreply.github.com Refactor `verifyVersion` into typed `Version` object, use it (flutter/flutter#172780) 2025-07-25 jmccandless@google.com Bump the customer tests to pick up an update to Zulip's tests, for th… (flutter/flutter#172733) 2025-07-25 matanlurey@users.noreply.github.com Rename `AppRunLogger`, stop writing status messages that break JSON (flutter/flutter#172591) 2025-07-25 matanlurey@users.noreply.github.com Add `--dart-define`, `-D` to `assemble`, deprecate `--define`, `-d`. (flutter/flutter#172510) 2025-07-25 rmolivares@renzo-olivares.dev Fix previous text input connection interrupts enter/space (flutter/flutter#171973) 2025-07-25 1063596+reidbaker@users.noreply.github.com Update CHANGELOG.md for 3.32.8 (flutter/flutter#172779) 2025-07-25 matanlurey@users.noreply.github.com Fix an `omit-type` lint that is breaking the tree (flutter/flutter#172776) 2025-07-25 reynaldots@gmail.com feat(tool): Respect user-data-dir flag from web-browser-flag (flutter/flutter#169445) 2025-07-25 mdebbar@google.com [web] Fix empty first frame in multiview mode (flutter/flutter#172493) 2025-07-25 jssaadeh@outlook.com Migrate to null aware elements - Part 3 (flutter/flutter#172307) 2025-07-25 mdebbar@google.com Update few links in docs (flutter/flutter#172166) 2025-07-25 engine-flutter-autoroll@skia.org Roll Skia from 768ace3fd144 to 409e1c7ba09b (1 revision) (flutter/flutter#172745) 2025-07-25 engine-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from a_55b5hqpRnigzuNC... to 4IewCwqcEm7r4QsXd... (flutter/flutter#172742) 2025-07-25 engine-flutter-autoroll@skia.org Roll Skia from 094ac350125f to 768ace3fd144 (18 revisions) (flutter/flutter#172735) 2025-07-25 matanlurey@users.noreply.github.com Remove 2023 deprecated `'platforms'` key from daemon output (flutter/flutter#172593) 2025-07-24 a-siva@users.noreply.github.com Manual roll of Dart from 26dece893751 to 5ede85aff798 (flutter/flutter#172731) 2025-07-24 ievdokdm@gmail.com 169108 ci debug (flutter/flutter#172589) 2025-07-24 31685655+SalehTZ@users.noreply.github.com Improve assertion message in `_MixedBorderRadius.resolve()` (flutter/flutter#172100) 2025-07-24 ahmedsameha1@gmail.com Make sure that a BottomAppBar doesn't crash in 0x0 environment (flutter/flutter#172097) 2025-07-24 ahmedsameha1@gmail.com Handle#6537 bottom navigation bar (flutter/flutter#172404) 2025-07-24 ahmedsameha1@gmail.com Make sure that a MaterialBanner doesn't crash in 0x0 environment (flutter/flutter#172074) 2025-07-24 matanlurey@users.noreply.github.com Remove support for `pluginClass: none` (on `master`; `> 3.35.0`) (flutter/flutter#172579) 2025-07-24 ahmedsameha1@gmail.com Make sure that a Card doesn't crash in 0x0 environment (flutter/flutter#172373) 2025-07-24 ahmedsameha1@gmail.com Make sure that an AboutDialog doesn't crash in 0x0 environment (flutter/flutter#172444) 2025-07-24 ahmedsameha1@gmail.com Make sure that an ActionChip doesn't crash in 0x0 environment (flutter/flutter#172684) 2025-07-24 matanlurey@users.noreply.github.com Delete (unused) `dev/checks_tool` directory (flutter/flutter#172715) 2025-07-24 34871572+gmackall@users.noreply.github.com [Android] Add missing ci configuration for `Linux android_java17_tool_integration_tests` (flutter/flutter#172702) 2025-07-24 srawlins@google.com Flutter-Cherrypick-Process.md - Spell cherry-pick consistently (flutter/flutter#172697) 2025-07-24 matanlurey@users.noreply.github.com Bringup `linux_web_engine_tests`; failing 4+ times in a row (flutter/flutter#172714) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: ...
…#169445) ### Respect user-data-dir flag from web-browser-flag Currently, it's already possible to pass `web-browser-flag` when launching Chrome, but the `user-data-dir` flag doesn't work as expected, and there are some reasons for that. In the implementation made in [PR flutter#104935](flutter#104935), the `web-browser-flag` is appended at the end of the Chrome launch arguments. For most scenarios, this works fine, as demonstrated in the Chrome unit test below: https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc ``` TEST(CommandLineTest, MultipleSameSwitch) { const CommandLine::CharType* argv[] = { FILE_PATH_LITERAL("program"), FILE_PATH_LITERAL("--foo=one"), // --foo first time FILE_PATH_LITERAL("-baz"), FILE_PATH_LITERAL("--foo=two") // --foo second time }; CommandLine cl(std::size(argv), argv); EXPECT_TRUE(cl.HasSwitch("foo")); EXPECT_TRUE(cl.HasSwitch("baz")); EXPECT_EQ("two", cl.GetSwitchValueASCII("foo")); } ``` In this scenario, the parser will consider the last occurrence of a flag. However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for `--user-data-dir`, which is parsed very early during Chrome startup. The proposed code checks whether `--user-data-dir` was provided via `web-browser-flag`, and if so, it uses that value instead of the default `%temp%\flutter_tools_chrome_device.xpto` temporary directory. This also resolve this comment: flutter#104935 (comment) Example: `launch.json` ``` { "version": "0.2.0", "configurations": [ { "name": "flutter", "request": "launch", "type": "dart" }, { "name": "flutter (profile mode)", "request": "launch", "type": "dart", "flutterMode": "profile" }, { "name": "flutter (release mode)", "request": "launch", "type": "dart", "flutterMode": "release" }, { "name": "Flutter for web (hot reloadable)", "type": "dart", "request": "launch", "program": "lib/main.dart", "args": [ "-d", "chrome", "--web-port=5000", "--web-experimental-hot-reload", "--web-browser-flag=--user-data-dir=D:\\_Desenv\\flutter_tests\\chrome_profile" ] } ] } ``` `chrome://version` | Before | After | |--------|--------| |  |  | Folder | Before | After | |--------|--------| |  |  | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
flutter#169445 was stale (not re-based), causing a tree failure. Let's just land this versus reverting.
…#169445) ### Respect user-data-dir flag from web-browser-flag Currently, it's already possible to pass `web-browser-flag` when launching Chrome, but the `user-data-dir` flag doesn't work as expected, and there are some reasons for that. In the implementation made in [PR flutter#104935](flutter#104935), the `web-browser-flag` is appended at the end of the Chrome launch arguments. For most scenarios, this works fine, as demonstrated in the Chrome unit test below: https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc ``` TEST(CommandLineTest, MultipleSameSwitch) { const CommandLine::CharType* argv[] = { FILE_PATH_LITERAL("program"), FILE_PATH_LITERAL("--foo=one"), // --foo first time FILE_PATH_LITERAL("-baz"), FILE_PATH_LITERAL("--foo=two") // --foo second time }; CommandLine cl(std::size(argv), argv); EXPECT_TRUE(cl.HasSwitch("foo")); EXPECT_TRUE(cl.HasSwitch("baz")); EXPECT_EQ("two", cl.GetSwitchValueASCII("foo")); } ``` In this scenario, the parser will consider the last occurrence of a flag. However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for `--user-data-dir`, which is parsed very early during Chrome startup. The proposed code checks whether `--user-data-dir` was provided via `web-browser-flag`, and if so, it uses that value instead of the default `%temp%\flutter_tools_chrome_device.xpto` temporary directory. This also resolve this comment: flutter#104935 (comment) Example: `launch.json` ``` { "version": "0.2.0", "configurations": [ { "name": "flutter", "request": "launch", "type": "dart" }, { "name": "flutter (profile mode)", "request": "launch", "type": "dart", "flutterMode": "profile" }, { "name": "flutter (release mode)", "request": "launch", "type": "dart", "flutterMode": "release" }, { "name": "Flutter for web (hot reloadable)", "type": "dart", "request": "launch", "program": "lib/main.dart", "args": [ "-d", "chrome", "--web-port=5000", "--web-experimental-hot-reload", "--web-browser-flag=--user-data-dir=D:\\_Desenv\\flutter_tests\\chrome_profile" ] } ] } ``` `chrome://version` | Before | After | |--------|--------| |  |  | Folder | Before | After | |--------|--------| |  |  | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
flutter#169445 was stale (not re-based), causing a tree failure. Let's just land this versus reverting.
…#169445) ### Respect user-data-dir flag from web-browser-flag Currently, it's already possible to pass `web-browser-flag` when launching Chrome, but the `user-data-dir` flag doesn't work as expected, and there are some reasons for that. In the implementation made in [PR flutter#104935](flutter#104935), the `web-browser-flag` is appended at the end of the Chrome launch arguments. For most scenarios, this works fine, as demonstrated in the Chrome unit test below: https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc ``` TEST(CommandLineTest, MultipleSameSwitch) { const CommandLine::CharType* argv[] = { FILE_PATH_LITERAL("program"), FILE_PATH_LITERAL("--foo=one"), // --foo first time FILE_PATH_LITERAL("-baz"), FILE_PATH_LITERAL("--foo=two") // --foo second time }; CommandLine cl(std::size(argv), argv); EXPECT_TRUE(cl.HasSwitch("foo")); EXPECT_TRUE(cl.HasSwitch("baz")); EXPECT_EQ("two", cl.GetSwitchValueASCII("foo")); } ``` In this scenario, the parser will consider the last occurrence of a flag. However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for `--user-data-dir`, which is parsed very early during Chrome startup. The proposed code checks whether `--user-data-dir` was provided via `web-browser-flag`, and if so, it uses that value instead of the default `%temp%\flutter_tools_chrome_device.xpto` temporary directory. This also resolve this comment: flutter#104935 (comment) Example: `launch.json` ``` { "version": "0.2.0", "configurations": [ { "name": "flutter", "request": "launch", "type": "dart" }, { "name": "flutter (profile mode)", "request": "launch", "type": "dart", "flutterMode": "profile" }, { "name": "flutter (release mode)", "request": "launch", "type": "dart", "flutterMode": "release" }, { "name": "Flutter for web (hot reloadable)", "type": "dart", "request": "launch", "program": "lib/main.dart", "args": [ "-d", "chrome", "--web-port=5000", "--web-experimental-hot-reload", "--web-browser-flag=--user-data-dir=D:\\_Desenv\\flutter_tests\\chrome_profile" ] } ] } ``` `chrome://version` | Before | After | |--------|--------| |  |  | Folder | Before | After | |--------|--------| |  |  | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
flutter#169445 was stale (not re-based), causing a tree failure. Let's just land this versus reverting.
…#169445) ### Respect user-data-dir flag from web-browser-flag Currently, it's already possible to pass `web-browser-flag` when launching Chrome, but the `user-data-dir` flag doesn't work as expected, and there are some reasons for that. In the implementation made in [PR flutter#104935](flutter#104935), the `web-browser-flag` is appended at the end of the Chrome launch arguments. For most scenarios, this works fine, as demonstrated in the Chrome unit test below: https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc ``` TEST(CommandLineTest, MultipleSameSwitch) { const CommandLine::CharType* argv[] = { FILE_PATH_LITERAL("program"), FILE_PATH_LITERAL("--foo=one"), // --foo first time FILE_PATH_LITERAL("-baz"), FILE_PATH_LITERAL("--foo=two") // --foo second time }; CommandLine cl(std::size(argv), argv); EXPECT_TRUE(cl.HasSwitch("foo")); EXPECT_TRUE(cl.HasSwitch("baz")); EXPECT_EQ("two", cl.GetSwitchValueASCII("foo")); } ``` In this scenario, the parser will consider the last occurrence of a flag. However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for `--user-data-dir`, which is parsed very early during Chrome startup. The proposed code checks whether `--user-data-dir` was provided via `web-browser-flag`, and if so, it uses that value instead of the default `%temp%\flutter_tools_chrome_device.xpto` temporary directory. This also resolve this comment: flutter#104935 (comment) Example: `launch.json` ``` { "version": "0.2.0", "configurations": [ { "name": "flutter", "request": "launch", "type": "dart" }, { "name": "flutter (profile mode)", "request": "launch", "type": "dart", "flutterMode": "profile" }, { "name": "flutter (release mode)", "request": "launch", "type": "dart", "flutterMode": "release" }, { "name": "Flutter for web (hot reloadable)", "type": "dart", "request": "launch", "program": "lib/main.dart", "args": [ "-d", "chrome", "--web-port=5000", "--web-experimental-hot-reload", "--web-browser-flag=--user-data-dir=D:\\_Desenv\\flutter_tests\\chrome_profile" ] } ] } ``` `chrome://version` | Before | After | |--------|--------| |  |  | Folder | Before | After | |--------|--------| |  |  | ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
flutter#169445 was stale (not re-based), causing a tree failure. Let's just land this versus reverting.
Respect user-data-dir flag from web-browser-flag
Currently, it's already possible to pass
web-browser-flagwhen launching Chrome, but theuser-data-dirflag doesn't work as expected, and there are some reasons for that.In the implementation made in PR #104935, the
web-browser-flagis appended at the end of the Chrome launch arguments.For most scenarios, this works fine, as demonstrated in the Chrome unit test below:
https://source.chromium.org/chromium/chromium/src/+/main:base/command_line_unittest.cc
In this scenario, the parser will consider the last occurrence of a flag.
However, this behavior does not apply to certain flags, because Chrome processes some of them based on the first occurrence, not the last. This is the case for
--user-data-dir, which is parsed very early during Chrome startup.The proposed code checks whether
--user-data-dirwas provided viaweb-browser-flag, and if so, it uses that value instead of the default%temp%\flutter_tools_chrome_device.xptotemporary directory.This also resolve this comment:
#104935 (comment)
Example:
launch.jsonchrome://versionFolder
Pre-launch Checklist
///).