about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAkihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>2018-05-20 02:22:11 +0900
committerEugen Rochko <eugen@zeonfederated.com>2018-05-19 19:22:11 +0200
commit4e1400cecb33743335fcf88b4d128aa1954c6c63 (patch)
treefea1d7e2b549c6454a44655478c110c5b4f9189a
parentbcbb6aa46ff6f7c634b38e71bd719ccf52b84172 (diff)
Cache media only when storage can be freed (#7547)
-rw-r--r--app/javascript/mastodon/service_worker/entry.js4
-rw-r--r--app/javascript/mastodon/storage/modifier.js10
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;
     }