Просмотр исходного кода

Merge pull request #4223 from overleaf/bg-load-server-worker-timeout

add timeout on loading of service worker

GitOrigin-RevId: d2153c9abf1dbd6eee3b2fcfd770a21766ebb84e
Timothée Alby 5 лет назад
Родитель
Сommit
866e2f0aab

+ 1 - 1
services/web/frontend/js/ide.js

@@ -369,7 +369,7 @@ If the project has been renamed please look in your project list for a new proje
 if (getMeta('ol-resetServiceWorker')) {
   unregisterServiceWorker()
 } else if (getMeta('ol-enablePdfCaching')) {
-  loadServiceWorker()
+  loadServiceWorker({ timeout: 5000 })
 }
 
 export default angular.bootstrap(document.body, ['SharelatexApp'])

+ 10 - 2
services/web/frontend/js/ide/pdfng/directives/serviceWorkerManager.js

@@ -11,9 +11,9 @@ export function waitForServiceWorker() {
   return pendingWorkerSetup
 }
 
-export function loadServiceWorker() {
+export function loadServiceWorker(options) {
   if (supportsServiceWorker()) {
-    pendingWorkerSetup = navigator.serviceWorker
+    const workerSetup = navigator.serviceWorker
       .register('/serviceWorker.js', {
         scope: '/project/',
       })
@@ -38,6 +38,14 @@ export function loadServiceWorker() {
       .catch(error =>
         captureException(OError.tag(error, 'Cannot register serviceWorker'))
       )
+    if (options && options.timeout > 0) {
+      const workerTimeout = new Promise(resolve => {
+        setTimeout(resolve, options.timeout)
+      })
+      pendingWorkerSetup = Promise.race([workerSetup, workerTimeout])
+    } else {
+      pendingWorkerSetup = workerSetup
+    }
   }
 }