[flutter_tools] automatically update to latest sw on install (#65784)
If a new service worker is installed, automatically update this behind the scenes. Immediately after a page refresh, the new worker and cache will be available, though the main.dart.js and others will be available sooner due to the cache busting URLS
diff --git a/packages/flutter_tools/lib/src/build_system/targets/web.dart b/packages/flutter_tools/lib/src/build_system/targets/web.dart
index 773eb80..cdf866b 100644
--- a/packages/flutter_tools/lib/src/build_system/targets/web.dart
+++ b/packages/flutter_tools/lib/src/build_system/targets/web.dart
@@ -476,6 +476,7 @@
${coreBundle.map((String file) => '"$file"').join(',\n')}];
// During install, the TEMP cache is populated with the application shell files.
self.addEventListener("install", (event) => {
+ skipWaiting();
return event.waitUntil(
caches.open(TEMP).then((cache) => {
return cache.addAll(
@@ -579,10 +580,12 @@
// SkipWaiting can be used to immediately activate a waiting service worker.
// This will also require a page refresh triggered by the main worker.
if (event.data === 'skipWaiting') {
- return self.skipWaiting();
+ skipWaiting();
+ return;
}
- if (event.message === 'downloadOffline') {
+ if (event.data === 'downloadOffline') {
downloadOffline();
+ return;
}
});
@@ -628,5 +631,11 @@
})
);
}
+
+function skipWaiting() {
+ if (self.skipWaiting != undefined) {
+ self.skipWaiting();
+ }
+}
''';
}