30 Commits

Author SHA1 Message Date
Jackson Gardner
6b17f99216
Make service worker tests more lenient. (#170939)
Some of these request paths are not guaranteed to be requested by the
time the test is finished, which makes this test somewhat flaky. We
don't really care about verifying these requests specifically anyway, so
just don't track them or compare them to our expectations.

This fixes https://github.com/flutter/flutter/issues/171025
2025-06-23 20:28:24 +00:00
Jackson Gardner
dbb105a74d
Reland lazy path and object arenas (#170303)
This PR is an attempt to reland
https://github.com/flutter/flutter/pull/168996

There were some issues that cropped up in the `web_long_running_test`
shards. However, it turns out that these tests don't actually run in
presubmit on any PR that has any engine changes, which is not ideal. I
modified the long running tests to run in presubmit, but this had issues
because apparently a big chunk of these integration tests actually are
trying to download canvaskit from CDN. I changed almost all of the tests
to use local canvaskit (which should make them more reliable and
hermetic). There is one test whose job is to actually test the CDN
itself, and I am leaving that disabled in presubmit for PRs that have
engine changes (since the engine artifacts won't be uploaded to CDN yet)
but the rest of them are all running and passing now.

Also, I fixed the underlying issue that was exposed by the long running
tests, which is that the CanvasKit path clipping stuff in the layer
visitor needs to be aware of LazyPath.
2025-06-16 18:31:10 +00:00
Kevin Moore
398fdee2af
dev/bots: improve service worker test code (#169231)
Use `foundError` instead of throwing - as is recommended
DRASTICALLY improve the error output by copying (more) from pkg:matcher
2025-05-28 02:29:31 +00:00
Michael Goderbauer
5491c8c146
Auto-format Framework (#160545)
This auto-formats all *.dart files in the repository outside of the
`engine` subdirectory and enforces that these files stay formatted with
a presubmit check.

**Reviewers:** Please carefully review all the commits except for the
one titled "formatted". The "formatted" commit was auto-generated by
running `dev/tools/format.sh -a -f`. The other commits were hand-crafted
to prepare the repo for the formatting change. I recommend reviewing the
commits one-by-one via the "Commits" tab and avoiding Github's "Files
changed" tab as it will likely slow down your browser because of the
size of this PR.

---------

Co-authored-by: Kate Lovett <katelovett@google.com>
Co-authored-by: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com>
2024-12-19 20:06:21 +00:00
Jackson Gardner
3c30e3cb20
Flutter Web Bootstrapping Improvements (#144434)
This makes several changes to flutter web app bootstrapping.
* The build now produces a `flutter_bootstrap.js` file.
  * By default, this file does the basic streamlined startup of a flutter app with the service worker settings and no user configuration.
  * The user can also put a `flutter_bootstrap.js` file in the `web` subdirectory in the project directory which can have whatever custom bootstrapping logic they'd like to write instead. This file is also templated, and can use any of the tokens  that can be used with the `index.html` (with the exception of `{{flutter_bootstrap_js}}`, see below).
* Introduced a few new templating tokens for `index.html`:
  * `{{flutter_js}}` => inlines the entirety of `flutter.js`
  * `{{flutter_service_worker_version}}` => replaced directly by the service worker version. This can be used instead of the script that sets the `serviceWorkerVersion` local variable that we used to have by default.
  * `{{flutter_bootstrap_js}}` => inlines the entirety of `flutter_bootstrap.js` (this token obviously doesn't apply to `flutter_bootstrap.js` itself).
* Changed `IndexHtml` to be called `WebTemplate` instead, since it is used for more than just the index.html now.
* We now emit warnings at build time for certain deprecated flows:
  * Warn on the old service worker version pattern (i.e.`(const|var) serviceWorkerVersion = null`) and recommends using `{{flutter_service_worker_version}}` token instead
  * Warn on use of `FlutterLoader.loadEntrypoint` and recommend using `FlutterLoader.load` instead
  * Warn on manual loading of `flutter_service_worker.js`.
* The default `index.html` on `flutter create` now uses an async script tag with `flutter_bootstrap.js`.
2024-03-12 22:41:26 +00:00
Nate
3267fbc07a
Implement switch expressions in dev/ (#139048)
I previously made a PR (#136140) that used `switch` expressions to make some parts of the Flutter codebase easier to understand. It was assigned to the framework team, and @christopherfujino let me know that it was too large to effectively review and recommended breaking it up into smaller pull requests.

Here's a PR that only targets files in the `dev/` directory. Hopefully this will be easier to work with!

(solves issue https://github.com/flutter/flutter/issues/136139)
2023-11-28 23:40:28 +00:00
David Iglesias
15ccf24d79
[web] Add 'nonce' prop to flutter.js loadEntrypoint (#137204)
## Description

This PR adds a `nonce` parameter to flutter.js' `loadEntrypoint` method.

When set, loadEntrypoint will add a `nonce` attribute to the `main.dart.js` script tag, which allows Flutter to run in environments slightly more restricted by CSP; those that don't add `'self'` as a valid source for `script-src`.

----

### CSP directive

After this change, the CSP directive for a Flutter Web index.html can be:

```
script-src 'nonce-YOUR_NONCE_VALUE' 'wasm-unsafe-eval';
font-src https://fonts.gstatic.com;
style-src 'nonce-YOUR_NONCE_VALUE';
```

When CSP is set via a `meta` tag (like in the test accompanying this change), and to use a service worker, the CSP needs an additional directive: [`worker-src 'self';`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/worker-src)

When CSP set via response headers, the CSP that applies to `flutter_service_worker.js` is determined by its response headers. See **Web Workers API > [Content security policy](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#content_security_policy)** in MDN.)

----

### Initialization

If the CSP is set to disallow `script-src 'self'`, a nonce needs to also be passed to `loadEntrypoint`:

```javascript
  _flutter.loader.loadEntrypoint({
    nonce: 'SOME_NONCE',
    onEntrypointLoaded: (engineInitializer) async {
      const appRunner = await engineInitializer.initializeEngine({
        nonce: 'SOME_NONCE',
      });
      appRunner.runApp();
    },
  });
```

(`nonce` shows twice for now, because the entrypoint loader script doesn't have direct access to the `initializeEngine` call.)

----

## Tests

* Added a smoke test to ensure an app configured as described above starts.

## Issues

* Fixes https://github.com/flutter/flutter/issues/126977
2023-10-27 21:05:06 +00:00
Andrew Kolos
423897413d
update asset manifest file name referenced in WebServiceWorker (#135954)
Closes https://github.com/flutter/flutter/issues/130455.

Updates the name `WebServiceWorker` uses to reference the asset manifest file to the name of the new file generated since   https://github.com/flutter/flutter/pull/131382. This will make Flutter web apps correctly prefetch the asset manifest file.
2023-10-27 06:18:20 +00:00
Pavel Mazhnik
783f2f4830
[web] provide serviceWorkerVersion to the getNewServiceWorker function (#131240)
Fixes https://github.com/flutter/flutter/issues/130212

Fix `Unresolved variable or type 'serviceWorkerVersion'` in the `_getNewServiceWorker` function.  

Supersedes https://github.com/flutter/flutter/pull/130206
2023-09-14 22:17:08 +00:00
Harry Terkelsen
4e58370cbf
Use Web resources CDN in service_worker_test by default (#123360) 2023-03-23 17:00:20 -07:00
Michael Goderbauer
fda9ecfef7
Remove 1745 decorative breaks (#123259)
Remove 1745 decorative breaks
2023-03-22 21:12:22 +00:00
Greg Price
98b3e48ed4
Fix hang on successful dev/bots/analyze.dart (#117660)
Fixes #117659

It turns out this was due to the output-suppression timer introduced
recently as part of cleaning up the output (#109206); on success, the
script would wait 10 minutes for the timeout to expire.  This didn't
affect CI because this feature doesn't apply in CI (as detected by
lack of color on stdout.)

Fix the issue by cleaning up the timer on success in the same way
as on failure.

While here, clean up the final summary messages slightly,
and also cut the trailing space that printProgress was leaving
on each line.
2023-02-08 00:04:23 +00:00
David Landeros
c5ceff11dd
[flutter_tools] Ensure service worker starts caching assets since first load (#116833)
* [Flutter_tools] Ensure service worker starts caching assets since the first launch

* [flutter_tools] add comment to give some context on self.clients.claim()

* [flutter_tools] add comment to give some context on self.clients.claim()
2023-01-19 21:52:52 +00:00
David Iglesias
883469229e
[web] Use TrustedTypes in flutter.js and other tools (#112969) 2022-10-21 16:03:51 +00:00
Yegor
6e57ed6088
[web] fix hot restart in entrypoint generated by flutter create (#110229) 2022-08-25 20:30:00 +00:00
Ian Hickson
97901da149
Cleaner test.dart output. (#109206) 2022-08-14 08:53:54 +00:00
Ian Hickson
03aa059c3c
Do not abort at first error when tests fail. (#108936) 2022-08-05 16:18:54 -07:00
David Iglesias
04f7ea8459
[web] Add onEntrypointLoaded to FlutterLoader. (#108776) 2022-08-03 20:58:06 +00:00
David Iglesias
b1b1ee9ca6
[web] Fix JS crash when FF blocks service workers. (#106072) 2022-06-17 02:22:07 +00:00
Dacian Florea
680bc17cde
[web] [fix] Cache resource data only if the fetching succeed (#103816) 2022-05-24 16:23:06 -07:00
David Iglesias
1af8cc1183
[tools][web] Make Plugin Registrant file ephemeral. (#102185) 2022-05-11 17:54:11 -07:00
Alexandre Ardhuin
07f1c20474
add missing trailing commas in list/set/map literals (#102585) 2022-04-27 09:15:35 +02:00
David Iglesias
bee95b6984
[flutter.js] Wait for reg.update, then activate sw (if not active yet). (#101464) 2022-04-11 19:04:08 -07:00
nicolasvac
201a64c98f
Fix flutter web app not respecting assets path when in non-root folder (#96774) 2022-03-10 15:50:16 -08:00
Christopher Fujino
09c7eb1b88
fix type error in service_worker_test.dart (#99524) 2022-03-04 11:56:17 -08:00
Michael Goderbauer
045ba2b661
Migrate dev/bots to null safety (#86522) 2021-07-19 13:59:15 -07:00
Yegor
0420d56335
consolidate all web integration tests under the same shard (#82307)
* consolidate all web integration tests under the same shard
2021-05-12 15:01:11 -07:00
Phil Quitslund
61c30c41b2
fix sort_directives violations (#80817) 2021-04-21 13:49:03 -07:00
Yegor
e7953b3be4
[web] new service worker loading mechanism (#75535) 2021-02-11 09:16:21 -08:00
Jonah Williams
631087d83b
[flutter_tools] cache-bust in service worker (#56786) 2020-05-16 14:57:04 -07:00