Commit graph

26 commits

Author SHA1 Message Date
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