Workaround for DomException when invoking cache.put (#22756)
* Workaround for DomException when invoking cache.put Invoking cache.put could sometimes result in exceptions being thrown. While this seems to have been fixed in Chromium - https://bugs.chromium.org/p/chromium/issues/detail?id=968444, we've had several reports of this in our repo. The fix here is to write defensively when working with the cache apis since they appear to behave in unexpected ways.. Fixes https://github.com/dotnet/aspnetcore/issues/20256 * Fixup
This commit is contained in:
parent
812f2f8145
commit
8e813eea24
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -85,7 +85,14 @@ export class WebAssemblyResourceLoader {
|
|||
const cacheKey = toAbsoluteUri(`${url}.${contentHash}`);
|
||||
this.usedCacheKeys[cacheKey] = true;
|
||||
|
||||
const cachedResponse = await cache.match(cacheKey);
|
||||
let cachedResponse: Response | undefined;
|
||||
try {
|
||||
cachedResponse = await cache.match(cacheKey);
|
||||
} catch {
|
||||
// Be tolerant to errors reading from the cache. This is a guard for https://bugs.chromium.org/p/chromium/issues/detail?id=968444 where
|
||||
// chromium browsers may sometimes throw when working with the cache.
|
||||
}
|
||||
|
||||
if (cachedResponse) {
|
||||
// It's in the cache.
|
||||
const responseBytes = parseInt(cachedResponse.headers.get('content-length') || '0');
|
||||
|
|
@ -136,12 +143,19 @@ export class WebAssemblyResourceLoader {
|
|||
|
||||
// Add to cache as a custom response object so we can track extra data such as responseBytes
|
||||
// We can't rely on the server sending content-length (ASP.NET Core doesn't by default)
|
||||
await cache.put(cacheKey, new Response(responseData, {
|
||||
const responseToCache = new Response(responseData, {
|
||||
headers: {
|
||||
'content-type': response.headers.get('content-type') || '',
|
||||
'content-length': (responseBytes || response.headers.get('content-length') || '').toString()
|
||||
}
|
||||
}));
|
||||
});
|
||||
|
||||
try {
|
||||
await cache.put(cacheKey, responseToCache);
|
||||
} catch {
|
||||
// Be tolerant to errors writing to the cache. This is a guard for https://bugs.chromium.org/p/chromium/issues/detail?id=968444 where
|
||||
// chromium browsers may sometimes throw when performing cache operations.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue