Fix --web-header flag for flutter drive (#159039)

<!--
Thanks for filing a pull request!
Reviewers are typically assigned within a week of filing a request.
To learn more about code review, see our documentation on Tree Hygiene:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
-->

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.

<!-- 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
This commit is contained in:
Dominik Toton 2024-11-21 21:40:11 +01:00 committed by GitHub
parent d7f5547ecd
commit 728cedc62a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 1 deletions

View File

@ -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(),

View File

@ -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<String, String> webHeaders = <String, String>{'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: <Type, Generator>{
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<int> _exitCompleter = Completer<int>();
final List<String> callLog = <String>[];