diff --git a/app/assets/javascripts/service-worker.js.erb b/app/assets/javascripts/service-worker.js.erb index 52236616ec3..5f16ce4653e 100644 --- a/app/assets/javascripts/service-worker.js.erb +++ b/app/assets/javascripts/service-worker.js.erb @@ -13,11 +13,15 @@ var cacheVersion = "1"; var discourseCacheName = "discourse-" + cacheVersion; var externalCacheName = "external-" + cacheVersion; -// Cache all GET requests, so Discourse can be used while offline +// Chrome 97 shipped with broken samesite cookie handling when proxying requests through service workers +// https://bugs.chromium.org/p/chromium/issues/detail?id=1286367 +var chromeVersionMatch = navigator.userAgent.match(/Chrome\/97.0.(\d+)/); +var isBrokenChrome97 = chromeVersionMatch && parseInt(chromeVersionMatch[1]) <= 4692; +// Cache all GET requests, so Discourse can be used while offline workbox.routing.registerRoute( function(args) { - return args.url.origin === location.origin && !authUrls.some(u => args.url.pathname.startsWith(u)); + return args.url.origin === location.origin && !authUrls.some(u => args.url.pathname.startsWith(u)) && !isBrokenChrome97; }, // Match all except auth routes new workbox.strategies.NetworkFirst({ // This will only use the cache when a network request fails cacheName: discourseCacheName,