Skip to content

Commit bb5c340

Browse files
[flutter_tools] cache the base URL as index.html (flutter#53666)
1 parent d62c7ec commit bb5c340

File tree

2 files changed

+19
-0
lines changed
  • packages/flutter_tools

2 files changed

+19
-0
lines changed

packages/flutter_tools/lib/src/build_system/targets/web.dart

+4
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,10 @@ class WebServiceWorker extends Target {
354354
).toString();
355355
final String hash = md5.convert(await file.readAsBytes()).toString();
356356
urlToHash[url] = hash;
357+
// Add an additional entry for the base URL.
358+
if (globals.fs.path.basename(url) == 'index.html') {
359+
urlToHash['/'] = hash;
360+
}
357361
}
358362

359363
final File serviceWorkerFile = environment.outputDir

packages/flutter_tools/test/general.shard/build_system/targets/web_test.dart

+15
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,21 @@ void main() {
462462
// Depends on resource file.
463463
expect(environment.buildDir.childFile('service_worker.d').readAsStringSync(), contains('a/a.txt'));
464464
}));
465+
466+
test('WebServiceWorker contains baseUrl cache', () => testbed.run(() async {
467+
environment.outputDir
468+
.childFile('index.html')
469+
.createSync(recursive: true);
470+
await const WebServiceWorker().build(environment);
471+
472+
expect(environment.outputDir.childFile('flutter_service_worker.js'), exists);
473+
// Contains file hash for both `/` and index.html.
474+
expect(environment.outputDir.childFile('flutter_service_worker.js').readAsStringSync(),
475+
contains('"/": "d41d8cd98f00b204e9800998ecf8427e"'));
476+
expect(environment.outputDir.childFile('flutter_service_worker.js').readAsStringSync(),
477+
contains('"index.html": "d41d8cd98f00b204e9800998ecf8427e"'));
478+
expect(environment.buildDir.childFile('service_worker.d'), exists);
479+
}));
465480
}
466481

467482
class MockProcessManager extends Mock implements ProcessManager {}

0 commit comments

Comments
 (0)