Muhammad Saqib Javed fb865310c1
Restore CLI precedence for web headers and HTTPS over web_dev_config.yaml (#179639)
This PR restores the correct precedence behavior for web development
server configuration. Since Flutter 3.38, CLI arguments were being
ignored when `web_dev_config.yaml` was present — specifically for HTTPS
and headers.

According to the design and documentation, the precedence should be:

1. Command-line arguments (highest priority)
2. `web_dev_config.yaml`
3. Built-in defaults (lowest priority)

## Root Cause

The regression affected:

* **HTTP headers** — merge order was reversed, causing file config to
override CLI
* **HTTPS config** — CLI TLS arguments were ignored under certain
conditions

Note:
`--web-port` and `--web-hostname` were already working correctly due to
the `host ?? this.host` and `port ?? this.port` pattern.
The observed issue was due to headers + HTTPS only.

## Changes Made

* Fixed header merge order so CLI takes precedence
* Corrected HTTPS config resolution and precedence logic
* Unified logic across `run` and `drive` commands
* Simplified HTTPS handling using `HttpsConfig.parse()`
* Added tests for CLI precedence behavior

## Before (broken)

```
flutter run -d chrome --web-tls-cert-path cert.pem
```

 CLI TLS args ignored when config file existed
 headers overridden by file config

## After (fixed)

```
flutter run -d chrome --web-tls-cert-path cert.pem
```

 CLI TLS args respected
 headers override config as expected

## Tests

* Added tests verifying CLI takes precedence
* All existing and new tests pass
* No breaking changes introduced

## Fixes

Fixes: #179014

---------

Co-authored-by: Kevin Moore <kevmoo@google.com>
Co-authored-by: Kevin Moore <kevmoo@users.noreply.github.com>
Co-authored-by: Ben Konyi <bkonyi@google.com>
2026-01-06 21:11:05 +00:00
..