diff options
author | Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp> | 2018-05-20 02:22:11 +0900 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2018-05-19 19:22:11 +0200 |
commit | 4e1400cecb33743335fcf88b4d128aa1954c6c63 (patch) | |
tree | fea1d7e2b549c6454a44655478c110c5b4f9189a | |
parent | bcbb6aa46ff6f7c634b38e71bd719ccf52b84172 (diff) |
Cache media only when storage can be freed (#7547)
-rw-r--r-- | app/javascript/mastodon/service_worker/entry.js | 4 | ||||
-rw-r--r-- | app/javascript/mastodon/storage/modifier.js | 10 |
2 files changed, 8 insertions, 6 deletions
diff --git a/app/javascript/mastodon/service_worker/entry.js b/app/javascript/mastodon/service_worker/entry.js index 5955e9146..ce42271a9 100644 --- a/app/javascript/mastodon/service_worker/entry.js +++ b/app/javascript/mastodon/service_worker/entry.js @@ -1,4 +1,4 @@ -import { freeStorage } from '../storage/modifier'; +import { freeStorage, storageFreeable } from '../storage/modifier'; import './web_push_notifications'; function openSystemCache() { @@ -49,7 +49,7 @@ self.addEventListener('fetch', function(event) { return response; })); - } else if (process.env.CDN_HOST ? url.host === process.env.CDN_HOST : url.pathname.startsWith('/system/')) { + } else if (storageFreeable && process.env.CDN_HOST ? url.host === process.env.CDN_HOST : url.pathname.startsWith('/system/')) { event.respondWith(openSystemCache().then(cache => { return cache.match(event.request.url).then(cached => { if (cached === undefined) { diff --git a/app/javascript/mastodon/storage/modifier.js b/app/javascript/mastodon/storage/modifier.js index a42b6ab12..9fadabef4 100644 --- a/app/javascript/mastodon/storage/modifier.js +++ b/app/javascript/mastodon/storage/modifier.js @@ -4,6 +4,11 @@ const accountAssetKeys = ['avatar', 'avatar_static', 'header', 'header_static']; const storageMargin = 8388608; const storeLimit = 1024; +// navigator.storage is not present on: +// Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.100 Safari/537.36 Edge/16.16299 +// estimate method is not present on Chrome 57.0.2987.98 on Linux. +export const storageFreeable = 'storage' in navigator && 'estimate' in navigator.storage; + function openCache() { // ServiceWorker and Cache API is not available on iOS 11 // https://webkit.org/status/#specification-service-workers @@ -182,10 +187,7 @@ export function putStatuses(records) { } export function freeStorage() { - // navigator.storage is not present on: - // Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.100 Safari/537.36 Edge/16.16299 - // estimate method is not present on Chrome 57.0.2987.98 on Linux. - return 'storage' in navigator && 'estimate' in navigator.storage && navigator.storage.estimate().then(({ quota, usage }) => { + return storageFreeable && navigator.storage.estimate().then(({ quota, usage }) => { if (usage + storageMargin < quota) { return null; } |