From 728cedc62a795efa6eadd45a3a5d194fcd76023e Mon Sep 17 00:00:00 2001 From: Dominik Toton <166132265+dtscalac@users.noreply.github.com> Date: Thu, 21 Nov 2024 21:40:11 +0100 Subject: [PATCH] Fix `--web-header` flag for `flutter drive` (#159039) This PR makes sure that `--web-header` flag works together with the `flutter drive` command. Currently the flag is correctly parsed but it is not properly propagated and ends up being unused when running the web server for tests. I have validated the fix by following the steps to reproduce from: https://github.com/flutter/flutter/issues/159037. #### Before the fix No custom HTTP header in test run: ![Screenshot 2024-11-16 at 22 21 36](https://github.com/user-attachments/assets/b3d4e34b-fe2b-4d32-8b0a-2d55e5d23f69) #### After the fix Correct HTTP headers in test run: ![Screenshot 2024-11-16 at 22 13 43](https://github.com/user-attachments/assets/b74a41de-69c5-4968-82c0-a08d29a3252d) Fixes #159037 ## 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. [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 --- .../lib/src/drive/web_driver_service.dart | 2 ++ .../drive/web_driver_service_test.dart | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/flutter_tools/lib/src/drive/web_driver_service.dart b/packages/flutter_tools/lib/src/drive/web_driver_service.dart index 8958a4150b781..a0b5c7296a450 100644 --- a/packages/flutter_tools/lib/src/drive/web_driver_service.dart +++ b/packages/flutter_tools/lib/src/drive/web_driver_service.dart @@ -78,6 +78,7 @@ class WebDriverService extends DriverService { hostname: debuggingOptions.hostname, webRenderer: debuggingOptions.webRenderer, webUseWasm: debuggingOptions.webUseWasm, + webHeaders: debuggingOptions.webHeaders, ) : DebuggingOptions.enabled( buildInfo, @@ -86,6 +87,7 @@ class WebDriverService extends DriverService { disablePortPublication: debuggingOptions.disablePortPublication, webRenderer: debuggingOptions.webRenderer, webUseWasm: debuggingOptions.webUseWasm, + webHeaders: debuggingOptions.webHeaders, ), stayResident: true, flutterProject: FlutterProject.current(), diff --git a/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart b/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart index 8854e2c7a6283..9d08262a09697 100644 --- a/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart +++ b/packages/flutter_tools/test/general.shard/drive/web_driver_service_test.dart @@ -270,6 +270,17 @@ void main() { WebRunnerFactory: () => FakeWebRunnerFactory(), }); + testUsingContext('WebDriverService starts an app with provided web headers', () async { + final WebDriverService service = setUpDriverService(); + final FakeDevice device = FakeDevice(); + final Map webHeaders = {'test-header': 'test-value'}; + await service.start(BuildInfo.profile, device, DebuggingOptions.enabled(BuildInfo.profile, webHeaders: webHeaders, ipv6: true)); + await service.stop(); + expect(FakeResidentRunner.instance.debuggingOptions.webHeaders, equals(webHeaders)); + }, overrides: { + WebRunnerFactory: () => FakeWebRunnerFactory(), + }); + testUsingContext('WebDriverService will throw when an invalid launch url is provided', () async { final WebDriverService service = setUpDriverService(); final FakeDevice device = FakeDevice(); @@ -310,7 +321,7 @@ class FakeWebRunnerFactory implements WebRunnerFactory { bool? stayResident, FlutterProject? flutterProject, bool? ipv6, - DebuggingOptions? debuggingOptions, + required DebuggingOptions debuggingOptions, UrlTunneller? urlTunneller, Logger? logger, FileSystem? fileSystem, @@ -322,6 +333,7 @@ class FakeWebRunnerFactory implements WebRunnerFactory { expect(stayResident, isTrue); return FakeResidentRunner( doResolveToError: doResolveToError, + debuggingOptions: debuggingOptions, ); } } @@ -329,6 +341,7 @@ class FakeWebRunnerFactory implements WebRunnerFactory { class FakeResidentRunner extends Fake implements ResidentRunner { FakeResidentRunner({ required this.doResolveToError, + required this.debuggingOptions, }) { instance = this; } @@ -336,6 +349,8 @@ class FakeResidentRunner extends Fake implements ResidentRunner { static late FakeResidentRunner instance; final bool doResolveToError; + @override + final DebuggingOptions debuggingOptions; final Completer _exitCompleter = Completer(); final List callLog = [];